diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/AUTHORS ns-3.45/AUTHORS
--- ns-3.44/AUTHORS	2025-03-09 16:55:49.223370600 -0700
+++ ns-3.45/AUTHORS	2025-06-01 20:34:45.173700800 -0700
@@ -177,6 +177,7 @@
 Katerina Koutlia (katerina.koutlia@cttc.es)
 Aleksey Kovalenko (kovalenko@iitp.ru)
 Hossam Khader (hossamkhader@gmail.com)
+Daniel Kopacz (denykop@tuta.io)
 Alexander Krotov (ilabdsf@yandex.ru)
 Deepak Kumaraswamy (deepakkavoor99@gmail.com)
 Mathieu Lacage (mathieu.lacage@inria.fr)
@@ -249,6 +250,7 @@
 Lluís Parcerisa (parcerisa@gmail.com)
 Mingyu Park (darkpmg@naver.com)
 Harsh Patel (thadodaharsh10@gmail.com)
+Shashwat Patni (f20230390@goa.bits-pilani.ac.in)
 Natale Patriciello (natale.patriciello@gmail.com)
 Pavinberg (pavin0702@gmail.com)
 Tommaso Pecorella (tommaso.pecorella@unifi.it)
@@ -303,6 +305,7 @@
 Robert R. Schmidt (rschmi@gmx.net)
 Florian Schmidt (Florian.Schmidt@cs.rwth-aachen.de)
 Michael Scoggin (mpscogg@sandia.gov)
+Surya (suryamariappan9108@gmail.com)
 Surya Seetharaman (suryaseetharaman.9@gmail.com)
 Guillaume Seguin (guillaume.seguin@inria.fr)
 Ioannis Selinis (selinis.g@gmail.com)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/bindings/python/ns__init__.py ns-3.45/bindings/python/ns__init__.py
--- ns-3.44/bindings/python/ns__init__.py	2025-03-09 16:55:49.231370400 -0700
+++ ns-3.45/bindings/python/ns__init__.py	2025-06-01 20:34:45.178700700 -0700
@@ -351,6 +351,9 @@
 def find_ns3_from_search() -> (str, list, str):
     libraries = search_libraries("ns3")
 
+    # Filter in libraries prefixed with libns3
+    libraries = list(filter(lambda x: "libns3" in x, libraries))
+
     if not libraries:
         raise Exception("ns-3 libraries were not found.")
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/build-support/custom-modules/ns3-coverage.cmake ns-3.45/build-support/custom-modules/ns3-coverage.cmake
--- ns-3.44/build-support/custom-modules/ns3-coverage.cmake	2025-03-09 16:55:49.231370400 -0700
+++ ns-3.45/build-support/custom-modules/ns3-coverage.cmake	2025-06-01 20:34:45.179700900 -0700
@@ -33,13 +33,15 @@
   add_custom_target(
     coverage_gcc
     COMMAND lcov -o ns3.info -c --directory ${CMAKE_BINARY_DIR} ${zero_counters}
+            --keep-going --ignore-errors inconsistent
     WORKING_DIRECTORY ${CMAKE_OUTPUT_DIRECTORY}/coverage
     DEPENDS run_test_py
   )
 
   add_custom_target(
     coverage_html
-    COMMAND genhtml ns3.info
+    COMMAND genhtml --ignore-errors inconsistent --ignore-errors corrupt
+            ns3.info -o ./html
     WORKING_DIRECTORY ${CMAKE_OUTPUT_DIRECTORY}/coverage
     DEPENDS coverage_gcc
   )
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/build-support/macros-and-definitions.cmake ns-3.45/build-support/macros-and-definitions.cmake
--- ns-3.44/build-support/macros-and-definitions.cmake	2025-03-09 16:55:49.231370400 -0700
+++ ns-3.45/build-support/macros-and-definitions.cmake	2025-06-01 20:34:45.180700800 -0700
@@ -630,6 +630,7 @@
 
   set(Python3_LIBRARIES)
   set(Python3_EXECUTABLE)
+  set(Python_EXECUTABLE)
   set(Python3_FOUND FALSE)
   set(Python3_INCLUDE_DIRS)
   set(Python3_Interpreter_FOUND FALSE)
@@ -850,12 +851,14 @@
     cmake_policy(SET CMP0167 NEW)
   endif()
   mark_as_advanced(Boost_INCLUDE_DIR)
-  find_package(Boost)
+  find_package(Boost QUIET)
   if(${Boost_FOUND})
     if(NOT ${NS3_FORCE_LOCAL_DEPENDENCIES})
       include_directories(${Boost_INCLUDE_DIRS})
     endif()
     set(CMAKE_REQUIRED_INCLUDES ${Boost_INCLUDE_DIRS})
+  else()
+    message(${HIGHLIGHTED_STATUS} "Boost was not found")
   endif()
 
   set(GSL_FOUND FALSE)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/CHANGES.md ns-3.45/CHANGES.md
--- ns-3.44/CHANGES.md	2025-03-09 16:56:09.311445500 -0700
+++ ns-3.45/CHANGES.md	2025-06-01 20:34:45.175700700 -0700
@@ -12,6 +12,39 @@
 
 This file is a best-effort approach to solving this issue; we will do our best but can guarantee that there will be things that fall through the cracks, unfortunately. If you, as a user, can suggest improvements to this file based on your experience, please contribute a patch or drop us a note on ns-developers mailing list.
 
+## Changes from ns-3.44 to ns-3.45
+
+### New API
+
+* (network) Added a function to detect IPv4 APIPA addresses (169.254.0.0/16).
+* (wifi) Added a new `AssocType` attribute to `StaWifiMac` to configure the type of association performed by a device, provided that it is supported by the standard configured for the device. By using this attribute, it is possible for an EHT single-link device to perform ML setup with an AP MLD and for an EHT multi-link device to perform legacy association with an AP MLD.
+* (wifi) Added a new attribute `Per20CcaSensitivityThreshold` to `EhtConfiguration` for tuning the Per 20MHz CCA threshold when 802.11be is used.
+* (wifi) Added a new `MaxRadioBw` attribute to `WifiPhy` to configure the maximum width supported by the radio.
+* (wifi) Added a new attribute (`KeepMainPhyAfterDlTxop`) to the `AdvancedEmlsrManager` to control whether, after the end of a DL TXOP carried out on an aux PHY link, the main PHY shall stay on that link (for a switch main PHY back delay) in the attempt to gain an UL TXOP. This attribute is applicable to the case in which aux PHYs are not TX capable and do not switch link.
+
+### Changes to existing API
+
+* (core) ``Object::GetInstanceTypeId()`` can no longer be specialized by subclasses and any such subclass API should be deleted (the base class will handle it).
+* (dsr) Reformatted documentation and added a new concept figure.
+* (flow-monitor) Reformatted documentation and added a new concept figure.
+* (internet-apps) Added a parameter to the RADVD helper to announce a prefix without the autoconfiguration flag.
+* (internet-apps) Added `DhcpV6` application support.
+* (lr-wpan) - Renamed example ``lr-wpan\examples\lr-wpan-mlme.cc`` to ``lr-wpan\examples\lr-wpan-beacon-mode.cc``.
+* (lr-wpan) - Update correct use of extended addresses in ``lr-wpan\examples\lr-wpan-data.cc``.
+* (wifi) Callbacks connected to the `WifiMac::IcfDropReason` trace source are now passed a `struct IcfDropInfo` object that has three fields indicating the reason for dropping the ICF, the ID of the link on which the ICF was dropped and the MAC address of the sender of the ICF.
+* (wifi) Obsoleted the `Support40MHzOperation` and `Support160MHzOperation` attributes from the HT/VHT configurations. These capabilities are now directly derived from the `ChannelSettings` attribute.
+* (wifi) The `EmlsrSwitchMainPhyBackTrace` has been extended to provide the time elapsed since the switch main PHY back timer started, the reason why the main PHY switches back before the expiration of the switch main PHY back timer and whether the main PHY is switching while it is requested to switch back.
+
+### Changes to build system
+
+* The ns-allinone release has been redesigned; it no longer includes ``netanim`` or ``bake`` but instead includes ns-3 plus compatible contributed modules.
+
+### Changed behavior
+
+* (docs) Models documentation format guidelines have been updated.
+* (zigbee) Adjust pedantic link cost requirement in ``NeighborTable::LookUpForBestParent``, a minimum link cost of 3 is not required now.
+* (wifi) Normal Ack, BlockAck and BlockAckReq frames are transmitted, if appropriate, as non-HT duplicate PPDUs on a bandwidth matching that of the data frame transmitted in the same frame exchange sequence.
+
 ## Changes from ns-3.43 to ns-3.44
 
 ### New API
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/doc/contributing/source/coding-style.rst ns-3.45/doc/contributing/source/coding-style.rst
--- ns-3.44/doc/contributing/source/coding-style.rst	2025-03-09 16:55:49.235370600 -0700
+++ ns-3.45/doc/contributing/source/coding-style.rst	2025-06-01 20:34:45.182700900 -0700
@@ -43,6 +43,8 @@
 The following list contains the set of clang-format versions that are verified
 to produce consistent output among themselves.
 
+* clang-format-19
+* clang-format-18
 * clang-format-17
 * clang-format-16
 * clang-format-15
@@ -1064,6 +1066,60 @@
   /// Node container with the Wi-Fi stations
   NodeContainer wifiStations(3);
 
+Comments in closing braces are generally discouraged, to allow for consistent style
+formatting across recent versions of clang-format (see MRs
+`!1899 <https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/1899>`_ and
+`!2070 <https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/2070>`_).
+This rule may be overridden in cases where the comment improves the code's readability.
+For example, in class declarations in files with multiple classes, classes within parent classes,
+and inline class functions.
+To ensure consistent style formatting, prefer placing the comment marking the end of the class
+in a new line before the brace.
+
+An exception to this rule are the comments in the closing brace of a namespace,
+which identifies the corresponding namespace.
+
+The following examples illustrate the above guidelines.
+
+.. sourcecode:: cpp
+
+  // File with only one class
+
+  namespace ns3
+  {
+
+  int
+  MyClass::Func(int x)
+  {
+      while (...)
+      {
+          if (...)
+          {
+          } // end if // Do not add this comment
+      } // end while  // Do not add this comment
+  } // end Func       // Do not add this comment
+
+  } // namespace ns3  // Keep this comment
+
+.. sourcecode:: cpp
+
+  // Example of file with multiple classes, and classes within classes
+
+  class MyClass
+  {
+      class InlineClass
+      {
+          ...
+          int var; //!< Some variable
+
+          // end of class InlineClass  // This comment is allowed
+      };
+
+      ...
+
+      // end of class MyClass  // This comment is allowed
+  };
+
 Casts
 =====
 
@@ -1456,6 +1512,16 @@
 
 - Avoid declaring trivial destructors, to optimize performance.
 
+.. _When an empty destructor is required: https://andreasfertig.com/blog/2023/12/when-an-empty-destructor-is-required/
+
+- When declaring default destructors with ``~Class() = default;``, be aware
+  that classes derived from ``SimpleRefCount<T>`` must have this declaration
+  on the source file (``.cc``). The header file (``.h``) should contain
+  the plain destructor declaration ``~Class();``. This is due to PIMPL's
+  opaque pointer, as explained in Andrea Fertig's blog post
+  `When an empty destructor is required`_.
+  See class WifiPpdu's destructor for an example.
+
 C++ standard
 ============
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/doc/contributing/source/conf.py ns-3.45/doc/contributing/source/conf.py
--- ns-3.44/doc/contributing/source/conf.py	2025-03-09 16:56:09.315445400 -0700
+++ ns-3.45/doc/contributing/source/conf.py	2025-06-01 20:35:04.008764000 -0700
@@ -49,9 +49,9 @@
 # built documents.
 #
 # The short X.Y version.
-version = "ns-3.44"
+version = "ns-3.45"
 # The full version, including alpha/beta/rc tags.
-release = "ns-3.44"
+release = "ns-3.45"
 
 # The language for content autogenerated by Sphinx. Refer to documentation
 # for a list of supported languages.
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/doc/contributing/source/models.rst ns-3.45/doc/contributing/source/models.rst
--- ns-3.44/doc/contributing/source/models.rst	2025-03-09 16:55:49.235370600 -0700
+++ ns-3.45/doc/contributing/source/models.rst	2025-06-01 20:34:45.183700800 -0700
@@ -1,14 +1,13 @@
 .. include:: replace.txt
 .. heading hierarchy:
-   ------------- Chapter
-   ************* Section (#.#)
-   ============= Subsection (#.#.#)
-   ############# Paragraph (no number)
+   ============= Chapter
+   ------------- Section (#.#)
+   ~~~~~~~~~~~~~ Subsection (#.#.#)
 
 .. _Models:
 
 Submitting new models
----------------------
+=====================
 
 We actively encourage submission of new features to |ns3|.
 Independent submissions are essential for open source projects, and if
@@ -21,7 +20,7 @@
 and thus minimize the average time-to-merge of your code.
 
 Options for new models
-**********************
+----------------------
 
 |ns3| is organized into modules, each of which is compiled and linked into
 a separate library.  Users can selectively enable and disable the inclusion
@@ -69,7 +68,7 @@
 other options are described in the next chapter (:ref:`External`).
 
 Upstreaming new models
-**********************
+----------------------
 The term "upstreaming" refers to the process whereby new code is
 contributed back to an upstream source (the main open source project)
 whereby that project takes responsibility for further enhancement and
@@ -81,11 +80,11 @@
 
 In brief, we can summarize the guidelines as follows:
 
-1.  Be licensed appropriately (see :ref:`General`)
-2.  Understand how and why |ns3| conducts code reviews before merging
-3.  Follow the ns-3 coding style (:ref:`Coding style`) and software
-    engineering and consistency feedback that maintainers may provide
-4.  Write associated documentation, tests, and example programs
+1. Be licensed appropriately (see :ref:`General`)
+2. Understand how and why |ns3| conducts code reviews before merging
+3. Follow the ns-3 coding style (:ref:`Coding style`) and software
+   engineering and consistency feedback that maintainers may provide
+4. Write associated documentation, tests, and example programs
 
 If you do not have the time to follow through the process to include your
 code in the main tree, please see the next chapter (:ref:`External`)
@@ -102,7 +101,7 @@
   things before maintainers look at it again.
 
 Code reviews
-************
+------------
 
 Code submissions to ns-3-dev are expected to go through a review process
 where one or more maintainers comment on the code.  The basic purpose of the
@@ -119,7 +118,7 @@
 our `GitLab.com site <https://gitlab.com/nsnam/ns-3-dev/-/merge_requests>`_.
 
 Submission structure
-********************
+--------------------
 
 For each code submission, include a description of what your code is doing,
 and why. Ideally, you should be able to provide a summary description in a
@@ -129,7 +128,7 @@
 with ``Draft:``.
 
 Coherent and multi-part submissions
-===================================
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 Large code submissions should be split into smaller submissions where possible.
 The likelihood of getting maintainers to review your submission is inversely
@@ -160,7 +159,7 @@
 on other submissions.
 
 History rewriting
-=================
+~~~~~~~~~~~~~~~~~
 
 It is good practice to rebase your feature branch onto the tip of the
 (evolving) ns-3-dev, so that the commits appear on top of a recent commit
@@ -176,7 +175,7 @@
 to use the annotate and bisect commands.  For this reason, it is good
 practice to "squash" and "rebase" commits into coherent groups.  For example,
 assume that the commit history, after you have responded to a reviewer's
-comment, looks like this:
+comment, looks like this (`git log` output):
 
 ::
 
@@ -205,7 +204,7 @@
 this process.
 
 Documentation, tests, and examples
-**********************************
+----------------------------------
 
 Often we have observed that contributors will provide nice new classes
 implementing a new model, but will fail to include supporting test code,
@@ -220,12 +219,128 @@
 you should be prepared to provide these things, as fits your contribution
 (maintainers will provide some guidance here).
 
-Including examples
-==================
+If you add a new features, or make changes to existing features, you need to
+update existing or write new documentation and example code. Consider the
+following checklist:
+
+* Doxygen should be added to header files for all public classes and methods, and should be checked for Doxygen errors
+* New features should be described in the ``RELEASE_NOTES.md``
+* Public API changes (if any) must be documented in ``CHANGES.md``
+* New API or changes to existing API must update the inline Doxygen documentation in header files
+* Consider updating or adding a new section to the manual (``doc/manual``) or
+  model library (``doc/models``) as appropriate
+* Update the ``AUTHORS`` file for any new authors
+
+
+Guidelines to Write Sphinx Documentation
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Here are some general guidelines when creating Sphinx documentation:
+
+* When possible, avoid using more than 2 levels of hierarchy (i.e., create only sections and subsections).
+* Avoid creating sections or subsections that only contain small paragraphs. If the content is too short, consider combining the content of 2 sections/subsections into one (exceptions include the fixed sections and subsections).
+* Include code snippets and/or images (figures or text-based) to better explain your content. This is particularly recommended for the helpers subsection.
+* Use references with numbers, rather than using names. Include the reference link when available (use the number for the link).
+* Follow the section hierarchy explained in this guide.
+* Verify that there is a line between the header and the body of each section or subsection.
+
+For a concrete example, see ``src/lr-wpan/doc/lr-wpan.rst``.
+
+Documentation should be created using the following heading hierarchy:
+
+::
+
+   Model Name
+   ==========
+
+   Section
+   -------
+
+   Subsection
+   ~~~~~~~~~~
+
+   SubsubSection (Use only in extreme cases!)
+   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+In general, the number of sections or subsection is free, but there are a few sections and subsections that must be present.
+The following is the general outline of a module documentation in ns-3:
+
+::
+
+  My fantastic model name here
+  ============================
+
+  This first part is for describing what the model is trying to accomplish.
+  General descriptions , design, overview of the project goes in this part without the need of any subsections.
+  An additional visual summary is also recommended.
+
+  Scope and Limitations
+  ---------------------
+
+  A list of missing capabilities or things not considered in the model goes here.
+  This section is fixed and must be the first section in the model documentation.
+
+  Section A
+  ---------
+
+  Free form sections and subsections goes here.
+
+  Section B
+  ---------
+
+  Free form sections and subsections goes here.
+
+  Usage
+  -----
+
+  A brief description of the model usage goes here. This section must be present.
+
+  Helpers
+  ~~~~~~~
+
+  A description of the helpers used by the model goes here. Snippets of code are
+  preferable when describing the helpers usage. This subsection must be present.
+  If the model CANNOT provide helpers write "Not applicable".
+
+  Attributes
+  ~~~~~~~~~~
+
+  A list of attributes used by the model, each attribute should include a small
+  description. This subsection must be present.
+  If the model CANNOT provide attributes write "Not applicable".
+
+  Traces
+  ~~~~~~
+
+  A list of the source traces used by the model, each trace should include a small
+  description. This subsection must be present.
+  If the model CANNOT provide traces write "Not applicable".
+
+  Examples and Tests
+  ------------------
+
+  Do not forget to add a brief description of each example and test present in the model.
+  Example:
+  ``my-example.cc : This example demonstrate the use of x in y situation.``
+  This section must be present.
+
+  Validation
+  ----------
+
+  Descriptions of how the model was validated must be here. This section must be present.
+
+  References
+  ----------
+
+  The reference material used in the construction of the model. This section must be present.
+
+
+Examples
+~~~~~~~~
 For many submissions, it will be important to include at least one example that exercises the new code, so the reviewer understands how it is intended to be used. For final submission, please consider to add as many examples as you can that will help new users of your code. The <tt>samples/</tt> and <tt>examples/</tt> directories are places for these files.
 
 Tests
-=====
+~~~~~
 
 All new models should include automated tests.  These should, where
 appropriate, be unit tests of model correctness, validation tests of
@@ -237,23 +352,9 @@
 The ns-3 manual provides documentation and suggestions for
 `how to write tests <https://www.nsnam.org/docs//manual/html/how-to-write-tests.html>`_.
 
-Documentation
-=============
-
-If you add a new features, or make changes to existing features, you need to
-update existing or write new documentation and example code. Consider the
-following checklist:
-
-* Doxygen should be added to header files for all public classes and methods, and should be checked for Doxygen errors
-* new features should be described in the ``RELEASE_NOTES.md``
-* public API changes (if any) must be documented in ``CHANGES.html``
-* new API or changes to existing API must update the inline doxygen documentation in header files
-* consider updating or adding a new section to the manual (``doc/manual``) or
-  model library (``doc/models``) as appropriate
-* update the ``AUTHORS`` file for any new authors
 
 Module dependencies
-===================
+-------------------
 
 Since |ns3| is a modular system, each module has (typically) dependencies on
 other modules. These must be kept to the minimum necessary, and circular
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/doc/doxygen.conf ns-3.45/doc/doxygen.conf
--- ns-3.44/doc/doxygen.conf	2025-03-09 16:55:49.235370600 -0700
+++ ns-3.45/doc/doxygen.conf	2025-06-01 20:34:45.184700700 -0700
@@ -2299,6 +2299,8 @@
                          ATTRIBUTE_VALUE_IMPLEMENT_WITH_NAME \
                          NS_UNUSED_GLOBAL \
                          NS_DEPRECATED \
+                         NS_DEPRECATED_3_45 \
+                         NS_DEPRECATED_3_44 \
                          NS_DEPRECATED_3_43 \
                          NS_DEPRECATED_3_42 \
                          NS_DEPRECATED_3_41 \
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/doc/installation/source/conf.py ns-3.45/doc/installation/source/conf.py
--- ns-3.44/doc/installation/source/conf.py	2025-03-09 16:56:09.315445400 -0700
+++ ns-3.45/doc/installation/source/conf.py	2025-06-01 20:35:04.008764000 -0700
@@ -49,9 +49,9 @@
 # built documents.
 #
 # The short X.Y version.
-version = "ns-3.44"
+version = "ns-3.45"
 # The full version, including alpha/beta/rc tags.
-release = "ns-3.44"
+release = "ns-3.45"
 
 # The language for content autogenerated by Sphinx. Refer to documentation
 # for a list of supported languages.
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/doc/installation/source/linux.rst ns-3.45/doc/installation/source/linux.rst
--- ns-3.44/doc/installation/source/linux.rst	2025-03-09 16:55:49.235370600 -0700
+++ ns-3.45/doc/installation/source/linux.rst	2025-06-01 20:34:45.184700700 -0700
@@ -24,15 +24,15 @@
 The minimum supported version of Ubuntu is Ubuntu 18.04 LTS (as long as a modern compiler
 version such as g++ version 9 or later is added).
 
-  +--------------------+---------------------------------------------------------------------+
-  | **ns-3 Version**   | **apt Packages**                                                    |
-  +====================+==================+==================================================+
-  | 3.36 and later     | ``g++ python3 cmake ninja-build git``                               |
-  +--------------------+---------------------------------------------------------------------+
-  | 3.30-3.35          | ``g++ python3 git``                                                 |
-  +--------------------+---------------------------------------------------------------------+
-  | 3.29 and earlier   | ``g++ python2``                                                     |
-  +--------------------+---------------------------------------------------------------------+
++--------------------+---------------------------------------------------------------------+
+| **ns-3 Version**   | **apt Packages**                                                    |
++====================+==================+==================================================+
+| 3.36 and later     | ``g++ python3 cmake ninja-build git``                               |
++--------------------+---------------------------------------------------------------------+
+| 3.30-3.35          | ``g++ python3 git``                                                 |
++--------------------+---------------------------------------------------------------------+
+| 3.29 and earlier   | ``g++ python2``                                                     |
++--------------------+---------------------------------------------------------------------+
 
 .. note::
   As of July 2023 (ns-3.39 release and later), the minimum g++ version is g++-9.
@@ -41,15 +41,15 @@
 Recommended
 ***********
 
-  +-----------------------------+------------------------------------------------------------+
-  | **Feature**                 | **apt Packages**                                           |
-  +=============================+============================================================+
-  | Compiler cache optimization | ``ccache``                                                 |
-  +-----------------------------+------------------------------------------------------------+
-  | Code linting                | ``clang-format clang-tidy``                                |
-  +-----------------------------+------------------------------------------------------------+
-  | Debugging                   | ``gdb valgrind``                                           |
-  +-----------------------------+------------------------------------------------------------+
++-----------------------------+------------------------------------------------------------+
+| **Feature**                 | **apt Packages**                                           |
++=============================+============================================================+
+| Compiler cache optimization | ``ccache``                                                 |
++-----------------------------+------------------------------------------------------------+
+| Code linting                | ``clang-format clang-tidy``                                |
++-----------------------------+------------------------------------------------------------+
+| Debugging                   | ``gdb valgrind``                                           |
++-----------------------------+------------------------------------------------------------+
 
 .. note::
   For Ubuntu 20.04 release and earlier, the version of ccache provided by apt
@@ -65,37 +65,37 @@
 
 Please see below subsections for Python-related package requirements.
 
-  +-----------------------------+------------------------------------------------------------+
-  | **Feature**                 | **apt Packages**                                           |
-  +=============================+============================================================+
-  | Reading pcap traces         | ``tcpdump wireshark``                                      |
-  +-----------------------------+------------------------------------------------------------+
-  | Database support            | ``sqlite sqlite3 libsqlite3-dev``                          |
-  +-----------------------------+------------------------------------------------------------+
-  | NetAnim animator            | ``qtbase5-dev qtchooser qt5-qmake qtbase5-dev-tools``      |
-  +-----------------------------+------------------------------------------------------------+
-  | MPI-based distributed       |                                                            |
-  | simulation                  | ``openmpi-bin openmpi-common openmpi-doc libopenmpi-dev``  |
-  +-----------------------------+------------------------------------------------------------+
-  | Building Doxygen            | ``doxygen graphviz imagemagick``                           |
-  +-----------------------------+------------------------------------------------------------+
-  | Sphinx documentation        | ``python3-sphinx dia imagemagick texlive dvipng latexmk``  |
-  |                             | ``texlive-extra-utils texlive-latex-extra``                |
-  |                             | ``texlive-font-utils``                                     |
-  +-----------------------------+------------------------------------------------------------+
-  | Eigen3                      | ``libeigen3-dev``                                          |
-  +-----------------------------+------------------------------------------------------------+
-  | GNU Scientific Library      | ``gsl-bin libgsl-dev libgslcblas0``                        |
-  +-----------------------------+------------------------------------------------------------+
-  | XML config store            | ``libxml2 libxml2-dev``                                    |
-  +-----------------------------+------------------------------------------------------------+
-  | GTK-based config store      | ``libgtk-3-dev``                                           |
-  +-----------------------------+------------------------------------------------------------+
-  | Emulation with virtual      |                                                            |
-  | machines and tap bridge     | ``lxc-utils lxc-templates iproute2 iptables``              |
-  +-----------------------------+------------------------------------------------------------+
-  | Support for openflow        | ``libxml2 libxml2-dev libboost-all-dev``                   |
-  +-----------------------------+------------------------------------------------------------+
++-----------------------------+------------------------------------------------------------+
+| **Feature**                 | **apt Packages**                                           |
++=============================+============================================================+
+| Reading pcap traces         | ``tcpdump wireshark``                                      |
++-----------------------------+------------------------------------------------------------+
+| Database support            | ``sqlite sqlite3 libsqlite3-dev``                          |
++-----------------------------+------------------------------------------------------------+
+| NetAnim animator            | ``qtbase5-dev qtchooser qt5-qmake qtbase5-dev-tools``      |
++-----------------------------+------------------------------------------------------------+
+| MPI-based distributed       |                                                            |
+| simulation                  | ``openmpi-bin openmpi-common openmpi-doc libopenmpi-dev``  |
++-----------------------------+------------------------------------------------------------+
+| Building Doxygen            | ``doxygen graphviz imagemagick``                           |
++-----------------------------+------------------------------------------------------------+
+| Sphinx documentation        | ``python3-sphinx dia imagemagick texlive dvipng latexmk``  |
+|                             | ``texlive-extra-utils texlive-latex-extra``                |
+|                             | ``texlive-font-utils``                                     |
++-----------------------------+------------------------------------------------------------+
+| Eigen3                      | ``libeigen3-dev``                                          |
++-----------------------------+------------------------------------------------------------+
+| GNU Scientific Library      | ``gsl-bin libgsl-dev libgslcblas0``                        |
++-----------------------------+------------------------------------------------------------+
+| XML config store            | ``libxml2 libxml2-dev``                                    |
++-----------------------------+------------------------------------------------------------+
+| GTK-based config store      | ``libgtk-3-dev``                                           |
++-----------------------------+------------------------------------------------------------+
+| Emulation with virtual      |                                                            |
+| machines and tap bridge     | ``lxc-utils lxc-templates iproute2 iptables``              |
++-----------------------------+------------------------------------------------------------+
+| Support for openflow        | ``libxml2 libxml2-dev libboost-all-dev``                   |
++-----------------------------+------------------------------------------------------------+
 
 .. note::
   For Ubuntu 20.10 and earlier, the single 'qt5-default' package suffices for NetAnim (``apt install qt5-default``)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/doc/installation/source/macos.rst ns-3.45/doc/installation/source/macos.rst
--- ns-3.44/doc/installation/source/macos.rst	2025-03-09 16:55:49.235370600 -0700
+++ ns-3.45/doc/installation/source/macos.rst	2025-06-01 20:34:45.184700700 -0700
@@ -52,13 +52,13 @@
 
 The following table provides package names for installing CMake and Ninja build system from Homebrew or MacPorts.
 
-  +--------------------+-------------------------------+-------------------------------------+
-  | **ns-3 Version**   | **Homebrew packages**         | **MacPorts packages**               |
-  +====================+===============================+=====================================+
-  | 3.36 and later     | ``cmake ninja``               | ``cmake ninja``                     |
-  +--------------------+-------------------------------+-------------------------------------+
-  | 3.35 and earlier   | None                          | None                                |
-  +--------------------+-------------------------------+-------------------------------------+
++--------------------+-------------------------------+-------------------------------------+
+| **ns-3 Version**   | **Homebrew packages**         | **MacPorts packages**               |
++====================+===============================+=====================================+
+| 3.36 and later     | ``cmake ninja``               | ``cmake ninja``                     |
++--------------------+-------------------------------+-------------------------------------+
+| 3.35 and earlier   | None                          | None                                |
++--------------------+-------------------------------+-------------------------------------+
 
 You will know you are done when you can successfully type `clang++ -v` at the command line, and when you type `cmake --help` and it identifies that you have at least one installed generator (in the below example, Unix Makefiles):
 
@@ -75,29 +75,40 @@
 Recommended
 ***********
 
-  +-----------------------------+------------------------+-----------------------------------+
-  | **Feature**                 | **Homebrew packages**  | **MacPorts packages**             |
-  +=============================+========================+===================================+
-  | Compiler cache optimization | ``ccache``             | ``ccache``                        |
-  +-----------------------------+------------------------+-----------------------------------+
-  | Code linting                | ``clang-format llvm``  | clang-format included with        |
-  |                             |                        | ``clang``, need to select         |
-  |                             |                        | ``clang-XX llvm-XX`` versions     |
-  +-----------------------------+------------------------+-----------------------------------+
-  | Debugging                   | None                   | ``gdb ddd`` (ddd requires gdb)    |
-  +-----------------------------+------------------------+-----------------------------------+
++-----------------------------+----------------------------+-----------------------------------+
+| **Feature**                 | **Homebrew packages**      | **MacPorts packages**             |
++=============================+============================+===================================+
+| Compiler cache optimization | ``ccache``                 | ``ccache``                        |
++-----------------------------+----------------------------+-----------------------------------+
+| Code linting                | clang-format included with | clang-format included with        |
+|                             | ``llvm``, need to select   | ``clang``, need to select         |
+|                             | ``llvm@XX`` version        | ``clang-XX llvm-XX`` versions     |
++-----------------------------+----------------------------+-----------------------------------+
 
 .. note::
-  The ``llvm`` Homebrew package provides ``clang-tidy``, but please note that the binary is
-  placed at ``/opt/homebrew/opt/llvm/bin/clang-tidy`` so you may need to add this path to your
-  ``$PATH`` variable.
+
+  macOS development tools are based on clang, so installing llvm and clang using Homebrew or
+  MacPorts is typically unnecessary. However, ``clang-tidy`` might be missing, and the
+  ``clang-format`` version might be not the expected one. In these cases it is suggested to
+  install the ``llvm`` package either though Homebrew or MacPorts.
 
 .. note::
+
+  Homebrew provides a ``clang-format`` package, but its version might be incompatible with
+  the one used by |ns3|.
+
+  The ``llvm`` Homebrew package provides ``clang-tidy`` and ``clang-format``, but the binary
+  is placed at ``/opt/homebrew/opt/llvm@XX/bin/clang-tidy`` (where ``XX`` is the installed
+  version number such as ``18``), so you will need to add this path to your ``$PATH`` variable.
+
+.. note::
+
   Likewise, when using MacPorts, the ``clang-tidy`` and ``clang-format`` binaries will be
-  placed in ``/opt/local/libexec/llvm-XX/bin`` (where ``XX` is the installed version number
-  such as ``16``), so you will need to add this to your ``$PATH`` variable.
+  placed in ``/opt/local/libexec/llvm-XX/bin`` (where ``XX`` is the installed version number
+  such as ``18``), so you will need to add this to your ``$PATH`` variable.
 
 .. note::
+
   For debugging, ``lldb`` is the default debugger for llvm.  Memory checkers such as
   Memory Graph exist for macOS, but the ns-3 team doesn't have experience with it as a
   substitution for ``valgrind`` (which is reported to not work on M1 Macs).
@@ -109,42 +120,42 @@
 
 For MacPorts packages we show the most recent package version available as of early 2023.
 
-  +-----------------------------+----------------------------------+--------------------------+
-  | **Feature**                 | **Homebrew packages**            | **MacPort packages**     |
-  +=============================+==================================+==========================+
-  | Reading pcap traces         | ``wireshark``                    | ``wireshark4``           |
-  +-----------------------------+----------------------------------+--------------------------+
-  | Database support            | ``sqlite``                       | ``sqlite3``              |
-  +-----------------------------+----------------------------------+--------------------------+
-  | NetAnim animator            | ``qt@5``                         | ``qt513``                |
-  +-----------------------------+----------------------------------+--------------------------+
-  | MPI-based distributed       |                                  | ``openmpi``              |
-  | simulation                  | ``open-mpi``                     |                          |
-  +-----------------------------+----------------------------------+--------------------------+
-  | Building Doxygen            | ``doxygen graphviz imagemagick`` | ``doxygen graphviz``     |
-  |                             |                                  | ``ImageMagick``          |
-  +-----------------------------+----------------------------------+--------------------------+
-  | Sphinx documentation        | ``sphinx-doc texlive``           | ``dia texlive``          |
-  |                             |                                  | ``texlive-fonts-extra``  |
-  |                             |                                  | ``texlive-latex-extra``  |
-  |                             |                                  | ``py3XX-sphinx``, with   |
-  |                             |                                  | `XX`` the Python minor   |
-  |                             |                                  | version such as `12`     |
-  +-----------------------------+----------------------------------+--------------------------+
-  | Eigen3                      | ``eigen``                        | ``eigen3``               |
-  +-----------------------------+----------------------------------+--------------------------+
-  | GNU Scientific Library      | ``gsl``                          | ``gsl``                  |
-  +-----------------------------+----------------------------------+--------------------------+
-  | XML config store            | ``libxml2``                      | ``libxml2``              |
-  +-----------------------------+----------------------------------+--------------------------+
-  | GTK-based config store      | ``gtk+3``                        | ``gtk3`` or ``gtk4``     |
-  +-----------------------------+----------------------------------+--------------------------+
-  | Emulation with virtual      |                                  |                          |
-  | machines                    | Not available for macOS          | Not available for macOS  |
-  +-----------------------------+----------------------------------+--------------------------+
-  | Support for openflow,       | ``boost``                        | ``boost``                |
-  | CircularApertureAntennaModel|                                  |                          |
-  +-----------------------------+----------------------------------+--------------------------+
++-----------------------------+----------------------------------+--------------------------+
+| **Feature**                 | **Homebrew packages**            | **MacPort packages**     |
++=============================+==================================+==========================+
+| Reading pcap traces         | ``wireshark``                    | ``wireshark4``           |
++-----------------------------+----------------------------------+--------------------------+
+| Database support            | ``sqlite``                       | ``sqlite3``              |
++-----------------------------+----------------------------------+--------------------------+
+| NetAnim animator            | ``qt@5``                         | ``qt513``                |
++-----------------------------+----------------------------------+--------------------------+
+| MPI-based distributed       |                                  | ``openmpi``              |
+| simulation                  | ``open-mpi``                     |                          |
++-----------------------------+----------------------------------+--------------------------+
+| Building Doxygen            | ``doxygen graphviz imagemagick`` | ``doxygen graphviz``     |
+|                             |                                  | ``ImageMagick``          |
++-----------------------------+----------------------------------+--------------------------+
+| Sphinx documentation        | ``sphinx-doc texlive``           | ``dia texlive``          |
+|                             |                                  | ``texlive-fonts-extra``  |
+|                             |                                  | ``texlive-latex-extra``  |
+|                             |                                  | ``py3XX-sphinx``, with   |
+|                             |                                  | `XX`` the Python minor   |
+|                             |                                  | version such as `12`     |
++-----------------------------+----------------------------------+--------------------------+
+| Eigen3                      | ``eigen``                        | ``eigen3``               |
++-----------------------------+----------------------------------+--------------------------+
+| GNU Scientific Library      | ``gsl``                          | ``gsl``                  |
++-----------------------------+----------------------------------+--------------------------+
+| XML config store            | ``libxml2``                      | ``libxml2``              |
++-----------------------------+----------------------------------+--------------------------+
+| GTK-based config store      | ``gtk+3``                        | ``gtk3`` or ``gtk4``     |
++-----------------------------+----------------------------------+--------------------------+
+| Emulation with virtual      |                                  |                          |
+| machines                    | Not available for macOS          | Not available for macOS  |
++-----------------------------+----------------------------------+--------------------------+
+| Support for openflow,       | ``boost``                        | ``boost``                |
+| CircularApertureAntennaModel|                                  |                          |
++-----------------------------+----------------------------------+--------------------------+
 
 Caveats and troubleshooting
 ***************************
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/doc/installation/source/quick-start.rst ns-3.45/doc/installation/source/quick-start.rst
--- ns-3.44/doc/installation/source/quick-start.rst	2025-03-09 16:55:49.235370600 -0700
+++ ns-3.45/doc/installation/source/quick-start.rst	2025-06-01 20:34:45.185700700 -0700
@@ -34,25 +34,25 @@
 Make sure that your system has these prerequisites.  Download can be via either ``git`` or via
 source archive download (via a web browser, ``wget``, or ``curl``).
 
-  +--------------------+--------------------------------------+------------------------------+
-  | **Purpose**        | **Tool**                             | **Minimum Version**          |
-  +====================+==================+===================+==============================+
-  | **Download**       | ``git`` (for Git download)           | No minimum version           |
-  +                    +                                      +                              +
-  |                    | or ``tar`` and ``bunzip2``           | No minimum version           |
-  |                    | (for Web download)                   |                              |
-  +--------------------+--------------------------------------+------------------------------+
-  | **Compiler**       | ``g++``                              | >= 10                        |
-  +                    +                                      +                              +
-  |                    | or ``clang++``                       | >= 11                        |
-  +--------------------+--------------------------------------+------------------------------+
-  | **Configuration**  | ``python3``                          | >= 3.8                       |
-  +--------------------+--------------------------------------+------------------------------+
-  | **Build system**   | ``cmake``,                           | >= 3.13                      |
-  +                    +                                      +                              +
-  |                    | and at least one of:                 | No minimum version           |
-  |                    | ``make``, ``ninja``, or ``Xcode``    |                              |
-  +--------------------+--------------------------------------+------------------------------+
++--------------------+--------------------------------------+------------------------------+
+| **Purpose**        | **Tool**                             | **Minimum Version**          |
++====================+==================+===================+==============================+
+| **Download**       | ``git`` (for Git download)           | No minimum version           |
++                    +                                      +                              +
+|                    | or ``tar`` and ``bunzip2``           | No minimum version           |
+|                    | (for Web download)                   |                              |
++--------------------+--------------------------------------+------------------------------+
+| **Compiler**       | ``g++``                              | >= 10                        |
++                    +                                      +                              +
+|                    | or ``clang++``                       | >= 11                        |
++--------------------+--------------------------------------+------------------------------+
+| **Configuration**  | ``python3``                          | >= 3.8                       |
++--------------------+--------------------------------------+------------------------------+
+| **Build system**   | ``cmake``,                           | >= 3.13                      |
++                    +                                      +                              +
+|                    | and at least one of:                 | No minimum version           |
+|                    | ``make``, ``ninja``, or ``Xcode``    |                              |
++--------------------+--------------------------------------+------------------------------+
 
 .. note::
 
@@ -63,43 +63,42 @@
 From the command line, you can check the version of each of the above tools with version
 requirements as follows:
 
-  +--------------------------------------+------------------------------------+
-  | **Tool**                             | **Version check command**          |
-  +======================================+====================================+
-  | ``g++``                              | ``$ g++ --version``                |
-  +--------------------------------------+------------------------------------+
-  | ``clang++``                          | ``$ clang++ --version``            |
-  +--------------------------------------+------------------------------------+
-  | ``python3``                          | ``$ python3 -V``                   |
-  +--------------------------------------+------------------------------------+
-  | ``cmake``                            | ``$ cmake --version``              |
-  +--------------------------------------+------------------------------------+
++--------------------------------------+------------------------------------+
+| **Tool**                             | **Version check command**          |
++======================================+====================================+
+| ``g++``                              | ``$ g++ --version``                |
++--------------------------------------+------------------------------------+
+| ``clang++``                          | ``$ clang++ --version``            |
++--------------------------------------+------------------------------------+
+| ``python3``                          | ``$ python3 -V``                   |
++--------------------------------------+------------------------------------+
+| ``cmake``                            | ``$ cmake --version``              |
++--------------------------------------+------------------------------------+
 
 Download
 ********
 
 There are two main options:
 
-1. Download a release tarball.  This will unpack to a directory such as ``ns-allinone-3.44``
-containing |ns3| and some other programs.  Below is a command-line download using ``wget``,
-but a browser download will also work::
-
-  $ wget https://www.nsnam.org/releases/ns-allinone-3.44.tar.bz2
-  $ tar xfj ns-allinone-3.44.tar.bz2
-  $ cd ns-allinone-3.44/ns-3.44
+#. Download a release tarball.  This will unpack to a directory such as ``ns-allinone-3.45``
+   or ``ns-3.45``.  Below is a command-line download using ``wget``,
+   but a browser download will also work::
+
+    $ wget https://www.nsnam.org/releases/ns-allinone-3.45.tar.bz2
+    $ tar xfj ns-allinone-3.45.tar.bz2
+    $ cd ns-3.45
 
-2. Clone |ns3| from the Git repository.  The ``ns-3-allinone`` can be cloned, as well as
-``ns-3-dev`` by itself.  Below, we illustrate the latter::
+#. Clone |ns3| from the ``ns-3-dev`` Git repository::
 
-  $ git clone https://gitlab.com/nsnam/ns-3-dev.git
-  $ cd ns-3-dev
+    $ git clone https://gitlab.com/nsnam/ns-3-dev.git
+    $ cd ns-3-dev
 
 Note that if you select option 1), your directory name will contain the release number.  If
 you clone |ns3|, your directory will be named ``ns-3-dev``.  By default, Git will check out
 the |ns3| ``master`` branch, which is a development branch.  All |ns3| releases are tagged
 in Git, so if you would then like to check out a past release, you can do so as follows::
 
-  $ git checkout -b ns-3.44-release ns-3.44
+  $ git checkout -b ns-3.45-release ns-3.45
 
 In this quick-start, we are omitting download and build instructions for optional |ns3| modules,
 the ``NetAnim`` animator, Python bindings, and ``NetSimulyzer``.  The
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/doc/installation/source/system.rst ns-3.45/doc/installation/source/system.rst
--- ns-3.44/doc/installation/source/system.rst	2025-03-09 16:55:49.235370600 -0700
+++ ns-3.45/doc/installation/source/system.rst	2025-06-01 20:34:45.185700700 -0700
@@ -19,7 +19,10 @@
 extensions you need.
 
 .. note::
-   **"Do I need to install all of these packages?"**  Some users want to install everything so
+
+   **"Do I need to install all of these packages?"**
+
+   Some users want to install everything so
    that their configuration output shows that every feature is enabled.  However, there is
    no real need to install prerequisites related to features you are not yet using; you can always
    come back later and install more prerequisites as needed.  The build system should warn
@@ -29,7 +32,10 @@
 for all users, or optional depending on use cases.
 
 .. note::
-   **"Is there a maintained list of all prerequisites?"**  We use GitLab.com's continuous
+
+   **"Is there a maintained list of all prerequisites?"**
+
+   We use GitLab.com's continuous
    integration system for testing; the configuration YAML files for these jobs can be found
    in the directory ``utils/tests/``.  So, for instance, if you want to look at what packages
    the CI is installing for Alpine Linux, look at ``utils/tests/gitlab-ci-alpine.yml``.  The
@@ -75,7 +81,7 @@
 
 The following are recommended for most users of |ns3|.
 
-compiler cache optimization (for ns-3.37 and later)
+Compiler cache optimization (for ns-3.37 and later)
 ===================================================
 
 `Ccache <https://ccache.dev>`_ is a compiler cache optimization that will speed up builds across
@@ -93,7 +99,9 @@
 Moreover, clang-tidy is integrated with CMake, enabling code scanning during the build phase.
 
 .. note::
-  clang-format-14 through clang-format-16 version is required.
+
+  Check the list of supported versions of clang-format in the ``utils/check-style-clang-format.py`` program
+  or in the `coding-style.rst <https://gitlab.com/nsnam/ns-3-dev/-/blob/master/doc/contributing/source/coding-style.rst>`_ document.
 
 clang-format is strongly recommended to write code that follows the ns-3 code conventions, but
 might be skipped for simpler tasks (e.g., writing a simple simulation script for yourself).
@@ -118,6 +126,7 @@
 The remaining prerequisites listed below are only needed for optional ns-3 components.
 
 .. note::
+
   As of ns-3.30 release (August 2019), ns-3 uses Python 3 by default, but earlier
   releases depend on Python 2 packages, and at least a Python 2 interpreter is recommended.
   If installing the below prerequisites for an earlier release, one may in general substitute
@@ -189,6 +198,7 @@
 
 Eigen3 support
 ==============
+
 `Eigen3 <https://gitlab.com/libeigen/eigen>`_ is used to support more efficient calculations
 when using the `3GPP propagation loss models <https://www.nsnam.org/docs//models/html/propagation.html#threegpppropagationlossmodel>`_
 in LTE and NR simulations.
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/doc/installation/source/windows.rst ns-3.45/doc/installation/source/windows.rst
--- ns-3.44/doc/installation/source/windows.rst	2025-03-09 16:55:49.235370600 -0700
+++ ns-3.45/doc/installation/source/windows.rst	2025-06-01 20:34:45.185700700 -0700
@@ -18,6 +18,7 @@
 either WSL or the Msys2/MinGW64 toolchain (installing both is not required).
 
 .. note::
+
   |ns3| is not fully compatible with Visual Studio IDE / MSVC compiler; only Visual Studio Code
   editor, the Msys2/MinGW64 toolchain, and WSL, as explained below.
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/doc/manual/figures/perf.svg ns-3.45/doc/manual/figures/perf.svg
--- ns-3.44/doc/manual/figures/perf.svg	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.45/doc/manual/figures/perf.svg	2025-06-01 20:34:45.218701000 -0700
@@ -0,0 +1,26426 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" width="800" height="918" onload="init(evt)" viewBox="0 0 800 918" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<!-- Flame graph stack visualization. See https://github.com/brendangregg/FlameGraph for latest version, and http://www.brendangregg.com/flamegraphs.html for examples. -->
+<!-- NOTES:  -->
+<defs>
+	<linearGradient id="background" y1="0" y2="1" x1="0" x2="0" >
+		<stop stop-color="#eeeeee" offset="5%" />
+		<stop stop-color="#eeeeb0" offset="95%" />
+	</linearGradient>
+</defs>
+<style type="text/css">
+	text { font-family:Verdana; font-size:12px; fill:rgb(0,0,0); }
+	#search, #ignorecase { opacity:0.1; cursor:pointer; }
+	#search:hover, #search.show, #ignorecase:hover, #ignorecase.show { opacity:1; }
+	#subtitle { text-anchor:middle; font-color:rgb(160,160,160); }
+	#title { text-anchor:middle; font-size:17px}
+	#unzoom { cursor:pointer; }
+	#frames > *:hover { stroke:black; stroke-width:0.5; cursor:pointer; }
+	.hide { display:none; }
+	.parent { opacity:0.5; }
+</style>
+<script type="text/ecmascript">
+<![CDATA[
+	"use strict";
+	var details, searchbtn, unzoombtn, matchedtxt, svg, searching, currentSearchTerm, ignorecase, ignorecaseBtn;
+	function init(evt) {
+		details = document.getElementById("details").firstChild;
+		searchbtn = document.getElementById("search");
+		ignorecaseBtn = document.getElementById("ignorecase");
+		unzoombtn = document.getElementById("unzoom");
+		matchedtxt = document.getElementById("matched");
+		svg = document.getElementsByTagName("svg")[0];
+		searching = 0;
+		currentSearchTerm = null;
+
+		// use GET parameters to restore a flamegraphs state.
+		var params = get_params();
+		if (params.x && params.y)
+			zoom(find_group(document.querySelector('[x="' + params.x + '"][y="' + params.y + '"]')));
+                if (params.s) search(params.s);
+	}
+
+	// event listeners
+	window.addEventListener("click", function(e) {
+		var target = find_group(e.target);
+		if (target) {
+			if (target.nodeName == "a") {
+				if (e.ctrlKey === false) return;
+				e.preventDefault();
+			}
+			if (target.classList.contains("parent")) unzoom(true);
+			zoom(target);
+			if (!document.querySelector('.parent')) {
+				// we have basically done a clearzoom so clear the url
+				var params = get_params();
+				if (params.x) delete params.x;
+				if (params.y) delete params.y;
+				history.replaceState(null, null, parse_params(params));
+				unzoombtn.classList.add("hide");
+				return;
+			}
+
+			// set parameters for zoom state
+			var el = target.querySelector("rect");
+			if (el && el.attributes && el.attributes.y && el.attributes._orig_x) {
+				var params = get_params()
+				params.x = el.attributes._orig_x.value;
+				params.y = el.attributes.y.value;
+				history.replaceState(null, null, parse_params(params));
+			}
+		}
+		else if (e.target.id == "unzoom") clearzoom();
+		else if (e.target.id == "search") search_prompt();
+		else if (e.target.id == "ignorecase") toggle_ignorecase();
+	}, false)
+
+	// mouse-over for info
+	// show
+	window.addEventListener("mouseover", function(e) {
+		var target = find_group(e.target);
+		if (target) details.nodeValue = "Function: " + g_to_text(target);
+	}, false)
+
+	// clear
+	window.addEventListener("mouseout", function(e) {
+		var target = find_group(e.target);
+		if (target) details.nodeValue = ' ';
+	}, false)
+
+	// ctrl-F for search
+	// ctrl-I to toggle case-sensitive search
+	window.addEventListener("keydown",function (e) {
+		if (e.keyCode === 114 || (e.ctrlKey && e.keyCode === 70)) {
+			e.preventDefault();
+			search_prompt();
+		}
+		else if (e.ctrlKey && e.keyCode === 73) {
+			e.preventDefault();
+			toggle_ignorecase();
+		}
+	}, false)
+
+	// functions
+	function get_params() {
+		var params = {};
+		var paramsarr = window.location.search.substr(1).split('&');
+		for (var i = 0; i < paramsarr.length; ++i) {
+			var tmp = paramsarr[i].split("=");
+			if (!tmp[0] || !tmp[1]) continue;
+			params[tmp[0]]  = decodeURIComponent(tmp[1]);
+		}
+		return params;
+	}
+	function parse_params(params) {
+		var uri = "?";
+		for (var key in params) {
+			uri += key + '=' + encodeURIComponent(params[key]) + '&';
+		}
+		if (uri.slice(-1) == "&")
+			uri = uri.substring(0, uri.length - 1);
+		if (uri == '?')
+			uri = window.location.href.split('?')[0];
+		return uri;
+	}
+	function find_child(node, selector) {
+		var children = node.querySelectorAll(selector);
+		if (children.length) return children[0];
+	}
+	function find_group(node) {
+		var parent = node.parentElement;
+		if (!parent) return;
+		if (parent.id == "frames") return node;
+		return find_group(parent);
+	}
+	function orig_save(e, attr, val) {
+		if (e.attributes["_orig_" + attr] != undefined) return;
+		if (e.attributes[attr] == undefined) return;
+		if (val == undefined) val = e.attributes[attr].value;
+		e.setAttribute("_orig_" + attr, val);
+	}
+	function orig_load(e, attr) {
+		if (e.attributes["_orig_"+attr] == undefined) return;
+		e.attributes[attr].value = e.attributes["_orig_" + attr].value;
+		e.removeAttribute("_orig_"+attr);
+	}
+	function g_to_text(e) {
+		var text = find_child(e, "title").firstChild.nodeValue;
+		return (text)
+	}
+	function g_to_func(e) {
+		var func = g_to_text(e);
+		// if there's any manipulation we want to do to the function
+		// name before it's searched, do it here before returning.
+		return (func);
+	}
+	function update_text(e) {
+		var r = find_child(e, "rect");
+		var t = find_child(e, "text");
+		var w = parseFloat(r.attributes.width.value) -3;
+		var txt = find_child(e, "title").textContent.replace(/\([^(]*\)$/,"");
+		t.attributes.x.value = parseFloat(r.attributes.x.value) + 3;
+
+		// Smaller than this size won't fit anything
+		if (w < 2 * 12 * 0.59) {
+			t.textContent = "";
+			return;
+		}
+
+		t.textContent = txt;
+		var sl = t.getSubStringLength(0, txt.length);
+		// check if only whitespace or if we can fit the entire string into width w
+		if (/^ *$/.test(txt) || sl < w)
+			return;
+
+		// this isn't perfect, but gives a good starting point
+		// and avoids calling getSubStringLength too often
+		var start = Math.floor((w/sl) * txt.length);
+		for (var x = start; x > 0; x = x-2) {
+			if (t.getSubStringLength(0, x + 2) <= w) {
+				t.textContent = txt.substring(0, x) + "..";
+				return;
+			}
+		}
+		t.textContent = "";
+	}
+
+	// zoom
+	function zoom_reset(e) {
+		if (e.attributes != undefined) {
+			orig_load(e, "x");
+			orig_load(e, "width");
+		}
+		if (e.childNodes == undefined) return;
+		for (var i = 0, c = e.childNodes; i < c.length; i++) {
+			zoom_reset(c[i]);
+		}
+	}
+	function zoom_child(e, x, ratio) {
+		if (e.attributes != undefined) {
+			if (e.attributes.x != undefined) {
+				orig_save(e, "x");
+				e.attributes.x.value = (parseFloat(e.attributes.x.value) - x - 10) * ratio + 10;
+				if (e.tagName == "text")
+					e.attributes.x.value = find_child(e.parentNode, "rect[x]").attributes.x.value + 3;
+			}
+			if (e.attributes.width != undefined) {
+				orig_save(e, "width");
+				e.attributes.width.value = parseFloat(e.attributes.width.value) * ratio;
+			}
+		}
+
+		if (e.childNodes == undefined) return;
+		for (var i = 0, c = e.childNodes; i < c.length; i++) {
+			zoom_child(c[i], x - 10, ratio);
+		}
+	}
+	function zoom_parent(e) {
+		if (e.attributes) {
+			if (e.attributes.x != undefined) {
+				orig_save(e, "x");
+				e.attributes.x.value = 10;
+			}
+			if (e.attributes.width != undefined) {
+				orig_save(e, "width");
+				e.attributes.width.value = parseInt(svg.width.baseVal.value) - (10 * 2);
+			}
+		}
+		if (e.childNodes == undefined) return;
+		for (var i = 0, c = e.childNodes; i < c.length; i++) {
+			zoom_parent(c[i]);
+		}
+	}
+	function zoom(node) {
+		var attr = find_child(node, "rect").attributes;
+		var width = parseFloat(attr.width.value);
+		var xmin = parseFloat(attr.x.value);
+		var xmax = parseFloat(xmin + width);
+		var ymin = parseFloat(attr.y.value);
+		var ratio = (svg.width.baseVal.value - 2 * 10) / width;
+
+		// XXX: Workaround for JavaScript float issues (fix me)
+		var fudge = 0.0001;
+
+		unzoombtn.classList.remove("hide");
+
+		var el = document.getElementById("frames").children;
+		for (var i = 0; i < el.length; i++) {
+			var e = el[i];
+			var a = find_child(e, "rect").attributes;
+			var ex = parseFloat(a.x.value);
+			var ew = parseFloat(a.width.value);
+			var upstack;
+			// Is it an ancestor
+			if (0 == 0) {
+				upstack = parseFloat(a.y.value) > ymin;
+			} else {
+				upstack = parseFloat(a.y.value) < ymin;
+			}
+			if (upstack) {
+				// Direct ancestor
+				if (ex <= xmin && (ex+ew+fudge) >= xmax) {
+					e.classList.add("parent");
+					zoom_parent(e);
+					update_text(e);
+				}
+				// not in current path
+				else
+					e.classList.add("hide");
+			}
+			// Children maybe
+			else {
+				// no common path
+				if (ex < xmin || ex + fudge >= xmax) {
+					e.classList.add("hide");
+				}
+				else {
+					zoom_child(e, xmin, ratio);
+					update_text(e);
+				}
+			}
+		}
+		search();
+	}
+	function unzoom(dont_update_text) {
+		unzoombtn.classList.add("hide");
+		var el = document.getElementById("frames").children;
+		for(var i = 0; i < el.length; i++) {
+			el[i].classList.remove("parent");
+			el[i].classList.remove("hide");
+			zoom_reset(el[i]);
+			if(!dont_update_text) update_text(el[i]);
+		}
+		search();
+	}
+	function clearzoom() {
+		unzoom();
+
+		// remove zoom state
+		var params = get_params();
+		if (params.x) delete params.x;
+		if (params.y) delete params.y;
+		history.replaceState(null, null, parse_params(params));
+	}
+
+	// search
+	function toggle_ignorecase() {
+		ignorecase = !ignorecase;
+		if (ignorecase) {
+			ignorecaseBtn.classList.add("show");
+		} else {
+			ignorecaseBtn.classList.remove("show");
+		}
+		reset_search();
+		search();
+	}
+	function reset_search() {
+		var el = document.querySelectorAll("#frames rect");
+		for (var i = 0; i < el.length; i++) {
+			orig_load(el[i], "fill")
+		}
+		var params = get_params();
+		delete params.s;
+		history.replaceState(null, null, parse_params(params));
+	}
+	function search_prompt() {
+		if (!searching) {
+			var term = prompt("Enter a search term (regexp " +
+			    "allowed, eg: ^ext4_)"
+			    + (ignorecase ? ", ignoring case" : "")
+			    + "\nPress Ctrl-i to toggle case sensitivity", "");
+			if (term != null) search(term);
+		} else {
+			reset_search();
+			searching = 0;
+			currentSearchTerm = null;
+			searchbtn.classList.remove("show");
+			searchbtn.firstChild.nodeValue = "Search"
+			matchedtxt.classList.add("hide");
+			matchedtxt.firstChild.nodeValue = ""
+		}
+	}
+	function search(term) {
+		if (term) currentSearchTerm = term;
+		if (currentSearchTerm === null) return;
+
+		var re = new RegExp(currentSearchTerm, ignorecase ? 'i' : '');
+		var el = document.getElementById("frames").children;
+		var matches = new Object();
+		var maxwidth = 0;
+		for (var i = 0; i < el.length; i++) {
+			var e = el[i];
+			var func = g_to_func(e);
+			var rect = find_child(e, "rect");
+			if (func == null || rect == null)
+				continue;
+
+			// Save max width. Only works as we have a root frame
+			var w = parseFloat(rect.attributes.width.value);
+			if (w > maxwidth)
+				maxwidth = w;
+
+			if (func.match(re)) {
+				// highlight
+				var x = parseFloat(rect.attributes.x.value);
+				orig_save(rect, "fill");
+				rect.attributes.fill.value = "rgb(230,0,230)";
+
+				// remember matches
+				if (matches[x] == undefined) {
+					matches[x] = w;
+				} else {
+					if (w > matches[x]) {
+						// overwrite with parent
+						matches[x] = w;
+					}
+				}
+				searching = 1;
+			}
+		}
+		if (!searching)
+			return;
+		var params = get_params();
+		params.s = currentSearchTerm;
+		history.replaceState(null, null, parse_params(params));
+
+		searchbtn.classList.add("show");
+		searchbtn.firstChild.nodeValue = "Reset Search";
+
+		// calculate percent matched, excluding vertical overlap
+		var count = 0;
+		var lastx = -1;
+		var lastw = 0;
+		var keys = Array();
+		for (k in matches) {
+			if (matches.hasOwnProperty(k))
+				keys.push(k);
+		}
+		// sort the matched frames by their x location
+		// ascending, then width descending
+		keys.sort(function(a, b){
+			return a - b;
+		});
+		// Step through frames saving only the biggest bottom-up frames
+		// thanks to the sort order. This relies on the tree property
+		// where children are always smaller than their parents.
+		var fudge = 0.0001;	// JavaScript floating point
+		for (var k in keys) {
+			var x = parseFloat(keys[k]);
+			var w = matches[keys[k]];
+			if (x >= lastx + lastw - fudge) {
+				count += w;
+				lastx = x;
+				lastw = w;
+			}
+		}
+		// display matched percent
+		matchedtxt.classList.remove("hide");
+		var pct = 100 * count / maxwidth;
+		if (pct != 100) pct = pct.toFixed(1)
+		matchedtxt.firstChild.nodeValue = "Matched: " + pct + "%";
+	}
+]]>
+</script>
+<rect x="0.0" y="0" width="800.0" height="918.0" fill="url(#background)"  />
+<text id="title" x="400.00" y="24" >Flame Graph</text>
+<text id="details" x="10.00" y="901" > </text>
+<text id="unzoom" x="10.00" y="24" class="hide">Reset Zoom</text>
+<text id="search" x="690.00" y="24" >Search</text>
+<text id="ignorecase" x="774.00" y="24" >ic</text>
+<text id="matched" x="690.00" y="901" > </text>
+<g id="frames">
+<g >
+<title>std::map&lt;unsigned short, ns3::pfsFlowPerf_t, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt; &gt; &gt;::find (198,041 samples, 0.02%)</title><rect x="104.3" y="469" width="0.2" height="15.0" fill="rgb(211,28,6)" rx="2" ry="2" />
+<text  x="107.29" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::LteSpectrumModelId, std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt;, std::_Select1st&lt;std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt; &gt;, std::less&lt;ns3::LteSpectrumModelId&gt;, std::allocator&lt;std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt; &gt; &gt;::_M_begin (165,062 samples, 0.02%)</title><rect x="55.1" y="453" width="0.1" height="15.0" fill="rgb(233,130,31)" rx="2" ry="2" />
+<text  x="58.06" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt; &gt; &gt;::_M_mbegin (190,024 samples, 0.02%)</title><rect x="186.4" y="437" width="0.2" height="15.0" fill="rgb(247,197,47)" rx="2" ry="2" />
+<text  x="189.45" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt; &gt;::_M_valptr (198,501 samples, 0.02%)</title><rect x="675.2" y="453" width="0.2" height="15.0" fill="rgb(222,81,19)" rx="2" ry="2" />
+<text  x="678.20" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::operator= (550,220 samples, 0.06%)</title><rect x="483.2" y="325" width="0.5" height="15.0" fill="rgb(243,177,42)" rx="2" ry="2" />
+<text  x="486.21" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt; ns3::CreateObject&lt;ns3::PacketBurst&gt; (5,659,329 samples, 0.58%)</title><rect x="370.7" y="533" width="4.6" height="15.0" fill="rgb(205,4,0)" rx="2" ry="2" />
+<text  x="373.73" y="543.5" ></text>
+</g>
+<g >
+<title>[libc.so.6] (128,671 samples, 0.01%)</title><rect x="78.6" y="341" width="0.1" height="15.0" fill="rgb(223,84,20)" rx="2" ry="2" />
+<text  x="81.56" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Packet&gt;::Ptr (155,467 samples, 0.02%)</title><rect x="361.5" y="501" width="0.1" height="15.0" fill="rgb(230,117,28)" rx="2" ry="2" />
+<text  x="364.46" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Function_base::_Base_manager&lt;ns3::Callback&lt;void, ns3::SpectrumValue const&amp;&gt;::Callback&lt;void  (206,217 samples, 0.02%)</title><rect x="577.5" y="453" width="0.2" height="15.0" fill="rgb(213,39,9)" rx="2" ry="2" />
+<text  x="580.52" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt;::_Vector_base (487,446 samples, 0.05%)</title><rect x="125.6" y="357" width="0.4" height="15.0" fill="rgb(246,192,46)" rx="2" ry="2" />
+<text  x="128.59" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::MapScheduler::Insert (5,134,622 samples, 0.53%)</title><rect x="660.7" y="469" width="4.1" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="663.67" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;::operator (356,060 samples, 0.04%)</title><rect x="75.0" y="517" width="0.3" height="15.0" fill="rgb(243,179,42)" rx="2" ry="2" />
+<text  x="78.03" y="527.5" ></text>
+</g>
+<g >
+<title>decltype  (247,590 samples, 0.03%)</title><rect x="564.2" y="117" width="0.2" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="567.20" y="127.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::vector (188,646 samples, 0.02%)</title><rect x="122.1" y="533" width="0.2" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="125.12" y="543.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_insert&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; const&amp;&gt; (529,781 samples, 0.05%)</title><rect x="598.3" y="261" width="0.5" height="15.0" fill="rgb(210,27,6)" rx="2" ry="2" />
+<text  x="601.34" y="271.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::deallocate (124,394 samples, 0.01%)</title><rect x="776.2" y="293" width="0.1" height="15.0" fill="rgb(209,20,4)" rx="2" ry="2" />
+<text  x="779.16" y="303.5" ></text>
+</g>
+<g >
+<title>std::map&lt;ns3::LteFlowId_t, ns3::FfMacSchedSapProvider::SchedDlRlcBufferReqParameters, std::less&lt;ns3::LteFlowId_t&gt;, std::allocator&lt;std::pair&lt;ns3::LteFlowId_t const, ns3::FfMacSchedSapProvider::SchedDlRlcBufferReqParameters&gt; &gt; &gt;::find (150,793 samples, 0.02%)</title><rect x="18.3" y="293" width="0.1" height="15.0" fill="rgb(229,112,26)" rx="2" ry="2" />
+<text  x="21.31" y="303.5" ></text>
+</g>
+<g >
+<title>pow (195,678 samples, 0.02%)</title><rect x="603.6" y="309" width="0.1" height="15.0" fill="rgb(254,226,54)" rx="2" ry="2" />
+<text  x="606.59" y="319.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::MacCeListElement_s, std::allocator&lt;ns3::MacCeListElement_s&gt; &gt;::~_Vector_base (162,749 samples, 0.02%)</title><rect x="133.3" y="485" width="0.1" height="15.0" fill="rgb(254,229,54)" rx="2" ry="2" />
+<text  x="136.29" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultDeleter&lt;ns3::Packet&gt;::Delete (900,924 samples, 0.09%)</title><rect x="76.0" y="261" width="0.7" height="15.0" fill="rgb(231,123,29)" rx="2" ry="2" />
+<text  x="78.98" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::LteNetDevice::GetNode (287,608 samples, 0.03%)</title><rect x="66.7" y="517" width="0.3" height="15.0" fill="rgb(229,112,26)" rx="2" ry="2" />
+<text  x="69.74" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Bind&lt;void  (421,730 samples, 0.04%)</title><rect x="281.3" y="501" width="0.3" height="15.0" fill="rgb(253,221,52)" rx="2" ry="2" />
+<text  x="284.26" y="511.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::VendorSpecificListElement_s*, std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt; &gt; std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;ns3::VendorSpecificListElement_s const*, std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;ns3::VendorSpecificListElement_s*, std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt; &gt; &gt; (183,538 samples, 0.02%)</title><rect x="18.0" y="245" width="0.2" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="21.01" y="255.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::at (475,937 samples, 0.05%)</title><rect x="224.9" y="485" width="0.3" height="15.0" fill="rgb(220,69,16)" rx="2" ry="2" />
+<text  x="227.85" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::LteRlcSm::DoNotifyTxOpportunity (304,289 samples, 0.03%)</title><rect x="15.5" y="389" width="0.2" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="18.45" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt;::_M_valptr (126,936 samples, 0.01%)</title><rect x="565.3" y="197" width="0.1" height="15.0" fill="rgb(208,14,3)" rx="2" ry="2" />
+<text  x="568.26" y="207.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::_S_relocate (236,704 samples, 0.02%)</title><rect x="219.7" y="437" width="0.2" height="15.0" fill="rgb(242,173,41)" rx="2" ry="2" />
+<text  x="222.66" y="447.5" ></text>
+</g>
+<g >
+<title>void ns3::Simulator::ScheduleWithContext&lt;void  (11,324,289 samples, 1.17%)</title><rect x="333.3" y="501" width="9.1" height="15.0" fill="rgb(222,78,18)" rx="2" ry="2" />
+<text  x="336.30" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::Ptr&lt;ns3::Object&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Object&gt; &gt; &gt;::~_Vector_base (279,523 samples, 0.03%)</title><rect x="379.9" y="293" width="0.3" height="15.0" fill="rgb(221,76,18)" rx="2" ry="2" />
+<text  x="382.94" y="303.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::HigherLayerSelected_s*&gt; (151,525 samples, 0.02%)</title><rect x="255.6" y="325" width="0.1" height="15.0" fill="rgb(251,211,50)" rx="2" ry="2" />
+<text  x="258.57" y="335.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;unsigned short&gt;::allocate (378,466 samples, 0.04%)</title><rect x="218.8" y="389" width="0.3" height="15.0" fill="rgb(214,44,10)" rx="2" ry="2" />
+<text  x="221.77" y="399.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;*, std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt; &gt;::operator+ (275,310 samples, 0.03%)</title><rect x="622.7" y="501" width="0.3" height="15.0" fill="rgb(229,113,27)" rx="2" ry="2" />
+<text  x="625.74" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::MobilityModel::GetPosition (488,812 samples, 0.05%)</title><rect x="738.2" y="549" width="0.4" height="15.0" fill="rgb(217,59,14)" rx="2" ry="2" />
+<text  x="741.18" y="559.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::_M_lower_bound (350,404 samples, 0.04%)</title><rect x="223.4" y="453" width="0.3" height="15.0" fill="rgb(226,97,23)" rx="2" ry="2" />
+<text  x="226.42" y="463.5" ></text>
+</g>
+<g >
+<title>double std::reduce&lt;__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, double&gt; (204,657 samples, 0.02%)</title><rect x="725.9" y="325" width="0.2" height="15.0" fill="rgb(218,62,15)" rx="2" ry="2" />
+<text  x="728.92" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::MemberSchedSapProvider&lt;ns3::PfFfMacScheduler&gt;::SchedDlTriggerReq (314,249 samples, 0.03%)</title><rect x="11.2" y="517" width="0.2" height="15.0" fill="rgb(247,193,46)" rx="2" ry="2" />
+<text  x="14.17" y="527.5" ></text>
+</g>
+<g >
+<title>unsigned int* std::__fill_n_a&lt;unsigned int*, unsigned long, unsigned int&gt; (643,609 samples, 0.07%)</title><rect x="695.9" y="405" width="0.5" height="15.0" fill="rgb(252,216,51)" rx="2" ry="2" />
+<text  x="698.92" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, unsigned int&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt; &gt;::_M_lower_bound (1,092,232 samples, 0.11%)</title><rect x="223.9" y="453" width="0.9" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="226.94" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::IsotropicAntennaModel::GetGainDb (146,639 samples, 0.02%)</title><rect x="66.5" y="517" width="0.1" height="15.0" fill="rgb(208,17,4)" rx="2" ry="2" />
+<text  x="69.53" y="527.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::CqiListElement_s&gt; (416,767 samples, 0.04%)</title><rect x="106.8" y="405" width="0.3" height="15.0" fill="rgb(241,165,39)" rx="2" ry="2" />
+<text  x="109.77" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::MacCeListElement_s::~MacCeListElement_s (204,134 samples, 0.02%)</title><rect x="457.7" y="261" width="0.2" height="15.0" fill="rgb(209,20,4)" rx="2" ry="2" />
+<text  x="460.69" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::EventId::EventId (124,898 samples, 0.01%)</title><rect x="706.2" y="469" width="0.1" height="15.0" fill="rgb(206,4,1)" rx="2" ry="2" />
+<text  x="709.19" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::TagBuffer::ReadU32 (411,294 samples, 0.04%)</title><rect x="426.8" y="181" width="0.3" height="15.0" fill="rgb(252,216,51)" rx="2" ry="2" />
+<text  x="429.81" y="191.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; &gt;::_M_ptr (532,897 samples, 0.05%)</title><rect x="348.1" y="501" width="0.5" height="15.0" fill="rgb(219,67,16)" rx="2" ry="2" />
+<text  x="351.13" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt; &gt;::_M_valptr (427,542 samples, 0.04%)</title><rect x="158.3" y="341" width="0.3" height="15.0" fill="rgb(251,211,50)" rx="2" ry="2" />
+<text  x="161.27" y="351.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::~vector (148,894 samples, 0.02%)</title><rect x="303.0" y="501" width="0.1" height="15.0" fill="rgb(252,219,52)" rx="2" ry="2" />
+<text  x="305.97" y="511.5" ></text>
+</g>
+<g >
+<title>double* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, double*, double&gt; (583,431 samples, 0.06%)</title><rect x="324.9" y="453" width="0.4" height="15.0" fill="rgb(222,79,19)" rx="2" ry="2" />
+<text  x="327.85" y="463.5" ></text>
+</g>
+<g >
+<title>double* std::fill_n&lt;double*, unsigned long, double&gt; (461,600 samples, 0.05%)</title><rect x="301.4" y="373" width="0.4" height="15.0" fill="rgb(234,135,32)" rx="2" ry="2" />
+<text  x="304.40" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Packet&gt;::~Ptr (4,598,067 samples, 0.47%)</title><rect x="545.4" y="181" width="3.7" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="548.41" y="191.5" ></text>
+</g>
+<g >
+<title>std::_Function_base::_Base_manager&lt;ns3::Callback&lt;void, ns3::SpectrumValue const&amp;&gt;::Callback&lt;void  (394,803 samples, 0.04%)</title><rect x="468.0" y="453" width="0.3" height="15.0" fill="rgb(213,39,9)" rx="2" ry="2" />
+<text  x="471.00" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumSignalParametersDataFrame::~LteSpectrumSignalParametersDataFrame (2,421,676 samples, 0.25%)</title><rect x="652.5" y="453" width="1.9" height="15.0" fill="rgb(242,174,41)" rx="2" ry="2" />
+<text  x="655.49" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;int, std::allocator&lt;int&gt; &gt;::_Vector_base (208,316 samples, 0.02%)</title><rect x="91.4" y="533" width="0.1" height="15.0" fill="rgb(215,47,11)" rx="2" ry="2" />
+<text  x="94.37" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt; &gt;::operator* (332,309 samples, 0.03%)</title><rect x="428.9" y="277" width="0.3" height="15.0" fill="rgb(221,76,18)" rx="2" ry="2" />
+<text  x="431.92" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::MatrixArray&lt;std::complex&lt;double&gt; &gt; const&gt;::Acquire (149,159 samples, 0.02%)</title><rect x="645.4" y="437" width="0.1" height="15.0" fill="rgb(234,134,32)" rx="2" ry="2" />
+<text  x="648.40" y="447.5" ></text>
+</g>
+<g >
+<title>unsigned short* std::uninitialized_fill_n&lt;unsigned short*, unsigned long, unsigned short&gt; (858,492 samples, 0.09%)</title><rect x="252.1" y="437" width="0.6" height="15.0" fill="rgb(217,59,14)" rx="2" ry="2" />
+<text  x="255.05" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue&gt; ns3::Copy&lt;ns3::SpectrumValue&gt; (148,581 samples, 0.02%)</title><rect x="114.8" y="485" width="0.2" height="15.0" fill="rgb(223,83,19)" rx="2" ry="2" />
+<text  x="117.85" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::MobilityModel const&gt;::operator (353,481 samples, 0.04%)</title><rect x="740.4" y="501" width="0.3" height="15.0" fill="rgb(240,164,39)" rx="2" ry="2" />
+<text  x="743.37" y="511.5" ></text>
+</g>
+<g >
+<title>[libc.so.6] (487,893 samples, 0.05%)</title><rect x="407.7" y="341" width="0.4" height="15.0" fill="rgb(223,84,20)" rx="2" ry="2" />
+<text  x="410.68" y="351.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::find (146,964 samples, 0.02%)</title><rect x="99.3" y="469" width="0.1" height="15.0" fill="rgb(223,83,20)" rx="2" ry="2" />
+<text  x="102.32" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt;::_M_lower_bound (310,068 samples, 0.03%)</title><rect x="437.2" y="261" width="0.2" height="15.0" fill="rgb(240,162,38)" rx="2" ry="2" />
+<text  x="440.20" y="271.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt;::_Vector_impl::_Vector_impl (201,403 samples, 0.02%)</title><rect x="445.1" y="293" width="0.2" height="15.0" fill="rgb(229,112,26)" rx="2" ry="2" />
+<text  x="448.11" y="303.5" ></text>
+</g>
+<g >
+<title>decltype  (197,496 samples, 0.02%)</title><rect x="342.1" y="325" width="0.2" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="345.10" y="335.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned int, std::allocator&lt;unsigned int&gt; &gt;::operator[] (232,400 samples, 0.02%)</title><rect x="694.6" y="485" width="0.2" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="697.64" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt;::push_back (329,003 samples, 0.03%)</title><rect x="101.5" y="469" width="0.3" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="104.53" y="479.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::UlInfoListElement_s*, ns3::UlInfoListElement_s&gt; (271,620 samples, 0.03%)</title><rect x="265.5" y="485" width="0.2" height="15.0" fill="rgb(247,195,46)" rx="2" ry="2" />
+<text  x="268.48" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultDeleter&lt;ns3::SpectrumValue&gt;::Delete (207,577 samples, 0.02%)</title><rect x="78.9" y="485" width="0.2" height="15.0" fill="rgb(222,79,19)" rx="2" ry="2" />
+<text  x="81.90" y="495.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt; &gt; &gt;::find (1,864,747 samples, 0.19%)</title><rect x="169.5" y="453" width="1.5" height="15.0" fill="rgb(211,30,7)" rx="2" ry="2" />
+<text  x="172.46" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::UlDciListElement_s, std::allocator&lt;ns3::UlDciListElement_s&gt; &gt;::size (319,528 samples, 0.03%)</title><rect x="250.4" y="437" width="0.2" height="15.0" fill="rgb(205,1,0)" rx="2" ry="2" />
+<text  x="253.39" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Callback&lt;void, std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt;::operator (29,097,935 samples, 3.00%)</title><rect x="441.0" y="549" width="23.4" height="15.0" fill="rgb(229,110,26)" rx="2" ry="2" />
+<text  x="444.04" y="559.5" >n..</text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt;::allocate (267,808 samples, 0.03%)</title><rect x="499.4" y="453" width="0.2" height="15.0" fill="rgb(243,178,42)" rx="2" ry="2" />
+<text  x="502.42" y="463.5" ></text>
+</g>
+<g >
+<title>[unknown] (29,966,440 samples, 3.09%)</title><rect x="11.2" y="837" width="24.1" height="15.0" fill="rgb(210,24,5)" rx="2" ry="2" />
+<text  x="14.15" y="847.5" >[..</text>
+</g>
+<g >
+<title>ns3::MakeEvent&lt;void  (22,443,594 samples, 2.31%)</title><rect x="17.2" y="741" width="18.0" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="20.17" y="751.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, unsigned int&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt; &gt;::_S_key (509,708 samples, 0.05%)</title><rect x="224.1" y="437" width="0.4" height="15.0" fill="rgb(219,66,15)" rx="2" ry="2" />
+<text  x="227.07" y="447.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::operator= (231,116 samples, 0.02%)</title><rect x="148.1" y="421" width="0.2" height="15.0" fill="rgb(224,91,21)" rx="2" ry="2" />
+<text  x="151.10" y="431.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt;::~vector (296,190 samples, 0.03%)</title><rect x="131.2" y="501" width="0.3" height="15.0" fill="rgb(254,227,54)" rx="2" ry="2" />
+<text  x="134.25" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::MemberSchedSapProvider&lt;ns3::PfFfMacScheduler&gt;::SchedDlRlcBufferReq (2,595,942 samples, 0.27%)</title><rect x="25.4" y="341" width="2.0" height="15.0" fill="rgb(218,60,14)" rx="2" ry="2" />
+<text  x="28.36" y="351.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;int const, double&gt; &gt;::_M_valptr (197,171 samples, 0.02%)</title><rect x="58.1" y="437" width="0.1" height="15.0" fill="rgb(252,219,52)" rx="2" ry="2" />
+<text  x="61.09" y="447.5" ></text>
+</g>
+<g >
+<title>std::remove_reference&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;&amp;&gt;::type&amp;&amp; std::move&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;&amp;&gt; (190,575 samples, 0.02%)</title><rect x="381.4" y="421" width="0.2" height="15.0" fill="rgb(217,56,13)" rx="2" ry="2" />
+<text  x="384.41" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapProvider::ReportBufferStatusParameters&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider::ReportBufferStatusParameters&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider::ReportBufferStatusParameters&gt; &gt; &gt;::end (236,767 samples, 0.02%)</title><rect x="690.6" y="485" width="0.2" height="15.0" fill="rgb(221,74,17)" rx="2" ry="2" />
+<text  x="693.59" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt;::_M_deallocate (378,541 samples, 0.04%)</title><rect x="256.4" y="357" width="0.3" height="15.0" fill="rgb(211,29,6)" rx="2" ry="2" />
+<text  x="259.39" y="367.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::DlInfoListElement_s const*, std::vector&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt; &gt;::base (239,920 samples, 0.02%)</title><rect x="257.1" y="485" width="0.2" height="15.0" fill="rgb(207,10,2)" rx="2" ry="2" />
+<text  x="260.13" y="495.5" ></text>
+</g>
+<g >
+<title>__pow_finite@plt (150,295 samples, 0.02%)</title><rect x="678.9" y="485" width="0.1" height="15.0" fill="rgb(251,213,51)" rx="2" ry="2" />
+<text  x="681.89" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumPhy::UpdateSinrPerceived (1,031,003 samples, 0.11%)</title><rect x="482.2" y="341" width="0.9" height="15.0" fill="rgb(226,98,23)" rx="2" ry="2" />
+<text  x="485.23" y="351.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_M_create_storage (168,940 samples, 0.02%)</title><rect x="78.5" y="453" width="0.2" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="81.52" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::TbId_t, std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::_Select1st&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::_M_begin (366,917 samples, 0.04%)</title><rect x="507.3" y="517" width="0.3" height="15.0" fill="rgb(245,184,44)" rx="2" ry="2" />
+<text  x="510.28" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;::_M_valptr (244,479 samples, 0.03%)</title><rect x="507.8" y="485" width="0.2" height="15.0" fill="rgb(218,62,14)" rx="2" ry="2" />
+<text  x="510.80" y="495.5" ></text>
+</g>
+<g >
+<title>bool __gnu_cxx::operator==&lt;ns3::DlInfoListElement_s const*, std::vector&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt; &gt; (155,906 samples, 0.02%)</title><rect x="258.3" y="421" width="0.2" height="15.0" fill="rgb(222,80,19)" rx="2" ry="2" />
+<text  x="261.33" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::IidManager::GetParent (124,384 samples, 0.01%)</title><rect x="542.4" y="245" width="0.1" height="15.0" fill="rgb(217,59,14)" rx="2" ry="2" />
+<text  x="545.42" y="255.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;double&gt;::deallocate (199,701 samples, 0.02%)</title><rect x="716.8" y="357" width="0.2" height="15.0" fill="rgb(223,83,20)" rx="2" ry="2" />
+<text  x="719.83" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::LteUePhy::CreateTxPowerSpectralDensity (6,920,606 samples, 0.71%)</title><rect x="674.3" y="533" width="5.6" height="15.0" fill="rgb(241,169,40)" rx="2" ry="2" />
+<text  x="677.32" y="543.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;* std::__copy_move_a2&lt;true, std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;*, std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;*&gt; (145,758 samples, 0.02%)</title><rect x="110.6" y="437" width="0.1" height="15.0" fill="rgb(245,186,44)" rx="2" ry="2" />
+<text  x="113.56" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_M_copy (400,356 samples, 0.04%)</title><rect x="232.5" y="437" width="0.3" height="15.0" fill="rgb(218,60,14)" rx="2" ry="2" />
+<text  x="235.50" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_Vector_base (163,185 samples, 0.02%)</title><rect x="56.8" y="453" width="0.1" height="15.0" fill="rgb(237,150,35)" rx="2" ry="2" />
+<text  x="59.81" y="463.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_insert&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; const&amp;&gt; (186,142 samples, 0.02%)</title><rect x="648.9" y="373" width="0.1" height="15.0" fill="rgb(210,27,6)" rx="2" ry="2" />
+<text  x="651.88" y="383.5" ></text>
+</g>
+<g >
+<title>void ns3::Simulator::ScheduleWithContext&lt;void  (10,844,170 samples, 1.12%)</title><rect x="660.2" y="517" width="8.8" height="15.0" fill="rgb(222,78,18)" rx="2" ry="2" />
+<text  x="663.24" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::TracedCallback&lt;ns3::PhyTransmissionStatParameters&gt;::operator (148,768 samples, 0.02%)</title><rect x="391.4" y="549" width="0.1" height="15.0" fill="rgb(254,228,54)" rx="2" ry="2" />
+<text  x="394.40" y="559.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteSpectrumSignalParametersDataFrame&gt;::~Ptr (192,141 samples, 0.02%)</title><rect x="670.6" y="533" width="0.1" height="15.0" fill="rgb(229,114,27)" rx="2" ry="2" />
+<text  x="673.59" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt; &gt;::_M_valptr (167,523 samples, 0.02%)</title><rect x="429.8" y="213" width="0.1" height="15.0" fill="rgb(251,211,50)" rx="2" ry="2" />
+<text  x="432.77" y="223.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumModel::GetNumBands (198,424 samples, 0.02%)</title><rect x="402.9" y="485" width="0.2" height="15.0" fill="rgb(247,194,46)" rx="2" ry="2" />
+<text  x="405.95" y="495.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;::pair&lt;unsigned short const&amp;&gt; (614,403 samples, 0.06%)</title><rect x="191.3" y="373" width="0.5" height="15.0" fill="rgb(236,144,34)" rx="2" ry="2" />
+<text  x="194.33" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteUeMac::LcInfo&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteUeMac::LcInfo&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteUeMac::LcInfo&gt; &gt; &gt;::_M_begin (344,173 samples, 0.04%)</title><rect x="690.9" y="469" width="0.3" height="15.0" fill="rgb(246,188,45)" rx="2" ry="2" />
+<text  x="693.94" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_Vector_impl::_Vector_impl (304,552 samples, 0.03%)</title><rect x="687.1" y="437" width="0.2" height="15.0" fill="rgb(226,98,23)" rx="2" ry="2" />
+<text  x="690.08" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::HigherLayerSelected_s::operator= (193,644 samples, 0.02%)</title><rect x="134.9" y="373" width="0.1" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="137.86" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::operator&lt; (470,743 samples, 0.05%)</title><rect x="275.1" y="405" width="0.4" height="15.0" fill="rgb(234,137,32)" rx="2" ry="2" />
+<text  x="278.07" y="415.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::BuildRarListElement_s*&gt; (157,406 samples, 0.02%)</title><rect x="146.4" y="421" width="0.2" height="15.0" fill="rgb(213,41,9)" rx="2" ry="2" />
+<text  x="149.43" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteControlMessage&gt;::Acquire (405,134 samples, 0.04%)</title><rect x="499.8" y="421" width="0.3" height="15.0" fill="rgb(212,36,8)" rx="2" ry="2" />
+<text  x="502.80" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;2ul, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::~_Tuple_impl (4,416,635 samples, 0.46%)</title><rect x="773.7" y="517" width="3.5" height="15.0" fill="rgb(217,57,13)" rx="2" ry="2" />
+<text  x="776.67" y="527.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::fill_n&lt;unsigned char*, unsigned long, unsigned char&gt; (339,561 samples, 0.04%)</title><rect x="216.0" y="405" width="0.3" height="15.0" fill="rgb(211,28,6)" rx="2" ry="2" />
+<text  x="219.00" y="415.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::vector (190,302 samples, 0.02%)</title><rect x="387.9" y="533" width="0.2" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="390.94" y="543.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_get_node (388,525 samples, 0.04%)</title><rect x="499.3" y="469" width="0.3" height="15.0" fill="rgb(247,194,46)" rx="2" ry="2" />
+<text  x="502.33" y="479.5" ></text>
+</g>
+<g >
+<title>malloc (205,465 samples, 0.02%)</title><rect x="558.0" y="165" width="0.2" height="15.0" fill="rgb(230,119,28)" rx="2" ry="2" />
+<text  x="561.03" y="175.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::Ptr&lt;ns3::Object&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Object&gt; &gt; &gt;::~_Vector_base (293,725 samples, 0.03%)</title><rect x="550.0" y="197" width="0.2" height="15.0" fill="rgb(221,76,18)" rx="2" ry="2" />
+<text  x="552.96" y="207.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumSignalParametersDlCtrlFrame::LteSpectrumSignalParametersDlCtrlFrame (6,566,512 samples, 0.68%)</title><rect x="314.1" y="469" width="5.3" height="15.0" fill="rgb(234,133,32)" rx="2" ry="2" />
+<text  x="317.09" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt; &gt;::operator* (187,135 samples, 0.02%)</title><rect x="234.7" y="485" width="0.2" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="237.73" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;::at (420,921 samples, 0.04%)</title><rect x="375.5" y="533" width="0.4" height="15.0" fill="rgb(233,131,31)" rx="2" ry="2" />
+<text  x="378.53" y="543.5" ></text>
+</g>
+<g >
+<title>operator new (217,527 samples, 0.02%)</title><rect x="319.4" y="469" width="0.1" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="322.37" y="479.5" ></text>
+</g>
+<g >
+<title>std::__detail::_List_node_header::_M_base (142,742 samples, 0.01%)</title><rect x="290.7" y="357" width="0.1" height="15.0" fill="rgb(205,1,0)" rx="2" ry="2" />
+<text  x="293.71" y="367.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_clear (148,437 samples, 0.02%)</title><rect x="698.0" y="517" width="0.1" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="700.96" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_M_get_node (128,987 samples, 0.01%)</title><rect x="59.6" y="389" width="0.1" height="15.0" fill="rgb(231,120,28)" rx="2" ry="2" />
+<text  x="62.58" y="399.5" ></text>
+</g>
+<g >
+<title>std::map&lt;ns3::Scheduler::EventKey, ns3::EventImpl*, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::begin (1,458,842 samples, 0.15%)</title><rect x="760.2" y="709" width="1.2" height="15.0" fill="rgb(247,193,46)" rx="2" ry="2" />
+<text  x="763.21" y="719.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::~_Vector_base (285,804 samples, 0.03%)</title><rect x="773.3" y="421" width="0.2" height="15.0" fill="rgb(223,86,20)" rx="2" ry="2" />
+<text  x="776.26" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::MakeEvent&lt;void  (200,168 samples, 0.02%)</title><rect x="715.5" y="485" width="0.2" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="718.50" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::operator= (234,084 samples, 0.02%)</title><rect x="419.3" y="341" width="0.2" height="15.0" fill="rgb(253,223,53)" rx="2" ry="2" />
+<text  x="422.30" y="351.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt;::~_Vector_base (271,191 samples, 0.03%)</title><rect x="445.7" y="293" width="0.2" height="15.0" fill="rgb(244,183,43)" rx="2" ry="2" />
+<text  x="448.72" y="303.5" ></text>
+</g>
+<g >
+<title>std::operator== (126,322 samples, 0.01%)</title><rect x="74.2" y="469" width="0.1" height="15.0" fill="rgb(229,110,26)" rx="2" ry="2" />
+<text  x="77.15" y="479.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::VendorSpecificListElement_s*, std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt; &gt; std::copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::VendorSpecificListElement_s const*, std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;ns3::VendorSpecificListElement_s*, std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt; &gt; &gt; (603,286 samples, 0.06%)</title><rect x="25.7" y="277" width="0.5" height="15.0" fill="rgb(231,119,28)" rx="2" ry="2" />
+<text  x="28.74" y="287.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;3ul, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::_Tuple_impl&lt;ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;&amp;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;&amp;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;&amp;, void&gt; (395,163 samples, 0.04%)</title><rect x="666.9" y="373" width="0.4" height="15.0" fill="rgb(215,46,11)" rx="2" ry="2" />
+<text  x="669.95" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::MacCeValue_u::MacCeValue_u (1,932,297 samples, 0.20%)</title><rect x="686.7" y="485" width="1.5" height="15.0" fill="rgb(219,65,15)" rx="2" ry="2" />
+<text  x="689.69" y="495.5" ></text>
+</g>
+<g >
+<title>std::_List_node&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt;::_M_valptr (161,864 samples, 0.02%)</title><rect x="70.2" y="437" width="0.2" height="15.0" fill="rgb(215,46,11)" rx="2" ry="2" />
+<text  x="73.24" y="447.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::CqiListElement_s, std::allocator&lt;ns3::CqiListElement_s&gt; &gt;::empty (704,819 samples, 0.07%)</title><rect x="254.2" y="517" width="0.5" height="15.0" fill="rgb(231,122,29)" rx="2" ry="2" />
+<text  x="257.18" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::operator-= (2,676,966 samples, 0.28%)</title><rect x="415.0" y="549" width="2.2" height="15.0" fill="rgb(252,220,52)" rx="2" ry="2" />
+<text  x="418.02" y="559.5" ></text>
+</g>
+<g >
+<title>bool __gnu_cxx::operator==&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; (358,959 samples, 0.04%)</title><rect x="745.7" y="517" width="0.3" height="15.0" fill="rgb(205,3,0)" rx="2" ry="2" />
+<text  x="748.72" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbMac::DoUlInfoListElementHarqFeedback (373,450 samples, 0.04%)</title><rect x="440.4" y="341" width="0.3" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="443.41" y="351.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_M_erase (518,709 samples, 0.05%)</title><rect x="60.7" y="421" width="0.4" height="15.0" fill="rgb(227,102,24)" rx="2" ry="2" />
+<text  x="63.68" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::HarqStatus_e* std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;ns3::DlInfoListElement_s::HarqStatus_e const*, std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt; &gt;, ns3::DlInfoListElement_s::HarqStatus_e*&gt; (147,743 samples, 0.02%)</title><rect x="107.3" y="293" width="0.1" height="15.0" fill="rgb(212,36,8)" rx="2" ry="2" />
+<text  x="110.33" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::DlDciLteControlMessage&gt;::operator (240,645 samples, 0.02%)</title><rect x="160.2" y="453" width="0.1" height="15.0" fill="rgb(222,79,19)" rx="2" ry="2" />
+<text  x="163.15" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::size (208,545 samples, 0.02%)</title><rect x="520.8" y="325" width="0.2" height="15.0" fill="rgb(216,50,12)" rx="2" ry="2" />
+<text  x="523.79" y="335.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_begin (234,091 samples, 0.02%)</title><rect x="336.8" y="389" width="0.1" height="15.0" fill="rgb(238,154,36)" rx="2" ry="2" />
+<text  x="339.76" y="399.5" ></text>
+</g>
+<g >
+<title>__log10_finite (150,649 samples, 0.02%)</title><rect x="582.3" y="309" width="0.1" height="15.0" fill="rgb(237,151,36)" rx="2" ry="2" />
+<text  x="585.25" y="319.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt;::clear (1,509,367 samples, 0.16%)</title><rect x="255.7" y="517" width="1.2" height="15.0" fill="rgb(232,124,29)" rx="2" ry="2" />
+<text  x="258.72" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::Time::From (518,604 samples, 0.05%)</title><rect x="389.5" y="517" width="0.4" height="15.0" fill="rgb(244,182,43)" rx="2" ry="2" />
+<text  x="392.50" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::SpectrumValue (242,130 samples, 0.02%)</title><rect x="409.8" y="517" width="0.2" height="15.0" fill="rgb(211,27,6)" rx="2" ry="2" />
+<text  x="412.84" y="527.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::~vector (390,089 samples, 0.04%)</title><rect x="483.8" y="501" width="0.3" height="15.0" fill="rgb(225,92,22)" rx="2" ry="2" />
+<text  x="486.78" y="511.5" ></text>
+</g>
+<g >
+<title>void std::destroy_at&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; (266,588 samples, 0.03%)</title><rect x="193.3" y="389" width="0.3" height="15.0" fill="rgb(228,107,25)" rx="2" ry="2" />
+<text  x="196.34" y="399.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;::_M_ptr (153,808 samples, 0.02%)</title><rect x="336.4" y="389" width="0.1" height="15.0" fill="rgb(219,66,15)" rx="2" ry="2" />
+<text  x="339.39" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, unsigned int&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt; &gt;::find (178,285 samples, 0.02%)</title><rect x="103.0" y="453" width="0.2" height="15.0" fill="rgb(214,44,10)" rx="2" ry="2" />
+<text  x="106.02" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::GetSpectrumModelUid (275,599 samples, 0.03%)</title><rect x="327.8" y="501" width="0.2" height="15.0" fill="rgb(254,228,54)" rx="2" ry="2" />
+<text  x="330.77" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::HarqStatus_e* std::copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::DlInfoListElement_s::HarqStatus_e const*, std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt; &gt;, ns3::DlInfoListElement_s::HarqStatus_e*&gt; (147,743 samples, 0.02%)</title><rect x="107.3" y="309" width="0.1" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="110.33" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::LteUePowerControl::GetPucchTxPower (379,341 samples, 0.04%)</title><rect x="680.8" y="549" width="0.3" height="15.0" fill="rgb(242,170,40)" rx="2" ry="2" />
+<text  x="683.81" y="559.5" ></text>
+</g>
+<g >
+<title>ns3::PfFfMacScheduler::DoSchedUlMacCtrlInfoReq (867,311 samples, 0.09%)</title><rect x="225.5" y="501" width="0.7" height="15.0" fill="rgb(244,180,43)" rx="2" ry="2" />
+<text  x="228.49" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_M_get_Tp_allocator (158,214 samples, 0.02%)</title><rect x="302.0" y="421" width="0.1" height="15.0" fill="rgb(227,101,24)" rx="2" ry="2" />
+<text  x="304.96" y="431.5" ></text>
+</g>
+<g >
+<title>double std::reduce&lt;__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, double, std::plus&lt;void&gt; &gt; (335,268 samples, 0.03%)</title><rect x="582.4" y="293" width="0.2" height="15.0" fill="rgb(221,77,18)" rx="2" ry="2" />
+<text  x="585.38" y="303.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;* std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_clone_node&lt;false, std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_Alloc_node&gt; (156,128 samples, 0.02%)</title><rect x="667.1" y="229" width="0.1" height="15.0" fill="rgb(205,4,0)" rx="2" ry="2" />
+<text  x="670.07" y="239.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_erase (821,493 samples, 0.08%)</title><rect x="776.6" y="405" width="0.6" height="15.0" fill="rgb(247,197,47)" rx="2" ry="2" />
+<text  x="779.56" y="415.5" ></text>
+</g>
+<g >
+<title>int* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;int const*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt;, int*&gt; (831,586 samples, 0.09%)</title><rect x="573.6" y="325" width="0.7" height="15.0" fill="rgb(251,216,51)" rx="2" ry="2" />
+<text  x="576.65" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::Object::~Object (158,753 samples, 0.02%)</title><rect x="17.0" y="357" width="0.1" height="15.0" fill="rgb(229,110,26)" rx="2" ry="2" />
+<text  x="19.99" y="367.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt;::max_size (243,139 samples, 0.03%)</title><rect x="511.9" y="501" width="0.2" height="15.0" fill="rgb(235,141,33)" rx="2" ry="2" />
+<text  x="514.89" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_Auto_node::_Auto_node&lt;std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (297,286 samples, 0.03%)</title><rect x="615.5" y="437" width="0.2" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="618.51" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::DlDciLteControlMessage::~DlDciLteControlMessage (361,458 samples, 0.04%)</title><rect x="609.9" y="437" width="0.3" height="15.0" fill="rgb(212,34,8)" rx="2" ry="2" />
+<text  x="612.94" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::MemberLteCcmRrcSapUser&lt;ns3::LteEnbRrc&gt;::GetUeManager (297,730 samples, 0.03%)</title><rect x="18.4" y="357" width="0.3" height="15.0" fill="rgb(228,107,25)" rx="2" ry="2" />
+<text  x="21.43" y="367.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;is_member_pointer_v&lt;void  (3,010,892 samples, 0.31%)</title><rect x="616.6" y="533" width="2.5" height="15.0" fill="rgb(241,170,40)" rx="2" ry="2" />
+<text  x="619.64" y="543.5" ></text>
+</g>
+<g >
+<title>std::move_iterator&lt;ns3::DlInfoListElement_s::HarqStatus_e*&gt; std::__make_move_if_noexcept_iterator&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::move_iterator&lt;ns3::DlInfoListElement_s::HarqStatus_e*&gt; &gt; (147,819 samples, 0.02%)</title><rect x="511.6" y="501" width="0.1" height="15.0" fill="rgb(228,107,25)" rx="2" ry="2" />
+<text  x="514.61" y="511.5" ></text>
+</g>
+<g >
+<title>std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;* std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_create_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; const&amp;&gt; (1,304,199 samples, 0.13%)</title><rect x="148.8" y="373" width="1.0" height="15.0" fill="rgb(230,116,27)" rx="2" ry="2" />
+<text  x="151.79" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumPhy* ns3::PeekPointer&lt;ns3::LteSpectrumPhy&gt; (451,162 samples, 0.05%)</title><rect x="578.5" y="389" width="0.3" height="15.0" fill="rgb(206,4,1)" rx="2" ry="2" />
+<text  x="581.45" y="399.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::VendorSpecificListElement_s*&gt; (162,953 samples, 0.02%)</title><rect x="473.5" y="261" width="0.1" height="15.0" fill="rgb(236,143,34)" rx="2" ry="2" />
+<text  x="476.48" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::MultiModelSpectrumChannel::StartTx (774,582 samples, 0.08%)</title><rect x="613.7" y="533" width="0.7" height="15.0" fill="rgb(227,102,24)" rx="2" ry="2" />
+<text  x="616.73" y="543.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;std::__strip_reference_wrapper&lt;std::decay&lt;ns3::Scheduler::EventKey const&amp;&gt;::type&gt;::__type, std::__strip_reference_wrapper&lt;std::decay&lt;ns3::EventImpl* const&amp;&gt;::type&gt;::__type&gt; std::make_pair&lt;ns3::Scheduler::EventKey const&amp;, ns3::EventImpl* const&amp;&gt; (831,665 samples, 0.09%)</title><rect x="276.9" y="485" width="0.7" height="15.0" fill="rgb(235,141,33)" rx="2" ry="2" />
+<text  x="279.91" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::SpectrumSignalParameters, ns3::Empty, ns3::DefaultDeleter&lt;ns3::SpectrumSignalParameters&gt; &gt;::Unref (3,444,708 samples, 0.36%)</title><rect x="75.3" y="501" width="2.8" height="15.0" fill="rgb(254,229,54)" rx="2" ry="2" />
+<text  x="78.31" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteControlMessage&gt;::Ptr (405,134 samples, 0.04%)</title><rect x="499.8" y="437" width="0.3" height="15.0" fill="rgb(222,81,19)" rx="2" ry="2" />
+<text  x="502.80" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::CqiListElement_s* std::__uninitialized_move_if_noexcept_a&lt;ns3::CqiListElement_s*, ns3::CqiListElement_s*, std::allocator&lt;ns3::CqiListElement_s&gt; &gt; (437,706 samples, 0.05%)</title><rect x="127.4" y="485" width="0.3" height="15.0" fill="rgb(227,104,25)" rx="2" ry="2" />
+<text  x="130.36" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt;::_Vector_impl_data::_Vector_impl_data (236,955 samples, 0.02%)</title><rect x="261.3" y="341" width="0.2" height="15.0" fill="rgb(205,0,0)" rx="2" ry="2" />
+<text  x="264.30" y="351.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;ns3::UlDciListElement_s, std::allocator&lt;ns3::UlDciListElement_s&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;ns3::UlDciListElement_s, std::allocator&lt;ns3::UlDciListElement_s&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;ns3::UlDciListElement_s, std::allocator&lt;ns3::UlDciListElement_s&gt; &gt; &gt; &gt; &gt;::find (1,009,230 samples, 0.10%)</title><rect x="240.7" y="469" width="0.9" height="15.0" fill="rgb(223,86,20)" rx="2" ry="2" />
+<text  x="243.75" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::TypeId::TypeId (242,821 samples, 0.03%)</title><rect x="431.2" y="277" width="0.2" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="434.24" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::IidManager::LookupInformation (451,443 samples, 0.05%)</title><rect x="33.9" y="389" width="0.4" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="36.94" y="399.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; (201,303 samples, 0.02%)</title><rect x="83.3" y="325" width="0.2" height="15.0" fill="rgb(213,37,9)" rx="2" ry="2" />
+<text  x="86.35" y="335.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_initialize_dispatch&lt;std::_List_const_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; (143,971 samples, 0.01%)</title><rect x="391.8" y="533" width="0.1" height="15.0" fill="rgb(215,50,12)" rx="2" ry="2" />
+<text  x="394.79" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_header::_Rb_tree_header (152,827 samples, 0.02%)</title><rect x="667.8" y="229" width="0.2" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="670.83" y="239.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned char const, ns3::LteUeMac::LcInfo&gt; &gt;::operator* (213,471 samples, 0.02%)</title><rect x="569.1" y="325" width="0.1" height="15.0" fill="rgb(242,172,41)" rx="2" ry="2" />
+<text  x="572.05" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::Object::SetTypeId (468,464 samples, 0.05%)</title><rect x="374.6" y="501" width="0.3" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="377.57" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::MultiModelSpectrumChannel::FindAndEventuallyAddTxSpectrumModel (301,073 samples, 0.03%)</title><rect x="114.4" y="485" width="0.3" height="15.0" fill="rgb(212,32,7)" rx="2" ry="2" />
+<text  x="117.42" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt; &gt; &gt;::_S_key (304,080 samples, 0.03%)</title><rect x="186.8" y="437" width="0.2" height="15.0" fill="rgb(227,104,25)" rx="2" ry="2" />
+<text  x="189.79" y="447.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt;::push_back (1,945,265 samples, 0.20%)</title><rect x="595.0" y="293" width="1.6" height="15.0" fill="rgb(207,9,2)" rx="2" ry="2" />
+<text  x="598.03" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::ByteTagList::ByteTagList (163,282 samples, 0.02%)</title><rect x="557.2" y="229" width="0.2" height="15.0" fill="rgb(220,69,16)" rx="2" ry="2" />
+<text  x="560.24" y="239.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;is_member_pointer_v&lt;void  (605,810 samples, 0.06%)</title><rect x="109.5" y="517" width="0.5" height="15.0" fill="rgb(241,170,40)" rx="2" ry="2" />
+<text  x="112.51" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::LteUeRrc::DoRecvRrcConnectionReconfiguration (156,981 samples, 0.02%)</title><rect x="701.4" y="565" width="0.1" height="15.0" fill="rgb(241,169,40)" rx="2" ry="2" />
+<text  x="704.42" y="575.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;signed char, std::allocator&lt;signed char&gt; &gt;::back (312,069 samples, 0.03%)</title><rect x="533.2" y="309" width="0.2" height="15.0" fill="rgb(206,6,1)" rx="2" ry="2" />
+<text  x="536.17" y="319.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt; &gt;::destroy&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; (274,123 samples, 0.03%)</title><rect x="378.4" y="309" width="0.2" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="381.40" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Packet&gt; ns3::Create&lt;ns3::Packet, unsigned int&amp;&gt; (2,698,693 samples, 0.28%)</title><rect x="31.2" y="421" width="2.1" height="15.0" fill="rgb(253,223,53)" rx="2" ry="2" />
+<text  x="34.17" y="431.5" ></text>
+</g>
+<g >
+<title> (237,842 samples, 0.02%)</title><rect x="741.1" y="501" width="0.1" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="744.05" y="511.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned short const, unsigned char&gt; &gt;::_M_ptr (151,024 samples, 0.02%)</title><rect x="177.0" y="389" width="0.2" height="15.0" fill="rgb(219,68,16)" rx="2" ry="2" />
+<text  x="180.04" y="399.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::~list (318,396 samples, 0.03%)</title><rect x="463.7" y="373" width="0.2" height="15.0" fill="rgb(222,80,19)" rx="2" ry="2" />
+<text  x="466.68" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::MakeEvent&lt;void  (566,805 samples, 0.06%)</title><rect x="109.5" y="501" width="0.5" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="112.54" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::MultiModelSpectrumChannel::StartTx (34,755,711 samples, 3.58%)</title><rect x="641.0" y="533" width="28.0" height="15.0" fill="rgb(227,102,24)" rx="2" ry="2" />
+<text  x="644.00" y="543.5" >n..</text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::HigherLayerSelected_s*, std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt; &gt; std::copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::HigherLayerSelected_s const*, std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;ns3::HigherLayerSelected_s*, std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt; &gt; &gt; (231,948 samples, 0.02%)</title><rect x="134.8" y="453" width="0.2" height="15.0" fill="rgb(215,48,11)" rx="2" ry="2" />
+<text  x="137.83" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::_M_range_check (157,629 samples, 0.02%)</title><rect x="594.1" y="277" width="0.2" height="15.0" fill="rgb(249,203,48)" rx="2" ry="2" />
+<text  x="597.14" y="287.5" ></text>
+</g>
+<g >
+<title>std::map&lt;int, double, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::map (2,417,353 samples, 0.25%)</title><rect x="58.6" y="517" width="1.9" height="15.0" fill="rgb(232,125,30)" rx="2" ry="2" />
+<text  x="61.58" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_Auto_node::_Auto_node&lt;std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (1,948,514 samples, 0.20%)</title><rect x="270.0" y="437" width="1.5" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="272.98" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::MemberSchedSapProvider&lt;ns3::PfFfMacScheduler&gt;::SchedDlCqiInfoReq (1,099,949 samples, 0.11%)</title><rect x="93.6" y="501" width="0.9" height="15.0" fill="rgb(224,91,21)" rx="2" ry="2" />
+<text  x="96.64" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt; ns3::Create&lt;ns3::PacketBurst&gt; (619,901 samples, 0.06%)</title><rect x="69.6" y="453" width="0.5" height="15.0" fill="rgb(225,93,22)" rx="2" ry="2" />
+<text  x="72.64" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; &gt;::_M_valptr (246,841 samples, 0.03%)</title><rect x="522.2" y="325" width="0.2" height="15.0" fill="rgb(213,39,9)" rx="2" ry="2" />
+<text  x="525.21" y="335.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;bool, std::allocator&lt;bool&gt; &gt;::_M_range_check (423,259 samples, 0.04%)</title><rect x="195.4" y="469" width="0.3" height="15.0" fill="rgb(246,188,45)" rx="2" ry="2" />
+<text  x="198.36" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::~PacketBurst (650,228 samples, 0.07%)</title><rect x="502.4" y="405" width="0.5" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="505.40" y="415.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::splice (569,667 samples, 0.06%)</title><rect x="673.2" y="485" width="0.4" height="15.0" fill="rgb(220,70,16)" rx="2" ry="2" />
+<text  x="676.17" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Identity&lt;unsigned short&gt;::operator (157,285 samples, 0.02%)</title><rect x="395.4" y="485" width="0.2" height="15.0" fill="rgb(240,163,39)" rx="2" ry="2" />
+<text  x="398.43" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Angles::Angles (2,693,187 samples, 0.28%)</title><rect x="309.7" y="485" width="2.2" height="15.0" fill="rgb(254,226,54)" rx="2" ry="2" />
+<text  x="312.69" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::UlInfoListElement_s, std::allocator&lt;ns3::UlInfoListElement_s&gt; &gt;::_Vector_base (164,622 samples, 0.02%)</title><rect x="133.7" y="485" width="0.1" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="136.71" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt; &gt;::_M_begin (168,913 samples, 0.02%)</title><rect x="565.7" y="197" width="0.1" height="15.0" fill="rgb(254,228,54)" rx="2" ry="2" />
+<text  x="568.65" y="207.5" ></text>
+</g>
+<g >
+<title>std::set&lt;unsigned short, std::less&lt;unsigned short&gt;, std::allocator&lt;unsigned short&gt; &gt;::find (313,960 samples, 0.03%)</title><rect x="194.6" y="485" width="0.3" height="15.0" fill="rgb(207,12,2)" rx="2" ry="2" />
+<text  x="197.65" y="495.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;::construct&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; (181,678 samples, 0.02%)</title><rect x="636.4" y="501" width="0.2" height="15.0" fill="rgb(224,89,21)" rx="2" ry="2" />
+<text  x="639.43" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter&gt;::Ref (125,424 samples, 0.01%)</title><rect x="516.6" y="405" width="0.1" height="15.0" fill="rgb(238,153,36)" rx="2" ry="2" />
+<text  x="519.65" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::EventImpl&gt;::operator= (648,075 samples, 0.07%)</title><rect x="727.3" y="501" width="0.5" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="730.33" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Buffer::Create (159,596 samples, 0.02%)</title><rect x="19.0" y="341" width="0.1" height="15.0" fill="rgb(242,174,41)" rx="2" ry="2" />
+<text  x="21.95" y="351.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned int, ns3::RxSpectrumModelInfo, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::RxSpectrumModelInfo&gt; &gt; &gt;::end (198,183 samples, 0.02%)</title><rect x="330.0" y="501" width="0.2" height="15.0" fill="rgb(219,64,15)" rx="2" ry="2" />
+<text  x="333.00" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_Vector_impl::_Vector_impl (259,221 samples, 0.03%)</title><rect x="592.8" y="213" width="0.2" height="15.0" fill="rgb(226,98,23)" rx="2" ry="2" />
+<text  x="595.83" y="223.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::DlInfoListElement_s&gt; (1,227,211 samples, 0.13%)</title><rect x="256.0" y="437" width="0.9" height="15.0" fill="rgb(237,147,35)" rx="2" ry="2" />
+<text  x="258.95" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::MakeEvent&lt;void  (405,218 samples, 0.04%)</title><rect x="64.6" y="453" width="0.3" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="67.60" y="463.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::_List_impl::_List_impl (197,757 samples, 0.02%)</title><rect x="162.1" y="389" width="0.1" height="15.0" fill="rgb(210,24,5)" rx="2" ry="2" />
+<text  x="165.08" y="399.5" ></text>
+</g>
+<g >
+<title>std::tuple_element&lt;1ul, std::pair&lt;unsigned int const&amp;, ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp;&gt; &gt;::type&amp;&amp; std::get&lt;1ul, unsigned int const&amp;, ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp;&gt; (152,590 samples, 0.02%)</title><rect x="660.1" y="501" width="0.1" height="15.0" fill="rgb(219,65,15)" rx="2" ry="2" />
+<text  x="663.11" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::~SpectrumValue (189,290 samples, 0.02%)</title><rect x="112.2" y="437" width="0.2" height="15.0" fill="rgb(247,193,46)" rx="2" ry="2" />
+<text  x="115.24" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteControlMessage&gt;&amp; std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::emplace_back&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; const&amp;&gt; (225,934 samples, 0.02%)</title><rect x="648.8" y="389" width="0.2" height="15.0" fill="rgb(224,89,21)" rx="2" ry="2" />
+<text  x="651.85" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_M_lower_bound (639,648 samples, 0.07%)</title><rect x="57.8" y="469" width="0.5" height="15.0" fill="rgb(239,159,38)" rx="2" ry="2" />
+<text  x="60.83" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::PhichListElement_s* std::__uninitialized_copy&lt;false&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::PhichListElement_s const*, std::vector&lt;ns3::PhichListElement_s, std::allocator&lt;ns3::PhichListElement_s&gt; &gt; &gt;, ns3::PhichListElement_s*&gt; (202,017 samples, 0.02%)</title><rect x="227.5" y="405" width="0.2" height="15.0" fill="rgb(209,19,4)" rx="2" ry="2" />
+<text  x="230.50" y="415.5" ></text>
+</g>
+<g >
+<title>unsigned short* std::__relocate_a&lt;unsigned short*, unsigned short*, std::allocator&lt;unsigned short&gt; &gt; (305,556 samples, 0.03%)</title><rect x="481.1" y="245" width="0.3" height="15.0" fill="rgb(210,27,6)" rx="2" ry="2" />
+<text  x="484.12" y="255.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt;::_Vector_base (159,454 samples, 0.02%)</title><rect x="24.6" y="309" width="0.2" height="15.0" fill="rgb(216,55,13)" rx="2" ry="2" />
+<text  x="27.63" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::Packet::Packet (409,200 samples, 0.04%)</title><rect x="118.0" y="485" width="0.4" height="15.0" fill="rgb(230,115,27)" rx="2" ry="2" />
+<text  x="121.05" y="495.5" ></text>
+</g>
+<g >
+<title>std::function&lt;void  (16,491,026 samples, 1.70%)</title><rect x="470.5" y="405" width="13.3" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="473.52" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_M_create_storage (747,048 samples, 0.08%)</title><rect x="654.9" y="453" width="0.6" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="657.92" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::vector (745,343 samples, 0.08%)</title><rect x="606.5" y="485" width="0.6" height="15.0" fill="rgb(239,156,37)" rx="2" ry="2" />
+<text  x="609.49" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Object::Object (146,079 samples, 0.02%)</title><rect x="96.7" y="405" width="0.2" height="15.0" fill="rgb(242,174,41)" rx="2" ry="2" />
+<text  x="99.74" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::EventId ns3::Simulator::Schedule&lt;void  (3,817,837 samples, 0.39%)</title><rect x="304.9" y="517" width="3.0" height="15.0" fill="rgb(253,224,53)" rx="2" ry="2" />
+<text  x="307.85" y="527.5" ></text>
+</g>
+<g >
+<title>std::_List_node&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt;* std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::_M_create_node&lt;ns3::Ptr&lt;ns3::Packet&gt; const&amp;&gt; (1,799,993 samples, 0.19%)</title><rect x="362.5" y="469" width="1.5" height="15.0" fill="rgb(211,30,7)" rx="2" ry="2" />
+<text  x="365.52" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::~_Vector_base (162,616 samples, 0.02%)</title><rect x="457.7" y="213" width="0.2" height="15.0" fill="rgb(241,168,40)" rx="2" ry="2" />
+<text  x="460.72" y="223.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;* std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_clone_node&lt;false, std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_Alloc_node&gt; (578,209 samples, 0.06%)</title><rect x="341.9" y="405" width="0.4" height="15.0" fill="rgb(205,4,0)" rx="2" ry="2" />
+<text  x="344.85" y="415.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;short, std::allocator&lt;short&gt; &gt;::operator[] (262,863 samples, 0.03%)</title><rect x="681.9" y="517" width="0.2" height="15.0" fill="rgb(217,58,13)" rx="2" ry="2" />
+<text  x="684.86" y="527.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::~vector (426,273 samples, 0.04%)</title><rect x="700.6" y="549" width="0.3" height="15.0" fill="rgb(252,219,52)" rx="2" ry="2" />
+<text  x="703.60" y="559.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;__gnu_cxx::__normal_iterator&lt;ns3::DlInfoListElement_s*, std::vector&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt; &gt; &gt; (300,135 samples, 0.03%)</title><rect x="207.5" y="453" width="0.3" height="15.0" fill="rgb(252,217,51)" rx="2" ry="2" />
+<text  x="210.54" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Simulator::ScheduleWithContext (5,518,602 samples, 0.57%)</title><rect x="82.8" y="501" width="4.4" height="15.0" fill="rgb(230,116,27)" rx="2" ry="2" />
+<text  x="85.79" y="511.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;is_member_pointer_v&lt;void  (2,862,534 samples, 0.30%)</title><rect x="666.0" y="501" width="2.3" height="15.0" fill="rgb(241,170,40)" rx="2" ry="2" />
+<text  x="669.02" y="511.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::BuildBroadcastListElement_s, std::allocator&lt;ns3::BuildBroadcastListElement_s&gt; &gt;::vector (318,568 samples, 0.03%)</title><rect x="173.9" y="469" width="0.3" height="15.0" fill="rgb(237,151,36)" rx="2" ry="2" />
+<text  x="176.91" y="479.5" ></text>
+</g>
+<g >
+<title>operator new (275,672 samples, 0.03%)</title><rect x="284.5" y="517" width="0.3" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="287.54" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::HarqStatus_e const* std::__niter_base&lt;ns3::DlInfoListElement_s::HarqStatus_e const*, std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt; &gt; (201,685 samples, 0.02%)</title><rect x="444.2" y="229" width="0.1" height="15.0" fill="rgb(205,1,0)" rx="2" ry="2" />
+<text  x="447.18" y="239.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::_M_emplace_hint_unique&lt;std::piecewise_construct_t const&amp;, std::tuple&lt;unsigned short const&amp;&gt;, std::tuple&lt;&gt; &gt; (2,400,209 samples, 0.25%)</title><rect x="190.7" y="469" width="1.9" height="15.0" fill="rgb(213,37,8)" rx="2" ry="2" />
+<text  x="193.70" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue&gt;::operator= (266,358 samples, 0.03%)</title><rect x="112.2" y="485" width="0.2" height="15.0" fill="rgb(220,71,17)" rx="2" ry="2" />
+<text  x="115.18" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;4ul, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::_M_head (235,982 samples, 0.02%)</title><rect x="757.2" y="565" width="0.2" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="760.21" y="575.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt;::size (236,264 samples, 0.02%)</title><rect x="261.7" y="373" width="0.2" height="15.0" fill="rgb(205,2,0)" rx="2" ry="2" />
+<text  x="264.74" y="383.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; const*, std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt; &gt;, std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;*&gt; (338,383 samples, 0.03%)</title><rect x="204.9" y="373" width="0.2" height="15.0" fill="rgb(234,135,32)" rx="2" ry="2" />
+<text  x="207.86" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::LteHelper::InstallSingleUeDevice (533,991 samples, 0.06%)</title><rect x="36.1" y="757" width="0.5" height="15.0" fill="rgb(248,201,48)" rx="2" ry="2" />
+<text  x="39.12" y="767.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;int, std::allocator&lt;int&gt; &gt;::_Vector_base (1,201,262 samples, 0.12%)</title><rect x="699.3" y="533" width="1.0" height="15.0" fill="rgb(215,47,11)" rx="2" ry="2" />
+<text  x="702.30" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue&gt;::operator= (508,044 samples, 0.05%)</title><rect x="716.6" y="485" width="0.4" height="15.0" fill="rgb(220,71,17)" rx="2" ry="2" />
+<text  x="719.58" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteInterference&gt;::operator (201,121 samples, 0.02%)</title><rect x="492.3" y="549" width="0.2" height="15.0" fill="rgb(234,134,32)" rx="2" ry="2" />
+<text  x="495.30" y="559.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; (1,070,364 samples, 0.11%)</title><rect x="647.2" y="389" width="0.9" height="15.0" fill="rgb(212,35,8)" rx="2" ry="2" />
+<text  x="650.25" y="399.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;unsigned char&gt;::deallocate (197,176 samples, 0.02%)</title><rect x="693.2" y="405" width="0.2" height="15.0" fill="rgb(209,19,4)" rx="2" ry="2" />
+<text  x="696.23" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;&amp;&amp; std::forward&lt;std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt; (194,342 samples, 0.02%)</title><rect x="275.8" y="469" width="0.2" height="15.0" fill="rgb(243,174,41)" rx="2" ry="2" />
+<text  x="278.84" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Tag::Tag (159,113 samples, 0.02%)</title><rect x="155.3" y="373" width="0.1" height="15.0" fill="rgb(212,35,8)" rx="2" ry="2" />
+<text  x="158.25" y="383.5" ></text>
+</g>
+<g >
+<title>void std::_Function_base::_Base_manager&lt;std::_Bind&lt;void  (945,769 samples, 0.10%)</title><rect x="283.7" y="469" width="0.8" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="286.74" y="479.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;::pair&lt;ns3::TbId_t, ns3::tbInfo_t&gt; (979,889 samples, 0.10%)</title><rect x="526.8" y="213" width="0.8" height="15.0" fill="rgb(223,87,20)" rx="2" ry="2" />
+<text  x="529.82" y="223.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::allocate (366,512 samples, 0.04%)</title><rect x="563.9" y="85" width="0.3" height="15.0" fill="rgb(215,48,11)" rx="2" ry="2" />
+<text  x="566.90" y="95.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::vector (546,034 samples, 0.06%)</title><rect x="147.4" y="437" width="0.4" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="150.41" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteInterference&gt;::operator (124,598 samples, 0.01%)</title><rect x="608.6" y="549" width="0.1" height="15.0" fill="rgb(234,134,32)" rx="2" ry="2" />
+<text  x="611.56" y="559.5" ></text>
+</g>
+<g >
+<title>ns3::EnbMacMemberFfMacSchedSapUser::SchedDlConfigInd (2,983,151 samples, 0.31%)</title><rect x="17.2" y="501" width="2.4" height="15.0" fill="rgb(241,166,39)" rx="2" ry="2" />
+<text  x="20.17" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_Rb_tree (160,265 samples, 0.02%)</title><rect x="668.1" y="469" width="0.2" height="15.0" fill="rgb(252,219,52)" rx="2" ry="2" />
+<text  x="671.13" y="479.5" ></text>
+</g>
+<g >
+<title>unsigned short* std::copy&lt;__gnu_cxx::__normal_iterator&lt;unsigned short const*, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, unsigned short*&gt; (545,960 samples, 0.06%)</title><rect x="217.5" y="405" width="0.4" height="15.0" fill="rgb(226,96,23)" rx="2" ry="2" />
+<text  x="220.47" y="415.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::~vector (195,505 samples, 0.02%)</title><rect x="409.4" y="517" width="0.1" height="15.0" fill="rgb(225,92,22)" rx="2" ry="2" />
+<text  x="412.36" y="527.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt;, std::allocator&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt;::_M_ptr (160,795 samples, 0.02%)</title><rect x="184.2" y="453" width="0.1" height="15.0" fill="rgb(252,218,52)" rx="2" ry="2" />
+<text  x="187.16" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumModel const&gt;::Ptr (152,357 samples, 0.02%)</title><rect x="327.7" y="485" width="0.1" height="15.0" fill="rgb(232,125,30)" rx="2" ry="2" />
+<text  x="330.65" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Function_base::_Base_manager&lt;std::_Bind&lt;void  (169,831 samples, 0.02%)</title><rect x="64.8" y="373" width="0.1" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="67.79" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Bind&lt;void  (522,269 samples, 0.05%)</title><rect x="307.5" y="421" width="0.4" height="15.0" fill="rgb(253,221,52)" rx="2" ry="2" />
+<text  x="310.50" y="431.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;::~pair (514,929 samples, 0.05%)</title><rect x="233.2" y="341" width="0.4" height="15.0" fill="rgb(226,100,24)" rx="2" ry="2" />
+<text  x="236.21" y="351.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::_M_clear (1,296,666 samples, 0.13%)</title><rect x="652.6" y="341" width="1.1" height="15.0" fill="rgb(217,56,13)" rx="2" ry="2" />
+<text  x="655.64" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::HigherLayerSelected_s* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::HigherLayerSelected_s const*, std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt; &gt;, ns3::HigherLayerSelected_s*&gt; (213,295 samples, 0.02%)</title><rect x="583.7" y="229" width="0.2" height="15.0" fill="rgb(230,118,28)" rx="2" ry="2" />
+<text  x="586.69" y="239.5" ></text>
+</g>
+<g >
+<title>ns3::LteRlcSm::DoNotifyTxOpportunity (6,454,365 samples, 0.67%)</title><rect x="151.2" y="405" width="5.2" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="154.19" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::Copy (4,171,628 samples, 0.43%)</title><rect x="315.1" y="437" width="3.3" height="15.0" fill="rgb(241,167,40)" rx="2" ry="2" />
+<text  x="318.07" y="447.5" ></text>
+</g>
+<g >
+<title>void std::__invoke_impl&lt;void, void  (22,443,594 samples, 2.31%)</title><rect x="17.2" y="613" width="18.0" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="20.17" y="623.5" ></text>
+</g>
+<g >
+<title>std::function&lt;void  (411,411 samples, 0.04%)</title><rect x="87.6" y="469" width="0.4" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="90.62" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; &gt;::_M_valptr (433,714 samples, 0.04%)</title><rect x="465.7" y="469" width="0.4" height="15.0" fill="rgb(213,39,9)" rx="2" ry="2" />
+<text  x="468.74" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::HarqProcessInfoElement_t* std::__copy_move_a1&lt;false, ns3::HarqProcessInfoElement_t const*, ns3::HarqProcessInfoElement_t*&gt; (363,923 samples, 0.04%)</title><rect x="353.4" y="389" width="0.3" height="15.0" fill="rgb(229,112,26)" rx="2" ry="2" />
+<text  x="356.45" y="399.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::vector (234,034 samples, 0.02%)</title><rect x="474.0" y="213" width="0.2" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="476.98" y="223.5" ></text>
+</g>
+<g >
+<title>ns3::MakeEvent&lt;void  (746,893 samples, 0.08%)</title><rect x="640.3" y="469" width="0.6" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="643.34" y="479.5" ></text>
+</g>
+<g >
+<title>double* std::__fill_n_a&lt;double*, unsigned long, double&gt; (387,157 samples, 0.04%)</title><rect x="403.7" y="389" width="0.4" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="406.74" y="399.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned short const, unsigned char&gt; &gt;::_M_ptr (152,886 samples, 0.02%)</title><rect x="136.2" y="405" width="0.1" height="15.0" fill="rgb(219,68,16)" rx="2" ry="2" />
+<text  x="139.22" y="415.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, ns3::LteEnbComponentCarrierManager::UeInfo, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt; &gt; &gt;::key_comp (161,213 samples, 0.02%)</title><rect x="157.3" y="405" width="0.1" height="15.0" fill="rgb(211,31,7)" rx="2" ry="2" />
+<text  x="160.31" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue&gt; ns3::Create&lt;ns3::SpectrumValue, ns3::Ptr&lt;ns3::SpectrumModel const&gt; const&amp;&gt; (1,570,376 samples, 0.16%)</title><rect x="729.1" y="485" width="1.2" height="15.0" fill="rgb(246,189,45)" rx="2" ry="2" />
+<text  x="732.08" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt;::size (333,221 samples, 0.03%)</title><rect x="420.5" y="341" width="0.2" height="15.0" fill="rgb(212,35,8)" rx="2" ry="2" />
+<text  x="423.46" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleUeCcmMacSapProvider::TransmitPdu (7,708,007 samples, 0.79%)</title><rect x="560.6" y="261" width="6.2" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="563.62" y="271.5" ></text>
+</g>
+<g >
+<title>int* std::__copy_move_a2&lt;false, int const*, int*&gt; (197,211 samples, 0.02%)</title><rect x="399.2" y="437" width="0.2" height="15.0" fill="rgb(224,87,20)" rx="2" ry="2" />
+<text  x="402.21" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;ns3::DlDciListElement_s, std::allocator&lt;ns3::DlDciListElement_s&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;ns3::DlDciListElement_s, std::allocator&lt;ns3::DlDciListElement_s&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;ns3::DlDciListElement_s, std::allocator&lt;ns3::DlDciListElement_s&gt; &gt; &gt; &gt; &gt;::_M_lower_bound (576,429 samples, 0.06%)</title><rect x="187.3" y="453" width="0.4" height="15.0" fill="rgb(253,222,53)" rx="2" ry="2" />
+<text  x="190.29" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::LteMiErrorModel::GetTbDecodificationStats (2,544,923 samples, 0.26%)</title><rect x="587.5" y="277" width="2.0" height="15.0" fill="rgb(209,19,4)" rx="2" ry="2" />
+<text  x="590.50" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::EventImpl, ns3::Empty, ns3::DefaultDeleter&lt;ns3::EventImpl&gt; &gt;::Ref (587,755 samples, 0.06%)</title><rect x="768.9" y="693" width="0.4" height="15.0" fill="rgb(249,202,48)" rx="2" ry="2" />
+<text  x="771.85" y="703.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;int const, double&gt; &gt;* std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_M_copy&lt;false, std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_Alloc_node&gt; (167,564 samples, 0.02%)</title><rect x="60.2" y="389" width="0.2" height="15.0" fill="rgb(224,87,21)" rx="2" ry="2" />
+<text  x="63.25" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::operator- (4,813,626 samples, 0.50%)</title><rect x="410.0" y="533" width="3.9" height="15.0" fill="rgb(231,122,29)" rx="2" ry="2" />
+<text  x="413.04" y="543.5" ></text>
+</g>
+<g >
+<title>std::_List_const_iterator&lt;ns3::UlDciLteControlMessage&gt;::operator* (302,866 samples, 0.03%)</title><rect x="288.5" y="501" width="0.3" height="15.0" fill="rgb(230,117,28)" rx="2" ry="2" />
+<text  x="291.52" y="511.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;::destroy&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; (359,626 samples, 0.04%)</title><rect x="382.0" y="501" width="0.3" height="15.0" fill="rgb(222,78,18)" rx="2" ry="2" />
+<text  x="385.02" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::TypeId::TypeId (279,495 samples, 0.03%)</title><rect x="629.2" y="469" width="0.2" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="632.22" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue&gt;::operator= (483,084 samples, 0.05%)</title><rect x="728.2" y="485" width="0.4" height="15.0" fill="rgb(220,71,17)" rx="2" ry="2" />
+<text  x="731.17" y="495.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;::operator++ (206,864 samples, 0.02%)</title><rect x="477.4" y="309" width="0.2" height="15.0" fill="rgb(214,45,10)" rx="2" ry="2" />
+<text  x="480.40" y="319.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;* std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_M_copy&lt;false, std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_Alloc_node&gt; (4,497,480 samples, 0.46%)</title><rect x="236.8" y="437" width="3.6" height="15.0" fill="rgb(236,146,34)" rx="2" ry="2" />
+<text  x="239.79" y="447.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::MacCeListElement_s, std::allocator&lt;ns3::MacCeListElement_s&gt; &gt;::_M_range_check (199,808 samples, 0.02%)</title><rect x="225.8" y="469" width="0.2" height="15.0" fill="rgb(252,219,52)" rx="2" ry="2" />
+<text  x="228.83" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::int64x64_t::Mul (321,020 samples, 0.03%)</title><rect x="389.7" y="485" width="0.2" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="392.66" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::at (161,842 samples, 0.02%)</title><rect x="226.1" y="485" width="0.1" height="15.0" fill="rgb(238,152,36)" rx="2" ry="2" />
+<text  x="229.05" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::LteFlowId_t, std::pair&lt;ns3::LteFlowId_t const, ns3::FfMacSchedSapProvider::SchedDlRlcBufferReqParameters&gt;, std::_Select1st&lt;std::pair&lt;ns3::LteFlowId_t const, ns3::FfMacSchedSapProvider::SchedDlRlcBufferReqParameters&gt; &gt;, std::less&lt;ns3::LteFlowId_t&gt;, std::allocator&lt;std::pair&lt;ns3::LteFlowId_t const, ns3::FfMacSchedSapProvider::SchedDlRlcBufferReqParameters&gt; &gt; &gt;::_M_begin (226,804 samples, 0.02%)</title><rect x="181.5" y="437" width="0.2" height="15.0" fill="rgb(251,216,51)" rx="2" ry="2" />
+<text  x="184.54" y="447.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::BuildDataListElement_s, std::allocator&lt;ns3::BuildDataListElement_s&gt; &gt;::~vector (1,027,011 samples, 0.11%)</title><rect x="145.4" y="453" width="0.9" height="15.0" fill="rgb(211,31,7)" rx="2" ry="2" />
+<text  x="148.45" y="463.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;*, std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; std::__copy_move_a&lt;true, __gnu_cxx::__normal_iterator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;*, std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;*, std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; (6,281,286 samples, 0.65%)</title><rect x="376.7" y="485" width="5.0" height="15.0" fill="rgb(233,131,31)" rx="2" ry="2" />
+<text  x="379.66" y="495.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;*, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; std::__copy_move_a&lt;true, __gnu_cxx::__normal_iterator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;*, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;*, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; &gt; (2,950,423 samples, 0.30%)</title><rect x="349.6" y="485" width="2.4" height="15.0" fill="rgb(240,164,39)" rx="2" ry="2" />
+<text  x="352.62" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::reserve (275,928 samples, 0.03%)</title><rect x="347.3" y="533" width="0.2" height="15.0" fill="rgb(238,153,36)" rx="2" ry="2" />
+<text  x="350.31" y="543.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::BuildRarListElement_s, std::allocator&lt;ns3::BuildRarListElement_s&gt; &gt;::~vector (359,781 samples, 0.04%)</title><rect x="146.3" y="453" width="0.3" height="15.0" fill="rgb(210,23,5)" rx="2" ry="2" />
+<text  x="149.27" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteUePhy&gt;::Ptr (241,564 samples, 0.02%)</title><rect x="470.2" y="405" width="0.2" height="15.0" fill="rgb(241,169,40)" rx="2" ry="2" />
+<text  x="473.19" y="415.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::list (143,971 samples, 0.01%)</title><rect x="391.8" y="549" width="0.1" height="15.0" fill="rgb(236,145,34)" rx="2" ry="2" />
+<text  x="394.79" y="559.5" ></text>
+</g>
+<g >
+<title>ns3::MultiModelSpectrumChannel::StartTx (41,833,100 samples, 4.31%)</title><rect x="308.8" y="517" width="33.6" height="15.0" fill="rgb(227,102,24)" rx="2" ry="2" />
+<text  x="311.76" y="527.5" >ns..</text>
+</g>
+<g >
+<title>ns3::SpectrumValue::GetSpectrumModelUid (187,543 samples, 0.02%)</title><rect x="656.4" y="517" width="0.1" height="15.0" fill="rgb(254,228,54)" rx="2" ry="2" />
+<text  x="659.37" y="527.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::push_back (2,043,826 samples, 0.21%)</title><rect x="562.9" y="181" width="1.6" height="15.0" fill="rgb(222,79,18)" rx="2" ry="2" />
+<text  x="565.86" y="191.5" ></text>
+</g>
+<g >
+<title>std::operator== (317,205 samples, 0.03%)</title><rect x="275.5" y="469" width="0.2" height="15.0" fill="rgb(229,110,26)" rx="2" ry="2" />
+<text  x="278.45" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbMac::DoReceivePhyPdu (13,857,739 samples, 1.43%)</title><rect x="423.7" y="341" width="11.1" height="15.0" fill="rgb(223,87,20)" rx="2" ry="2" />
+<text  x="426.67" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbMac::DoReportBufferStatus (3,928,142 samples, 0.41%)</title><rect x="24.3" y="357" width="3.1" height="15.0" fill="rgb(222,80,19)" rx="2" ry="2" />
+<text  x="27.28" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::UeManager::GetComponentCarrierId (352,536 samples, 0.04%)</title><rect x="12.8" y="357" width="0.3" height="15.0" fill="rgb(219,68,16)" rx="2" ry="2" />
+<text  x="15.81" y="367.5" ></text>
+</g>
+<g >
+<title>bool __gnu_cxx::operator==&lt;ns3::DlInfoListElement_s const*, std::vector&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt; &gt; (279,570 samples, 0.03%)</title><rect x="257.1" y="501" width="0.2" height="15.0" fill="rgb(222,80,19)" rx="2" ry="2" />
+<text  x="260.10" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Scheduler::EventKey const&amp; std::forward&lt;ns3::Scheduler::EventKey const&amp;&gt; (206,377 samples, 0.02%)</title><rect x="277.1" y="469" width="0.2" height="15.0" fill="rgb(250,207,49)" rx="2" ry="2" />
+<text  x="280.13" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::LogComponent::IsEnabled (129,958 samples, 0.01%)</title><rect x="536.2" y="325" width="0.1" height="15.0" fill="rgb(214,43,10)" rx="2" ry="2" />
+<text  x="539.22" y="335.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;* std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_Alloc_node::operator (500,996 samples, 0.05%)</title><rect x="341.9" y="389" width="0.4" height="15.0" fill="rgb(217,55,13)" rx="2" ry="2" />
+<text  x="344.88" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Head_base&lt;5ul, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;, false&gt;::_M_head (220,389 samples, 0.02%)</title><rect x="757.8" y="549" width="0.2" height="15.0" fill="rgb(220,70,16)" rx="2" ry="2" />
+<text  x="760.82" y="559.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteSpectrumSignalParametersDlCtrlFrame&gt;::~Ptr (273,890 samples, 0.03%)</title><rect x="344.2" y="517" width="0.2" height="15.0" fill="rgb(218,62,14)" rx="2" ry="2" />
+<text  x="347.20" y="527.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::CqiListElement_s, std::allocator&lt;ns3::CqiListElement_s&gt; &gt;::empty (335,401 samples, 0.03%)</title><rect x="106.4" y="501" width="0.3" height="15.0" fill="rgb(231,122,29)" rx="2" ry="2" />
+<text  x="109.44" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_Auto_node::_M_insert (362,836 samples, 0.04%)</title><rect x="83.5" y="405" width="0.3" height="15.0" fill="rgb(213,38,9)" rx="2" ry="2" />
+<text  x="86.54" y="415.5" ></text>
+</g>
+<g >
+<title>double std::reduce&lt;__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, double&gt; (335,268 samples, 0.03%)</title><rect x="582.4" y="309" width="0.2" height="15.0" fill="rgb(218,62,15)" rx="2" ry="2" />
+<text  x="585.38" y="319.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt;::~vector (126,894 samples, 0.01%)</title><rect x="585.2" y="261" width="0.1" height="15.0" fill="rgb(234,134,32)" rx="2" ry="2" />
+<text  x="588.18" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::LteControlMessage, ns3::Empty, ns3::DefaultDeleter&lt;ns3::LteControlMessage&gt; &gt;::Unref (269,841 samples, 0.03%)</title><rect x="497.4" y="469" width="0.2" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="500.37" y="479.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, unsigned char*&gt; (407,753 samples, 0.04%)</title><rect x="584.8" y="245" width="0.3" height="15.0" fill="rgb(227,104,25)" rx="2" ry="2" />
+<text  x="587.79" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::HarqStatus_e* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::DlInfoListElement_s::HarqStatus_e const*, std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt; &gt;, ns3::DlInfoListElement_s::HarqStatus_e*&gt; (2,097,386 samples, 0.22%)</title><rect x="258.9" y="357" width="1.7" height="15.0" fill="rgb(235,140,33)" rx="2" ry="2" />
+<text  x="261.92" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::EnbMacMemberLteMacSapProvider&lt;ns3::NoOpComponentCarrierManager&gt;::TransmitPdu (5,821,892 samples, 0.60%)</title><rect x="19.6" y="421" width="4.7" height="15.0" fill="rgb(247,196,47)" rx="2" ry="2" />
+<text  x="22.60" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::Add (355,914 samples, 0.04%)</title><rect x="409.6" y="517" width="0.2" height="15.0" fill="rgb(234,136,32)" rx="2" ry="2" />
+<text  x="412.56" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::MakeEvent&lt;void  (2,295,946 samples, 0.24%)</title><rect x="638.2" y="501" width="1.8" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="641.15" y="511.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::BandInfo, std::allocator&lt;ns3::BandInfo&gt; &gt;::size (125,001 samples, 0.01%)</title><rect x="403.0" y="469" width="0.1" height="15.0" fill="rgb(238,154,36)" rx="2" ry="2" />
+<text  x="406.01" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::LteSpectrumModelId, std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt;, std::_Select1st&lt;std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt; &gt;, std::less&lt;ns3::LteSpectrumModelId&gt;, std::allocator&lt;std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt; &gt; &gt;::_M_lower_bound (860,518 samples, 0.09%)</title><rect x="55.3" y="453" width="0.6" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="58.26" y="463.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;* std::__copy_move_a2&lt;true, std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;*, std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;*&gt; (802,162 samples, 0.08%)</title><rect x="357.1" y="453" width="0.7" height="15.0" fill="rgb(210,26,6)" rx="2" ry="2" />
+<text  x="360.13" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::LteRadioBearerTag::GetInstanceTypeId (294,229 samples, 0.03%)</title><rect x="561.8" y="165" width="0.3" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="564.82" y="175.5" ></text>
+</g>
+<g >
+<title>ns3::tbInfo_t::tbInfo_t (180,616 samples, 0.02%)</title><rect x="387.3" y="517" width="0.1" height="15.0" fill="rgb(224,91,21)" rx="2" ry="2" />
+<text  x="390.27" y="527.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; const*, std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt; &gt;, std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;*, std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; (379,647 samples, 0.04%)</title><rect x="204.8" y="389" width="0.3" height="15.0" fill="rgb(208,17,4)" rx="2" ry="2" />
+<text  x="207.83" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt;::lower_bound (305,767 samples, 0.03%)</title><rect x="156.5" y="389" width="0.3" height="15.0" fill="rgb(215,46,11)" rx="2" ry="2" />
+<text  x="159.53" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::Buffer::~Buffer (935,423 samples, 0.10%)</title><rect x="451.8" y="101" width="0.7" height="15.0" fill="rgb(240,162,38)" rx="2" ry="2" />
+<text  x="454.80" y="111.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::TbId_t, std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::_Select1st&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::_M_begin (195,833 samples, 0.02%)</title><rect x="386.6" y="501" width="0.2" height="15.0" fill="rgb(245,184,44)" rx="2" ry="2" />
+<text  x="389.65" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_Vector_base (158,373 samples, 0.02%)</title><rect x="203.4" y="373" width="0.1" height="15.0" fill="rgb(205,2,0)" rx="2" ry="2" />
+<text  x="206.35" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumPhy::GetMobility (675,169 samples, 0.07%)</title><rect x="704.3" y="549" width="0.5" height="15.0" fill="rgb(228,107,25)" rx="2" ry="2" />
+<text  x="707.27" y="559.5" ></text>
+</g>
+<g >
+<title>double* std::__copy_move_a1&lt;false, double const*, double*&gt; (148,743 samples, 0.02%)</title><rect x="317.4" y="357" width="0.1" height="15.0" fill="rgb(239,156,37)" rx="2" ry="2" />
+<text  x="320.42" y="367.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;::_M_valptr (272,221 samples, 0.03%)</title><rect x="274.3" y="405" width="0.2" height="15.0" fill="rgb(213,38,9)" rx="2" ry="2" />
+<text  x="277.28" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::MobilityModel const&gt;::Ptr&lt;ns3::MobilityModel&gt; (371,286 samples, 0.04%)</title><rect x="740.7" y="517" width="0.3" height="15.0" fill="rgb(233,130,31)" rx="2" ry="2" />
+<text  x="743.66" y="527.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;::size (156,363 samples, 0.02%)</title><rect x="514.8" y="533" width="0.1" height="15.0" fill="rgb(244,182,43)" rx="2" ry="2" />
+<text  x="517.78" y="543.5" ></text>
+</g>
+<g >
+<title>std::function&lt;void  (358,805 samples, 0.04%)</title><rect x="727.0" y="469" width="0.3" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="729.97" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_Auto_node::_Auto_node&lt;std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (1,386,008 samples, 0.14%)</title><rect x="334.2" y="389" width="1.1" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="337.18" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt; ns3::CompleteConstruct&lt;ns3::PacketBurst&gt; (267,173 samples, 0.03%)</title><rect x="19.4" y="453" width="0.2" height="15.0" fill="rgb(212,33,7)" rx="2" ry="2" />
+<text  x="22.36" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Ptr&lt;ns3::Object&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Object&gt; &gt; &gt;::~vector (272,555 samples, 0.03%)</title><rect x="454.4" y="197" width="0.2" height="15.0" fill="rgb(223,83,19)" rx="2" ry="2" />
+<text  x="457.39" y="207.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt;::allocate (160,414 samples, 0.02%)</title><rect x="445.0" y="229" width="0.1" height="15.0" fill="rgb(209,19,4)" rx="2" ry="2" />
+<text  x="447.98" y="239.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbMac::DoUlCqiReport (763,690 samples, 0.08%)</title><rect x="473.6" y="309" width="0.6" height="15.0" fill="rgb(233,131,31)" rx="2" ry="2" />
+<text  x="476.61" y="319.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::erase[abi:cxx11] (940,554 samples, 0.10%)</title><rect x="222.3" y="469" width="0.8" height="15.0" fill="rgb(214,43,10)" rx="2" ry="2" />
+<text  x="225.32" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::EnbMacMemberLteMacSapProvider&lt;ns3::NoOpComponentCarrierManager&gt;::ReportBufferStatus (6,485,597 samples, 0.67%)</title><rect x="24.3" y="405" width="5.2" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="27.28" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt;::~_Vector_base (496,198 samples, 0.05%)</title><rect x="256.3" y="373" width="0.4" height="15.0" fill="rgb(244,183,43)" rx="2" ry="2" />
+<text  x="259.29" y="383.5" ></text>
+</g>
+<g >
+<title>unsigned char&amp; std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::emplace_back&lt;unsigned char&gt; (1,247,040 samples, 0.13%)</title><rect x="214.7" y="469" width="1.0" height="15.0" fill="rgb(237,147,35)" rx="2" ry="2" />
+<text  x="217.73" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::FfMacSchedSapProvider::SchedDlCqiInfoReqParameters::~SchedDlCqiInfoReqParameters (153,009 samples, 0.02%)</title><rect x="93.4" y="501" width="0.1" height="15.0" fill="rgb(239,158,37)" rx="2" ry="2" />
+<text  x="96.42" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;::_M_valptr (512,316 samples, 0.05%)</title><rect x="85.2" y="373" width="0.4" height="15.0" fill="rgb(213,38,9)" rx="2" ry="2" />
+<text  x="88.17" y="383.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_S_relocate (191,891 samples, 0.02%)</title><rect x="459.9" y="245" width="0.1" height="15.0" fill="rgb(228,110,26)" rx="2" ry="2" />
+<text  x="462.88" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::HarqProcessInfoElement_t* std::copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::HarqProcessInfoElement_t const*, std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt;, ns3::HarqProcessInfoElement_t*&gt; (1,453,727 samples, 0.15%)</title><rect x="352.8" y="421" width="1.2" height="15.0" fill="rgb(247,195,46)" rx="2" ry="2" />
+<text  x="355.82" y="431.5" ></text>
+</g>
+<g >
+<title>std::_List_iterator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt;::_List_iterator (173,879 samples, 0.02%)</title><rect x="563.0" y="149" width="0.1" height="15.0" fill="rgb(231,119,28)" rx="2" ry="2" />
+<text  x="566.00" y="159.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;bool, std::allocator&lt;bool&gt; &gt;::end (277,788 samples, 0.03%)</title><rect x="198.9" y="405" width="0.2" height="15.0" fill="rgb(211,29,7)" rx="2" ry="2" />
+<text  x="201.86" y="415.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__enable_if&lt;std::__is_scalar&lt;unsigned short&gt;::__value, void&gt;::__type std::__fill_a1&lt;unsigned short*, unsigned short&gt; (151,573 samples, 0.02%)</title><rect x="252.6" y="357" width="0.1" height="15.0" fill="rgb(234,137,32)" rx="2" ry="2" />
+<text  x="255.62" y="367.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned int const, ns3::RxSpectrumModelInfo&gt; &gt;::operator (451,603 samples, 0.05%)</title><rect x="328.8" y="501" width="0.3" height="15.0" fill="rgb(224,91,21)" rx="2" ry="2" />
+<text  x="331.75" y="511.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt;::find (1,845,503 samples, 0.19%)</title><rect x="168.0" y="453" width="1.5" height="15.0" fill="rgb(228,106,25)" rx="2" ry="2" />
+<text  x="170.97" y="463.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::list&lt;std::_List_const_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;, void&gt; (724,578 samples, 0.07%)</title><rect x="318.8" y="405" width="0.5" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="321.75" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::FfMacSchedSapUser::SchedDlConfigIndParameters::SchedDlConfigIndParameters (703,718 samples, 0.07%)</title><rect x="94.9" y="453" width="0.5" height="15.0" fill="rgb(208,15,3)" rx="2" ry="2" />
+<text  x="97.86" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::TbId_t, std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::_Select1st&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::_S_key (335,546 samples, 0.03%)</title><rect x="385.5" y="469" width="0.3" height="15.0" fill="rgb(220,73,17)" rx="2" ry="2" />
+<text  x="388.53" y="479.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_clear (343,413 samples, 0.04%)</title><rect x="654.2" y="405" width="0.2" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="657.16" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; &gt; &gt;::_M_lower_bound (1,211,299 samples, 0.12%)</title><rect x="523.4" y="309" width="1.0" height="15.0" fill="rgb(226,97,23)" rx="2" ry="2" />
+<text  x="526.38" y="319.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, ns3::pfsFlowPerf_t, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt; &gt; &gt;::find (767,082 samples, 0.08%)</title><rect x="186.4" y="485" width="0.6" height="15.0" fill="rgb(211,28,6)" rx="2" ry="2" />
+<text  x="189.42" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::SbMeasResult_s&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::SbMeasResult_s&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::SbMeasResult_s&gt; &gt; &gt;::find (873,028 samples, 0.09%)</title><rect x="185.4" y="469" width="0.7" height="15.0" fill="rgb(219,65,15)" rx="2" ry="2" />
+<text  x="188.39" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_M_create_storage (275,818 samples, 0.03%)</title><rect x="413.1" y="469" width="0.3" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="416.14" y="479.5" ></text>
+</g>
+<g >
+<title>std::tuple_element&lt;0ul, std::tuple&lt;ns3::LteInterference*, ns3::Ptr&lt;ns3::SpectrumValue const&gt;, unsigned int&gt; &gt;::type&amp; std::get&lt;0ul, ns3::LteInterference*, ns3::Ptr&lt;ns3::SpectrumValue const&gt;, unsigned int&gt; (694,870 samples, 0.07%)</title><rect x="752.6" y="597" width="0.6" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="755.64" y="607.5" ></text>
+</g>
+<g >
+<title>ns3::HigherLayerSelected_s* std::__uninitialized_copy&lt;false&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::HigherLayerSelected_s const*, std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt; &gt;, ns3::HigherLayerSelected_s*&gt; (151,182 samples, 0.02%)</title><rect x="92.3" y="309" width="0.1" height="15.0" fill="rgb(251,215,51)" rx="2" ry="2" />
+<text  x="95.31" y="319.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::size (251,934 samples, 0.03%)</title><rect x="413.7" y="485" width="0.2" height="15.0" fill="rgb(234,135,32)" rx="2" ry="2" />
+<text  x="416.68" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Packet::FindFirstMatchingByteTag (1,329,273 samples, 0.14%)</title><rect x="435.8" y="261" width="1.1" height="15.0" fill="rgb(226,98,23)" rx="2" ry="2" />
+<text  x="438.80" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::MakeEvent&lt;void  (444,360 samples, 0.05%)</title><rect x="64.6" y="469" width="0.3" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="67.57" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::BuildDataListElement_s::BuildDataListElement_s (2,525,517 samples, 0.26%)</title><rect x="203.3" y="421" width="2.0" height="15.0" fill="rgb(229,111,26)" rx="2" ry="2" />
+<text  x="206.25" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::EventImpl&gt;::~Ptr (159,762 samples, 0.02%)</title><rect x="62.6" y="485" width="0.2" height="15.0" fill="rgb(225,92,22)" rx="2" ry="2" />
+<text  x="65.63" y="495.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::DlInfoListElement_s const*, std::vector&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt; &gt;::__normal_iterator (193,090 samples, 0.02%)</title><rect x="257.4" y="485" width="0.2" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="260.45" y="495.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::Ptr&lt;ns3::Object&gt;*&gt; (209,811 samples, 0.02%)</title><rect x="77.5" y="293" width="0.2" height="15.0" fill="rgb(248,201,48)" rx="2" ry="2" />
+<text  x="80.53" y="303.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::push_back (1,837,360 samples, 0.19%)</title><rect x="596.6" y="293" width="1.5" height="15.0" fill="rgb(215,50,11)" rx="2" ry="2" />
+<text  x="599.59" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::EventImpl&gt;::operator= (1,128,226 samples, 0.12%)</title><rect x="640.0" y="517" width="0.9" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="643.03" y="527.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; std::copy&lt;__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; (474,207 samples, 0.05%)</title><rect x="730.6" y="453" width="0.4" height="15.0" fill="rgb(249,204,48)" rx="2" ry="2" />
+<text  x="733.60" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::MemberLteCcmMacSapUser&lt;ns3::NoOpComponentCarrierManager&gt;::NotifyTxOpportunity (2,715,978 samples, 0.28%)</title><rect x="17.2" y="469" width="2.2" height="15.0" fill="rgb(205,3,0)" rx="2" ry="2" />
+<text  x="20.17" y="479.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::~_List_base (166,752 samples, 0.02%)</title><rect x="77.9" y="421" width="0.2" height="15.0" fill="rgb(221,74,17)" rx="2" ry="2" />
+<text  x="80.95" y="431.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::ByteTagListData*, std::allocator&lt;ns3::ByteTagListData*&gt; &gt;::end (274,095 samples, 0.03%)</title><rect x="29.8" y="357" width="0.2" height="15.0" fill="rgb(238,154,36)" rx="2" ry="2" />
+<text  x="32.78" y="367.5" ></text>
+</g>
+<g >
+<title>[ld-linux-x86-64.so.2] (155,299 samples, 0.02%)</title><rect x="35.5" y="741" width="0.2" height="15.0" fill="rgb(243,178,42)" rx="2" ry="2" />
+<text  x="38.54" y="751.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt; &gt;::_Auto_node::_M_insert (220,367 samples, 0.02%)</title><rect x="504.0" y="501" width="0.2" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="507.02" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteUeMac::LcInfo&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteUeMac::LcInfo&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteUeMac::LcInfo&gt; &gt; &gt;::_S_key (545,949 samples, 0.06%)</title><rect x="691.3" y="453" width="0.4" height="15.0" fill="rgb(221,77,18)" rx="2" ry="2" />
+<text  x="694.31" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::UeMemberLteUePhySapProvider::SendMacPdu (702,652 samples, 0.07%)</title><rect x="564.6" y="197" width="0.6" height="15.0" fill="rgb(230,117,28)" rx="2" ry="2" />
+<text  x="567.63" y="207.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::_M_default_initialize (525,076 samples, 0.05%)</title><rect x="718.5" y="437" width="0.4" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="721.50" y="447.5" ></text>
+</g>
+<g >
+<title> (151,109 samples, 0.02%)</title><rect x="388.8" y="533" width="0.1" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="391.82" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::MobilityModel&gt;::Ptr (340,915 samples, 0.04%)</title><rect x="313.4" y="485" width="0.3" height="15.0" fill="rgb(213,37,8)" rx="2" ry="2" />
+<text  x="316.44" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Ptr&lt;ns3::Object&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Object&gt; &gt; &gt;::clear (375,571 samples, 0.04%)</title><rect x="549.4" y="213" width="0.3" height="15.0" fill="rgb(241,167,40)" rx="2" ry="2" />
+<text  x="552.40" y="223.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::EventImpl&gt;::Ptr (255,646 samples, 0.03%)</title><rect x="305.3" y="453" width="0.2" height="15.0" fill="rgb(239,157,37)" rx="2" ry="2" />
+<text  x="308.29" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::HarqStatus_e* std::__copy_move_a2&lt;false, ns3::DlInfoListElement_s::HarqStatus_e const*, ns3::DlInfoListElement_s::HarqStatus_e*&gt; (670,916 samples, 0.07%)</title><rect x="260.0" y="277" width="0.5" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="262.98" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbMac::ReceiveDlCqiLteControlMessage (923,023 samples, 0.10%)</title><rect x="461.0" y="325" width="0.7" height="15.0" fill="rgb(207,10,2)" rx="2" ry="2" />
+<text  x="464.00" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt;::operator= (5,294,156 samples, 0.55%)</title><rect x="377.1" y="421" width="4.3" height="15.0" fill="rgb(219,65,15)" rx="2" ry="2" />
+<text  x="380.15" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::TagBuffer::Write (162,161 samples, 0.02%)</title><rect x="555.1" y="229" width="0.1" height="15.0" fill="rgb(229,114,27)" rx="2" ry="2" />
+<text  x="558.07" y="239.5" ></text>
+</g>
+<g >
+<title>erff32x (379,457 samples, 0.04%)</title><rect x="588.3" y="245" width="0.3" height="15.0" fill="rgb(229,111,26)" rx="2" ry="2" />
+<text  x="591.32" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::Scheduler::EventKey&amp;&amp; std::forward&lt;ns3::Scheduler::EventKey&gt; (155,928 samples, 0.02%)</title><rect x="335.2" y="293" width="0.1" height="15.0" fill="rgb(232,125,29)" rx="2" ry="2" />
+<text  x="338.17" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::Object::DoDelete (1,777,558 samples, 0.18%)</title><rect x="652.6" y="389" width="1.4" height="15.0" fill="rgb(212,34,8)" rx="2" ry="2" />
+<text  x="655.59" y="399.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;::__normal_iterator (196,324 samples, 0.02%)</title><rect x="714.5" y="453" width="0.1" height="15.0" fill="rgb(215,50,12)" rx="2" ry="2" />
+<text  x="717.49" y="463.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned short const, unsigned char&gt; &gt;::_M_ptr (324,216 samples, 0.03%)</title><rect x="184.9" y="453" width="0.3" height="15.0" fill="rgb(219,68,16)" rx="2" ry="2" />
+<text  x="187.92" y="463.5" ></text>
+</g>
+<g >
+<title>std::function&lt;void  (73,736,893 samples, 7.60%)</title><rect x="517.3" y="437" width="59.3" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="520.29" y="447.5" >std::f..</text>
+</g>
+<g >
+<title>ns3::TracedCallback&lt;ns3::Ptr&lt;ns3::PacketBurst const&gt; &gt;::operator (308,568 samples, 0.03%)</title><rect x="672.6" y="533" width="0.2" height="15.0" fill="rgb(231,121,28)" rx="2" ry="2" />
+<text  x="675.60" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::PacketMetadata::Create (1,337,353 samples, 0.14%)</title><rect x="557.6" y="213" width="1.1" height="15.0" fill="rgb(231,122,29)" rx="2" ry="2" />
+<text  x="560.64" y="223.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::MatrixArray&lt;std::complex&lt;double&gt; &gt; const&gt;::operator= (192,272 samples, 0.02%)</title><rect x="314.6" y="437" width="0.2" height="15.0" fill="rgb(243,177,42)" rx="2" ry="2" />
+<text  x="317.64" y="447.5" ></text>
+</g>
+<g >
+<title>acosf32x (225,910 samples, 0.02%)</title><rect x="310.0" y="469" width="0.2" height="15.0" fill="rgb(250,211,50)" rx="2" ry="2" />
+<text  x="313.01" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;ns3::DlDciListElement_s, std::allocator&lt;ns3::DlDciListElement_s&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;ns3::DlDciListElement_s, std::allocator&lt;ns3::DlDciListElement_s&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;ns3::DlDciListElement_s, std::allocator&lt;ns3::DlDciListElement_s&gt; &gt; &gt; &gt; &gt;::find (184,813 samples, 0.02%)</title><rect x="99.1" y="453" width="0.1" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="102.05" y="463.5" ></text>
+</g>
+<g >
+<title>void std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt; &gt;::_M_construct_node&lt;std::pair&lt;unsigned short, ns3::DlInfoListElement_s&gt; &gt; (882,128 samples, 0.09%)</title><rect x="503.3" y="469" width="0.7" height="15.0" fill="rgb(220,70,16)" rx="2" ry="2" />
+<text  x="506.31" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::_Vector_impl::_Vector_impl (165,262 samples, 0.02%)</title><rect x="439.7" y="389" width="0.1" height="15.0" fill="rgb(240,161,38)" rx="2" ry="2" />
+<text  x="442.70" y="399.5" ></text>
+</g>
+<g >
+<title>std::less&lt;unsigned short&gt;::operator (125,937 samples, 0.01%)</title><rect x="463.4" y="309" width="0.1" height="15.0" fill="rgb(207,11,2)" rx="2" ry="2" />
+<text  x="466.38" y="319.5" ></text>
+</g>
+<g >
+<title>std::_Function_handler&lt;void  (22,443,594 samples, 2.31%)</title><rect x="17.2" y="709" width="18.0" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="20.17" y="719.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::operator[] (167,625 samples, 0.02%)</title><rect x="575.8" y="341" width="0.1" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="578.76" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue&gt;::operator= (313,424 samples, 0.03%)</title><rect x="656.0" y="517" width="0.2" height="15.0" fill="rgb(220,71,17)" rx="2" ry="2" />
+<text  x="658.96" y="527.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;unsigned char&gt; &gt;::deallocate (194,524 samples, 0.02%)</title><rect x="216.5" y="437" width="0.1" height="15.0" fill="rgb(245,184,44)" rx="2" ry="2" />
+<text  x="219.49" y="447.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::end (127,798 samples, 0.01%)</title><rect x="72.7" y="405" width="0.1" height="15.0" fill="rgb(237,147,35)" rx="2" ry="2" />
+<text  x="75.68" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_M_erase (477,626 samples, 0.05%)</title><rect x="60.7" y="405" width="0.4" height="15.0" fill="rgb(227,102,24)" rx="2" ry="2" />
+<text  x="63.71" y="415.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::UlInfoListElement_s, std::allocator&lt;ns3::UlInfoListElement_s&gt; &gt;::push_back (373,450 samples, 0.04%)</title><rect x="440.4" y="325" width="0.3" height="15.0" fill="rgb(216,54,13)" rx="2" ry="2" />
+<text  x="443.41" y="335.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_get_node (235,059 samples, 0.02%)</title><rect x="331.6" y="421" width="0.2" height="15.0" fill="rgb(251,215,51)" rx="2" ry="2" />
+<text  x="334.60" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy::GenerateCtrlCqiReport (284,425 samples, 0.03%)</title><rect x="612.0" y="341" width="0.2" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="614.97" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Packet&gt; ns3::Create&lt;ns3::Packet, unsigned int&amp;&gt; (2,446,167 samples, 0.25%)</title><rect x="152.8" y="389" width="1.9" height="15.0" fill="rgb(253,223,53)" rx="2" ry="2" />
+<text  x="155.76" y="399.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Ptr&lt;ns3::Object&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Object&gt; &gt; &gt;::vector (158,991 samples, 0.02%)</title><rect x="627.3" y="469" width="0.1" height="15.0" fill="rgb(237,147,35)" rx="2" ry="2" />
+<text  x="630.31" y="479.5" ></text>
+</g>
+<g >
+<title>ns3-dev-lena-fr (969,771,633 samples, 100.00%)</title><rect x="10.0" y="853" width="780.0" height="15.0" fill="rgb(215,46,11)" rx="2" ry="2" />
+<text  x="13.00" y="863.5" >ns3-dev-lena-fr</text>
+</g>
+<g >
+<title>std::_Head_base&lt;0ul, ns3::LteSpectrumPhy*, false&gt;::_Head_base&lt;ns3::LteSpectrumPhy*&amp;&gt; (197,669 samples, 0.02%)</title><rect x="638.8" y="421" width="0.2" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="641.83" y="431.5" ></text>
+</g>
+<g >
+<title>decltype  (762,055 samples, 0.08%)</title><rect x="242.8" y="389" width="0.6" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="245.80" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::PacketBurst (409,656 samples, 0.04%)</title><rect x="69.7" y="437" width="0.3" height="15.0" fill="rgb(208,15,3)" rx="2" ry="2" />
+<text  x="72.68" y="447.5" ></text>
+</g>
+<g >
+<title>std::operator+ (509,535 samples, 0.05%)</title><rect x="247.4" y="437" width="0.4" height="15.0" fill="rgb(239,157,37)" rx="2" ry="2" />
+<text  x="250.38" y="447.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::vector (202,066 samples, 0.02%)</title><rect x="414.4" y="501" width="0.2" height="15.0" fill="rgb(239,156,37)" rx="2" ry="2" />
+<text  x="417.41" y="511.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;double&gt;::deallocate (276,642 samples, 0.03%)</title><rect x="233.3" y="261" width="0.2" height="15.0" fill="rgb(223,83,20)" rx="2" ry="2" />
+<text  x="236.27" y="271.5" ></text>
+</g>
+<g >
+<title>std::__invoke_result&lt;void  (2,105,662 samples, 0.22%)</title><rect x="15.5" y="597" width="1.6" height="15.0" fill="rgb(240,163,39)" rx="2" ry="2" />
+<text  x="18.45" y="607.5" ></text>
+</g>
+<g >
+<title>malloc (191,680 samples, 0.02%)</title><rect x="649.1" y="469" width="0.2" height="15.0" fill="rgb(230,119,28)" rx="2" ry="2" />
+<text  x="652.13" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;signed char, std::allocator&lt;signed char&gt; &gt;::cbegin (165,764 samples, 0.02%)</title><rect x="532.7" y="325" width="0.1" height="15.0" fill="rgb(217,57,13)" rx="2" ry="2" />
+<text  x="535.70" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::IidManager::GetAttributeN (430,734 samples, 0.04%)</title><rect x="449.1" y="229" width="0.4" height="15.0" fill="rgb(232,125,30)" rx="2" ry="2" />
+<text  x="452.10" y="239.5" ></text>
+</g>
+<g >
+<title>std::_Bind&lt;void  (237,306 samples, 0.02%)</title><rect x="710.8" y="453" width="0.1" height="15.0" fill="rgb(253,221,52)" rx="2" ry="2" />
+<text  x="713.75" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Ptr&lt;ns3::Object&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Object&gt; &gt; &gt;::vector (659,463 samples, 0.07%)</title><rect x="161.5" y="405" width="0.5" height="15.0" fill="rgb(237,147,35)" rx="2" ry="2" />
+<text  x="164.48" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::Ptr&lt;ns3::UeManager&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::Ptr&lt;ns3::UeManager&gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::Ptr&lt;ns3::UeManager&gt; &gt; &gt; &gt;::_M_begin (151,422 samples, 0.02%)</title><rect x="28.3" y="309" width="0.1" height="15.0" fill="rgb(227,104,24)" rx="2" ry="2" />
+<text  x="31.26" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue&gt; ns3::Create&lt;ns3::SpectrumValue, ns3::Ptr&lt;ns3::SpectrumModel&gt;&amp;&gt; (1,879,121 samples, 0.19%)</title><rect x="676.6" y="501" width="1.5" height="15.0" fill="rgb(228,107,25)" rx="2" ry="2" />
+<text  x="679.61" y="511.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;::back (265,587 samples, 0.03%)</title><rect x="286.7" y="485" width="0.2" height="15.0" fill="rgb(209,19,4)" rx="2" ry="2" />
+<text  x="289.72" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::PfFfMacScheduler::DoSchedUlTriggerReq (3,881,896 samples, 0.40%)</title><rect x="103.3" y="485" width="3.1" height="15.0" fill="rgb(205,0,0)" rx="2" ry="2" />
+<text  x="106.25" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumModel const&gt;::operator (126,110 samples, 0.01%)</title><rect x="402.8" y="485" width="0.1" height="15.0" fill="rgb(226,96,23)" rx="2" ry="2" />
+<text  x="405.85" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt;::find (1,277,007 samples, 0.13%)</title><rect x="455.5" y="293" width="1.0" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="458.50" y="303.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider::ReportBufferStatusParameters&gt; &gt;::operator (303,690 samples, 0.03%)</title><rect x="689.8" y="501" width="0.3" height="15.0" fill="rgb(220,70,16)" rx="2" ry="2" />
+<text  x="692.82" y="511.5" ></text>
+</g>
+<g >
+<title>std::_List_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;::_List_iterator (153,672 samples, 0.02%)</title><rect x="355.5" y="469" width="0.1" height="15.0" fill="rgb(223,84,20)" rx="2" ry="2" />
+<text  x="358.45" y="479.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::list (148,291 samples, 0.02%)</title><rect x="318.6" y="453" width="0.1" height="15.0" fill="rgb(236,145,34)" rx="2" ry="2" />
+<text  x="321.57" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::UlInfoListElement_s, std::allocator&lt;ns3::UlInfoListElement_s&gt; &gt;::_M_erase_at_end (312,181 samples, 0.03%)</title><rect x="265.4" y="501" width="0.3" height="15.0" fill="rgb(217,55,13)" rx="2" ry="2" />
+<text  x="268.44" y="511.5" ></text>
+</g>
+<g >
+<title>void std::_Construct&lt;double&gt; (155,953 samples, 0.02%)</title><rect x="677.8" y="389" width="0.2" height="15.0" fill="rgb(228,106,25)" rx="2" ry="2" />
+<text  x="680.84" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt;::_M_allocate (152,912 samples, 0.02%)</title><rect x="144.5" y="405" width="0.2" height="15.0" fill="rgb(217,59,14)" rx="2" ry="2" />
+<text  x="147.54" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::LteSpectrumModelId, std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt;, std::_Select1st&lt;std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt; &gt;, std::less&lt;ns3::LteSpectrumModelId&gt;, std::allocator&lt;std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt; &gt; &gt;::_M_begin (159,151 samples, 0.02%)</title><rect x="675.6" y="453" width="0.1" height="15.0" fill="rgb(233,130,31)" rx="2" ry="2" />
+<text  x="678.61" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::LteUePhy::DoSendLteControlMessage (416,875 samples, 0.04%)</title><rect x="689.3" y="485" width="0.3" height="15.0" fill="rgb(232,124,29)" rx="2" ry="2" />
+<text  x="692.30" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Packet::~Packet (4,222,593 samples, 0.44%)</title><rect x="545.7" y="133" width="3.4" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="548.67" y="143.5" ></text>
+</g>
+<g >
+<title>ns3::EventId::EventId (335,084 samples, 0.03%)</title><rect x="637.4" y="485" width="0.3" height="15.0" fill="rgb(206,4,1)" rx="2" ry="2" />
+<text  x="640.39" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Bvector_base&lt;std::allocator&lt;bool&gt; &gt;::_Bvector_impl::_M_end_addr (154,284 samples, 0.02%)</title><rect x="200.2" y="421" width="0.1" height="15.0" fill="rgb(251,212,50)" rx="2" ry="2" />
+<text  x="203.22" y="431.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;unsigned long&gt; &gt;::allocate (271,783 samples, 0.03%)</title><rect x="198.0" y="421" width="0.3" height="15.0" fill="rgb(227,102,24)" rx="2" ry="2" />
+<text  x="201.04" y="431.5" ></text>
+</g>
+<g >
+<title>std::less&lt;unsigned short&gt;::operator (224,387 samples, 0.02%)</title><rect x="430.1" y="229" width="0.2" height="15.0" fill="rgb(207,11,2)" rx="2" ry="2" />
+<text  x="433.07" y="239.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::vector&lt;int, std::allocator&lt;int&gt; &gt;, std::allocator&lt;std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt; &gt;::_M_range_check (265,329 samples, 0.03%)</title><rect x="701.2" y="533" width="0.2" height="15.0" fill="rgb(238,152,36)" rx="2" ry="2" />
+<text  x="704.15" y="543.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::resize (3,219,505 samples, 0.33%)</title><rect x="251.3" y="485" width="2.6" height="15.0" fill="rgb(227,101,24)" rx="2" ry="2" />
+<text  x="254.28" y="495.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;double&gt; &gt;::allocate (126,483 samples, 0.01%)</title><rect x="606.9" y="421" width="0.1" height="15.0" fill="rgb(234,136,32)" rx="2" ry="2" />
+<text  x="609.92" y="431.5" ></text>
+</g>
+<g >
+<title>std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;* std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_create_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; const&amp;&gt; (413,599 samples, 0.04%)</title><rect x="230.2" y="373" width="0.3" height="15.0" fill="rgb(230,116,27)" rx="2" ry="2" />
+<text  x="233.19" y="383.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_assign_dispatch&lt;std::_List_const_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; (411,083 samples, 0.04%)</title><rect x="648.7" y="453" width="0.4" height="15.0" fill="rgb(237,148,35)" rx="2" ry="2" />
+<text  x="651.73" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt;::_Vector_base (199,135 samples, 0.02%)</title><rect x="443.1" y="293" width="0.2" height="15.0" fill="rgb(246,192,46)" rx="2" ry="2" />
+<text  x="446.10" y="303.5" ></text>
+</g>
+<g >
+<title>std::_List_iterator&lt;ns3::Ptr&lt;ns3::LteChunkProcessor&gt; &gt;::operator++ (161,286 samples, 0.02%)</title><rect x="719.9" y="501" width="0.1" height="15.0" fill="rgb(220,73,17)" rx="2" ry="2" />
+<text  x="722.91" y="511.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt; &gt; &gt;::push_back (202,678 samples, 0.02%)</title><rect x="292.3" y="533" width="0.1" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="295.27" y="543.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt;::size (188,805 samples, 0.02%)</title><rect x="210.3" y="453" width="0.1" height="15.0" fill="rgb(210,27,6)" rx="2" ry="2" />
+<text  x="213.29" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::operator= (821,681 samples, 0.08%)</title><rect x="719.1" y="469" width="0.6" height="15.0" fill="rgb(243,175,42)" rx="2" ry="2" />
+<text  x="722.05" y="479.5" ></text>
+</g>
+<g >
+<title>std::__detail::_List_node_header::_List_node_header (148,982 samples, 0.02%)</title><rect x="371.9" y="437" width="0.1" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="374.85" y="447.5" ></text>
+</g>
+<g >
+<title>operator new (487,893 samples, 0.05%)</title><rect x="407.7" y="373" width="0.4" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="410.68" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_M_destroy_node (198,551 samples, 0.02%)</title><rect x="233.0" y="405" width="0.1" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="235.95" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::ObjectBase::ObjectBase (412,873 samples, 0.04%)</title><rect x="537.8" y="261" width="0.4" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="540.84" y="271.5" ></text>
+</g>
+<g >
+<title>double* std::fill_n&lt;double*, unsigned long, double&gt; (248,267 samples, 0.03%)</title><rect x="718.6" y="373" width="0.2" height="15.0" fill="rgb(234,135,32)" rx="2" ry="2" />
+<text  x="721.60" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::IidManager::LookupInformation (308,302 samples, 0.03%)</title><rect x="631.3" y="437" width="0.3" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="634.34" y="447.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;double&gt; &gt;::allocate (156,472 samples, 0.02%)</title><rect x="413.2" y="437" width="0.2" height="15.0" fill="rgb(234,136,32)" rx="2" ry="2" />
+<text  x="416.23" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::end (714,185 samples, 0.07%)</title><rect x="761.7" y="693" width="0.6" height="15.0" fill="rgb(244,179,42)" rx="2" ry="2" />
+<text  x="764.69" y="703.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::_M_get_node (272,817 samples, 0.03%)</title><rect x="23.0" y="293" width="0.2" height="15.0" fill="rgb(212,36,8)" rx="2" ry="2" />
+<text  x="26.03" y="303.5" ></text>
+</g>
+<g >
+<title>void std::_Construct&lt;ns3::BuildDataListElement_s, ns3::BuildDataListElement_s const&amp;&gt; (154,123 samples, 0.02%)</title><rect x="142.2" y="373" width="0.1" height="15.0" fill="rgb(210,24,5)" rx="2" ry="2" />
+<text  x="145.21" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::Packet, ns3::Empty, ns3::DefaultDeleter&lt;ns3::Packet&gt; &gt;::SimpleRefCount (194,468 samples, 0.02%)</title><rect x="154.1" y="357" width="0.2" height="15.0" fill="rgb(223,86,20)" rx="2" ry="2" />
+<text  x="157.10" y="367.5" ></text>
+</g>
+<g >
+<title>__fixunsxfti (459,077 samples, 0.05%)</title><rect x="390.3" y="485" width="0.4" height="15.0" fill="rgb(252,219,52)" rx="2" ry="2" />
+<text  x="393.33" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Bind&lt;void  (196,912 samples, 0.02%)</title><rect x="726.8" y="453" width="0.2" height="15.0" fill="rgb(253,221,52)" rx="2" ry="2" />
+<text  x="729.82" y="463.5" ></text>
+</g>
+<g >
+<title>double* std::__uninitialized_default_n&lt;double*, unsigned long&gt; (1,351,343 samples, 0.14%)</title><rect x="403.4" y="437" width="1.1" height="15.0" fill="rgb(231,123,29)" rx="2" ry="2" />
+<text  x="406.43" y="447.5" ></text>
+</g>
+<g >
+<title>void ns3::Simulator::ScheduleWithContext&lt;void  (696,602 samples, 0.07%)</title><rect x="115.9" y="485" width="0.6" height="15.0" fill="rgb(222,78,18)" rx="2" ry="2" />
+<text  x="118.94" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::at (274,992 samples, 0.03%)</title><rect x="225.2" y="485" width="0.3" height="15.0" fill="rgb(251,215,51)" rx="2" ry="2" />
+<text  x="228.24" y="495.5" ></text>
+</g>
+<g >
+<title>std::_List_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;::operator* (197,417 samples, 0.02%)</title><rect x="610.9" y="485" width="0.1" height="15.0" fill="rgb(227,105,25)" rx="2" ry="2" />
+<text  x="613.89" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::AddPacket (193,356 samples, 0.02%)</title><rect x="19.9" y="309" width="0.2" height="15.0" fill="rgb(207,10,2)" rx="2" ry="2" />
+<text  x="22.95" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::HigherLayerSelected_s::HigherLayerSelected_s (333,368 samples, 0.03%)</title><rect x="125.3" y="277" width="0.3" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="128.29" y="287.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; &gt; &gt;::operator* (234,968 samples, 0.02%)</title><rect x="167.7" y="453" width="0.2" height="15.0" fill="rgb(240,163,39)" rx="2" ry="2" />
+<text  x="170.72" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt; &gt; &gt;::find (1,823,746 samples, 0.19%)</title><rect x="169.5" y="437" width="1.5" height="15.0" fill="rgb(238,154,36)" rx="2" ry="2" />
+<text  x="172.49" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::ByteTagList::~ByteTagList (239,815 samples, 0.02%)</title><rect x="774.3" y="181" width="0.2" height="15.0" fill="rgb(206,5,1)" rx="2" ry="2" />
+<text  x="777.31" y="191.5" ></text>
+</g>
+<g >
+<title>ns3::Time::To (417,636 samples, 0.04%)</title><rect x="484.1" y="485" width="0.4" height="15.0" fill="rgb(244,182,43)" rx="2" ry="2" />
+<text  x="487.13" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Packet::PeekPacketTag (2,187,603 samples, 0.23%)</title><rect x="489.5" y="549" width="1.8" height="15.0" fill="rgb(232,126,30)" rx="2" ry="2" />
+<text  x="492.51" y="559.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumModel const&gt;::Acquire (235,730 samples, 0.02%)</title><rect x="676.6" y="469" width="0.2" height="15.0" fill="rgb(222,80,19)" rx="2" ry="2" />
+<text  x="679.64" y="479.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned char, ns3::LteMacSapProvider*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt; &gt;::find (1,809,407 samples, 0.19%)</title><rect x="565.4" y="229" width="1.4" height="15.0" fill="rgb(248,200,47)" rx="2" ry="2" />
+<text  x="568.37" y="239.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;* std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_create_node&lt;unsigned int const&amp;, ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp;&gt; (420,658 samples, 0.04%)</title><rect x="81.8" y="453" width="0.4" height="15.0" fill="rgb(245,186,44)" rx="2" ry="2" />
+<text  x="84.81" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumPhy::StartTxDataFrame (35,782,100 samples, 3.69%)</title><rect x="62.0" y="549" width="28.8" height="15.0" fill="rgb(242,171,40)" rx="2" ry="2" />
+<text  x="65.00" y="559.5" >ns..</text>
+</g>
+<g >
+<title>ns3::LogComponent::IsEnabled (153,177 samples, 0.02%)</title><rect x="305.2" y="453" width="0.1" height="15.0" fill="rgb(214,43,10)" rx="2" ry="2" />
+<text  x="308.17" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumValueHelper::CreateTxPowerSpectralDensity (7,568,442 samples, 0.78%)</title><rect x="296.9" y="501" width="6.1" height="15.0" fill="rgb(250,209,50)" rx="2" ry="2" />
+<text  x="299.89" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::LteRlcSm::ReportBufferStatus (1,019,985 samples, 0.11%)</title><rect x="17.9" y="405" width="0.8" height="15.0" fill="rgb(224,89,21)" rx="2" ry="2" />
+<text  x="20.88" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::EnbMemberLteEnbPhySapProvider::SendLteControlMessage (197,391 samples, 0.02%)</title><rect x="103.7" y="437" width="0.1" height="15.0" fill="rgb(253,222,53)" rx="2" ry="2" />
+<text  x="106.68" y="447.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;*, std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt; &gt; std::move&lt;__gnu_cxx::__normal_iterator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;*, std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;*, std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt; &gt; &gt; (264,157 samples, 0.03%)</title><rect x="117.8" y="485" width="0.2" height="15.0" fill="rgb(254,225,54)" rx="2" ry="2" />
+<text  x="120.75" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::MacCeListElement_s::MacCeListElement_s (1,017,736 samples, 0.10%)</title><rect x="441.8" y="341" width="0.8" height="15.0" fill="rgb(223,85,20)" rx="2" ry="2" />
+<text  x="444.78" y="351.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::_M_get_node (491,620 samples, 0.05%)</title><rect x="363.2" y="453" width="0.4" height="15.0" fill="rgb(212,36,8)" rx="2" ry="2" />
+<text  x="366.25" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::ByteTagList::Deallocate (244,736 samples, 0.03%)</title><rect x="76.3" y="213" width="0.2" height="15.0" fill="rgb(227,103,24)" rx="2" ry="2" />
+<text  x="79.28" y="223.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt;::_S_relocate (1,209,596 samples, 0.12%)</title><rect x="595.3" y="261" width="0.9" height="15.0" fill="rgb(220,69,16)" rx="2" ry="2" />
+<text  x="598.25" y="271.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, unsigned short, std::_Identity&lt;unsigned short&gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;unsigned short&gt; &gt;::_M_begin (261,904 samples, 0.03%)</title><rect x="395.0" y="517" width="0.2" height="15.0" fill="rgb(217,58,14)" rx="2" ry="2" />
+<text  x="397.97" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::HigherLayerSelected_s::HigherLayerSelected_s (418,936 samples, 0.04%)</title><rect x="595.7" y="165" width="0.4" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="598.73" y="175.5" ></text>
+</g>
+<g >
+<title>ns3::MobilityModel::GetDistanceFrom (1,223,688 samples, 0.13%)</title><rect x="739.7" y="517" width="1.0" height="15.0" fill="rgb(229,112,26)" rx="2" ry="2" />
+<text  x="742.67" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::BuildBroadcastListElement_s* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;ns3::BuildBroadcastListElement_s const*, std::vector&lt;ns3::BuildBroadcastListElement_s, std::allocator&lt;ns3::BuildBroadcastListElement_s&gt; &gt; &gt;, ns3::BuildBroadcastListElement_s*, ns3::BuildBroadcastListElement_s&gt; (150,405 samples, 0.02%)</title><rect x="140.9" y="437" width="0.1" height="15.0" fill="rgb(218,64,15)" rx="2" ry="2" />
+<text  x="143.86" y="447.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;is_member_pointer_v&lt;void  (379,721 samples, 0.04%)</title><rect x="112.7" y="485" width="0.3" height="15.0" fill="rgb(241,170,40)" rx="2" ry="2" />
+<text  x="115.67" y="495.5" ></text>
+</g>
+<g >
+<title>std::function&lt;void  (5,321,712 samples, 0.55%)</title><rect x="11.2" y="709" width="4.3" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="14.17" y="719.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt;::_M_get_Tp_allocator (160,864 samples, 0.02%)</title><rect x="262.2" y="485" width="0.2" height="15.0" fill="rgb(215,48,11)" rx="2" ry="2" />
+<text  x="265.23" y="495.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;unsigned short*, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;::difference_type __gnu_cxx::operator-&lt;unsigned short*, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; (158,533 samples, 0.02%)</title><rect x="218.5" y="437" width="0.1" height="15.0" fill="rgb(238,152,36)" rx="2" ry="2" />
+<text  x="221.50" y="447.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, unsigned int, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt; &gt;::find (178,285 samples, 0.02%)</title><rect x="103.0" y="469" width="0.2" height="15.0" fill="rgb(239,156,37)" rx="2" ry="2" />
+<text  x="106.02" y="479.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::__uninitialized_copy&lt;true&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, unsigned char*&gt; (592,631 samples, 0.06%)</title><rect x="126.9" y="341" width="0.4" height="15.0" fill="rgb(233,129,30)" rx="2" ry="2" />
+<text  x="129.85" y="351.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::UlInfoListElement_s*&gt; (228,697 samples, 0.02%)</title><rect x="265.5" y="469" width="0.2" height="15.0" fill="rgb(205,4,1)" rx="2" ry="2" />
+<text  x="268.51" y="479.5" ></text>
+</g>
+<g >
+<title>operator new (629,966 samples, 0.06%)</title><rect x="655.0" y="373" width="0.5" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="658.02" y="383.5" ></text>
+</g>
+<g >
+<title>std::tuple&lt;ns3::MultiModelSpectrumChannel*, ns3::Ptr&lt;ns3::SpectrumValue&gt;, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::tuple (495,402 samples, 0.05%)</title><rect x="340.8" y="389" width="0.4" height="15.0" fill="rgb(232,125,30)" rx="2" ry="2" />
+<text  x="343.78" y="399.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::~vector (445,109 samples, 0.05%)</title><rect x="255.0" y="341" width="0.4" height="15.0" fill="rgb(243,174,41)" rx="2" ry="2" />
+<text  x="258.04" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::MacCeListElement_s* std::__uninitialized_copy_a&lt;std::move_iterator&lt;ns3::MacCeListElement_s*&gt;, ns3::MacCeListElement_s*, ns3::MacCeListElement_s&gt; (462,292 samples, 0.05%)</title><rect x="129.5" y="469" width="0.4" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="132.52" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::ByteTagList::Iterator::Next (984,877 samples, 0.10%)</title><rect x="425.3" y="229" width="0.8" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="428.32" y="239.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::Ptr&lt;ns3::Object&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Object&gt; &gt; &gt;::~_Vector_base (152,155 samples, 0.02%)</title><rect x="165.2" y="325" width="0.1" height="15.0" fill="rgb(221,76,18)" rx="2" ry="2" />
+<text  x="168.17" y="335.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; &gt; &gt;::begin (303,510 samples, 0.03%)</title><rect x="348.8" y="517" width="0.2" height="15.0" fill="rgb(209,21,5)" rx="2" ry="2" />
+<text  x="351.77" y="527.5" ></text>
+</g>
+<g >
+<title>bool __gnu_cxx::operator==&lt;ns3::Buffer::Data* const*, std::vector&lt;ns3::Buffer::Data*, std::allocator&lt;ns3::Buffer::Data*&gt; &gt; &gt; (150,431 samples, 0.02%)</title><rect x="31.9" y="325" width="0.1" height="15.0" fill="rgb(244,183,43)" rx="2" ry="2" />
+<text  x="34.92" y="335.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt;::_Vector_impl_data::_Vector_impl_data (146,682 samples, 0.02%)</title><rect x="144.7" y="405" width="0.1" height="15.0" fill="rgb(213,37,9)" rx="2" ry="2" />
+<text  x="147.73" y="415.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;::begin (155,092 samples, 0.02%)</title><rect x="375.9" y="533" width="0.1" height="15.0" fill="rgb(219,67,16)" rx="2" ry="2" />
+<text  x="378.87" y="543.5" ></text>
+</g>
+<g >
+<title>double* std::__uninitialized_default_n_a&lt;double*, unsigned long, double&gt; (1,306,729 samples, 0.13%)</title><rect x="300.9" y="421" width="1.1" height="15.0" fill="rgb(248,199,47)" rx="2" ry="2" />
+<text  x="303.91" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::SpectrumValue (1,521,016 samples, 0.16%)</title><rect x="56.4" y="485" width="1.2" height="15.0" fill="rgb(211,27,6)" rx="2" ry="2" />
+<text  x="59.38" y="495.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::operator= (211,914 samples, 0.02%)</title><rect x="90.6" y="533" width="0.2" height="15.0" fill="rgb(251,215,51)" rx="2" ry="2" />
+<text  x="93.61" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::LogComponent::IsEnabled (154,612 samples, 0.02%)</title><rect x="773.9" y="309" width="0.1" height="15.0" fill="rgb(214,43,10)" rx="2" ry="2" />
+<text  x="776.90" y="319.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;::_M_move_nodes (377,447 samples, 0.04%)</title><rect x="290.5" y="389" width="0.3" height="15.0" fill="rgb(230,117,28)" rx="2" ry="2" />
+<text  x="293.52" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::Time::FromDouble (1,884,228 samples, 0.19%)</title><rect x="389.5" y="533" width="1.5" height="15.0" fill="rgb(249,203,48)" rx="2" ry="2" />
+<text  x="392.50" y="543.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt; &gt;::find (1,373,897 samples, 0.14%)</title><rect x="179.8" y="469" width="1.1" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="182.83" y="479.5" ></text>
+</g>
+<g >
+<title>std::tuple&lt;ns3::LteInterference*, ns3::Ptr&lt;ns3::SpectrumValue const&gt;, unsigned int&gt;::tuple (1,080,236 samples, 0.11%)</title><rect x="711.7" y="405" width="0.8" height="15.0" fill="rgb(215,50,11)" rx="2" ry="2" />
+<text  x="714.68" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::FfMacSchedSapProvider::SchedUlMacCtrlInfoReqParameters::SchedUlMacCtrlInfoReqParameters (182,245 samples, 0.02%)</title><rect x="133.1" y="517" width="0.2" height="15.0" fill="rgb(206,5,1)" rx="2" ry="2" />
+<text  x="136.15" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt;::_M_allocate (264,699 samples, 0.03%)</title><rect x="261.0" y="341" width="0.2" height="15.0" fill="rgb(209,21,5)" rx="2" ry="2" />
+<text  x="263.95" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::LteMiErrorModel::MappingMiBler (872,634 samples, 0.09%)</title><rect x="588.0" y="261" width="0.7" height="15.0" fill="rgb(216,55,13)" rx="2" ry="2" />
+<text  x="590.95" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::LteRlcSm::ReportBufferStatus (747,299 samples, 0.08%)</title><rect x="12.5" y="405" width="0.6" height="15.0" fill="rgb(224,89,21)" rx="2" ry="2" />
+<text  x="15.49" y="415.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::vector (189,712 samples, 0.02%)</title><rect x="102.0" y="469" width="0.1" height="15.0" fill="rgb(206,9,2)" rx="2" ry="2" />
+<text  x="104.98" y="479.5" ></text>
+</g>
+<g >
+<title>std::function&lt;void  (937,122 samples, 0.10%)</title><rect x="63.6" y="485" width="0.7" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="66.59" y="495.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::RarLteControlMessage::Rar, std::allocator&lt;ns3::RarLteControlMessage::Rar&gt; &gt;::~_List_base (234,533 samples, 0.02%)</title><rect x="167.3" y="357" width="0.2" height="15.0" fill="rgb(254,226,54)" rx="2" ry="2" />
+<text  x="170.28" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::tbInfo_t::tbInfo_t (126,859 samples, 0.01%)</title><rect x="530.1" y="325" width="0.1" height="15.0" fill="rgb(224,91,21)" rx="2" ry="2" />
+<text  x="533.10" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::Packet::Packet (358,332 samples, 0.04%)</title><rect x="16.7" y="373" width="0.3" height="15.0" fill="rgb(230,115,27)" rx="2" ry="2" />
+<text  x="19.70" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbMac::DoSubframeIndication (1,650,854 samples, 0.17%)</title><rect x="15.8" y="533" width="1.3" height="15.0" fill="rgb(248,200,47)" rx="2" ry="2" />
+<text  x="18.79" y="543.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::~vector (189,290 samples, 0.02%)</title><rect x="112.2" y="421" width="0.2" height="15.0" fill="rgb(225,92,22)" rx="2" ry="2" />
+<text  x="115.24" y="431.5" ></text>
+</g>
+<g >
+<title>std::modf (284,529 samples, 0.03%)</title><rect x="390.8" y="485" width="0.2" height="15.0" fill="rgb(249,206,49)" rx="2" ry="2" />
+<text  x="393.79" y="495.5" ></text>
+</g>
+<g >
+<title> (124,598 samples, 0.01%)</title><rect x="608.6" y="533" width="0.1" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="611.56" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::EnbMacMemberLteEnbPhySapUser::SubframeIndication (178,646,468 samples, 18.42%)</title><rect x="123.4" y="549" width="143.7" height="15.0" fill="rgb(252,216,51)" rx="2" ry="2" />
+<text  x="126.36" y="559.5" >ns3::EnbMacMemberL..</text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;*, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; std::__copy_move_a&lt;true, __gnu_cxx::__normal_iterator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;*, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;*, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; &gt; (148,381 samples, 0.02%)</title><rect x="117.1" y="469" width="0.1" height="15.0" fill="rgb(240,164,39)" rx="2" ry="2" />
+<text  x="120.11" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::DoDispose (1,132,243 samples, 0.12%)</title><rect x="773.9" y="325" width="0.9" height="15.0" fill="rgb(242,172,41)" rx="2" ry="2" />
+<text  x="776.90" y="335.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy_aux&lt;false&gt;::__destroy&lt;ns3::CqiListElement_s*&gt; (143,980 samples, 0.01%)</title><rect x="128.2" y="453" width="0.1" height="15.0" fill="rgb(229,111,26)" rx="2" ry="2" />
+<text  x="131.17" y="463.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;is_invocable_r_v&lt;void, std::_Bind&lt;void  (2,105,662 samples, 0.22%)</title><rect x="15.5" y="661" width="1.6" height="15.0" fill="rgb(243,178,42)" rx="2" ry="2" />
+<text  x="18.45" y="671.5" ></text>
+</g>
+<g >
+<title>ns3::TagBuffer::TrimAtEnd (161,048 samples, 0.02%)</title><rect x="425.9" y="213" width="0.1" height="15.0" fill="rgb(225,94,22)" rx="2" ry="2" />
+<text  x="428.92" y="223.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::RxSpectrumModelInfo&gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::RxSpectrumModelInfo&gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::RxSpectrumModelInfo&gt; &gt; &gt;::end (128,201 samples, 0.01%)</title><rect x="80.9" y="501" width="0.1" height="15.0" fill="rgb(206,9,2)" rx="2" ry="2" />
+<text  x="83.93" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Vector3D::Vector3D (192,806 samples, 0.02%)</title><rect x="642.6" y="485" width="0.2" height="15.0" fill="rgb(243,178,42)" rx="2" ry="2" />
+<text  x="645.63" y="495.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::clear (224,512 samples, 0.02%)</title><rect x="634.7" y="341" width="0.2" height="15.0" fill="rgb(217,58,13)" rx="2" ry="2" />
+<text  x="637.70" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::~DlInfoListElement_s (1,109,198 samples, 0.11%)</title><rect x="256.0" y="405" width="0.9" height="15.0" fill="rgb(217,55,13)" rx="2" ry="2" />
+<text  x="259.05" y="415.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;*, std::vector&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt; &gt; &gt; &gt; std::move&lt;__gnu_cxx::__normal_iterator&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;*, std::vector&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt; &gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;*, std::vector&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt; &gt; &gt; &gt; &gt; (1,862,892 samples, 0.19%)</title><rect x="290.0" y="501" width="1.5" height="15.0" fill="rgb(208,15,3)" rx="2" ry="2" />
+<text  x="292.99" y="511.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;double&gt; &gt;::allocate (150,187 samples, 0.02%)</title><rect x="718.4" y="389" width="0.1" height="15.0" fill="rgb(234,136,32)" rx="2" ry="2" />
+<text  x="721.35" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::PfFfMacScheduler::GetRbgSize (153,442 samples, 0.02%)</title><rect x="176.4" y="485" width="0.2" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="179.44" y="495.5" ></text>
+</g>
+<g >
+<title>unsigned short* std::fill_n&lt;unsigned short*, unsigned long, unsigned short&gt; (700,494 samples, 0.07%)</title><rect x="252.2" y="405" width="0.5" height="15.0" fill="rgb(231,123,29)" rx="2" ry="2" />
+<text  x="255.18" y="415.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::IidManager::IidInformation, std::allocator&lt;ns3::IidManager::IidInformation&gt; &gt;::size (188,549 samples, 0.02%)</title><rect x="34.2" y="373" width="0.1" height="15.0" fill="rgb(249,206,49)" rx="2" ry="2" />
+<text  x="37.15" y="383.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_List_base (459,736 samples, 0.05%)</title><rect x="516.9" y="421" width="0.4" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="519.92" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::TypeId::operator= (127,390 samples, 0.01%)</title><rect x="562.7" y="165" width="0.1" height="15.0" fill="rgb(211,28,6)" rx="2" ry="2" />
+<text  x="565.69" y="175.5" ></text>
+</g>
+<g >
+<title>std::map&lt;ns3::LteFlowId_t, ns3::FfMacSchedSapProvider::SchedDlRlcBufferReqParameters, std::less&lt;ns3::LteFlowId_t&gt;, std::allocator&lt;std::pair&lt;ns3::LteFlowId_t const, ns3::FfMacSchedSapProvider::SchedDlRlcBufferReqParameters&gt; &gt; &gt;::find (1,508,586 samples, 0.16%)</title><rect x="181.3" y="469" width="1.2" height="15.0" fill="rgb(229,112,26)" rx="2" ry="2" />
+<text  x="184.29" y="479.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::list (1,664,663 samples, 0.17%)</title><rect x="619.6" y="533" width="1.3" height="15.0" fill="rgb(236,145,34)" rx="2" ry="2" />
+<text  x="622.60" y="543.5" ></text>
+</g>
+<g >
+<title>operator new (158,241 samples, 0.02%)</title><rect x="480.1" y="197" width="0.1" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="483.12" y="207.5" ></text>
+</g>
+<g >
+<title>operator new (429,586 samples, 0.04%)</title><rect x="325.4" y="357" width="0.4" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="328.42" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumPhy const&gt;::Ptr&lt;ns3::SpectrumPhy&gt; (154,425 samples, 0.02%)</title><rect x="744.1" y="549" width="0.2" height="15.0" fill="rgb(234,136,32)" rx="2" ry="2" />
+<text  x="747.15" y="559.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Node&gt;::Ptr (417,289 samples, 0.04%)</title><rect x="312.7" y="485" width="0.3" height="15.0" fill="rgb(237,147,35)" rx="2" ry="2" />
+<text  x="315.67" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::UlInfoListElement_s, std::allocator&lt;ns3::UlInfoListElement_s&gt; &gt;::operator= (153,511 samples, 0.02%)</title><rect x="108.1" y="501" width="0.2" height="15.0" fill="rgb(212,32,7)" rx="2" ry="2" />
+<text  x="111.13" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy::GetDownlinkSubChannels (240,017 samples, 0.02%)</title><rect x="54.0" y="517" width="0.2" height="15.0" fill="rgb(235,139,33)" rx="2" ry="2" />
+<text  x="56.97" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;::~Ptr (2,493,989 samples, 0.26%)</title><rect x="652.4" y="517" width="2.0" height="15.0" fill="rgb(236,143,34)" rx="2" ry="2" />
+<text  x="655.43" y="527.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::_S_check_init_len (126,790 samples, 0.01%)</title><rect x="678.0" y="453" width="0.1" height="15.0" fill="rgb(233,130,31)" rx="2" ry="2" />
+<text  x="680.99" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::MemberSchedSapProvider&lt;ns3::PfFfMacScheduler&gt;::SchedDlTriggerReq (2,983,151 samples, 0.31%)</title><rect x="17.2" y="533" width="2.4" height="15.0" fill="rgb(247,193,46)" rx="2" ry="2" />
+<text  x="20.17" y="543.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; (160,870 samples, 0.02%)</title><rect x="482.6" y="277" width="0.2" height="15.0" fill="rgb(212,35,8)" rx="2" ry="2" />
+<text  x="485.63" y="287.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;int, std::allocator&lt;int&gt; &gt;::_Vector_impl_data::_Vector_impl_data (138,078 samples, 0.01%)</title><rect x="385.2" y="325" width="0.1" height="15.0" fill="rgb(211,30,7)" rx="2" ry="2" />
+<text  x="388.21" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::MobilityModel&gt;::~Ptr (160,100 samples, 0.02%)</title><rect x="743.1" y="549" width="0.2" height="15.0" fill="rgb(249,203,48)" rx="2" ry="2" />
+<text  x="746.13" y="559.5" ></text>
+</g>
+<g >
+<title>ns3::ObjectDeleter::Delete (158,753 samples, 0.02%)</title><rect x="17.0" y="421" width="0.1" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="19.99" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::TracedCallback&lt;ns3::PhyReceptionStatParameters&gt;::operator (278,616 samples, 0.03%)</title><rect x="493.9" y="549" width="0.2" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="496.90" y="559.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;std::is_constructible&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt;::value, std::pair&lt;std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, bool&gt; &gt;::type std::map&lt;ns3::Scheduler::EventKey, ns3::EventImpl*, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::insert&lt;std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (1,644,033 samples, 0.17%)</title><rect x="706.4" y="453" width="1.3" height="15.0" fill="rgb(211,29,7)" rx="2" ry="2" />
+<text  x="709.38" y="463.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned char, ns3::LteMacSapProvider::ReportBufferStatusParameters, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider::ReportBufferStatusParameters&gt; &gt; &gt;::begin (422,977 samples, 0.04%)</title><rect x="569.3" y="325" width="0.4" height="15.0" fill="rgb(243,175,42)" rx="2" ry="2" />
+<text  x="572.32" y="335.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt;::_M_valptr (242,288 samples, 0.02%)</title><rect x="179.1" y="453" width="0.2" height="15.0" fill="rgb(249,206,49)" rx="2" ry="2" />
+<text  x="182.14" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue&gt;::operator* (163,458 samples, 0.02%)</title><rect x="744.6" y="549" width="0.1" height="15.0" fill="rgb(243,176,42)" rx="2" ry="2" />
+<text  x="747.62" y="559.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::_Vector_base (192,396 samples, 0.02%)</title><rect x="474.0" y="197" width="0.2" height="15.0" fill="rgb(219,65,15)" rx="2" ry="2" />
+<text  x="477.01" y="207.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Callback&lt;void, unsigned short, unsigned char, unsigned int&gt;, std::allocator&lt;ns3::Callback&lt;void, unsigned short, unsigned char, unsigned int&gt; &gt; &gt;::begin (281,211 samples, 0.03%)</title><rect x="156.1" y="373" width="0.2" height="15.0" fill="rgb(236,144,34)" rx="2" ry="2" />
+<text  x="159.09" y="383.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::at (263,150 samples, 0.03%)</title><rect x="329.1" y="501" width="0.2" height="15.0" fill="rgb(220,71,17)" rx="2" ry="2" />
+<text  x="332.11" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;1ul, ns3::Ptr&lt;ns3::PacketBurst&gt; &gt;::_Tuple_impl (360,730 samples, 0.04%)</title><rect x="284.1" y="405" width="0.3" height="15.0" fill="rgb(222,81,19)" rx="2" ry="2" />
+<text  x="287.12" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;::_Rb_tree_iterator (202,210 samples, 0.02%)</title><rect x="762.1" y="677" width="0.2" height="15.0" fill="rgb(223,85,20)" rx="2" ry="2" />
+<text  x="765.11" y="687.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;*, std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; std::move&lt;__gnu_cxx::__normal_iterator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;*, std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;*, std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; (536,978 samples, 0.06%)</title><rect x="119.7" y="485" width="0.5" height="15.0" fill="rgb(211,30,7)" rx="2" ry="2" />
+<text  x="122.74" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; &gt; &gt;::_M_valptr (232,843 samples, 0.02%)</title><rect x="171.7" y="389" width="0.2" height="15.0" fill="rgb(219,68,16)" rx="2" ry="2" />
+<text  x="174.71" y="399.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::list&lt;std::_List_const_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;, void&gt; (1,560,416 samples, 0.16%)</title><rect x="732.8" y="469" width="1.2" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="735.79" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::MultiModelSpectrumChannel::StartRx (60,346,707 samples, 6.22%)</title><rect x="701.7" y="565" width="48.6" height="15.0" fill="rgb(240,161,38)" rx="2" ry="2" />
+<text  x="704.73" y="575.5" >ns3:..</text>
+</g>
+<g >
+<title>std::_Bit_iterator_base::_M_incr (153,737 samples, 0.02%)</title><rect x="198.6" y="405" width="0.1" height="15.0" fill="rgb(241,165,39)" rx="2" ry="2" />
+<text  x="201.61" y="415.5" ></text>
+</g>
+<g >
+<title>unsigned int&amp; std::__get_helper&lt;1ul, unsigned int, unsigned int&gt; (270,195 samples, 0.03%)</title><rect x="754.8" y="581" width="0.3" height="15.0" fill="rgb(220,71,17)" rx="2" ry="2" />
+<text  x="757.84" y="591.5" ></text>
+</g>
+<g >
+<title>ns3::SbMeasResult_s::SbMeasResult_s (1,067,175 samples, 0.11%)</title><rect x="442.6" y="325" width="0.9" height="15.0" fill="rgb(235,141,33)" rx="2" ry="2" />
+<text  x="445.63" y="335.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt;::_M_range_check (195,616 samples, 0.02%)</title><rect x="208.2" y="469" width="0.1" height="15.0" fill="rgb(242,173,41)" rx="2" ry="2" />
+<text  x="211.16" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt;::operator= (190,707 samples, 0.02%)</title><rect x="93.9" y="453" width="0.1" height="15.0" fill="rgb(252,217,52)" rx="2" ry="2" />
+<text  x="96.88" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumPhy::StartTxUlSrsFrame (887,136 samples, 0.09%)</title><rect x="613.7" y="549" width="0.7" height="15.0" fill="rgb(221,77,18)" rx="2" ry="2" />
+<text  x="616.70" y="559.5" ></text>
+</g>
+<g >
+<title>ns3::PfFfMacScheduler::DoSchedDlTriggerReq (1,650,854 samples, 0.17%)</title><rect x="15.8" y="501" width="1.3" height="15.0" fill="rgb(214,45,10)" rx="2" ry="2" />
+<text  x="18.79" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::PacketTagList::COWTraverse (191,197 samples, 0.02%)</title><rect x="435.4" y="293" width="0.1" height="15.0" fill="rgb(252,219,52)" rx="2" ry="2" />
+<text  x="438.38" y="303.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::~_Vector_base (204,384 samples, 0.02%)</title><rect x="521.5" y="325" width="0.2" height="15.0" fill="rgb(241,168,40)" rx="2" ry="2" />
+<text  x="524.49" y="335.5" ></text>
+</g>
+<g >
+<title>std::tuple&lt;ns3::LteEnbPhy*&gt;::tuple&lt;ns3::LteEnbPhy*&amp;, true, true&gt; (191,013 samples, 0.02%)</title><rect x="53.4" y="469" width="0.1" height="15.0" fill="rgb(215,48,11)" rx="2" ry="2" />
+<text  x="56.38" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Time::ToInteger (236,828 samples, 0.02%)</title><rect x="16.5" y="341" width="0.2" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="19.51" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::PacketBurst (381,561 samples, 0.04%)</title><rect x="370.7" y="517" width="0.3" height="15.0" fill="rgb(208,15,3)" rx="2" ry="2" />
+<text  x="373.73" y="527.5" ></text>
+</g>
+<g >
+<title>double* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, double*&gt; (1,019,777 samples, 0.11%)</title><rect x="412.1" y="469" width="0.9" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="415.13" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::UlInfoListElement_s, std::allocator&lt;ns3::UlInfoListElement_s&gt; &gt;::vector (366,390 samples, 0.04%)</title><rect x="133.5" y="501" width="0.3" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="136.54" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Callback&lt;void, ns3::SpectrumValue const&amp;&gt;::Callback&lt;void  (282,374 samples, 0.03%)</title><rect x="468.4" y="437" width="0.2" height="15.0" fill="rgb(231,122,29)" rx="2" ry="2" />
+<text  x="471.39" y="447.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::allocate (380,371 samples, 0.04%)</title><rect x="363.3" y="421" width="0.3" height="15.0" fill="rgb(238,153,36)" rx="2" ry="2" />
+<text  x="366.34" y="431.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;unsigned char*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;unsigned char*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt; (125,103 samples, 0.01%)</title><rect x="585.5" y="197" width="0.1" height="15.0" fill="rgb(243,176,42)" rx="2" ry="2" />
+<text  x="588.46" y="207.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned int, ns3::RxSpectrumModelInfo, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::RxSpectrumModelInfo&gt; &gt; &gt;::end (128,149 samples, 0.01%)</title><rect x="657.9" y="517" width="0.1" height="15.0" fill="rgb(219,64,15)" rx="2" ry="2" />
+<text  x="660.95" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Function_base::_Base_manager&lt;void  (823,342 samples, 0.08%)</title><rect x="580.2" y="373" width="0.6" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="583.16" y="383.5" ></text>
+</g>
+<g >
+<title>pow (356,086 samples, 0.04%)</title><rect x="486.2" y="517" width="0.3" height="15.0" fill="rgb(254,226,54)" rx="2" ry="2" />
+<text  x="489.19" y="527.5" ></text>
+</g>
+<g >
+<title>decltype  (688,656 samples, 0.07%)</title><rect x="503.4" y="437" width="0.6" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="506.44" y="447.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt;::push_back (445,330 samples, 0.05%)</title><rect x="623.6" y="533" width="0.3" height="15.0" fill="rgb(226,98,23)" rx="2" ry="2" />
+<text  x="626.58" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::EventImpl&gt;::Ptr (787,839 samples, 0.08%)</title><rect x="268.5" y="485" width="0.7" height="15.0" fill="rgb(239,157,37)" rx="2" ry="2" />
+<text  x="271.53" y="495.5" ></text>
+</g>
+<g >
+<title>bool __gnu_cxx::operator==&lt;ns3::HarqProcessInfoElement_t const*, std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; (159,664 samples, 0.02%)</title><rect x="488.9" y="517" width="0.1" height="15.0" fill="rgb(229,114,27)" rx="2" ry="2" />
+<text  x="491.92" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt;::_M_lower_bound (816,432 samples, 0.08%)</title><rect x="171.4" y="421" width="0.7" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="174.43" y="431.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::vector (533,840 samples, 0.06%)</title><rect x="159.1" y="405" width="0.5" height="15.0" fill="rgb(206,9,2)" rx="2" ry="2" />
+<text  x="162.14" y="415.5" ></text>
+</g>
+<g >
+<title>std::remove_reference&lt;double&amp;&gt;::type&amp;&amp; std::move&lt;double&amp;&gt; (160,528 samples, 0.02%)</title><rect x="602.8" y="309" width="0.2" height="15.0" fill="rgb(247,194,46)" rx="2" ry="2" />
+<text  x="605.83" y="319.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned int, std::allocator&lt;unsigned int&gt; &gt;::~_Vector_base (574,638 samples, 0.06%)</title><rect x="697.0" y="485" width="0.4" height="15.0" fill="rgb(214,41,9)" rx="2" ry="2" />
+<text  x="699.96" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultDeleter&lt;ns3::SpectrumValue&gt;::Delete (190,332 samples, 0.02%)</title><rect x="674.2" y="485" width="0.1" height="15.0" fill="rgb(222,79,19)" rx="2" ry="2" />
+<text  x="677.16" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;bool, std::allocator&lt;bool&gt; &gt;::operator[] (162,486 samples, 0.02%)</title><rect x="195.7" y="469" width="0.1" height="15.0" fill="rgb(223,82,19)" rx="2" ry="2" />
+<text  x="198.70" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::GetSize (1,573,815 samples, 0.16%)</title><rect x="627.7" y="533" width="1.2" height="15.0" fill="rgb(229,113,27)" rx="2" ry="2" />
+<text  x="630.67" y="543.5" ></text>
+</g>
+<g >
+<title>void std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::_M_construct_node&lt;std::piecewise_construct_t const&amp;, std::tuple&lt;unsigned short const&amp;&gt;, std::tuple&lt;&gt; &gt; (803,124 samples, 0.08%)</title><rect x="242.8" y="421" width="0.6" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="245.77" y="431.5" ></text>
+</g>
+<g >
+<title>double* std::__uninitialized_default_n_a&lt;double*, unsigned long, double&gt; (1,391,465 samples, 0.14%)</title><rect x="403.4" y="453" width="1.1" height="15.0" fill="rgb(248,199,47)" rx="2" ry="2" />
+<text  x="406.39" y="463.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::deallocate (164,554 samples, 0.02%)</title><rect x="777.0" y="341" width="0.1" height="15.0" fill="rgb(226,99,23)" rx="2" ry="2" />
+<text  x="779.97" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy*&amp; std::forward&lt;ns3::LteEnbPhy*&amp;&gt; (184,660 samples, 0.02%)</title><rect x="49.0" y="581" width="0.2" height="15.0" fill="rgb(238,152,36)" rx="2" ry="2" />
+<text  x="52.01" y="591.5" ></text>
+</g>
+<g >
+<title>ns3::MakeEvent&lt;void  (682,798 samples, 0.07%)</title><rect x="53.3" y="517" width="0.6" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="56.32" y="527.5" ></text>
+</g>
+<g >
+<title>void  (163,364 samples, 0.02%)</title><rect x="423.3" y="389" width="0.1" height="15.0" fill="rgb(253,221,53)" rx="2" ry="2" />
+<text  x="426.31" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::Object::Object (314,930 samples, 0.03%)</title><rect x="627.2" y="485" width="0.2" height="15.0" fill="rgb(242,174,41)" rx="2" ry="2" />
+<text  x="630.18" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::_M_get_Node_allocator (152,998 samples, 0.02%)</title><rect x="193.2" y="405" width="0.1" height="15.0" fill="rgb(252,220,52)" rx="2" ry="2" />
+<text  x="196.21" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::HarqProcessInfoElement_t* std::__copy_move_a1&lt;false, ns3::HarqProcessInfoElement_t const*, ns3::HarqProcessInfoElement_t*&gt; (437,467 samples, 0.05%)</title><rect x="513.1" y="453" width="0.4" height="15.0" fill="rgb(229,112,26)" rx="2" ry="2" />
+<text  x="516.12" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::NetDevice&gt;::Ptr (273,026 samples, 0.03%)</title><rect x="313.1" y="485" width="0.2" height="15.0" fill="rgb(226,98,23)" rx="2" ry="2" />
+<text  x="316.10" y="495.5" ></text>
+</g>
+<g >
+<title>void std::destroy_at&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; (1,143,303 samples, 0.12%)</title><rect x="652.8" y="309" width="0.9" height="15.0" fill="rgb(224,88,21)" rx="2" ry="2" />
+<text  x="655.77" y="319.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::splice (371,326 samples, 0.04%)</title><rect x="734.0" y="453" width="0.3" height="15.0" fill="rgb(220,70,16)" rx="2" ry="2" />
+<text  x="737.04" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt;::~vector (154,796 samples, 0.02%)</title><rect x="131.1" y="373" width="0.1" height="15.0" fill="rgb(234,134,32)" rx="2" ry="2" />
+<text  x="134.12" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::LteInterference::ConditionallyEvaluateChunk (447,530 samples, 0.05%)</title><rect x="607.3" y="533" width="0.3" height="15.0" fill="rgb(243,177,42)" rx="2" ry="2" />
+<text  x="610.25" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter&gt;::~SimpleRefCount (225,570 samples, 0.02%)</title><rect x="454.0" y="197" width="0.2" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="457.05" y="207.5" ></text>
+</g>
+<g >
+<title>ns3::RlcTag::GetTypeId (274,825 samples, 0.03%)</title><rect x="427.2" y="229" width="0.2" height="15.0" fill="rgb(252,216,51)" rx="2" ry="2" />
+<text  x="430.21" y="239.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::SpectrumValue, ns3::Empty, ns3::DefaultDeleter&lt;ns3::SpectrumValue&gt; &gt;::SimpleRefCount (199,860 samples, 0.02%)</title><rect x="411.9" y="501" width="0.2" height="15.0" fill="rgb(254,229,54)" rx="2" ry="2" />
+<text  x="414.89" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;* std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_create_node&lt;std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (1,347,530 samples, 0.14%)</title><rect x="334.2" y="373" width="1.1" height="15.0" fill="rgb(217,56,13)" rx="2" ry="2" />
+<text  x="337.21" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::HigherLayerSelected_s* std::__do_uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::HigherLayerSelected_s const*, std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt; &gt;, ns3::HigherLayerSelected_s*&gt; (151,182 samples, 0.02%)</title><rect x="92.3" y="293" width="0.1" height="15.0" fill="rgb(244,179,43)" rx="2" ry="2" />
+<text  x="95.31" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteControlMessage&gt;&amp; std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::emplace_back&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; const&amp;&gt; (912,598 samples, 0.09%)</title><rect x="355.3" y="501" width="0.7" height="15.0" fill="rgb(224,89,21)" rx="2" ry="2" />
+<text  x="358.27" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt; &gt;::_M_lower_bound (188,402 samples, 0.02%)</title><rect x="114.5" y="437" width="0.2" height="15.0" fill="rgb(253,225,53)" rx="2" ry="2" />
+<text  x="117.51" y="447.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;bool, std::allocator&lt;bool&gt; &gt;::at (666,536 samples, 0.07%)</title><rect x="195.3" y="485" width="0.5" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="198.29" y="495.5" ></text>
+</g>
+<g >
+<title>bool __gnu_cxx::operator==&lt;ns3::BuildRarListElement_s const*, std::vector&lt;ns3::BuildRarListElement_s, std::allocator&lt;ns3::BuildRarListElement_s&gt; &gt; &gt; (158,059 samples, 0.02%)</title><rect x="143.2" y="373" width="0.1" height="15.0" fill="rgb(217,55,13)" rx="2" ry="2" />
+<text  x="146.16" y="383.5" ></text>
+</g>
+<g >
+<title>void std::_Construct&lt;ns3::HigherLayerSelected_s, ns3::HigherLayerSelected_s const&amp;&gt; (371,159 samples, 0.04%)</title><rect x="125.3" y="293" width="0.3" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="128.26" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::MemberLteFfrSapProvider&lt;ns3::LteFrNoOpAlgorithm&gt;::ReportUlCqiInfo (1,540,622 samples, 0.16%)</title><rect x="232.5" y="485" width="1.2" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="235.50" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt;::operator= (153,607 samples, 0.02%)</title><rect x="101.1" y="469" width="0.1" height="15.0" fill="rgb(231,123,29)" rx="2" ry="2" />
+<text  x="104.08" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_get_node (203,653 samples, 0.02%)</title><rect x="706.4" y="373" width="0.2" height="15.0" fill="rgb(221,75,17)" rx="2" ry="2" />
+<text  x="709.45" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;int, std::allocator&lt;int&gt; &gt;::_M_allocate (450,221 samples, 0.05%)</title><rect x="699.6" y="501" width="0.4" height="15.0" fill="rgb(216,52,12)" rx="2" ry="2" />
+<text  x="702.59" y="511.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt;::operator= (6,381,662 samples, 0.66%)</title><rect x="257.6" y="517" width="5.1" height="15.0" fill="rgb(231,123,29)" rx="2" ry="2" />
+<text  x="260.60" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::UeManager::DoInitialize (214,377 samples, 0.02%)</title><rect x="130.4" y="453" width="0.2" height="15.0" fill="rgb(227,103,24)" rx="2" ry="2" />
+<text  x="133.38" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned short const, ns3::SbMeasResult_s&gt; &gt;::operator* (303,780 samples, 0.03%)</title><rect x="183.2" y="485" width="0.2" height="15.0" fill="rgb(222,78,18)" rx="2" ry="2" />
+<text  x="186.21" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::FfMacSchedSapProvider::SchedUlTriggerReqParameters::SchedUlTriggerReqParameters (437,313 samples, 0.05%)</title><rect x="133.5" y="517" width="0.4" height="15.0" fill="rgb(228,106,25)" rx="2" ry="2" />
+<text  x="136.51" y="527.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;bool, std::allocator&lt;bool&gt; &gt;::_M_fill_insert (276,956 samples, 0.03%)</title><rect x="105.6" y="437" width="0.2" height="15.0" fill="rgb(229,112,26)" rx="2" ry="2" />
+<text  x="108.60" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt;::_S_key (486,894 samples, 0.05%)</title><rect x="168.5" y="405" width="0.4" height="15.0" fill="rgb(224,91,21)" rx="2" ry="2" />
+<text  x="171.53" y="415.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::AttributeConstructionList::Item, std::allocator&lt;ns3::AttributeConstructionList::Item&gt; &gt;::_List_base (187,407 samples, 0.02%)</title><rect x="447.9" y="245" width="0.2" height="15.0" fill="rgb(251,212,50)" rx="2" ry="2" />
+<text  x="450.94" y="255.5" ></text>
+</g>
+<g >
+<title>double* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, double*, double&gt; (500,128 samples, 0.05%)</title><rect x="606.5" y="469" width="0.4" height="15.0" fill="rgb(222,79,19)" rx="2" ry="2" />
+<text  x="609.49" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::LteUePhy::CreateTxPowerSpectralDensity (151,318 samples, 0.02%)</title><rect x="614.4" y="533" width="0.1" height="15.0" fill="rgb(241,169,40)" rx="2" ry="2" />
+<text  x="617.41" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumSignalParametersDlCtrlFrame::~LteSpectrumSignalParametersDlCtrlFrame (452,654 samples, 0.05%)</title><rect x="324.1" y="437" width="0.4" height="15.0" fill="rgb(220,69,16)" rx="2" ry="2" />
+<text  x="327.12" y="447.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::~list (309,041 samples, 0.03%)</title><rect x="775.6" y="389" width="0.3" height="15.0" fill="rgb(222,80,19)" rx="2" ry="2" />
+<text  x="778.63" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Bind_helper&lt;std::__or_&lt;std::is_integral&lt;std::decay&lt;void  (662,137 samples, 0.07%)</title><rect x="340.2" y="453" width="0.6" height="15.0" fill="rgb(237,148,35)" rx="2" ry="2" />
+<text  x="343.24" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt;, std::allocator&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt;::_M_valptr (160,795 samples, 0.02%)</title><rect x="184.2" y="469" width="0.1" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="187.16" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt;::erase (3,046,130 samples, 0.31%)</title><rect x="621.1" y="533" width="2.5" height="15.0" fill="rgb(213,39,9)" rx="2" ry="2" />
+<text  x="624.13" y="543.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::PhichListElement_s, std::allocator&lt;ns3::PhichListElement_s&gt; &gt;::~vector (308,027 samples, 0.03%)</title><rect x="229.3" y="453" width="0.2" height="15.0" fill="rgb(247,194,46)" rx="2" ry="2" />
+<text  x="232.30" y="463.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_List_base (164,136 samples, 0.02%)</title><rect x="343.7" y="469" width="0.2" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="346.73" y="479.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::AttributeConstructionList::Item, std::allocator&lt;ns3::AttributeConstructionList::Item&gt; &gt;::_List_impl::_List_impl (147,640 samples, 0.02%)</title><rect x="448.0" y="229" width="0.1" height="15.0" fill="rgb(210,27,6)" rx="2" ry="2" />
+<text  x="450.97" y="239.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt; &gt;::allocate (474,197 samples, 0.05%)</title><rect x="237.5" y="341" width="0.4" height="15.0" fill="rgb(218,61,14)" rx="2" ry="2" />
+<text  x="240.55" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::AntennaModel* ns3::PeekPointer&lt;ns3::AntennaModel&gt; (215,390 samples, 0.02%)</title><rect x="703.9" y="517" width="0.1" height="15.0" fill="rgb(245,186,44)" rx="2" ry="2" />
+<text  x="706.87" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;int, std::allocator&lt;int&gt; &gt;::_Vector_base (166,957 samples, 0.02%)</title><rect x="385.2" y="357" width="0.1" height="15.0" fill="rgb(215,47,11)" rx="2" ry="2" />
+<text  x="388.18" y="367.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::allocate (267,808 samples, 0.03%)</title><rect x="499.4" y="437" width="0.2" height="15.0" fill="rgb(230,118,28)" rx="2" ry="2" />
+<text  x="502.42" y="447.5" ></text>
+</g>
+<g >
+<title>void std::destroy_at&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; (210,243 samples, 0.02%)</title><rect x="576.4" y="309" width="0.2" height="15.0" fill="rgb(216,52,12)" rx="2" ry="2" />
+<text  x="579.43" y="319.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt;::_M_begin (165,524 samples, 0.02%)</title><rect x="432.1" y="293" width="0.1" height="15.0" fill="rgb(249,203,48)" rx="2" ry="2" />
+<text  x="435.11" y="303.5" ></text>
+</g>
+<g >
+<title>void std::destroy_at&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; (682,837 samples, 0.07%)</title><rect x="763.6" y="613" width="0.5" height="15.0" fill="rgb(228,106,25)" rx="2" ry="2" />
+<text  x="766.56" y="623.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_Vector_base (306,796 samples, 0.03%)</title><rect x="677.3" y="453" width="0.2" height="15.0" fill="rgb(237,150,35)" rx="2" ry="2" />
+<text  x="680.28" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::~vector (143,941 samples, 0.01%)</title><rect x="265.3" y="357" width="0.1" height="15.0" fill="rgb(243,174,41)" rx="2" ry="2" />
+<text  x="268.33" y="367.5" ></text>
+</g>
+<g >
+<title>std::function&lt;void  (32,042,329 samples, 3.30%)</title><rect x="579.6" y="405" width="25.8" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="582.59" y="415.5" >s..</text>
+</g>
+<g >
+<title>void std::_Function_base::_Base_manager&lt;std::_Bind&lt;void  (495,402 samples, 0.05%)</title><rect x="340.8" y="421" width="0.4" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="343.78" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::Packet::Copy (449,334 samples, 0.05%)</title><rect x="118.0" y="501" width="0.4" height="15.0" fill="rgb(250,211,50)" rx="2" ry="2" />
+<text  x="121.05" y="511.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, bool&gt;::operator= (194,342 samples, 0.02%)</title><rect x="275.8" y="485" width="0.2" height="15.0" fill="rgb(214,45,10)" rx="2" ry="2" />
+<text  x="278.84" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Function_base::_Base_manager&lt;ns3::Callback&lt;void, std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt;::Callback&lt;void  (334,381 samples, 0.03%)</title><rect x="516.0" y="485" width="0.2" height="15.0" fill="rgb(226,99,23)" rx="2" ry="2" />
+<text  x="518.95" y="495.5" ></text>
+</g>
+<g >
+<title>std::_List_node&lt;ns3::UlDciLteControlMessage&gt;::_M_valptr (143,958 samples, 0.01%)</title><rect x="287.3" y="453" width="0.1" height="15.0" fill="rgb(233,129,30)" rx="2" ry="2" />
+<text  x="290.30" y="463.5" ></text>
+</g>
+<g >
+<title>double* std::__uninitialized_default_n_1&lt;true&gt;::__uninit_default_n&lt;double*, unsigned long&gt; (1,142,786 samples, 0.12%)</title><rect x="403.6" y="421" width="0.9" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="406.56" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::MacCeValue_u::operator= (1,023,273 samples, 0.11%)</title><rect x="685.7" y="469" width="0.8" height="15.0" fill="rgb(222,81,19)" rx="2" ry="2" />
+<text  x="688.72" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Object::DoDelete (3,074,446 samples, 0.32%)</title><rect x="75.4" y="389" width="2.5" height="15.0" fill="rgb(212,34,8)" rx="2" ry="2" />
+<text  x="78.42" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;int, std::allocator&lt;int&gt; &gt;::_Vector_impl_data::_Vector_impl_data (124,596 samples, 0.01%)</title><rect x="594.9" y="213" width="0.1" height="15.0" fill="rgb(211,30,7)" rx="2" ry="2" />
+<text  x="597.90" y="223.5" ></text>
+</g>
+<g >
+<title>std::__allocated_ptr&lt;std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt; &gt;::operator= (187,028 samples, 0.02%)</title><rect x="22.8" y="293" width="0.1" height="15.0" fill="rgb(206,8,2)" rx="2" ry="2" />
+<text  x="25.75" y="303.5" ></text>
+</g>
+<g >
+<title>std::_Bit_iterator std::copy&lt;std::_Bit_const_iterator, std::_Bit_iterator&gt; (308,999 samples, 0.03%)</title><rect x="248.0" y="421" width="0.3" height="15.0" fill="rgb(210,26,6)" rx="2" ry="2" />
+<text  x="251.01" y="431.5" ></text>
+</g>
+<g >
+<title>operator delete (159,299 samples, 0.02%)</title><rect x="454.9" y="229" width="0.1" height="15.0" fill="rgb(247,196,46)" rx="2" ry="2" />
+<text  x="457.92" y="239.5" ></text>
+</g>
+<g >
+<title>ns3::EventImpl*&amp;&amp; std::forward&lt;ns3::EventImpl*&gt; (154,501 samples, 0.02%)</title><rect x="335.0" y="293" width="0.2" height="15.0" fill="rgb(208,15,3)" rx="2" ry="2" />
+<text  x="338.04" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::MacCeListElement_s::MacCeListElement_s (314,209 samples, 0.03%)</title><rect x="129.3" y="405" width="0.2" height="15.0" fill="rgb(223,85,20)" rx="2" ry="2" />
+<text  x="132.27" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::ByteTagIterator::Next (1,253,201 samples, 0.13%)</title><rect x="425.1" y="245" width="1.0" height="15.0" fill="rgb(217,57,13)" rx="2" ry="2" />
+<text  x="428.13" y="255.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::find (741,040 samples, 0.08%)</title><rect x="189.3" y="469" width="0.6" height="15.0" fill="rgb(205,3,0)" rx="2" ry="2" />
+<text  x="192.29" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::SpectrumValue (2,710,426 samples, 0.28%)</title><rect x="402.6" y="501" width="2.1" height="15.0" fill="rgb(211,27,6)" rx="2" ry="2" />
+<text  x="405.56" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::Packet, ns3::Empty, ns3::DefaultDeleter&lt;ns3::Packet&gt; &gt;::Unref (439,896 samples, 0.05%)</title><rect x="502.0" y="325" width="0.3" height="15.0" fill="rgb(215,47,11)" rx="2" ry="2" />
+<text  x="504.99" y="335.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;4ul, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::_Tuple_impl (185,055 samples, 0.02%)</title><rect x="341.0" y="309" width="0.2" height="15.0" fill="rgb(213,41,9)" rx="2" ry="2" />
+<text  x="344.03" y="319.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::operator[] (127,693 samples, 0.01%)</title><rect x="575.9" y="341" width="0.1" height="15.0" fill="rgb(230,116,27)" rx="2" ry="2" />
+<text  x="578.89" y="351.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;::_Rb_tree_iterator (701,037 samples, 0.07%)</title><rect x="760.8" y="677" width="0.6" height="15.0" fill="rgb(223,85,20)" rx="2" ry="2" />
+<text  x="763.82" y="687.5" ></text>
+</g>
+<g >
+<title>std::operator== (157,371 samples, 0.02%)</title><rect x="12.4" y="341" width="0.1" height="15.0" fill="rgb(229,110,26)" rx="2" ry="2" />
+<text  x="15.37" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::HarqStatus_e* std::__uninitialized_move_if_noexcept_a&lt;ns3::DlInfoListElement_s::HarqStatus_e*, ns3::DlInfoListElement_s::HarqStatus_e*, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt; (535,507 samples, 0.06%)</title><rect x="511.3" y="517" width="0.4" height="15.0" fill="rgb(226,100,23)" rx="2" ry="2" />
+<text  x="514.30" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;3ul, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::~_Tuple_impl (4,416,635 samples, 0.46%)</title><rect x="773.7" y="501" width="3.5" height="15.0" fill="rgb(254,225,53)" rx="2" ry="2" />
+<text  x="776.67" y="511.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt; &gt;::destroy&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; (682,837 samples, 0.07%)</title><rect x="763.6" y="629" width="0.5" height="15.0" fill="rgb(248,199,47)" rx="2" ry="2" />
+<text  x="766.56" y="639.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_M_erase (193,911 samples, 0.02%)</title><rect x="104.0" y="405" width="0.1" height="15.0" fill="rgb(219,64,15)" rx="2" ry="2" />
+<text  x="106.96" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_header::_M_reset (155,888 samples, 0.02%)</title><rect x="506.7" y="517" width="0.1" height="15.0" fill="rgb(238,151,36)" rx="2" ry="2" />
+<text  x="509.69" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_begin (350,813 samples, 0.04%)</title><rect x="273.4" y="437" width="0.3" height="15.0" fill="rgb(238,154,36)" rx="2" ry="2" />
+<text  x="276.40" y="447.5" ></text>
+</g>
+<g >
+<title>std::tuple&lt;ns3::LteEnbPhy*&gt;::tuple&lt;ns3::LteEnbPhy*&amp;, true, true&gt; (308,535 samples, 0.03%)</title><rect x="282.8" y="469" width="0.2" height="15.0" fill="rgb(215,48,11)" rx="2" ry="2" />
+<text  x="285.75" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Packet&gt;::Acquire (125,666 samples, 0.01%)</title><rect x="560.0" y="245" width="0.1" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="563.02" y="255.5" ></text>
+</g>
+<g >
+<title> (367,419 samples, 0.04%)</title><rect x="492.8" y="533" width="0.3" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="495.78" y="543.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::end (160,898 samples, 0.02%)</title><rect x="590.2" y="245" width="0.1" height="15.0" fill="rgb(214,44,10)" rx="2" ry="2" />
+<text  x="593.18" y="255.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::vector&lt;int, std::allocator&lt;int&gt; &gt;, std::allocator&lt;std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt; &gt;::at (596,297 samples, 0.06%)</title><rect x="700.9" y="549" width="0.5" height="15.0" fill="rgb(236,145,34)" rx="2" ry="2" />
+<text  x="703.94" y="559.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::allocate (185,306 samples, 0.02%)</title><rect x="661.1" y="341" width="0.1" height="15.0" fill="rgb(236,145,34)" rx="2" ry="2" />
+<text  x="664.08" y="351.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;* std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_create_node&lt;std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (1,753,857 samples, 0.18%)</title><rect x="270.1" y="421" width="1.4" height="15.0" fill="rgb(217,56,13)" rx="2" ry="2" />
+<text  x="273.14" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::MakeEvent&lt;void  (892,230,301 samples, 92.00%)</title><rect x="40.6" y="709" width="717.6" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="43.58" y="719.5" >ns3::MakeEvent&lt;void </text>
+</g>
+<g >
+<title>std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;* std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_create_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; const&amp;&gt; (1,255,265 samples, 0.13%)</title><rect x="499.1" y="485" width="1.0" height="15.0" fill="rgb(230,116,27)" rx="2" ry="2" />
+<text  x="502.11" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::ObjectDeleter::Delete (1,777,558 samples, 0.18%)</title><rect x="652.6" y="405" width="1.4" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="655.59" y="415.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;bool, std::allocator&lt;bool&gt; &gt;::_M_check_len (436,269 samples, 0.04%)</title><rect x="198.7" y="437" width="0.4" height="15.0" fill="rgb(226,100,23)" rx="2" ry="2" />
+<text  x="201.73" y="447.5" ></text>
+</g>
+<g >
+<title>malloc (487,893 samples, 0.05%)</title><rect x="407.7" y="357" width="0.4" height="15.0" fill="rgb(230,119,28)" rx="2" ry="2" />
+<text  x="410.68" y="367.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_List_impl::_List_impl (336,148 samples, 0.03%)</title><rect x="517.0" y="405" width="0.3" height="15.0" fill="rgb(244,183,43)" rx="2" ry="2" />
+<text  x="520.02" y="415.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned char, std::map&lt;unsigned char, ns3::LteMacSapProvider*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, std::map&lt;unsigned char, ns3::LteMacSapProvider*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt; &gt; &gt; &gt; &gt;::end (242,528 samples, 0.03%)</title><rect x="552.8" y="213" width="0.2" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="555.82" y="223.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt; &gt; &gt;::find (767,082 samples, 0.08%)</title><rect x="186.4" y="469" width="0.6" height="15.0" fill="rgb(222,81,19)" rx="2" ry="2" />
+<text  x="189.42" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbMac::DoSchedUlConfigInd (308,659 samples, 0.03%)</title><rect x="103.6" y="453" width="0.3" height="15.0" fill="rgb(246,188,45)" rx="2" ry="2" />
+<text  x="106.62" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::GetSize (264,448 samples, 0.03%)</title><rect x="684.7" y="501" width="0.2" height="15.0" fill="rgb(229,113,27)" rx="2" ry="2" />
+<text  x="687.68" y="511.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Callback&lt;void, ns3::Ptr&lt;ns3::MobilityModel const&gt;, ns3::Ptr&lt;ns3::MobilityModel const&gt;, double, double, double, double&gt;, std::allocator&lt;ns3::Callback&lt;void, ns3::Ptr&lt;ns3::MobilityModel const&gt;, ns3::Ptr&lt;ns3::MobilityModel const&gt;, double, double, double, double&gt; &gt; &gt;::begin (239,520 samples, 0.02%)</title><rect x="746.4" y="533" width="0.2" height="15.0" fill="rgb(238,153,36)" rx="2" ry="2" />
+<text  x="749.37" y="543.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Buffer::Data*, std::allocator&lt;ns3::Buffer::Data*&gt; &gt;::back (335,354 samples, 0.03%)</title><rect x="556.0" y="181" width="0.2" height="15.0" fill="rgb(242,172,41)" rx="2" ry="2" />
+<text  x="558.96" y="191.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumModel const&gt;::~Ptr (199,027 samples, 0.02%)</title><rect x="773.0" y="437" width="0.1" height="15.0" fill="rgb(218,61,14)" rx="2" ry="2" />
+<text  x="775.97" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Object::DoDelete (4,924,388 samples, 0.51%)</title><rect x="451.1" y="261" width="4.0" height="15.0" fill="rgb(212,34,8)" rx="2" ry="2" />
+<text  x="454.12" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::HarqStatus_e* std::__uninitialized_copy_a&lt;std::move_iterator&lt;ns3::DlInfoListElement_s::HarqStatus_e*&gt;, ns3::DlInfoListElement_s::HarqStatus_e*, ns3::DlInfoListElement_s::HarqStatus_e&gt; (347,263 samples, 0.04%)</title><rect x="511.3" y="501" width="0.3" height="15.0" fill="rgb(254,228,54)" rx="2" ry="2" />
+<text  x="514.33" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::HarqStatus_e* std::__uninitialized_copy&lt;true&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::DlInfoListElement_s::HarqStatus_e const*, std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt; &gt;, ns3::DlInfoListElement_s::HarqStatus_e*&gt; (683,830 samples, 0.07%)</title><rect x="444.1" y="277" width="0.6" height="15.0" fill="rgb(241,165,39)" rx="2" ry="2" />
+<text  x="447.11" y="287.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_Rb_tree (459,078 samples, 0.05%)</title><rect x="104.5" y="453" width="0.3" height="15.0" fill="rgb(223,86,20)" rx="2" ry="2" />
+<text  x="107.45" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::LogComponent::IsEnabled (288,439 samples, 0.03%)</title><rect x="548.4" y="85" width="0.2" height="15.0" fill="rgb(214,43,10)" rx="2" ry="2" />
+<text  x="551.35" y="95.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteSpectrumSignalParametersDlCtrlFrame&gt; ns3::DynamicCast&lt;ns3::LteSpectrumSignalParametersDlCtrlFrame, ns3::SpectrumSignalParameters&gt; (649,747 samples, 0.07%)</title><rect x="735.6" y="533" width="0.6" height="15.0" fill="rgb(240,161,38)" rx="2" ry="2" />
+<text  x="738.65" y="543.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;bool, std::allocator&lt;bool&gt; &gt;::resize (2,656,618 samples, 0.27%)</title><rect x="246.8" y="485" width="2.2" height="15.0" fill="rgb(219,68,16)" rx="2" ry="2" />
+<text  x="249.83" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::_M_check_len (294,493 samples, 0.03%)</title><rect x="590.6" y="229" width="0.3" height="15.0" fill="rgb(229,114,27)" rx="2" ry="2" />
+<text  x="593.61" y="239.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::_M_destroy_node (419,586 samples, 0.04%)</title><rect x="193.2" y="421" width="0.4" height="15.0" fill="rgb(209,19,4)" rx="2" ry="2" />
+<text  x="196.21" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Any_data::_M_access (156,527 samples, 0.02%)</title><rect x="283.9" y="437" width="0.1" height="15.0" fill="rgb(219,68,16)" rx="2" ry="2" />
+<text  x="286.90" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_Vector_impl::_Vector_impl (221,723 samples, 0.02%)</title><rect x="239.8" y="261" width="0.2" height="15.0" fill="rgb(208,15,3)" rx="2" ry="2" />
+<text  x="242.80" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::HigherLayerSelected_s* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::HigherLayerSelected_s const*, std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt; &gt;, ns3::HigherLayerSelected_s*&gt; (324,739 samples, 0.03%)</title><rect x="593.3" y="229" width="0.3" height="15.0" fill="rgb(230,118,28)" rx="2" ry="2" />
+<text  x="596.31" y="239.5" ></text>
+</g>
+<g >
+<title>void std::__relocate_object_a&lt;ns3::HigherLayerSelected_s, ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt; (878,397 samples, 0.09%)</title><rect x="595.5" y="213" width="0.7" height="15.0" fill="rgb(208,17,4)" rx="2" ry="2" />
+<text  x="598.52" y="223.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_List_impl::_List_impl (210,164 samples, 0.02%)</title><rect x="610.4" y="517" width="0.2" height="15.0" fill="rgb(244,183,43)" rx="2" ry="2" />
+<text  x="613.39" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Bvector_base&lt;std::allocator&lt;bool&gt; &gt;::_Bvector_impl_data::_M_reset (230,239 samples, 0.02%)</title><rect x="195.8" y="453" width="0.2" height="15.0" fill="rgb(233,129,31)" rx="2" ry="2" />
+<text  x="198.83" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_M_deallocate (276,642 samples, 0.03%)</title><rect x="233.3" y="293" width="0.2" height="15.0" fill="rgb(240,162,38)" rx="2" ry="2" />
+<text  x="236.27" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::LteInterference::StartRx (5,493,483 samples, 0.57%)</title><rect x="715.9" y="517" width="4.4" height="15.0" fill="rgb(213,37,9)" rx="2" ry="2" />
+<text  x="718.88" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Function_handler&lt;void  (16,143,749 samples, 1.66%)</title><rect x="470.8" y="389" width="13.0" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="473.80" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::Object::~Object (187,951 samples, 0.02%)</title><rect x="653.7" y="341" width="0.2" height="15.0" fill="rgb(229,110,26)" rx="2" ry="2" />
+<text  x="656.72" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::EnbMacMemberFfMacSchedSapUser::SchedUlConfigInd (577,569 samples, 0.06%)</title><rect x="103.4" y="469" width="0.5" height="15.0" fill="rgb(231,121,29)" rx="2" ry="2" />
+<text  x="106.41" y="479.5" ></text>
+</g>
+<g >
+<title>std::tuple&lt;ns3::MultiModelSpectrumChannel*, ns3::Ptr&lt;ns3::SpectrumValue&gt;, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::tuple (411,266 samples, 0.04%)</title><rect x="87.6" y="405" width="0.4" height="15.0" fill="rgb(232,125,30)" rx="2" ry="2" />
+<text  x="90.62" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::TagBuffer::WriteU8 (158,006 samples, 0.02%)</title><rect x="554.7" y="213" width="0.1" height="15.0" fill="rgb(219,64,15)" rx="2" ry="2" />
+<text  x="557.69" y="223.5" ></text>
+</g>
+<g >
+<title>ns3::RlcTag::RlcTag (398,815 samples, 0.04%)</title><rect x="427.6" y="261" width="0.3" height="15.0" fill="rgb(228,109,26)" rx="2" ry="2" />
+<text  x="430.59" y="271.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::operator= (476,320 samples, 0.05%)</title><rect x="483.3" y="309" width="0.4" height="15.0" fill="rgb(243,175,42)" rx="2" ry="2" />
+<text  x="486.27" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::operator[] (159,219 samples, 0.02%)</title><rect x="601.6" y="325" width="0.1" height="15.0" fill="rgb(248,202,48)" rx="2" ry="2" />
+<text  x="604.56" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::HarqStatus_e* std::__copy_move_a1&lt;true, ns3::DlInfoListElement_s::HarqStatus_e*, ns3::DlInfoListElement_s::HarqStatus_e*&gt; (155,079 samples, 0.02%)</title><rect x="511.4" y="421" width="0.1" height="15.0" fill="rgb(221,74,17)" rx="2" ry="2" />
+<text  x="514.40" y="431.5" ></text>
+</g>
+<g >
+<title>[libm.so.6] (156,224 samples, 0.02%)</title><rect x="681.5" y="501" width="0.2" height="15.0" fill="rgb(208,16,4)" rx="2" ry="2" />
+<text  x="684.55" y="511.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_List_impl::_List_impl (241,099 samples, 0.02%)</title><rect x="497.8" y="517" width="0.2" height="15.0" fill="rgb(244,183,43)" rx="2" ry="2" />
+<text  x="500.82" y="527.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;*, std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; std::__copy_move_a&lt;true, __gnu_cxx::__normal_iterator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;*, std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;*, std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; (536,978 samples, 0.06%)</title><rect x="119.7" y="469" width="0.5" height="15.0" fill="rgb(233,131,31)" rx="2" ry="2" />
+<text  x="122.74" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::EventImpl, ns3::Empty, ns3::DefaultDeleter&lt;ns3::EventImpl&gt; &gt;::Unref (977,824 samples, 0.10%)</title><rect x="640.2" y="501" width="0.7" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="643.15" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::IidManager::GetAttributeN (954,513 samples, 0.10%)</title><rect x="541.0" y="245" width="0.8" height="15.0" fill="rgb(232,125,30)" rx="2" ry="2" />
+<text  x="544.03" y="255.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; &gt; &gt;::_M_valptr (275,542 samples, 0.03%)</title><rect x="455.9" y="245" width="0.2" height="15.0" fill="rgb(219,68,16)" rx="2" ry="2" />
+<text  x="458.92" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt;* std::__copy_move_a1&lt;true, ns3::Ptr&lt;ns3::PacketBurst&gt;*, ns3::Ptr&lt;ns3::PacketBurst&gt;*&gt; (497,602 samples, 0.05%)</title><rect x="119.8" y="453" width="0.4" height="15.0" fill="rgb(219,68,16)" rx="2" ry="2" />
+<text  x="122.77" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::LteRadioBearerTag::LteRadioBearerTag (284,170 samples, 0.03%)</title><rect x="561.0" y="197" width="0.2" height="15.0" fill="rgb(220,71,17)" rx="2" ry="2" />
+<text  x="564.01" y="207.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::GetTypeId (206,883 samples, 0.02%)</title><rect x="543.6" y="293" width="0.2" height="15.0" fill="rgb(216,54,13)" rx="2" ry="2" />
+<text  x="546.61" y="303.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;::push_back (3,021,585 samples, 0.31%)</title><rect x="722.8" y="517" width="2.4" height="15.0" fill="rgb(250,209,50)" rx="2" ry="2" />
+<text  x="725.81" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::Time::ToInteger (261,832 samples, 0.03%)</title><rect x="493.7" y="533" width="0.2" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="496.69" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::SpectrumValue (1,206,985 samples, 0.12%)</title><rect x="729.4" y="469" width="0.9" height="15.0" fill="rgb(211,27,6)" rx="2" ry="2" />
+<text  x="732.37" y="479.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;unsigned short&gt;::allocate (337,690 samples, 0.03%)</title><rect x="520.2" y="245" width="0.2" height="15.0" fill="rgb(214,44,10)" rx="2" ry="2" />
+<text  x="523.16" y="255.5" ></text>
+</g>
+<g >
+<title>void std::destroy_at&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; (142,224 samples, 0.01%)</title><rect x="634.7" y="293" width="0.1" height="15.0" fill="rgb(224,88,21)" rx="2" ry="2" />
+<text  x="637.73" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::Angles::CheckIfValid (194,633 samples, 0.02%)</title><rect x="311.0" y="453" width="0.2" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="314.04" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::PfFfMacScheduler::RefreshUlCqiMaps (631,523 samples, 0.07%)</title><rect x="233.7" y="485" width="0.6" height="15.0" fill="rgb(220,70,16)" rx="2" ry="2" />
+<text  x="236.74" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::_M_get_Tp_allocator (239,915 samples, 0.02%)</title><rect x="480.2" y="261" width="0.2" height="15.0" fill="rgb(208,16,4)" rx="2" ry="2" />
+<text  x="483.24" y="271.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::_Vector_impl_data::_Vector_impl_data (204,699 samples, 0.02%)</title><rect x="478.0" y="229" width="0.2" height="15.0" fill="rgb(215,48,11)" rx="2" ry="2" />
+<text  x="481.02" y="239.5" ></text>
+</g>
+<g >
+<title>ns3::Callback&lt;void, unsigned short, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;::operator (1,399,576 samples, 0.14%)</title><rect x="725.5" y="517" width="1.2" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="728.53" y="527.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::_M_insert&lt;ns3::Ptr&lt;ns3::Packet&gt; const&amp;&gt; (645,709 samples, 0.07%)</title><rect x="68.8" y="421" width="0.5" height="15.0" fill="rgb(234,135,32)" rx="2" ry="2" />
+<text  x="71.83" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::AddPacket (307,397 samples, 0.03%)</title><rect x="118.4" y="501" width="0.3" height="15.0" fill="rgb(207,10,2)" rx="2" ry="2" />
+<text  x="121.41" y="511.5" ></text>
+</g>
+<g >
+<title>operator new[] (234,036 samples, 0.02%)</title><rect x="33.1" y="341" width="0.1" height="15.0" fill="rgb(227,103,24)" rx="2" ry="2" />
+<text  x="36.06" y="351.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::HigherLayerSelected_s*, std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt; &gt; std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;ns3::HigherLayerSelected_s const*, std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;ns3::HigherLayerSelected_s*, std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt; &gt; &gt; (337,592 samples, 0.03%)</title><rect x="585.7" y="213" width="0.3" height="15.0" fill="rgb(228,109,26)" rx="2" ry="2" />
+<text  x="588.68" y="223.5" ></text>
+</g>
+<g >
+<title>std::_Function_base::_Base_manager&lt;std::_Bind&lt;void  (151,215 samples, 0.02%)</title><rect x="640.8" y="373" width="0.1" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="643.82" y="383.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::operator= (865,226 samples, 0.09%)</title><rect x="730.5" y="469" width="0.7" height="15.0" fill="rgb(243,175,42)" rx="2" ry="2" />
+<text  x="733.54" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt; &gt; &gt;::_M_erase (330,114 samples, 0.03%)</title><rect x="110.5" y="501" width="0.2" height="15.0" fill="rgb(228,109,26)" rx="2" ry="2" />
+<text  x="113.47" y="511.5" ></text>
+</g>
+<g >
+<title>double* std::__uninitialized_default_n&lt;double*, unsigned long&gt; (355,888 samples, 0.04%)</title><rect x="57.0" y="421" width="0.3" height="15.0" fill="rgb(231,123,29)" rx="2" ry="2" />
+<text  x="60.04" y="431.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, unsigned char, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, unsigned char&gt; &gt; &gt;::find (1,128,415 samples, 0.12%)</title><rect x="135.9" y="485" width="0.9" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="138.87" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_get_node (153,956 samples, 0.02%)</title><rect x="658.6" y="437" width="0.1" height="15.0" fill="rgb(251,215,51)" rx="2" ry="2" />
+<text  x="661.57" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt;::_M_allocate (160,120 samples, 0.02%)</title><rect x="443.1" y="261" width="0.1" height="15.0" fill="rgb(247,197,47)" rx="2" ry="2" />
+<text  x="446.10" y="271.5" ></text>
+</g>
+<g >
+<title>std::less&lt;unsigned char&gt;::operator (167,620 samples, 0.02%)</title><rect x="568.5" y="245" width="0.1" height="15.0" fill="rgb(250,210,50)" rx="2" ry="2" />
+<text  x="571.46" y="255.5" ></text>
+</g>
+<g >
+<title> (199,807 samples, 0.02%)</title><rect x="322.9" y="485" width="0.2" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="325.91" y="495.5" ></text>
+</g>
+<g >
+<title>std::this_thread::get_id (811,600 samples, 0.08%)</title><rect x="279.7" y="501" width="0.7" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="282.72" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::PacketTagList::~PacketTagList (284,832 samples, 0.03%)</title><rect x="548.8" y="117" width="0.3" height="15.0" fill="rgb(223,87,20)" rx="2" ry="2" />
+<text  x="551.84" y="127.5" ></text>
+</g>
+<g >
+<title>std::_Bind&lt;void  (1,517,738 samples, 0.16%)</title><rect x="281.8" y="485" width="1.2" height="15.0" fill="rgb(253,221,52)" rx="2" ry="2" />
+<text  x="284.78" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumPhy::StartTxDataFrame (46,273,897 samples, 4.77%)</title><rect x="636.6" y="549" width="37.2" height="15.0" fill="rgb(242,171,40)" rx="2" ry="2" />
+<text  x="639.57" y="559.5" >ns3..</text>
+</g>
+<g >
+<title>ns3::LteSpectrumPhy::StartRxDlCtrl (11,425,137 samples, 1.18%)</title><rect x="725.2" y="533" width="9.2" height="15.0" fill="rgb(215,48,11)" rx="2" ry="2" />
+<text  x="728.24" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::MemberLteFfrSapProvider&lt;ns3::LteFrNoOpAlgorithm&gt;::GetAvailableDlRbg (918,216 samples, 0.09%)</title><rect x="175.5" y="485" width="0.7" height="15.0" fill="rgb(217,56,13)" rx="2" ry="2" />
+<text  x="178.48" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::MacCeListElement_s::MacCeListElement_s (1,971,723 samples, 0.20%)</title><rect x="686.7" y="501" width="1.5" height="15.0" fill="rgb(223,85,20)" rx="2" ry="2" />
+<text  x="689.66" y="511.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_List_base (195,602 samples, 0.02%)</title><rect x="721.4" y="485" width="0.1" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="724.37" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::CqiListElement_s, std::allocator&lt;ns3::CqiListElement_s&gt; &gt;::max_size (266,439 samples, 0.03%)</title><rect x="127.9" y="469" width="0.2" height="15.0" fill="rgb(211,29,6)" rx="2" ry="2" />
+<text  x="130.86" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; const&amp; std::forward&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; const&amp;&gt; (158,064 samples, 0.02%)</title><rect x="354.3" y="501" width="0.1" height="15.0" fill="rgb(252,216,51)" rx="2" ry="2" />
+<text  x="357.30" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Object::~Object (194,631 samples, 0.02%)</title><rect x="120.0" y="309" width="0.2" height="15.0" fill="rgb(229,110,26)" rx="2" ry="2" />
+<text  x="123.02" y="319.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;signed char const*, std::vector&lt;signed char, std::allocator&lt;signed char&gt; &gt; &gt;::difference_type __gnu_cxx::operator-&lt;signed char const*, std::vector&lt;signed char, std::allocator&lt;signed char&gt; &gt; &gt; (153,078 samples, 0.02%)</title><rect x="532.3" y="325" width="0.1" height="15.0" fill="rgb(213,37,8)" rx="2" ry="2" />
+<text  x="535.28" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy::GeneratePowerAllocationMap (4,944,219 samples, 0.51%)</title><rect x="292.4" y="549" width="4.0" height="15.0" fill="rgb(247,197,47)" rx="2" ry="2" />
+<text  x="295.43" y="559.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;::push_back (875,814 samples, 0.09%)</title><rect x="382.7" y="533" width="0.7" height="15.0" fill="rgb(211,29,7)" rx="2" ry="2" />
+<text  x="385.68" y="543.5" ></text>
+</g>
+<g >
+<title>std::__fill_a1 (312,132 samples, 0.03%)</title><rect x="200.7" y="405" width="0.2" height="15.0" fill="rgb(209,19,4)" rx="2" ry="2" />
+<text  x="203.66" y="415.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;bool, std::allocator&lt;bool&gt; &gt;::cbegin (159,970 samples, 0.02%)</title><rect x="200.9" y="453" width="0.1" height="15.0" fill="rgb(241,166,39)" rx="2" ry="2" />
+<text  x="203.91" y="463.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;int const, double&gt; &gt; &gt; &gt;::construct&lt;std::pair&lt;int const, double&gt;, std::pair&lt;int const, double&gt; const&amp;&gt; (164,321 samples, 0.02%)</title><rect x="59.7" y="373" width="0.1" height="15.0" fill="rgb(229,110,26)" rx="2" ry="2" />
+<text  x="62.71" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumPhy*&amp; std::forward&lt;ns3::LteSpectrumPhy*&amp;&gt; (158,008 samples, 0.02%)</title><rect x="306.5" y="405" width="0.1" height="15.0" fill="rgb(222,78,18)" rx="2" ry="2" />
+<text  x="309.51" y="415.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_clear (414,587 samples, 0.04%)</title><rect x="576.3" y="341" width="0.3" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="579.26" y="351.5" ></text>
+</g>
+<g >
+<title>[libc.so.6] (158,177 samples, 0.02%)</title><rect x="460.7" y="133" width="0.1" height="15.0" fill="rgb(223,84,20)" rx="2" ry="2" />
+<text  x="463.72" y="143.5" ></text>
+</g>
+<g >
+<title>ns3::IidManager::GetAttributeN (771,224 samples, 0.08%)</title><rect x="373.1" y="453" width="0.6" height="15.0" fill="rgb(232,125,30)" rx="2" ry="2" />
+<text  x="376.09" y="463.5" ></text>
+</g>
+<g >
+<title>void std::_Function_base::_Base_manager&lt;std::_Bind&lt;void  (151,076 samples, 0.02%)</title><rect x="109.9" y="453" width="0.1" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="112.87" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::LteUePhy*&amp; std::__get_helper&lt;0ul, ns3::LteUePhy*, unsigned int, unsigned int&gt; (184,584 samples, 0.02%)</title><rect x="753.8" y="581" width="0.2" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="756.82" y="591.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;* std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::_M_create_node&lt;std::piecewise_construct_t const&amp;, std::tuple&lt;unsigned short const&amp;&gt;, std::tuple&lt;&gt; &gt; (1,505,468 samples, 0.16%)</title><rect x="190.8" y="437" width="1.2" height="15.0" fill="rgb(231,123,29)" rx="2" ry="2" />
+<text  x="193.82" y="447.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::at (320,661 samples, 0.03%)</title><rect x="589.2" y="245" width="0.2" height="15.0" fill="rgb(247,196,47)" rx="2" ry="2" />
+<text  x="592.16" y="255.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Ptr&lt;ns3::Object&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Object&gt; &gt; &gt;::clear (202,759 samples, 0.02%)</title><rect x="77.3" y="325" width="0.1" height="15.0" fill="rgb(241,167,40)" rx="2" ry="2" />
+<text  x="80.27" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::Object::~Object (611,395 samples, 0.06%)</title><rect x="635.0" y="325" width="0.5" height="15.0" fill="rgb(229,110,26)" rx="2" ry="2" />
+<text  x="638.01" y="335.5" ></text>
+</g>
+<g >
+<title>[libm.so.6] (230,207 samples, 0.02%)</title><rect x="702.7" y="501" width="0.2" height="15.0" fill="rgb(208,16,4)" rx="2" ry="2" />
+<text  x="705.73" y="511.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::begin (158,175 samples, 0.02%)</title><rect x="648.1" y="405" width="0.2" height="15.0" fill="rgb(206,6,1)" rx="2" ry="2" />
+<text  x="651.14" y="415.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt;::construct&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, ns3::Ptr&lt;ns3::LteControlMessage&gt; const&amp;&gt; (153,618 samples, 0.02%)</title><rect x="689.5" y="405" width="0.1" height="15.0" fill="rgb(231,120,28)" rx="2" ry="2" />
+<text  x="692.48" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter&gt;::~SimpleRefCount (245,743 samples, 0.03%)</title><rect x="77.0" y="325" width="0.2" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="80.04" y="335.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt;::_M_allocate (201,689 samples, 0.02%)</title><rect x="584.0" y="213" width="0.1" height="15.0" fill="rgb(247,197,47)" rx="2" ry="2" />
+<text  x="586.96" y="223.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt;::at (497,296 samples, 0.05%)</title><rect x="156.4" y="421" width="0.4" height="15.0" fill="rgb(246,188,45)" rx="2" ry="2" />
+<text  x="159.38" y="431.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::operator= (149,250 samples, 0.02%)</title><rect x="114.3" y="437" width="0.1" height="15.0" fill="rgb(251,215,51)" rx="2" ry="2" />
+<text  x="117.30" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::EnbMacMemberLteEnbPhySapUser::ReceivePhyPdu (14,054,177 samples, 1.45%)</title><rect x="423.6" y="357" width="11.3" height="15.0" fill="rgb(227,103,24)" rx="2" ry="2" />
+<text  x="426.61" y="367.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt;::_M_addr (270,625 samples, 0.03%)</title><rect x="369.4" y="469" width="0.2" height="15.0" fill="rgb(219,68,16)" rx="2" ry="2" />
+<text  x="372.41" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::SpectrumValue (323,152 samples, 0.03%)</title><rect x="414.3" y="517" width="0.3" height="15.0" fill="rgb(211,27,6)" rx="2" ry="2" />
+<text  x="417.31" y="527.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::AttributeConstructionList::Item, std::allocator&lt;ns3::AttributeConstructionList::Item&gt; &gt;::_List_impl::_List_impl (461,286 samples, 0.05%)</title><rect x="371.6" y="453" width="0.4" height="15.0" fill="rgb(210,27,6)" rx="2" ry="2" />
+<text  x="374.60" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Bind&lt;void  (151,076 samples, 0.02%)</title><rect x="109.9" y="437" width="0.1" height="15.0" fill="rgb(253,221,52)" rx="2" ry="2" />
+<text  x="112.87" y="447.5" ></text>
+</g>
+<g >
+<title>std::operator+ (162,486 samples, 0.02%)</title><rect x="195.7" y="437" width="0.1" height="15.0" fill="rgb(239,157,37)" rx="2" ry="2" />
+<text  x="198.70" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_Rb_tree (158,119 samples, 0.02%)</title><rect x="340.6" y="277" width="0.2" height="15.0" fill="rgb(252,219,52)" rx="2" ry="2" />
+<text  x="343.65" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::PacketBurst (1,087,646 samples, 0.11%)</title><rect x="629.0" y="517" width="0.9" height="15.0" fill="rgb(208,15,3)" rx="2" ry="2" />
+<text  x="632.00" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::operator&lt; (412,114 samples, 0.04%)</title><rect x="664.0" y="373" width="0.3" height="15.0" fill="rgb(234,137,32)" rx="2" ry="2" />
+<text  x="667.01" y="383.5" ></text>
+</g>
+<g >
+<title>unsigned int* std::__uninitialized_fill_n&lt;true&gt;::__uninit_fill_n&lt;unsigned int*, unsigned long, unsigned int&gt; (908,274 samples, 0.09%)</title><rect x="695.7" y="437" width="0.7" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="698.71" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst const&gt;::Ptr&lt;ns3::PacketBurst&gt; (233,298 samples, 0.02%)</title><rect x="670.7" y="533" width="0.2" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="673.74" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::MacCeListElement_s* std::__uninitialized_copy&lt;false&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::MacCeListElement_s*, std::vector&lt;ns3::MacCeListElement_s, std::allocator&lt;ns3::MacCeListElement_s&gt; &gt; &gt;, ns3::MacCeListElement_s*&gt; (921,768 samples, 0.10%)</title><rect x="128.8" y="453" width="0.7" height="15.0" fill="rgb(222,81,19)" rx="2" ry="2" />
+<text  x="131.78" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::vector (485,304 samples, 0.05%)</title><rect x="439.4" y="421" width="0.4" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="442.45" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Bind_helper&lt;std::__or_&lt;std::is_integral&lt;std::decay&lt;void  (266,478 samples, 0.03%)</title><rect x="53.3" y="501" width="0.2" height="15.0" fill="rgb(237,148,35)" rx="2" ry="2" />
+<text  x="56.32" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt;, std::allocator&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt; &gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt;, std::allocator&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt;, std::allocator&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt;::_S_key (686,320 samples, 0.07%)</title><rect x="188.3" y="437" width="0.5" height="15.0" fill="rgb(208,17,4)" rx="2" ry="2" />
+<text  x="191.26" y="447.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;int&gt;::allocate (152,677 samples, 0.02%)</title><rect x="397.5" y="469" width="0.1" height="15.0" fill="rgb(212,34,8)" rx="2" ry="2" />
+<text  x="400.46" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;* std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_copy&lt;false, std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_Alloc_node&gt; (155,456 samples, 0.02%)</title><rect x="341.2" y="421" width="0.2" height="15.0" fill="rgb(251,212,50)" rx="2" ry="2" />
+<text  x="344.24" y="431.5" ></text>
+</g>
+<g >
+<title>std::_List_node&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt;::_M_valptr (361,692 samples, 0.04%)</title><rect x="496.0" y="533" width="0.3" height="15.0" fill="rgb(215,46,11)" rx="2" ry="2" />
+<text  x="498.99" y="543.5" ></text>
+</g>
+<g >
+<title>decltype  (194,571 samples, 0.02%)</title><rect x="461.6" y="277" width="0.1" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="464.55" y="287.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteUeMac::LcInfo&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteUeMac::LcInfo&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteUeMac::LcInfo&gt; &gt; &gt;::find (1,135,998 samples, 0.12%)</title><rect x="437.6" y="309" width="0.9" height="15.0" fill="rgb(216,54,13)" rx="2" ry="2" />
+<text  x="440.60" y="319.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; &gt; &gt;::_M_mbegin (309,940 samples, 0.03%)</title><rect x="523.0" y="293" width="0.3" height="15.0" fill="rgb(230,118,28)" rx="2" ry="2" />
+<text  x="526.00" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::Singleton&lt;ns3::IidManager&gt;::Get (195,646 samples, 0.02%)</title><rect x="541.8" y="245" width="0.2" height="15.0" fill="rgb(222,79,19)" rx="2" ry="2" />
+<text  x="544.83" y="255.5" ></text>
+</g>
+<g >
+<title>void std::destroy_at&lt;ns3::CqiListElement_s&gt; (933,761 samples, 0.10%)</title><rect x="255.0" y="405" width="0.7" height="15.0" fill="rgb(208,15,3)" rx="2" ry="2" />
+<text  x="257.97" y="415.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::__uninitialized_fill_n_a&lt;unsigned char*, unsigned long, unsigned char, unsigned char&gt; (492,278 samples, 0.05%)</title><rect x="215.9" y="453" width="0.4" height="15.0" fill="rgb(245,186,44)" rx="2" ry="2" />
+<text  x="218.88" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt; &gt;::_M_valptr (433,705 samples, 0.04%)</title><rect x="183.6" y="469" width="0.3" height="15.0" fill="rgb(236,142,34)" rx="2" ry="2" />
+<text  x="186.57" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Object::SetTypeId (871,023 samples, 0.09%)</title><rect x="542.9" y="293" width="0.7" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="545.91" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::PacketMetadata::~PacketMetadata (1,016,942 samples, 0.10%)</title><rect x="548.0" y="117" width="0.8" height="15.0" fill="rgb(217,56,13)" rx="2" ry="2" />
+<text  x="551.02" y="127.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt;::_M_addr (218,793 samples, 0.02%)</title><rect x="137.3" y="389" width="0.2" height="15.0" fill="rgb(210,24,5)" rx="2" ry="2" />
+<text  x="140.30" y="399.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::Ptr&lt;ns3::Object&gt;*&gt; (283,533 samples, 0.03%)</title><rect x="550.2" y="181" width="0.2" height="15.0" fill="rgb(248,201,48)" rx="2" ry="2" />
+<text  x="553.19" y="191.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_M_allocate (198,702 samples, 0.02%)</title><rect x="413.2" y="453" width="0.2" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="416.20" y="463.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::~_List_base (241,713 samples, 0.02%)</title><rect x="550.8" y="213" width="0.1" height="15.0" fill="rgb(236,146,35)" rx="2" ry="2" />
+<text  x="553.75" y="223.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::MacCeListElement_s, std::allocator&lt;ns3::MacCeListElement_s&gt; &gt;::max_size (163,785 samples, 0.02%)</title><rect x="130.1" y="469" width="0.1" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="133.12" y="479.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; std::__miter_base&lt;__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; (194,496 samples, 0.02%)</title><rect x="238.5" y="213" width="0.2" height="15.0" fill="rgb(238,151,36)" rx="2" ry="2" />
+<text  x="241.50" y="223.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteSpectrumSignalParametersDlCtrlFrame&gt;::Ptr (189,795 samples, 0.02%)</title><rect x="343.9" y="501" width="0.1" height="15.0" fill="rgb(232,126,30)" rx="2" ry="2" />
+<text  x="346.86" y="511.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;::operator= (148,381 samples, 0.02%)</title><rect x="117.1" y="405" width="0.1" height="15.0" fill="rgb(253,222,53)" rx="2" ry="2" />
+<text  x="120.11" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::_Auto_node::_Auto_node&lt;std::piecewise_construct_t const&amp;, std::tuple&lt;unsigned short const&amp;&gt;, std::tuple&lt;&gt; &gt; (151,184 samples, 0.02%)</title><rect x="105.1" y="437" width="0.1" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="108.07" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Function_handler&lt;void  (1,235,121 samples, 0.13%)</title><rect x="725.6" y="469" width="1.0" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="728.60" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Bind&lt;void  (613,231 samples, 0.06%)</title><rect x="708.3" y="469" width="0.5" height="15.0" fill="rgb(253,221,52)" rx="2" ry="2" />
+<text  x="711.30" y="479.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;int&gt; &gt;::allocate (169,207 samples, 0.02%)</title><rect x="574.6" y="293" width="0.1" height="15.0" fill="rgb(248,200,47)" rx="2" ry="2" />
+<text  x="577.55" y="303.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::_List_impl::_List_impl (394,429 samples, 0.04%)</title><rect x="366.6" y="453" width="0.3" height="15.0" fill="rgb(210,24,5)" rx="2" ry="2" />
+<text  x="369.55" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Object::SetTypeId (654,252 samples, 0.07%)</title><rect x="163.1" y="421" width="0.5" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="166.06" y="431.5" ></text>
+</g>
+<g >
+<title>std::map&lt;ns3::TbId_t, ns3::tbInfo_t, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::find (1,512,230 samples, 0.16%)</title><rect x="528.9" y="341" width="1.2" height="15.0" fill="rgb(224,87,20)" rx="2" ry="2" />
+<text  x="531.89" y="351.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt; &gt;::find (1,760,133 samples, 0.18%)</title><rect x="649.9" y="485" width="1.4" height="15.0" fill="rgb(233,130,31)" rx="2" ry="2" />
+<text  x="652.88" y="495.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt;::destroy&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; (152,858 samples, 0.02%)</title><rect x="654.3" y="389" width="0.1" height="15.0" fill="rgb(230,118,28)" rx="2" ry="2" />
+<text  x="657.32" y="399.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::list (3,992,341 samples, 0.41%)</title><rect x="497.7" y="549" width="3.2" height="15.0" fill="rgb(236,145,34)" rx="2" ry="2" />
+<text  x="500.68" y="559.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, unsigned char*&gt; (592,631 samples, 0.06%)</title><rect x="126.9" y="357" width="0.4" height="15.0" fill="rgb(227,104,25)" rx="2" ry="2" />
+<text  x="129.85" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::SbMeasResult_s::operator= (850,226 samples, 0.09%)</title><rect x="134.5" y="485" width="0.7" height="15.0" fill="rgb(205,4,1)" rx="2" ry="2" />
+<text  x="137.49" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::DlHarqFeedbackLteControlMessage::DlHarqFeedbackLteControlMessage (507,137 samples, 0.05%)</title><rect x="420.8" y="341" width="0.4" height="15.0" fill="rgb(237,148,35)" rx="2" ry="2" />
+<text  x="423.77" y="351.5" ></text>
+</g>
+<g >
+<title>[libc.so.6] (159,006 samples, 0.02%)</title><rect x="211.0" y="357" width="0.1" height="15.0" fill="rgb(223,84,20)" rx="2" ry="2" />
+<text  x="213.95" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::SpectrumValue (1,462,868 samples, 0.15%)</title><rect x="324.7" y="485" width="1.2" height="15.0" fill="rgb(211,27,6)" rx="2" ry="2" />
+<text  x="327.70" y="495.5" ></text>
+</g>
+<g >
+<title>std::_List_const_iterator&lt;ns3::Callback&lt;void, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt; &gt; &gt;::_List_const_iterator (197,677 samples, 0.02%)</title><rect x="328.2" y="469" width="0.1" height="15.0" fill="rgb(237,151,36)" rx="2" ry="2" />
+<text  x="331.15" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::~SpectrumValue (190,332 samples, 0.02%)</title><rect x="674.2" y="469" width="0.1" height="15.0" fill="rgb(247,193,46)" rx="2" ry="2" />
+<text  x="677.16" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;::_M_valptr (199,039 samples, 0.02%)</title><rect x="272.9" y="453" width="0.2" height="15.0" fill="rgb(213,38,9)" rx="2" ry="2" />
+<text  x="275.92" y="463.5" ></text>
+</g>
+<g >
+<title>int* std::__copy_move_a1&lt;false, int const*, int*&gt; (162,673 samples, 0.02%)</title><rect x="531.3" y="293" width="0.1" height="15.0" fill="rgb(230,117,28)" rx="2" ry="2" />
+<text  x="534.29" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Packet&gt;::Ptr (124,350 samples, 0.01%)</title><rect x="69.3" y="453" width="0.1" height="15.0" fill="rgb(230,117,28)" rx="2" ry="2" />
+<text  x="72.35" y="463.5" ></text>
+</g>
+<g >
+<title>std::_List_const_iterator&lt;ns3::Callback&lt;void, ns3::Ptr&lt;ns3::Packet const&gt; &gt; &gt;::_List_const_iterator (161,515 samples, 0.02%)</title><rect x="494.4" y="517" width="0.2" height="15.0" fill="rgb(251,216,51)" rx="2" ry="2" />
+<text  x="497.44" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;int, std::allocator&lt;int&gt; &gt;::_Vector_base (198,351 samples, 0.02%)</title><rect x="679.1" y="485" width="0.2" height="15.0" fill="rgb(215,47,11)" rx="2" ry="2" />
+<text  x="682.10" y="495.5" ></text>
+</g>
+<g >
+<title>void std::_Construct&lt;ns3::DlInfoListElement_s, ns3::DlInfoListElement_s const&amp;&gt; (411,592 samples, 0.04%)</title><rect x="107.3" y="405" width="0.3" height="15.0" fill="rgb(212,32,7)" rx="2" ry="2" />
+<text  x="110.29" y="415.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt; &gt; &gt;::cbegin (266,872 samples, 0.03%)</title><rect x="292.1" y="517" width="0.2" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="295.06" y="527.5" ></text>
+</g>
+<g >
+<title>double const* std::__niter_base&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; (274,054 samples, 0.03%)</title><rect x="647.3" y="373" width="0.3" height="15.0" fill="rgb(213,38,9)" rx="2" ry="2" />
+<text  x="650.34" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::PacketBurst (146,079 samples, 0.02%)</title><rect x="96.7" y="421" width="0.2" height="15.0" fill="rgb(208,15,3)" rx="2" ry="2" />
+<text  x="99.74" y="431.5" ></text>
+</g>
+<g >
+<title>std::_List_const_iterator&lt;ns3::Callback&lt;void, unsigned short, unsigned char, unsigned int&gt; &gt;::_List_const_iterator (240,206 samples, 0.02%)</title><rect x="156.1" y="357" width="0.2" height="15.0" fill="rgb(237,151,36)" rx="2" ry="2" />
+<text  x="159.12" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::LteUePhy::ReportRsReceivedPower (3,913,990 samples, 0.40%)</title><rect x="601.9" y="341" width="3.2" height="15.0" fill="rgb(231,122,29)" rx="2" ry="2" />
+<text  x="604.95" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::UlDciLteControlMessage&gt; ns3::Create&lt;ns3::UlDciLteControlMessage&gt; (305,849 samples, 0.03%)</title><rect x="230.9" y="453" width="0.3" height="15.0" fill="rgb(223,85,20)" rx="2" ry="2" />
+<text  x="233.91" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::vector (2,378,553 samples, 0.25%)</title><rect x="519.6" y="341" width="1.9" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="522.57" y="351.5" ></text>
+</g>
+<g >
+<title>unsigned short* std::copy&lt;std::move_iterator&lt;unsigned short*&gt;, unsigned short*&gt; (154,651 samples, 0.02%)</title><rect x="106.3" y="373" width="0.1" height="15.0" fill="rgb(234,136,32)" rx="2" ry="2" />
+<text  x="109.25" y="383.5" ></text>
+</g>
+<g >
+<title>std::_List_node&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt;::_M_valptr (444,952 samples, 0.05%)</title><rect x="544.9" y="213" width="0.3" height="15.0" fill="rgb(215,46,11)" rx="2" ry="2" />
+<text  x="547.85" y="223.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::CqiListElement_s, std::allocator&lt;ns3::CqiListElement_s&gt; &gt;::vector (187,210 samples, 0.02%)</title><rect x="130.6" y="501" width="0.2" height="15.0" fill="rgb(235,140,33)" rx="2" ry="2" />
+<text  x="133.64" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::_Vector_base (159,388 samples, 0.02%)</title><rect x="147.5" y="421" width="0.1" height="15.0" fill="rgb(219,65,15)" rx="2" ry="2" />
+<text  x="150.50" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::MobilityModel::GetPosition (542,316 samples, 0.06%)</title><rect x="319.6" y="501" width="0.4" height="15.0" fill="rgb(217,59,14)" rx="2" ry="2" />
+<text  x="322.57" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Packet&gt;::~Ptr (2,803,402 samples, 0.29%)</title><rect x="451.6" y="165" width="2.3" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="454.64" y="175.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::AttributeConstructionList::Item, std::allocator&lt;ns3::AttributeConstructionList::Item&gt; &gt;::~list (194,036 samples, 0.02%)</title><rect x="372.1" y="485" width="0.1" height="15.0" fill="rgb(238,154,37)" rx="2" ry="2" />
+<text  x="375.07" y="495.5" ></text>
+</g>
+<g >
+<title>bool ns3::operator==&lt;ns3::SpectrumModel const, ns3::SpectrumModel const&gt; (290,035 samples, 0.03%)</title><rect x="416.3" y="517" width="0.3" height="15.0" fill="rgb(221,73,17)" rx="2" ry="2" />
+<text  x="419.32" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt; ns3::Create&lt;ns3::PacketBurst&gt; (409,956 samples, 0.04%)</title><rect x="118.7" y="501" width="0.3" height="15.0" fill="rgb(225,93,22)" rx="2" ry="2" />
+<text  x="121.69" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::PfFfMacScheduler::HarqProcessAvailability (1,102,343 samples, 0.11%)</title><rect x="176.6" y="485" width="0.9" height="15.0" fill="rgb(207,11,2)" rx="2" ry="2" />
+<text  x="179.56" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Head_base&lt;2ul, double, false&gt;::_M_head (124,767 samples, 0.01%)</title><rect x="756.8" y="549" width="0.1" height="15.0" fill="rgb(205,1,0)" rx="2" ry="2" />
+<text  x="759.83" y="559.5" ></text>
+</g>
+<g >
+<title>double const&amp; std::max&lt;double&gt; (155,216 samples, 0.02%)</title><rect x="739.5" y="517" width="0.1" height="15.0" fill="rgb(209,21,5)" rx="2" ry="2" />
+<text  x="742.45" y="527.5" ></text>
+</g>
+<g >
+<title>void std::_Construct&lt;double&gt; (403,637 samples, 0.04%)</title><rect x="404.2" y="405" width="0.3" height="15.0" fill="rgb(228,106,25)" rx="2" ry="2" />
+<text  x="407.15" y="415.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt;::allocate (185,442 samples, 0.02%)</title><rect x="318.9" y="309" width="0.2" height="15.0" fill="rgb(243,178,42)" rx="2" ry="2" />
+<text  x="321.91" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy::StartSubFrame (4,972,136 samples, 0.51%)</title><rect x="11.4" y="581" width="4.0" height="15.0" fill="rgb(234,136,32)" rx="2" ry="2" />
+<text  x="14.43" y="591.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_lower_bound (193,630 samples, 0.02%)</title><rect x="659.7" y="469" width="0.2" height="15.0" fill="rgb(210,23,5)" rx="2" ry="2" />
+<text  x="662.71" y="479.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::DlInfoListElement_s*, ns3::DlInfoListElement_s&gt; (1,227,211 samples, 0.13%)</title><rect x="256.0" y="485" width="0.9" height="15.0" fill="rgb(217,55,13)" rx="2" ry="2" />
+<text  x="258.95" y="495.5" ></text>
+</g>
+<g >
+<title>double* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, double*&gt; (1,091,128 samples, 0.11%)</title><rect x="238.1" y="261" width="0.9" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="241.15" y="271.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::Ptr&lt;ns3::UeManager&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::Ptr&lt;ns3::UeManager&gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::Ptr&lt;ns3::UeManager&gt; &gt; &gt; &gt;::find (186,495 samples, 0.02%)</title><rect x="18.5" y="309" width="0.2" height="15.0" fill="rgb(248,199,47)" rx="2" ry="2" />
+<text  x="21.52" y="319.5" ></text>
+</g>
+<g >
+<title>std::operator== (203,617 samples, 0.02%)</title><rect x="466.5" y="501" width="0.2" height="15.0" fill="rgb(229,110,26)" rx="2" ry="2" />
+<text  x="469.54" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::DlDciListElement_s::~DlDciListElement_s (529,836 samples, 0.05%)</title><rect x="521.5" y="357" width="0.4" height="15.0" fill="rgb(219,64,15)" rx="2" ry="2" />
+<text  x="524.49" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::Callback&lt;void, std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt;::DoPeekImpl (126,102 samples, 0.01%)</title><rect x="515.7" y="533" width="0.1" height="15.0" fill="rgb(221,77,18)" rx="2" ry="2" />
+<text  x="518.73" y="543.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_clear (221,766 samples, 0.02%)</title><rect x="324.3" y="389" width="0.2" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="327.31" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumPhy::StartRxUlSrs (233,781 samples, 0.02%)</title><rect x="734.4" y="533" width="0.2" height="15.0" fill="rgb(206,6,1)" rx="2" ry="2" />
+<text  x="737.43" y="543.5" ></text>
+</g>
+<g >
+<title>std::operator== (148,898 samples, 0.02%)</title><rect x="296.0" y="501" width="0.2" height="15.0" fill="rgb(229,110,26)" rx="2" ry="2" />
+<text  x="299.04" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Bind_helper&lt;std::__or_&lt;std::is_integral&lt;std::decay&lt;void  (1,903,866 samples, 0.20%)</title><rect x="281.6" y="501" width="1.5" height="15.0" fill="rgb(237,148,35)" rx="2" ry="2" />
+<text  x="284.60" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, unsigned int&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt; &gt;::_M_begin (156,571 samples, 0.02%)</title><rect x="137.0" y="453" width="0.1" height="15.0" fill="rgb(243,178,42)" rx="2" ry="2" />
+<text  x="139.99" y="463.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;::_M_put_node (278,972 samples, 0.03%)</title><rect x="291.0" y="357" width="0.2" height="15.0" fill="rgb(230,118,28)" rx="2" ry="2" />
+<text  x="293.95" y="367.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;::~_List_base (1,543,193 samples, 0.16%)</title><rect x="392.6" y="533" width="1.2" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="395.58" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::Callback&lt;void, ns3::SpectrumValue const&amp;&gt;::Callback&lt;void  (167,033 samples, 0.02%)</title><rect x="577.9" y="437" width="0.1" height="15.0" fill="rgb(231,122,29)" rx="2" ry="2" />
+<text  x="580.85" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; &gt;::_M_valptr (404,825 samples, 0.04%)</title><rect x="523.6" y="277" width="0.3" height="15.0" fill="rgb(213,39,9)" rx="2" ry="2" />
+<text  x="526.62" y="287.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::allocate (163,549 samples, 0.02%)</title><rect x="706.5" y="341" width="0.1" height="15.0" fill="rgb(236,145,34)" rx="2" ry="2" />
+<text  x="709.48" y="351.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;ns3::TbId_t, ns3::tbInfo_t&gt;::pair&lt;ns3::TbId_t&amp;, ns3::tbInfo_t&amp;&gt; (126,859 samples, 0.01%)</title><rect x="530.1" y="341" width="0.1" height="15.0" fill="rgb(249,202,48)" rx="2" ry="2" />
+<text  x="533.10" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::ObjectDeleter::Delete (667,572 samples, 0.07%)</title><rect x="612.8" y="517" width="0.5" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="615.81" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_M_erase (702,211 samples, 0.07%)</title><rect x="394.2" y="485" width="0.5" height="15.0" fill="rgb(227,102,24)" rx="2" ry="2" />
+<text  x="397.16" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::ObjectDeleter::Delete (1,796,083 samples, 0.19%)</title><rect x="501.5" y="453" width="1.4" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="504.48" y="463.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::AttributeConstructionList::Item, std::allocator&lt;ns3::AttributeConstructionList::Item&gt; &gt;::~list (290,552 samples, 0.03%)</title><rect x="540.1" y="277" width="0.2" height="15.0" fill="rgb(238,154,37)" rx="2" ry="2" />
+<text  x="543.09" y="287.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt; &gt;::_M_mbegin (127,985 samples, 0.01%)</title><rect x="565.7" y="181" width="0.1" height="15.0" fill="rgb(250,209,50)" rx="2" ry="2" />
+<text  x="568.68" y="191.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultDeleter&lt;ns3::SpectrumValue&gt;::Delete (236,969 samples, 0.02%)</title><rect x="728.9" y="469" width="0.1" height="15.0" fill="rgb(222,79,19)" rx="2" ry="2" />
+<text  x="731.86" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;ns3::DlInfoListElement_s const*, std::vector&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt; &gt;, ns3::DlInfoListElement_s*, ns3::DlInfoListElement_s&gt; (451,449 samples, 0.05%)</title><rect x="107.3" y="469" width="0.3" height="15.0" fill="rgb(238,151,36)" rx="2" ry="2" />
+<text  x="110.26" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Packet&gt; const&amp; std::forward&lt;ns3::Ptr&lt;ns3::Packet&gt; const&amp;&gt; (156,451 samples, 0.02%)</title><rect x="362.4" y="469" width="0.1" height="15.0" fill="rgb(205,2,0)" rx="2" ry="2" />
+<text  x="365.40" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt; &gt;::begin (164,101 samples, 0.02%)</title><rect x="508.4" y="533" width="0.2" height="15.0" fill="rgb(216,50,12)" rx="2" ry="2" />
+<text  x="511.43" y="543.5" ></text>
+</g>
+<g >
+<title>operator new (143,903 samples, 0.01%)</title><rect x="164.0" y="437" width="0.1" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="166.96" y="447.5" ></text>
+</g>
+<g >
+<title>unsigned short* std::__uninitialized_fill_n_a&lt;unsigned short*, unsigned long, unsigned short, unsigned short&gt; (897,210 samples, 0.09%)</title><rect x="252.0" y="453" width="0.7" height="15.0" fill="rgb(222,82,19)" rx="2" ry="2" />
+<text  x="255.02" y="463.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;unsigned short&gt; &gt;::construct&lt;unsigned short, unsigned short const&amp;&gt; (146,680 samples, 0.02%)</title><rect x="251.8" y="437" width="0.1" height="15.0" fill="rgb(243,177,42)" rx="2" ry="2" />
+<text  x="254.81" y="447.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;*, std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt; &gt; std::__copy_move_a&lt;true, __gnu_cxx::__normal_iterator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;*, std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;*, std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt; &gt; &gt; (226,371 samples, 0.02%)</title><rect x="117.8" y="469" width="0.1" height="15.0" fill="rgb(226,96,23)" rx="2" ry="2" />
+<text  x="120.75" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::DlInfoListElement_s const*, std::vector&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt; &gt;, ns3::DlInfoListElement_s*&gt; (4,951,937 samples, 0.51%)</title><rect x="257.9" y="469" width="4.0" height="15.0" fill="rgb(254,227,54)" rx="2" ry="2" />
+<text  x="260.94" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt;::_M_create_storage (308,409 samples, 0.03%)</title><rect x="144.4" y="421" width="0.3" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="147.41" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::TypeId::TypeId (431,756 samples, 0.04%)</title><rect x="364.9" y="453" width="0.4" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="367.91" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_get_insert_unique_pos (157,629 samples, 0.02%)</title><rect x="332.5" y="437" width="0.1" height="15.0" fill="rgb(214,41,10)" rx="2" ry="2" />
+<text  x="335.49" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteSpectrumSignalParametersDlCtrlFrame&gt; ns3::Create&lt;ns3::LteSpectrumSignalParametersDlCtrlFrame, ns3::LteSpectrumSignalParametersDlCtrlFrame const&amp;&gt; (7,022,110 samples, 0.72%)</title><rect x="313.9" y="485" width="5.6" height="15.0" fill="rgb(242,171,41)" rx="2" ry="2" />
+<text  x="316.89" y="495.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, unsigned int, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt; &gt;::clear (355,870 samples, 0.04%)</title><rect x="172.2" y="453" width="0.3" height="15.0" fill="rgb(230,115,27)" rx="2" ry="2" />
+<text  x="175.25" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;int const, double&gt; &gt;::_M_valptr (124,708 samples, 0.01%)</title><rect x="59.9" y="421" width="0.1" height="15.0" fill="rgb(252,219,52)" rx="2" ry="2" />
+<text  x="62.88" y="431.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::BuildRarListElement_s, std::allocator&lt;ns3::BuildRarListElement_s&gt; &gt;::empty (194,427 samples, 0.02%)</title><rect x="173.1" y="453" width="0.1" height="15.0" fill="rgb(220,69,16)" rx="2" ry="2" />
+<text  x="176.09" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::MacCeListElement_s* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::MacCeListElement_s*, std::vector&lt;ns3::MacCeListElement_s, std::allocator&lt;ns3::MacCeListElement_s&gt; &gt; &gt;, ns3::MacCeListElement_s*&gt; (957,513 samples, 0.10%)</title><rect x="128.8" y="469" width="0.7" height="15.0" fill="rgb(251,215,51)" rx="2" ry="2" />
+<text  x="131.75" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy::SetDownlinkSubChannels (1,402,168 samples, 0.14%)</title><rect x="111.4" y="517" width="1.1" height="15.0" fill="rgb(207,12,2)" rx="2" ry="2" />
+<text  x="114.35" y="527.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::erase[abi:cxx11] (940,554 samples, 0.10%)</title><rect x="222.3" y="485" width="0.8" height="15.0" fill="rgb(231,123,29)" rx="2" ry="2" />
+<text  x="225.32" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::FfMacSchedSapProvider::SchedUlCqiInfoReqParameters::SchedUlCqiInfoReqParameters (3,384,993 samples, 0.35%)</title><rect x="474.2" y="325" width="2.8" height="15.0" fill="rgb(233,131,31)" rx="2" ry="2" />
+<text  x="477.23" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt;::Ptr (143,275 samples, 0.01%)</title><rect x="636.5" y="469" width="0.1" height="15.0" fill="rgb(219,67,16)" rx="2" ry="2" />
+<text  x="639.46" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::IidManager::LookupInformation (331,597 samples, 0.03%)</title><rect x="373.3" y="437" width="0.2" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="376.28" y="447.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt; &gt;::construct&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (426,539 samples, 0.04%)</title><rect x="335.0" y="341" width="0.3" height="15.0" fill="rgb(231,122,29)" rx="2" ry="2" />
+<text  x="337.95" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::LteChunkProcessor::End (37,821,975 samples, 3.90%)</title><rect x="576.8" y="533" width="30.5" height="15.0" fill="rgb(223,83,19)" rx="2" ry="2" />
+<text  x="579.83" y="543.5" >ns..</text>
+</g>
+<g >
+<title>ns3::MacCeListElement_s* std::uninitialized_copy&lt;std::move_iterator&lt;ns3::MacCeListElement_s*&gt;, ns3::MacCeListElement_s*&gt; (350,102 samples, 0.04%)</title><rect x="129.6" y="453" width="0.3" height="15.0" fill="rgb(244,183,43)" rx="2" ry="2" />
+<text  x="132.59" y="463.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt; &gt;::_M_addr (233,529 samples, 0.02%)</title><rect x="170.4" y="357" width="0.2" height="15.0" fill="rgb(218,61,14)" rx="2" ry="2" />
+<text  x="173.40" y="367.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;1ul, ns3::Ptr&lt;ns3::PacketBurst&gt; &gt;::~_Tuple_impl (307,442 samples, 0.03%)</title><rect x="281.3" y="453" width="0.3" height="15.0" fill="rgb(208,17,4)" rx="2" ry="2" />
+<text  x="284.35" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;0ul, ns3::MultiModelSpectrumChannel*, ns3::Ptr&lt;ns3::SpectrumValue&gt;, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::_Tuple_impl (589,946 samples, 0.06%)</title><rect x="667.5" y="389" width="0.5" height="15.0" fill="rgb(229,111,26)" rx="2" ry="2" />
+<text  x="670.48" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::LteRlcSm::DoNotifyTxOpportunity (17,080,246 samples, 1.76%)</title><rect x="19.6" y="437" width="13.7" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="22.60" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt;::_Vector_impl::_Vector_impl (231,916 samples, 0.02%)</title><rect x="229.0" y="421" width="0.2" height="15.0" fill="rgb(237,150,35)" rx="2" ry="2" />
+<text  x="232.05" y="431.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt;::_M_ptr (444,952 samples, 0.05%)</title><rect x="544.9" y="197" width="0.3" height="15.0" fill="rgb(215,48,11)" rx="2" ry="2" />
+<text  x="547.85" y="207.5" ></text>
+</g>
+<g >
+<title>ns3::TagBuffer::WriteU32 (388,268 samples, 0.04%)</title><rect x="13.3" y="373" width="0.3" height="15.0" fill="rgb(228,107,25)" rx="2" ry="2" />
+<text  x="16.26" y="383.5" ></text>
+</g>
+<g >
+<title>std::_List_node&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt;* std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::_M_create_node&lt;ns3::Ptr&lt;ns3::Packet&gt; const&amp;&gt; (1,438,749 samples, 0.15%)</title><rect x="22.3" y="309" width="1.2" height="15.0" fill="rgb(211,30,7)" rx="2" ry="2" />
+<text  x="25.31" y="319.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::end (192,716 samples, 0.02%)</title><rect x="498.2" y="533" width="0.2" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="501.20" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::ByteTagList::~ByteTagList (1,622,543 samples, 0.17%)</title><rect x="546.7" y="117" width="1.3" height="15.0" fill="rgb(206,5,1)" rx="2" ry="2" />
+<text  x="549.72" y="127.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_insert_node (362,836 samples, 0.04%)</title><rect x="83.5" y="389" width="0.3" height="15.0" fill="rgb(218,62,14)" rx="2" ry="2" />
+<text  x="86.54" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_rebalance_for_erase (2,258,588 samples, 0.23%)</title><rect x="765.0" y="661" width="1.9" height="15.0" fill="rgb(205,2,0)" rx="2" ry="2" />
+<text  x="768.04" y="671.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt;::vector (1,025,719 samples, 0.11%)</title><rect x="442.7" y="309" width="0.8" height="15.0" fill="rgb(248,198,47)" rx="2" ry="2" />
+<text  x="445.66" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::Buffer::Recycle (836,248 samples, 0.09%)</title><rect x="545.9" y="101" width="0.7" height="15.0" fill="rgb(250,207,49)" rx="2" ry="2" />
+<text  x="548.94" y="111.5" ></text>
+</g>
+<g >
+<title> (201,121 samples, 0.02%)</title><rect x="492.3" y="533" width="0.2" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="495.30" y="543.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::uninitialized_fill_n&lt;unsigned char*, unsigned long, unsigned char&gt; (189,712 samples, 0.02%)</title><rect x="102.0" y="421" width="0.1" height="15.0" fill="rgb(247,194,46)" rx="2" ry="2" />
+<text  x="104.98" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Head_base&lt;3ul, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, false&gt;::~_Head_base (3,402,650 samples, 0.35%)</title><rect x="773.7" y="485" width="2.7" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="776.67" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::UlInfoListElement_s* std::__do_uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::UlInfoListElement_s const*, std::vector&lt;ns3::UlInfoListElement_s, std::allocator&lt;ns3::UlInfoListElement_s&gt; &gt; &gt;, ns3::UlInfoListElement_s*&gt; (794,783 samples, 0.08%)</title><rect x="266.2" y="437" width="0.7" height="15.0" fill="rgb(218,62,14)" rx="2" ry="2" />
+<text  x="269.23" y="447.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;is_invocable_r_v&lt;void, ns3::Callback&lt;void, ns3::DlInfoListElement_s&gt;::Callback&lt;void  (3,763,206 samples, 0.39%)</title><rect x="418.4" y="485" width="3.0" height="15.0" fill="rgb(243,178,42)" rx="2" ry="2" />
+<text  x="421.37" y="495.5" ></text>
+</g>
+<g >
+<title>std::tuple_element&lt;0ul, std::pair&lt;unsigned int const&amp;, ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp;&gt; &gt;::type&amp;&amp; std::get&lt;0ul, unsigned int const&amp;, ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp;&gt; (189,759 samples, 0.02%)</title><rect x="660.0" y="501" width="0.1" height="15.0" fill="rgb(232,124,29)" rx="2" ry="2" />
+<text  x="662.96" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::LteNetDevice::GetNode (377,687 samples, 0.04%)</title><rect x="643.3" y="517" width="0.3" height="15.0" fill="rgb(229,112,26)" rx="2" ry="2" />
+<text  x="646.27" y="527.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::_List_impl::_List_impl (126,871 samples, 0.01%)</title><rect x="538.9" y="261" width="0.1" height="15.0" fill="rgb(210,24,5)" rx="2" ry="2" />
+<text  x="541.85" y="271.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::~_List_base (466,245 samples, 0.05%)</title><rect x="776.0" y="373" width="0.4" height="15.0" fill="rgb(221,74,17)" rx="2" ry="2" />
+<text  x="779.03" y="383.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_M_range_check (144,021 samples, 0.01%)</title><rect x="181.0" y="453" width="0.2" height="15.0" fill="rgb(239,159,38)" rx="2" ry="2" />
+<text  x="184.05" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_M_put_node (203,534 samples, 0.02%)</title><rect x="60.9" y="357" width="0.2" height="15.0" fill="rgb(219,67,16)" rx="2" ry="2" />
+<text  x="63.94" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::Packet::Copy (3,461,375 samples, 0.36%)</title><rect x="358.9" y="517" width="2.7" height="15.0" fill="rgb(250,211,50)" rx="2" ry="2" />
+<text  x="361.86" y="527.5" ></text>
+</g>
+<g >
+<title>std::_List_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::insert&lt;std::_List_const_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;, void&gt; (2,409,911 samples, 0.25%)</title><rect x="732.4" y="485" width="2.0" height="15.0" fill="rgb(210,23,5)" rx="2" ry="2" />
+<text  x="735.44" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::LteUePhy::DoSendMacPdu (539,944 samples, 0.06%)</title><rect x="564.7" y="181" width="0.5" height="15.0" fill="rgb(233,132,31)" rx="2" ry="2" />
+<text  x="567.73" y="191.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt; &gt;::allocate (493,183 samples, 0.05%)</title><rect x="563.8" y="117" width="0.4" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="566.80" y="127.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt;::destroy&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; (652,707 samples, 0.07%)</title><rect x="609.7" y="517" width="0.6" height="15.0" fill="rgb(230,118,28)" rx="2" ry="2" />
+<text  x="612.73" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::UeSelected_s::operator= (148,008 samples, 0.02%)</title><rect x="93.8" y="453" width="0.1" height="15.0" fill="rgb(244,183,43)" rx="2" ry="2" />
+<text  x="96.76" y="463.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::~list (148,437 samples, 0.02%)</title><rect x="698.0" y="549" width="0.1" height="15.0" fill="rgb(222,80,19)" rx="2" ry="2" />
+<text  x="700.96" y="559.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, unsigned int, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt; &gt;::find (241,202 samples, 0.02%)</title><rect x="234.3" y="469" width="0.2" height="15.0" fill="rgb(239,156,37)" rx="2" ry="2" />
+<text  x="237.31" y="479.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, unsigned int, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt; &gt;::find (1,368,772 samples, 0.14%)</title><rect x="223.8" y="485" width="1.1" height="15.0" fill="rgb(239,156,37)" rx="2" ry="2" />
+<text  x="226.75" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::SpectrumSignalParameters, ns3::Empty, ns3::DefaultDeleter&lt;ns3::SpectrumSignalParameters&gt; &gt;::SimpleRefCount (152,528 samples, 0.02%)</title><rect x="670.3" y="485" width="0.1" height="15.0" fill="rgb(213,38,9)" rx="2" ry="2" />
+<text  x="673.25" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned int const, ns3::RxSpectrumModelInfo&gt; &gt;::operator (368,315 samples, 0.04%)</title><rect x="656.8" y="517" width="0.3" height="15.0" fill="rgb(224,91,21)" rx="2" ry="2" />
+<text  x="659.83" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt;::_Vector_impl::_Vector_impl (228,046 samples, 0.02%)</title><rect x="144.7" y="421" width="0.1" height="15.0" fill="rgb(237,150,35)" rx="2" ry="2" />
+<text  x="147.66" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::Packet, ns3::Empty, ns3::DefaultDeleter&lt;ns3::Packet&gt; &gt;::Unref (392,648 samples, 0.04%)</title><rect x="612.9" y="389" width="0.3" height="15.0" fill="rgb(215,47,11)" rx="2" ry="2" />
+<text  x="615.90" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_M_allocate (157,055 samples, 0.02%)</title><rect x="214.0" y="453" width="0.2" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="217.05" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumModel const&gt;::Ptr (236,748 samples, 0.02%)</title><rect x="299.5" y="453" width="0.2" height="15.0" fill="rgb(232,125,30)" rx="2" ry="2" />
+<text  x="302.51" y="463.5" ></text>
+</g>
+<g >
+<title>void ns3::Callback&lt;void, ns3::UlInfoListElement_s&gt;::Callback&lt;void  (2,014,597 samples, 0.21%)</title><rect x="439.3" y="453" width="1.6" height="15.0" fill="rgb(233,129,30)" rx="2" ry="2" />
+<text  x="442.32" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::NoOpComponentCarrierManager::DoNotifyTxOpportunity (17,080,246 samples, 1.76%)</title><rect x="19.6" y="469" width="13.7" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="22.60" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbMac::DoSchedDlConfigInd (415,834 samples, 0.04%)</title><rect x="15.5" y="453" width="0.3" height="15.0" fill="rgb(205,3,0)" rx="2" ry="2" />
+<text  x="18.45" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::_Vector_base (326,261 samples, 0.03%)</title><rect x="439.6" y="405" width="0.2" height="15.0" fill="rgb(219,65,15)" rx="2" ry="2" />
+<text  x="442.57" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt;::_S_key (553,029 samples, 0.06%)</title><rect x="455.9" y="261" width="0.4" height="15.0" fill="rgb(229,113,27)" rx="2" ry="2" />
+<text  x="458.85" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt;::operator (164,113 samples, 0.02%)</title><rect x="70.7" y="469" width="0.1" height="15.0" fill="rgb(213,38,9)" rx="2" ry="2" />
+<text  x="73.69" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt;::Ptr (191,494 samples, 0.02%)</title><rect x="633.1" y="501" width="0.2" height="15.0" fill="rgb(219,67,16)" rx="2" ry="2" />
+<text  x="636.12" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;1ul, ns3::Ptr&lt;ns3::SpectrumValue&gt;, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::_M_head (260,750 samples, 0.03%)</title><rect x="755.3" y="565" width="0.2" height="15.0" fill="rgb(237,150,35)" rx="2" ry="2" />
+<text  x="758.28" y="575.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::SpectrumValue (314,226 samples, 0.03%)</title><rect x="484.8" y="501" width="0.3" height="15.0" fill="rgb(211,27,6)" rx="2" ry="2" />
+<text  x="487.85" y="511.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::MacCeListElement_s, std::allocator&lt;ns3::MacCeListElement_s&gt; &gt;::_M_erase (873,141 samples, 0.09%)</title><rect x="264.7" y="501" width="0.7" height="15.0" fill="rgb(241,168,40)" rx="2" ry="2" />
+<text  x="267.74" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Bind_helper&lt;std::__or_&lt;std::is_integral&lt;std::decay&lt;void  (238,561 samples, 0.02%)</title><rect x="726.8" y="469" width="0.2" height="15.0" fill="rgb(237,148,35)" rx="2" ry="2" />
+<text  x="729.78" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::PfFfMacScheduler::DoSchedDlTriggerReq (4,972,136 samples, 0.51%)</title><rect x="11.4" y="517" width="4.0" height="15.0" fill="rgb(214,45,10)" rx="2" ry="2" />
+<text  x="14.43" y="527.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;bool, std::allocator&lt;bool&gt; &gt;::resize (5,979,917 samples, 0.62%)</title><rect x="196.8" y="485" width="4.9" height="15.0" fill="rgb(219,68,16)" rx="2" ry="2" />
+<text  x="199.84" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Packet::Packet (828,725 samples, 0.09%)</title><rect x="68.0" y="437" width="0.7" height="15.0" fill="rgb(230,115,27)" rx="2" ry="2" />
+<text  x="70.99" y="447.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;__gnu_cxx::__normal_iterator&lt;ns3::DlInfoListElement_s*, std::vector&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt; &gt;, ns3::DlInfoListElement_s&gt; (300,135 samples, 0.03%)</title><rect x="207.5" y="469" width="0.3" height="15.0" fill="rgb(210,24,5)" rx="2" ry="2" />
+<text  x="210.54" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::PhichListElement_s* std::__do_uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::PhichListElement_s const*, std::vector&lt;ns3::PhichListElement_s, std::allocator&lt;ns3::PhichListElement_s&gt; &gt; &gt;, ns3::PhichListElement_s*&gt; (202,017 samples, 0.02%)</title><rect x="227.5" y="389" width="0.2" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="230.50" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumPhy&gt;::~Ptr (195,875 samples, 0.02%)</title><rect x="345.9" y="517" width="0.2" height="15.0" fill="rgb(224,91,21)" rx="2" ry="2" />
+<text  x="348.91" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt;::~_Vector_base (198,549 samples, 0.02%)</title><rect x="207.9" y="469" width="0.2" height="15.0" fill="rgb(212,33,8)" rx="2" ry="2" />
+<text  x="210.91" y="479.5" ></text>
+</g>
+<g >
+<title>void std::__invoke_impl&lt;void, void  (27,633,212 samples, 2.85%)</title><rect x="441.7" y="389" width="22.2" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="444.71" y="399.5" >v..</text>
+</g>
+<g >
+<title>ns3::PacketTagList::TagData::TagData (161,191 samples, 0.02%)</title><rect x="562.4" y="149" width="0.1" height="15.0" fill="rgb(207,12,2)" rx="2" ry="2" />
+<text  x="565.40" y="159.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt;::operator= (640,859 samples, 0.07%)</title><rect x="107.3" y="501" width="0.5" height="15.0" fill="rgb(231,123,29)" rx="2" ry="2" />
+<text  x="110.26" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;2ul, unsigned int&gt;::_M_head (159,042 samples, 0.02%)</title><rect x="756.4" y="565" width="0.1" height="15.0" fill="rgb(239,158,37)" rx="2" ry="2" />
+<text  x="759.42" y="575.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumPhy::EndTxData (1,667,932 samples, 0.17%)</title><rect x="612.2" y="565" width="1.4" height="15.0" fill="rgb(209,21,5)" rx="2" ry="2" />
+<text  x="615.23" y="575.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;int, std::allocator&lt;int&gt; &gt;::_Vector_impl::_Vector_impl (124,596 samples, 0.01%)</title><rect x="594.9" y="229" width="0.1" height="15.0" fill="rgb(236,142,34)" rx="2" ry="2" />
+<text  x="597.90" y="239.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::SpectrumValue (966,311 samples, 0.10%)</title><rect x="407.5" y="501" width="0.8" height="15.0" fill="rgb(211,27,6)" rx="2" ry="2" />
+<text  x="410.53" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;0ul, ns3::MultiModelSpectrumChannel*, ns3::Ptr&lt;ns3::SpectrumValue&gt;, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::_Tuple_impl&lt;ns3::MultiModelSpectrumChannel*&amp;, ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp;, double&amp;, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;&amp;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;&amp;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;&amp;, void&gt; (550,800 samples, 0.06%)</title><rect x="340.3" y="405" width="0.5" height="15.0" fill="rgb(231,123,29)" rx="2" ry="2" />
+<text  x="343.33" y="415.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, ns3::LteEnbComponentCarrierManager::UeInfo, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt; &gt; &gt;::at (305,705 samples, 0.03%)</title><rect x="96.4" y="405" width="0.2" height="15.0" fill="rgb(209,18,4)" rx="2" ry="2" />
+<text  x="99.39" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;1ul, ns3::Ptr&lt;ns3::SpectrumValue&gt;, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::_Tuple_impl (417,132 samples, 0.04%)</title><rect x="340.8" y="357" width="0.4" height="15.0" fill="rgb(206,6,1)" rx="2" ry="2" />
+<text  x="343.84" y="367.5" ></text>
+</g>
+<g >
+<title>[libm.so.6] (165,652 samples, 0.02%)</title><rect x="739.3" y="501" width="0.2" height="15.0" fill="rgb(208,16,4)" rx="2" ry="2" />
+<text  x="742.32" y="511.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::Ptr&lt;ns3::Object&gt;*, ns3::Ptr&lt;ns3::Object&gt; &gt; (158,025 samples, 0.02%)</title><rect x="502.6" y="357" width="0.1" height="15.0" fill="rgb(226,98,23)" rx="2" ry="2" />
+<text  x="505.61" y="367.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::end (314,439 samples, 0.03%)</title><rect x="217.0" y="469" width="0.3" height="15.0" fill="rgb(218,63,15)" rx="2" ry="2" />
+<text  x="220.02" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::LogComponent::IsEnabled (124,630 samples, 0.01%)</title><rect x="608.8" y="517" width="0.1" height="15.0" fill="rgb(214,43,10)" rx="2" ry="2" />
+<text  x="611.82" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::Object::GetTypeId (316,486 samples, 0.03%)</title><rect x="629.2" y="485" width="0.2" height="15.0" fill="rgb(234,134,32)" rx="2" ry="2" />
+<text  x="632.19" y="495.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::begin (448,394 samples, 0.05%)</title><rect x="491.4" y="533" width="0.4" height="15.0" fill="rgb(230,117,28)" rx="2" ry="2" />
+<text  x="494.43" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::LteHelper::InstallSingleEnbDevice (354,479 samples, 0.04%)</title><rect x="35.8" y="757" width="0.3" height="15.0" fill="rgb(211,27,6)" rx="2" ry="2" />
+<text  x="38.80" y="767.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::construct&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; const&amp;&gt; (272,222 samples, 0.03%)</title><rect x="342.1" y="341" width="0.2" height="15.0" fill="rgb(236,146,35)" rx="2" ry="2" />
+<text  x="345.07" y="351.5" ></text>
+</g>
+<g >
+<title>void std::_Rb_tree&lt;ns3::TbId_t, std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::_Select1st&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::_M_construct_node&lt;std::pair&lt;ns3::TbId_t, ns3::tbInfo_t&gt; &gt; (893,221 samples, 0.09%)</title><rect x="384.7" y="453" width="0.7" height="15.0" fill="rgb(243,177,42)" rx="2" ry="2" />
+<text  x="387.69" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultDeleter&lt;ns3::LteControlMessage&gt;::Delete (528,952 samples, 0.05%)</title><rect x="609.8" y="453" width="0.5" height="15.0" fill="rgb(224,87,20)" rx="2" ry="2" />
+<text  x="612.83" y="463.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::end (163,408 samples, 0.02%)</title><rect x="722.6" y="517" width="0.2" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="725.64" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt;::operator= (8,514,539 samples, 0.88%)</title><rect x="544.3" y="325" width="6.8" height="15.0" fill="rgb(219,65,15)" rx="2" ry="2" />
+<text  x="547.27" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::FfMacSchedSapUser::SchedUlConfigIndParameters::SchedUlConfigIndParameters (191,651 samples, 0.02%)</title><rect x="103.4" y="453" width="0.2" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="106.41" y="463.5" ></text>
+</g>
+<g >
+<title>int* std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;int const*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt;, int*&gt; (576,469 samples, 0.06%)</title><rect x="398.9" y="469" width="0.5" height="15.0" fill="rgb(229,111,26)" rx="2" ry="2" />
+<text  x="401.94" y="479.5" ></text>
+</g>
+<g >
+<title>std::__tuple_compare&lt;std::tuple&lt;double const&amp;, double const&amp;, double const&amp;&gt;, std::tuple&lt;double const&amp;, double const&amp;, double const&amp;&gt;, 2ul, 3ul&gt;::__eq (816,676 samples, 0.08%)</title><rect x="747.5" y="469" width="0.6" height="15.0" fill="rgb(222,80,19)" rx="2" ry="2" />
+<text  x="750.46" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_M_lower_bound (671,388 samples, 0.07%)</title><rect x="221.7" y="453" width="0.5" height="15.0" fill="rgb(231,121,28)" rx="2" ry="2" />
+<text  x="224.68" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::_M_lower_bound (189,556 samples, 0.02%)</title><rect x="192.8" y="437" width="0.2" height="15.0" fill="rgb(226,97,23)" rx="2" ry="2" />
+<text  x="195.85" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Buffer::Buffer (724,999 samples, 0.07%)</title><rect x="359.2" y="485" width="0.6" height="15.0" fill="rgb(254,226,54)" rx="2" ry="2" />
+<text  x="362.22" y="495.5" ></text>
+</g>
+<g >
+<title>main (923,574,718 samples, 95.24%)</title><rect x="35.7" y="789" width="742.8" height="15.0" fill="rgb(243,179,42)" rx="2" ry="2" />
+<text  x="38.67" y="799.5" >main</text>
+</g>
+<g >
+<title>std::vector&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt;::vector (511,121 samples, 0.05%)</title><rect x="131.6" y="501" width="0.4" height="15.0" fill="rgb(227,104,24)" rx="2" ry="2" />
+<text  x="134.61" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Object::Construct (267,173 samples, 0.03%)</title><rect x="19.4" y="437" width="0.2" height="15.0" fill="rgb(228,108,26)" rx="2" ry="2" />
+<text  x="22.36" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Head_base&lt;0ul, ns3::LteUePhy*, false&gt;::_Head_base&lt;ns3::LteUePhy*&amp;&gt; (194,018 samples, 0.02%)</title><rect x="617.4" y="437" width="0.1" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="620.36" y="447.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::end (268,850 samples, 0.03%)</title><rect x="362.1" y="485" width="0.2" height="15.0" fill="rgb(211,29,6)" rx="2" ry="2" />
+<text  x="365.09" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Buffer::Buffer (1,901,878 samples, 0.20%)</title><rect x="31.2" y="389" width="1.5" height="15.0" fill="rgb(254,226,54)" rx="2" ry="2" />
+<text  x="34.17" y="399.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::__uninitialized_default_n&lt;unsigned char*, unsigned long&gt; (957,537 samples, 0.10%)</title><rect x="460.2" y="229" width="0.8" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="463.23" y="239.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::Copy (3,716,085 samples, 0.38%)</title><rect x="67.6" y="469" width="3.0" height="15.0" fill="rgb(240,161,38)" rx="2" ry="2" />
+<text  x="70.64" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::_Rb_tree_impl&lt;std::less&lt;unsigned short&gt;, true&gt;::~_Rb_tree_impl (183,623 samples, 0.02%)</title><rect x="193.7" y="453" width="0.1" height="15.0" fill="rgb(219,65,15)" rx="2" ry="2" />
+<text  x="196.68" y="463.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;double&gt; &gt;::allocate (525,645 samples, 0.05%)</title><rect x="407.7" y="421" width="0.4" height="15.0" fill="rgb(234,136,32)" rx="2" ry="2" />
+<text  x="410.65" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::LteFrNoOpAlgorithm::DoGetAvailableUlRbg (159,757 samples, 0.02%)</title><rect x="232.3" y="469" width="0.1" height="15.0" fill="rgb(219,67,16)" rx="2" ry="2" />
+<text  x="235.28" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::UlInfoListElement_s::UlInfoListElement_s (231,995 samples, 0.02%)</title><rect x="266.7" y="405" width="0.2" height="15.0" fill="rgb(211,29,7)" rx="2" ry="2" />
+<text  x="269.68" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::BsrLteControlMessage::BsrLteControlMessage (515,105 samples, 0.05%)</title><rect x="688.6" y="485" width="0.4" height="15.0" fill="rgb(253,221,52)" rx="2" ry="2" />
+<text  x="691.62" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Node&gt;::Acquire (155,344 samples, 0.02%)</title><rect x="312.9" y="469" width="0.1" height="15.0" fill="rgb(227,102,24)" rx="2" ry="2" />
+<text  x="315.88" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::DlHarqFeedbackLteControlMessage&gt; ns3::Create&lt;ns3::DlHarqFeedbackLteControlMessage&gt; (705,727 samples, 0.07%)</title><rect x="420.7" y="357" width="0.6" height="15.0" fill="rgb(254,226,54)" rx="2" ry="2" />
+<text  x="423.73" y="367.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::allocate (126,498 samples, 0.01%)</title><rect x="81.8" y="421" width="0.1" height="15.0" fill="rgb(225,92,22)" rx="2" ry="2" />
+<text  x="84.85" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Function_base::~_Function_base (240,849 samples, 0.02%)</title><rect x="64.7" y="421" width="0.2" height="15.0" fill="rgb(221,74,17)" rx="2" ry="2" />
+<text  x="67.74" y="431.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt;::_M_ptr (351,633 samples, 0.04%)</title><rect x="369.3" y="485" width="0.3" height="15.0" fill="rgb(215,48,11)" rx="2" ry="2" />
+<text  x="372.34" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::AttributeConstructionList::~AttributeConstructionList (204,057 samples, 0.02%)</title><rect x="448.1" y="277" width="0.2" height="15.0" fill="rgb(217,58,13)" rx="2" ry="2" />
+<text  x="451.09" y="287.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::key_comp (197,963 samples, 0.02%)</title><rect x="273.2" y="453" width="0.1" height="15.0" fill="rgb(229,114,27)" rx="2" ry="2" />
+<text  x="276.18" y="463.5" ></text>
+</g>
+<g >
+<title>std::_List_node&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt;::_M_valptr (551,416 samples, 0.06%)</title><rect x="369.2" y="501" width="0.4" height="15.0" fill="rgb(215,46,11)" rx="2" ry="2" />
+<text  x="372.18" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt; ns3::CreateObject&lt;ns3::PacketBurst&gt; (5,473,984 samples, 0.56%)</title><rect x="628.9" y="533" width="4.4" height="15.0" fill="rgb(205,4,0)" rx="2" ry="2" />
+<text  x="631.94" y="543.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt;::resize (1,737,961 samples, 0.18%)</title><rect x="510.9" y="549" width="1.4" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="513.91" y="559.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt; &gt; &gt;::_S_key (613,037 samples, 0.06%)</title><rect x="433.7" y="277" width="0.5" height="15.0" fill="rgb(243,176,42)" rx="2" ry="2" />
+<text  x="436.71" y="287.5" ></text>
+</g>
+<g >
+<title>std::__detail::_List_node_header::_M_init (148,323 samples, 0.02%)</title><rect x="286.0" y="469" width="0.1" height="15.0" fill="rgb(243,178,42)" rx="2" ry="2" />
+<text  x="288.98" y="479.5" ></text>
+</g>
+<g >
+<title>bool __gnu_cxx::operator==&lt;ns3::VendorSpecificListElement_s const*, std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt; &gt; (308,120 samples, 0.03%)</title><rect x="144.1" y="373" width="0.3" height="15.0" fill="rgb(233,131,31)" rx="2" ry="2" />
+<text  x="147.10" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::~PacketBurst (158,753 samples, 0.02%)</title><rect x="17.0" y="373" width="0.1" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="19.99" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;0ul, ns3::MultiModelSpectrumChannel*, ns3::Ptr&lt;ns3::SpectrumValue&gt;, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::_Tuple_impl (417,132 samples, 0.04%)</title><rect x="340.8" y="373" width="0.4" height="15.0" fill="rgb(229,111,26)" rx="2" ry="2" />
+<text  x="343.84" y="383.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_get_node (185,442 samples, 0.02%)</title><rect x="318.9" y="325" width="0.2" height="15.0" fill="rgb(247,194,46)" rx="2" ry="2" />
+<text  x="321.91" y="335.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::UlDciListElement_s, std::allocator&lt;ns3::UlDciListElement_s&gt; &gt;::~vector (568,827 samples, 0.06%)</title><rect x="229.5" y="453" width="0.5" height="15.0" fill="rgb(246,189,45)" rx="2" ry="2" />
+<text  x="232.55" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::HarqProcessInfoElement_t* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;ns3::HarqProcessInfoElement_t const*, std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt;, ns3::HarqProcessInfoElement_t*, ns3::HarqProcessInfoElement_t&gt; (489,523 samples, 0.05%)</title><rect x="524.9" y="325" width="0.4" height="15.0" fill="rgb(252,220,52)" rx="2" ry="2" />
+<text  x="527.94" y="335.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::LteFlowId_t, std::pair&lt;ns3::LteFlowId_t const, ns3::FfMacSchedSapProvider::SchedDlRlcBufferReqParameters&gt;, std::_Select1st&lt;std::pair&lt;ns3::LteFlowId_t const, ns3::FfMacSchedSapProvider::SchedDlRlcBufferReqParameters&gt; &gt;, std::less&lt;ns3::LteFlowId_t&gt;, std::allocator&lt;std::pair&lt;ns3::LteFlowId_t const, ns3::FfMacSchedSapProvider::SchedDlRlcBufferReqParameters&gt; &gt; &gt;::_S_right (147,258 samples, 0.02%)</title><rect x="182.2" y="421" width="0.1" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="185.21" y="431.5" ></text>
+</g>
+<g >
+<title>[libm.so.6] (162,241 samples, 0.02%)</title><rect x="302.7" y="469" width="0.1" height="15.0" fill="rgb(208,16,4)" rx="2" ry="2" />
+<text  x="305.66" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::int64x64_t::int64x64_t (437,040 samples, 0.05%)</title><rect x="406.5" y="469" width="0.3" height="15.0" fill="rgb(240,161,38)" rx="2" ry="2" />
+<text  x="409.48" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::TbId_t, std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::_Select1st&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::find (1,429,194 samples, 0.15%)</title><rect x="529.0" y="325" width="1.1" height="15.0" fill="rgb(215,50,12)" rx="2" ry="2" />
+<text  x="531.95" y="335.5" ></text>
+</g>
+<g >
+<title>void std::__invoke_impl&lt;void, void  (324,769 samples, 0.03%)</title><rect x="611.9" y="357" width="0.3" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="614.94" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt; ns3::Create&lt;ns3::PacketBurst&gt; (262,299 samples, 0.03%)</title><rect x="644.9" y="453" width="0.3" height="15.0" fill="rgb(225,93,22)" rx="2" ry="2" />
+<text  x="647.94" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;::clear (344,275 samples, 0.04%)</title><rect x="209.0" y="485" width="0.3" height="15.0" fill="rgb(251,212,50)" rx="2" ry="2" />
+<text  x="212.00" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumSignalParametersUlSrsFrame::Copy (151,019 samples, 0.02%)</title><rect x="613.9" y="517" width="0.1" height="15.0" fill="rgb(243,179,42)" rx="2" ry="2" />
+<text  x="616.86" y="527.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;double&gt; &gt;::allocate (530,824 samples, 0.05%)</title><rect x="239.4" y="229" width="0.4" height="15.0" fill="rgb(234,136,32)" rx="2" ry="2" />
+<text  x="242.38" y="239.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::operator[] (291,311 samples, 0.03%)</title><rect x="588.9" y="245" width="0.3" height="15.0" fill="rgb(248,202,48)" rx="2" ry="2" />
+<text  x="591.92" y="255.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;is_invocable_r_v&lt;void, std::_Bind&lt;void  (5,321,712 samples, 0.55%)</title><rect x="11.2" y="677" width="4.3" height="15.0" fill="rgb(243,178,42)" rx="2" ry="2" />
+<text  x="14.17" y="687.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, unsigned int, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt; &gt;::begin (224,560 samples, 0.02%)</title><rect x="178.5" y="469" width="0.2" height="15.0" fill="rgb(243,174,41)" rx="2" ry="2" />
+<text  x="181.49" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy::SetDownlinkSubChannelsWithPowerAllocation (10,110,206 samples, 1.04%)</title><rect x="53.9" y="549" width="8.1" height="15.0" fill="rgb(251,212,50)" rx="2" ry="2" />
+<text  x="56.87" y="559.5" ></text>
+</g>
+<g >
+<title>ns3::LteHelper::InstallUeDevice (533,991 samples, 0.06%)</title><rect x="36.1" y="773" width="0.5" height="15.0" fill="rgb(239,158,37)" rx="2" ry="2" />
+<text  x="39.12" y="783.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::vector&lt;int, std::allocator&lt;int&gt; &gt;, std::allocator&lt;std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt; &gt;::at (374,007 samples, 0.04%)</title><rect x="530.8" y="341" width="0.3" height="15.0" fill="rgb(236,145,34)" rx="2" ry="2" />
+<text  x="533.79" y="351.5" ></text>
+</g>
+<g >
+<title>__cxxabiv1::__si_class_type_info::__do_dyncast (332,012 samples, 0.03%)</title><rect x="671.6" y="501" width="0.3" height="15.0" fill="rgb(219,65,15)" rx="2" ry="2" />
+<text  x="674.65" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::_M_lower_bound (274,073 samples, 0.03%)</title><rect x="244.1" y="437" width="0.2" height="15.0" fill="rgb(226,97,23)" rx="2" ry="2" />
+<text  x="247.07" y="447.5" ></text>
+</g>
+<g >
+<title>main (22,443,594 samples, 2.31%)</title><rect x="17.2" y="821" width="18.0" height="15.0" fill="rgb(243,179,42)" rx="2" ry="2" />
+<text  x="20.17" y="831.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt;, std::allocator&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt; &gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt;, std::allocator&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt;, std::allocator&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt;::find (1,282,559 samples, 0.13%)</title><rect x="187.9" y="469" width="1.0" height="15.0" fill="rgb(253,225,53)" rx="2" ry="2" />
+<text  x="190.91" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::TypeId::GetParent (695,948 samples, 0.07%)</title><rect x="632.0" y="469" width="0.6" height="15.0" fill="rgb(211,29,7)" rx="2" ry="2" />
+<text  x="635.00" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::HarqStatus_e* std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;ns3::DlInfoListElement_s::HarqStatus_e const*, std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt; &gt;, ns3::DlInfoListElement_s::HarqStatus_e*&gt; (598,769 samples, 0.06%)</title><rect x="444.2" y="245" width="0.5" height="15.0" fill="rgb(212,36,8)" rx="2" ry="2" />
+<text  x="447.18" y="255.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned int const, ns3::RxSpectrumModelInfo&gt; &gt;::_M_addr (230,074 samples, 0.02%)</title><rect x="328.9" y="437" width="0.2" height="15.0" fill="rgb(243,176,42)" rx="2" ry="2" />
+<text  x="331.93" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Simulator::Now (154,294 samples, 0.02%)</title><rect x="684.2" y="549" width="0.1" height="15.0" fill="rgb(240,164,39)" rx="2" ry="2" />
+<text  x="687.21" y="559.5" ></text>
+</g>
+<g >
+<title>ns3::MakeEvent&lt;void  (361,324 samples, 0.04%)</title><rect x="727.6" y="453" width="0.2" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="730.56" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::ByteTagList::Begin (274,085 samples, 0.03%)</title><rect x="436.6" y="229" width="0.2" height="15.0" fill="rgb(243,174,41)" rx="2" ry="2" />
+<text  x="439.62" y="239.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteUeMac::LcInfo&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteUeMac::LcInfo&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteUeMac::LcInfo&gt; &gt; &gt;::_S_key (624,690 samples, 0.06%)</title><rect x="437.9" y="277" width="0.5" height="15.0" fill="rgb(221,77,18)" rx="2" ry="2" />
+<text  x="440.90" y="287.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::TbId_t, std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::_Select1st&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::find (186,148 samples, 0.02%)</title><rect x="120.4" y="501" width="0.2" height="15.0" fill="rgb(215,50,12)" rx="2" ry="2" />
+<text  x="123.44" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::LogComponent::IsEnabled (203,037 samples, 0.02%)</title><rect x="38.4" y="709" width="0.1" height="15.0" fill="rgb(214,43,10)" rx="2" ry="2" />
+<text  x="41.37" y="719.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultDeleter&lt;ns3::Packet&gt;::Delete (750,603 samples, 0.08%)</title><rect x="774.1" y="213" width="0.6" height="15.0" fill="rgb(231,123,29)" rx="2" ry="2" />
+<text  x="777.11" y="223.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt; &gt; &gt;::_M_begin (334,035 samples, 0.03%)</title><rect x="157.6" y="373" width="0.3" height="15.0" fill="rgb(247,193,46)" rx="2" ry="2" />
+<text  x="160.62" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::HarqProcessInfoElement_t* std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;ns3::HarqProcessInfoElement_t const*, std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt;, ns3::HarqProcessInfoElement_t*&gt; (995,216 samples, 0.10%)</title><rect x="512.9" y="469" width="0.8" height="15.0" fill="rgb(210,26,6)" rx="2" ry="2" />
+<text  x="515.86" y="479.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;::_M_insert&lt;ns3::UlDciLteControlMessage const&amp;&gt; (198,522 samples, 0.02%)</title><rect x="296.5" y="517" width="0.2" height="15.0" fill="rgb(224,91,21)" rx="2" ry="2" />
+<text  x="299.51" y="527.5" ></text>
+</g>
+<g >
+<title>void std::__invoke_impl&lt;void, void  (72,708,735 samples, 7.50%)</title><rect x="518.1" y="389" width="58.5" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="521.12" y="399.5" >void s..</text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt; &gt; &gt;::_M_begin (162,112 samples, 0.02%)</title><rect x="235.4" y="453" width="0.1" height="15.0" fill="rgb(252,216,51)" rx="2" ry="2" />
+<text  x="238.41" y="463.5" ></text>
+</g>
+<g >
+<title>void std::destroy_at&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; (1,991,119 samples, 0.21%)</title><rect x="501.3" y="501" width="1.6" height="15.0" fill="rgb(213,38,9)" rx="2" ry="2" />
+<text  x="504.32" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Bind&lt;void  (265,283 samples, 0.03%)</title><rect x="639.8" y="437" width="0.2" height="15.0" fill="rgb(253,221,52)" rx="2" ry="2" />
+<text  x="642.79" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Bind&lt;void  (372,120 samples, 0.04%)</title><rect x="64.0" y="437" width="0.3" height="15.0" fill="rgb(253,221,52)" rx="2" ry="2" />
+<text  x="67.04" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumModel const&gt;&amp;&amp; std::forward&lt;ns3::Ptr&lt;ns3::SpectrumModel const&gt; &gt; (196,233 samples, 0.02%)</title><rect x="402.0" y="501" width="0.2" height="15.0" fill="rgb(234,137,32)" rx="2" ry="2" />
+<text  x="405.05" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Packet::~Packet (671,079 samples, 0.07%)</title><rect x="774.2" y="197" width="0.5" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="777.17" y="207.5" ></text>
+</g>
+<g >
+<title>std::_List_node&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt;::_M_valptr (276,707 samples, 0.03%)</title><rect x="362.7" y="453" width="0.3" height="15.0" fill="rgb(215,46,11)" rx="2" ry="2" />
+<text  x="365.74" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Simulator::DoSchedule (1,313,182 samples, 0.14%)</title><rect x="637.1" y="517" width="1.1" height="15.0" fill="rgb(222,79,18)" rx="2" ry="2" />
+<text  x="640.10" y="527.5" ></text>
+</g>
+<g >
+<title>std::__detail::_List_node_base::_M_hook (153,104 samples, 0.02%)</title><rect x="23.5" y="309" width="0.1" height="15.0" fill="rgb(244,179,42)" rx="2" ry="2" />
+<text  x="26.47" y="319.5" ></text>
+</g>
+<g >
+<title>std::less&lt;unsigned short&gt;::operator (131,872 samples, 0.01%)</title><rect x="456.4" y="261" width="0.1" height="15.0" fill="rgb(207,11,2)" rx="2" ry="2" />
+<text  x="459.36" y="271.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::lower_bound (147,572 samples, 0.02%)</title><rect x="294.2" y="501" width="0.1" height="15.0" fill="rgb(214,43,10)" rx="2" ry="2" />
+<text  x="297.21" y="511.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;std::__strip_reference_wrapper&lt;std::decay&lt;ns3::Scheduler::EventKey const&amp;&gt;::type&gt;::__type, std::__strip_reference_wrapper&lt;std::decay&lt;ns3::EventImpl* const&amp;&gt;::type&gt;::__type&gt; std::make_pair&lt;ns3::Scheduler::EventKey const&amp;, ns3::EventImpl* const&amp;&gt; (202,068 samples, 0.02%)</title><rect x="86.4" y="453" width="0.2" height="15.0" fill="rgb(235,141,33)" rx="2" ry="2" />
+<text  x="89.41" y="463.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;is_invocable_r_v&lt;void, ns3::Callback&lt;void, ns3::Ptr&lt;ns3::Packet&gt; &gt;::Callback&lt;void  (20,383,935 samples, 2.10%)</title><rect x="422.3" y="485" width="16.4" height="15.0" fill="rgb(213,40,9)" rx="2" ry="2" />
+<text  x="425.31" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Head_base&lt;5ul, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;, false&gt;::_Head_base&lt;std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;&amp;&gt; (318,126 samples, 0.03%)</title><rect x="667.0" y="325" width="0.2" height="15.0" fill="rgb(218,60,14)" rx="2" ry="2" />
+<text  x="669.98" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::DlHarqFeedbackLteControlMessage::GetDlHarqFeedback (1,880,893 samples, 0.19%)</title><rect x="443.9" y="357" width="1.6" height="15.0" fill="rgb(210,25,6)" rx="2" ry="2" />
+<text  x="446.95" y="367.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt; &gt;::_S_key (1,228,544 samples, 0.13%)</title><rect x="321.1" y="437" width="1.0" height="15.0" fill="rgb(238,153,36)" rx="2" ry="2" />
+<text  x="324.09" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_get_insert_hint_unique_pos (375,672 samples, 0.04%)</title><rect x="83.9" y="405" width="0.3" height="15.0" fill="rgb(209,22,5)" rx="2" ry="2" />
+<text  x="86.86" y="415.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt; &gt; &gt;::_M_erase (2,754,625 samples, 0.28%)</title><rect x="289.8" y="517" width="2.2" height="15.0" fill="rgb(228,109,26)" rx="2" ry="2" />
+<text  x="292.81" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::Packet::Packet (2,698,693 samples, 0.28%)</title><rect x="31.2" y="405" width="2.1" height="15.0" fill="rgb(230,115,27)" rx="2" ry="2" />
+<text  x="34.17" y="415.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt;::destroy&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; (186,011 samples, 0.02%)</title><rect x="776.3" y="341" width="0.1" height="15.0" fill="rgb(230,118,28)" rx="2" ry="2" />
+<text  x="779.26" y="351.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned char, ns3::LteUeMac::LcInfo, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteUeMac::LcInfo&gt; &gt; &gt;::end (285,417 samples, 0.03%)</title><rect x="571.5" y="325" width="0.2" height="15.0" fill="rgb(210,27,6)" rx="2" ry="2" />
+<text  x="574.51" y="335.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::__relocate_a&lt;unsigned char*, unsigned char*, std::allocator&lt;unsigned char&gt; &gt; (306,347 samples, 0.03%)</title><rect x="597.8" y="229" width="0.2" height="15.0" fill="rgb(233,131,31)" rx="2" ry="2" />
+<text  x="600.79" y="239.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt;::_M_ptr (290,218 samples, 0.03%)</title><rect x="137.2" y="405" width="0.3" height="15.0" fill="rgb(206,4,1)" rx="2" ry="2" />
+<text  x="140.24" y="415.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;int&gt;::allocate (177,537 samples, 0.02%)</title><rect x="699.8" y="469" width="0.2" height="15.0" fill="rgb(235,139,33)" rx="2" ry="2" />
+<text  x="702.81" y="479.5" ></text>
+</g>
+<g >
+<title>std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;* std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_create_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; const&amp;&gt; (262,916 samples, 0.03%)</title><rect x="620.5" y="469" width="0.3" height="15.0" fill="rgb(230,116,27)" rx="2" ry="2" />
+<text  x="623.55" y="479.5" ></text>
+</g>
+<g >
+<title>std::set&lt;unsigned short, std::less&lt;unsigned short&gt;, std::allocator&lt;unsigned short&gt; &gt;::set (311,875 samples, 0.03%)</title><rect x="194.9" y="485" width="0.3" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="197.93" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::TbId_t, std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::_Select1st&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::_Auto_node::_M_insert (436,204 samples, 0.04%)</title><rect x="527.6" y="293" width="0.4" height="15.0" fill="rgb(220,69,16)" rx="2" ry="2" />
+<text  x="530.61" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::operator+= (189,127 samples, 0.02%)</title><rect x="405.5" y="517" width="0.1" height="15.0" fill="rgb(215,49,11)" rx="2" ry="2" />
+<text  x="408.47" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultDeleter&lt;ns3::SpectrumSignalParameters&gt;::Delete (3,444,708 samples, 0.36%)</title><rect x="75.3" y="485" width="2.8" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="78.31" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::~_Rb_tree (916,115 samples, 0.09%)</title><rect x="193.1" y="469" width="0.7" height="15.0" fill="rgb(254,228,54)" rx="2" ry="2" />
+<text  x="196.09" y="479.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt;::_M_ptr (242,288 samples, 0.02%)</title><rect x="179.1" y="437" width="0.2" height="15.0" fill="rgb(206,4,1)" rx="2" ry="2" />
+<text  x="182.14" y="447.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt;::vector (327,207 samples, 0.03%)</title><rect x="92.3" y="357" width="0.2" height="15.0" fill="rgb(248,198,47)" rx="2" ry="2" />
+<text  x="95.28" y="367.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;3ul, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::_M_head (152,007 samples, 0.02%)</title><rect x="757.0" y="565" width="0.1" height="15.0" fill="rgb(249,204,48)" rx="2" ry="2" />
+<text  x="760.00" y="575.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::ByteTagListData*, std::allocator&lt;ns3::ByteTagListData*&gt; &gt;::push_back (853,471 samples, 0.09%)</title><rect x="547.0" y="85" width="0.7" height="15.0" fill="rgb(249,204,48)" rx="2" ry="2" />
+<text  x="549.98" y="95.5" ></text>
+</g>
+<g >
+<title>std::_List_const_iterator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt;::operator++ (223,776 samples, 0.02%)</title><rect x="369.6" y="517" width="0.2" height="15.0" fill="rgb(228,107,25)" rx="2" ry="2" />
+<text  x="372.63" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::BuildRarListElement_s* std::__do_uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::BuildRarListElement_s const*, std::vector&lt;ns3::BuildRarListElement_s, std::allocator&lt;ns3::BuildRarListElement_s&gt; &gt; &gt;, ns3::BuildRarListElement_s*&gt; (158,059 samples, 0.02%)</title><rect x="143.2" y="389" width="0.1" height="15.0" fill="rgb(208,17,4)" rx="2" ry="2" />
+<text  x="146.16" y="399.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;::__normal_iterator (160,148 samples, 0.02%)</title><rect x="417.0" y="501" width="0.2" height="15.0" fill="rgb(215,50,12)" rx="2" ry="2" />
+<text  x="420.04" y="511.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;is_member_pointer_v&lt;void  (2,347,913 samples, 0.24%)</title><rect x="306.0" y="501" width="1.9" height="15.0" fill="rgb(241,170,40)" rx="2" ry="2" />
+<text  x="309.03" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::ByteTagIterator::Next (735,090 samples, 0.08%)</title><rect x="436.0" y="245" width="0.6" height="15.0" fill="rgb(217,57,13)" rx="2" ry="2" />
+<text  x="439.00" y="255.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;double&gt;::allocate (525,645 samples, 0.05%)</title><rect x="407.7" y="405" width="0.4" height="15.0" fill="rgb(221,76,18)" rx="2" ry="2" />
+<text  x="410.65" y="415.5" ></text>
+</g>
+<g >
+<title>std::_List_node&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt;::_M_valptr (389,923 samples, 0.04%)</title><rect x="723.5" y="469" width="0.3" height="15.0" fill="rgb(254,226,54)" rx="2" ry="2" />
+<text  x="726.50" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Object::DoDelete (384,276 samples, 0.04%)</title><rect x="119.9" y="357" width="0.3" height="15.0" fill="rgb(212,34,8)" rx="2" ry="2" />
+<text  x="122.86" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::PfFfMacScheduler::DoSchedDlRlcBufferReq (2,515,374 samples, 0.26%)</title><rect x="25.4" y="325" width="2.0" height="15.0" fill="rgb(236,143,34)" rx="2" ry="2" />
+<text  x="28.42" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy::CreateTxPowerSpectralDensity (1,022,169 samples, 0.11%)</title><rect x="111.4" y="501" width="0.8" height="15.0" fill="rgb(253,225,53)" rx="2" ry="2" />
+<text  x="114.35" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::find (922,442 samples, 0.10%)</title><rect x="57.8" y="485" width="0.7" height="15.0" fill="rgb(219,65,15)" rx="2" ry="2" />
+<text  x="60.77" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::PfFfMacScheduler::DoSchedDlCqiInfoReq (1,060,666 samples, 0.11%)</title><rect x="93.7" y="485" width="0.8" height="15.0" fill="rgb(242,173,41)" rx="2" ry="2" />
+<text  x="96.67" y="495.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::AttributeConstructionList::Item, std::allocator&lt;ns3::AttributeConstructionList::Item&gt; &gt;::_List_impl::_List_impl (387,766 samples, 0.04%)</title><rect x="630.3" y="453" width="0.3" height="15.0" fill="rgb(210,27,6)" rx="2" ry="2" />
+<text  x="633.30" y="463.5" ></text>
+</g>
+<g >
+<title>double* std::fill_n&lt;double*, unsigned long, double&gt; (362,228 samples, 0.04%)</title><rect x="729.9" y="373" width="0.3" height="15.0" fill="rgb(234,135,32)" rx="2" ry="2" />
+<text  x="732.90" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::MacCeListElement_s* std::__uninitialized_copy&lt;false&gt;::__uninit_copy&lt;std::move_iterator&lt;ns3::MacCeListElement_s*&gt;, ns3::MacCeListElement_s*&gt; (193,178 samples, 0.02%)</title><rect x="129.7" y="437" width="0.2" height="15.0" fill="rgb(215,49,11)" rx="2" ry="2" />
+<text  x="132.71" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::LteChunkProcessor::Start (605,461 samples, 0.06%)</title><rect x="728.1" y="501" width="0.5" height="15.0" fill="rgb(227,103,24)" rx="2" ry="2" />
+<text  x="731.07" y="511.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::~vector (287,229 samples, 0.03%)</title><rect x="521.5" y="341" width="0.2" height="15.0" fill="rgb(243,174,41)" rx="2" ry="2" />
+<text  x="524.49" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteUeNetDevice&gt;::~Ptr (125,167 samples, 0.01%)</title><rect x="599.9" y="309" width="0.1" height="15.0" fill="rgb(218,61,14)" rx="2" ry="2" />
+<text  x="602.85" y="319.5" ></text>
+</g>
+<g >
+<title>std::__detail::_List_node_header::_List_node_header (210,164 samples, 0.02%)</title><rect x="610.4" y="501" width="0.2" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="613.39" y="511.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::end (395,922 samples, 0.04%)</title><rect x="148.3" y="389" width="0.4" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="151.35" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::_M_emplace_hint_unique&lt;std::piecewise_construct_t const&amp;, std::tuple&lt;unsigned short const&amp;&gt;, std::tuple&lt;&gt; &gt; (339,246 samples, 0.03%)</title><rect x="99.5" y="453" width="0.2" height="15.0" fill="rgb(213,37,8)" rx="2" ry="2" />
+<text  x="102.47" y="463.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::BuildBroadcastListElement_s*, ns3::BuildBroadcastListElement_s&gt; (197,106 samples, 0.02%)</title><rect x="145.3" y="437" width="0.1" height="15.0" fill="rgb(227,102,24)" rx="2" ry="2" />
+<text  x="148.29" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteSpectrumSignalParametersDlCtrlFrame&gt; ns3::Create&lt;ns3::LteSpectrumSignalParametersDlCtrlFrame&gt; (1,801,965 samples, 0.19%)</title><rect x="342.6" y="517" width="1.4" height="15.0" fill="rgb(251,211,50)" rx="2" ry="2" />
+<text  x="345.57" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_Rb_tree (2,374,517 samples, 0.24%)</title><rect x="58.6" y="501" width="1.9" height="15.0" fill="rgb(232,124,29)" rx="2" ry="2" />
+<text  x="61.61" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteControlMessage&gt;::operator (151,109 samples, 0.02%)</title><rect x="388.8" y="549" width="0.1" height="15.0" fill="rgb(216,52,12)" rx="2" ry="2" />
+<text  x="391.82" y="559.5" ></text>
+</g>
+<g >
+<title> (451,603 samples, 0.05%)</title><rect x="328.8" y="485" width="0.3" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="331.75" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::LteUeMac::SendReportBufferStatus (15,163,076 samples, 1.56%)</title><rect x="685.3" y="517" width="12.1" height="15.0" fill="rgb(221,75,18)" rx="2" ry="2" />
+<text  x="688.25" y="527.5" ></text>
+</g>
+<g >
+<title>[libc.so.6] (155,299 samples, 0.02%)</title><rect x="35.5" y="773" width="0.2" height="15.0" fill="rgb(223,84,20)" rx="2" ry="2" />
+<text  x="38.54" y="783.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::__copy_move_a1&lt;false, unsigned char const*, unsigned char*&gt; (262,899 samples, 0.03%)</title><rect x="688.0" y="373" width="0.2" height="15.0" fill="rgb(215,50,12)" rx="2" ry="2" />
+<text  x="690.97" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, unsigned short, std::_Identity&lt;unsigned short&gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;unsigned short&gt; &gt;::end (265,370 samples, 0.03%)</title><rect x="246.0" y="453" width="0.2" height="15.0" fill="rgb(223,84,20)" rx="2" ry="2" />
+<text  x="249.04" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter&gt;::GetReferenceCount (270,897 samples, 0.03%)</title><rect x="163.4" y="389" width="0.2" height="15.0" fill="rgb(218,61,14)" rx="2" ry="2" />
+<text  x="166.37" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Bind_helper&lt;std::__or_&lt;std::is_integral&lt;std::decay&lt;void  (935,594 samples, 0.10%)</title><rect x="666.5" y="469" width="0.8" height="15.0" fill="rgb(237,148,35)" rx="2" ry="2" />
+<text  x="669.51" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter&gt;::Unref (699,107 samples, 0.07%)</title><rect x="166.2" y="437" width="0.6" height="15.0" fill="rgb(221,78,18)" rx="2" ry="2" />
+<text  x="169.22" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::HarqStatus_e* std::__uninitialized_fill_n_a&lt;ns3::DlInfoListElement_s::HarqStatus_e*, unsigned long, ns3::DlInfoListElement_s::HarqStatus_e, ns3::DlInfoListElement_s::HarqStatus_e&gt; (295,111 samples, 0.03%)</title><rect x="511.1" y="517" width="0.2" height="15.0" fill="rgb(251,215,51)" rx="2" ry="2" />
+<text  x="514.06" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Packet&gt;::operator (196,328 samples, 0.02%)</title><rect x="154.7" y="389" width="0.2" height="15.0" fill="rgb(224,88,21)" rx="2" ry="2" />
+<text  x="157.73" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultDeleter&lt;ns3::LteControlMessage&gt;::Delete (538,741 samples, 0.06%)</title><rect x="167.0" y="421" width="0.5" height="15.0" fill="rgb(224,87,20)" rx="2" ry="2" />
+<text  x="170.03" y="431.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt;::_M_erase (213,559 samples, 0.02%)</title><rect x="117.1" y="501" width="0.2" height="15.0" fill="rgb(242,170,40)" rx="2" ry="2" />
+<text  x="120.11" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::LteRlcSpecificLteMacSapUser::NotifyTxOpportunity (314,249 samples, 0.03%)</title><rect x="11.2" y="421" width="0.2" height="15.0" fill="rgb(249,204,48)" rx="2" ry="2" />
+<text  x="14.17" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;::~Ptr (676,765 samples, 0.07%)</title><rect x="323.9" y="501" width="0.6" height="15.0" fill="rgb(236,143,34)" rx="2" ry="2" />
+<text  x="326.94" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue const&gt;::Ptr (187,751 samples, 0.02%)</title><rect x="709.7" y="373" width="0.2" height="15.0" fill="rgb(254,229,54)" rx="2" ry="2" />
+<text  x="712.74" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::Packet::GetSize (244,662 samples, 0.03%)</title><rect x="152.6" y="389" width="0.2" height="15.0" fill="rgb(240,163,39)" rx="2" ry="2" />
+<text  x="155.57" y="399.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;unsigned short&gt;::allocate (360,140 samples, 0.04%)</title><rect x="480.0" y="213" width="0.2" height="15.0" fill="rgb(214,44,10)" rx="2" ry="2" />
+<text  x="482.95" y="223.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::HarqStatus_e* std::__uninitialized_copy&lt;true&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::DlInfoListElement_s::HarqStatus_e const*, std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt; &gt;, ns3::DlInfoListElement_s::HarqStatus_e*&gt; (234,294 samples, 0.02%)</title><rect x="510.0" y="469" width="0.2" height="15.0" fill="rgb(241,165,39)" rx="2" ry="2" />
+<text  x="512.98" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned int, std::allocator&lt;unsigned int&gt; &gt;::_M_create_storage (336,354 samples, 0.03%)</title><rect x="695.0" y="469" width="0.3" height="15.0" fill="rgb(225,93,22)" rx="2" ry="2" />
+<text  x="698.04" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Packet::Packet (1,702,514 samples, 0.18%)</title><rect x="624.2" y="501" width="1.4" height="15.0" fill="rgb(230,115,27)" rx="2" ry="2" />
+<text  x="627.19" y="511.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::end (128,840 samples, 0.01%)</title><rect x="591.1" y="261" width="0.1" height="15.0" fill="rgb(214,44,10)" rx="2" ry="2" />
+<text  x="594.05" y="271.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; &gt; &gt;::operator* (400,979 samples, 0.04%)</title><rect x="455.1" y="309" width="0.4" height="15.0" fill="rgb(240,163,39)" rx="2" ry="2" />
+<text  x="458.15" y="319.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, unsigned int, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt; &gt;::end (232,052 samples, 0.02%)</title><rect x="178.7" y="469" width="0.2" height="15.0" fill="rgb(223,86,20)" rx="2" ry="2" />
+<text  x="181.67" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::TagBuffer::Write (197,148 samples, 0.02%)</title><rect x="31.0" y="389" width="0.2" height="15.0" fill="rgb(229,114,27)" rx="2" ry="2" />
+<text  x="34.01" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt;, std::allocator&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt;::_M_valptr (428,286 samples, 0.04%)</title><rect x="188.3" y="421" width="0.4" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="191.32" y="431.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;::end (190,575 samples, 0.02%)</title><rect x="286.9" y="485" width="0.2" height="15.0" fill="rgb(240,163,39)" rx="2" ry="2" />
+<text  x="289.93" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::PacketBurst (2,988,991 samples, 0.31%)</title><rect x="536.6" y="309" width="2.4" height="15.0" fill="rgb(208,15,3)" rx="2" ry="2" />
+<text  x="539.55" y="319.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt;::push_back (3,370,357 samples, 0.35%)</title><rect x="210.5" y="485" width="2.7" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="213.51" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::NoOpComponentCarrierManager::DoReportBufferStatus (6,485,597 samples, 0.67%)</title><rect x="24.3" y="389" width="5.2" height="15.0" fill="rgb(230,119,28)" rx="2" ry="2" />
+<text  x="27.28" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::Object::~Object (420,675 samples, 0.04%)</title><rect x="502.4" y="389" width="0.3" height="15.0" fill="rgb(229,110,26)" rx="2" ry="2" />
+<text  x="505.40" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::EventImpl::Invoke (22,443,594 samples, 2.31%)</title><rect x="17.2" y="757" width="18.0" height="15.0" fill="rgb(209,20,4)" rx="2" ry="2" />
+<text  x="20.17" y="767.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::_M_clear (750,825 samples, 0.08%)</title><rect x="501.7" y="389" width="0.6" height="15.0" fill="rgb(217,56,13)" rx="2" ry="2" />
+<text  x="504.74" y="399.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; const*, std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt; &gt;::__normal_iterator (195,190 samples, 0.02%)</title><rect x="623.4" y="501" width="0.2" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="626.42" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::ObjectBase::~ObjectBase (196,060 samples, 0.02%)</title><rect x="20.6" y="325" width="0.1" height="15.0" fill="rgb(232,126,30)" rx="2" ry="2" />
+<text  x="23.58" y="335.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;* std::__copy_move_a2&lt;true, std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;*, std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;*&gt; (2,402,205 samples, 0.25%)</title><rect x="349.7" y="453" width="2.0" height="15.0" fill="rgb(215,49,11)" rx="2" ry="2" />
+<text  x="352.74" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt;::~_Vector_base (431,058 samples, 0.04%)</title><rect x="24.8" y="309" width="0.4" height="15.0" fill="rgb(253,220,52)" rx="2" ry="2" />
+<text  x="27.85" y="319.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt;::_M_lower_bound (887,310 samples, 0.09%)</title><rect x="455.8" y="277" width="0.7" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="458.75" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::LtePhy::SetControlMessages (2,493,375 samples, 0.26%)</title><rect x="148.3" y="421" width="2.1" height="15.0" fill="rgb(247,193,46)" rx="2" ry="2" />
+<text  x="151.35" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_get_node (126,498 samples, 0.01%)</title><rect x="81.8" y="437" width="0.1" height="15.0" fill="rgb(251,215,51)" rx="2" ry="2" />
+<text  x="84.85" y="447.5" ></text>
+</g>
+<g >
+<title>bool std::operator==&lt;double const&amp;, double const&amp;, double const&amp;, double const&amp;, double const&amp;, double const&amp;&gt; (2,394,490 samples, 0.25%)</title><rect x="747.1" y="517" width="1.9" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="750.12" y="527.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;*, std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt;::__normal_iterator (155,092 samples, 0.02%)</title><rect x="375.9" y="517" width="0.1" height="15.0" fill="rgb(239,158,37)" rx="2" ry="2" />
+<text  x="378.87" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::EventImpl::EventImpl (154,551 samples, 0.02%)</title><rect x="708.2" y="469" width="0.1" height="15.0" fill="rgb(247,195,46)" rx="2" ry="2" />
+<text  x="711.17" y="479.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, bool&gt;::pair (248,699 samples, 0.03%)</title><rect x="86.2" y="453" width="0.2" height="15.0" fill="rgb(252,220,52)" rx="2" ry="2" />
+<text  x="89.21" y="463.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;double&gt;::deallocate (190,332 samples, 0.02%)</title><rect x="674.2" y="389" width="0.1" height="15.0" fill="rgb(223,83,20)" rx="2" ry="2" />
+<text  x="677.16" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::MakeEvent&lt;void  (5,321,712 samples, 0.55%)</title><rect x="11.2" y="725" width="4.3" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="14.17" y="735.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::~list (322,499 samples, 0.03%)</title><rect x="550.7" y="229" width="0.2" height="15.0" fill="rgb(238,152,36)" rx="2" ry="2" />
+<text  x="553.69" y="239.5" ></text>
+</g>
+<g >
+<title>ns3::LteUeMac::DoReceivePhyPdu (4,367,304 samples, 0.45%)</title><rect x="435.0" y="341" width="3.5" height="15.0" fill="rgb(211,31,7)" rx="2" ry="2" />
+<text  x="438.01" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::Tag::Tag (229,496 samples, 0.02%)</title><rect x="489.3" y="533" width="0.2" height="15.0" fill="rgb(212,35,8)" rx="2" ry="2" />
+<text  x="492.30" y="543.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::ByteTagListData* const*, std::vector&lt;ns3::ByteTagListData*, std::allocator&lt;ns3::ByteTagListData*&gt; &gt; &gt;::base (196,916 samples, 0.02%)</title><rect x="30.3" y="341" width="0.1" height="15.0" fill="rgb(226,98,23)" rx="2" ry="2" />
+<text  x="33.28" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::EnbMacMemberLteMacSapProvider&lt;ns3::NoOpComponentCarrierManager&gt;::ReportBufferStatus (1,019,985 samples, 0.11%)</title><rect x="17.9" y="389" width="0.8" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="20.88" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Function_handler&lt;void  (75,398,758 samples, 7.77%)</title><rect x="516.0" y="501" width="60.6" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="518.95" y="511.5" >std::_..</text>
+</g>
+<g >
+<title>unsigned short* std::__copy_move_a1&lt;false, unsigned short const*, unsigned short*&gt; (200,709 samples, 0.02%)</title><rect x="475.2" y="197" width="0.2" height="15.0" fill="rgb(236,144,34)" rx="2" ry="2" />
+<text  x="478.20" y="207.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::Ptr&lt;ns3::UeManager&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::Ptr&lt;ns3::UeManager&gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::Ptr&lt;ns3::UeManager&gt; &gt; &gt; &gt;::_M_lower_bound (556,603 samples, 0.06%)</title><rect x="28.7" y="309" width="0.4" height="15.0" fill="rgb(218,64,15)" rx="2" ry="2" />
+<text  x="31.66" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumPhy&gt;::Ptr (126,253 samples, 0.01%)</title><rect x="90.1" y="517" width="0.1" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="93.12" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt;::operator (168,844 samples, 0.02%)</title><rect x="73.8" y="437" width="0.2" height="15.0" fill="rgb(252,217,52)" rx="2" ry="2" />
+<text  x="76.81" y="447.5" ></text>
+</g>
+<g >
+<title>unsigned short* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;unsigned short const*, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, unsigned short*, unsigned short&gt; (658,154 samples, 0.07%)</title><rect x="521.0" y="325" width="0.5" height="15.0" fill="rgb(217,56,13)" rx="2" ry="2" />
+<text  x="523.96" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt; ns3::CompleteConstruct&lt;ns3::PacketBurst&gt; (299,870 samples, 0.03%)</title><rect x="119.4" y="501" width="0.2" height="15.0" fill="rgb(212,33,7)" rx="2" ry="2" />
+<text  x="122.38" y="511.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;::base (126,294 samples, 0.01%)</title><rect x="719.3" y="405" width="0.1" height="15.0" fill="rgb(224,88,21)" rx="2" ry="2" />
+<text  x="722.31" y="415.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::_List_base (236,451 samples, 0.02%)</title><rect x="162.0" y="405" width="0.2" height="15.0" fill="rgb(250,210,50)" rx="2" ry="2" />
+<text  x="165.05" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::PacketMetadata::Deallocate (318,817 samples, 0.03%)</title><rect x="548.6" y="85" width="0.2" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="551.58" y="95.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt; &gt; &gt;::_M_lower_bound (639,618 samples, 0.07%)</title><rect x="429.7" y="245" width="0.6" height="15.0" fill="rgb(238,153,36)" rx="2" ry="2" />
+<text  x="432.74" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::RlcPduListElement_s* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;ns3::RlcPduListElement_s const*, std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt;, ns3::RlcPduListElement_s*, ns3::RlcPduListElement_s&gt; (214,687 samples, 0.02%)</title><rect x="101.6" y="389" width="0.2" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="104.59" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::LteInterference::ConditionallyEvaluateChunk (575,348 samples, 0.06%)</title><rect x="712.9" y="501" width="0.4" height="15.0" fill="rgb(243,177,42)" rx="2" ry="2" />
+<text  x="715.87" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Buffer::Create (1,593,963 samples, 0.16%)</title><rect x="555.9" y="197" width="1.3" height="15.0" fill="rgb(242,174,41)" rx="2" ry="2" />
+<text  x="558.89" y="207.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;::_M_valptr (328,108 samples, 0.03%)</title><rect x="221.8" y="421" width="0.3" height="15.0" fill="rgb(232,124,29)" rx="2" ry="2" />
+<text  x="224.83" y="431.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;double&gt; &gt;::allocate (670,068 samples, 0.07%)</title><rect x="655.0" y="421" width="0.5" height="15.0" fill="rgb(234,136,32)" rx="2" ry="2" />
+<text  x="657.99" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::CqiListElement_s::CqiListElement_s (194,571 samples, 0.02%)</title><rect x="461.6" y="261" width="0.1" height="15.0" fill="rgb(238,156,37)" rx="2" ry="2" />
+<text  x="464.55" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;ns3::DlInfoListElement_s const*, std::vector&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt; &gt;, ns3::DlInfoListElement_s*, ns3::DlInfoListElement_s&gt; (5,104,143 samples, 0.53%)</title><rect x="257.8" y="485" width="4.1" height="15.0" fill="rgb(238,151,36)" rx="2" ry="2" />
+<text  x="260.82" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::SpectrumModel, ns3::Empty, ns3::DefaultDeleter&lt;ns3::SpectrumModel&gt; &gt;::Unref (233,271 samples, 0.02%)</title><rect x="744.0" y="533" width="0.1" height="15.0" fill="rgb(251,213,50)" rx="2" ry="2" />
+<text  x="746.96" y="543.5" ></text>
+</g>
+<g >
+<title>void std::destroy_at&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; (521,712 samples, 0.05%)</title><rect x="501.9" y="357" width="0.4" height="15.0" fill="rgb(224,88,21)" rx="2" ry="2" />
+<text  x="504.92" y="367.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;int, std::allocator&lt;int&gt; &gt;::_Vector_impl::_Vector_impl (379,832 samples, 0.04%)</title><rect x="700.0" y="517" width="0.3" height="15.0" fill="rgb(236,142,34)" rx="2" ry="2" />
+<text  x="702.96" y="527.5" ></text>
+</g>
+<g >
+<title>__dynamic_cast (333,656 samples, 0.03%)</title><rect x="735.8" y="517" width="0.3" height="15.0" fill="rgb(227,102,24)" rx="2" ry="2" />
+<text  x="738.84" y="527.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt; &gt;::construct&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; const&amp;&gt; (194,069 samples, 0.02%)</title><rect x="104.6" y="325" width="0.2" height="15.0" fill="rgb(216,54,12)" rx="2" ry="2" />
+<text  x="107.61" y="335.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_const_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;::_Rb_tree_const_iterator (508,100 samples, 0.05%)</title><rect x="766.9" y="677" width="0.4" height="15.0" fill="rgb(227,103,24)" rx="2" ry="2" />
+<text  x="769.86" y="687.5" ></text>
+</g>
+<g >
+<title>void ns3::Callback&lt;void, ns3::SpectrumValue const&amp;&gt;::Callback&lt;void  (324,769 samples, 0.03%)</title><rect x="611.9" y="421" width="0.3" height="15.0" fill="rgb(221,75,18)" rx="2" ry="2" />
+<text  x="614.94" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::Simulator::Now (245,134 samples, 0.03%)</title><rect x="428.0" y="261" width="0.2" height="15.0" fill="rgb(240,164,39)" rx="2" ry="2" />
+<text  x="430.97" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::Packet::Packet (501,720 samples, 0.05%)</title><rect x="19.0" y="389" width="0.4" height="15.0" fill="rgb(230,115,27)" rx="2" ry="2" />
+<text  x="21.95" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteControlMessage&gt;::~Ptr (611,218 samples, 0.06%)</title><rect x="609.8" y="485" width="0.5" height="15.0" fill="rgb(208,17,4)" rx="2" ry="2" />
+<text  x="612.77" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::TypeId::TypeId (150,833 samples, 0.02%)</title><rect x="163.7" y="405" width="0.1" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="166.68" y="415.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Buffer::Data*, std::allocator&lt;ns3::Buffer::Data*&gt; &gt;::push_back (392,327 samples, 0.04%)</title><rect x="452.2" y="69" width="0.3" height="15.0" fill="rgb(234,137,32)" rx="2" ry="2" />
+<text  x="455.17" y="79.5" ></text>
+</g>
+<g >
+<title>double* std::__uninitialized_default_n&lt;double*, unsigned long&gt; (363,863 samples, 0.04%)</title><rect x="718.5" y="405" width="0.3" height="15.0" fill="rgb(231,123,29)" rx="2" ry="2" />
+<text  x="721.54" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::MapScheduler::Insert (194,393 samples, 0.02%)</title><rect x="637.7" y="485" width="0.1" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="640.66" y="495.5" ></text>
+</g>
+<g >
+<title>double* std::__niter_base&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; (236,463 samples, 0.02%)</title><rect x="647.9" y="373" width="0.2" height="15.0" fill="rgb(245,186,44)" rx="2" ry="2" />
+<text  x="650.92" y="383.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, ns3::DlInfoListElement_s, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt; &gt;::end (345,899 samples, 0.04%)</title><rect x="508.6" y="549" width="0.2" height="15.0" fill="rgb(222,78,18)" rx="2" ry="2" />
+<text  x="511.56" y="559.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_M_create_storage (158,373 samples, 0.02%)</title><rect x="203.4" y="357" width="0.1" height="15.0" fill="rgb(252,220,52)" rx="2" ry="2" />
+<text  x="206.35" y="367.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_M_get_insert_unique_pos (339,044 samples, 0.03%)</title><rect x="293.7" y="469" width="0.3" height="15.0" fill="rgb(243,177,42)" rx="2" ry="2" />
+<text  x="296.75" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::LteControlMessage, ns3::Empty, ns3::DefaultDeleter&lt;ns3::LteControlMessage&gt; &gt;::Unref (538,741 samples, 0.06%)</title><rect x="167.0" y="437" width="0.5" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="170.03" y="447.5" ></text>
+</g>
+<g >
+<title>std::operator== (152,835 samples, 0.02%)</title><rect x="394.8" y="549" width="0.1" height="15.0" fill="rgb(229,110,26)" rx="2" ry="2" />
+<text  x="397.76" y="559.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_M_destroy_node (595,644 samples, 0.06%)</title><rect x="233.1" y="389" width="0.5" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="236.14" y="399.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt; &gt; &gt;::find (2,516,735 samples, 0.26%)</title><rect x="432.8" y="325" width="2.0" height="15.0" fill="rgb(211,30,7)" rx="2" ry="2" />
+<text  x="435.79" y="335.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;std::_Rb_tree_iterator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, bool&gt; std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::emplace&lt;unsigned int const&amp;, ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp;&gt; (2,393,725 samples, 0.25%)</title><rect x="331.3" y="501" width="2.0" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="334.34" y="511.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::push_back (686,315 samples, 0.07%)</title><rect x="68.8" y="437" width="0.5" height="15.0" fill="rgb(222,79,18)" rx="2" ry="2" />
+<text  x="71.80" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Time::ToInteger (191,170 samples, 0.02%)</title><rect x="14.0" y="357" width="0.1" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="16.98" y="367.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::list (1,969,038 samples, 0.20%)</title><rect x="610.3" y="549" width="1.5" height="15.0" fill="rgb(236,145,34)" rx="2" ry="2" />
+<text  x="613.26" y="559.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::LteFlowId_t, std::pair&lt;ns3::LteFlowId_t const, ns3::FfMacSchedSapProvider::SchedDlRlcBufferReqParameters&gt;, std::_Select1st&lt;std::pair&lt;ns3::LteFlowId_t const, ns3::FfMacSchedSapProvider::SchedDlRlcBufferReqParameters&gt; &gt;, std::less&lt;ns3::LteFlowId_t&gt;, std::allocator&lt;std::pair&lt;ns3::LteFlowId_t const, ns3::FfMacSchedSapProvider::SchedDlRlcBufferReqParameters&gt; &gt; &gt;::find (1,508,586 samples, 0.16%)</title><rect x="181.3" y="453" width="1.2" height="15.0" fill="rgb(222,81,19)" rx="2" ry="2" />
+<text  x="184.29" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_lower_bound (2,003,615 samples, 0.21%)</title><rect x="273.8" y="437" width="1.7" height="15.0" fill="rgb(229,113,27)" rx="2" ry="2" />
+<text  x="276.84" y="447.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;unsigned char&gt;::allocate (352,577 samples, 0.04%)</title><rect x="692.8" y="405" width="0.3" height="15.0" fill="rgb(207,12,3)" rx="2" ry="2" />
+<text  x="695.85" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue&gt;::operator (158,925 samples, 0.02%)</title><rect x="744.7" y="549" width="0.2" height="15.0" fill="rgb(214,44,10)" rx="2" ry="2" />
+<text  x="747.75" y="559.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::Copy (1,306,624 samples, 0.13%)</title><rect x="118.0" y="517" width="1.0" height="15.0" fill="rgb(240,161,38)" rx="2" ry="2" />
+<text  x="121.00" y="527.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;::operator[] (193,866 samples, 0.02%)</title><rect x="173.3" y="437" width="0.1" height="15.0" fill="rgb(212,32,7)" rx="2" ry="2" />
+<text  x="176.28" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt;* std::__copy_move_a2&lt;true, ns3::Ptr&lt;ns3::PacketBurst&gt;*, ns3::Ptr&lt;ns3::PacketBurst&gt;*&gt; (458,200 samples, 0.05%)</title><rect x="119.8" y="437" width="0.4" height="15.0" fill="rgb(213,38,9)" rx="2" ry="2" />
+<text  x="122.80" y="447.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::vector (966,311 samples, 0.10%)</title><rect x="407.5" y="485" width="0.8" height="15.0" fill="rgb(239,156,37)" rx="2" ry="2" />
+<text  x="410.53" y="495.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;::_M_addr (422,566 samples, 0.04%)</title><rect x="759.9" y="645" width="0.3" height="15.0" fill="rgb(223,85,20)" rx="2" ry="2" />
+<text  x="762.87" y="655.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;4ul, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::_Tuple_impl&lt;ns3::Ptr&lt;ns3::SpectrumPhy&gt;&amp;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;&amp;, void&gt; (163,911 samples, 0.02%)</title><rect x="87.5" y="357" width="0.1" height="15.0" fill="rgb(208,17,4)" rx="2" ry="2" />
+<text  x="90.46" y="367.5" ></text>
+</g>
+<g >
+<title>std::__detail::_List_node_header::_List_node_header (159,922 samples, 0.02%)</title><rect x="497.8" y="501" width="0.1" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="500.82" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;2ul, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::_Tuple_impl (380,058 samples, 0.04%)</title><rect x="340.9" y="341" width="0.3" height="15.0" fill="rgb(231,121,29)" rx="2" ry="2" />
+<text  x="343.87" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::AntennaModel&gt;::operator= (192,452 samples, 0.02%)</title><rect x="342.4" y="517" width="0.2" height="15.0" fill="rgb(215,48,11)" rx="2" ry="2" />
+<text  x="345.41" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::FfMacSchedSapUser::SchedDlConfigIndParameters::~SchedDlConfigIndParameters (157,347 samples, 0.02%)</title><rect x="174.8" y="485" width="0.1" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="177.75" y="495.5" ></text>
+</g>
+<g >
+<title>std::_List_iterator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt;::_List_iterator (165,665 samples, 0.02%)</title><rect x="550.5" y="213" width="0.2" height="15.0" fill="rgb(231,119,28)" rx="2" ry="2" />
+<text  x="553.52" y="223.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; &gt;::operator* (614,873 samples, 0.06%)</title><rect x="348.1" y="533" width="0.5" height="15.0" fill="rgb(234,134,32)" rx="2" ry="2" />
+<text  x="351.07" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::~PacketBurst (410,769 samples, 0.04%)</title><rect x="653.7" y="373" width="0.3" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="656.68" y="383.5" ></text>
+</g>
+<g >
+<title>void std::_Function_base::_Base_manager&lt;std::_Bind&lt;void  (1,218,895 samples, 0.13%)</title><rect x="283.5" y="485" width="1.0" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="286.52" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;* std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_copy&lt;false, std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_Alloc_node&gt; (494,088 samples, 0.05%)</title><rect x="668.4" y="453" width="0.4" height="15.0" fill="rgb(251,212,50)" rx="2" ry="2" />
+<text  x="671.44" y="463.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::__niter_base&lt;unsigned char*&gt; (151,102 samples, 0.02%)</title><rect x="597.9" y="213" width="0.1" height="15.0" fill="rgb(229,111,26)" rx="2" ry="2" />
+<text  x="600.91" y="223.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;::_M_check_len (197,154 samples, 0.02%)</title><rect x="209.8" y="453" width="0.1" height="15.0" fill="rgb(210,23,5)" rx="2" ry="2" />
+<text  x="212.75" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::LteMiErrorModel::GetPcfichPdcchError (1,017,990 samples, 0.10%)</title><rect x="607.7" y="549" width="0.9" height="15.0" fill="rgb(229,114,27)" rx="2" ry="2" />
+<text  x="610.74" y="559.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumPhy::GetDevice (278,749 samples, 0.03%)</title><rect x="643.6" y="517" width="0.2" height="15.0" fill="rgb(236,146,35)" rx="2" ry="2" />
+<text  x="646.58" y="527.5" ></text>
+</g>
+<g >
+<title>unsigned char const* std::__niter_base&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; (262,111 samples, 0.03%)</title><rect x="126.9" y="293" width="0.3" height="15.0" fill="rgb(249,203,48)" rx="2" ry="2" />
+<text  x="129.94" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue&gt;::operator= (388,127 samples, 0.04%)</title><rect x="674.0" y="517" width="0.3" height="15.0" fill="rgb(220,71,17)" rx="2" ry="2" />
+<text  x="677.00" y="527.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::max_size (240,471 samples, 0.02%)</title><rect x="460.0" y="245" width="0.2" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="463.04" y="255.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::CqiListElement_s*, std::vector&lt;ns3::CqiListElement_s, std::allocator&lt;ns3::CqiListElement_s&gt; &gt; &gt; std::vector&lt;ns3::CqiListElement_s, std::allocator&lt;ns3::CqiListElement_s&gt; &gt;::insert&lt;__gnu_cxx::__normal_iterator&lt;ns3::CqiListElement_s*, std::vector&lt;ns3::CqiListElement_s, std::allocator&lt;ns3::CqiListElement_s&gt; &gt; &gt;, void&gt; (5,119,434 samples, 0.53%)</title><rect x="124.2" y="517" width="4.1" height="15.0" fill="rgb(235,140,33)" rx="2" ry="2" />
+<text  x="127.17" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::UlInfoListElement_s::UlInfoListElement_s (208,096 samples, 0.02%)</title><rect x="440.5" y="277" width="0.2" height="15.0" fill="rgb(211,29,7)" rx="2" ry="2" />
+<text  x="443.51" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::Callback&lt;void, ns3::SpectrumValue const&amp;&gt;::DoPeekImpl (161,751 samples, 0.02%)</title><rect x="577.1" y="501" width="0.2" height="15.0" fill="rgb(208,17,4)" rx="2" ry="2" />
+<text  x="580.13" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt;::~Ptr (274,415 samples, 0.03%)</title><rect x="389.1" y="549" width="0.2" height="15.0" fill="rgb(205,3,0)" rx="2" ry="2" />
+<text  x="392.07" y="559.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, unsigned short, std::_Identity&lt;unsigned short&gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;unsigned short&gt; &gt;::~_Rb_tree (141,564 samples, 0.01%)</title><rect x="195.2" y="469" width="0.1" height="15.0" fill="rgb(237,149,35)" rx="2" ry="2" />
+<text  x="198.18" y="479.5" ></text>
+</g>
+<g >
+<title>atan2f32x (314,439 samples, 0.03%)</title><rect x="65.7" y="485" width="0.2" height="15.0" fill="rgb(240,164,39)" rx="2" ry="2" />
+<text  x="68.68" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::operator= (148,008 samples, 0.02%)</title><rect x="93.8" y="437" width="0.1" height="15.0" fill="rgb(211,28,6)" rx="2" ry="2" />
+<text  x="96.76" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;int, std::allocator&lt;int&gt; &gt;::_Vector_impl::_Vector_impl (206,232 samples, 0.02%)</title><rect x="527.4" y="149" width="0.2" height="15.0" fill="rgb(236,142,34)" rx="2" ry="2" />
+<text  x="530.44" y="159.5" ></text>
+</g>
+<g >
+<title>double* std::__uninitialized_default_n_1&lt;true&gt;::__uninit_default_n&lt;double*, unsigned long&gt; (281,908 samples, 0.03%)</title><rect x="57.1" y="405" width="0.2" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="60.07" y="415.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::vector (198,351 samples, 0.02%)</title><rect x="679.1" y="501" width="0.2" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="682.10" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::UlDciListElement_s* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::UlDciListElement_s const*, std::vector&lt;ns3::UlDciListElement_s, std::allocator&lt;ns3::UlDciListElement_s&gt; &gt; &gt;, ns3::UlDciListElement_s*&gt; (160,843 samples, 0.02%)</title><rect x="228.2" y="421" width="0.1" height="15.0" fill="rgb(210,25,5)" rx="2" ry="2" />
+<text  x="231.19" y="431.5" ></text>
+</g>
+<g >
+<title>void std::_Function_base::_Base_manager&lt;std::_Bind&lt;void  (1,831,024 samples, 0.19%)</title><rect x="711.1" y="437" width="1.4" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="714.07" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned char const, ns3::LteUeMac::LcInfo&gt; &gt;::operator++ (126,827 samples, 0.01%)</title><rect x="569.2" y="325" width="0.1" height="15.0" fill="rgb(208,14,3)" rx="2" ry="2" />
+<text  x="572.22" y="335.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; const*, std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt;::__normal_iterator (271,510 samples, 0.03%)</title><rect x="382.5" y="501" width="0.2" height="15.0" fill="rgb(223,84,20)" rx="2" ry="2" />
+<text  x="385.47" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::lower_bound (163,786 samples, 0.02%)</title><rect x="82.5" y="485" width="0.1" height="15.0" fill="rgb(234,137,32)" rx="2" ry="2" />
+<text  x="85.49" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Bind&lt;void  (1,570,544 samples, 0.16%)</title><rect x="617.0" y="485" width="1.3" height="15.0" fill="rgb(253,221,52)" rx="2" ry="2" />
+<text  x="620.04" y="495.5" ></text>
+</g>
+<g >
+<title>double* std::__uninitialized_default_n_a&lt;double*, unsigned long, double&gt; (605,341 samples, 0.06%)</title><rect x="729.7" y="421" width="0.5" height="15.0" fill="rgb(248,199,47)" rx="2" ry="2" />
+<text  x="732.73" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::VendorSpecificListElement_s* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;ns3::VendorSpecificListElement_s const*, std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt; &gt;, ns3::VendorSpecificListElement_s*, ns3::VendorSpecificListElement_s&gt; (425,833 samples, 0.04%)</title><rect x="144.0" y="437" width="0.4" height="15.0" fill="rgb(210,23,5)" rx="2" ry="2" />
+<text  x="147.01" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Simulator::Now (316,257 samples, 0.03%)</title><rect x="408.6" y="517" width="0.2" height="15.0" fill="rgb(240,164,39)" rx="2" ry="2" />
+<text  x="411.59" y="527.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;std::is_constructible&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::pair&lt;ns3::TbId_t, ns3::tbInfo_t&gt; &gt;::value, std::pair&lt;std::_Rb_tree_iterator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, bool&gt; &gt;::type std::map&lt;ns3::TbId_t, ns3::tbInfo_t, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::insert&lt;std::pair&lt;ns3::TbId_t, ns3::tbInfo_t&gt; &gt; (3,302,857 samples, 0.34%)</title><rect x="526.2" y="341" width="2.7" height="15.0" fill="rgb(213,40,9)" rx="2" ry="2" />
+<text  x="529.23" y="351.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::size (149,208 samples, 0.02%)</title><rect x="219.5" y="421" width="0.2" height="15.0" fill="rgb(216,50,12)" rx="2" ry="2" />
+<text  x="222.54" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s* std::__do_uninit_copy&lt;ns3::DlInfoListElement_s*, ns3::DlInfoListElement_s*&gt; (508,420 samples, 0.05%)</title><rect x="206.5" y="421" width="0.4" height="15.0" fill="rgb(240,163,39)" rx="2" ry="2" />
+<text  x="209.53" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter&gt;::Unref (1,796,083 samples, 0.19%)</title><rect x="501.5" y="469" width="1.4" height="15.0" fill="rgb(221,78,18)" rx="2" ry="2" />
+<text  x="504.48" y="479.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, std::vector&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt;, std::allocator&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt;, std::allocator&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt;::find (151,942 samples, 0.02%)</title><rect x="99.2" y="469" width="0.1" height="15.0" fill="rgb(238,154,37)" rx="2" ry="2" />
+<text  x="102.20" y="479.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::splice (375,324 samples, 0.04%)</title><rect x="346.6" y="453" width="0.3" height="15.0" fill="rgb(220,70,16)" rx="2" ry="2" />
+<text  x="349.64" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::MakeEvent&lt;void  (331,747 samples, 0.03%)</title><rect x="308.3" y="437" width="0.3" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="311.31" y="447.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;double&gt;::deallocate (124,900 samples, 0.01%)</title><rect x="605.4" y="437" width="0.1" height="15.0" fill="rgb(223,83,20)" rx="2" ry="2" />
+<text  x="608.43" y="447.5" ></text>
+</g>
+<g >
+<title>cfree (218,014 samples, 0.02%)</title><rect x="764.7" y="581" width="0.2" height="15.0" fill="rgb(223,86,20)" rx="2" ry="2" />
+<text  x="767.74" y="591.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;::construct&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; (273,884 samples, 0.03%)</title><rect x="383.2" y="501" width="0.2" height="15.0" fill="rgb(224,89,21)" rx="2" ry="2" />
+<text  x="386.17" y="511.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::VendorSpecificListElement_s*&gt; (198,417 samples, 0.02%)</title><rect x="25.2" y="293" width="0.2" height="15.0" fill="rgb(236,143,34)" rx="2" ry="2" />
+<text  x="28.20" y="303.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::BuildDataListElement_s, std::allocator&lt;ns3::BuildDataListElement_s&gt; &gt;::push_back (306,330 samples, 0.03%)</title><rect x="100.7" y="469" width="0.3" height="15.0" fill="rgb(234,137,32)" rx="2" ry="2" />
+<text  x="103.75" y="479.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::DlInfoListElement_s*, std::vector&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt; &gt; std::copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::DlInfoListElement_s const*, std::vector&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;ns3::DlInfoListElement_s*, std::vector&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt; &gt; &gt; (331,514 samples, 0.03%)</title><rect x="206.2" y="469" width="0.2" height="15.0" fill="rgb(248,197,47)" rx="2" ry="2" />
+<text  x="209.16" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::GetSpectrumModel (154,473 samples, 0.02%)</title><rect x="656.2" y="517" width="0.2" height="15.0" fill="rgb(228,106,25)" rx="2" ry="2" />
+<text  x="659.24" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Packet&gt;::~Ptr (162,262 samples, 0.02%)</title><rect x="378.5" y="277" width="0.1" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="381.49" y="287.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt;::operator= (416,467 samples, 0.04%)</title><rect x="17.9" y="277" width="0.4" height="15.0" fill="rgb(222,80,19)" rx="2" ry="2" />
+<text  x="20.95" y="287.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_emplace_hint_unique&lt;unsigned int const&amp;, ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp;&gt; (1,489,049 samples, 0.15%)</title><rect x="331.5" y="469" width="1.2" height="15.0" fill="rgb(226,100,24)" rx="2" ry="2" />
+<text  x="334.51" y="479.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt; &gt; &gt;::destroy&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt; &gt; (274,522 samples, 0.03%)</title><rect x="291.8" y="501" width="0.2" height="15.0" fill="rgb(226,100,24)" rx="2" ry="2" />
+<text  x="294.80" y="511.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::operator= (485,199 samples, 0.05%)</title><rect x="648.7" y="469" width="0.4" height="15.0" fill="rgb(251,215,51)" rx="2" ry="2" />
+<text  x="651.67" y="479.5" ></text>
+</g>
+<g >
+<title>double* std::__copy_move_a1&lt;false, double const*, double*&gt; (169,338 samples, 0.02%)</title><rect x="72.4" y="373" width="0.1" height="15.0" fill="rgb(239,156,37)" rx="2" ry="2" />
+<text  x="75.41" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::UeSelected_s::operator= (384,654 samples, 0.04%)</title><rect x="134.5" y="469" width="0.3" height="15.0" fill="rgb(244,183,43)" rx="2" ry="2" />
+<text  x="137.52" y="479.5" ></text>
+</g>
+<g >
+<title>std::__detail::_List_node_header::_List_node_header (156,589 samples, 0.02%)</title><rect x="162.1" y="373" width="0.1" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="165.11" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;::_Vector_impl::_Vector_impl (303,807 samples, 0.03%)</title><rect x="514.3" y="517" width="0.2" height="15.0" fill="rgb(218,62,15)" rx="2" ry="2" />
+<text  x="517.26" y="527.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt;::push_back (303,575 samples, 0.03%)</title><rect x="456.5" y="309" width="0.3" height="15.0" fill="rgb(236,145,34)" rx="2" ry="2" />
+<text  x="459.53" y="319.5" ></text>
+</g>
+<g >
+<title>std::_Bit_iterator::operator* (161,884 samples, 0.02%)</title><rect x="182.9" y="485" width="0.1" height="15.0" fill="rgb(219,65,15)" rx="2" ry="2" />
+<text  x="185.88" y="495.5" ></text>
+</g>
+<g >
+<title>std::tuple_element&lt;0ul, std::tuple&lt;unsigned short const&amp;&gt; &gt;::type&amp; std::get&lt;0ul, unsigned short const&amp;&gt; (313,540 samples, 0.03%)</title><rect x="191.4" y="341" width="0.3" height="15.0" fill="rgb(209,19,4)" rx="2" ry="2" />
+<text  x="194.42" y="351.5" ></text>
+</g>
+<g >
+<title>std::tuple&lt;&gt; std::forward_as_tuple&lt;&gt; (471,585 samples, 0.05%)</title><rect x="46.6" y="613" width="0.4" height="15.0" fill="rgb(210,27,6)" rx="2" ry="2" />
+<text  x="49.63" y="623.5" ></text>
+</g>
+<g >
+<title>ns3::Packet::~Packet (351,823 samples, 0.04%)</title><rect x="612.9" y="357" width="0.3" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="615.93" y="367.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteCcmMacSapProvider*&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteCcmMacSapProvider*&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteCcmMacSapProvider*&gt; &gt; &gt;::_M_begin (163,406 samples, 0.02%)</title><rect x="458.1" y="245" width="0.1" height="15.0" fill="rgb(225,93,22)" rx="2" ry="2" />
+<text  x="461.08" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::~DlInfoListElement_s (617,189 samples, 0.06%)</title><rect x="132.6" y="405" width="0.5" height="15.0" fill="rgb(217,55,13)" rx="2" ry="2" />
+<text  x="135.59" y="415.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, ns3::LteEnbComponentCarrierManager::UeInfo, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt; &gt; &gt;::lower_bound (191,851 samples, 0.02%)</title><rect x="96.5" y="389" width="0.1" height="15.0" fill="rgb(236,144,34)" rx="2" ry="2" />
+<text  x="99.48" y="399.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt;::vector (411,592 samples, 0.04%)</title><rect x="107.3" y="373" width="0.3" height="15.0" fill="rgb(210,23,5)" rx="2" ry="2" />
+<text  x="110.29" y="383.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::PacketMetadata::Data*, std::allocator&lt;ns3::PacketMetadata::Data*&gt; &gt;::end (150,854 samples, 0.02%)</title><rect x="15.2" y="325" width="0.2" height="15.0" fill="rgb(250,211,50)" rx="2" ry="2" />
+<text  x="18.24" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultDeleter&lt;ns3::Packet&gt;::Delete (351,823 samples, 0.04%)</title><rect x="612.9" y="373" width="0.3" height="15.0" fill="rgb(231,123,29)" rx="2" ry="2" />
+<text  x="615.93" y="383.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;*, std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; (229,070 samples, 0.02%)</title><rect x="139.8" y="453" width="0.2" height="15.0" fill="rgb(205,0,0)" rx="2" ry="2" />
+<text  x="142.78" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::MacCeListElement_s* std::__do_uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::MacCeListElement_s*, std::vector&lt;ns3::MacCeListElement_s, std::allocator&lt;ns3::MacCeListElement_s&gt; &gt; &gt;, ns3::MacCeListElement_s*&gt; (806,979 samples, 0.08%)</title><rect x="128.9" y="437" width="0.6" height="15.0" fill="rgb(215,46,11)" rx="2" ry="2" />
+<text  x="131.87" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::LogComponent::IsEnabled (242,975 samples, 0.03%)</title><rect x="27.6" y="341" width="0.2" height="15.0" fill="rgb(214,43,10)" rx="2" ry="2" />
+<text  x="30.56" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::LogComponent::IsEnabled (163,744 samples, 0.02%)</title><rect x="453.2" y="69" width="0.2" height="15.0" fill="rgb(214,43,10)" rx="2" ry="2" />
+<text  x="456.25" y="79.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::HarqStatus_e* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::DlInfoListElement_s::HarqStatus_e const*, std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt; &gt;, ns3::DlInfoListElement_s::HarqStatus_e*&gt; (683,830 samples, 0.07%)</title><rect x="444.1" y="293" width="0.6" height="15.0" fill="rgb(235,140,33)" rx="2" ry="2" />
+<text  x="447.11" y="303.5" ></text>
+</g>
+<g >
+<title>std::_Function_base::_M_empty (129,184 samples, 0.01%)</title><rect x="579.8" y="389" width="0.1" height="15.0" fill="rgb(244,183,43)" rx="2" ry="2" />
+<text  x="582.83" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_M_get_insert_hint_unique_pos (534,094 samples, 0.06%)</title><rect x="293.7" y="485" width="0.4" height="15.0" fill="rgb(219,68,16)" rx="2" ry="2" />
+<text  x="296.68" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_Rb_tree (186,374 samples, 0.02%)</title><rect x="657.3" y="501" width="0.2" height="15.0" fill="rgb(252,219,52)" rx="2" ry="2" />
+<text  x="660.34" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::TypeId::TypeId (373,826 samples, 0.04%)</title><rect x="537.4" y="261" width="0.3" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="540.41" y="271.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::size (205,426 samples, 0.02%)</title><rect x="398.1" y="501" width="0.2" height="15.0" fill="rgb(211,32,7)" rx="2" ry="2" />
+<text  x="401.12" y="511.5" ></text>
+</g>
+<g >
+<title>unsigned short* std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;unsigned short const*, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, unsigned short*&gt; (422,036 samples, 0.04%)</title><rect x="217.6" y="389" width="0.3" height="15.0" fill="rgb(239,157,37)" rx="2" ry="2" />
+<text  x="220.57" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::Vector3D::GetLength (155,917 samples, 0.02%)</title><rect x="642.4" y="485" width="0.1" height="15.0" fill="rgb(211,31,7)" rx="2" ry="2" />
+<text  x="645.38" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Callback&lt;void, std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt;::Callback&lt;void  (245,024 samples, 0.03%)</title><rect x="516.3" y="469" width="0.2" height="15.0" fill="rgb(244,183,43)" rx="2" ry="2" />
+<text  x="519.25" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s* std::__uninitialized_copy&lt;false&gt;::__uninit_copy&lt;ns3::DlInfoListElement_s*, ns3::DlInfoListElement_s*&gt; (550,039 samples, 0.06%)</title><rect x="206.5" y="437" width="0.4" height="15.0" fill="rgb(248,199,47)" rx="2" ry="2" />
+<text  x="209.50" y="447.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, unsigned char*&gt; (650,532 samples, 0.07%)</title><rect x="687.7" y="389" width="0.5" height="15.0" fill="rgb(254,229,54)" rx="2" ry="2" />
+<text  x="690.72" y="399.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt; &gt;::find (1,085,935 samples, 0.11%)</title><rect x="241.6" y="485" width="0.9" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="244.62" y="495.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::__relocate_a&lt;unsigned char*, unsigned char*, std::allocator&lt;unsigned char&gt; &gt; (343,086 samples, 0.04%)</title><rect x="694.1" y="437" width="0.2" height="15.0" fill="rgb(233,131,31)" rx="2" ry="2" />
+<text  x="697.06" y="447.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;unsigned char&gt;::deallocate (197,176 samples, 0.02%)</title><rect x="693.2" y="421" width="0.2" height="15.0" fill="rgb(232,124,29)" rx="2" ry="2" />
+<text  x="696.23" y="431.5" ></text>
+</g>
+<g >
+<title>decltype  (292,231 samples, 0.03%)</title><rect x="440.4" y="293" width="0.3" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="443.44" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::Buffer::Data* const&amp; std::forward&lt;ns3::Buffer::Data* const&amp;&gt; (259,311 samples, 0.03%)</title><rect x="546.2" y="53" width="0.2" height="15.0" fill="rgb(250,209,50)" rx="2" ry="2" />
+<text  x="549.17" y="63.5" ></text>
+</g>
+<g >
+<title>ns3::operator+ (628,145 samples, 0.06%)</title><rect x="279.1" y="501" width="0.5" height="15.0" fill="rgb(244,182,43)" rx="2" ry="2" />
+<text  x="282.06" y="511.5" ></text>
+</g>
+<g >
+<title>std::tuple&lt;ns3::LteSpectrumPhy*&gt;::tuple&lt;ns3::LteSpectrumPhy*&amp;, true, true&gt; (668,783 samples, 0.07%)</title><rect x="306.3" y="437" width="0.6" height="15.0" fill="rgb(249,204,48)" rx="2" ry="2" />
+<text  x="309.31" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::PhichListElement_s, std::allocator&lt;ns3::PhichListElement_s&gt; &gt;::_Vector_base (266,878 samples, 0.03%)</title><rect x="227.7" y="437" width="0.2" height="15.0" fill="rgb(209,22,5)" rx="2" ry="2" />
+<text  x="230.69" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;ns3::DlDciListElement_s, std::allocator&lt;ns3::DlDciListElement_s&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;ns3::DlDciListElement_s, std::allocator&lt;ns3::DlDciListElement_s&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;ns3::DlDciListElement_s, std::allocator&lt;ns3::DlDciListElement_s&gt; &gt; &gt; &gt; &gt;::_M_begin (235,637 samples, 0.02%)</title><rect x="187.1" y="453" width="0.2" height="15.0" fill="rgb(212,32,7)" rx="2" ry="2" />
+<text  x="190.07" y="463.5" ></text>
+</g>
+<g >
+<title>void std::_Bind&lt;void  (2,105,662 samples, 0.22%)</title><rect x="15.5" y="613" width="1.6" height="15.0" fill="rgb(242,174,41)" rx="2" ry="2" />
+<text  x="18.45" y="623.5" ></text>
+</g>
+<g >
+<title>ns3::TimeStep (156,551 samples, 0.02%)</title><rect x="408.7" y="485" width="0.1" height="15.0" fill="rgb(242,171,41)" rx="2" ry="2" />
+<text  x="411.69" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s* std::__uninitialized_copy&lt;false&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::DlInfoListElement_s const*, std::vector&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt; &gt;, ns3::DlInfoListElement_s*&gt; (411,592 samples, 0.04%)</title><rect x="107.3" y="437" width="0.3" height="15.0" fill="rgb(225,93,22)" rx="2" ry="2" />
+<text  x="110.29" y="447.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;::empty (264,685 samples, 0.03%)</title><rect x="285.2" y="533" width="0.2" height="15.0" fill="rgb(238,154,36)" rx="2" ry="2" />
+<text  x="288.17" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_insert_node (433,572 samples, 0.04%)</title><rect x="335.3" y="373" width="0.4" height="15.0" fill="rgb(218,62,14)" rx="2" ry="2" />
+<text  x="338.32" y="383.5" ></text>
+</g>
+<g >
+<title>double* std::__uninitialized_default_n_a&lt;double*, unsigned long, double&gt; (197,197 samples, 0.02%)</title><rect x="646.6" y="373" width="0.2" height="15.0" fill="rgb(248,199,47)" rx="2" ry="2" />
+<text  x="649.59" y="383.5" ></text>
+</g>
+<g >
+<title>void  (323,953 samples, 0.03%)</title><rect x="581.2" y="357" width="0.2" height="15.0" fill="rgb(253,221,53)" rx="2" ry="2" />
+<text  x="584.15" y="367.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::CqiListElement_s, std::allocator&lt;ns3::CqiListElement_s&gt; &gt;::~vector (264,107 samples, 0.03%)</title><rect x="131.0" y="501" width="0.2" height="15.0" fill="rgb(221,76,18)" rx="2" ry="2" />
+<text  x="134.03" y="511.5" ></text>
+</g>
+<g >
+<title>std::__detail::_List_node_header::_List_node_header (193,791 samples, 0.02%)</title><rect x="162.6" y="357" width="0.2" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="165.60" y="367.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;0ul, ns3::LteInterference*, ns3::Ptr&lt;ns3::SpectrumValue const&gt;, unsigned int&gt;::_M_head (204,189 samples, 0.02%)</title><rect x="753.0" y="565" width="0.2" height="15.0" fill="rgb(244,180,43)" rx="2" ry="2" />
+<text  x="756.04" y="575.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::BuildDataListElement_s, std::allocator&lt;ns3::BuildDataListElement_s&gt; &gt;::vector (422,512 samples, 0.04%)</title><rect x="174.2" y="469" width="0.3" height="15.0" fill="rgb(225,95,22)" rx="2" ry="2" />
+<text  x="177.16" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt;::vector (159,784 samples, 0.02%)</title><rect x="478.2" y="293" width="0.1" height="15.0" fill="rgb(218,61,14)" rx="2" ry="2" />
+<text  x="481.18" y="303.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;int*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt; std::__niter_wrap&lt;__gnu_cxx::__normal_iterator&lt;int*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt;, int*&gt; (302,486 samples, 0.03%)</title><rect x="680.1" y="485" width="0.2" height="15.0" fill="rgb(252,218,52)" rx="2" ry="2" />
+<text  x="683.09" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::NixVector&gt;::Ptr (640,714 samples, 0.07%)</title><rect x="360.6" y="485" width="0.5" height="15.0" fill="rgb(248,201,48)" rx="2" ry="2" />
+<text  x="363.62" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::TbId_t, std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::_Select1st&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::_M_mbegin (247,566 samples, 0.03%)</title><rect x="529.2" y="293" width="0.2" height="15.0" fill="rgb(241,165,39)" rx="2" ry="2" />
+<text  x="532.22" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::DlCqiLteControlMessage::DlCqiLteControlMessage (999,999 samples, 0.10%)</title><rect x="592.3" y="277" width="0.8" height="15.0" fill="rgb(208,15,3)" rx="2" ry="2" />
+<text  x="595.26" y="287.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;::~_Vector_base (343,953 samples, 0.04%)</title><rect x="351.2" y="373" width="0.3" height="15.0" fill="rgb(233,133,31)" rx="2" ry="2" />
+<text  x="354.24" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt;::_Vector_base (157,554 samples, 0.02%)</title><rect x="132.1" y="485" width="0.1" height="15.0" fill="rgb(216,55,13)" rx="2" ry="2" />
+<text  x="135.12" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Ptr&lt;ns3::Object&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Object&gt; &gt; &gt;::vector (124,541 samples, 0.01%)</title><rect x="69.9" y="405" width="0.1" height="15.0" fill="rgb(237,147,35)" rx="2" ry="2" />
+<text  x="72.91" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::NixVector&gt;::Ptr (185,459 samples, 0.02%)</title><rect x="118.2" y="469" width="0.1" height="15.0" fill="rgb(248,201,48)" rx="2" ry="2" />
+<text  x="121.20" y="479.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;::pair&lt;unsigned short const&amp;, 0ul&gt; (537,895 samples, 0.06%)</title><rect x="191.4" y="357" width="0.4" height="15.0" fill="rgb(232,124,29)" rx="2" ry="2" />
+<text  x="194.39" y="367.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::copy&lt;__gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, unsigned char*&gt; (650,532 samples, 0.07%)</title><rect x="687.7" y="405" width="0.5" height="15.0" fill="rgb(241,168,40)" rx="2" ry="2" />
+<text  x="690.72" y="415.5" ></text>
+</g>
+<g >
+<title>void std::vector&lt;int, std::allocator&lt;int&gt; &gt;::_M_realloc_insert&lt;int const&amp;&gt; (226,433 samples, 0.02%)</title><rect x="121.9" y="517" width="0.2" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="124.94" y="527.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::LteUePhy::PssElement, std::allocator&lt;ns3::LteUePhy::PssElement&gt; &gt;::push_back (194,530 samples, 0.02%)</title><rect x="726.2" y="325" width="0.1" height="15.0" fill="rgb(219,64,15)" rx="2" ry="2" />
+<text  x="729.19" y="335.5" ></text>
+</g>
+<g >
+<title>__dynamic_cast (124,834 samples, 0.01%)</title><rect x="599.7" y="293" width="0.1" height="15.0" fill="rgb(227,102,24)" rx="2" ry="2" />
+<text  x="602.72" y="303.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::begin (899,872 samples, 0.09%)</title><rect x="760.7" y="693" width="0.7" height="15.0" fill="rgb(213,38,9)" rx="2" ry="2" />
+<text  x="763.66" y="703.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;int*&gt; (265,597 samples, 0.03%)</title><rect x="506.1" y="373" width="0.2" height="15.0" fill="rgb(235,139,33)" rx="2" ry="2" />
+<text  x="509.07" y="383.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::vector (240,017 samples, 0.02%)</title><rect x="54.0" y="501" width="0.2" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="56.97" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Function_base::_Base_manager&lt;std::_Bind&lt;void  (1,751,702 samples, 0.18%)</title><rect x="41.9" y="661" width="1.4" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="44.91" y="671.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_M_drop_node (312,339 samples, 0.03%)</title><rect x="394.4" y="405" width="0.2" height="15.0" fill="rgb(225,93,22)" rx="2" ry="2" />
+<text  x="397.38" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::LogComponent::IsEnabled (160,104 samples, 0.02%)</title><rect x="312.5" y="485" width="0.2" height="15.0" fill="rgb(214,43,10)" rx="2" ry="2" />
+<text  x="315.54" y="495.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, unsigned char*, unsigned char&gt; (407,753 samples, 0.04%)</title><rect x="584.8" y="261" width="0.3" height="15.0" fill="rgb(226,96,23)" rx="2" ry="2" />
+<text  x="587.79" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::VendorSpecificListElement_s* std::__copy_move_a2&lt;false, ns3::VendorSpecificListElement_s const*, ns3::VendorSpecificListElement_s*&gt; (143,131 samples, 0.01%)</title><rect x="26.1" y="229" width="0.1" height="15.0" fill="rgb(226,98,23)" rx="2" ry="2" />
+<text  x="29.08" y="239.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_M_destroy_node (269,825 samples, 0.03%)</title><rect x="394.4" y="389" width="0.2" height="15.0" fill="rgb(222,80,19)" rx="2" ry="2" />
+<text  x="397.38" y="399.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;&amp; std::__get_helper&lt;5ul, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;&gt; (584,178 samples, 0.06%)</title><rect x="757.5" y="581" width="0.5" height="15.0" fill="rgb(220,73,17)" rx="2" ry="2" />
+<text  x="760.53" y="591.5" ></text>
+</g>
+<g >
+<title>std::_Head_base&lt;0ul, ns3::LteSpectrumPhy*, false&gt;::_Head_base&lt;ns3::LteSpectrumPhy*&amp;&gt; (270,257 samples, 0.03%)</title><rect x="306.6" y="405" width="0.3" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="309.63" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::DlDciLteControlMessage&gt;::Ptr (124,599 samples, 0.01%)</title><rect x="534.0" y="341" width="0.1" height="15.0" fill="rgb(228,108,26)" rx="2" ry="2" />
+<text  x="537.04" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::Packet::GetSize (227,004 samples, 0.02%)</title><rect x="627.9" y="517" width="0.2" height="15.0" fill="rgb(240,163,39)" rx="2" ry="2" />
+<text  x="630.89" y="527.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::RarLteControlMessage::Rar, std::allocator&lt;ns3::RarLteControlMessage::Rar&gt; &gt;::list (154,430 samples, 0.02%)</title><rect x="166.9" y="421" width="0.1" height="15.0" fill="rgb(219,66,15)" rx="2" ry="2" />
+<text  x="169.88" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy::StartSubFrame (38,051,595 samples, 3.92%)</title><rect x="91.7" y="549" width="30.6" height="15.0" fill="rgb(234,136,32)" rx="2" ry="2" />
+<text  x="94.73" y="559.5" >ns..</text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;::_M_erase (7,179,158 samples, 0.74%)</title><rect x="376.5" y="517" width="5.8" height="15.0" fill="rgb(223,86,20)" rx="2" ry="2" />
+<text  x="379.54" y="527.5" ></text>
+</g>
+<g >
+<title>unsigned short* std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::_M_allocate_and_copy&lt;__gnu_cxx::__normal_iterator&lt;unsigned short const*, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; (142,016 samples, 0.01%)</title><rect x="140.6" y="453" width="0.1" height="15.0" fill="rgb(227,102,24)" rx="2" ry="2" />
+<text  x="143.59" y="463.5" ></text>
+</g>
+<g >
+<title>decltype  (184,474 samples, 0.02%)</title><rect x="293.3" y="421" width="0.2" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="296.35" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt;::_M_valptr (290,218 samples, 0.03%)</title><rect x="137.2" y="421" width="0.3" height="15.0" fill="rgb(249,206,49)" rx="2" ry="2" />
+<text  x="140.24" y="431.5" ></text>
+</g>
+<g >
+<title>std::tuple&lt;ns3::LteEnbPhy*, ns3::Ptr&lt;ns3::PacketBurst&gt; &gt;::~tuple (153,418 samples, 0.02%)</title><rect x="109.5" y="469" width="0.2" height="15.0" fill="rgb(221,75,18)" rx="2" ry="2" />
+<text  x="112.54" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;::operator[] (154,833 samples, 0.02%)</title><rect x="633.6" y="517" width="0.2" height="15.0" fill="rgb(212,32,7)" rx="2" ry="2" />
+<text  x="636.63" y="527.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::end (162,410 samples, 0.02%)</title><rect x="733.2" y="421" width="0.1" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="736.17" y="431.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;::_M_ptr (148,167 samples, 0.02%)</title><rect x="184.4" y="453" width="0.2" height="15.0" fill="rgb(219,67,16)" rx="2" ry="2" />
+<text  x="187.45" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Node::GetId (152,268 samples, 0.02%)</title><rect x="322.6" y="501" width="0.1" height="15.0" fill="rgb(234,135,32)" rx="2" ry="2" />
+<text  x="325.62" y="511.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_get_node (164,168 samples, 0.02%)</title><rect x="611.2" y="469" width="0.1" height="15.0" fill="rgb(247,194,46)" rx="2" ry="2" />
+<text  x="614.22" y="479.5" ></text>
+</g>
+<g >
+<title>void std::vector&lt;ns3::MacCeListElement_s, std::allocator&lt;ns3::MacCeListElement_s&gt; &gt;::_M_range_insert&lt;__gnu_cxx::__normal_iterator&lt;ns3::MacCeListElement_s*, std::vector&lt;ns3::MacCeListElement_s, std::allocator&lt;ns3::MacCeListElement_s&gt; &gt; &gt; &gt; (192,569 samples, 0.02%)</title><rect x="93.2" y="485" width="0.2" height="15.0" fill="rgb(225,92,22)" rx="2" ry="2" />
+<text  x="96.24" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, unsigned short, std::_Identity&lt;unsigned short&gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;unsigned short&gt; &gt;::end (202,904 samples, 0.02%)</title><rect x="462.7" y="341" width="0.1" height="15.0" fill="rgb(223,84,20)" rx="2" ry="2" />
+<text  x="465.65" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::HarqProcessInfoElement_t* std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;ns3::HarqProcessInfoElement_t const*, std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt;, ns3::HarqProcessInfoElement_t*&gt; (249,391 samples, 0.03%)</title><rect x="591.6" y="197" width="0.2" height="15.0" fill="rgb(210,26,6)" rx="2" ry="2" />
+<text  x="594.63" y="207.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;&amp; std::_Mu&lt;std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;, false, false&gt;::operator (246,808 samples, 0.03%)</title><rect x="751.7" y="597" width="0.2" height="15.0" fill="rgb(236,143,34)" rx="2" ry="2" />
+<text  x="754.72" y="607.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumSignalParameters::SpectrumSignalParameters (1,366,858 samples, 0.14%)</title><rect x="669.4" y="501" width="1.1" height="15.0" fill="rgb(219,67,16)" rx="2" ry="2" />
+<text  x="672.44" y="511.5" ></text>
+</g>
+<g >
+<title>unsigned long* std::__copy_move_a&lt;false, unsigned long*, unsigned long*&gt; (459,509 samples, 0.05%)</title><rect x="199.7" y="405" width="0.3" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="202.67" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::int64x64_t::Umul (203,418 samples, 0.02%)</title><rect x="389.8" y="469" width="0.1" height="15.0" fill="rgb(229,111,26)" rx="2" ry="2" />
+<text  x="392.76" y="479.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::allocate (474,197 samples, 0.05%)</title><rect x="237.5" y="325" width="0.4" height="15.0" fill="rgb(205,1,0)" rx="2" ry="2" />
+<text  x="240.55" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::EventImpl&gt;::Ptr (1,193,687 samples, 0.12%)</title><rect x="768.4" y="725" width="0.9" height="15.0" fill="rgb(239,157,37)" rx="2" ry="2" />
+<text  x="771.36" y="735.5" ></text>
+</g>
+<g >
+<title>ns3::TracedCallback&lt;ns3::Ptr&lt;ns3::MobilityModel const&gt;, ns3::Ptr&lt;ns3::MobilityModel const&gt;, double, double, double, double&gt;::operator (360,752 samples, 0.04%)</title><rect x="746.3" y="549" width="0.3" height="15.0" fill="rgb(253,225,53)" rx="2" ry="2" />
+<text  x="749.35" y="559.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_clear (778,661 samples, 0.08%)</title><rect x="609.6" y="533" width="0.7" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="612.63" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, unsigned char&gt; &gt;::_M_valptr (264,202 samples, 0.03%)</title><rect x="135.2" y="469" width="0.2" height="15.0" fill="rgb(213,40,9)" rx="2" ry="2" />
+<text  x="138.23" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::MakeEvent&lt;void  (1,515,135 samples, 0.16%)</title><rect x="340.0" y="469" width="1.2" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="342.96" y="479.5" ></text>
+</g>
+<g >
+<title>int* std::__copy_move_a1&lt;false, int const*, int*&gt; (237,769 samples, 0.02%)</title><rect x="399.2" y="453" width="0.2" height="15.0" fill="rgb(230,117,28)" rx="2" ry="2" />
+<text  x="402.18" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue const&gt;::Ptr (512,963 samples, 0.05%)</title><rect x="751.1" y="565" width="0.5" height="15.0" fill="rgb(254,229,54)" rx="2" ry="2" />
+<text  x="754.14" y="575.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; &gt; &gt;::_M_begin (516,673 samples, 0.05%)</title><rect x="522.8" y="309" width="0.5" height="15.0" fill="rgb(234,137,32)" rx="2" ry="2" />
+<text  x="525.84" y="319.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt;::_S_key (163,137 samples, 0.02%)</title><rect x="432.4" y="277" width="0.1" height="15.0" fill="rgb(224,91,21)" rx="2" ry="2" />
+<text  x="435.41" y="287.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_List_node&lt;ns3::UlDciLteControlMessage&gt; &gt; &gt;::construct&lt;ns3::UlDciLteControlMessage, ns3::UlDciLteControlMessage const&amp;&gt; (468,430 samples, 0.05%)</title><rect x="288.1" y="453" width="0.4" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="291.08" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::vector (284,703 samples, 0.03%)</title><rect x="478.0" y="277" width="0.2" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="480.95" y="287.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;is_member_pointer_v&lt;void  (221,466 samples, 0.02%)</title><rect x="116.3" y="469" width="0.2" height="15.0" fill="rgb(241,170,40)" rx="2" ry="2" />
+<text  x="119.33" y="479.5" ></text>
+</g>
+<g >
+<title>std::set&lt;unsigned short, std::less&lt;unsigned short&gt;, std::allocator&lt;unsigned short&gt; &gt;::~set (141,564 samples, 0.01%)</title><rect x="195.2" y="485" width="0.1" height="15.0" fill="rgb(242,173,41)" rx="2" ry="2" />
+<text  x="198.18" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::UniformRandomVariable::GetValue (968,608 samples, 0.10%)</title><rect x="608.7" y="533" width="0.8" height="15.0" fill="rgb(238,152,36)" rx="2" ry="2" />
+<text  x="611.72" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; &gt; &gt;::_M_end (165,287 samples, 0.02%)</title><rect x="523.3" y="309" width="0.1" height="15.0" fill="rgb(215,49,11)" rx="2" ry="2" />
+<text  x="526.25" y="319.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteCcmMacSapProvider*&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteCcmMacSapProvider*&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteCcmMacSapProvider*&gt; &gt; &gt;::find (1,417,571 samples, 0.15%)</title><rect x="458.0" y="261" width="1.2" height="15.0" fill="rgb(246,188,45)" rx="2" ry="2" />
+<text  x="461.05" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy*&amp; std::_Mu&lt;ns3::LteEnbPhy*, false, false&gt;::operator (495,567 samples, 0.05%)</title><rect x="48.8" y="597" width="0.4" height="15.0" fill="rgb(209,21,5)" rx="2" ry="2" />
+<text  x="51.76" y="607.5" ></text>
+</g>
+<g >
+<title>ns3::NoOpComponentCarrierManager::DoNotifyTxOpportunity (314,249 samples, 0.03%)</title><rect x="11.2" y="437" width="0.2" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="14.17" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; &gt;::operator* (287,801 samples, 0.03%)</title><rect x="522.2" y="341" width="0.2" height="15.0" fill="rgb(234,134,32)" rx="2" ry="2" />
+<text  x="525.17" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::HigherLayerSelected_s* std::__do_uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::HigherLayerSelected_s const*, std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt; &gt;, ns3::HigherLayerSelected_s*&gt; (356,634 samples, 0.04%)</title><rect x="442.7" y="245" width="0.3" height="15.0" fill="rgb(244,179,43)" rx="2" ry="2" />
+<text  x="445.72" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::SpectrumValue, ns3::Empty, ns3::DefaultDeleter&lt;ns3::SpectrumValue&gt; &gt;::Unref (196,986 samples, 0.02%)</title><rect x="326.0" y="485" width="0.1" height="15.0" fill="rgb(246,189,45)" rx="2" ry="2" />
+<text  x="328.98" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_Auto_node::_M_insert (470,384 samples, 0.05%)</title><rect x="335.3" y="389" width="0.4" height="15.0" fill="rgb(213,38,9)" rx="2" ry="2" />
+<text  x="338.29" y="399.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::BuildRarListElement_s, std::allocator&lt;ns3::BuildRarListElement_s&gt; &gt;::vector (274,244 samples, 0.03%)</title><rect x="174.5" y="469" width="0.2" height="15.0" fill="rgb(224,87,20)" rx="2" ry="2" />
+<text  x="177.50" y="479.5" ></text>
+</g>
+<g >
+<title>void std::__invoke_impl&lt;void, void  (894,532 samples, 0.09%)</title><rect x="440.2" y="389" width="0.7" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="443.22" y="399.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, unsigned char*&gt; (685,962 samples, 0.07%)</title><rect x="687.7" y="437" width="0.5" height="15.0" fill="rgb(227,104,25)" rx="2" ry="2" />
+<text  x="690.70" y="447.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;*, std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt; &gt; std::__copy_move_a&lt;true, __gnu_cxx::__normal_iterator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;*, std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;*, std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt; &gt; &gt; (1,411,841 samples, 0.15%)</title><rect x="621.5" y="485" width="1.2" height="15.0" fill="rgb(226,96,23)" rx="2" ry="2" />
+<text  x="624.55" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::operator== (3,609,110 samples, 0.37%)</title><rect x="747.1" y="533" width="2.9" height="15.0" fill="rgb(234,134,32)" rx="2" ry="2" />
+<text  x="750.08" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_M_deallocate (154,926 samples, 0.02%)</title><rect x="484.0" y="469" width="0.1" height="15.0" fill="rgb(240,162,38)" rx="2" ry="2" />
+<text  x="486.97" y="479.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt; &gt;::construct&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::piecewise_construct_t const&amp;, std::tuple&lt;unsigned short const&amp;&gt;, std::tuple&lt;&gt; &gt; (762,055 samples, 0.08%)</title><rect x="242.8" y="405" width="0.6" height="15.0" fill="rgb(249,206,49)" rx="2" ry="2" />
+<text  x="245.80" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_Auto_node::_Auto_node&lt;std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (644,555 samples, 0.07%)</title><rect x="83.0" y="405" width="0.5" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="86.02" y="415.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; std::copy&lt;__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; (160,870 samples, 0.02%)</title><rect x="482.6" y="293" width="0.2" height="15.0" fill="rgb(249,204,48)" rx="2" ry="2" />
+<text  x="485.63" y="303.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; std::copy&lt;__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; (1,146,176 samples, 0.12%)</title><rect x="647.2" y="405" width="0.9" height="15.0" fill="rgb(249,204,48)" rx="2" ry="2" />
+<text  x="650.19" y="415.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;double&gt; &gt;::deallocate (124,900 samples, 0.01%)</title><rect x="605.4" y="453" width="0.1" height="15.0" fill="rgb(236,143,34)" rx="2" ry="2" />
+<text  x="608.43" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::push_back (1,354,090 samples, 0.14%)</title><rect x="214.6" y="485" width="1.1" height="15.0" fill="rgb(215,50,11)" rx="2" ry="2" />
+<text  x="217.64" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;::cbegin (188,357 samples, 0.02%)</title><rect x="636.0" y="517" width="0.1" height="15.0" fill="rgb(230,116,27)" rx="2" ry="2" />
+<text  x="638.98" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::ObjectBase::ConstructSelf (3,133,932 samples, 0.32%)</title><rect x="540.4" y="277" width="2.5" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="543.39" y="287.5" ></text>
+</g>
+<g >
+<title>std::tuple&lt;ns3::LteUePhy*, unsigned int, unsigned int&gt;::tuple&lt;ns3::LteUePhy*&amp;, unsigned int&amp;, unsigned int&amp;, true, true&gt; (1,377,602 samples, 0.14%)</title><rect x="617.1" y="469" width="1.1" height="15.0" fill="rgb(208,17,4)" rx="2" ry="2" />
+<text  x="620.13" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::LteUePhy::SetSubChannelsForTransmission (8,727,549 samples, 0.90%)</title><rect x="673.8" y="549" width="7.0" height="15.0" fill="rgb(220,69,16)" rx="2" ry="2" />
+<text  x="676.79" y="559.5" ></text>
+</g>
+<g >
+<title>std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; &gt;::operator (166,879 samples, 0.02%)</title><rect x="523.9" y="277" width="0.2" height="15.0" fill="rgb(245,188,45)" rx="2" ry="2" />
+<text  x="526.94" y="287.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_destroy_node (192,269 samples, 0.02%)</title><rect x="776.8" y="357" width="0.2" height="15.0" fill="rgb(243,175,41)" rx="2" ry="2" />
+<text  x="779.82" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::LogComponent::IsEnabled (152,933 samples, 0.02%)</title><rect x="178.0" y="469" width="0.2" height="15.0" fill="rgb(214,43,10)" rx="2" ry="2" />
+<text  x="181.04" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::Ptr&lt;ns3::Object&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Object&gt; &gt; &gt;::_Vector_impl::_Vector_impl (302,930 samples, 0.03%)</title><rect x="447.1" y="229" width="0.2" height="15.0" fill="rgb(206,6,1)" rx="2" ry="2" />
+<text  x="450.09" y="239.5" ></text>
+</g>
+<g >
+<title>ns3::Time::GetTimeStep (451,024 samples, 0.05%)</title><rect x="338.8" y="453" width="0.4" height="15.0" fill="rgb(205,0,0)" rx="2" ry="2" />
+<text  x="341.83" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;* std::__copy_move&lt;true, false, std::random_access_iterator_tag&gt;::__copy_m&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;*, std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;*&gt; (2,293,325 samples, 0.24%)</title><rect x="349.8" y="437" width="1.9" height="15.0" fill="rgb(214,44,10)" rx="2" ry="2" />
+<text  x="352.83" y="447.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;unsigned short*, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;::__normal_iterator (164,811 samples, 0.02%)</title><rect x="479.3" y="261" width="0.1" height="15.0" fill="rgb(213,38,9)" rx="2" ry="2" />
+<text  x="482.31" y="271.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, double&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, double&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, double&gt; &gt; &gt;::_S_key (980,363 samples, 0.10%)</title><rect x="295.1" y="485" width="0.8" height="15.0" fill="rgb(234,133,32)" rx="2" ry="2" />
+<text  x="298.13" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, unsigned short, std::_Identity&lt;unsigned short&gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;unsigned short&gt; &gt;::_M_lower_bound (601,582 samples, 0.06%)</title><rect x="463.0" y="325" width="0.5" height="15.0" fill="rgb(209,18,4)" rx="2" ry="2" />
+<text  x="466.00" y="335.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;::_List_base (302,422 samples, 0.03%)</title><rect x="110.0" y="501" width="0.2" height="15.0" fill="rgb(230,115,27)" rx="2" ry="2" />
+<text  x="113.00" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Packet&gt;::operator (206,181 samples, 0.02%)</title><rect x="69.4" y="453" width="0.2" height="15.0" fill="rgb(224,88,21)" rx="2" ry="2" />
+<text  x="72.45" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue&gt; ns3::Copy&lt;ns3::SpectrumValue&gt; (1,772,766 samples, 0.18%)</title><rect x="654.4" y="517" width="1.5" height="15.0" fill="rgb(223,83,19)" rx="2" ry="2" />
+<text  x="657.44" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::LteInterference::StartRx (194,219 samples, 0.02%)</title><rect x="734.4" y="517" width="0.2" height="15.0" fill="rgb(213,37,9)" rx="2" ry="2" />
+<text  x="737.43" y="527.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt; &gt;::construct&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::pair&lt;ns3::TbId_t, ns3::tbInfo_t&gt; &gt; (979,889 samples, 0.10%)</title><rect x="526.8" y="245" width="0.8" height="15.0" fill="rgb(247,195,46)" rx="2" ry="2" />
+<text  x="529.82" y="255.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::TbId_t, std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::_Select1st&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::_M_end (205,386 samples, 0.02%)</title><rect x="529.4" y="309" width="0.2" height="15.0" fill="rgb(225,96,23)" rx="2" ry="2" />
+<text  x="532.42" y="319.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;1ul, ns3::Ptr&lt;ns3::SpectrumValue&gt;, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::~_Tuple_impl (361,973 samples, 0.04%)</title><rect x="666.2" y="421" width="0.3" height="15.0" fill="rgb(242,172,41)" rx="2" ry="2" />
+<text  x="669.22" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::EventImpl&gt;::Acquire (274,749 samples, 0.03%)</title><rect x="39.1" y="693" width="0.3" height="15.0" fill="rgb(229,112,26)" rx="2" ry="2" />
+<text  x="42.14" y="703.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::vector (780,494 samples, 0.08%)</title><rect x="584.5" y="277" width="0.6" height="15.0" fill="rgb(206,9,2)" rx="2" ry="2" />
+<text  x="587.49" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::RarLteControlMessage&gt; ns3::Create&lt;ns3::RarLteControlMessage&gt; (306,535 samples, 0.03%)</title><rect x="166.8" y="453" width="0.2" height="15.0" fill="rgb(245,188,44)" rx="2" ry="2" />
+<text  x="169.79" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Bind&lt;void  (153,418 samples, 0.02%)</title><rect x="109.5" y="485" width="0.2" height="15.0" fill="rgb(253,221,52)" rx="2" ry="2" />
+<text  x="112.54" y="495.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt;::destroy&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; (210,243 samples, 0.02%)</title><rect x="576.4" y="325" width="0.2" height="15.0" fill="rgb(230,118,28)" rx="2" ry="2" />
+<text  x="579.43" y="335.5" ></text>
+</g>
+<g >
+<title>void std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_M_construct_node&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; const&amp;&gt; (194,069 samples, 0.02%)</title><rect x="104.6" y="341" width="0.2" height="15.0" fill="rgb(231,119,28)" rx="2" ry="2" />
+<text  x="107.61" y="351.5" ></text>
+</g>
+<g >
+<title>operator new (161,120 samples, 0.02%)</title><rect x="564.3" y="101" width="0.1" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="567.27" y="111.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::TbId_t, std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::_Select1st&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::_M_lower_bound (669,791 samples, 0.07%)</title><rect x="507.7" y="517" width="0.5" height="15.0" fill="rgb(236,144,34)" rx="2" ry="2" />
+<text  x="510.67" y="527.5" ></text>
+</g>
+<g >
+<title>void std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::_M_realloc_insert&lt;unsigned short&gt; (376,292 samples, 0.04%)</title><rect x="102.2" y="437" width="0.3" height="15.0" fill="rgb(217,56,13)" rx="2" ry="2" />
+<text  x="105.17" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_M_copy (2,075,881 samples, 0.21%)</title><rect x="58.7" y="485" width="1.7" height="15.0" fill="rgb(226,98,23)" rx="2" ry="2" />
+<text  x="61.71" y="495.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::map (152,827 samples, 0.02%)</title><rect x="667.8" y="277" width="0.2" height="15.0" fill="rgb(242,171,40)" rx="2" ry="2" />
+<text  x="670.83" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::HarqProcessInfoElement_t* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::HarqProcessInfoElement_t const*, std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt;, ns3::HarqProcessInfoElement_t*&gt; (489,523 samples, 0.05%)</title><rect x="524.9" y="309" width="0.4" height="15.0" fill="rgb(233,131,31)" rx="2" ry="2" />
+<text  x="527.94" y="319.5" ></text>
+</g>
+<g >
+<title>void std::__invoke_impl&lt;void, ns3::Callback&lt;void, ns3::SpectrumValue const&amp;&gt;::Callback&lt;void  (18,815,322 samples, 1.94%)</title><rect x="468.6" y="437" width="15.2" height="15.0" fill="rgb(245,184,44)" rx="2" ry="2" />
+<text  x="471.65" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;0ul, ns3::LteEnbPhy*&gt;::_Tuple_impl&lt;ns3::LteEnbPhy*&amp;&gt; (267,164 samples, 0.03%)</title><rect x="282.8" y="453" width="0.2" height="15.0" fill="rgb(232,126,30)" rx="2" ry="2" />
+<text  x="285.79" y="463.5" ></text>
+</g>
+<g >
+<title>decltype (238,924 samples, 0.02%)</title><rect x="36.6" y="693" width="0.2" height="15.0" fill="rgb(220,73,17)" rx="2" ry="2" />
+<text  x="39.64" y="703.5" ></text>
+</g>
+<g >
+<title>ns3::LteUePhy::SetSubChannelsForTransmission (151,318 samples, 0.02%)</title><rect x="614.4" y="549" width="0.1" height="15.0" fill="rgb(220,69,16)" rx="2" ry="2" />
+<text  x="617.41" y="559.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;double&gt;::allocate (670,068 samples, 0.07%)</title><rect x="655.0" y="405" width="0.5" height="15.0" fill="rgb(221,76,18)" rx="2" ry="2" />
+<text  x="657.99" y="415.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;ns3::ByteTagListData*&gt; &gt;::construct&lt;ns3::ByteTagListData*, ns3::ByteTagListData* const&amp;&gt; (686,477 samples, 0.07%)</title><rect x="547.1" y="69" width="0.6" height="15.0" fill="rgb(248,199,47)" rx="2" ry="2" />
+<text  x="550.11" y="79.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, ns3::Ptr&lt;ns3::UeManager&gt; &gt; &gt;::_M_valptr (157,811 samples, 0.02%)</title><rect x="28.8" y="277" width="0.1" height="15.0" fill="rgb(227,105,25)" rx="2" ry="2" />
+<text  x="31.75" y="287.5" ></text>
+</g>
+<g >
+<title>unsigned long* std::__copy_move&lt;false, true, std::random_access_iterator_tag&gt;::__copy_m&lt;unsigned long, unsigned long&gt; (151,080 samples, 0.02%)</title><rect x="199.8" y="357" width="0.1" height="15.0" fill="rgb(252,219,52)" rx="2" ry="2" />
+<text  x="202.77" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultDeleter&lt;ns3::SpectrumValue&gt;::Delete (483,075 samples, 0.05%)</title><rect x="303.5" y="469" width="0.4" height="15.0" fill="rgb(222,79,19)" rx="2" ry="2" />
+<text  x="306.53" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::_M_check_len (765,012 samples, 0.08%)</title><rect x="480.4" y="261" width="0.7" height="15.0" fill="rgb(234,133,31)" rx="2" ry="2" />
+<text  x="483.44" y="271.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::SpectrumConverter&gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::SpectrumConverter&gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::SpectrumConverter&gt; &gt; &gt;::_M_lower_bound (497,417 samples, 0.05%)</title><rect x="81.2" y="485" width="0.4" height="15.0" fill="rgb(213,41,9)" rx="2" ry="2" />
+<text  x="84.22" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::lower_bound (233,935 samples, 0.02%)</title><rect x="109.0" y="437" width="0.2" height="15.0" fill="rgb(254,228,54)" rx="2" ry="2" />
+<text  x="111.99" y="447.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;int const, double&gt; &gt; &gt;::allocate (199,176 samples, 0.02%)</title><rect x="293.2" y="405" width="0.1" height="15.0" fill="rgb(253,222,53)" rx="2" ry="2" />
+<text  x="296.16" y="415.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;::deallocate (158,232 samples, 0.02%)</title><rect x="501.2" y="485" width="0.1" height="15.0" fill="rgb(229,111,26)" rx="2" ry="2" />
+<text  x="504.20" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_const_iterator&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt;::operator (160,407 samples, 0.02%)</title><rect x="328.6" y="501" width="0.1" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="331.59" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::CallbackImplBase* ns3::PeekPointer&lt;ns3::CallbackImplBase&gt; (161,751 samples, 0.02%)</title><rect x="577.1" y="485" width="0.2" height="15.0" fill="rgb(246,188,45)" rx="2" ry="2" />
+<text  x="580.13" y="495.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt; &gt;::allocate (380,371 samples, 0.04%)</title><rect x="363.3" y="437" width="0.3" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="366.34" y="447.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::allocate (190,227 samples, 0.02%)</title><rect x="191.1" y="373" width="0.1" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="194.05" y="383.5" ></text>
+</g>
+<g >
+<title>int const&amp; std::max&lt;int&gt; (162,598 samples, 0.02%)</title><rect x="425.5" y="213" width="0.1" height="15.0" fill="rgb(237,148,35)" rx="2" ry="2" />
+<text  x="428.50" y="223.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt; &gt; &gt;::find (2,397,524 samples, 0.25%)</title><rect x="432.9" y="309" width="1.9" height="15.0" fill="rgb(238,154,36)" rx="2" ry="2" />
+<text  x="435.89" y="319.5" ></text>
+</g>
+<g >
+<title>unsigned char const* std::__niter_base&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; (192,782 samples, 0.02%)</title><rect x="687.8" y="373" width="0.2" height="15.0" fill="rgb(249,203,48)" rx="2" ry="2" />
+<text  x="690.82" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Bit_iterator std::__copy_move_a1&lt;false, std::_Bit_iterator, std::_Bit_iterator&gt; (338,164 samples, 0.03%)</title><rect x="197.6" y="405" width="0.3" height="15.0" fill="rgb(230,117,28)" rx="2" ry="2" />
+<text  x="200.59" y="415.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt;::allocate (283,919 samples, 0.03%)</title><rect x="444.9" y="245" width="0.2" height="15.0" fill="rgb(232,124,29)" rx="2" ry="2" />
+<text  x="447.88" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::CqiListElement_s* std::__uninitialized_copy_a&lt;std::move_iterator&lt;ns3::CqiListElement_s*&gt;, ns3::CqiListElement_s*, ns3::CqiListElement_s&gt; (253,339 samples, 0.03%)</title><rect x="127.4" y="469" width="0.3" height="15.0" fill="rgb(205,3,0)" rx="2" ry="2" />
+<text  x="130.45" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::BuildDataListElement_s, std::allocator&lt;ns3::BuildDataListElement_s&gt; &gt;::_Vector_impl::_Vector_impl (312,863 samples, 0.03%)</title><rect x="142.7" y="421" width="0.3" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="145.72" y="431.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::VendorSpecificListElement_s&gt; (234,807 samples, 0.02%)</title><rect x="263.9" y="325" width="0.2" height="15.0" fill="rgb(207,11,2)" rx="2" ry="2" />
+<text  x="266.87" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::Object::Check (344,145 samples, 0.04%)</title><rect x="163.3" y="405" width="0.3" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="166.31" y="415.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::lower_bound (308,342 samples, 0.03%)</title><rect x="659.6" y="501" width="0.3" height="15.0" fill="rgb(247,197,47)" rx="2" ry="2" />
+<text  x="662.62" y="511.5" ></text>
+</g>
+<g >
+<title>void std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt;::_M_realloc_insert&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; const&amp;&gt; (3,097,204 samples, 0.32%)</title><rect x="210.7" y="469" width="2.5" height="15.0" fill="rgb(226,98,23)" rx="2" ry="2" />
+<text  x="213.73" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumSignalParametersDlCtrlFrame::~LteSpectrumSignalParametersDlCtrlFrame (191,802 samples, 0.02%)</title><rect x="344.3" y="453" width="0.1" height="15.0" fill="rgb(220,69,16)" rx="2" ry="2" />
+<text  x="347.27" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_M_create_storage (525,645 samples, 0.05%)</title><rect x="407.7" y="453" width="0.4" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="410.65" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::ByteTagList::Deallocate (1,415,797 samples, 0.15%)</title><rect x="546.8" y="101" width="1.1" height="15.0" fill="rgb(227,103,24)" rx="2" ry="2" />
+<text  x="549.79" y="111.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::~DlInfoListElement_s (429,894 samples, 0.04%)</title><rect x="445.6" y="325" width="0.4" height="15.0" fill="rgb(217,55,13)" rx="2" ry="2" />
+<text  x="448.63" y="335.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::construct&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, unsigned int const&amp;, ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp;&gt; (273,321 samples, 0.03%)</title><rect x="331.9" y="405" width="0.2" height="15.0" fill="rgb(254,229,54)" rx="2" ry="2" />
+<text  x="334.88" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumModel const&gt; const&amp; std::forward&lt;ns3::Ptr&lt;ns3::SpectrumModel const&gt; const&amp;&gt; (200,391 samples, 0.02%)</title><rect x="646.0" y="421" width="0.2" height="15.0" fill="rgb(209,19,4)" rx="2" ry="2" />
+<text  x="649.00" y="431.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::~vector (240,996 samples, 0.02%)</title><rect x="716.8" y="421" width="0.2" height="15.0" fill="rgb(225,92,22)" rx="2" ry="2" />
+<text  x="719.79" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::DoDispose (310,660 samples, 0.03%)</title><rect x="164.4" y="389" width="0.2" height="15.0" fill="rgb(242,172,41)" rx="2" ry="2" />
+<text  x="167.38" y="399.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::__copy_move_a2&lt;false, unsigned char const*, unsigned char*&gt; (149,127 samples, 0.02%)</title><rect x="442.4" y="197" width="0.2" height="15.0" fill="rgb(209,20,4)" rx="2" ry="2" />
+<text  x="445.44" y="207.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::HarqStatus_e* std::uninitialized_fill_n&lt;ns3::DlInfoListElement_s::HarqStatus_e*, unsigned long, ns3::DlInfoListElement_s::HarqStatus_e&gt; (233,279 samples, 0.02%)</title><rect x="511.1" y="501" width="0.2" height="15.0" fill="rgb(251,216,51)" rx="2" ry="2" />
+<text  x="514.11" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumModel const&gt;::~Ptr (200,937 samples, 0.02%)</title><rect x="409.2" y="517" width="0.2" height="15.0" fill="rgb(218,61,14)" rx="2" ry="2" />
+<text  x="412.20" y="527.5" ></text>
+</g>
+<g >
+<title>double* std::__uninitialized_default_n&lt;double*, unsigned long&gt; (1,117,487 samples, 0.12%)</title><rect x="301.1" y="405" width="0.9" height="15.0" fill="rgb(231,123,29)" rx="2" ry="2" />
+<text  x="304.06" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;::operator (125,698 samples, 0.01%)</title><rect x="85.6" y="373" width="0.1" height="15.0" fill="rgb(245,186,44)" rx="2" ry="2" />
+<text  x="88.58" y="383.5" ></text>
+</g>
+<g >
+<title>std::this_thread::get_id (281,874 samples, 0.03%)</title><rect x="87.0" y="469" width="0.2" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="90.00" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::UlCqi_s::UlCqi_s (1,442,850 samples, 0.15%)</title><rect x="474.2" y="309" width="1.2" height="15.0" fill="rgb(243,175,41)" rx="2" ry="2" />
+<text  x="477.23" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;::Ptr (560,187 samples, 0.06%)</title><rect x="750.7" y="565" width="0.4" height="15.0" fill="rgb(250,208,49)" rx="2" ry="2" />
+<text  x="753.69" y="575.5" ></text>
+</g>
+<g >
+<title>std::map&lt;ns3::Scheduler::EventKey, ns3::EventImpl*, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::lower_bound (567,494 samples, 0.06%)</title><rect x="707.2" y="437" width="0.5" height="15.0" fill="rgb(238,153,36)" rx="2" ry="2" />
+<text  x="710.21" y="447.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt; &gt;::construct&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::piecewise_construct_t const&amp;, std::tuple&lt;unsigned short const&amp;&gt;, std::tuple&lt;&gt; &gt; (998,649 samples, 0.10%)</title><rect x="191.2" y="405" width="0.8" height="15.0" fill="rgb(249,206,49)" rx="2" ry="2" />
+<text  x="194.23" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt;::find (187,880 samples, 0.02%)</title><rect x="97.4" y="421" width="0.1" height="15.0" fill="rgb(219,68,16)" rx="2" ry="2" />
+<text  x="100.38" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_get_node (219,715 samples, 0.02%)</title><rect x="661.1" y="373" width="0.1" height="15.0" fill="rgb(221,75,17)" rx="2" ry="2" />
+<text  x="664.05" y="383.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::_S_relocate (387,343 samples, 0.04%)</title><rect x="481.1" y="261" width="0.3" height="15.0" fill="rgb(242,173,41)" rx="2" ry="2" />
+<text  x="484.05" y="271.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_end (202,902 samples, 0.02%)</title><rect x="273.7" y="437" width="0.1" height="15.0" fill="rgb(219,65,15)" rx="2" ry="2" />
+<text  x="276.68" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;::_Vector_base (125,047 samples, 0.01%)</title><rect x="525.3" y="325" width="0.1" height="15.0" fill="rgb(247,197,47)" rx="2" ry="2" />
+<text  x="528.34" y="335.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;::_M_allocate (194,495 samples, 0.02%)</title><rect x="209.6" y="453" width="0.1" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="212.56" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::operator= (403,446 samples, 0.04%)</title><rect x="586.2" y="261" width="0.3" height="15.0" fill="rgb(211,28,6)" rx="2" ry="2" />
+<text  x="589.21" y="271.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;::vector (850,937 samples, 0.09%)</title><rect x="524.9" y="341" width="0.7" height="15.0" fill="rgb(249,203,48)" rx="2" ry="2" />
+<text  x="527.91" y="351.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;std::is_constructible&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt;::value, std::pair&lt;std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, bool&gt; &gt;::type std::map&lt;ns3::Scheduler::EventKey, ns3::EventImpl*, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::insert&lt;std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (4,087,508 samples, 0.42%)</title><rect x="82.9" y="453" width="3.3" height="15.0" fill="rgb(211,29,7)" rx="2" ry="2" />
+<text  x="85.92" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt; &gt;::_Rb_tree (313,901 samples, 0.03%)</title><rect x="509.2" y="533" width="0.2" height="15.0" fill="rgb(225,92,22)" rx="2" ry="2" />
+<text  x="512.15" y="543.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;bool, std::allocator&lt;bool&gt; &gt;::push_back (418,154 samples, 0.04%)</title><rect x="196.5" y="485" width="0.3" height="15.0" fill="rgb(222,79,19)" rx="2" ry="2" />
+<text  x="199.51" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::HarqProcessInfoElement_t const* std::__niter_base&lt;ns3::HarqProcessInfoElement_t const*, std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; (470,519 samples, 0.05%)</title><rect x="353.1" y="389" width="0.3" height="15.0" fill="rgb(233,132,31)" rx="2" ry="2" />
+<text  x="356.07" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteControlMessage&gt;::Ptr (200,534 samples, 0.02%)</title><rect x="611.4" y="437" width="0.1" height="15.0" fill="rgb(222,81,19)" rx="2" ry="2" />
+<text  x="614.38" y="447.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;unsigned short&gt;::allocate (378,466 samples, 0.04%)</title><rect x="218.8" y="405" width="0.3" height="15.0" fill="rgb(237,149,35)" rx="2" ry="2" />
+<text  x="221.77" y="415.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Ptr&lt;ns3::Object&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Object&gt; &gt; &gt;::~vector (1,236,212 samples, 0.13%)</title><rect x="379.6" y="309" width="1.0" height="15.0" fill="rgb(223,83,19)" rx="2" ry="2" />
+<text  x="382.64" y="319.5" ></text>
+</g>
+<g >
+<title>unsigned short* std::__copy_move_a2&lt;false, unsigned short const*, unsigned short*&gt; (205,186 samples, 0.02%)</title><rect x="521.3" y="229" width="0.1" height="15.0" fill="rgb(230,115,27)" rx="2" ry="2" />
+<text  x="524.26" y="239.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::PacketBurst (1,613,776 samples, 0.17%)</title><rect x="160.9" y="437" width="1.3" height="15.0" fill="rgb(208,15,3)" rx="2" ry="2" />
+<text  x="163.94" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::LteMiErrorModel::MappingMiBler (755,586 samples, 0.08%)</title><rect x="486.5" y="533" width="0.6" height="15.0" fill="rgb(216,55,13)" rx="2" ry="2" />
+<text  x="489.53" y="543.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::operator= (845,523 samples, 0.09%)</title><rect x="318.7" y="453" width="0.7" height="15.0" fill="rgb(251,215,51)" rx="2" ry="2" />
+<text  x="321.69" y="463.5" ></text>
+</g>
+<g >
+<title>void std::destroy_at&lt;ns3::DlInfoListElement_s&gt; (1,186,954 samples, 0.12%)</title><rect x="256.0" y="421" width="0.9" height="15.0" fill="rgb(254,227,54)" rx="2" ry="2" />
+<text  x="258.98" y="431.5" ></text>
+</g>
+<g >
+<title>std::function&lt;void  (19,739,449 samples, 2.04%)</title><rect x="422.8" y="437" width="15.9" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="425.83" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::PacketTagList::Add (1,413,859 samples, 0.15%)</title><rect x="20.8" y="341" width="1.2" height="15.0" fill="rgb(248,197,47)" rx="2" ry="2" />
+<text  x="23.83" y="351.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::list (213,081 samples, 0.02%)</title><rect x="90.9" y="549" width="0.2" height="15.0" fill="rgb(236,145,34)" rx="2" ry="2" />
+<text  x="93.92" y="559.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy::CreatePuschCqiReport (5,488,789 samples, 0.57%)</title><rect x="477.0" y="325" width="4.4" height="15.0" fill="rgb(253,220,52)" rx="2" ry="2" />
+<text  x="480.01" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumSignalParameters::SpectrumSignalParameters (4,200,055 samples, 0.43%)</title><rect x="645.2" y="469" width="3.4" height="15.0" fill="rgb(219,67,16)" rx="2" ry="2" />
+<text  x="648.22" y="479.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_insert&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; const&amp;&gt; (413,599 samples, 0.04%)</title><rect x="230.2" y="389" width="0.3" height="15.0" fill="rgb(210,27,6)" rx="2" ry="2" />
+<text  x="233.19" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteUeMac::LcInfo&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteUeMac::LcInfo&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteUeMac::LcInfo&gt; &gt; &gt;::begin (392,398 samples, 0.04%)</title><rect x="571.2" y="309" width="0.3" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="574.20" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::TracedCallback&lt;ns3::Ptr&lt;ns3::SpectrumPhy const&gt;, ns3::Ptr&lt;ns3::SpectrumPhy const&gt;, double&gt;::operator (401,545 samples, 0.04%)</title><rect x="746.6" y="549" width="0.4" height="15.0" fill="rgb(234,134,32)" rx="2" ry="2" />
+<text  x="749.64" y="559.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_insert&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; const&amp;&gt; (154,939 samples, 0.02%)</title><rect x="464.2" y="485" width="0.1" height="15.0" fill="rgb(210,27,6)" rx="2" ry="2" />
+<text  x="467.16" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Angles::NormalizeAngles (351,340 samples, 0.04%)</title><rect x="702.9" y="517" width="0.3" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="705.95" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, unsigned char&gt; &gt;::_M_valptr (154,865 samples, 0.02%)</title><rect x="245.0" y="421" width="0.2" height="15.0" fill="rgb(213,40,9)" rx="2" ry="2" />
+<text  x="248.03" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::Packet::GetSize (399,735 samples, 0.04%)</title><rect x="367.7" y="517" width="0.3" height="15.0" fill="rgb(240,163,39)" rx="2" ry="2" />
+<text  x="370.70" y="527.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt;::end (193,090 samples, 0.02%)</title><rect x="257.4" y="501" width="0.2" height="15.0" fill="rgb(225,95,22)" rx="2" ry="2" />
+<text  x="260.45" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::~SpectrumValue (393,222 samples, 0.04%)</title><rect x="717.6" y="453" width="0.3" height="15.0" fill="rgb(247,193,46)" rx="2" ry="2" />
+<text  x="720.61" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::MobilityModel&gt;::Ptr (160,721 samples, 0.02%)</title><rect x="741.2" y="533" width="0.2" height="15.0" fill="rgb(213,37,8)" rx="2" ry="2" />
+<text  x="744.24" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_decrement (189,133 samples, 0.02%)</title><rect x="336.1" y="357" width="0.1" height="15.0" fill="rgb(238,152,36)" rx="2" ry="2" />
+<text  x="339.08" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::LteInterference::StartRx (4,413,510 samples, 0.46%)</title><rect x="727.9" y="517" width="3.6" height="15.0" fill="rgb(213,37,9)" rx="2" ry="2" />
+<text  x="730.91" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Bit_iterator::operator+= (153,737 samples, 0.02%)</title><rect x="198.6" y="421" width="0.1" height="15.0" fill="rgb(218,62,14)" rx="2" ry="2" />
+<text  x="201.61" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::MakeEvent&lt;void  (372,209 samples, 0.04%)</title><rect x="308.3" y="453" width="0.3" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="311.28" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::ByteTagListData*, std::allocator&lt;ns3::ByteTagListData*&gt; &gt;::empty (831,186 samples, 0.09%)</title><rect x="30.0" y="373" width="0.7" height="15.0" fill="rgb(236,144,34)" rx="2" ry="2" />
+<text  x="33.00" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;* std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_Alloc_node::operator (200,295 samples, 0.02%)</title><rect x="88.2" y="405" width="0.2" height="15.0" fill="rgb(217,55,13)" rx="2" ry="2" />
+<text  x="91.22" y="415.5" ></text>
+</g>
+<g >
+<title>double std::reduce&lt;__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, double&gt; (892,712 samples, 0.09%)</title><rect x="602.2" y="325" width="0.8" height="15.0" fill="rgb(218,62,15)" rx="2" ry="2" />
+<text  x="605.24" y="335.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned short const, double&gt; &gt;::operator (275,175 samples, 0.03%)</title><rect x="292.6" y="533" width="0.2" height="15.0" fill="rgb(246,191,45)" rx="2" ry="2" />
+<text  x="295.56" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; &gt; &gt;::_S_key (741,857 samples, 0.08%)</title><rect x="523.5" y="293" width="0.6" height="15.0" fill="rgb(210,26,6)" rx="2" ry="2" />
+<text  x="526.48" y="303.5" ></text>
+</g>
+<g >
+<title>void std::_Bind&lt;void  (5,321,712 samples, 0.55%)</title><rect x="11.2" y="645" width="4.3" height="15.0" fill="rgb(242,174,41)" rx="2" ry="2" />
+<text  x="14.17" y="655.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, bool&gt;::pair&lt;std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;&amp;, bool&gt; (187,042 samples, 0.02%)</title><rect x="338.1" y="421" width="0.2" height="15.0" fill="rgb(213,38,9)" rx="2" ry="2" />
+<text  x="341.15" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteUePhy&gt;::~Ptr (132,349 samples, 0.01%)</title><rect x="470.4" y="405" width="0.1" height="15.0" fill="rgb(227,105,25)" rx="2" ry="2" />
+<text  x="473.38" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::EnbMacMemberLteEnbPhySapUser::SubframeIndication (2,983,151 samples, 0.31%)</title><rect x="17.2" y="565" width="2.4" height="15.0" fill="rgb(252,216,51)" rx="2" ry="2" />
+<text  x="20.17" y="575.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::allocate (185,442 samples, 0.02%)</title><rect x="318.9" y="293" width="0.2" height="15.0" fill="rgb(230,118,28)" rx="2" ry="2" />
+<text  x="321.91" y="303.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt;::~vector (497,075 samples, 0.05%)</title><rect x="132.7" y="389" width="0.4" height="15.0" fill="rgb(246,189,45)" rx="2" ry="2" />
+<text  x="135.68" y="399.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::AttributeConstructionList::Item, std::allocator&lt;ns3::AttributeConstructionList::Item&gt; &gt;::_List_impl::_List_impl (877,007 samples, 0.09%)</title><rect x="539.4" y="245" width="0.7" height="15.0" fill="rgb(210,27,6)" rx="2" ry="2" />
+<text  x="542.35" y="255.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider::ReportBufferStatusParameters&gt; &gt;::_M_addr (164,024 samples, 0.02%)</title><rect x="570.6" y="229" width="0.1" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="573.60" y="239.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteNetDevice&gt;::Acquire (197,652 samples, 0.02%)</title><rect x="582.7" y="277" width="0.2" height="15.0" fill="rgb(223,87,20)" rx="2" ry="2" />
+<text  x="585.75" y="287.5" ></text>
+</g>
+<g >
+<title>std::set&lt;unsigned short, std::less&lt;unsigned short&gt;, std::allocator&lt;unsigned short&gt; &gt;::end (238,188 samples, 0.02%)</title><rect x="245.7" y="485" width="0.2" height="15.0" fill="rgb(242,171,41)" rx="2" ry="2" />
+<text  x="248.69" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt; &gt; &gt;::find (1,671,204 samples, 0.17%)</title><rect x="235.3" y="469" width="1.4" height="15.0" fill="rgb(222,81,19)" rx="2" ry="2" />
+<text  x="238.32" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_M_allocate (612,796 samples, 0.06%)</title><rect x="239.3" y="245" width="0.5" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="242.31" y="255.5" ></text>
+</g>
+<g >
+<title>unsigned long* std::__niter_base&lt;unsigned long*&gt; (159,817 samples, 0.02%)</title><rect x="248.3" y="389" width="0.2" height="15.0" fill="rgb(246,191,45)" rx="2" ry="2" />
+<text  x="251.33" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::operator!= (3,765,543 samples, 0.39%)</title><rect x="747.0" y="549" width="3.0" height="15.0" fill="rgb(215,46,11)" rx="2" ry="2" />
+<text  x="749.96" y="559.5" ></text>
+</g>
+<g >
+<title>ns3::BuildRarListElement_s* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::BuildRarListElement_s const*, std::vector&lt;ns3::BuildRarListElement_s, std::allocator&lt;ns3::BuildRarListElement_s&gt; &gt; &gt;, ns3::BuildRarListElement_s*&gt; (198,569 samples, 0.02%)</title><rect x="143.1" y="421" width="0.2" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="146.13" y="431.5" ></text>
+</g>
+<g >
+<title> (129,312 samples, 0.01%)</title><rect x="79.2" y="485" width="0.1" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="82.23" y="495.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::AttributeConstructionList::Item, std::allocator&lt;ns3::AttributeConstructionList::Item&gt; &gt;::list (421,055 samples, 0.04%)</title><rect x="447.7" y="261" width="0.4" height="15.0" fill="rgb(252,219,52)" rx="2" ry="2" />
+<text  x="450.75" y="271.5" ></text>
+</g>
+<g >
+<title>unsigned short* std::copy&lt;__gnu_cxx::__normal_iterator&lt;unsigned short const*, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, unsigned short*&gt; (534,449 samples, 0.06%)</title><rect x="521.1" y="277" width="0.4" height="15.0" fill="rgb(226,96,23)" rx="2" ry="2" />
+<text  x="524.06" y="287.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Ptr&lt;ns3::Object&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Object&gt; &gt; &gt;::~vector (328,685 samples, 0.03%)</title><rect x="77.4" y="325" width="0.3" height="15.0" fill="rgb(223,83,19)" rx="2" ry="2" />
+<text  x="80.43" y="335.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::TypeId::AttributeInformation, std::allocator&lt;ns3::TypeId::AttributeInformation&gt; &gt;::size (158,366 samples, 0.02%)</title><rect x="373.6" y="437" width="0.1" height="15.0" fill="rgb(230,117,28)" rx="2" ry="2" />
+<text  x="376.58" y="447.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;std::is_constructible&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt;::value, std::pair&lt;std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, bool&gt; &gt;::type std::map&lt;ns3::Scheduler::EventKey, ns3::EventImpl*, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::insert&lt;std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (5,466,153 samples, 0.56%)</title><rect x="333.9" y="437" width="4.4" height="15.0" fill="rgb(211,29,7)" rx="2" ry="2" />
+<text  x="336.90" y="447.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::end (505,490 samples, 0.05%)</title><rect x="317.9" y="389" width="0.4" height="15.0" fill="rgb(237,147,35)" rx="2" ry="2" />
+<text  x="320.90" y="399.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;*&gt; (229,070 samples, 0.02%)</title><rect x="139.8" y="437" width="0.2" height="15.0" fill="rgb(213,37,8)" rx="2" ry="2" />
+<text  x="142.78" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::TbId_t, std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::_Select1st&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::_M_mbegin (159,237 samples, 0.02%)</title><rect x="507.5" y="501" width="0.1" height="15.0" fill="rgb(241,165,39)" rx="2" ry="2" />
+<text  x="510.45" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Function_handler&lt;void  (31,621,347 samples, 3.26%)</title><rect x="579.9" y="389" width="25.5" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="582.93" y="399.5" >s..</text>
+</g>
+<g >
+<title>ns3::AttributeConstructionList::~AttributeConstructionList (315,373 samples, 0.03%)</title><rect x="372.0" y="501" width="0.2" height="15.0" fill="rgb(217,58,13)" rx="2" ry="2" />
+<text  x="374.97" y="511.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned int, ns3::TxSpectrumModelInfo, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt; &gt;::find (1,921,178 samples, 0.20%)</title><rect x="649.7" y="501" width="1.6" height="15.0" fill="rgb(208,16,3)" rx="2" ry="2" />
+<text  x="652.75" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::EventId::EventId (206,004 samples, 0.02%)</title><rect x="62.2" y="485" width="0.2" height="15.0" fill="rgb(206,4,1)" rx="2" ry="2" />
+<text  x="65.24" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt;::at (396,578 samples, 0.04%)</title><rect x="208.4" y="485" width="0.3" height="15.0" fill="rgb(229,111,26)" rx="2" ry="2" />
+<text  x="211.38" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::LteUePhy::SubframeIndication (107,909,732 samples, 11.13%)</title><rect x="614.6" y="565" width="86.8" height="15.0" fill="rgb(235,142,34)" rx="2" ry="2" />
+<text  x="617.63" y="575.5" >ns3::LteUe..</text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt;::_Vector_base (643,355 samples, 0.07%)</title><rect x="444.8" y="309" width="0.5" height="15.0" fill="rgb(208,17,4)" rx="2" ry="2" />
+<text  x="447.75" y="319.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::empty (157,851 samples, 0.02%)</title><rect x="722.5" y="517" width="0.1" height="15.0" fill="rgb(243,177,42)" rx="2" ry="2" />
+<text  x="725.52" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt;::find (1,524,725 samples, 0.16%)</title><rect x="171.0" y="437" width="1.2" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="174.02" y="447.5" ></text>
+</g>
+<g >
+<title>int&amp; std::vector&lt;int, std::allocator&lt;int&gt; &gt;::emplace_back&lt;int&gt; (148,897 samples, 0.02%)</title><rect x="347.2" y="517" width="0.1" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="350.19" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::LteAmc::GetCqiFromSpectralEfficiency (426,858 samples, 0.04%)</title><rect x="231.6" y="485" width="0.4" height="15.0" fill="rgb(208,17,4)" rx="2" ry="2" />
+<text  x="234.63" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_put_node (164,554 samples, 0.02%)</title><rect x="777.0" y="357" width="0.1" height="15.0" fill="rgb(240,162,38)" rx="2" ry="2" />
+<text  x="779.97" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst const&gt;::Ptr&lt;ns3::PacketBurst&gt; (197,139 samples, 0.02%)</title><rect x="612.5" y="549" width="0.1" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="615.49" y="559.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::operator= (892,964 samples, 0.09%)</title><rect x="604.4" y="309" width="0.7" height="15.0" fill="rgb(243,175,42)" rx="2" ry="2" />
+<text  x="607.38" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::IidManager::GetAttributeN (876,759 samples, 0.09%)</title><rect x="33.7" y="405" width="0.8" height="15.0" fill="rgb(232,125,30)" rx="2" ry="2" />
+<text  x="36.75" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapProvider::ReportBufferStatusParameters&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider::ReportBufferStatusParameters&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider::ReportBufferStatusParameters&gt; &gt; &gt;::_S_key (486,222 samples, 0.05%)</title><rect x="570.3" y="277" width="0.4" height="15.0" fill="rgb(241,167,40)" rx="2" ry="2" />
+<text  x="573.34" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::Now (240,092 samples, 0.02%)</title><rect x="485.3" y="517" width="0.2" height="15.0" fill="rgb(241,168,40)" rx="2" ry="2" />
+<text  x="488.33" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::MemberLteFfrSapProvider&lt;ns3::LteFrNoOpAlgorithm&gt;::GetAvailableUlRbg (191,473 samples, 0.02%)</title><rect x="232.3" y="485" width="0.1" height="15.0" fill="rgb(207,10,2)" rx="2" ry="2" />
+<text  x="235.25" y="495.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_assign_dispatch&lt;std::_List_const_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; (211,914 samples, 0.02%)</title><rect x="90.6" y="517" width="0.2" height="15.0" fill="rgb(237,148,35)" rx="2" ry="2" />
+<text  x="93.61" y="527.5" ></text>
+</g>
+<g >
+<title> (230,158 samples, 0.02%)</title><rect x="323.8" y="485" width="0.1" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="326.75" y="495.5" ></text>
+</g>
+<g >
+<title>unsigned short* std::__copy_move_a1&lt;false, unsigned short const*, unsigned short*&gt; (286,745 samples, 0.03%)</title><rect x="521.2" y="245" width="0.2" height="15.0" fill="rgb(236,144,34)" rx="2" ry="2" />
+<text  x="524.19" y="255.5" ></text>
+</g>
+<g >
+<title>void std::__invoke_impl&lt;void, void  (29,774,663 samples, 3.07%)</title><rect x="581.4" y="357" width="24.0" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="584.42" y="367.5" >v..</text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;* std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_create_node&lt;std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (644,555 samples, 0.07%)</title><rect x="83.0" y="389" width="0.5" height="15.0" fill="rgb(217,56,13)" rx="2" ry="2" />
+<text  x="86.02" y="399.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::_M_insert&lt;ns3::Ptr&lt;ns3::Packet&gt; const&amp;&gt; (228,148 samples, 0.02%)</title><rect x="118.5" y="469" width="0.2" height="15.0" fill="rgb(234,135,32)" rx="2" ry="2" />
+<text  x="121.47" y="479.5" ></text>
+</g>
+<g >
+<title>__log10_finite (323,658 samples, 0.03%)</title><rect x="739.2" y="517" width="0.3" height="15.0" fill="rgb(237,151,36)" rx="2" ry="2" />
+<text  x="742.19" y="527.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, bool&gt;::pair (160,600 samples, 0.02%)</title><rect x="664.6" y="453" width="0.1" height="15.0" fill="rgb(252,220,52)" rx="2" ry="2" />
+<text  x="667.56" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::LteUePhy::UeMeasurementsElement&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::LteUePhy::UeMeasurementsElement&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::LteUePhy::UeMeasurementsElement&gt; &gt; &gt;::find (242,538 samples, 0.03%)</title><rect x="726.4" y="309" width="0.2" height="15.0" fill="rgb(234,136,32)" rx="2" ry="2" />
+<text  x="729.36" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::LteMacSapProvider::TransmitPduParameters::~TransmitPduParameters (199,865 samples, 0.02%)</title><rect x="15.9" y="357" width="0.2" height="15.0" fill="rgb(223,83,19)" rx="2" ry="2" />
+<text  x="18.94" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::LteInterference*&amp; std::_Mu&lt;ns3::LteInterference*, false, false&gt;::operator (286,822 samples, 0.03%)</title><rect x="49.2" y="597" width="0.2" height="15.0" fill="rgb(232,126,30)" rx="2" ry="2" />
+<text  x="52.16" y="607.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt; &gt; &gt;::_M_begin (163,866 samples, 0.02%)</title><rect x="429.6" y="245" width="0.1" height="15.0" fill="rgb(247,193,46)" rx="2" ry="2" />
+<text  x="432.61" y="255.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;1ul, ns3::Ptr&lt;ns3::SpectrumValue const&gt;, unsigned int&gt;::_M_head (396,724 samples, 0.04%)</title><rect x="754.5" y="565" width="0.3" height="15.0" fill="rgb(248,198,47)" rx="2" ry="2" />
+<text  x="757.46" y="575.5" ></text>
+</g>
+<g >
+<title>std::__invoke_result&lt;void  (872,147,551 samples, 89.93%)</title><rect x="50.2" y="597" width="701.5" height="15.0" fill="rgb(240,163,39)" rx="2" ry="2" />
+<text  x="53.24" y="607.5" >std::__invoke_result&lt;void </text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, unsigned int&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt; &gt;::end (158,886 samples, 0.02%)</title><rect x="178.7" y="453" width="0.2" height="15.0" fill="rgb(249,203,48)" rx="2" ry="2" />
+<text  x="181.73" y="463.5" ></text>
+</g>
+<g >
+<title>double* std::__uninitialized_copy&lt;true&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, double*&gt; (335,852 samples, 0.03%)</title><rect x="606.6" y="437" width="0.3" height="15.0" fill="rgb(238,153,36)" rx="2" ry="2" />
+<text  x="609.62" y="447.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Buffer::Data*, std::allocator&lt;ns3::Buffer::Data*&gt; &gt;::empty (925,744 samples, 0.10%)</title><rect x="31.8" y="341" width="0.8" height="15.0" fill="rgb(221,77,18)" rx="2" ry="2" />
+<text  x="34.83" y="351.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::max_size (498,524 samples, 0.05%)</title><rect x="693.6" y="437" width="0.4" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="696.63" y="447.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;is_invocable_r_v&lt;void, void  (30,508,273 samples, 3.15%)</title><rect x="580.8" y="373" width="24.6" height="15.0" fill="rgb(243,178,42)" rx="2" ry="2" />
+<text  x="583.83" y="383.5" >s..</text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter&gt;::Unref (2,326,898 samples, 0.24%)</title><rect x="164.3" y="437" width="1.8" height="15.0" fill="rgb(221,78,18)" rx="2" ry="2" />
+<text  x="167.26" y="447.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; &gt;::_M_addr (126,016 samples, 0.01%)</title><rect x="522.3" y="293" width="0.1" height="15.0" fill="rgb(224,87,20)" rx="2" ry="2" />
+<text  x="525.30" y="303.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;double&gt;::deallocate (164,716 samples, 0.02%)</title><rect x="728.4" y="357" width="0.2" height="15.0" fill="rgb(223,83,20)" rx="2" ry="2" />
+<text  x="731.43" y="367.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt; &gt;::begin (189,215 samples, 0.02%)</title><rect x="179.3" y="453" width="0.2" height="15.0" fill="rgb(218,62,14)" rx="2" ry="2" />
+<text  x="182.33" y="463.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;::operator++ (165,053 samples, 0.02%)</title><rect x="415.9" y="517" width="0.1" height="15.0" fill="rgb(214,45,10)" rx="2" ry="2" />
+<text  x="418.87" y="527.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::MacCeListElement_s&gt; (796,900 samples, 0.08%)</title><rect x="264.8" y="421" width="0.6" height="15.0" fill="rgb(233,130,31)" rx="2" ry="2" />
+<text  x="267.80" y="431.5" ></text>
+</g>
+<g >
+<title>std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;* std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_create_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; const&amp;&gt; (154,939 samples, 0.02%)</title><rect x="464.2" y="469" width="0.1" height="15.0" fill="rgb(230,116,27)" rx="2" ry="2" />
+<text  x="467.16" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;0ul, ns3::LteUePhy*, unsigned int, unsigned int&gt;::_Tuple_impl&lt;ns3::LteUePhy*&amp;, unsigned int&amp;, unsigned int&amp;, void&gt; (1,139,526 samples, 0.12%)</title><rect x="617.3" y="453" width="0.9" height="15.0" fill="rgb(231,120,28)" rx="2" ry="2" />
+<text  x="620.26" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::HarqStatus_e* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;ns3::DlInfoListElement_s::HarqStatus_e const*, std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt; &gt;, ns3::DlInfoListElement_s::HarqStatus_e*, ns3::DlInfoListElement_s::HarqStatus_e&gt; (2,253,213 samples, 0.23%)</title><rect x="258.8" y="373" width="1.8" height="15.0" fill="rgb(235,140,33)" rx="2" ry="2" />
+<text  x="261.83" y="383.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::~_List_base (538,728 samples, 0.06%)</title><rect x="576.2" y="357" width="0.4" height="15.0" fill="rgb(221,74,17)" rx="2" ry="2" />
+<text  x="579.16" y="367.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;unsigned char*, unsigned char&gt; (237,950 samples, 0.02%)</title><rect x="686.4" y="437" width="0.1" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="689.35" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::operator- (347,823 samples, 0.04%)</title><rect x="642.5" y="501" width="0.3" height="15.0" fill="rgb(231,122,29)" rx="2" ry="2" />
+<text  x="645.51" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Bind&lt;void  (751,966 samples, 0.08%)</title><rect x="666.7" y="453" width="0.6" height="15.0" fill="rgb(253,221,52)" rx="2" ry="2" />
+<text  x="669.66" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::VendorSpecificListElement_s* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::VendorSpecificListElement_s const*, std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt; &gt;, ns3::VendorSpecificListElement_s*&gt; (386,345 samples, 0.04%)</title><rect x="144.0" y="421" width="0.4" height="15.0" fill="rgb(206,5,1)" rx="2" ry="2" />
+<text  x="147.04" y="431.5" ></text>
+</g>
+<g >
+<title>std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;::_M_valptr (561,256 samples, 0.06%)</title><rect x="500.2" y="501" width="0.5" height="15.0" fill="rgb(207,10,2)" rx="2" ry="2" />
+<text  x="503.22" y="511.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;unsigned short&gt;::_M_ptr (202,650 samples, 0.02%)</title><rect x="463.1" y="277" width="0.2" height="15.0" fill="rgb(217,56,13)" rx="2" ry="2" />
+<text  x="466.13" y="287.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;unsigned char&gt; &gt;::deallocate (197,176 samples, 0.02%)</title><rect x="693.2" y="437" width="0.2" height="15.0" fill="rgb(245,184,44)" rx="2" ry="2" />
+<text  x="696.23" y="447.5" ></text>
+</g>
+<g >
+<title>std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;* std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_create_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; const&amp;&gt; (564,216 samples, 0.06%)</title><rect x="318.8" y="341" width="0.5" height="15.0" fill="rgb(230,116,27)" rx="2" ry="2" />
+<text  x="321.81" y="351.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy_aux&lt;false&gt;::__destroy&lt;ns3::HigherLayerSelected_s*&gt; (151,525 samples, 0.02%)</title><rect x="255.6" y="309" width="0.1" height="15.0" fill="rgb(210,25,6)" rx="2" ry="2" />
+<text  x="258.57" y="319.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;double&gt; &gt;::deallocate (199,701 samples, 0.02%)</title><rect x="716.8" y="373" width="0.2" height="15.0" fill="rgb(236,143,34)" rx="2" ry="2" />
+<text  x="719.83" y="383.5" ></text>
+</g>
+<g >
+<title>atan2f32x (451,382 samples, 0.05%)</title><rect x="641.8" y="485" width="0.3" height="15.0" fill="rgb(240,164,39)" rx="2" ry="2" />
+<text  x="644.77" y="495.5" ></text>
+</g>
+<g >
+<title>std::operator== (155,056 samples, 0.02%)</title><rect x="294.3" y="517" width="0.2" height="15.0" fill="rgb(229,110,26)" rx="2" ry="2" />
+<text  x="297.33" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumModel const&gt;::Ptr (148,972 samples, 0.02%)</title><rect x="646.3" y="405" width="0.1" height="15.0" fill="rgb(232,125,30)" rx="2" ry="2" />
+<text  x="649.32" y="415.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::__uninitialized_default_n_a&lt;unsigned char*, unsigned long, unsigned char&gt; (957,537 samples, 0.10%)</title><rect x="460.2" y="245" width="0.8" height="15.0" fill="rgb(225,93,22)" rx="2" ry="2" />
+<text  x="463.23" y="255.5" ></text>
+</g>
+<g >
+<title>std::_Head_base&lt;0ul, ns3::LteInterference*, false&gt;::_Head_base&lt;ns3::LteInterference*&amp;&gt; (359,845 samples, 0.04%)</title><rect x="709.2" y="405" width="0.3" height="15.0" fill="rgb(246,192,46)" rx="2" ry="2" />
+<text  x="712.16" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt; &gt;::find (152,754 samples, 0.02%)</title><rect x="104.9" y="453" width="0.1" height="15.0" fill="rgb(214,44,10)" rx="2" ry="2" />
+<text  x="107.92" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; std::map&lt;ns3::TbId_t, ns3::tbInfo_t, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::emplace_hint&lt;std::pair&lt;ns3::TbId_t, ns3::tbInfo_t&gt; &gt; (2,727,119 samples, 0.28%)</title><rect x="384.1" y="517" width="2.2" height="15.0" fill="rgb(245,186,44)" rx="2" ry="2" />
+<text  x="387.08" y="527.5" ></text>
+</g>
+<g >
+<title>int* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;int const*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt;, int*, int&gt; (730,011 samples, 0.08%)</title><rect x="398.8" y="533" width="0.6" height="15.0" fill="rgb(205,0,0)" rx="2" ry="2" />
+<text  x="401.81" y="543.5" ></text>
+</g>
+<g >
+<title>std::function&lt;void  (1,369,617 samples, 0.14%)</title><rect x="439.8" y="437" width="1.1" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="442.84" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Callback&lt;void, ns3::Ptr&lt;ns3::Packet&gt; &gt;::operator (21,452,008 samples, 2.21%)</title><rect x="421.5" y="549" width="17.3" height="15.0" fill="rgb(207,10,2)" rx="2" ry="2" />
+<text  x="424.55" y="559.5" ></text>
+</g>
+<g >
+<title>double* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, double*, double&gt; (156,421 samples, 0.02%)</title><rect x="484.8" y="469" width="0.2" height="15.0" fill="rgb(222,79,19)" rx="2" ry="2" />
+<text  x="487.85" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Packet::Copy (2,016,224 samples, 0.21%)</title><rect x="624.0" y="517" width="1.7" height="15.0" fill="rgb(250,211,50)" rx="2" ry="2" />
+<text  x="627.03" y="527.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;is_member_pointer_v&lt;void  (5,779,283 samples, 0.60%)</title><rect x="708.1" y="501" width="4.6" height="15.0" fill="rgb(241,170,40)" rx="2" ry="2" />
+<text  x="711.05" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::LteNetDevice::GetNode (844,941 samples, 0.09%)</title><rect x="312.3" y="501" width="0.7" height="15.0" fill="rgb(229,112,26)" rx="2" ry="2" />
+<text  x="315.33" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Function_base::_Base_manager&lt;std::_Bind&lt;void  (6,361,481 samples, 0.66%)</title><rect x="772.1" y="597" width="5.1" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="775.11" y="607.5" ></text>
+</g>
+<g >
+<title>ns3::NoOpComponentCarrierManager::DoNotifyTxOpportunity (304,289 samples, 0.03%)</title><rect x="15.5" y="421" width="0.2" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="18.45" y="431.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::vector (190,812 samples, 0.02%)</title><rect x="266.7" y="389" width="0.2" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="269.72" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::LteRlcSpecificLteMacSapUser::NotifyTxOpportunity (304,289 samples, 0.03%)</title><rect x="15.5" y="405" width="0.2" height="15.0" fill="rgb(249,204,48)" rx="2" ry="2" />
+<text  x="18.45" y="415.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt;::~vector (802,126 samples, 0.08%)</title><rect x="256.3" y="389" width="0.6" height="15.0" fill="rgb(246,189,45)" rx="2" ry="2" />
+<text  x="259.29" y="399.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::begin (198,307 samples, 0.02%)</title><rect x="746.0" y="517" width="0.2" height="15.0" fill="rgb(206,6,1)" rx="2" ry="2" />
+<text  x="749.01" y="527.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::UlInfoListElement_s, std::allocator&lt;ns3::UlInfoListElement_s&gt; &gt;::clear (312,181 samples, 0.03%)</title><rect x="265.4" y="517" width="0.3" height="15.0" fill="rgb(212,33,8)" rx="2" ry="2" />
+<text  x="268.44" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy::StartSubFrame (314,249 samples, 0.03%)</title><rect x="11.2" y="565" width="0.2" height="15.0" fill="rgb(234,136,32)" rx="2" ry="2" />
+<text  x="14.17" y="575.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumPhy&gt;::operator bool (277,440 samples, 0.03%)</title><rect x="323.3" y="501" width="0.3" height="15.0" fill="rgb(210,27,6)" rx="2" ry="2" />
+<text  x="326.35" y="511.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::~vector (514,929 samples, 0.05%)</title><rect x="233.2" y="325" width="0.4" height="15.0" fill="rgb(225,92,22)" rx="2" ry="2" />
+<text  x="236.21" y="335.5" ></text>
+</g>
+<g >
+<title>double const&amp; const&amp; std::__get_helper&lt;0ul, double const&amp;, double const&amp;, double const&amp;&gt; (550,022 samples, 0.06%)</title><rect x="748.6" y="469" width="0.4" height="15.0" fill="rgb(236,143,34)" rx="2" ry="2" />
+<text  x="751.60" y="479.5" ></text>
+</g>
+<g >
+<title> (199,830 samples, 0.02%)</title><rect x="492.1" y="533" width="0.2" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="495.14" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt;::end (167,970 samples, 0.02%)</title><rect x="568.6" y="261" width="0.1" height="15.0" fill="rgb(254,228,54)" rx="2" ry="2" />
+<text  x="571.59" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::LteRlcSpecificLteMacSapUser::NotifyTxOpportunity (6,532,753 samples, 0.67%)</title><rect x="151.1" y="421" width="5.3" height="15.0" fill="rgb(249,204,48)" rx="2" ry="2" />
+<text  x="154.13" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::TypeId::GetParent (699,339 samples, 0.07%)</title><rect x="373.9" y="469" width="0.5" height="15.0" fill="rgb(211,29,7)" rx="2" ry="2" />
+<text  x="376.89" y="479.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::end (217,306 samples, 0.02%)</title><rect x="563.0" y="165" width="0.1" height="15.0" fill="rgb(211,29,6)" rx="2" ry="2" />
+<text  x="565.96" y="175.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue&gt;::operator= (399,056 samples, 0.04%)</title><rect x="728.7" y="501" width="0.3" height="15.0" fill="rgb(220,71,17)" rx="2" ry="2" />
+<text  x="731.73" y="511.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;::~pair (189,965 samples, 0.02%)</title><rect x="193.4" y="373" width="0.2" height="15.0" fill="rgb(208,15,3)" rx="2" ry="2" />
+<text  x="196.40" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt; &gt;::_M_valptr (193,132 samples, 0.02%)</title><rect x="676.0" y="421" width="0.1" height="15.0" fill="rgb(222,81,19)" rx="2" ry="2" />
+<text  x="678.99" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::Object::DoDelete (2,326,898 samples, 0.24%)</title><rect x="164.3" y="405" width="1.8" height="15.0" fill="rgb(212,34,8)" rx="2" ry="2" />
+<text  x="167.26" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumValueHelper::CreateTxPowerSpectralDensity (5,482,916 samples, 0.57%)</title><rect x="54.2" y="517" width="4.4" height="15.0" fill="rgb(250,209,50)" rx="2" ry="2" />
+<text  x="57.17" y="527.5" ></text>
+</g>
+<g >
+<title>double* std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, double*&gt; (205,537 samples, 0.02%)</title><rect x="606.7" y="405" width="0.2" height="15.0" fill="rgb(210,23,5)" rx="2" ry="2" />
+<text  x="609.72" y="415.5" ></text>
+</g>
+<g >
+<title> (310,011 samples, 0.03%)</title><rect x="734.6" y="517" width="0.3" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="737.62" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::Packet::Packet (2,947,073 samples, 0.30%)</title><rect x="359.1" y="501" width="2.4" height="15.0" fill="rgb(230,115,27)" rx="2" ry="2" />
+<text  x="362.09" y="511.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy_aux&lt;false&gt;::__destroy&lt;ns3::VendorSpecificListElement_s*&gt; (157,042 samples, 0.02%)</title><rect x="25.2" y="277" width="0.2" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="28.23" y="287.5" ></text>
+</g>
+<g >
+<title>double* std::__uninitialized_default_n_a&lt;double*, unsigned long, double&gt; (153,593 samples, 0.02%)</title><rect x="316.3" y="357" width="0.1" height="15.0" fill="rgb(248,199,47)" rx="2" ry="2" />
+<text  x="319.25" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteSpectrumSignalParametersDataFrame&gt; ns3::DynamicCast&lt;ns3::LteSpectrumSignalParametersDataFrame, ns3::SpectrumSignalParameters&gt; (654,107 samples, 0.07%)</title><rect x="734.9" y="533" width="0.5" height="15.0" fill="rgb(212,35,8)" rx="2" ry="2" />
+<text  x="737.87" y="543.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Callback&lt;void, unsigned short, unsigned char, unsigned int, unsigned long&gt;, std::allocator&lt;ns3::Callback&lt;void, unsigned short, unsigned char, unsigned int, unsigned long&gt; &gt; &gt;::begin (246,319 samples, 0.03%)</title><rect x="428.3" y="245" width="0.2" height="15.0" fill="rgb(235,142,34)" rx="2" ry="2" />
+<text  x="431.34" y="255.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt; &gt;::~_Rb_tree (314,365 samples, 0.03%)</title><rect x="509.4" y="533" width="0.3" height="15.0" fill="rgb(211,27,6)" rx="2" ry="2" />
+<text  x="512.43" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::VendorSpecificListElement_s* std::__uninitialized_copy&lt;false&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::VendorSpecificListElement_s const*, std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt; &gt;, ns3::VendorSpecificListElement_s*&gt; (598,518 samples, 0.06%)</title><rect x="475.6" y="261" width="0.5" height="15.0" fill="rgb(227,101,24)" rx="2" ry="2" />
+<text  x="478.64" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::Vector3D::GetLength (199,594 samples, 0.02%)</title><rect x="740.0" y="485" width="0.2" height="15.0" fill="rgb(211,31,7)" rx="2" ry="2" />
+<text  x="743.02" y="495.5" ></text>
+</g>
+<g >
+<title>std::function&lt;void  (75,554,587 samples, 7.79%)</title><rect x="515.9" y="517" width="60.7" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="518.86" y="527.5" >std::f..</text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; &gt; &gt;::begin (520,365 samples, 0.05%)</title><rect x="348.6" y="533" width="0.4" height="15.0" fill="rgb(227,102,24)" rx="2" ry="2" />
+<text  x="351.60" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::ObjectBase::ConstructSelf (2,631,536 samples, 0.27%)</title><rect x="448.3" y="261" width="2.1" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="451.25" y="271.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::__uninitialized_copy&lt;true&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, unsigned char*&gt; (371,349 samples, 0.04%)</title><rect x="584.8" y="229" width="0.3" height="15.0" fill="rgb(233,129,30)" rx="2" ry="2" />
+<text  x="587.82" y="239.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;::operator++ (269,003 samples, 0.03%)</title><rect x="222.9" y="453" width="0.2" height="15.0" fill="rgb(249,206,49)" rx="2" ry="2" />
+<text  x="225.86" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::LteUeMac::DoTransmitPdu (5,333,252 samples, 0.55%)</title><rect x="560.9" y="213" width="4.3" height="15.0" fill="rgb(208,15,3)" rx="2" ry="2" />
+<text  x="563.94" y="223.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;is_member_pointer_v&lt;void  (676,289 samples, 0.07%)</title><rect x="726.7" y="501" width="0.6" height="15.0" fill="rgb(241,170,40)" rx="2" ry="2" />
+<text  x="729.75" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::LteUePhy::GenerateMixedCqiReport (24,898,652 samples, 2.57%)</title><rect x="581.8" y="341" width="20.1" height="15.0" fill="rgb(229,112,26)" rx="2" ry="2" />
+<text  x="584.83" y="351.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::vector (259,580 samples, 0.03%)</title><rect x="688.8" y="437" width="0.2" height="15.0" fill="rgb(206,9,2)" rx="2" ry="2" />
+<text  x="691.82" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt;::operator= (1,864,456 samples, 0.19%)</title><rect x="634.3" y="421" width="1.5" height="15.0" fill="rgb(219,65,15)" rx="2" ry="2" />
+<text  x="637.32" y="431.5" ></text>
+</g>
+<g >
+<title> (236,363 samples, 0.02%)</title><rect x="375.3" y="517" width="0.2" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="378.34" y="527.5" ></text>
+</g>
+<g >
+<title>void std::__fill_a&lt;double*, double&gt; (356,463 samples, 0.04%)</title><rect x="403.8" y="373" width="0.3" height="15.0" fill="rgb(211,27,6)" rx="2" ry="2" />
+<text  x="406.77" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumSignalParametersDataFrame::Copy (6,331,179 samples, 0.65%)</title><rect x="644.2" y="517" width="5.1" height="15.0" fill="rgb(214,43,10)" rx="2" ry="2" />
+<text  x="647.19" y="527.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt;::size (159,421 samples, 0.02%)</title><rect x="150.2" y="405" width="0.2" height="15.0" fill="rgb(212,35,8)" rx="2" ry="2" />
+<text  x="153.22" y="415.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::end (262,399 samples, 0.03%)</title><rect x="714.6" y="469" width="0.3" height="15.0" fill="rgb(237,147,35)" rx="2" ry="2" />
+<text  x="717.65" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Tag::~Tag (149,528 samples, 0.02%)</title><rect x="561.3" y="181" width="0.1" height="15.0" fill="rgb(248,201,48)" rx="2" ry="2" />
+<text  x="564.26" y="191.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt; &gt;::allocate (313,319 samples, 0.03%)</title><rect x="626.6" y="437" width="0.2" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="629.59" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::LteFlowId_t, std::pair&lt;ns3::LteFlowId_t const, ns3::FfMacSchedSapProvider::SchedDlRlcBufferReqParameters&gt;, std::_Select1st&lt;std::pair&lt;ns3::LteFlowId_t const, ns3::FfMacSchedSapProvider::SchedDlRlcBufferReqParameters&gt; &gt;, std::less&lt;ns3::LteFlowId_t&gt;, std::allocator&lt;std::pair&lt;ns3::LteFlowId_t const, ns3::FfMacSchedSapProvider::SchedDlRlcBufferReqParameters&gt; &gt; &gt;::_S_key (488,547 samples, 0.05%)</title><rect x="181.8" y="421" width="0.4" height="15.0" fill="rgb(227,104,24)" rx="2" ry="2" />
+<text  x="184.81" y="431.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::begin (162,995 samples, 0.02%)</title><rect x="610.6" y="533" width="0.2" height="15.0" fill="rgb(214,45,10)" rx="2" ry="2" />
+<text  x="613.62" y="543.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;std::_List_node&lt;ns3::UlDciLteControlMessage&gt; &gt; &gt;::allocate (420,367 samples, 0.04%)</title><rect x="287.7" y="437" width="0.4" height="15.0" fill="rgb(219,66,15)" rx="2" ry="2" />
+<text  x="290.75" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Angles::Angles (311,344 samples, 0.03%)</title><rect x="113.2" y="469" width="0.2" height="15.0" fill="rgb(254,226,54)" rx="2" ry="2" />
+<text  x="116.18" y="479.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy_aux&lt;false&gt;::__destroy&lt;ns3::MacCeListElement_s*&gt; (796,900 samples, 0.08%)</title><rect x="264.8" y="437" width="0.6" height="15.0" fill="rgb(221,76,18)" rx="2" ry="2" />
+<text  x="267.80" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::AntennaModel&gt;::operator= (374,650 samples, 0.04%)</title><rect x="669.0" y="533" width="0.3" height="15.0" fill="rgb(215,48,11)" rx="2" ry="2" />
+<text  x="671.96" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt;::_M_get_Tp_allocator (152,962 samples, 0.02%)</title><rect x="132.7" y="373" width="0.1" height="15.0" fill="rgb(248,198,47)" rx="2" ry="2" />
+<text  x="135.71" y="383.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::ByteTagListData**, std::vector&lt;ns3::ByteTagListData*, std::allocator&lt;ns3::ByteTagListData*&gt; &gt; &gt;::__normal_iterator (214,988 samples, 0.02%)</title><rect x="553.8" y="181" width="0.2" height="15.0" fill="rgb(218,60,14)" rx="2" ry="2" />
+<text  x="556.81" y="191.5" ></text>
+</g>
+<g >
+<title>__cxa_finalize (155,299 samples, 0.02%)</title><rect x="35.5" y="709" width="0.2" height="15.0" fill="rgb(240,162,38)" rx="2" ry="2" />
+<text  x="38.54" y="719.5" ></text>
+</g>
+<g >
+<title>std::_List_const_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;::_List_const_iterator (158,022 samples, 0.02%)</title><rect x="464.0" y="501" width="0.2" height="15.0" fill="rgb(227,101,24)" rx="2" ry="2" />
+<text  x="467.03" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt;::_M_deallocate (148,463 samples, 0.02%)</title><rect x="445.8" y="277" width="0.1" height="15.0" fill="rgb(211,29,6)" rx="2" ry="2" />
+<text  x="448.76" y="287.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;std::is_constructible&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt;::value, std::pair&lt;std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, bool&gt; &gt;::type std::map&lt;ns3::Scheduler::EventKey, ns3::EventImpl*, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::insert&lt;std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (146,147 samples, 0.02%)</title><rect x="614.1" y="453" width="0.2" height="15.0" fill="rgb(211,29,7)" rx="2" ry="2" />
+<text  x="617.14" y="463.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; (318,404 samples, 0.03%)</title><rect x="661.4" y="325" width="0.2" height="15.0" fill="rgb(213,37,9)" rx="2" ry="2" />
+<text  x="664.36" y="335.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt; &gt;::construct&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::pair&lt;ns3::TbId_t, ns3::tbInfo_t&gt; &gt; (775,942 samples, 0.08%)</title><rect x="384.8" y="437" width="0.6" height="15.0" fill="rgb(247,195,46)" rx="2" ry="2" />
+<text  x="387.79" y="447.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Callback&lt;void, unsigned short, unsigned short, double, double, unsigned char&gt;, std::allocator&lt;ns3::Callback&lt;void, unsigned short, unsigned short, double, double, unsigned char&gt; &gt; &gt;::begin (372,850 samples, 0.04%)</title><rect x="600.6" y="293" width="0.3" height="15.0" fill="rgb(205,4,1)" rx="2" ry="2" />
+<text  x="603.64" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::LteRlcSm::DoReceivePdu (1,549,265 samples, 0.16%)</title><rect x="435.8" y="277" width="1.2" height="15.0" fill="rgb(239,160,38)" rx="2" ry="2" />
+<text  x="438.78" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::RlcTag::Serialize (197,148 samples, 0.02%)</title><rect x="31.0" y="405" width="0.2" height="15.0" fill="rgb(233,133,31)" rx="2" ry="2" />
+<text  x="34.01" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteControlMessage&gt;&amp; std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::emplace_back&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; const&amp;&gt; (898,249 samples, 0.09%)</title><rect x="610.8" y="517" width="0.7" height="15.0" fill="rgb(224,89,21)" rx="2" ry="2" />
+<text  x="613.82" y="527.5" ></text>
+</g>
+<g >
+<title>void std::_Construct&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; const&amp;&gt; (184,373 samples, 0.02%)</title><rect x="205.0" y="325" width="0.1" height="15.0" fill="rgb(206,8,1)" rx="2" ry="2" />
+<text  x="207.98" y="335.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_insert&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;&amp;&gt; (617,971 samples, 0.06%)</title><rect x="721.7" y="453" width="0.5" height="15.0" fill="rgb(227,101,24)" rx="2" ry="2" />
+<text  x="724.68" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::AttributeConstructionList::AttributeConstructionList (566,514 samples, 0.06%)</title><rect x="162.3" y="421" width="0.5" height="15.0" fill="rgb(231,122,29)" rx="2" ry="2" />
+<text  x="165.30" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::DlInfoListElement_s (411,592 samples, 0.04%)</title><rect x="107.3" y="389" width="0.3" height="15.0" fill="rgb(231,119,28)" rx="2" ry="2" />
+<text  x="110.29" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider::ReportBufferStatusParameters&gt; &gt;::operator* (283,168 samples, 0.03%)</title><rect x="568.8" y="325" width="0.2" height="15.0" fill="rgb(249,202,48)" rx="2" ry="2" />
+<text  x="571.79" y="335.5" ></text>
+</g>
+<g >
+<title>decltype  (367,864 samples, 0.04%)</title><rect x="363.7" y="437" width="0.3" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="366.67" y="447.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, bool&gt;::pair&lt;std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;&amp;, bool&gt; (153,072 samples, 0.02%)</title><rect x="664.4" y="437" width="0.1" height="15.0" fill="rgb(213,38,9)" rx="2" ry="2" />
+<text  x="667.40" y="447.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::VendorSpecificListElement_s*, ns3::VendorSpecificListElement_s&gt; (162,953 samples, 0.02%)</title><rect x="473.5" y="277" width="0.1" height="15.0" fill="rgb(207,12,3)" rx="2" ry="2" />
+<text  x="476.48" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultDeleter&lt;ns3::EventImpl&gt;::Delete (786,828 samples, 0.08%)</title><rect x="640.3" y="485" width="0.6" height="15.0" fill="rgb(240,163,39)" rx="2" ry="2" />
+<text  x="643.31" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::BuildDataListElement_s* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;ns3::BuildDataListElement_s const*, std::vector&lt;ns3::BuildDataListElement_s, std::allocator&lt;ns3::BuildDataListElement_s&gt; &gt; &gt;, ns3::BuildDataListElement_s*, ns3::BuildDataListElement_s&gt; (556,681 samples, 0.06%)</title><rect x="141.9" y="437" width="0.4" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="144.89" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;1ul, double const&amp;, double const&amp;&gt;::_M_head (323,243 samples, 0.03%)</title><rect x="748.2" y="437" width="0.2" height="15.0" fill="rgb(234,136,32)" rx="2" ry="2" />
+<text  x="751.18" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_M_drop_node (152,641 samples, 0.02%)</title><rect x="394.2" y="437" width="0.1" height="15.0" fill="rgb(225,93,22)" rx="2" ry="2" />
+<text  x="397.19" y="447.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;int&gt;::allocate (169,207 samples, 0.02%)</title><rect x="574.6" y="261" width="0.1" height="15.0" fill="rgb(212,34,8)" rx="2" ry="2" />
+<text  x="577.55" y="271.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;int const, double&gt; &gt;* std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_M_clone_node&lt;false, std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_Alloc_node&gt; (911,587 samples, 0.09%)</title><rect x="59.3" y="437" width="0.7" height="15.0" fill="rgb(228,109,26)" rx="2" ry="2" />
+<text  x="62.31" y="447.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::UlDciListElement_s, std::allocator&lt;ns3::UlDciListElement_s&gt; &gt;::push_back (234,296 samples, 0.02%)</title><rect x="105.9" y="469" width="0.1" height="15.0" fill="rgb(218,64,15)" rx="2" ry="2" />
+<text  x="108.85" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;::erase (2,911,768 samples, 0.30%)</title><rect x="633.8" y="533" width="2.3" height="15.0" fill="rgb(248,200,48)" rx="2" ry="2" />
+<text  x="636.79" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::Object::~Object (776,622 samples, 0.08%)</title><rect x="454.0" y="213" width="0.6" height="15.0" fill="rgb(229,110,26)" rx="2" ry="2" />
+<text  x="456.99" y="223.5" ></text>
+</g>
+<g >
+<title>ns3::int64x64_t::MulByInvert (359,204 samples, 0.04%)</title><rect x="406.2" y="469" width="0.3" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="409.19" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::operator= (1,990,186 samples, 0.21%)</title><rect x="646.9" y="437" width="1.6" height="15.0" fill="rgb(243,177,42)" rx="2" ry="2" />
+<text  x="649.87" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Vector3D::GetLength (422,570 samples, 0.04%)</title><rect x="66.1" y="485" width="0.3" height="15.0" fill="rgb(211,31,7)" rx="2" ry="2" />
+<text  x="69.09" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumModel::GetUid (126,136 samples, 0.01%)</title><rect x="79.6" y="517" width="0.2" height="15.0" fill="rgb(240,161,38)" rx="2" ry="2" />
+<text  x="82.65" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteSpectrumSignalParametersUlSrsFrame&gt;::Ptr (205,401 samples, 0.02%)</title><rect x="736.9" y="517" width="0.2" height="15.0" fill="rgb(223,84,20)" rx="2" ry="2" />
+<text  x="739.94" y="527.5" ></text>
+</g>
+<g >
+<title>[libc.so.6] (144,943 samples, 0.01%)</title><rect x="764.8" y="565" width="0.1" height="15.0" fill="rgb(223,84,20)" rx="2" ry="2" />
+<text  x="767.80" y="575.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;::__normal_iterator (155,390 samples, 0.02%)</title><rect x="318.2" y="373" width="0.1" height="15.0" fill="rgb(215,50,12)" rx="2" ry="2" />
+<text  x="321.18" y="383.5" ></text>
+</g>
+<g >
+<title>void std::destroy_at&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; (274,123 samples, 0.03%)</title><rect x="378.4" y="293" width="0.2" height="15.0" fill="rgb(224,88,21)" rx="2" ry="2" />
+<text  x="381.40" y="303.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt;::_M_erase (264,157 samples, 0.03%)</title><rect x="117.8" y="501" width="0.2" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="120.75" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::CallbackImpl&lt;void, unsigned short, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;::operator (1,320,674 samples, 0.14%)</title><rect x="725.6" y="501" width="1.1" height="15.0" fill="rgb(223,86,20)" rx="2" ry="2" />
+<text  x="728.60" y="511.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::resize (1,973,260 samples, 0.20%)</title><rect x="459.4" y="277" width="1.6" height="15.0" fill="rgb(213,38,9)" rx="2" ry="2" />
+<text  x="462.41" y="287.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;* std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::_M_create_node&lt;std::piecewise_construct_t const&amp;, std::tuple&lt;unsigned short const&amp;&gt;, std::tuple&lt;&gt; &gt; (922,589 samples, 0.10%)</title><rect x="242.7" y="437" width="0.7" height="15.0" fill="rgb(231,123,29)" rx="2" ry="2" />
+<text  x="245.68" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::HarqProcessInfoElement_t* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;ns3::HarqProcessInfoElement_t const*, std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt;, ns3::HarqProcessInfoElement_t*, ns3::HarqProcessInfoElement_t&gt; (419,766 samples, 0.04%)</title><rect x="591.5" y="261" width="0.3" height="15.0" fill="rgb(252,220,52)" rx="2" ry="2" />
+<text  x="594.49" y="271.5" ></text>
+</g>
+<g >
+<title>std::_Function_handler&lt;void  (73,612,890 samples, 7.59%)</title><rect x="517.4" y="421" width="59.2" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="520.39" y="431.5" >std::_..</text>
+</g>
+<g >
+<title>std::_Bit_const_iterator::_Bit_const_iterator (191,509 samples, 0.02%)</title><rect x="201.3" y="437" width="0.2" height="15.0" fill="rgb(225,95,22)" rx="2" ry="2" />
+<text  x="204.34" y="447.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned short const, double&gt; &gt;::_M_ptr (260,663 samples, 0.03%)</title><rect x="295.5" y="453" width="0.2" height="15.0" fill="rgb(210,27,6)" rx="2" ry="2" />
+<text  x="298.50" y="463.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;::operator* (284,432 samples, 0.03%)</title><rect x="410.6" y="501" width="0.2" height="15.0" fill="rgb(215,47,11)" rx="2" ry="2" />
+<text  x="413.55" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Buffer::Buffer (198,909 samples, 0.02%)</title><rect x="19.0" y="373" width="0.1" height="15.0" fill="rgb(254,226,54)" rx="2" ry="2" />
+<text  x="21.95" y="383.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;* std::__copy_move_a1&lt;true, std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;*, std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;*&gt; (148,381 samples, 0.02%)</title><rect x="117.1" y="453" width="0.1" height="15.0" fill="rgb(222,79,18)" rx="2" ry="2" />
+<text  x="120.11" y="463.5" ></text>
+</g>
+<g >
+<title>[libc.so.6] (149,521 samples, 0.02%)</title><rect x="212.9" y="277" width="0.1" height="15.0" fill="rgb(223,84,20)" rx="2" ry="2" />
+<text  x="215.88" y="287.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;std::__strip_reference_wrapper&lt;std::decay&lt;ns3::Scheduler::EventKey const&amp;&gt;::type&gt;::__type, std::__strip_reference_wrapper&lt;std::decay&lt;ns3::EventImpl* const&amp;&gt;::type&gt;::__type&gt; std::make_pair&lt;ns3::Scheduler::EventKey const&amp;, ns3::EventImpl* const&amp;&gt; (145,249 samples, 0.01%)</title><rect x="109.2" y="469" width="0.1" height="15.0" fill="rgb(235,141,33)" rx="2" ry="2" />
+<text  x="112.21" y="479.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::begin (232,377 samples, 0.02%)</title><rect x="165.4" y="357" width="0.2" height="15.0" fill="rgb(230,117,28)" rx="2" ry="2" />
+<text  x="168.45" y="367.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;1ul, ns3::Ptr&lt;ns3::PacketBurst&gt; &gt;::_Tuple_impl&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;&amp;&gt; (549,835 samples, 0.06%)</title><rect x="282.3" y="437" width="0.5" height="15.0" fill="rgb(247,194,46)" rx="2" ry="2" />
+<text  x="285.31" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt; &gt;::_M_lower_bound (778,887 samples, 0.08%)</title><rect x="180.3" y="437" width="0.6" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="183.31" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt;::~Ptr (156,408 samples, 0.02%)</title><rect x="281.5" y="421" width="0.1" height="15.0" fill="rgb(205,3,0)" rx="2" ry="2" />
+<text  x="284.47" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::CqiListElement_s* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::CqiListElement_s*, std::vector&lt;ns3::CqiListElement_s, std::allocator&lt;ns3::CqiListElement_s&gt; &gt; &gt;, ns3::CqiListElement_s*&gt; (1,085,784 samples, 0.11%)</title><rect x="92.1" y="453" width="0.8" height="15.0" fill="rgb(240,163,38)" rx="2" ry="2" />
+<text  x="95.06" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::LteInterference::ConditionallyEvaluateChunk (17,432,677 samples, 1.80%)</title><rect x="401.0" y="549" width="14.0" height="15.0" fill="rgb(243,177,42)" rx="2" ry="2" />
+<text  x="403.96" y="559.5" ></text>
+</g>
+<g >
+<title>std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; &gt; &gt;::operator (198,281 samples, 0.02%)</title><rect x="456.1" y="245" width="0.2" height="15.0" fill="rgb(252,217,51)" rx="2" ry="2" />
+<text  x="459.14" y="255.5" ></text>
+</g>
+<g >
+<title>void std::vector&lt;ns3::BuildDataListElement_s, std::allocator&lt;ns3::BuildDataListElement_s&gt; &gt;::_M_realloc_insert&lt;ns3::BuildDataListElement_s const&amp;&gt; (306,330 samples, 0.03%)</title><rect x="100.7" y="453" width="0.3" height="15.0" fill="rgb(238,153,36)" rx="2" ry="2" />
+<text  x="103.75" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter&gt;::Unref (201,024 samples, 0.02%)</title><rect x="382.2" y="453" width="0.1" height="15.0" fill="rgb(221,78,18)" rx="2" ry="2" />
+<text  x="385.15" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::_S_max_size (236,269 samples, 0.02%)</title><rect x="397.9" y="485" width="0.2" height="15.0" fill="rgb(228,109,26)" rx="2" ry="2" />
+<text  x="400.93" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::~SpectrumValue (199,623 samples, 0.02%)</title><rect x="656.1" y="469" width="0.1" height="15.0" fill="rgb(247,193,46)" rx="2" ry="2" />
+<text  x="659.05" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::DlInfoListElement_s (461,722 samples, 0.05%)</title><rect x="503.6" y="405" width="0.4" height="15.0" fill="rgb(231,119,28)" rx="2" ry="2" />
+<text  x="506.62" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::DlDciLteControlMessage::~DlDciLteControlMessage (321,995 samples, 0.03%)</title><rect x="610.0" y="421" width="0.2" height="15.0" fill="rgb(212,34,8)" rx="2" ry="2" />
+<text  x="612.97" y="431.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt; &gt;::destroy&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; (1,191,133 samples, 0.12%)</title><rect x="75.7" y="325" width="1.0" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="78.74" y="335.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;*, std::vector&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt; &gt; &gt; &gt; std::__copy_move_a&lt;true, __gnu_cxx::__normal_iterator&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;*, std::vector&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt; &gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;*, std::vector&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt; &gt; &gt; &gt; &gt; (1,780,222 samples, 0.18%)</title><rect x="290.1" y="485" width="1.4" height="15.0" fill="rgb(230,116,27)" rx="2" ry="2" />
+<text  x="293.06" y="495.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;unsigned short&gt; &gt;::allocate (378,103 samples, 0.04%)</title><rect x="520.1" y="277" width="0.3" height="15.0" fill="rgb(250,209,50)" rx="2" ry="2" />
+<text  x="523.12" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::HigherLayerSelected_s* std::__uninitialized_copy&lt;false&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::HigherLayerSelected_s const*, std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt; &gt;, ns3::HigherLayerSelected_s*&gt; (283,264 samples, 0.03%)</title><rect x="593.3" y="213" width="0.3" height="15.0" fill="rgb(251,215,51)" rx="2" ry="2" />
+<text  x="596.34" y="223.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, unsigned char*&gt; (151,453 samples, 0.02%)</title><rect x="92.8" y="341" width="0.1" height="15.0" fill="rgb(227,104,25)" rx="2" ry="2" />
+<text  x="95.82" y="351.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; std::copy&lt;__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; (455,373 samples, 0.05%)</title><rect x="317.3" y="389" width="0.3" height="15.0" fill="rgb(249,204,48)" rx="2" ry="2" />
+<text  x="320.26" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultSimulatorImpl::ScheduleWithContext (5,432,130 samples, 0.56%)</title><rect x="82.9" y="485" width="4.3" height="15.0" fill="rgb(253,222,53)" rx="2" ry="2" />
+<text  x="85.86" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, unsigned short, std::_Identity&lt;unsigned short&gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;unsigned short&gt; &gt;::_Rb_tree (311,875 samples, 0.03%)</title><rect x="194.9" y="469" width="0.3" height="15.0" fill="rgb(251,213,51)" rx="2" ry="2" />
+<text  x="197.93" y="479.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;unsigned char&gt;::deallocate (194,524 samples, 0.02%)</title><rect x="216.5" y="421" width="0.1" height="15.0" fill="rgb(232,124,29)" rx="2" ry="2" />
+<text  x="219.49" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::LtePhy::GetPacketBurst (15,706,938 samples, 1.62%)</title><rect x="623.9" y="549" width="12.7" height="15.0" fill="rgb(221,76,18)" rx="2" ry="2" />
+<text  x="626.94" y="559.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::PhichListElement_s*, ns3::PhichListElement_s&gt; (154,556 samples, 0.02%)</title><rect x="229.4" y="437" width="0.1" height="15.0" fill="rgb(250,209,50)" rx="2" ry="2" />
+<text  x="232.42" y="447.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt;::~vector (1,044,337 samples, 0.11%)</title><rect x="132.2" y="501" width="0.9" height="15.0" fill="rgb(213,39,9)" rx="2" ry="2" />
+<text  x="135.24" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Packet::Packet (2,100,998 samples, 0.22%)</title><rect x="152.9" y="373" width="1.6" height="15.0" fill="rgb(230,115,27)" rx="2" ry="2" />
+<text  x="155.85" y="383.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;bool, std::allocator&lt;bool&gt; &gt;::resize (689,758 samples, 0.07%)</title><rect x="100.1" y="469" width="0.6" height="15.0" fill="rgb(219,68,16)" rx="2" ry="2" />
+<text  x="103.13" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, unsigned char&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, unsigned char&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, unsigned char&gt; &gt; &gt;::find (1,162,445 samples, 0.12%)</title><rect x="244.5" y="469" width="0.9" height="15.0" fill="rgb(206,4,1)" rx="2" ry="2" />
+<text  x="247.50" y="479.5" ></text>
+</g>
+<g >
+<title>void std::_Construct&lt;double&gt; (202,964 samples, 0.02%)</title><rect x="301.8" y="373" width="0.1" height="15.0" fill="rgb(228,106,25)" rx="2" ry="2" />
+<text  x="304.77" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumModel const&gt;::Ptr (454,759 samples, 0.05%)</title><rect x="704.9" y="533" width="0.3" height="15.0" fill="rgb(232,125,30)" rx="2" ry="2" />
+<text  x="707.87" y="543.5" ></text>
+</g>
+<g >
+<title>std::function&lt;void  (28,352,327 samples, 2.92%)</title><rect x="441.1" y="517" width="22.8" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="444.13" y="527.5" >s..</text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::clear (1,046,140 samples, 0.11%)</title><rect x="377.8" y="341" width="0.9" height="15.0" fill="rgb(217,58,13)" rx="2" ry="2" />
+<text  x="380.84" y="351.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned int, ns3::SpectrumConverter, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::SpectrumConverter&gt; &gt; &gt;::find (1,206,198 samples, 0.12%)</title><rect x="330.2" y="501" width="1.0" height="15.0" fill="rgb(231,123,29)" rx="2" ry="2" />
+<text  x="333.19" y="511.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_insert&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; const&amp;&gt; (453,041 samples, 0.05%)</title><rect x="419.8" y="325" width="0.4" height="15.0" fill="rgb(210,27,6)" rx="2" ry="2" />
+<text  x="422.84" y="335.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::_M_default_initialize (232,224 samples, 0.02%)</title><rect x="316.2" y="373" width="0.2" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="319.22" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::SpectrumConverter&gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::SpectrumConverter&gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::SpectrumConverter&gt; &gt; &gt;::_M_lower_bound (587,425 samples, 0.06%)</title><rect x="330.7" y="469" width="0.4" height="15.0" fill="rgb(213,41,9)" rx="2" ry="2" />
+<text  x="333.66" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::MemberSchedSapProvider&lt;ns3::PfFfMacScheduler&gt;::SchedDlTriggerReq (9,997,060 samples, 1.03%)</title><rect x="94.5" y="501" width="8.1" height="15.0" fill="rgb(247,193,46)" rx="2" ry="2" />
+<text  x="97.52" y="511.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;::~_List_base (231,280 samples, 0.02%)</title><rect x="121.3" y="517" width="0.2" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="124.33" y="527.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt; &gt;::_M_ptr (157,058 samples, 0.02%)</title><rect x="298.4" y="389" width="0.1" height="15.0" fill="rgb(228,109,26)" rx="2" ry="2" />
+<text  x="301.40" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::SpectrumValue, ns3::Empty, ns3::DefaultDeleter&lt;ns3::SpectrumValue&gt; &gt;::Unref (318,182 samples, 0.03%)</title><rect x="728.8" y="485" width="0.2" height="15.0" fill="rgb(246,189,45)" rx="2" ry="2" />
+<text  x="731.79" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;0ul, ns3::LteSpectrumPhy*&gt;::_Tuple_impl&lt;ns3::LteSpectrumPhy*&amp;&gt; (466,575 samples, 0.05%)</title><rect x="306.5" y="421" width="0.4" height="15.0" fill="rgb(216,52,12)" rx="2" ry="2" />
+<text  x="309.48" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::EnbRrcMemberLteEnbCmacSapUser::AllocateTemporaryCellRnti (285,958 samples, 0.03%)</title><rect x="130.4" y="517" width="0.2" height="15.0" fill="rgb(238,156,37)" rx="2" ry="2" />
+<text  x="133.38" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::PacketTagList::CreateTagData (656,493 samples, 0.07%)</title><rect x="562.2" y="165" width="0.5" height="15.0" fill="rgb(233,130,31)" rx="2" ry="2" />
+<text  x="565.16" y="175.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt; &gt;::_M_begin (153,550 samples, 0.02%)</title><rect x="508.9" y="517" width="0.1" height="15.0" fill="rgb(241,166,39)" rx="2" ry="2" />
+<text  x="511.90" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::MemberLteUeCphySapUser&lt;ns3::LteUeRrc&gt;::RecvMasterInformationBlock (193,516 samples, 0.02%)</title><rect x="533.6" y="357" width="0.1" height="15.0" fill="rgb(223,82,19)" rx="2" ry="2" />
+<text  x="536.59" y="367.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::allocate (264,767 samples, 0.03%)</title><rect x="384.5" y="421" width="0.2" height="15.0" fill="rgb(241,170,40)" rx="2" ry="2" />
+<text  x="387.48" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::Simulator::Now (160,616 samples, 0.02%)</title><rect x="720.7" y="517" width="0.2" height="15.0" fill="rgb(240,164,39)" rx="2" ry="2" />
+<text  x="723.73" y="527.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::_M_move_assign (904,852 samples, 0.09%)</title><rect x="594.3" y="277" width="0.7" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="597.30" y="287.5" ></text>
+</g>
+<g >
+<title>std::tuple_element&lt;1ul, std::tuple&lt;ns3::MultiModelSpectrumChannel*, ns3::Ptr&lt;ns3::SpectrumValue&gt;, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt; &gt;::type&amp; std::get&lt;1ul, ns3::MultiModelSpectrumChannel*, ns3::Ptr&lt;ns3::SpectrumValue&gt;, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt; (546,406 samples, 0.06%)</title><rect x="755.1" y="597" width="0.4" height="15.0" fill="rgb(244,182,43)" rx="2" ry="2" />
+<text  x="758.05" y="607.5" ></text>
+</g>
+<g >
+<title>ns3::MapScheduler::IsEmpty (1,317,026 samples, 0.14%)</title><rect x="777.3" y="741" width="1.0" height="15.0" fill="rgb(227,102,24)" rx="2" ry="2" />
+<text  x="780.29" y="751.5" ></text>
+</g>
+<g >
+<title>std::_Bit_iterator std::copy&lt;std::_Bit_iterator, std::_Bit_iterator&gt; (786,893 samples, 0.08%)</title><rect x="197.4" y="437" width="0.6" height="15.0" fill="rgb(233,132,31)" rx="2" ry="2" />
+<text  x="200.38" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;::_Vector_impl::_Vector_impl (396,620 samples, 0.04%)</title><rect x="350.9" y="357" width="0.3" height="15.0" fill="rgb(218,62,15)" rx="2" ry="2" />
+<text  x="353.86" y="367.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::at (397,924 samples, 0.04%)</title><rect x="510.4" y="549" width="0.3" height="15.0" fill="rgb(220,69,16)" rx="2" ry="2" />
+<text  x="513.40" y="559.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::BuildDataListElement_s, std::allocator&lt;ns3::BuildDataListElement_s&gt; &gt;::push_back (3,724,637 samples, 0.38%)</title><rect x="202.3" y="485" width="3.0" height="15.0" fill="rgb(234,137,32)" rx="2" ry="2" />
+<text  x="205.32" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteControlMessage&gt;::Ptr (171,804 samples, 0.02%)</title><rect x="534.4" y="357" width="0.1" height="15.0" fill="rgb(222,81,19)" rx="2" ry="2" />
+<text  x="537.40" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::LteUePhy::CreateDlCqiFeedbackMessage (18,538,645 samples, 1.91%)</title><rect x="583.2" y="309" width="14.9" height="15.0" fill="rgb(215,49,11)" rx="2" ry="2" />
+<text  x="586.16" y="319.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_Auto_node::_Auto_node&lt;unsigned int const&amp;, ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp;&gt; (669,703 samples, 0.07%)</title><rect x="331.6" y="453" width="0.5" height="15.0" fill="rgb(209,20,4)" rx="2" ry="2" />
+<text  x="334.57" y="463.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;std::_List_node&lt;ns3::UlDciLteControlMessage&gt; &gt;::deallocate (164,519 samples, 0.02%)</title><rect x="291.0" y="309" width="0.2" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="294.05" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::LteControlMessage::LteControlMessage (179,623 samples, 0.02%)</title><rect x="421.0" y="325" width="0.1" height="15.0" fill="rgb(214,43,10)" rx="2" ry="2" />
+<text  x="423.99" y="335.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;::_M_ptr (157,744 samples, 0.02%)</title><rect x="244.1" y="389" width="0.1" height="15.0" fill="rgb(219,67,16)" rx="2" ry="2" />
+<text  x="247.10" y="399.5" ></text>
+</g>
+<g >
+<title>std::remove_reference&lt;unsigned short&amp;&gt;::type&amp;&amp; std::move&lt;unsigned short&amp;&gt; (208,684 samples, 0.02%)</title><rect x="478.7" y="293" width="0.2" height="15.0" fill="rgb(228,109,26)" rx="2" ry="2" />
+<text  x="481.72" y="303.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::allocate (270,834 samples, 0.03%)</title><rect x="108.6" y="357" width="0.2" height="15.0" fill="rgb(236,145,34)" rx="2" ry="2" />
+<text  x="111.56" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::PeekImpl (242,375 samples, 0.02%)</title><rect x="779.5" y="821" width="0.2" height="15.0" fill="rgb(221,75,18)" rx="2" ry="2" />
+<text  x="782.49" y="831.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::clear (263,603 samples, 0.03%)</title><rect x="357.4" y="389" width="0.2" height="15.0" fill="rgb(252,216,51)" rx="2" ry="2" />
+<text  x="360.43" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::Object::DoDelete (158,753 samples, 0.02%)</title><rect x="17.0" y="405" width="0.1" height="15.0" fill="rgb(212,34,8)" rx="2" ry="2" />
+<text  x="19.99" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::UlInfoListElement_s const&amp; std::forward&lt;ns3::UlInfoListElement_s const&amp;&gt; (224,662 samples, 0.02%)</title><rect x="266.5" y="405" width="0.2" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="269.50" y="415.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::push_back (382,869 samples, 0.04%)</title><rect x="95.9" y="389" width="0.3" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="98.86" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt;::_Vector_impl_data::_Vector_impl_data (188,540 samples, 0.02%)</title><rect x="125.8" y="325" width="0.2" height="15.0" fill="rgb(243,175,41)" rx="2" ry="2" />
+<text  x="128.83" y="335.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, double&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, double&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, double&gt; &gt; &gt;::find (1,926,820 samples, 0.20%)</title><rect x="294.6" y="517" width="1.6" height="15.0" fill="rgb(229,111,26)" rx="2" ry="2" />
+<text  x="297.61" y="527.5" ></text>
+</g>
+<g >
+<title>void std::fill&lt;std::_Bit_iterator, bool&gt; (469,559 samples, 0.05%)</title><rect x="200.5" y="437" width="0.4" height="15.0" fill="rgb(224,89,21)" rx="2" ry="2" />
+<text  x="203.53" y="447.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt;::_M_ptr (271,891 samples, 0.03%)</title><rect x="242.0" y="405" width="0.2" height="15.0" fill="rgb(206,4,1)" rx="2" ry="2" />
+<text  x="244.99" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::MobilityModel&gt;::Ptr (394,072 samples, 0.04%)</title><rect x="704.5" y="533" width="0.3" height="15.0" fill="rgb(213,37,8)" rx="2" ry="2" />
+<text  x="707.49" y="543.5" ></text>
+</g>
+<g >
+<title>std::operator== (208,615 samples, 0.02%)</title><rect x="86.8" y="469" width="0.2" height="15.0" fill="rgb(229,110,26)" rx="2" ry="2" />
+<text  x="89.83" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;0ul, ns3::MultiModelSpectrumChannel*, ns3::Ptr&lt;ns3::SpectrumValue&gt;, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::~_Tuple_impl (4,562,243 samples, 0.47%)</title><rect x="773.6" y="549" width="3.6" height="15.0" fill="rgb(215,47,11)" rx="2" ry="2" />
+<text  x="776.56" y="559.5" ></text>
+</g>
+<g >
+<title>std::_Bind&lt;void  (5,856,767 samples, 0.60%)</title><rect x="772.5" y="581" width="4.7" height="15.0" fill="rgb(253,221,52)" rx="2" ry="2" />
+<text  x="775.51" y="591.5" ></text>
+</g>
+<g >
+<title>ns3::LtePhy::GetRbgSize (162,303 samples, 0.02%)</title><rect x="383.4" y="549" width="0.1" height="15.0" fill="rgb(225,93,22)" rx="2" ry="2" />
+<text  x="386.39" y="559.5" ></text>
+</g>
+<g >
+<title>double* std::copy&lt;__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, double*&gt; (156,421 samples, 0.02%)</title><rect x="484.8" y="421" width="0.2" height="15.0" fill="rgb(246,192,46)" rx="2" ry="2" />
+<text  x="487.85" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultDeleter&lt;ns3::Packet&gt;::Delete (1,078,177 samples, 0.11%)</title><rect x="652.8" y="261" width="0.9" height="15.0" fill="rgb(231,123,29)" rx="2" ry="2" />
+<text  x="655.82" y="271.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, unsigned short, std::_Identity&lt;unsigned short&gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;unsigned short&gt; &gt;::find (1,768,438 samples, 0.18%)</title><rect x="394.9" y="533" width="1.4" height="15.0" fill="rgb(238,154,36)" rx="2" ry="2" />
+<text  x="397.91" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::Object::Object (375,599 samples, 0.04%)</title><rect x="69.7" y="421" width="0.3" height="15.0" fill="rgb(242,174,41)" rx="2" ry="2" />
+<text  x="72.70" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumModel const&gt;::Ptr (211,561 samples, 0.02%)</title><rect x="56.4" y="469" width="0.2" height="15.0" fill="rgb(232,125,30)" rx="2" ry="2" />
+<text  x="59.41" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::SpectrumSignalParameters, ns3::Empty, ns3::DefaultDeleter&lt;ns3::SpectrumSignalParameters&gt; &gt;::Unref (3,402,650 samples, 0.35%)</title><rect x="773.7" y="453" width="2.7" height="15.0" fill="rgb(254,229,54)" rx="2" ry="2" />
+<text  x="776.67" y="463.5" ></text>
+</g>
+<g >
+<title>void std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::_M_realloc_insert&lt;unsigned short&gt; (2,228,760 samples, 0.23%)</title><rect x="479.6" y="277" width="1.8" height="15.0" fill="rgb(217,56,13)" rx="2" ry="2" />
+<text  x="482.64" y="287.5" ></text>
+</g>
+<g >
+<title>std::tuple&lt;ns3::MultiModelSpectrumChannel*, ns3::Ptr&lt;ns3::SpectrumValue&gt;, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::~tuple (361,973 samples, 0.04%)</title><rect x="666.2" y="453" width="0.3" height="15.0" fill="rgb(218,61,14)" rx="2" ry="2" />
+<text  x="669.22" y="463.5" ></text>
+</g>
+<g >
+<title>[libc.so.6] (166,116 samples, 0.02%)</title><rect x="72.9" y="453" width="0.1" height="15.0" fill="rgb(223,84,20)" rx="2" ry="2" />
+<text  x="75.91" y="463.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::AttributeConstructionList::Item, std::allocator&lt;ns3::AttributeConstructionList::Item&gt; &gt;::~list (162,156 samples, 0.02%)</title><rect x="448.1" y="261" width="0.2" height="15.0" fill="rgb(238,154,37)" rx="2" ry="2" />
+<text  x="451.12" y="271.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt;::at (125,858 samples, 0.01%)</title><rect x="457.0" y="309" width="0.1" height="15.0" fill="rgb(208,14,3)" rx="2" ry="2" />
+<text  x="459.99" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::CqiListElement_s* std::__uninitialized_copy&lt;false&gt;::__uninit_copy&lt;std::move_iterator&lt;ns3::CqiListElement_s*&gt;, ns3::CqiListElement_s*&gt; (136,124 samples, 0.01%)</title><rect x="127.5" y="437" width="0.2" height="15.0" fill="rgb(239,156,37)" rx="2" ry="2" />
+<text  x="130.54" y="447.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;::erase (8,314,163 samples, 0.86%)</title><rect x="376.0" y="533" width="6.7" height="15.0" fill="rgb(248,200,48)" rx="2" ry="2" />
+<text  x="379.00" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt; &gt;::operator (316,802 samples, 0.03%)</title><rect x="675.1" y="485" width="0.3" height="15.0" fill="rgb(214,43,10)" rx="2" ry="2" />
+<text  x="678.11" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;int, std::allocator&lt;int&gt; &gt;::_Vector_impl_data::_M_swap_data (452,888 samples, 0.05%)</title><rect x="594.4" y="261" width="0.3" height="15.0" fill="rgb(206,6,1)" rx="2" ry="2" />
+<text  x="597.37" y="271.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;* std::__copy_move_a1&lt;true, std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;*, std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;*&gt; (183,796 samples, 0.02%)</title><rect x="110.5" y="453" width="0.2" height="15.0" fill="rgb(252,216,51)" rx="2" ry="2" />
+<text  x="113.53" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::LteSpectrumModelId, std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt;, std::_Select1st&lt;std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt; &gt;, std::less&lt;ns3::LteSpectrumModelId&gt;, std::allocator&lt;std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt; &gt; &gt;::find (964,559 samples, 0.10%)</title><rect x="297.9" y="453" width="0.8" height="15.0" fill="rgb(254,226,54)" rx="2" ry="2" />
+<text  x="300.94" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbRrc::SendSystemInformation (226,850 samples, 0.02%)</title><rect x="400.5" y="565" width="0.1" height="15.0" fill="rgb(251,215,51)" rx="2" ry="2" />
+<text  x="403.45" y="575.5" ></text>
+</g>
+<g >
+<title>void std::destroy_at&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; (190,528 samples, 0.02%)</title><rect x="506.4" y="437" width="0.1" height="15.0" fill="rgb(233,130,31)" rx="2" ry="2" />
+<text  x="509.38" y="447.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt;::deallocate (189,106 samples, 0.02%)</title><rect x="256.5" y="341" width="0.2" height="15.0" fill="rgb(246,192,45)" rx="2" ry="2" />
+<text  x="259.54" y="351.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;double*, double&gt; (150,554 samples, 0.02%)</title><rect x="303.8" y="421" width="0.1" height="15.0" fill="rgb(228,107,25)" rx="2" ry="2" />
+<text  x="306.80" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Function_handler&lt;void  (28,313,540 samples, 2.92%)</title><rect x="441.2" y="501" width="22.7" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="444.16" y="511.5" >s..</text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::max_size (126,132 samples, 0.01%)</title><rect x="572.9" y="293" width="0.1" height="15.0" fill="rgb(242,171,41)" rx="2" ry="2" />
+<text  x="575.88" y="303.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::_M_create_storage (192,396 samples, 0.02%)</title><rect x="474.0" y="181" width="0.2" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="477.01" y="191.5" ></text>
+</g>
+<g >
+<title>ns3::Angles::Angles (1,127,648 samples, 0.12%)</title><rect x="641.6" y="501" width="0.9" height="15.0" fill="rgb(254,226,54)" rx="2" ry="2" />
+<text  x="644.60" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Bind&lt;void  (283,539 samples, 0.03%)</title><rect x="87.4" y="453" width="0.2" height="15.0" fill="rgb(253,221,52)" rx="2" ry="2" />
+<text  x="90.36" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;::_M_valptr (157,744 samples, 0.02%)</title><rect x="244.1" y="405" width="0.1" height="15.0" fill="rgb(213,39,9)" rx="2" ry="2" />
+<text  x="247.10" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_Rb_tree (959,349 samples, 0.10%)</title><rect x="341.6" y="469" width="0.8" height="15.0" fill="rgb(252,219,52)" rx="2" ry="2" />
+<text  x="344.61" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Buffer::Data*, std::allocator&lt;ns3::Buffer::Data*&gt; &gt;::begin (350,086 samples, 0.04%)</title><rect x="32.0" y="325" width="0.3" height="15.0" fill="rgb(243,175,41)" rx="2" ry="2" />
+<text  x="35.04" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::PfFfMacScheduler::LcActivePerFlow (538,566 samples, 0.06%)</title><rect x="177.5" y="485" width="0.4" height="15.0" fill="rgb(219,67,16)" rx="2" ry="2" />
+<text  x="180.45" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned int const, ns3::RxSpectrumModelInfo&gt; &gt;::_Rb_tree_iterator (152,326 samples, 0.02%)</title><rect x="329.9" y="469" width="0.1" height="15.0" fill="rgb(243,175,42)" rx="2" ry="2" />
+<text  x="332.88" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Buffer::~Buffer (125,638 samples, 0.01%)</title><rect x="612.9" y="341" width="0.1" height="15.0" fill="rgb(240,162,38)" rx="2" ry="2" />
+<text  x="615.93" y="351.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::BuildRarListElement_s, std::allocator&lt;ns3::BuildRarListElement_s&gt; &gt;::vector (1,058,735 samples, 0.11%)</title><rect x="143.0" y="453" width="0.9" height="15.0" fill="rgb(224,87,20)" rx="2" ry="2" />
+<text  x="146.03" y="463.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt;::allocate (272,885 samples, 0.03%)</title><rect x="210.9" y="421" width="0.2" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="213.86" y="431.5" ></text>
+</g>
+<g >
+<title>void std::vector&lt;ns3::MacCeListElement_s, std::allocator&lt;ns3::MacCeListElement_s&gt; &gt;::_M_range_insert&lt;__gnu_cxx::__normal_iterator&lt;ns3::MacCeListElement_s*, std::vector&lt;ns3::MacCeListElement_s, std::allocator&lt;ns3::MacCeListElement_s&gt; &gt; &gt; &gt; (2,140,649 samples, 0.22%)</title><rect x="128.7" y="501" width="1.7" height="15.0" fill="rgb(225,92,22)" rx="2" ry="2" />
+<text  x="131.66" y="511.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;is_invocable_r_v&lt;void, ns3::Callback&lt;void, ns3::SpectrumValue const&amp;&gt;::Callback&lt;void  (34,406,741 samples, 3.55%)</title><rect x="577.7" y="453" width="27.7" height="15.0" fill="rgb(222,79,18)" rx="2" ry="2" />
+<text  x="580.69" y="463.5" >s..</text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;::Ptr (149,036 samples, 0.02%)</title><rect x="652.1" y="517" width="0.1" height="15.0" fill="rgb(250,208,49)" rx="2" ry="2" />
+<text  x="655.06" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Bind&lt;void  (590,966 samples, 0.06%)</title><rect x="638.5" y="469" width="0.5" height="15.0" fill="rgb(253,221,52)" rx="2" ry="2" />
+<text  x="641.52" y="479.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_List_impl::_List_impl (125,112 samples, 0.01%)</title><rect x="343.8" y="453" width="0.1" height="15.0" fill="rgb(244,183,43)" rx="2" ry="2" />
+<text  x="346.76" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::HarqStatus_e* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;ns3::DlInfoListElement_s::HarqStatus_e const*, std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt; &gt;, ns3::DlInfoListElement_s::HarqStatus_e*, ns3::DlInfoListElement_s::HarqStatus_e&gt; (234,294 samples, 0.02%)</title><rect x="510.0" y="501" width="0.2" height="15.0" fill="rgb(235,140,33)" rx="2" ry="2" />
+<text  x="512.98" y="511.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt;::_M_addr (155,895 samples, 0.02%)</title><rect x="224.4" y="389" width="0.1" height="15.0" fill="rgb(210,24,5)" rx="2" ry="2" />
+<text  x="227.35" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;::_M_valptr (179,937 samples, 0.02%)</title><rect x="385.6" y="453" width="0.1" height="15.0" fill="rgb(218,62,14)" rx="2" ry="2" />
+<text  x="388.57" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::vector (3,054,718 samples, 0.31%)</title><rect x="698.1" y="549" width="2.5" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="701.14" y="559.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt; &gt;::find (306,410 samples, 0.03%)</title><rect x="29.3" y="357" width="0.2" height="15.0" fill="rgb(225,93,22)" rx="2" ry="2" />
+<text  x="32.25" y="367.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned int, ns3::RxSpectrumModelInfo, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::RxSpectrumModelInfo&gt; &gt; &gt;::begin (566,414 samples, 0.06%)</title><rect x="657.5" y="517" width="0.4" height="15.0" fill="rgb(238,153,36)" rx="2" ry="2" />
+<text  x="660.49" y="527.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::MacCeListElement_s, std::allocator&lt;ns3::MacCeListElement_s&gt; &gt;::empty (341,339 samples, 0.04%)</title><rect x="264.3" y="517" width="0.3" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="267.34" y="527.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned short const, std::vector&lt;ns3::DlDciListElement_s, std::allocator&lt;ns3::DlDciListElement_s&gt; &gt; &gt; &gt;::_M_ptr (153,839 samples, 0.02%)</title><rect x="187.4" y="405" width="0.1" height="15.0" fill="rgb(228,109,26)" rx="2" ry="2" />
+<text  x="190.41" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::CqiListElement_s, std::allocator&lt;ns3::CqiListElement_s&gt; &gt;::_M_get_Tp_allocator (193,289 samples, 0.02%)</title><rect x="127.9" y="453" width="0.2" height="15.0" fill="rgb(223,85,20)" rx="2" ry="2" />
+<text  x="130.90" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::FfMacSchedSapUser::SchedDlConfigIndParameters::~SchedDlConfigIndParameters (1,899,935 samples, 0.20%)</title><rect x="145.1" y="469" width="1.5" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="148.10" y="479.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;std::_Rb_tree_iterator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, bool&gt; std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::emplace&lt;unsigned int const&amp;, ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp;&gt; (2,563,050 samples, 0.26%)</title><rect x="658.2" y="517" width="2.0" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="661.17" y="527.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;::base (157,048 samples, 0.02%)</title><rect x="647.4" y="357" width="0.2" height="15.0" fill="rgb(224,88,21)" rx="2" ry="2" />
+<text  x="650.43" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::SpectrumValue (534,535 samples, 0.06%)</title><rect x="646.3" y="421" width="0.5" height="15.0" fill="rgb(211,27,6)" rx="2" ry="2" />
+<text  x="649.32" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::Ptr&lt;ns3::Object&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Object&gt; &gt; &gt;::_M_get_Tp_allocator (199,501 samples, 0.02%)</title><rect x="549.8" y="197" width="0.2" height="15.0" fill="rgb(224,91,21)" rx="2" ry="2" />
+<text  x="552.80" y="207.5" ></text>
+</g>
+<g >
+<title>ns3::HarqProcessInfoElement_t* std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;ns3::HarqProcessInfoElement_t const*, std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt;, ns3::HarqProcessInfoElement_t*&gt; (185,369 samples, 0.02%)</title><rect x="117.4" y="389" width="0.1" height="15.0" fill="rgb(210,26,6)" rx="2" ry="2" />
+<text  x="120.37" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::CeBitmap_e* std::copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::CeBitmap_e const*, std::vector&lt;ns3::CeBitmap_e, std::allocator&lt;ns3::CeBitmap_e&gt; &gt; &gt;, ns3::CeBitmap_e*&gt; (376,947 samples, 0.04%)</title><rect x="203.9" y="341" width="0.3" height="15.0" fill="rgb(247,195,46)" rx="2" ry="2" />
+<text  x="206.93" y="351.5" ></text>
+</g>
+<g >
+<title>std::function&lt;void  (34,901,798 samples, 3.60%)</title><rect x="577.3" y="485" width="28.1" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="580.29" y="495.5" >s..</text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt; &gt;::_M_valptr (246,654 samples, 0.03%)</title><rect x="55.4" y="421" width="0.2" height="15.0" fill="rgb(222,81,19)" rx="2" ry="2" />
+<text  x="58.39" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::LteUePhy::ComputeAvgSinr (312,773 samples, 0.03%)</title><rect x="582.9" y="309" width="0.3" height="15.0" fill="rgb(223,84,20)" rx="2" ry="2" />
+<text  x="585.91" y="319.5" ></text>
+</g>
+<g >
+<title>std::_Function_handler&lt;void  (2,496,720 samples, 0.26%)</title><rect x="438.9" y="501" width="2.0" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="441.93" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::~SpectrumValue (812,960 samples, 0.08%)</title><rect x="772.9" y="453" width="0.7" height="15.0" fill="rgb(247,193,46)" rx="2" ry="2" />
+<text  x="775.90" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteSpectrumSignalParametersDataFrame&gt; ns3::Create&lt;ns3::LteSpectrumSignalParametersDataFrame, ns3::LteSpectrumSignalParametersDataFrame const&amp;&gt; (6,018,311 samples, 0.62%)</title><rect x="644.4" y="501" width="4.9" height="15.0" fill="rgb(226,98,23)" rx="2" ry="2" />
+<text  x="647.44" y="511.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned int, ns3::RxSpectrumModelInfo, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::RxSpectrumModelInfo&gt; &gt; &gt;::end (167,887 samples, 0.02%)</title><rect x="80.9" y="517" width="0.1" height="15.0" fill="rgb(219,64,15)" rx="2" ry="2" />
+<text  x="83.90" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::RxSpectrumModelInfo&gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::RxSpectrumModelInfo&gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::RxSpectrumModelInfo&gt; &gt; &gt;::begin (190,418 samples, 0.02%)</title><rect x="329.9" y="485" width="0.1" height="15.0" fill="rgb(226,97,23)" rx="2" ry="2" />
+<text  x="332.85" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;::operator (124,444 samples, 0.01%)</title><rect x="707.4" y="373" width="0.1" height="15.0" fill="rgb(245,186,44)" rx="2" ry="2" />
+<text  x="710.37" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; std::map&lt;ns3::Scheduler::EventKey, ns3::EventImpl*, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::emplace_hint&lt;std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (4,086,821 samples, 0.42%)</title><rect x="269.5" y="469" width="3.3" height="15.0" fill="rgb(253,224,53)" rx="2" ry="2" />
+<text  x="272.54" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt;::_M_valptr (320,518 samples, 0.03%)</title><rect x="566.1" y="165" width="0.2" height="15.0" fill="rgb(208,14,3)" rx="2" ry="2" />
+<text  x="569.09" y="175.5" ></text>
+</g>
+<g >
+<title>std::function&lt;void  (324,769 samples, 0.03%)</title><rect x="611.9" y="485" width="0.3" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="614.94" y="495.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;ns3::BuildDataListElement_s&gt; &gt;::construct&lt;ns3::BuildDataListElement_s, ns3::BuildDataListElement_s const&amp;&gt; (2,604,285 samples, 0.27%)</title><rect x="203.2" y="453" width="2.1" height="15.0" fill="rgb(226,98,23)" rx="2" ry="2" />
+<text  x="206.22" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbMac::DoSubframeIndication (314,249 samples, 0.03%)</title><rect x="11.2" y="533" width="0.2" height="15.0" fill="rgb(248,200,47)" rx="2" ry="2" />
+<text  x="14.17" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::UlDciListElement_s, std::allocator&lt;ns3::UlDciListElement_s&gt; &gt;::~_Vector_base (383,267 samples, 0.04%)</title><rect x="229.6" y="437" width="0.3" height="15.0" fill="rgb(244,182,43)" rx="2" ry="2" />
+<text  x="232.60" y="447.5" ></text>
+</g>
+<g >
+<title>atan2f32x (1,051,855 samples, 0.11%)</title><rect x="310.2" y="469" width="0.8" height="15.0" fill="rgb(240,164,39)" rx="2" ry="2" />
+<text  x="313.20" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::LteSpectrumModelId, std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt;, std::_Select1st&lt;std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt; &gt;, std::less&lt;ns3::LteSpectrumModelId&gt;, std::allocator&lt;std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt; &gt; &gt;::_S_key (426,201 samples, 0.04%)</title><rect x="675.8" y="437" width="0.4" height="15.0" fill="rgb(209,19,4)" rx="2" ry="2" />
+<text  x="678.83" y="447.5" ></text>
+</g>
+<g >
+<title> (160,344 samples, 0.02%)</title><rect x="431.8" y="309" width="0.1" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="434.79" y="319.5" ></text>
+</g>
+<g >
+<title>std::_List_const_iterator&lt;ns3::Callback&lt;void, unsigned short, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;::_List_const_iterator (155,345 samples, 0.02%)</title><rect x="481.9" y="293" width="0.1" height="15.0" fill="rgb(231,121,29)" rx="2" ry="2" />
+<text  x="484.90" y="303.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt; &gt;::_M_lower_bound (234,707 samples, 0.02%)</title><rect x="29.3" y="341" width="0.2" height="15.0" fill="rgb(245,188,44)" rx="2" ry="2" />
+<text  x="32.28" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue&gt;::~Ptr (152,896 samples, 0.02%)</title><rect x="314.9" y="437" width="0.2" height="15.0" fill="rgb(207,9,2)" rx="2" ry="2" />
+<text  x="317.94" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::Multiply (1,462,439 samples, 0.15%)</title><rect x="745.2" y="533" width="1.1" height="15.0" fill="rgb(215,46,11)" rx="2" ry="2" />
+<text  x="748.17" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::HarqProcessInfoElement_t* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::HarqProcessInfoElement_t const*, std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt;, ns3::HarqProcessInfoElement_t*&gt; (185,369 samples, 0.02%)</title><rect x="117.4" y="437" width="0.1" height="15.0" fill="rgb(233,131,31)" rx="2" ry="2" />
+<text  x="120.37" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::~PacketBurst (369,943 samples, 0.04%)</title><rect x="653.7" y="357" width="0.3" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="656.72" y="367.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt;::_M_addr (148,795 samples, 0.02%)</title><rect x="566.2" y="133" width="0.1" height="15.0" fill="rgb(218,62,14)" rx="2" ry="2" />
+<text  x="569.23" y="143.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_Vector_impl::_Vector_impl (270,409 samples, 0.03%)</title><rect x="413.4" y="469" width="0.2" height="15.0" fill="rgb(208,15,3)" rx="2" ry="2" />
+<text  x="416.36" y="479.5" ></text>
+</g>
+<g >
+<title>void std::destroy_at&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; (152,858 samples, 0.02%)</title><rect x="654.3" y="373" width="0.1" height="15.0" fill="rgb(216,52,12)" rx="2" ry="2" />
+<text  x="657.32" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::Callback&lt;void, ns3::Ptr&lt;ns3::Packet&gt; &gt;::Callback&lt;void  (185,775 samples, 0.02%)</title><rect x="422.2" y="469" width="0.1" height="15.0" fill="rgb(223,83,19)" rx="2" ry="2" />
+<text  x="425.16" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::UeSelected_s::~UeSelected_s (485,130 samples, 0.05%)</title><rect x="255.0" y="357" width="0.4" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="258.00" y="367.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt;::_Rb_tree_iterator (127,428 samples, 0.01%)</title><rect x="566.4" y="181" width="0.1" height="15.0" fill="rgb(218,61,14)" rx="2" ry="2" />
+<text  x="569.41" y="191.5" ></text>
+</g>
+<g >
+<title>ns3::PfFfMacScheduler::DoSchedDlTriggerReq (19,285,336 samples, 1.99%)</title><rect x="19.6" y="533" width="15.5" height="15.0" fill="rgb(214,45,10)" rx="2" ry="2" />
+<text  x="22.60" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::Object::DoDelete (1,989,572 samples, 0.21%)</title><rect x="773.9" y="341" width="1.6" height="15.0" fill="rgb(212,34,8)" rx="2" ry="2" />
+<text  x="776.86" y="351.5" ></text>
+</g>
+<g >
+<title> (124,716 samples, 0.01%)</title><rect x="728.6" y="485" width="0.1" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="731.63" y="495.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::copy&lt;__gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, unsigned char*&gt; (315,978 samples, 0.03%)</title><rect x="442.3" y="245" width="0.3" height="15.0" fill="rgb(241,168,40)" rx="2" ry="2" />
+<text  x="445.34" y="255.5" ></text>
+</g>
+<g >
+<title>std::function&lt;void  (20,931,339 samples, 2.16%)</title><rect x="421.9" y="517" width="16.8" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="424.87" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Packet&gt;::~Ptr (786,221 samples, 0.08%)</title><rect x="774.1" y="245" width="0.6" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="777.08" y="255.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt; &gt;::destroy&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; (555,448 samples, 0.06%)</title><rect x="233.2" y="373" width="0.4" height="15.0" fill="rgb(235,141,33)" rx="2" ry="2" />
+<text  x="236.17" y="383.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, ns3::pfsFlowPerf_t, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt; &gt; &gt;::begin (326,502 samples, 0.03%)</title><rect x="186.1" y="485" width="0.3" height="15.0" fill="rgb(215,46,11)" rx="2" ry="2" />
+<text  x="189.09" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;* std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_copy&lt;false, std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_Alloc_node&gt; (156,128 samples, 0.02%)</title><rect x="667.1" y="261" width="0.1" height="15.0" fill="rgb(251,212,50)" rx="2" ry="2" />
+<text  x="670.07" y="271.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;::operator++ (859,040 samples, 0.09%)</title><rect x="767.3" y="677" width="0.7" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="770.27" y="687.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteUePhy&gt;::Ptr (125,424 samples, 0.01%)</title><rect x="516.6" y="437" width="0.1" height="15.0" fill="rgb(241,169,40)" rx="2" ry="2" />
+<text  x="519.65" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::EventId ns3::Simulator::Schedule&lt;void  (348,760 samples, 0.04%)</title><rect x="715.4" y="517" width="0.3" height="15.0" fill="rgb(253,224,53)" rx="2" ry="2" />
+<text  x="718.38" y="527.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;::allocate (267,880 samples, 0.03%)</title><rect x="724.6" y="421" width="0.2" height="15.0" fill="rgb(254,229,54)" rx="2" ry="2" />
+<text  x="727.58" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::Divide (127,965 samples, 0.01%)</title><rect x="601.3" y="309" width="0.1" height="15.0" fill="rgb(239,160,38)" rx="2" ry="2" />
+<text  x="604.34" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::PacketTagList::CreateTagData (342,966 samples, 0.04%)</title><rect x="21.6" y="325" width="0.3" height="15.0" fill="rgb(233,130,31)" rx="2" ry="2" />
+<text  x="24.63" y="335.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;2ul, unsigned int&gt;::_Tuple_impl&lt;unsigned int&amp;&gt; (298,400 samples, 0.03%)</title><rect x="617.9" y="421" width="0.3" height="15.0" fill="rgb(217,58,13)" rx="2" ry="2" />
+<text  x="620.94" y="431.5" ></text>
+</g>
+<g >
+<title>[libm.so.6] (745,624 samples, 0.08%)</title><rect x="310.4" y="453" width="0.6" height="15.0" fill="rgb(208,16,4)" rx="2" ry="2" />
+<text  x="313.44" y="463.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;double&gt;::allocate (629,966 samples, 0.06%)</title><rect x="655.0" y="389" width="0.5" height="15.0" fill="rgb(248,201,48)" rx="2" ry="2" />
+<text  x="658.02" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Function_handler&lt;void  (27,749,977 samples, 2.86%)</title><rect x="441.6" y="421" width="22.3" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="444.62" y="431.5" >s..</text>
+</g>
+<g >
+<title>ns3::NoOpComponentCarrierManager::DoNotifyTxOpportunity (1,376,216 samples, 0.14%)</title><rect x="15.9" y="437" width="1.1" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="18.88" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s* std::__uninitialized_copy&lt;false&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::DlInfoListElement_s const*, std::vector&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt; &gt;, ns3::DlInfoListElement_s*&gt; (4,855,575 samples, 0.50%)</title><rect x="258.0" y="453" width="3.9" height="15.0" fill="rgb(225,93,22)" rx="2" ry="2" />
+<text  x="261.02" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::EnbMacMemberLteMacSapProvider&lt;ns3::LteEnbMac&gt;::ReportBufferStatus (682,380 samples, 0.07%)</title><rect x="17.9" y="357" width="0.5" height="15.0" fill="rgb(241,166,39)" rx="2" ry="2" />
+<text  x="20.88" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::HarqProcessInfoElement_t* std::__niter_base&lt;ns3::HarqProcessInfoElement_t*&gt; (232,255 samples, 0.02%)</title><rect x="513.5" y="453" width="0.2" height="15.0" fill="rgb(221,75,18)" rx="2" ry="2" />
+<text  x="516.47" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::_S_key (195,316 samples, 0.02%)</title><rect x="223.5" y="437" width="0.1" height="15.0" fill="rgb(210,26,6)" rx="2" ry="2" />
+<text  x="226.48" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::tbInfo_t::~tbInfo_t (389,508 samples, 0.04%)</title><rect x="387.6" y="517" width="0.3" height="15.0" fill="rgb(210,26,6)" rx="2" ry="2" />
+<text  x="390.63" y="527.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_clear (269,841 samples, 0.03%)</title><rect x="497.4" y="533" width="0.2" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="500.37" y="543.5" ></text>
+</g>
+<g >
+<title>__dynamic_cast (424,030 samples, 0.04%)</title><rect x="741.6" y="533" width="0.4" height="15.0" fill="rgb(227,102,24)" rx="2" ry="2" />
+<text  x="744.63" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteControlMessage&gt;::Ptr (275,374 samples, 0.03%)</title><rect x="149.6" y="325" width="0.2" height="15.0" fill="rgb(222,81,19)" rx="2" ry="2" />
+<text  x="152.56" y="335.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::UlDciListElement_s, std::allocator&lt;ns3::UlDciListElement_s&gt; &gt;::_Vector_base (314,772 samples, 0.03%)</title><rect x="228.3" y="437" width="0.3" height="15.0" fill="rgb(208,17,4)" rx="2" ry="2" />
+<text  x="231.35" y="447.5" ></text>
+</g>
+<g >
+<title>std::_List_const_iterator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt;::operator* (441,500 samples, 0.05%)</title><rect x="495.9" y="549" width="0.4" height="15.0" fill="rgb(212,34,8)" rx="2" ry="2" />
+<text  x="498.92" y="559.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy::CreateTxPowerSpectralDensity (7,834,108 samples, 0.81%)</title><rect x="296.8" y="517" width="6.3" height="15.0" fill="rgb(253,225,53)" rx="2" ry="2" />
+<text  x="299.79" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;int, std::allocator&lt;int&gt; &gt;::_M_allocate (127,251 samples, 0.01%)</title><rect x="573.4" y="341" width="0.1" height="15.0" fill="rgb(216,52,12)" rx="2" ry="2" />
+<text  x="576.38" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s&amp; std::forward&lt;ns3::DlInfoListElement_s&amp;&gt; (127,101 samples, 0.01%)</title><rect x="509.9" y="533" width="0.1" height="15.0" fill="rgb(234,136,32)" rx="2" ry="2" />
+<text  x="512.87" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::EventId::operator= (1,128,226 samples, 0.12%)</title><rect x="640.0" y="533" width="0.9" height="15.0" fill="rgb(241,165,39)" rx="2" ry="2" />
+<text  x="643.03" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::~PacketBurst (1,394,732 samples, 0.14%)</title><rect x="453.9" y="245" width="1.1" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="456.93" y="255.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::UlDciListElement_s, std::allocator&lt;ns3::UlDciListElement_s&gt; &gt;::_M_check_len (154,264 samples, 0.02%)</title><rect x="105.9" y="437" width="0.1" height="15.0" fill="rgb(223,84,20)" rx="2" ry="2" />
+<text  x="108.91" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt;::_M_allocate (156,029 samples, 0.02%)</title><rect x="228.9" y="405" width="0.1" height="15.0" fill="rgb(217,59,14)" rx="2" ry="2" />
+<text  x="231.92" y="415.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::FfMacSchedSapProvider::SchedUlCqiInfoReqParameters, std::allocator&lt;ns3::FfMacSchedSapProvider::SchedUlCqiInfoReqParameters&gt; &gt;::_M_erase_at_end (1,138,470 samples, 0.12%)</title><rect x="263.1" y="501" width="1.0" height="15.0" fill="rgb(237,149,35)" rx="2" ry="2" />
+<text  x="266.15" y="511.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::vector (126,859 samples, 0.01%)</title><rect x="530.1" y="309" width="0.1" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="533.10" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::operator- (126,699 samples, 0.01%)</title><rect x="66.4" y="501" width="0.1" height="15.0" fill="rgb(231,122,29)" rx="2" ry="2" />
+<text  x="69.43" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::AddPacket (2,887,463 samples, 0.30%)</title><rect x="361.6" y="517" width="2.4" height="15.0" fill="rgb(207,10,2)" rx="2" ry="2" />
+<text  x="364.65" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::Object::Check (191,566 samples, 0.02%)</title><rect x="374.7" y="485" width="0.2" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="377.73" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;::_Rb_tree_iterator (155,635 samples, 0.02%)</title><rect x="529.7" y="293" width="0.1" height="15.0" fill="rgb(228,110,26)" rx="2" ry="2" />
+<text  x="532.71" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::Object::Construct (185,707 samples, 0.02%)</title><rect x="119.4" y="485" width="0.2" height="15.0" fill="rgb(228,108,26)" rx="2" ry="2" />
+<text  x="122.44" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Packet&gt; ns3::Create&lt;ns3::Packet, unsigned int&amp;&gt; (358,332 samples, 0.04%)</title><rect x="16.7" y="389" width="0.3" height="15.0" fill="rgb(253,223,53)" rx="2" ry="2" />
+<text  x="19.70" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue&gt; ns3::Create&lt;ns3::SpectrumValue, ns3::Ptr&lt;ns3::SpectrumModel&gt;&amp;&gt; (4,463,471 samples, 0.46%)</title><rect x="298.7" y="485" width="3.6" height="15.0" fill="rgb(228,107,25)" rx="2" ry="2" />
+<text  x="301.72" y="495.5" ></text>
+</g>
+<g >
+<title>std::map&lt;ns3::LteFlowId_t, ns3::FfMacSchedSapProvider::SchedDlRlcBufferReqParameters, std::less&lt;ns3::LteFlowId_t&gt;, std::allocator&lt;std::pair&lt;ns3::LteFlowId_t const, ns3::FfMacSchedSapProvider::SchedDlRlcBufferReqParameters&gt; &gt; &gt;::begin (229,777 samples, 0.02%)</title><rect x="177.6" y="469" width="0.2" height="15.0" fill="rgb(233,131,31)" rx="2" ry="2" />
+<text  x="180.64" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_M_create_storage (182,249 samples, 0.02%)</title><rect x="126.4" y="357" width="0.2" height="15.0" fill="rgb(252,220,52)" rx="2" ry="2" />
+<text  x="129.41" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::DlCqiLteControlMessage::GetDlCqi (1,645,474 samples, 0.17%)</title><rect x="442.6" y="357" width="1.3" height="15.0" fill="rgb(231,122,29)" rx="2" ry="2" />
+<text  x="445.63" y="367.5" ></text>
+</g>
+<g >
+<title>unsigned short* std::__uninitialized_move_a&lt;unsigned short*, unsigned short*, std::allocator&lt;unsigned short&gt; &gt; (192,952 samples, 0.02%)</title><rect x="106.2" y="437" width="0.2" height="15.0" fill="rgb(232,126,30)" rx="2" ry="2" />
+<text  x="109.22" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt; &gt;::_M_lower_bound (876,343 samples, 0.09%)</title><rect x="650.3" y="469" width="0.7" height="15.0" fill="rgb(253,225,53)" rx="2" ry="2" />
+<text  x="653.31" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumModel const&gt;::~Ptr (357,858 samples, 0.04%)</title><rect x="743.9" y="549" width="0.2" height="15.0" fill="rgb(218,61,14)" rx="2" ry="2" />
+<text  x="746.86" y="559.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_Vector_base (161,229 samples, 0.02%)</title><rect x="403.3" y="469" width="0.1" height="15.0" fill="rgb(237,150,35)" rx="2" ry="2" />
+<text  x="406.26" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::_M_emplace_hint_unique&lt;std::piecewise_construct_t const&amp;, std::tuple&lt;unsigned short const&amp;&gt;, std::tuple&lt;&gt; &gt; (1,650,378 samples, 0.17%)</title><rect x="242.6" y="469" width="1.3" height="15.0" fill="rgb(213,37,8)" rx="2" ry="2" />
+<text  x="245.58" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::_M_erase (148,912 samples, 0.02%)</title><rect x="99.7" y="437" width="0.2" height="15.0" fill="rgb(213,41,9)" rx="2" ry="2" />
+<text  x="102.75" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt; ns3::CreateObject&lt;ns3::PacketBurst&gt; (9,676,681 samples, 1.00%)</title><rect x="536.5" y="325" width="7.8" height="15.0" fill="rgb(205,4,0)" rx="2" ry="2" />
+<text  x="539.48" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::LteRlcSm::DoNotifyTxOpportunity (19,770,990 samples, 2.04%)</title><rect x="551.6" y="277" width="15.9" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="554.55" y="287.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::reserve (334,959 samples, 0.03%)</title><rect x="573.3" y="357" width="0.3" height="15.0" fill="rgb(238,153,36)" rx="2" ry="2" />
+<text  x="576.28" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::MapScheduler::Insert (4,538,275 samples, 0.47%)</title><rect x="82.9" y="469" width="3.7" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="85.92" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::LteMiErrorModel::GetTbDecodificationStats (4,432,444 samples, 0.46%)</title><rect x="485.6" y="549" width="3.5" height="15.0" fill="rgb(209,19,4)" rx="2" ry="2" />
+<text  x="488.58" y="559.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned short const, double&gt; &gt;::_M_ptr (275,175 samples, 0.03%)</title><rect x="292.6" y="485" width="0.2" height="15.0" fill="rgb(210,27,6)" rx="2" ry="2" />
+<text  x="295.56" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter&gt;::Unref (1,777,558 samples, 0.18%)</title><rect x="652.6" y="421" width="1.4" height="15.0" fill="rgb(221,78,18)" rx="2" ry="2" />
+<text  x="655.59" y="431.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt; &gt;::begin (189,215 samples, 0.02%)</title><rect x="179.3" y="469" width="0.2" height="15.0" fill="rgb(249,206,49)" rx="2" ry="2" />
+<text  x="182.33" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::RlcPduListElement_s* std::__do_uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::RlcPduListElement_s const*, std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt;, ns3::RlcPduListElement_s*&gt; (938,823 samples, 0.10%)</title><rect x="211.9" y="357" width="0.7" height="15.0" fill="rgb(215,48,11)" rx="2" ry="2" />
+<text  x="214.87" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt; ns3::CompleteConstruct&lt;ns3::PacketBurst&gt; (6,605,149 samples, 0.68%)</title><rect x="539.0" y="309" width="5.3" height="15.0" fill="rgb(212,33,7)" rx="2" ry="2" />
+<text  x="541.95" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::SpectrumValue, ns3::Empty, ns3::DefaultDeleter&lt;ns3::SpectrumValue&gt; &gt;::Unref (345,669 samples, 0.04%)</title><rect x="674.0" y="501" width="0.3" height="15.0" fill="rgb(246,189,45)" rx="2" ry="2" />
+<text  x="677.04" y="511.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::vector (1,436,824 samples, 0.15%)</title><rect x="398.7" y="549" width="1.1" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="401.65" y="559.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_get_node (195,540 samples, 0.02%)</title><rect x="83.1" y="373" width="0.1" height="15.0" fill="rgb(221,75,17)" rx="2" ry="2" />
+<text  x="86.06" y="383.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::vector (348,336 samples, 0.04%)</title><rect x="316.1" y="389" width="0.3" height="15.0" fill="rgb(239,156,37)" rx="2" ry="2" />
+<text  x="319.13" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt; &gt;::end (232,913 samples, 0.02%)</title><rect x="508.7" y="533" width="0.1" height="15.0" fill="rgb(246,192,45)" rx="2" ry="2" />
+<text  x="511.65" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::DlInfoListElement_s (159,589 samples, 0.02%)</title><rect x="418.6" y="437" width="0.1" height="15.0" fill="rgb(231,119,28)" rx="2" ry="2" />
+<text  x="421.61" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::GetSpectrumModelUid (322,339 samples, 0.03%)</title><rect x="744.9" y="549" width="0.2" height="15.0" fill="rgb(254,228,54)" rx="2" ry="2" />
+<text  x="747.88" y="559.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::vector (485,111 samples, 0.05%)</title><rect x="527.2" y="181" width="0.4" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="530.22" y="191.5" ></text>
+</g>
+<g >
+<title>std::map&lt;ns3::Scheduler::EventKey, ns3::EventImpl*, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::key_comp (125,297 samples, 0.01%)</title><rect x="84.2" y="437" width="0.1" height="15.0" fill="rgb(213,39,9)" rx="2" ry="2" />
+<text  x="87.20" y="447.5" ></text>
+</g>
+<g >
+<title>unsigned long* std::copy&lt;unsigned long*, unsigned long*&gt; (538,409 samples, 0.06%)</title><rect x="199.6" y="421" width="0.4" height="15.0" fill="rgb(236,144,34)" rx="2" ry="2" />
+<text  x="202.61" y="431.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;bool, std::allocator&lt;bool&gt; &gt;::_M_insert_aux (300,220 samples, 0.03%)</title><rect x="196.6" y="469" width="0.2" height="15.0" fill="rgb(254,227,54)" rx="2" ry="2" />
+<text  x="199.57" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::AttributeConstructionList::AttributeConstructionList (965,115 samples, 0.10%)</title><rect x="371.2" y="501" width="0.8" height="15.0" fill="rgb(231,122,29)" rx="2" ry="2" />
+<text  x="374.20" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::FfMacSchedSapProvider::SchedDlRlcBufferReqParameters::operator= (416,467 samples, 0.04%)</title><rect x="17.9" y="293" width="0.4" height="15.0" fill="rgb(232,125,29)" rx="2" ry="2" />
+<text  x="20.95" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::UlInfoListElement_s* std::vector&lt;ns3::UlInfoListElement_s, std::allocator&lt;ns3::UlInfoListElement_s&gt; &gt;::_M_allocate_and_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::UlInfoListElement_s const*, std::vector&lt;ns3::UlInfoListElement_s, std::allocator&lt;ns3::UlInfoListElement_s&gt; &gt; &gt; &gt; (153,511 samples, 0.02%)</title><rect x="108.1" y="485" width="0.2" height="15.0" fill="rgb(239,157,37)" rx="2" ry="2" />
+<text  x="111.13" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt;::end (154,684 samples, 0.02%)</title><rect x="352.2" y="501" width="0.1" height="15.0" fill="rgb(218,63,15)" rx="2" ry="2" />
+<text  x="355.20" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::UlDciListElement_s, std::allocator&lt;ns3::UlDciListElement_s&gt; &gt;::_Vector_impl::_Vector_impl (156,685 samples, 0.02%)</title><rect x="228.5" y="421" width="0.1" height="15.0" fill="rgb(229,112,26)" rx="2" ry="2" />
+<text  x="231.47" y="431.5" ></text>
+</g>
+<g >
+<title>void  (154,843 samples, 0.02%)</title><rect x="283.0" y="485" width="0.1" height="15.0" fill="rgb(253,221,53)" rx="2" ry="2" />
+<text  x="286.00" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::SpectrumConverter&gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::SpectrumConverter&gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::SpectrumConverter&gt; &gt; &gt;::find (1,053,943 samples, 0.11%)</title><rect x="330.3" y="485" width="0.9" height="15.0" fill="rgb(243,177,42)" rx="2" ry="2" />
+<text  x="333.32" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::ByteTagList::Iterator::Next (503,981 samples, 0.05%)</title><rect x="436.2" y="229" width="0.4" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="439.18" y="239.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::map (996,229 samples, 0.10%)</title><rect x="341.6" y="485" width="0.8" height="15.0" fill="rgb(242,171,40)" rx="2" ry="2" />
+<text  x="344.58" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;int const, double&gt; &gt;* std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_M_copy&lt;false, std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_Alloc_node&gt; (418,686 samples, 0.04%)</title><rect x="60.0" y="437" width="0.4" height="15.0" fill="rgb(224,87,21)" rx="2" ry="2" />
+<text  x="63.04" y="447.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::allocate (659,007 samples, 0.07%)</title><rect x="270.3" y="373" width="0.6" height="15.0" fill="rgb(236,145,34)" rx="2" ry="2" />
+<text  x="273.32" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::HigherLayerSelected_s* std::__do_uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::HigherLayerSelected_s const*, std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt; &gt;, ns3::HigherLayerSelected_s*&gt; (711,878 samples, 0.07%)</title><rect x="125.0" y="309" width="0.6" height="15.0" fill="rgb(244,179,43)" rx="2" ry="2" />
+<text  x="127.98" y="319.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::allocate (152,219 samples, 0.02%)</title><rect x="83.1" y="325" width="0.1" height="15.0" fill="rgb(213,40,9)" rx="2" ry="2" />
+<text  x="86.09" y="335.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::DlDciListElement_s, std::allocator&lt;ns3::DlDciListElement_s&gt; &gt;::_M_range_check (399,849 samples, 0.04%)</title><rect x="205.4" y="469" width="0.3" height="15.0" fill="rgb(212,33,8)" rx="2" ry="2" />
+<text  x="208.41" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider::ReportBufferStatusParameters&gt; &gt;::_M_valptr (444,605 samples, 0.05%)</title><rect x="570.4" y="261" width="0.3" height="15.0" fill="rgb(228,107,25)" rx="2" ry="2" />
+<text  x="573.37" y="271.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt;::_Vector_base (412,677 samples, 0.04%)</title><rect x="583.9" y="245" width="0.3" height="15.0" fill="rgb(246,192,46)" rx="2" ry="2" />
+<text  x="586.86" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::Time::ToDouble (495,841 samples, 0.05%)</title><rect x="484.1" y="501" width="0.4" height="15.0" fill="rgb(249,204,48)" rx="2" ry="2" />
+<text  x="487.10" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;int, std::allocator&lt;int&gt; &gt;::_M_deallocate (169,673 samples, 0.02%)</title><rect x="575.2" y="325" width="0.1" height="15.0" fill="rgb(217,59,14)" rx="2" ry="2" />
+<text  x="578.16" y="335.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt;, std::allocator&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt; &gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt;, std::allocator&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt;, std::allocator&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt;::_M_lower_bound (802,707 samples, 0.08%)</title><rect x="188.2" y="453" width="0.6" height="15.0" fill="rgb(224,89,21)" rx="2" ry="2" />
+<text  x="191.20" y="463.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::list (543,168 samples, 0.06%)</title><rect x="463.9" y="533" width="0.5" height="15.0" fill="rgb(236,145,34)" rx="2" ry="2" />
+<text  x="466.94" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, std::map&lt;unsigned char, ns3::LteMacSapProvider*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, std::map&lt;unsigned char, ns3::LteMacSapProvider*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt; &gt; &gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, std::map&lt;unsigned char, ns3::LteMacSapProvider*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt; &gt; &gt; &gt; &gt;::end (166,213 samples, 0.02%)</title><rect x="552.9" y="197" width="0.1" height="15.0" fill="rgb(249,206,49)" rx="2" ry="2" />
+<text  x="555.88" y="207.5" ></text>
+</g>
+<g >
+<title>ns3::LteFfConverter::double2fpS11dot3 (159,428 samples, 0.02%)</title><rect x="478.3" y="309" width="0.1" height="15.0" fill="rgb(209,21,5)" rx="2" ry="2" />
+<text  x="481.31" y="319.5" ></text>
+</g>
+<g >
+<title>std::move_iterator&lt;ns3::MacCeListElement_s*&gt; std::__make_move_if_noexcept_iterator&lt;ns3::MacCeListElement_s, std::move_iterator&lt;ns3::MacCeListElement_s*&gt; &gt; (197,593 samples, 0.02%)</title><rect x="129.9" y="469" width="0.2" height="15.0" fill="rgb(218,61,14)" rx="2" ry="2" />
+<text  x="132.90" y="479.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;*, std::vector&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt; &gt; &gt; &gt; std::move&lt;__gnu_cxx::__normal_iterator&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;*, std::vector&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt; &gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;*, std::vector&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt; &gt; &gt; &gt; &gt; (292,100 samples, 0.03%)</title><rect x="110.5" y="485" width="0.2" height="15.0" fill="rgb(208,15,3)" rx="2" ry="2" />
+<text  x="113.47" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::LteRadioBearerTag::Serialize (128,769 samples, 0.01%)</title><rect x="562.1" y="165" width="0.1" height="15.0" fill="rgb(229,113,27)" rx="2" ry="2" />
+<text  x="565.06" y="175.5" ></text>
+</g>
+<g >
+<title>ns3::Time::Time (193,863 samples, 0.02%)</title><rect x="738.0" y="533" width="0.2" height="15.0" fill="rgb(226,100,24)" rx="2" ry="2" />
+<text  x="741.02" y="543.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::~list (154,473 samples, 0.02%)</title><rect x="673.6" y="485" width="0.2" height="15.0" fill="rgb(222,80,19)" rx="2" ry="2" />
+<text  x="676.63" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::ByteTagList::ByteTagList (352,331 samples, 0.04%)</title><rect x="359.8" y="485" width="0.3" height="15.0" fill="rgb(220,69,16)" rx="2" ry="2" />
+<text  x="362.80" y="495.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt;::_M_addr (279,763 samples, 0.03%)</title><rect x="22.5" y="261" width="0.3" height="15.0" fill="rgb(219,68,16)" rx="2" ry="2" />
+<text  x="25.53" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::LteRlcSm::DoNotifyTxOpportunity (314,249 samples, 0.03%)</title><rect x="11.2" y="405" width="0.2" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="14.17" y="415.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt;::allocate (272,885 samples, 0.03%)</title><rect x="210.9" y="405" width="0.2" height="15.0" fill="rgb(233,132,31)" rx="2" ry="2" />
+<text  x="213.86" y="415.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt;::deallocate (229,384 samples, 0.02%)</title><rect x="392.3" y="485" width="0.1" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="395.26" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::_M_default_initialize (648,464 samples, 0.07%)</title><rect x="56.9" y="453" width="0.6" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="59.94" y="463.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Callback&lt;void, ns3::Ptr&lt;ns3::Packet const&gt; &gt;, std::allocator&lt;ns3::Callback&lt;void, ns3::Ptr&lt;ns3::Packet const&gt; &gt; &gt; &gt;::begin (514,565 samples, 0.05%)</title><rect x="494.2" y="533" width="0.4" height="15.0" fill="rgb(214,44,10)" rx="2" ry="2" />
+<text  x="497.16" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;1ul, double const&amp;, double const&amp;&gt;::_Tuple_impl (646,830 samples, 0.07%)</title><rect x="749.5" y="469" width="0.5" height="15.0" fill="rgb(253,222,53)" rx="2" ry="2" />
+<text  x="752.47" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumSignalParametersDataFrame::~LteSpectrumSignalParametersDataFrame (2,421,676 samples, 0.25%)</title><rect x="652.5" y="469" width="1.9" height="15.0" fill="rgb(242,174,41)" rx="2" ry="2" />
+<text  x="655.49" y="479.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::HigherLayerSelected_s*&gt; (126,894 samples, 0.01%)</title><rect x="585.2" y="229" width="0.1" height="15.0" fill="rgb(251,211,50)" rx="2" ry="2" />
+<text  x="588.18" y="239.5" ></text>
+</g>
+<g >
+<title>ns3::MakeEvent&lt;void  (903,382 samples, 0.09%)</title><rect x="87.2" y="485" width="0.8" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="90.23" y="495.5" ></text>
+</g>
+<g >
+<title>void ns3::Callback&lt;void, std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt;::Callback&lt;void  (28,028,867 samples, 2.89%)</title><rect x="441.4" y="453" width="22.5" height="15.0" fill="rgb(234,135,32)" rx="2" ry="2" />
+<text  x="444.39" y="463.5" >v..</text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::_List_base (597,918 samples, 0.06%)</title><rect x="366.4" y="469" width="0.5" height="15.0" fill="rgb(250,210,50)" rx="2" ry="2" />
+<text  x="369.39" y="479.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::allocate (155,343 samples, 0.02%)</title><rect x="331.7" y="405" width="0.1" height="15.0" fill="rgb(225,92,22)" rx="2" ry="2" />
+<text  x="334.66" y="415.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_assign_dispatch&lt;std::_List_const_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; (1,071,339 samples, 0.11%)</title><rect x="672.9" y="517" width="0.9" height="15.0" fill="rgb(237,148,35)" rx="2" ry="2" />
+<text  x="675.93" y="527.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::operator= (603,213 samples, 0.06%)</title><rect x="357.2" y="421" width="0.4" height="15.0" fill="rgb(251,215,51)" rx="2" ry="2" />
+<text  x="360.16" y="431.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;::~pair (940,561 samples, 0.10%)</title><rect x="505.5" y="437" width="0.8" height="15.0" fill="rgb(213,38,9)" rx="2" ry="2" />
+<text  x="508.52" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::LteMacSapProvider::TransmitPduParameters::TransmitPduParameters (318,692 samples, 0.03%)</title><rect x="551.7" y="261" width="0.2" height="15.0" fill="rgb(237,147,35)" rx="2" ry="2" />
+<text  x="554.69" y="271.5" ></text>
+</g>
+<g >
+<title>double* std::copy&lt;__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, double*&gt; (542,531 samples, 0.06%)</title><rect x="324.9" y="405" width="0.4" height="15.0" fill="rgb(246,192,46)" rx="2" ry="2" />
+<text  x="327.89" y="415.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::_M_insert&lt;ns3::Ptr&lt;ns3::Packet&gt; const&amp;&gt; (2,075,129 samples, 0.21%)</title><rect x="362.3" y="485" width="1.7" height="15.0" fill="rgb(234,135,32)" rx="2" ry="2" />
+<text  x="365.30" y="495.5" ></text>
+</g>
+<g >
+<title>double* std::__copy_move_a1&lt;false, double const*, double*&gt; (231,822 samples, 0.02%)</title><rect x="719.4" y="421" width="0.2" height="15.0" fill="rgb(239,156,37)" rx="2" ry="2" />
+<text  x="722.41" y="431.5" ></text>
+</g>
+<g >
+<title>std::tuple&lt;ns3::MultiModelSpectrumChannel*, ns3::Ptr&lt;ns3::SpectrumValue&gt;, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::tuple&lt;ns3::MultiModelSpectrumChannel*&amp;, ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp;, double&amp;, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;&amp;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;&amp;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;&amp;, true, true&gt; (550,800 samples, 0.06%)</title><rect x="340.3" y="421" width="0.5" height="15.0" fill="rgb(209,20,4)" rx="2" ry="2" />
+<text  x="343.33" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt;::_M_valptr (349,350 samples, 0.04%)</title><rect x="224.2" y="421" width="0.3" height="15.0" fill="rgb(249,206,49)" rx="2" ry="2" />
+<text  x="227.20" y="431.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::operator[] (460,007 samples, 0.05%)</title><rect x="105.0" y="469" width="0.4" height="15.0" fill="rgb(219,66,15)" rx="2" ry="2" />
+<text  x="108.04" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::EnbMacMemberLteEnbPhySapUser::SubframeIndication (20,436,391 samples, 2.11%)</title><rect x="91.8" y="533" width="16.5" height="15.0" fill="rgb(252,216,51)" rx="2" ry="2" />
+<text  x="94.81" y="543.5" ></text>
+</g>
+<g >
+<title>std::function&lt;void  (916,117 samples, 0.09%)</title><rect x="725.8" y="405" width="0.8" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="728.82" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Function_base::_Base_manager&lt;ns3::Callback&lt;void, ns3::DlInfoListElement_s&gt;::Callback&lt;void  (339,825 samples, 0.04%)</title><rect x="418.1" y="485" width="0.3" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="421.09" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::int64x64_t::int64x64_t (1,306,529 samples, 0.13%)</title><rect x="683.2" y="501" width="1.0" height="15.0" fill="rgb(240,161,38)" rx="2" ry="2" />
+<text  x="686.16" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::TbId_t, std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::_Select1st&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::_M_lower_bound (306,362 samples, 0.03%)</title><rect x="386.9" y="501" width="0.2" height="15.0" fill="rgb(236,144,34)" rx="2" ry="2" />
+<text  x="389.90" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Head_base&lt;1ul, ns3::Ptr&lt;ns3::PacketBurst&gt;, false&gt;::_Head_base&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;&amp;&gt; (472,356 samples, 0.05%)</title><rect x="282.4" y="421" width="0.4" height="15.0" fill="rgb(245,186,44)" rx="2" ry="2" />
+<text  x="285.37" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::Callback&lt;void, ns3::DlInfoListElement_s&gt;::Callback&lt;void  (152,653 samples, 0.02%)</title><rect x="418.2" y="469" width="0.2" height="15.0" fill="rgb(253,222,53)" rx="2" ry="2" />
+<text  x="421.24" y="479.5" ></text>
+</g>
+<g >
+<title>unsigned short* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;unsigned short const*, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, unsigned short*, unsigned short&gt; (706,218 samples, 0.07%)</title><rect x="217.3" y="453" width="0.6" height="15.0" fill="rgb(217,56,13)" rx="2" ry="2" />
+<text  x="220.34" y="463.5" ></text>
+</g>
+<g >
+<title>std::operator== (166,583 samples, 0.02%)</title><rect x="571.7" y="325" width="0.2" height="15.0" fill="rgb(229,110,26)" rx="2" ry="2" />
+<text  x="574.74" y="335.5" ></text>
+</g>
+<g >
+<title>unsigned short* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;unsigned short const*, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, unsigned short*&gt; (851,489 samples, 0.09%)</title><rect x="474.7" y="261" width="0.7" height="15.0" fill="rgb(212,32,7)" rx="2" ry="2" />
+<text  x="477.70" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::IidManager::LookupInformation (309,380 samples, 0.03%)</title><rect x="449.2" y="213" width="0.3" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="452.20" y="223.5" ></text>
+</g>
+<g >
+<title>ns3::ConstantPositionMobilityModel::DoGetPosition (241,331 samples, 0.02%)</title><rect x="738.4" y="533" width="0.2" height="15.0" fill="rgb(212,32,7)" rx="2" ry="2" />
+<text  x="741.38" y="543.5" ></text>
+</g>
+<g >
+<title>double* std::__uninitialized_copy&lt;true&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, double*&gt; (891,656 samples, 0.09%)</title><rect x="238.3" y="245" width="0.7" height="15.0" fill="rgb(238,153,36)" rx="2" ry="2" />
+<text  x="241.31" y="255.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Ptr&lt;ns3::Object&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Object&gt; &gt; &gt;::~vector (425,381 samples, 0.04%)</title><rect x="165.1" y="341" width="0.3" height="15.0" fill="rgb(223,83,19)" rx="2" ry="2" />
+<text  x="168.11" y="351.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::_Vector_base (157,238 samples, 0.02%)</title><rect x="159.6" y="389" width="0.2" height="15.0" fill="rgb(219,65,15)" rx="2" ry="2" />
+<text  x="162.63" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::EnbMacMemberLteEnbPhySapUser::SubframeIndication (1,650,854 samples, 0.17%)</title><rect x="15.8" y="549" width="1.3" height="15.0" fill="rgb(252,216,51)" rx="2" ry="2" />
+<text  x="18.79" y="559.5" ></text>
+</g>
+<g >
+<title>std::_Head_base&lt;1ul, ns3::Ptr&lt;ns3::SpectrumValue const&gt;, false&gt;::~_Head_base (200,623 samples, 0.02%)</title><rect x="708.6" y="405" width="0.2" height="15.0" fill="rgb(242,171,41)" rx="2" ry="2" />
+<text  x="711.63" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteSpectrumSignalParametersDlCtrlFrame&gt;::~Ptr (455,774 samples, 0.05%)</title><rect x="736.2" y="533" width="0.4" height="15.0" fill="rgb(218,62,14)" rx="2" ry="2" />
+<text  x="739.20" y="543.5" ></text>
+</g>
+<g >
+<title>operator new (152,677 samples, 0.02%)</title><rect x="397.5" y="453" width="0.1" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="400.46" y="463.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;::_M_ptr (443,193 samples, 0.05%)</title><rect x="85.2" y="357" width="0.4" height="15.0" fill="rgb(219,66,15)" rx="2" ry="2" />
+<text  x="88.23" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue const&gt;::~Ptr (192,870 samples, 0.02%)</title><rect x="737.9" y="533" width="0.1" height="15.0" fill="rgb(240,165,39)" rx="2" ry="2" />
+<text  x="740.87" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteControlMessage&gt;::Acquire (316,058 samples, 0.03%)</title><rect x="160.4" y="437" width="0.3" height="15.0" fill="rgb(212,36,8)" rx="2" ry="2" />
+<text  x="163.40" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumPhy::GetRxSpectrumModel (536,054 samples, 0.06%)</title><rect x="704.8" y="549" width="0.4" height="15.0" fill="rgb(248,199,47)" rx="2" ry="2" />
+<text  x="707.81" y="559.5" ></text>
+</g>
+<g >
+<title>unsigned short* std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::_M_allocate_and_copy&lt;__gnu_cxx::__normal_iterator&lt;unsigned short const*, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; (745,310 samples, 0.08%)</title><rect x="217.3" y="469" width="0.6" height="15.0" fill="rgb(227,102,24)" rx="2" ry="2" />
+<text  x="220.31" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumPhy::SetTxPowerSpectralDensity (503,325 samples, 0.05%)</title><rect x="673.9" y="533" width="0.4" height="15.0" fill="rgb(208,14,3)" rx="2" ry="2" />
+<text  x="676.91" y="543.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::_M_check_len (187,285 samples, 0.02%)</title><rect x="121.9" y="501" width="0.2" height="15.0" fill="rgb(229,114,27)" rx="2" ry="2" />
+<text  x="124.94" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Time::FromDouble (185,818 samples, 0.02%)</title><rect x="121.0" y="517" width="0.1" height="15.0" fill="rgb(249,203,48)" rx="2" ry="2" />
+<text  x="123.96" y="527.5" ></text>
+</g>
+<g >
+<title> (153,603 samples, 0.02%)</title><rect x="671.1" y="517" width="0.1" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="674.08" y="527.5" ></text>
+</g>
+<g >
+<title>std::set&lt;unsigned short, std::less&lt;unsigned short&gt;, std::allocator&lt;unsigned short&gt; &gt;::find (1,768,438 samples, 0.18%)</title><rect x="394.9" y="549" width="1.4" height="15.0" fill="rgb(207,12,2)" rx="2" ry="2" />
+<text  x="397.91" y="559.5" ></text>
+</g>
+<g >
+<title>unsigned long* std::__niter_wrap&lt;unsigned long*&gt; (153,241 samples, 0.02%)</title><rect x="199.9" y="389" width="0.1" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="202.92" y="399.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; (377,397 samples, 0.04%)</title><rect x="317.3" y="373" width="0.3" height="15.0" fill="rgb(212,35,8)" rx="2" ry="2" />
+<text  x="320.32" y="383.5" ></text>
+</g>
+<g >
+<title>operator new (169,207 samples, 0.02%)</title><rect x="574.6" y="245" width="0.1" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="577.55" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumPhy&gt; ns3::Object::GetObject&lt;ns3::SpectrumPhy&gt; (1,036,584 samples, 0.11%)</title><rect x="671.2" y="533" width="0.8" height="15.0" fill="rgb(214,45,10)" rx="2" ry="2" />
+<text  x="674.21" y="543.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_initialize_dispatch&lt;std::_List_const_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; (645,888 samples, 0.07%)</title><rect x="318.8" y="389" width="0.5" height="15.0" fill="rgb(215,50,12)" rx="2" ry="2" />
+<text  x="321.81" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::FfMacSchedSapUser::SchedDlConfigIndParameters::~SchedDlConfigIndParameters (210,908 samples, 0.02%)</title><rect x="95.4" y="453" width="0.2" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="98.42" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultSimulatorImpl::Destroy (238,924 samples, 0.02%)</title><rect x="36.6" y="757" width="0.2" height="15.0" fill="rgb(234,135,32)" rx="2" ry="2" />
+<text  x="39.64" y="767.5" ></text>
+</g>
+<g >
+<title>ns3::BsrLteControlMessage::GetBsr (1,058,333 samples, 0.11%)</title><rect x="441.7" y="357" width="0.9" height="15.0" fill="rgb(226,98,23)" rx="2" ry="2" />
+<text  x="444.74" y="367.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_Vector_base (222,716 samples, 0.02%)</title><rect x="125.3" y="245" width="0.2" height="15.0" fill="rgb(205,2,0)" rx="2" ry="2" />
+<text  x="128.29" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbMac::DoReportBufferStatus (682,380 samples, 0.07%)</title><rect x="17.9" y="341" width="0.5" height="15.0" fill="rgb(222,80,19)" rx="2" ry="2" />
+<text  x="20.88" y="351.5" ></text>
+</g>
+<g >
+<title>void std::destroy_at&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; (359,626 samples, 0.04%)</title><rect x="382.0" y="485" width="0.3" height="15.0" fill="rgb(213,38,9)" rx="2" ry="2" />
+<text  x="385.02" y="495.5" ></text>
+</g>
+<g >
+<title>double* std::copy&lt;__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, double*&gt; (291,489 samples, 0.03%)</title><rect x="606.7" y="421" width="0.2" height="15.0" fill="rgb(246,192,46)" rx="2" ry="2" />
+<text  x="609.66" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt; ns3::CreateObject&lt;ns3::PacketBurst&gt; (2,205,090 samples, 0.23%)</title><rect x="33.3" y="485" width="1.8" height="15.0" fill="rgb(205,4,0)" rx="2" ry="2" />
+<text  x="36.34" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::UlDciLteControlMessage&gt;::~Ptr (167,122 samples, 0.02%)</title><rect x="534.9" y="357" width="0.1" height="15.0" fill="rgb(254,229,54)" rx="2" ry="2" />
+<text  x="537.87" y="367.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_M_allocate (499,536 samples, 0.05%)</title><rect x="692.7" y="453" width="0.4" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="695.73" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_S_key (128,223 samples, 0.01%)</title><rect x="82.2" y="453" width="0.1" height="15.0" fill="rgb(244,182,43)" rx="2" ry="2" />
+<text  x="85.22" y="463.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::__uninitialized_copy&lt;true&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, unsigned char*&gt; (150,938 samples, 0.02%)</title><rect x="443.8" y="277" width="0.1" height="15.0" fill="rgb(233,129,30)" rx="2" ry="2" />
+<text  x="446.83" y="287.5" ></text>
+</g>
+<g >
+<title>double* std::__uninitialized_default_n_a&lt;double*, unsigned long, double&gt; (538,098 samples, 0.06%)</title><rect x="677.5" y="437" width="0.5" height="15.0" fill="rgb(248,199,47)" rx="2" ry="2" />
+<text  x="680.53" y="447.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, unsigned char*&gt; (242,076 samples, 0.02%)</title><rect x="214.4" y="389" width="0.2" height="15.0" fill="rgb(254,229,54)" rx="2" ry="2" />
+<text  x="217.42" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::EventId::operator= (656,172 samples, 0.07%)</title><rect x="64.4" y="533" width="0.5" height="15.0" fill="rgb(241,165,39)" rx="2" ry="2" />
+<text  x="67.40" y="543.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::CqiListElement_s, std::allocator&lt;ns3::CqiListElement_s&gt; &gt;::erase (1,047,417 samples, 0.11%)</title><rect x="254.9" y="517" width="0.8" height="15.0" fill="rgb(231,123,29)" rx="2" ry="2" />
+<text  x="257.88" y="527.5" ></text>
+</g>
+<g >
+<title> (142,163 samples, 0.01%)</title><rect x="689.1" y="485" width="0.1" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="692.06" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;* std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_create_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; const&amp;&gt; (200,295 samples, 0.02%)</title><rect x="88.2" y="389" width="0.2" height="15.0" fill="rgb(227,104,24)" rx="2" ry="2" />
+<text  x="91.22" y="399.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::vector (234,615 samples, 0.02%)</title><rect x="129.3" y="373" width="0.2" height="15.0" fill="rgb(206,9,2)" rx="2" ry="2" />
+<text  x="132.34" y="383.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;unsigned char*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; std::copy&lt;__gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;unsigned char*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt; (125,103 samples, 0.01%)</title><rect x="585.5" y="213" width="0.1" height="15.0" fill="rgb(230,115,27)" rx="2" ry="2" />
+<text  x="588.46" y="223.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::operator= (348,625 samples, 0.04%)</title><rect x="134.5" y="453" width="0.3" height="15.0" fill="rgb(211,28,6)" rx="2" ry="2" />
+<text  x="137.55" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_emplace_hint_unique&lt;unsigned int const&amp;, ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp;&gt; (1,502,471 samples, 0.15%)</title><rect x="658.4" y="485" width="1.2" height="15.0" fill="rgb(226,100,24)" rx="2" ry="2" />
+<text  x="661.36" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Callback&lt;void, ns3::SpectrumValue const&amp;&gt;::operator (35,103,998 samples, 3.62%)</title><rect x="577.1" y="517" width="28.3" height="15.0" fill="rgb(215,50,12)" rx="2" ry="2" />
+<text  x="580.13" y="527.5" >n..</text>
+</g>
+<g >
+<title>void std::_Destroy_aux&lt;false&gt;::__destroy&lt;ns3::Ptr&lt;ns3::Object&gt;*&gt; (124,479 samples, 0.01%)</title><rect x="77.6" y="277" width="0.1" height="15.0" fill="rgb(208,15,3)" rx="2" ry="2" />
+<text  x="80.60" y="287.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::operator[] (339,246 samples, 0.03%)</title><rect x="99.5" y="469" width="0.2" height="15.0" fill="rgb(219,66,15)" rx="2" ry="2" />
+<text  x="102.47" y="479.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::copy&lt;__gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, unsigned char*&gt; (388,698 samples, 0.04%)</title><rect x="214.3" y="405" width="0.3" height="15.0" fill="rgb(241,168,40)" rx="2" ry="2" />
+<text  x="217.30" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::MultiModelSpectrumChannel::StartTx (29,239,922 samples, 3.02%)</title><rect x="65.0" y="533" width="23.5" height="15.0" fill="rgb(227,102,24)" rx="2" ry="2" />
+<text  x="67.96" y="543.5" >n..</text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::EventImpl&gt;::operator= (817,259 samples, 0.08%)</title><rect x="307.9" y="501" width="0.7" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="310.92" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::~SpectrumValue (158,082 samples, 0.02%)</title><rect x="326.0" y="453" width="0.1" height="15.0" fill="rgb(247,193,46)" rx="2" ry="2" />
+<text  x="329.01" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_S_minimum (352,600 samples, 0.04%)</title><rect x="237.1" y="421" width="0.3" height="15.0" fill="rgb(205,3,0)" rx="2" ry="2" />
+<text  x="240.07" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::Angles::NormalizeAngles (303,214 samples, 0.03%)</title><rect x="642.1" y="485" width="0.3" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="645.14" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_const_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;::_M_const_cast (162,110 samples, 0.02%)</title><rect x="662.3" y="389" width="0.1" height="15.0" fill="rgb(234,136,32)" rx="2" ry="2" />
+<text  x="665.32" y="399.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy_aux&lt;false&gt;::__destroy&lt;ns3::DlInfoListElement_s*&gt; (1,227,211 samples, 0.13%)</title><rect x="256.0" y="453" width="0.9" height="15.0" fill="rgb(225,93,22)" rx="2" ry="2" />
+<text  x="258.95" y="463.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;::_M_get_Node_allocator (237,959 samples, 0.02%)</title><rect x="393.3" y="501" width="0.2" height="15.0" fill="rgb(227,102,24)" rx="2" ry="2" />
+<text  x="396.28" y="511.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt;::at (195,616 samples, 0.02%)</title><rect x="208.2" y="485" width="0.1" height="15.0" fill="rgb(241,166,39)" rx="2" ry="2" />
+<text  x="211.16" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;int const, double&gt; &gt;* std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_Alloc_node::operator (540,906 samples, 0.06%)</title><rect x="59.4" y="421" width="0.5" height="15.0" fill="rgb(210,25,6)" rx="2" ry="2" />
+<text  x="62.44" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::LteRadioBearerTag::Serialize (424,109 samples, 0.04%)</title><rect x="21.3" y="325" width="0.3" height="15.0" fill="rgb(229,113,27)" rx="2" ry="2" />
+<text  x="24.29" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::DlDciLteControlMessage::DlDciLteControlMessage (1,384,545 samples, 0.14%)</title><rect x="158.9" y="437" width="1.2" height="15.0" fill="rgb(226,98,23)" rx="2" ry="2" />
+<text  x="161.95" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy::DoSendLteControlMessage (498,633 samples, 0.05%)</title><rect x="95.8" y="421" width="0.4" height="15.0" fill="rgb(244,180,43)" rx="2" ry="2" />
+<text  x="98.80" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt; &gt;::_M_lower_bound (393,630 samples, 0.04%)</title><rect x="24.0" y="357" width="0.3" height="15.0" fill="rgb(245,188,44)" rx="2" ry="2" />
+<text  x="26.97" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::CeBitmap_e* std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;ns3::CeBitmap_e const*, std::vector&lt;ns3::CeBitmap_e, std::allocator&lt;ns3::CeBitmap_e&gt; &gt; &gt;, ns3::CeBitmap_e*&gt; (340,009 samples, 0.04%)</title><rect x="204.0" y="325" width="0.2" height="15.0" fill="rgb(210,26,6)" rx="2" ry="2" />
+<text  x="206.96" y="335.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_M_create_storage (163,185 samples, 0.02%)</title><rect x="56.8" y="437" width="0.1" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="59.81" y="447.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;*&gt; (240,649 samples, 0.02%)</title><rect x="146.1" y="309" width="0.2" height="15.0" fill="rgb(213,37,8)" rx="2" ry="2" />
+<text  x="149.08" y="319.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;::vector (252,039 samples, 0.03%)</title><rect x="101.6" y="405" width="0.2" height="15.0" fill="rgb(246,192,45)" rx="2" ry="2" />
+<text  x="104.59" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::MakeEvent&lt;void  (5,510,444 samples, 0.57%)</title><rect x="708.1" y="485" width="4.4" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="711.11" y="495.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::CqiListElement_s*, ns3::CqiListElement_s&gt; (970,280 samples, 0.10%)</title><rect x="254.9" y="469" width="0.8" height="15.0" fill="rgb(225,92,22)" rx="2" ry="2" />
+<text  x="257.94" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::LteRlcSm::DoNotifyTxOpportunity (1,376,216 samples, 0.14%)</title><rect x="15.9" y="405" width="1.1" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="18.88" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt;::operator= (158,753 samples, 0.02%)</title><rect x="17.0" y="453" width="0.1" height="15.0" fill="rgb(219,65,15)" rx="2" ry="2" />
+<text  x="19.99" y="463.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy_aux&lt;false&gt;::__destroy&lt;ns3::UlInfoListElement_s*&gt; (228,697 samples, 0.02%)</title><rect x="265.5" y="453" width="0.2" height="15.0" fill="rgb(215,48,11)" rx="2" ry="2" />
+<text  x="268.51" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt; &gt;::end (156,019 samples, 0.02%)</title><rect x="12.2" y="341" width="0.2" height="15.0" fill="rgb(210,23,5)" rx="2" ry="2" />
+<text  x="15.24" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::Tag::Tag (166,039 samples, 0.02%)</title><rect x="561.1" y="181" width="0.1" height="15.0" fill="rgb(212,35,8)" rx="2" ry="2" />
+<text  x="564.10" y="191.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;::operator* (200,943 samples, 0.02%)</title><rect x="221.0" y="485" width="0.1" height="15.0" fill="rgb(252,218,52)" rx="2" ry="2" />
+<text  x="223.96" y="495.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, unsigned char, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, unsigned char&gt; &gt; &gt;::find (887,061 samples, 0.09%)</title><rect x="176.7" y="469" width="0.7" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="179.72" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Packet&gt;::~Ptr (985,329 samples, 0.10%)</title><rect x="75.9" y="293" width="0.8" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="78.91" y="303.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::lower_bound (455,631 samples, 0.05%)</title><rect x="192.6" y="453" width="0.4" height="15.0" fill="rgb(251,211,50)" rx="2" ry="2" />
+<text  x="195.63" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt; &gt;::_M_end (207,877 samples, 0.02%)</title><rect x="565.8" y="197" width="0.2" height="15.0" fill="rgb(235,139,33)" rx="2" ry="2" />
+<text  x="568.79" y="207.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteAmc&gt;::operator (193,493 samples, 0.02%)</title><rect x="182.7" y="485" width="0.2" height="15.0" fill="rgb(243,178,42)" rx="2" ry="2" />
+<text  x="185.70" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::HigherLayerSelected_s* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::HigherLayerSelected_s const*, std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt; &gt;, ns3::HigherLayerSelected_s*&gt; (821,377 samples, 0.08%)</title><rect x="124.9" y="341" width="0.7" height="15.0" fill="rgb(230,118,28)" rx="2" ry="2" />
+<text  x="127.90" y="351.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_emplace_hint_unique&lt;std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (3,653,483 samples, 0.38%)</title><rect x="269.9" y="453" width="2.9" height="15.0" fill="rgb(248,201,48)" rx="2" ry="2" />
+<text  x="272.89" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumSignalParameters::~SpectrumSignalParameters (189,718 samples, 0.02%)</title><rect x="324.2" y="421" width="0.1" height="15.0" fill="rgb(205,2,0)" rx="2" ry="2" />
+<text  x="327.15" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::TypeId::GetAttributeN (1,058,658 samples, 0.11%)</title><rect x="631.1" y="469" width="0.9" height="15.0" fill="rgb(225,95,22)" rx="2" ry="2" />
+<text  x="634.15" y="479.5" ></text>
+</g>
+<g >
+<title>std::__invoke_result&lt;void  (22,443,594 samples, 2.31%)</title><rect x="17.2" y="629" width="18.0" height="15.0" fill="rgb(240,163,39)" rx="2" ry="2" />
+<text  x="20.17" y="639.5" ></text>
+</g>
+<g >
+<title> (1,100,918 samples, 0.11%)</title><rect x="759.3" y="693" width="0.9" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="762.32" y="703.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;1ul, ns3::Ptr&lt;ns3::SpectrumValue&gt;, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::_Tuple_impl&lt;ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp;, double&amp;, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;&amp;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;&amp;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;&amp;, void&gt; (635,410 samples, 0.07%)</title><rect x="666.8" y="405" width="0.5" height="15.0" fill="rgb(237,151,36)" rx="2" ry="2" />
+<text  x="669.75" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::Ptr&lt;ns3::Object&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Object&gt; &gt; &gt;::_Vector_base (154,166 samples, 0.02%)</title><rect x="629.7" y="469" width="0.1" height="15.0" fill="rgb(235,141,33)" rx="2" ry="2" />
+<text  x="632.66" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::LteMiErrorModel::Mib (2,166,389 samples, 0.22%)</title><rect x="487.1" y="533" width="1.8" height="15.0" fill="rgb(222,78,18)" rx="2" ry="2" />
+<text  x="490.14" y="543.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;::clear (551,743 samples, 0.06%)</title><rect x="290.8" y="389" width="0.5" height="15.0" fill="rgb(246,192,46)" rx="2" ry="2" />
+<text  x="293.83" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt; ns3::CreateObject&lt;ns3::PacketBurst&gt; (267,173 samples, 0.03%)</title><rect x="19.4" y="469" width="0.2" height="15.0" fill="rgb(205,4,0)" rx="2" ry="2" />
+<text  x="22.36" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::CqiListElement_s::~CqiListElement_s (532,379 samples, 0.05%)</title><rect x="461.1" y="309" width="0.4" height="15.0" fill="rgb(225,92,22)" rx="2" ry="2" />
+<text  x="464.07" y="319.5" ></text>
+</g>
+<g >
+<title>std::_Head_base&lt;1ul, ns3::Ptr&lt;ns3::SpectrumValue const&gt;, false&gt;::~_Head_base (896,241 samples, 0.09%)</title><rect x="772.8" y="517" width="0.8" height="15.0" fill="rgb(242,171,41)" rx="2" ry="2" />
+<text  x="775.83" y="527.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt;::allocate (185,863 samples, 0.02%)</title><rect x="261.0" y="325" width="0.2" height="15.0" fill="rgb(245,184,44)" rx="2" ry="2" />
+<text  x="264.02" y="335.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned char, ns3::LteMacSapProvider::ReportBufferStatusParameters, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider::ReportBufferStatusParameters&gt; &gt; &gt;::empty (342,978 samples, 0.04%)</title><rect x="690.2" y="501" width="0.3" height="15.0" fill="rgb(221,77,18)" rx="2" ry="2" />
+<text  x="693.19" y="511.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::DlInfoListElement_s::HarqStatus_e const*, std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt; &gt; std::__miter_base&lt;__gnu_cxx::__normal_iterator&lt;ns3::DlInfoListElement_s::HarqStatus_e const*, std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt; &gt; &gt; (190,102 samples, 0.02%)</title><rect x="259.4" y="309" width="0.1" height="15.0" fill="rgb(251,212,50)" rx="2" ry="2" />
+<text  x="262.37" y="319.5" ></text>
+</g>
+<g >
+<title>malloc (190,161 samples, 0.02%)</title><rect x="212.9" y="293" width="0.1" height="15.0" fill="rgb(230,119,28)" rx="2" ry="2" />
+<text  x="215.85" y="303.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;*, std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; std::__copy_move_a&lt;true, __gnu_cxx::__normal_iterator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;*, std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;*, std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; (2,253,875 samples, 0.23%)</title><rect x="634.1" y="485" width="1.8" height="15.0" fill="rgb(233,131,31)" rx="2" ry="2" />
+<text  x="637.11" y="495.5" ></text>
+</g>
+<g >
+<title> (168,179 samples, 0.02%)</title><rect x="731.6" y="501" width="0.1" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="734.56" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::PacketTagList::RemoveAll (323,410 samples, 0.03%)</title><rect x="453.6" y="85" width="0.2" height="15.0" fill="rgb(226,99,23)" rx="2" ry="2" />
+<text  x="456.57" y="95.5" ></text>
+</g>
+<g >
+<title>std::__detail::_List_node_header::_M_move_nodes (181,701 samples, 0.02%)</title><rect x="357.3" y="373" width="0.1" height="15.0" fill="rgb(241,169,40)" rx="2" ry="2" />
+<text  x="360.29" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_key_compare&lt;std::less&lt;unsigned short&gt; &gt;::_Rb_tree_key_compare (269,610 samples, 0.03%)</title><rect x="190.4" y="437" width="0.2" height="15.0" fill="rgb(217,58,13)" rx="2" ry="2" />
+<text  x="193.42" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_Vector_base (863,125 samples, 0.09%)</title><rect x="654.9" y="469" width="0.7" height="15.0" fill="rgb(237,150,35)" rx="2" ry="2" />
+<text  x="657.92" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Head_base&lt;1ul, ns3::Ptr&lt;ns3::SpectrumValue const&gt;, false&gt;::_Head_base&lt;ns3::Ptr&lt;ns3::SpectrumValue const&gt;&amp;&gt; (302,346 samples, 0.03%)</title><rect x="709.6" y="389" width="0.3" height="15.0" fill="rgb(215,49,11)" rx="2" ry="2" />
+<text  x="712.65" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::tbInfo_t::~tbInfo_t (151,450 samples, 0.02%)</title><rect x="506.4" y="405" width="0.1" height="15.0" fill="rgb(210,26,6)" rx="2" ry="2" />
+<text  x="509.41" y="415.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_initialize_dispatch&lt;std::_List_const_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; (225,934 samples, 0.02%)</title><rect x="648.8" y="405" width="0.2" height="15.0" fill="rgb(215,50,12)" rx="2" ry="2" />
+<text  x="651.85" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_put_node (1,157,136 samples, 0.12%)</title><rect x="764.1" y="645" width="0.9" height="15.0" fill="rgb(209,22,5)" rx="2" ry="2" />
+<text  x="767.11" y="655.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;* std::__copy_move&lt;true, false, std::random_access_iterator_tag&gt;::__copy_m&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;*, std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;*&gt; (1,471,329 samples, 0.15%)</title><rect x="290.2" y="437" width="1.2" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="293.18" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::HarqProcessInfoElement_t* std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;ns3::HarqProcessInfoElement_t const*, std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt;, ns3::HarqProcessInfoElement_t*&gt; (1,298,579 samples, 0.13%)</title><rect x="352.9" y="405" width="1.1" height="15.0" fill="rgb(210,26,6)" rx="2" ry="2" />
+<text  x="355.95" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy::StartSubFrame (2,983,151 samples, 0.31%)</title><rect x="17.2" y="581" width="2.4" height="15.0" fill="rgb(234,136,32)" rx="2" ry="2" />
+<text  x="20.17" y="591.5" ></text>
+</g>
+<g >
+<title>std::__detail::_List_node_header::_M_move_nodes (375,374 samples, 0.04%)</title><rect x="621.9" y="373" width="0.3" height="15.0" fill="rgb(241,169,40)" rx="2" ry="2" />
+<text  x="624.92" y="383.5" ></text>
+</g>
+<g >
+<title>void std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_construct_node&lt;unsigned int const&amp;, ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp;&gt; (576,441 samples, 0.06%)</title><rect x="658.7" y="437" width="0.5" height="15.0" fill="rgb(234,135,32)" rx="2" ry="2" />
+<text  x="661.70" y="447.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Callback&lt;void, ns3::Ptr&lt;ns3::PacketBurst const&gt; &gt;, std::allocator&lt;ns3::Callback&lt;void, ns3::Ptr&lt;ns3::PacketBurst const&gt; &gt; &gt; &gt;::begin (202,714 samples, 0.02%)</title><rect x="613.4" y="533" width="0.1" height="15.0" fill="rgb(243,175,41)" rx="2" ry="2" />
+<text  x="616.38" y="543.5" ></text>
+</g>
+<g >
+<title>unsigned int const&amp; std::__pair_get&lt;0ul&gt;::__move_get&lt;unsigned int const&amp;, ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp;&gt; (150,244 samples, 0.02%)</title><rect x="660.0" y="485" width="0.1" height="15.0" fill="rgb(248,201,48)" rx="2" ry="2" />
+<text  x="662.99" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt;::vector (152,454 samples, 0.02%)</title><rect x="456.7" y="245" width="0.1" height="15.0" fill="rgb(210,23,5)" rx="2" ry="2" />
+<text  x="459.65" y="255.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt;::operator= (427,945 samples, 0.04%)</title><rect x="134.8" y="469" width="0.4" height="15.0" fill="rgb(252,217,52)" rx="2" ry="2" />
+<text  x="137.83" y="479.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned short const, unsigned char&gt; &gt;::_M_addr (164,052 samples, 0.02%)</title><rect x="185.0" y="437" width="0.2" height="15.0" fill="rgb(224,88,21)" rx="2" ry="2" />
+<text  x="188.04" y="447.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt; &gt;::construct&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (363,009 samples, 0.04%)</title><rect x="83.2" y="357" width="0.3" height="15.0" fill="rgb(231,122,29)" rx="2" ry="2" />
+<text  x="86.25" y="367.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;ns3::LteFlowId_t const, ns3::FfMacSchedSapProvider::SchedDlRlcBufferReqParameters&gt; &gt;::_M_valptr (306,649 samples, 0.03%)</title><rect x="181.9" y="405" width="0.2" height="15.0" fill="rgb(222,81,19)" rx="2" ry="2" />
+<text  x="184.90" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbMac::DoSchedDlConfigInd (33,880,851 samples, 3.49%)</title><rect x="146.6" y="469" width="27.3" height="15.0" fill="rgb(205,3,0)" rx="2" ry="2" />
+<text  x="149.63" y="479.5" >n..</text>
+</g>
+<g >
+<title>ns3::LteSpectrumPhy::GetMobility (284,534 samples, 0.03%)</title><rect x="67.0" y="517" width="0.3" height="15.0" fill="rgb(228,107,25)" rx="2" ry="2" />
+<text  x="70.04" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Bit_iterator std::copy&lt;std::_Bit_const_iterator, std::_Bit_iterator&gt; (614,787 samples, 0.06%)</title><rect x="199.1" y="421" width="0.5" height="15.0" fill="rgb(210,26,6)" rx="2" ry="2" />
+<text  x="202.12" y="431.5" ></text>
+</g>
+<g >
+<title>double* std::__copy_move_a1&lt;false, double const*, double*&gt; (368,836 samples, 0.04%)</title><rect x="412.6" y="405" width="0.3" height="15.0" fill="rgb(239,156,37)" rx="2" ry="2" />
+<text  x="415.62" y="415.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::_M_insert&lt;ns3::Ptr&lt;ns3::Packet&gt; const&amp;&gt; (234,373 samples, 0.02%)</title><rect x="17.4" y="309" width="0.2" height="15.0" fill="rgb(234,135,32)" rx="2" ry="2" />
+<text  x="20.39" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::PfFfMacScheduler::RefreshHarqProcesses (154,047 samples, 0.02%)</title><rect x="98.4" y="469" width="0.1" height="15.0" fill="rgb(247,193,46)" rx="2" ry="2" />
+<text  x="101.39" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Time::FromDouble (2,083,512 samples, 0.21%)</title><rect x="682.5" y="533" width="1.7" height="15.0" fill="rgb(249,203,48)" rx="2" ry="2" />
+<text  x="685.53" y="543.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::push_back (337,881 samples, 0.03%)</title><rect x="689.3" y="453" width="0.3" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="692.33" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Ptr&lt;ns3::Object&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Object&gt; &gt; &gt;::_M_erase_at_end (153,047 samples, 0.02%)</title><rect x="379.5" y="293" width="0.1" height="15.0" fill="rgb(246,189,45)" rx="2" ry="2" />
+<text  x="382.52" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteControlMessage&gt;&amp; std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::emplace_back&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; const&amp;&gt; (2,163,597 samples, 0.22%)</title><rect x="498.4" y="517" width="1.8" height="15.0" fill="rgb(224,89,21)" rx="2" ry="2" />
+<text  x="501.42" y="527.5" ></text>
+</g>
+<g >
+<title>std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;* std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_create_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; const&amp;&gt; (228,584 samples, 0.02%)</title><rect x="689.4" y="421" width="0.2" height="15.0" fill="rgb(230,116,27)" rx="2" ry="2" />
+<text  x="692.42" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::EventId::EventId (1,674,500 samples, 0.17%)</title><rect x="38.0" y="725" width="1.4" height="15.0" fill="rgb(206,4,1)" rx="2" ry="2" />
+<text  x="41.01" y="735.5" ></text>
+</g>
+<g >
+<title>ns3::EventId ns3::Simulator::Schedule&lt;void  (8,521,614 samples, 0.88%)</title><rect x="705.9" y="517" width="6.8" height="15.0" fill="rgb(253,224,53)" rx="2" ry="2" />
+<text  x="708.88" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::LteRlcSpecificLteMacSapUser::NotifyTxOpportunity (192,143 samples, 0.02%)</title><rect x="96.2" y="405" width="0.2" height="15.0" fill="rgb(249,204,48)" rx="2" ry="2" />
+<text  x="99.20" y="415.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt; &gt;::destroy&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; (1,143,303 samples, 0.12%)</title><rect x="652.8" y="325" width="0.9" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="655.77" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultSimulatorImpl::ScheduleWithContext (475,136 samples, 0.05%)</title><rect x="115.9" y="453" width="0.4" height="15.0" fill="rgb(253,222,53)" rx="2" ry="2" />
+<text  x="118.94" y="463.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, unsigned char*, unsigned char&gt; (356,896 samples, 0.04%)</title><rect x="442.3" y="293" width="0.3" height="15.0" fill="rgb(226,96,23)" rx="2" ry="2" />
+<text  x="445.31" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue const&gt;::operator* (203,182 samples, 0.02%)</title><rect x="713.3" y="501" width="0.2" height="15.0" fill="rgb(227,102,24)" rx="2" ry="2" />
+<text  x="716.33" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Time::GetNanoSeconds (316,166 samples, 0.03%)</title><rect x="16.4" y="357" width="0.3" height="15.0" fill="rgb(241,166,39)" rx="2" ry="2" />
+<text  x="19.45" y="367.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, ns3::LteEnbComponentCarrierManager::UeInfo, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt; &gt; &gt;::end (195,237 samples, 0.02%)</title><rect x="429.2" y="277" width="0.2" height="15.0" fill="rgb(225,96,23)" rx="2" ry="2" />
+<text  x="432.22" y="287.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_get_insert_hint_unique_pos (232,404 samples, 0.02%)</title><rect x="332.5" y="453" width="0.2" height="15.0" fill="rgb(240,162,38)" rx="2" ry="2" />
+<text  x="335.49" y="463.5" ></text>
+</g>
+<g >
+<title>std::map&lt;ns3::TbId_t, ns3::tbInfo_t, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::find (186,148 samples, 0.02%)</title><rect x="120.4" y="517" width="0.2" height="15.0" fill="rgb(224,87,20)" rx="2" ry="2" />
+<text  x="123.44" y="527.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::push_back (1,860,199 samples, 0.19%)</title><rect x="148.3" y="405" width="1.5" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="151.35" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumConverter::Convert (333,104 samples, 0.03%)</title><rect x="115.1" y="485" width="0.2" height="15.0" fill="rgb(223,86,20)" rx="2" ry="2" />
+<text  x="118.05" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy*&amp; std::__get_helper&lt;0ul, ns3::LteEnbPhy*&gt; (377,927 samples, 0.04%)</title><rect x="752.3" y="581" width="0.3" height="15.0" fill="rgb(226,99,23)" rx="2" ry="2" />
+<text  x="755.34" y="591.5" ></text>
+</g>
+<g >
+<title>pthread_self@plt (151,149 samples, 0.02%)</title><rect x="280.2" y="485" width="0.1" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="283.16" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_rebalance_for_erase (551,017 samples, 0.06%)</title><rect x="222.4" y="437" width="0.5" height="15.0" fill="rgb(205,2,0)" rx="2" ry="2" />
+<text  x="225.41" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::MultiModelSpectrumChannel::FindAndEventuallyAddTxSpectrumModel (1,340,325 samples, 0.14%)</title><rect x="73.2" y="517" width="1.1" height="15.0" fill="rgb(212,32,7)" rx="2" ry="2" />
+<text  x="76.17" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::LteInterference::DoAddSignal (2,731,360 samples, 0.28%)</title><rect x="712.7" y="517" width="2.2" height="15.0" fill="rgb(233,129,30)" rx="2" ry="2" />
+<text  x="715.74" y="527.5" ></text>
+</g>
+<g >
+<title>std::tuple&lt;ns3::MultiModelSpectrumChannel*, ns3::Ptr&lt;ns3::SpectrumValue&gt;, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::tuple&lt;ns3::MultiModelSpectrumChannel*&amp;, ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp;, double&amp;, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;&amp;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;&amp;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;&amp;, true, true&gt; (714,235 samples, 0.07%)</title><rect x="666.7" y="437" width="0.6" height="15.0" fill="rgb(209,20,4)" rx="2" ry="2" />
+<text  x="669.69" y="447.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt;::_M_ptr (375,886 samples, 0.04%)</title><rect x="321.5" y="405" width="0.3" height="15.0" fill="rgb(226,97,23)" rx="2" ry="2" />
+<text  x="324.49" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::LteFlowId_t, std::pair&lt;ns3::LteFlowId_t const, ns3::FfMacSchedSapProvider::SchedDlRlcBufferReqParameters&gt;, std::_Select1st&lt;std::pair&lt;ns3::LteFlowId_t const, ns3::FfMacSchedSapProvider::SchedDlRlcBufferReqParameters&gt; &gt;, std::less&lt;ns3::LteFlowId_t&gt;, std::allocator&lt;std::pair&lt;ns3::LteFlowId_t const, ns3::FfMacSchedSapProvider::SchedDlRlcBufferReqParameters&gt; &gt; &gt;::_S_key (303,374 samples, 0.03%)</title><rect x="27.0" y="261" width="0.3" height="15.0" fill="rgb(227,104,24)" rx="2" ry="2" />
+<text  x="30.01" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::EventImpl::~EventImpl (201,506 samples, 0.02%)</title><rect x="770.8" y="661" width="0.2" height="15.0" fill="rgb(233,130,31)" rx="2" ry="2" />
+<text  x="773.79" y="671.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::DlInfoListElement_s::HarqStatus_e const*, std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt; &gt;::base (160,882 samples, 0.02%)</title><rect x="444.2" y="213" width="0.1" height="15.0" fill="rgb(205,4,0)" rx="2" ry="2" />
+<text  x="447.21" y="223.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::push_back (3,560,217 samples, 0.37%)</title><rect x="478.6" y="309" width="2.8" height="15.0" fill="rgb(229,113,27)" rx="2" ry="2" />
+<text  x="481.56" y="319.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;* std::__copy_move_a1&lt;true, std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;*, std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;*&gt; (189,156 samples, 0.02%)</title><rect x="117.8" y="453" width="0.1" height="15.0" fill="rgb(217,56,13)" rx="2" ry="2" />
+<text  x="120.75" y="463.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;std::_Rb_tree_node_base*, std::_Rb_tree_node_base*&gt;::pair&lt;std::_Rb_tree_node_base*&amp;, std::_Rb_tree_node_base*&amp;&gt; (149,261 samples, 0.02%)</title><rect x="336.2" y="373" width="0.2" height="15.0" fill="rgb(205,0,0)" rx="2" ry="2" />
+<text  x="339.24" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, double&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, double&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, double&gt; &gt; &gt;::_M_mbegin (153,413 samples, 0.02%)</title><rect x="294.7" y="485" width="0.1" height="15.0" fill="rgb(254,226,54)" rx="2" ry="2" />
+<text  x="297.72" y="495.5" ></text>
+</g>
+<g >
+<title>std::_List_const_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;::operator++ (234,590 samples, 0.02%)</title><rect x="500.7" y="517" width="0.2" height="15.0" fill="rgb(220,71,17)" rx="2" ry="2" />
+<text  x="503.67" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;::_M_allocate (239,647 samples, 0.02%)</title><rect x="514.1" y="501" width="0.2" height="15.0" fill="rgb(248,202,48)" rx="2" ry="2" />
+<text  x="517.07" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue&gt;::operator= (757,202 samples, 0.08%)</title><rect x="303.3" y="501" width="0.6" height="15.0" fill="rgb(220,71,17)" rx="2" ry="2" />
+<text  x="306.31" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::SpectrumModel, ns3::Empty, ns3::DefaultDeleter&lt;ns3::SpectrumModel&gt; &gt;::Ref (142,470 samples, 0.01%)</title><rect x="411.7" y="469" width="0.1" height="15.0" fill="rgb(217,58,13)" rx="2" ry="2" />
+<text  x="414.71" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::LteRadioBearerTag::GetInstanceTypeId (237,147 samples, 0.02%)</title><rect x="490.7" y="517" width="0.2" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="493.68" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumSignalParametersDataFrame::~LteSpectrumSignalParametersDataFrame (3,401,494 samples, 0.35%)</title><rect x="75.3" y="453" width="2.8" height="15.0" fill="rgb(242,174,41)" rx="2" ry="2" />
+<text  x="78.35" y="463.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;std::is_constructible&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt;::value, std::pair&lt;std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, bool&gt; &gt;::type std::map&lt;ns3::Scheduler::EventKey, ns3::EventImpl*, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::insert&lt;std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (890,212 samples, 0.09%)</title><rect x="108.5" y="469" width="0.7" height="15.0" fill="rgb(211,29,7)" rx="2" ry="2" />
+<text  x="111.50" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::ObjectBase::ConstructSelf (2,247,437 samples, 0.23%)</title><rect x="630.9" y="485" width="1.8" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="633.87" y="495.5" ></text>
+</g>
+<g >
+<title>std::__allocated_ptr&lt;std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt;::__allocated_ptr (192,427 samples, 0.02%)</title><rect x="149.1" y="357" width="0.1" height="15.0" fill="rgb(248,200,48)" rx="2" ry="2" />
+<text  x="152.06" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::Copy (696,783 samples, 0.07%)</title><rect x="644.7" y="469" width="0.5" height="15.0" fill="rgb(240,161,38)" rx="2" ry="2" />
+<text  x="647.66" y="479.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::list (190,083 samples, 0.02%)</title><rect x="447.3" y="277" width="0.2" height="15.0" fill="rgb(252,216,51)" rx="2" ry="2" />
+<text  x="450.33" y="287.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;double&gt;::allocate (187,232 samples, 0.02%)</title><rect x="300.7" y="357" width="0.1" height="15.0" fill="rgb(248,201,48)" rx="2" ry="2" />
+<text  x="303.67" y="367.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_insert&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; const&amp;&gt; (480,171 samples, 0.05%)</title><rect x="733.3" y="421" width="0.4" height="15.0" fill="rgb(210,27,6)" rx="2" ry="2" />
+<text  x="736.30" y="431.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::list (635,025 samples, 0.07%)</title><rect x="366.4" y="485" width="0.5" height="15.0" fill="rgb(252,216,51)" rx="2" ry="2" />
+<text  x="369.36" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::~PacketBurst (1,859,304 samples, 0.19%)</title><rect x="164.6" y="389" width="1.5" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="167.63" y="399.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;::~pair (193,911 samples, 0.02%)</title><rect x="104.0" y="325" width="0.1" height="15.0" fill="rgb(226,100,24)" rx="2" ry="2" />
+<text  x="106.96" y="335.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_Vector_base (153,635 samples, 0.02%)</title><rect x="457.2" y="261" width="0.1" height="15.0" fill="rgb(205,2,0)" rx="2" ry="2" />
+<text  x="460.19" y="271.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt; &gt;::destroy&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; (392,648 samples, 0.04%)</title><rect x="612.9" y="437" width="0.3" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="615.90" y="447.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;* std::__copy_move_a1&lt;true, std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;*, std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;*&gt; (843,550 samples, 0.09%)</title><rect x="357.1" y="469" width="0.7" height="15.0" fill="rgb(217,56,13)" rx="2" ry="2" />
+<text  x="360.09" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Simulator::DoSchedule (2,399,693 samples, 0.25%)</title><rect x="706.1" y="501" width="2.0" height="15.0" fill="rgb(222,79,18)" rx="2" ry="2" />
+<text  x="709.12" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Singleton&lt;ns3::IidManager&gt;::Get (322,923 samples, 0.03%)</title><rect x="631.7" y="453" width="0.3" height="15.0" fill="rgb(222,79,19)" rx="2" ry="2" />
+<text  x="634.74" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::TypeId::GetParent (436,938 samples, 0.05%)</title><rect x="34.6" y="421" width="0.4" height="15.0" fill="rgb(211,29,7)" rx="2" ry="2" />
+<text  x="37.61" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::~_Vector_base (440,906 samples, 0.05%)</title><rect x="216.4" y="469" width="0.3" height="15.0" fill="rgb(241,168,40)" rx="2" ry="2" />
+<text  x="219.39" y="479.5" ></text>
+</g>
+<g >
+<title> (167,770 samples, 0.02%)</title><rect x="565.2" y="213" width="0.2" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="568.23" y="223.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::copy&lt;__gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, unsigned char*&gt; (150,938 samples, 0.02%)</title><rect x="443.8" y="261" width="0.1" height="15.0" fill="rgb(241,168,40)" rx="2" ry="2" />
+<text  x="446.83" y="271.5" ></text>
+</g>
+<g >
+<title>[libm.so.6] (236,481 samples, 0.02%)</title><rect x="486.3" y="501" width="0.1" height="15.0" fill="rgb(208,16,4)" rx="2" ry="2" />
+<text  x="489.25" y="511.5" ></text>
+</g>
+<g >
+<title>unsigned short* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;unsigned short const*, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, unsigned short*, unsigned short&gt; (893,468 samples, 0.09%)</title><rect x="474.7" y="277" width="0.7" height="15.0" fill="rgb(217,56,13)" rx="2" ry="2" />
+<text  x="477.67" y="287.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;::__normal_iterator (279,119 samples, 0.03%)</title><rect x="714.3" y="453" width="0.2" height="15.0" fill="rgb(249,206,49)" rx="2" ry="2" />
+<text  x="717.27" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_S_key (764,919 samples, 0.08%)</title><rect x="85.1" y="389" width="0.6" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="88.07" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::LteInterference::AddSignal (11,691,674 samples, 1.21%)</title><rect x="705.8" y="533" width="9.4" height="15.0" fill="rgb(239,158,37)" rx="2" ry="2" />
+<text  x="708.75" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::int64x64_t::int64x64_t (150,413 samples, 0.02%)</title><rect x="121.0" y="501" width="0.1" height="15.0" fill="rgb(240,161,38)" rx="2" ry="2" />
+<text  x="123.99" y="511.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::vector (1,002,557 samples, 0.10%)</title><rect x="729.5" y="453" width="0.8" height="15.0" fill="rgb(239,156,37)" rx="2" ry="2" />
+<text  x="732.54" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Function_handler&lt;void  (20,810,198 samples, 2.15%)</title><rect x="422.0" y="501" width="16.7" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="424.97" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, unsigned char&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, unsigned char&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, unsigned char&gt; &gt; &gt;::_S_key (552,315 samples, 0.06%)</title><rect x="244.8" y="437" width="0.5" height="15.0" fill="rgb(210,27,6)" rx="2" ry="2" />
+<text  x="247.81" y="447.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::_M_default_initialize (574,140 samples, 0.06%)</title><rect x="677.5" y="453" width="0.5" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="680.53" y="463.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::map (449,666 samples, 0.05%)</title><rect x="88.1" y="501" width="0.3" height="15.0" fill="rgb(242,171,40)" rx="2" ry="2" />
+<text  x="91.09" y="511.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::push_back (3,070,728 samples, 0.32%)</title><rect x="692.0" y="501" width="2.5" height="15.0" fill="rgb(215,50,11)" rx="2" ry="2" />
+<text  x="695.02" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::MakeEvent&lt;void  (709,970 samples, 0.07%)</title><rect x="640.4" y="453" width="0.5" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="643.37" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Packet&gt; ns3::Create&lt;ns3::Packet, unsigned int&amp;&gt; (501,720 samples, 0.05%)</title><rect x="19.0" y="405" width="0.4" height="15.0" fill="rgb(253,223,53)" rx="2" ry="2" />
+<text  x="21.95" y="415.5" ></text>
+</g>
+<g >
+<title>std::_List_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;::operator++ (150,969 samples, 0.02%)</title><rect x="572.2" y="357" width="0.1" height="15.0" fill="rgb(243,177,42)" rx="2" ry="2" />
+<text  x="575.22" y="367.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;bool, std::allocator&lt;bool&gt; &gt;::at (245,216 samples, 0.03%)</title><rect x="246.5" y="485" width="0.2" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="249.45" y="495.5" ></text>
+</g>
+<g >
+<title>void std::destroy_at&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; (269,841 samples, 0.03%)</title><rect x="497.4" y="501" width="0.2" height="15.0" fill="rgb(216,52,12)" rx="2" ry="2" />
+<text  x="500.37" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Packet&gt;::Ptr (193,783 samples, 0.02%)</title><rect x="151.9" y="373" width="0.1" height="15.0" fill="rgb(230,117,28)" rx="2" ry="2" />
+<text  x="154.87" y="383.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::_M_clear (860,343 samples, 0.09%)</title><rect x="774.0" y="293" width="0.7" height="15.0" fill="rgb(217,56,13)" rx="2" ry="2" />
+<text  x="777.02" y="303.5" ></text>
+</g>
+<g >
+<title>decltype  (189,123 samples, 0.02%)</title><rect x="358.5" y="501" width="0.2" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="361.53" y="511.5" ></text>
+</g>
+<g >
+<title>std::tuple&lt;double const&amp;, double const&amp;, double const&amp;&gt; std::tie&lt;double const, double const, double const&gt; (1,173,308 samples, 0.12%)</title><rect x="749.0" y="517" width="1.0" height="15.0" fill="rgb(237,149,35)" rx="2" ry="2" />
+<text  x="752.04" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::RarLteControlMessage::~RarLteControlMessage (509,242 samples, 0.05%)</title><rect x="167.1" y="389" width="0.4" height="15.0" fill="rgb(215,46,11)" rx="2" ry="2" />
+<text  x="170.06" y="399.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, ns3::Ptr&lt;ns3::UeManager&gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::Ptr&lt;ns3::UeManager&gt; &gt; &gt; &gt;::find (1,529,532 samples, 0.16%)</title><rect x="28.0" y="341" width="1.2" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="30.97" y="351.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;*, std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; std::move&lt;__gnu_cxx::__normal_iterator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;*, std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;*, std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; (2,253,875 samples, 0.23%)</title><rect x="634.1" y="501" width="1.8" height="15.0" fill="rgb(211,30,7)" rx="2" ry="2" />
+<text  x="637.11" y="511.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::push_back (2,809,773 samples, 0.29%)</title><rect x="396.4" y="549" width="2.3" height="15.0" fill="rgb(225,94,22)" rx="2" ry="2" />
+<text  x="399.39" y="559.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt;::_Vector_impl::_Vector_impl (157,554 samples, 0.02%)</title><rect x="132.1" y="469" width="0.1" height="15.0" fill="rgb(237,150,35)" rx="2" ry="2" />
+<text  x="135.12" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Select1st&lt;std::pair&lt;unsigned short const, double&gt; &gt;::operator (261,404 samples, 0.03%)</title><rect x="295.7" y="469" width="0.2" height="15.0" fill="rgb(237,147,35)" rx="2" ry="2" />
+<text  x="298.71" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt; &gt;::end (126,641 samples, 0.01%)</title><rect x="566.6" y="197" width="0.1" height="15.0" fill="rgb(210,23,5)" rx="2" ry="2" />
+<text  x="569.59" y="207.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumSignalParametersDlCtrlFrame::Copy (7,245,802 samples, 0.75%)</title><rect x="313.7" y="501" width="5.9" height="15.0" fill="rgb(252,220,52)" rx="2" ry="2" />
+<text  x="316.75" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::MapScheduler::Insert (10,424,431 samples, 1.07%)</title><rect x="269.2" y="501" width="8.4" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="272.19" y="511.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, std::vector&lt;double, std::allocator&lt;double&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::~map (1,140,266 samples, 0.12%)</title><rect x="232.8" y="469" width="0.9" height="15.0" fill="rgb(235,140,33)" rx="2" ry="2" />
+<text  x="235.83" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Bit_iterator::operator[] (162,486 samples, 0.02%)</title><rect x="195.7" y="453" width="0.1" height="15.0" fill="rgb(251,215,51)" rx="2" ry="2" />
+<text  x="198.70" y="463.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_insert&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; const&amp;&gt; (304,758 samples, 0.03%)</title><rect x="620.5" y="485" width="0.3" height="15.0" fill="rgb(210,27,6)" rx="2" ry="2" />
+<text  x="623.55" y="495.5" ></text>
+</g>
+<g >
+<title>unsigned short* std::__uninitialized_fill_n&lt;true&gt;::__uninit_fill_n&lt;unsigned short*, unsigned long, unsigned short&gt; (819,768 samples, 0.08%)</title><rect x="252.1" y="421" width="0.6" height="15.0" fill="rgb(228,106,25)" rx="2" ry="2" />
+<text  x="255.08" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_M_erase (325,437 samples, 0.03%)</title><rect x="60.8" y="389" width="0.3" height="15.0" fill="rgb(227,102,24)" rx="2" ry="2" />
+<text  x="63.84" y="399.5" ></text>
+</g>
+<g >
+<title>void std::_Construct&lt;ns3::HigherLayerSelected_s, ns3::HigherLayerSelected_s const&amp;&gt; (277,299 samples, 0.03%)</title><rect x="442.8" y="229" width="0.2" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="445.78" y="239.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;bool, std::allocator&lt;bool&gt; &gt;::size (382,898 samples, 0.04%)</title><rect x="195.4" y="453" width="0.3" height="15.0" fill="rgb(208,17,4)" rx="2" ry="2" />
+<text  x="198.39" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Ptr&lt;ns3::Object&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Object&gt; &gt; &gt;::vector (941,823 samples, 0.10%)</title><rect x="365.6" y="469" width="0.8" height="15.0" fill="rgb(237,147,35)" rx="2" ry="2" />
+<text  x="368.60" y="479.5" ></text>
+</g>
+<g >
+<title>unsigned int&amp; std::_Mu&lt;unsigned int, false, false&gt;::operator (264,404 samples, 0.03%)</title><rect x="758.0" y="597" width="0.2" height="15.0" fill="rgb(207,12,3)" rx="2" ry="2" />
+<text  x="761.00" y="607.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::AttributeConstructionList::Item, std::allocator&lt;ns3::AttributeConstructionList::Item&gt; &gt;::_List_base (461,286 samples, 0.05%)</title><rect x="371.6" y="469" width="0.4" height="15.0" fill="rgb(251,212,50)" rx="2" ry="2" />
+<text  x="374.60" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbMac::DoSubframeIndication (4,972,136 samples, 0.51%)</title><rect x="11.4" y="549" width="4.0" height="15.0" fill="rgb(248,200,47)" rx="2" ry="2" />
+<text  x="14.43" y="559.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;::__normal_iterator (161,967 samples, 0.02%)</title><rect x="600.2" y="277" width="0.1" height="15.0" fill="rgb(249,206,49)" rx="2" ry="2" />
+<text  x="603.21" y="287.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::deallocate (181,716 samples, 0.02%)</title><rect x="378.3" y="261" width="0.1" height="15.0" fill="rgb(217,56,13)" rx="2" ry="2" />
+<text  x="381.26" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::CqiListElement_s* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;ns3::CqiListElement_s*, std::vector&lt;ns3::CqiListElement_s, std::allocator&lt;ns3::CqiListElement_s&gt; &gt; &gt;, ns3::CqiListElement_s*, ns3::CqiListElement_s&gt; (1,085,784 samples, 0.11%)</title><rect x="92.1" y="469" width="0.8" height="15.0" fill="rgb(228,106,25)" rx="2" ry="2" />
+<text  x="95.06" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Time::~Time (227,882 samples, 0.02%)</title><rect x="339.2" y="453" width="0.2" height="15.0" fill="rgb(212,36,8)" rx="2" ry="2" />
+<text  x="342.19" y="463.5" ></text>
+</g>
+<g >
+<title>void std::destroy_at&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; (827,732 samples, 0.09%)</title><rect x="774.0" y="261" width="0.7" height="15.0" fill="rgb(224,88,21)" rx="2" ry="2" />
+<text  x="777.05" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteControlMessage&gt;&amp; std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::emplace_back&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; const&amp;&gt; (180,536 samples, 0.02%)</title><rect x="697.8" y="517" width="0.1" height="15.0" fill="rgb(224,89,21)" rx="2" ry="2" />
+<text  x="700.79" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::Object::~Object (2,269,146 samples, 0.23%)</title><rect x="378.8" y="325" width="1.8" height="15.0" fill="rgb(229,110,26)" rx="2" ry="2" />
+<text  x="381.81" y="335.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;::push_back (551,584 samples, 0.06%)</title><rect x="636.1" y="533" width="0.5" height="15.0" fill="rgb(211,29,7)" rx="2" ry="2" />
+<text  x="639.13" y="543.5" ></text>
+</g>
+<g >
+<title>void std::_Function_base::_Base_manager&lt;std::_Bind&lt;void  (1,947,662 samples, 0.20%)</title><rect x="711.0" y="453" width="1.5" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="713.98" y="463.5" ></text>
+</g>
+<g >
+<title>void std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::_M_realloc_insert&lt;unsigned short&gt; (2,020,223 samples, 0.21%)</title><rect x="218.3" y="453" width="1.7" height="15.0" fill="rgb(217,56,13)" rx="2" ry="2" />
+<text  x="221.35" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::BuildDataListElement_s, std::allocator&lt;ns3::BuildDataListElement_s&gt; &gt;::_Vector_base (382,238 samples, 0.04%)</title><rect x="174.2" y="453" width="0.3" height="15.0" fill="rgb(224,89,21)" rx="2" ry="2" />
+<text  x="177.19" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt;::_M_valptr (354,718 samples, 0.04%)</title><rect x="24.0" y="325" width="0.3" height="15.0" fill="rgb(208,14,3)" rx="2" ry="2" />
+<text  x="26.97" y="335.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; &gt; &gt;::_M_valptr (277,907 samples, 0.03%)</title><rect x="455.2" y="293" width="0.3" height="15.0" fill="rgb(219,68,16)" rx="2" ry="2" />
+<text  x="458.25" y="303.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned char, ns3::LteMacSapProvider*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt; &gt;::find (393,630 samples, 0.04%)</title><rect x="24.0" y="389" width="0.3" height="15.0" fill="rgb(248,200,47)" rx="2" ry="2" />
+<text  x="26.97" y="399.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::begin (169,080 samples, 0.02%)</title><rect x="408.1" y="469" width="0.1" height="15.0" fill="rgb(206,6,1)" rx="2" ry="2" />
+<text  x="411.11" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt; &gt; &gt;::find (155,011 samples, 0.02%)</title><rect x="97.5" y="421" width="0.2" height="15.0" fill="rgb(238,154,36)" rx="2" ry="2" />
+<text  x="100.53" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_M_erase (743,951 samples, 0.08%)</title><rect x="394.1" y="501" width="0.6" height="15.0" fill="rgb(227,102,24)" rx="2" ry="2" />
+<text  x="397.13" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_insert_and_rebalance (155,976 samples, 0.02%)</title><rect x="83.7" y="373" width="0.1" height="15.0" fill="rgb(225,94,22)" rx="2" ry="2" />
+<text  x="86.71" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::EventImpl, ns3::Empty, ns3::DefaultDeleter&lt;ns3::EventImpl&gt; &gt;::Unref (9,603,406 samples, 0.99%)</title><rect x="769.6" y="725" width="7.7" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="772.57" y="735.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, std::vector&lt;double, std::allocator&lt;double&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::map (4,812,209 samples, 0.50%)</title><rect x="236.7" y="485" width="3.9" height="15.0" fill="rgb(249,204,48)" rx="2" ry="2" />
+<text  x="239.73" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteCcmMacSapProvider*&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteCcmMacSapProvider*&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteCcmMacSapProvider*&gt; &gt; &gt;::_M_lower_bound (812,518 samples, 0.08%)</title><rect x="458.4" y="245" width="0.6" height="15.0" fill="rgb(216,52,12)" rx="2" ry="2" />
+<text  x="461.37" y="255.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt;::operator= (1,354,571 samples, 0.14%)</title><rect x="25.6" y="293" width="1.1" height="15.0" fill="rgb(222,80,19)" rx="2" ry="2" />
+<text  x="28.58" y="303.5" ></text>
+</g>
+<g >
+<title>std::map&lt;ns3::Scheduler::EventKey, ns3::EventImpl*, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::lower_bound (2,251,041 samples, 0.23%)</title><rect x="84.3" y="437" width="1.8" height="15.0" fill="rgb(238,153,36)" rx="2" ry="2" />
+<text  x="87.30" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::ObjectBase::ConstructSelf (267,173 samples, 0.03%)</title><rect x="19.4" y="421" width="0.2" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="22.36" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt;::_M_get_Tp_allocator (192,155 samples, 0.02%)</title><rect x="476.2" y="293" width="0.1" height="15.0" fill="rgb(206,5,1)" rx="2" ry="2" />
+<text  x="479.16" y="303.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt;::_M_fill_insert (1,581,674 samples, 0.16%)</title><rect x="510.9" y="533" width="1.3" height="15.0" fill="rgb(226,97,23)" rx="2" ry="2" />
+<text  x="513.91" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;* std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_clone_node&lt;false, std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_Alloc_node&gt; (244,239 samples, 0.03%)</title><rect x="88.2" y="421" width="0.2" height="15.0" fill="rgb(205,4,0)" rx="2" ry="2" />
+<text  x="91.22" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Packet&gt; const&amp; std::forward&lt;ns3::Ptr&lt;ns3::Packet&gt; const&amp;&gt; (183,511 samples, 0.02%)</title><rect x="626.0" y="469" width="0.1" height="15.0" fill="rgb(205,2,0)" rx="2" ry="2" />
+<text  x="628.95" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::UeManager&gt;::Ptr (155,695 samples, 0.02%)</title><rect x="27.8" y="341" width="0.1" height="15.0" fill="rgb(239,158,37)" rx="2" ry="2" />
+<text  x="30.75" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumPhy&gt;&amp; std::__get_helper&lt;4ul, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt; (350,980 samples, 0.04%)</title><rect x="757.1" y="581" width="0.3" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="760.12" y="591.5" ></text>
+</g>
+<g >
+<title>ns3::LogComponent::IsEnabled (240,367 samples, 0.02%)</title><rect x="401.4" y="533" width="0.2" height="15.0" fill="rgb(214,43,10)" rx="2" ry="2" />
+<text  x="404.38" y="543.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_assign_dispatch&lt;std::_List_const_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; (2,878,472 samples, 0.30%)</title><rect x="732.1" y="501" width="2.3" height="15.0" fill="rgb(237,148,35)" rx="2" ry="2" />
+<text  x="735.11" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Simulator::Now (243,501 samples, 0.03%)</title><rect x="607.4" y="501" width="0.2" height="15.0" fill="rgb(240,164,39)" rx="2" ry="2" />
+<text  x="610.38" y="511.5" ></text>
+</g>
+<g >
+<title>unsigned short* std::__uninitialized_copy&lt;true&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;unsigned short const*, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, unsigned short*&gt; (731,227 samples, 0.08%)</title><rect x="474.8" y="245" width="0.6" height="15.0" fill="rgb(217,57,13)" rx="2" ry="2" />
+<text  x="477.80" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::HarqStatus_e* std::__uninitialized_copy&lt;true&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::DlInfoListElement_s::HarqStatus_e const*, std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt; &gt;, ns3::DlInfoListElement_s::HarqStatus_e*&gt; (1,860,884 samples, 0.19%)</title><rect x="259.1" y="341" width="1.5" height="15.0" fill="rgb(241,165,39)" rx="2" ry="2" />
+<text  x="262.11" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::PropagationLossModel::CalcRxPower (3,683,031 samples, 0.38%)</title><rect x="738.6" y="549" width="2.9" height="15.0" fill="rgb(217,55,13)" rx="2" ry="2" />
+<text  x="741.57" y="559.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_M_erase (351,602 samples, 0.04%)</title><rect x="394.4" y="421" width="0.3" height="15.0" fill="rgb(227,102,24)" rx="2" ry="2" />
+<text  x="397.38" y="431.5" ></text>
+</g>
+<g >
+<title>std::function&lt;void  (7,793,846 samples, 0.80%)</title><rect x="771.0" y="661" width="6.2" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="773.96" y="671.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::EventImpl&gt;::Acquire (709,181 samples, 0.07%)</title><rect x="768.8" y="709" width="0.5" height="15.0" fill="rgb(229,112,26)" rx="2" ry="2" />
+<text  x="771.75" y="719.5" ></text>
+</g>
+<g >
+<title>int&amp; std::vector&lt;int, std::allocator&lt;int&gt; &gt;::emplace_back&lt;int&gt; (1,496,718 samples, 0.15%)</title><rect x="589.8" y="261" width="1.3" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="592.85" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::HigherLayerSelected_s* std::__uninitialized_copy&lt;false&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::HigherLayerSelected_s const*, std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt; &gt;, ns3::HigherLayerSelected_s*&gt; (356,634 samples, 0.04%)</title><rect x="442.7" y="261" width="0.3" height="15.0" fill="rgb(251,215,51)" rx="2" ry="2" />
+<text  x="445.72" y="271.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::push_back (1,940,647 samples, 0.20%)</title><rect x="22.0" y="341" width="1.6" height="15.0" fill="rgb(222,79,18)" rx="2" ry="2" />
+<text  x="25.03" y="351.5" ></text>
+</g>
+<g >
+<title>std::_List_const_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;::operator* (148,833 samples, 0.02%)</title><rect x="620.8" y="501" width="0.1" height="15.0" fill="rgb(254,229,54)" rx="2" ry="2" />
+<text  x="623.79" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultSimulatorImpl::GetSystemId (155,576 samples, 0.02%)</title><rect x="154.4" y="341" width="0.1" height="15.0" fill="rgb(208,17,4)" rx="2" ry="2" />
+<text  x="157.42" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::EventImpl::Invoke (892,884,786 samples, 92.07%)</title><rect x="40.1" y="725" width="718.1" height="15.0" fill="rgb(209,20,4)" rx="2" ry="2" />
+<text  x="43.05" y="735.5" >ns3::EventImpl::Invoke</text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;2ul, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::_Tuple_impl&lt;double&amp;, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;&amp;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;&amp;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;&amp;, void&gt; (476,638 samples, 0.05%)</title><rect x="666.9" y="389" width="0.4" height="15.0" fill="rgb(240,161,38)" rx="2" ry="2" />
+<text  x="669.88" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy::StartFrame (314,249 samples, 0.03%)</title><rect x="11.2" y="581" width="0.2" height="15.0" fill="rgb(209,22,5)" rx="2" ry="2" />
+<text  x="14.17" y="591.5" ></text>
+</g>
+<g >
+<title>ns3::SbMeasResult_s::operator= (452,044 samples, 0.05%)</title><rect x="593.2" y="293" width="0.4" height="15.0" fill="rgb(205,4,1)" rx="2" ry="2" />
+<text  x="596.21" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumPhy*&amp; std::__get_helper&lt;0ul, ns3::LteSpectrumPhy*&gt; (532,195 samples, 0.05%)</title><rect x="753.4" y="581" width="0.4" height="15.0" fill="rgb(210,26,6)" rx="2" ry="2" />
+<text  x="756.36" y="591.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy::DoSendLteControlMessage (2,809,761 samples, 0.29%)</title><rect x="148.3" y="437" width="2.2" height="15.0" fill="rgb(244,180,43)" rx="2" ry="2" />
+<text  x="151.28" y="447.5" ></text>
+</g>
+<g >
+<title>std::tuple&lt;ns3::LteInterference*, ns3::Ptr&lt;ns3::SpectrumValue const&gt;, unsigned int&gt;::~tuple (489,613 samples, 0.05%)</title><rect x="708.4" y="453" width="0.4" height="15.0" fill="rgb(251,215,51)" rx="2" ry="2" />
+<text  x="711.40" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_M_allocate (168,940 samples, 0.02%)</title><rect x="78.5" y="437" width="0.2" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="81.52" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::DoDispose (1,239,705 samples, 0.13%)</title><rect x="377.7" y="357" width="1.0" height="15.0" fill="rgb(242,172,41)" rx="2" ry="2" />
+<text  x="380.69" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::TracedCallback&lt;unsigned int, unsigned int, unsigned short, unsigned char, unsigned short, unsigned char&gt;::operator (198,920 samples, 0.02%)</title><rect x="231.2" y="453" width="0.2" height="15.0" fill="rgb(219,64,15)" rx="2" ry="2" />
+<text  x="234.25" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumPhy* ns3::PeekPointer&lt;ns3::LteSpectrumPhy&gt; (364,052 samples, 0.04%)</title><rect x="469.6" y="389" width="0.3" height="15.0" fill="rgb(206,4,1)" rx="2" ry="2" />
+<text  x="472.63" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::Simulator::DoSchedule (16,091,885 samples, 1.66%)</title><rect x="267.6" y="533" width="12.9" height="15.0" fill="rgb(222,79,18)" rx="2" ry="2" />
+<text  x="270.56" y="543.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::allocate (192,748 samples, 0.02%)</title><rect x="108.6" y="341" width="0.2" height="15.0" fill="rgb(213,40,9)" rx="2" ry="2" />
+<text  x="111.62" y="351.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::UlInfoListElement_s&gt; (157,331 samples, 0.02%)</title><rect x="265.6" y="437" width="0.1" height="15.0" fill="rgb(227,102,24)" rx="2" ry="2" />
+<text  x="268.57" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt; &gt; &gt;::_S_key (289,376 samples, 0.03%)</title><rect x="429.7" y="229" width="0.3" height="15.0" fill="rgb(222,81,19)" rx="2" ry="2" />
+<text  x="432.74" y="239.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy_aux&lt;false&gt;::__destroy&lt;ns3::DlInfoListElement_s*&gt; (852,686 samples, 0.09%)</title><rect x="132.4" y="453" width="0.7" height="15.0" fill="rgb(225,93,22)" rx="2" ry="2" />
+<text  x="135.40" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Function_handler&lt;void  (324,769 samples, 0.03%)</title><rect x="611.9" y="389" width="0.3" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="614.94" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::HarqStatus_e* std::__copy_move_a1&lt;false, ns3::DlInfoListElement_s::HarqStatus_e const*, ns3::DlInfoListElement_s::HarqStatus_e*&gt; (321,532 samples, 0.03%)</title><rect x="444.3" y="229" width="0.3" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="447.34" y="239.5" ></text>
+</g>
+<g >
+<title>std::_Function_base::_Base_manager&lt;void  (200,340 samples, 0.02%)</title><rect x="423.0" y="405" width="0.2" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="426.05" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumPhy::StartRxData (12,537,177 samples, 1.29%)</title><rect x="715.2" y="533" width="10.0" height="15.0" fill="rgb(226,100,24)" rx="2" ry="2" />
+<text  x="718.16" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbMac::DoTransmitPdu (579,238 samples, 0.06%)</title><rect x="17.2" y="357" width="0.4" height="15.0" fill="rgb(220,70,16)" rx="2" ry="2" />
+<text  x="20.17" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::LtePhy::GetPacketBurst (30,682,505 samples, 3.16%)</title><rect x="358.7" y="549" width="24.7" height="15.0" fill="rgb(221,76,18)" rx="2" ry="2" />
+<text  x="361.71" y="559.5" >n..</text>
+</g>
+<g >
+<title>ns3::LteEnbPhy::PhyPduReceived (14,218,237 samples, 1.47%)</title><rect x="423.5" y="373" width="11.4" height="15.0" fill="rgb(227,103,24)" rx="2" ry="2" />
+<text  x="426.51" y="383.5" ></text>
+</g>
+<g >
+<title>int* std::__copy_move_a2&lt;false, int const*, int*&gt; (130,133 samples, 0.01%)</title><rect x="574.2" y="245" width="0.1" height="15.0" fill="rgb(224,87,20)" rx="2" ry="2" />
+<text  x="577.21" y="255.5" ></text>
+</g>
+<g >
+<title>bool std::_Function_base::_Base_manager&lt;std::_Bind&lt;void  (195,009 samples, 0.02%)</title><rect x="307.1" y="453" width="0.1" height="15.0" fill="rgb(213,39,9)" rx="2" ry="2" />
+<text  x="310.07" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::_M_check_len (1,020,384 samples, 0.11%)</title><rect x="397.6" y="517" width="0.8" height="15.0" fill="rgb(229,114,27)" rx="2" ry="2" />
+<text  x="400.59" y="527.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::FfMacSchedSapProvider::SchedUlCqiInfoReqParameters, std::allocator&lt;ns3::FfMacSchedSapProvider::SchedUlCqiInfoReqParameters&gt; &gt;::_M_range_check (158,349 samples, 0.02%)</title><rect x="262.9" y="501" width="0.1" height="15.0" fill="rgb(211,27,6)" rx="2" ry="2" />
+<text  x="265.89" y="511.5" ></text>
+</g>
+<g >
+<title>double* std::fill_n&lt;double*, unsigned long, double&gt; (187,050 samples, 0.02%)</title><rect x="677.7" y="389" width="0.1" height="15.0" fill="rgb(234,135,32)" rx="2" ry="2" />
+<text  x="680.69" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteControlMessage&gt;::Ptr (266,180 samples, 0.03%)</title><rect x="319.1" y="293" width="0.2" height="15.0" fill="rgb(222,81,19)" rx="2" ry="2" />
+<text  x="322.05" y="303.5" ></text>
+</g>
+<g >
+<title>void std::fill&lt;std::_Bit_iterator, bool&gt; (148,785 samples, 0.02%)</title><rect x="248.6" y="437" width="0.1" height="15.0" fill="rgb(224,89,21)" rx="2" ry="2" />
+<text  x="251.63" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::~_Vector_base (160,698 samples, 0.02%)</title><rect x="610.0" y="373" width="0.1" height="15.0" fill="rgb(241,168,40)" rx="2" ry="2" />
+<text  x="612.97" y="383.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::find (842,898 samples, 0.09%)</title><rect x="223.1" y="485" width="0.7" height="15.0" fill="rgb(223,83,20)" rx="2" ry="2" />
+<text  x="226.07" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::TracedCallback&lt;unsigned short, unsigned char, unsigned int&gt;::operator (664,705 samples, 0.07%)</title><rect x="566.9" y="261" width="0.6" height="15.0" fill="rgb(228,106,25)" rx="2" ry="2" />
+<text  x="569.92" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::SpectrumValue (716,762 samples, 0.07%)</title><rect x="78.2" y="501" width="0.5" height="15.0" fill="rgb(211,27,6)" rx="2" ry="2" />
+<text  x="81.15" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Select1st&lt;std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt; &gt;::operator (124,333 samples, 0.01%)</title><rect x="434.1" y="261" width="0.1" height="15.0" fill="rgb(240,161,38)" rx="2" ry="2" />
+<text  x="437.10" y="271.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;* std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_create_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; const&amp;&gt; (233,103 samples, 0.02%)</title><rect x="668.7" y="389" width="0.1" height="15.0" fill="rgb(227,104,24)" rx="2" ry="2" />
+<text  x="671.65" y="399.5" ></text>
+</g>
+<g >
+<title>std::_List_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::insert&lt;std::_List_const_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;, void&gt; (987,508 samples, 0.10%)</title><rect x="673.0" y="501" width="0.8" height="15.0" fill="rgb(210,23,5)" rx="2" ry="2" />
+<text  x="675.96" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_copy (156,128 samples, 0.02%)</title><rect x="667.1" y="277" width="0.1" height="15.0" fill="rgb(246,192,46)" rx="2" ry="2" />
+<text  x="670.07" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::operator= (1,481,592 samples, 0.15%)</title><rect x="603.9" y="325" width="1.2" height="15.0" fill="rgb(243,177,42)" rx="2" ry="2" />
+<text  x="606.91" y="335.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, unsigned char*&gt; (481,444 samples, 0.05%)</title><rect x="519.2" y="309" width="0.4" height="15.0" fill="rgb(227,104,25)" rx="2" ry="2" />
+<text  x="522.19" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt;::Ptr (159,551 samples, 0.02%)</title><rect x="366.9" y="501" width="0.1" height="15.0" fill="rgb(219,67,16)" rx="2" ry="2" />
+<text  x="369.87" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumValueHelper::CreateUlTxPowerSpectralDensity (151,318 samples, 0.02%)</title><rect x="614.4" y="517" width="0.1" height="15.0" fill="rgb(253,224,53)" rx="2" ry="2" />
+<text  x="617.41" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_Vector_impl_data::_Vector_impl_data (146,089 samples, 0.02%)</title><rect x="688.9" y="389" width="0.1" height="15.0" fill="rgb(251,215,51)" rx="2" ry="2" />
+<text  x="691.91" y="399.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::vector (202,804 samples, 0.02%)</title><rect x="593.4" y="149" width="0.1" height="15.0" fill="rgb(206,9,2)" rx="2" ry="2" />
+<text  x="596.38" y="159.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteSpectrumPhy&gt;::Acquire (332,097 samples, 0.03%)</title><rect x="469.9" y="389" width="0.3" height="15.0" fill="rgb(236,143,34)" rx="2" ry="2" />
+<text  x="472.92" y="399.5" ></text>
+</g>
+<g >
+<title>decltype  (146,680 samples, 0.02%)</title><rect x="251.8" y="421" width="0.1" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="254.81" y="431.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::~vector (209,498 samples, 0.02%)</title><rect x="605.4" y="501" width="0.2" height="15.0" fill="rgb(225,92,22)" rx="2" ry="2" />
+<text  x="608.40" y="511.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, bool&gt;::pair (1,137,947 samples, 0.12%)</title><rect x="276.0" y="485" width="0.9" height="15.0" fill="rgb(252,220,52)" rx="2" ry="2" />
+<text  x="278.99" y="495.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;is_invocable_r_v&lt;void, void  (27,749,977 samples, 2.86%)</title><rect x="441.6" y="405" width="22.3" height="15.0" fill="rgb(243,178,42)" rx="2" ry="2" />
+<text  x="444.62" y="415.5" >s..</text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_copy (326,142 samples, 0.03%)</title><rect x="88.2" y="469" width="0.2" height="15.0" fill="rgb(246,192,46)" rx="2" ry="2" />
+<text  x="91.19" y="479.5" ></text>
+</g>
+<g >
+<title>std::_List_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;::_List_iterator (196,537 samples, 0.02%)</title><rect x="148.5" y="373" width="0.2" height="15.0" fill="rgb(223,84,20)" rx="2" ry="2" />
+<text  x="151.51" y="383.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::~_List_base (678,895 samples, 0.07%)</title><rect x="392.0" y="533" width="0.5" height="15.0" fill="rgb(221,74,17)" rx="2" ry="2" />
+<text  x="394.97" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider::ReportBufferStatusParameters&gt; &gt;::_M_valptr (187,088 samples, 0.02%)</title><rect x="689.9" y="469" width="0.2" height="15.0" fill="rgb(228,107,25)" rx="2" ry="2" />
+<text  x="692.91" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::Copy (422,077 samples, 0.04%)</title><rect x="114.0" y="421" width="0.3" height="15.0" fill="rgb(241,167,40)" rx="2" ry="2" />
+<text  x="116.96" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;0ul, ns3::LteSpectrumPhy*&gt;::_M_head (369,313 samples, 0.04%)</title><rect x="753.5" y="565" width="0.3" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="756.49" y="575.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt;::_M_check_len (474,800 samples, 0.05%)</title><rect x="511.8" y="517" width="0.4" height="15.0" fill="rgb(223,84,20)" rx="2" ry="2" />
+<text  x="514.80" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy::DequeueUlDci[abi:cxx11] (9,233,350 samples, 0.95%)</title><rect x="285.0" y="549" width="7.4" height="15.0" fill="rgb(213,37,9)" rx="2" ry="2" />
+<text  x="288.01" y="559.5" ></text>
+</g>
+<g >
+<title>ns3::Object::Dispose (202,781 samples, 0.02%)</title><rect x="36.7" y="501" width="0.1" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="39.67" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Function_base::_Base_manager&lt;ns3::Callback&lt;void, ns3::UlInfoListElement_s&gt;::Callback&lt;void  (442,482 samples, 0.05%)</title><rect x="438.9" y="485" width="0.4" height="15.0" fill="rgb(225,93,22)" rx="2" ry="2" />
+<text  x="441.93" y="495.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt; &gt;::_M_ptr (156,072 samples, 0.02%)</title><rect x="297.7" y="421" width="0.1" height="15.0" fill="rgb(228,109,26)" rx="2" ry="2" />
+<text  x="300.66" y="431.5" ></text>
+</g>
+<g >
+<title> (193,493 samples, 0.02%)</title><rect x="182.7" y="469" width="0.2" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="185.70" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::HarqProcessInfoElement_t* std::copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::HarqProcessInfoElement_t const*, std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt;, ns3::HarqProcessInfoElement_t*&gt; (185,369 samples, 0.02%)</title><rect x="117.4" y="405" width="0.1" height="15.0" fill="rgb(247,195,46)" rx="2" ry="2" />
+<text  x="120.37" y="415.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::__fill_n_a&lt;unsigned char*, unsigned long, unsigned char&gt; (604,594 samples, 0.06%)</title><rect x="460.4" y="181" width="0.5" height="15.0" fill="rgb(243,177,42)" rx="2" ry="2" />
+<text  x="463.45" y="191.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::BuildDataListElement_s, std::allocator&lt;ns3::BuildDataListElement_s&gt; &gt;::_M_check_len (351,521 samples, 0.04%)</title><rect x="202.6" y="453" width="0.3" height="15.0" fill="rgb(239,157,37)" rx="2" ry="2" />
+<text  x="205.61" y="463.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned char, ns3::LteUeMac::LcInfo, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteUeMac::LcInfo&gt; &gt; &gt;::begin (638,035 samples, 0.07%)</title><rect x="571.0" y="325" width="0.5" height="15.0" fill="rgb(230,115,27)" rx="2" ry="2" />
+<text  x="574.00" y="335.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_Vector_base (603,299 samples, 0.06%)</title><rect x="407.6" y="469" width="0.5" height="15.0" fill="rgb(237,150,35)" rx="2" ry="2" />
+<text  x="410.62" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteChunkProcessor&gt;::operator (207,486 samples, 0.02%)</title><rect x="408.8" y="533" width="0.2" height="15.0" fill="rgb(243,177,42)" rx="2" ry="2" />
+<text  x="411.85" y="543.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt;::operator= (2,127,957 samples, 0.22%)</title><rect x="206.1" y="485" width="1.7" height="15.0" fill="rgb(231,123,29)" rx="2" ry="2" />
+<text  x="209.07" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_M_erase (626,961 samples, 0.06%)</title><rect x="394.2" y="453" width="0.5" height="15.0" fill="rgb(227,102,24)" rx="2" ry="2" />
+<text  x="397.19" y="463.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned char const, ns3::LteUeMac::LcInfo&gt; &gt;::_M_ptr (236,021 samples, 0.02%)</title><rect x="438.1" y="245" width="0.2" height="15.0" fill="rgb(228,105,25)" rx="2" ry="2" />
+<text  x="441.15" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::Object::DoDelete (659,540 samples, 0.07%)</title><rect x="166.3" y="405" width="0.5" height="15.0" fill="rgb(212,34,8)" rx="2" ry="2" />
+<text  x="169.26" y="415.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;::operator[] (236,769 samples, 0.02%)</title><rect x="375.7" y="517" width="0.2" height="15.0" fill="rgb(212,32,7)" rx="2" ry="2" />
+<text  x="378.68" y="527.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt;::_M_ptr (241,718 samples, 0.02%)</title><rect x="496.1" y="517" width="0.2" height="15.0" fill="rgb(215,48,11)" rx="2" ry="2" />
+<text  x="499.09" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultDeleter&lt;ns3::Packet&gt;::Delete (2,691,525 samples, 0.28%)</title><rect x="451.7" y="133" width="2.2" height="15.0" fill="rgb(231,123,29)" rx="2" ry="2" />
+<text  x="454.73" y="143.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::deallocate (887,233 samples, 0.09%)</title><rect x="764.3" y="613" width="0.7" height="15.0" fill="rgb(238,152,36)" rx="2" ry="2" />
+<text  x="767.33" y="623.5" ></text>
+</g>
+<g >
+<title>decltype  (273,884 samples, 0.03%)</title><rect x="383.2" y="485" width="0.2" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="386.17" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::FfMacSchedSapProvider::SchedDlCqiInfoReqParameters::~SchedDlCqiInfoReqParameters (560,297 samples, 0.06%)</title><rect x="131.0" y="517" width="0.5" height="15.0" fill="rgb(239,158,37)" rx="2" ry="2" />
+<text  x="134.03" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, unsigned int&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt; &gt;::find (147,114 samples, 0.02%)</title><rect x="94.4" y="453" width="0.1" height="15.0" fill="rgb(214,44,10)" rx="2" ry="2" />
+<text  x="97.40" y="463.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; const*, std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt;::difference_type __gnu_cxx::operator-&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; const*, std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; (318,233 samples, 0.03%)</title><rect x="376.2" y="517" width="0.2" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="379.16" y="527.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy_aux&lt;true&gt;::__destroy&lt;unsigned char*&gt; (197,227 samples, 0.02%)</title><rect x="686.4" y="405" width="0.1" height="15.0" fill="rgb(224,89,21)" rx="2" ry="2" />
+<text  x="689.38" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::MobilityModel&gt;::Acquire (163,101 samples, 0.02%)</title><rect x="742.9" y="533" width="0.2" height="15.0" fill="rgb(253,222,53)" rx="2" ry="2" />
+<text  x="745.93" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_Vector_base (381,298 samples, 0.04%)</title><rect x="159.3" y="389" width="0.3" height="15.0" fill="rgb(205,2,0)" rx="2" ry="2" />
+<text  x="162.26" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::LteUePhy::DoSendLteControlMessage (1,153,573 samples, 0.12%)</title><rect x="598.1" y="309" width="0.9" height="15.0" fill="rgb(232,124,29)" rx="2" ry="2" />
+<text  x="601.07" y="319.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt;::_Vector_impl_data::_Vector_impl_data (243,120 samples, 0.03%)</title><rect x="131.8" y="453" width="0.2" height="15.0" fill="rgb(222,80,19)" rx="2" ry="2" />
+<text  x="134.83" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::LteControlMessage, ns3::Empty, ns3::DefaultDeleter&lt;ns3::LteControlMessage&gt; &gt;::Unref (160,375 samples, 0.02%)</title><rect x="150.4" y="405" width="0.1" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="153.41" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::NodeListPriv::DoDispose (238,924 samples, 0.02%)</title><rect x="36.6" y="549" width="0.2" height="15.0" fill="rgb(254,228,54)" rx="2" ry="2" />
+<text  x="39.64" y="559.5" ></text>
+</g>
+<g >
+<title>std::__fill_bvector (161,544 samples, 0.02%)</title><rect x="200.8" y="389" width="0.1" height="15.0" fill="rgb(212,33,7)" rx="2" ry="2" />
+<text  x="203.78" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::RlcPduListElement_s* std::__do_uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::RlcPduListElement_s const*, std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt;, ns3::RlcPduListElement_s*&gt; (178,382 samples, 0.02%)</title><rect x="101.6" y="341" width="0.2" height="15.0" fill="rgb(215,48,11)" rx="2" ry="2" />
+<text  x="104.62" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::HigherLayerSelected_s::HigherLayerSelected_s (277,299 samples, 0.03%)</title><rect x="442.8" y="213" width="0.2" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="445.78" y="223.5" ></text>
+</g>
+<g >
+<title>std::less&lt;ns3::Scheduler::EventKey&gt;::operator (727,810 samples, 0.08%)</title><rect x="337.5" y="373" width="0.6" height="15.0" fill="rgb(234,137,32)" rx="2" ry="2" />
+<text  x="340.50" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultSimulatorImpl::Now (158,066 samples, 0.02%)</title><rect x="391.1" y="533" width="0.1" height="15.0" fill="rgb(213,40,9)" rx="2" ry="2" />
+<text  x="394.08" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_insert_node (278,782 samples, 0.03%)</title><rect x="706.8" y="389" width="0.2" height="15.0" fill="rgb(218,62,14)" rx="2" ry="2" />
+<text  x="709.77" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, unsigned char&gt; &gt;::_M_valptr (191,519 samples, 0.02%)</title><rect x="177.0" y="405" width="0.2" height="15.0" fill="rgb(213,40,9)" rx="2" ry="2" />
+<text  x="180.00" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt;::find (484,223 samples, 0.05%)</title><rect x="437.1" y="277" width="0.4" height="15.0" fill="rgb(219,68,16)" rx="2" ry="2" />
+<text  x="440.08" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::ByteTagIterator::Item::GetTag (594,222 samples, 0.06%)</title><rect x="424.6" y="245" width="0.5" height="15.0" fill="rgb(226,98,23)" rx="2" ry="2" />
+<text  x="427.62" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Packet&gt;::Acquire (149,428 samples, 0.02%)</title><rect x="368.4" y="501" width="0.1" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="371.36" y="511.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;bool, std::allocator&lt;bool&gt; &gt;::insert (276,956 samples, 0.03%)</title><rect x="105.6" y="453" width="0.2" height="15.0" fill="rgb(250,209,50)" rx="2" ry="2" />
+<text  x="108.60" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::LteControlMessage::GetMessageType (150,641 samples, 0.02%)</title><rect x="284.9" y="549" width="0.1" height="15.0" fill="rgb(207,11,2)" rx="2" ry="2" />
+<text  x="287.89" y="559.5" ></text>
+</g>
+<g >
+<title>ns3::PacketTagList::Peek (1,947,014 samples, 0.20%)</title><rect x="489.7" y="533" width="1.6" height="15.0" fill="rgb(247,193,46)" rx="2" ry="2" />
+<text  x="492.70" y="543.5" ></text>
+</g>
+<g >
+<title>std::tuple&lt;ns3::LteInterference*, ns3::Ptr&lt;ns3::SpectrumValue const&gt;, unsigned int&gt;::tuple&lt;ns3::LteInterference*&amp;, ns3::Ptr&lt;ns3::SpectrumValue const&gt;&amp;, unsigned int&amp;, true, true&gt; (1,652,564 samples, 0.17%)</title><rect x="708.9" y="437" width="1.3" height="15.0" fill="rgb(206,5,1)" rx="2" ry="2" />
+<text  x="711.91" y="447.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;* std::__copy_move_a1&lt;true, std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;*, std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;*&gt; (1,149,860 samples, 0.12%)</title><rect x="621.6" y="469" width="0.9" height="15.0" fill="rgb(217,56,13)" rx="2" ry="2" />
+<text  x="624.61" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::GetTypeId (158,072 samples, 0.02%)</title><rect x="633.0" y="501" width="0.1" height="15.0" fill="rgb(216,54,13)" rx="2" ry="2" />
+<text  x="636.00" y="511.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;::_M_ptr (151,932 samples, 0.02%)</title><rect x="356.1" y="469" width="0.1" height="15.0" fill="rgb(207,12,3)" rx="2" ry="2" />
+<text  x="359.07" y="479.5" ></text>
+</g>
+<g >
+<title>std::operator== (305,665 samples, 0.03%)</title><rect x="328.3" y="485" width="0.3" height="15.0" fill="rgb(229,110,26)" rx="2" ry="2" />
+<text  x="331.31" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt;::~_Vector_base (186,345 samples, 0.02%)</title><rect x="461.3" y="261" width="0.1" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="464.28" y="271.5" ></text>
+</g>
+<g >
+<title> (196,328 samples, 0.02%)</title><rect x="154.7" y="373" width="0.2" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="157.73" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::Callback&lt;void, std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt;::Callback&lt;void  (126,158 samples, 0.01%)</title><rect x="516.1" y="469" width="0.1" height="15.0" fill="rgb(244,183,43)" rx="2" ry="2" />
+<text  x="519.12" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::HigherLayerSelected_s* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;ns3::HigherLayerSelected_s const*, std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt; &gt;, ns3::HigherLayerSelected_s*, ns3::HigherLayerSelected_s&gt; (324,739 samples, 0.03%)</title><rect x="593.3" y="245" width="0.3" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="596.31" y="255.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::size (161,317 samples, 0.02%)</title><rect x="685.1" y="501" width="0.2" height="15.0" fill="rgb(252,217,52)" rx="2" ry="2" />
+<text  x="688.12" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbMac::DoSubframeIndication (415,834 samples, 0.04%)</title><rect x="15.5" y="517" width="0.3" height="15.0" fill="rgb(248,200,47)" rx="2" ry="2" />
+<text  x="18.45" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Bind_helper&lt;std::__or_&lt;std::is_integral&lt;std::decay&lt;void  (1,871,248 samples, 0.19%)</title><rect x="616.9" y="501" width="1.5" height="15.0" fill="rgb(237,148,35)" rx="2" ry="2" />
+<text  x="619.88" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumPhy::EndRxDlCtrl (120,196,089 samples, 12.39%)</title><rect x="515.3" y="565" width="96.6" height="15.0" fill="rgb(211,28,6)" rx="2" ry="2" />
+<text  x="518.27" y="575.5" >ns3::LteSpe..</text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;* std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_create_node&lt;std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (783,256 samples, 0.08%)</title><rect x="661.0" y="389" width="0.7" height="15.0" fill="rgb(217,56,13)" rx="2" ry="2" />
+<text  x="664.02" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::_Vector_impl::_Vector_impl (333,132 samples, 0.03%)</title><rect x="520.4" y="309" width="0.3" height="15.0" fill="rgb(240,161,38)" rx="2" ry="2" />
+<text  x="523.43" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::EnbMacMemberFfMacSchedSapUser::SchedDlConfigInd (1,650,854 samples, 0.17%)</title><rect x="15.8" y="485" width="1.3" height="15.0" fill="rgb(241,166,39)" rx="2" ry="2" />
+<text  x="18.79" y="495.5" ></text>
+</g>
+<g >
+<title>void std::destroy_at&lt;ns3::BuildDataListElement_s&gt; (677,511 samples, 0.07%)</title><rect x="145.7" y="373" width="0.6" height="15.0" fill="rgb(253,223,53)" rx="2" ry="2" />
+<text  x="148.73" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::operator= (2,313,097 samples, 0.24%)</title><rect x="316.6" y="421" width="1.8" height="15.0" fill="rgb(243,177,42)" rx="2" ry="2" />
+<text  x="319.56" y="431.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::PacketMetadata::Data*, std::allocator&lt;ns3::PacketMetadata::Data*&gt; &gt;::end (160,537 samples, 0.02%)</title><rect x="558.6" y="181" width="0.1" height="15.0" fill="rgb(250,211,50)" rx="2" ry="2" />
+<text  x="561.58" y="191.5" ></text>
+</g>
+<g >
+<title>void std::destroy_at&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; (198,551 samples, 0.02%)</title><rect x="233.0" y="373" width="0.1" height="15.0" fill="rgb(246,192,46)" rx="2" ry="2" />
+<text  x="235.95" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::NoOpComponentCarrierManager::DoTransmitPdu (886,429 samples, 0.09%)</title><rect x="17.2" y="389" width="0.7" height="15.0" fill="rgb(228,110,26)" rx="2" ry="2" />
+<text  x="20.17" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt; &gt;::_S_key (202,540 samples, 0.02%)</title><rect x="11.9" y="325" width="0.2" height="15.0" fill="rgb(230,116,27)" rx="2" ry="2" />
+<text  x="14.92" y="335.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_M_create_storage (153,635 samples, 0.02%)</title><rect x="457.2" y="245" width="0.1" height="15.0" fill="rgb(252,220,52)" rx="2" ry="2" />
+<text  x="460.19" y="255.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;2ul, double const&amp;&gt;::_Tuple_impl (258,015 samples, 0.03%)</title><rect x="749.8" y="453" width="0.2" height="15.0" fill="rgb(251,213,51)" rx="2" ry="2" />
+<text  x="752.78" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Buffer::Data* const&amp; std::forward&lt;ns3::Buffer::Data* const&amp;&gt; (201,496 samples, 0.02%)</title><rect x="452.3" y="37" width="0.2" height="15.0" fill="rgb(250,209,50)" rx="2" ry="2" />
+<text  x="455.32" y="47.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteControlMessage&gt;::~Ptr (186,011 samples, 0.02%)</title><rect x="776.3" y="309" width="0.1" height="15.0" fill="rgb(208,17,4)" rx="2" ry="2" />
+<text  x="779.26" y="319.5" ></text>
+</g>
+<g >
+<title>std::tuple_element&lt;0ul, std::tuple&lt;ns3::LteSpectrumPhy*&gt; &gt;::type&amp; std::get&lt;0ul, ns3::LteSpectrumPhy*&gt; (724,506 samples, 0.07%)</title><rect x="753.2" y="597" width="0.6" height="15.0" fill="rgb(226,100,24)" rx="2" ry="2" />
+<text  x="756.20" y="607.5" ></text>
+</g>
+<g >
+<title>ns3::TypeId::TypeId (152,238 samples, 0.02%)</title><rect x="375.0" y="485" width="0.1" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="378.01" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt; &gt;::_M_valptr (250,138 samples, 0.03%)</title><rect x="429.0" y="261" width="0.2" height="15.0" fill="rgb(251,211,50)" rx="2" ry="2" />
+<text  x="431.99" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultSimulatorImpl::Now (231,403 samples, 0.02%)</title><rect x="155.6" y="373" width="0.1" height="15.0" fill="rgb(213,40,9)" rx="2" ry="2" />
+<text  x="158.56" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt; &gt;::_M_lower_bound (1,788,371 samples, 0.18%)</title><rect x="321.0" y="453" width="1.4" height="15.0" fill="rgb(253,225,53)" rx="2" ry="2" />
+<text  x="323.97" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::ConstValuesBegin (200,731 samples, 0.02%)</title><rect x="600.2" y="309" width="0.1" height="15.0" fill="rgb(229,114,27)" rx="2" ry="2" />
+<text  x="603.18" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::MemberSchedSapProvider&lt;ns3::PfFfMacScheduler&gt;::SchedDlTriggerReq (4,972,136 samples, 0.51%)</title><rect x="11.4" y="533" width="4.0" height="15.0" fill="rgb(247,193,46)" rx="2" ry="2" />
+<text  x="14.43" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::EventImpl&gt;::operator= (191,741 samples, 0.02%)</title><rect x="715.7" y="501" width="0.1" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="718.66" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;::_Vector_base (694,137 samples, 0.07%)</title><rect x="513.9" y="533" width="0.6" height="15.0" fill="rgb(247,197,47)" rx="2" ry="2" />
+<text  x="516.95" y="543.5" ></text>
+</g>
+<g >
+<title>unsigned short* std::__uninitialized_move_a&lt;unsigned short*, unsigned short*, std::allocator&lt;unsigned short&gt; &gt; (1,127,032 samples, 0.12%)</title><rect x="252.7" y="453" width="0.9" height="15.0" fill="rgb(232,126,30)" rx="2" ry="2" />
+<text  x="255.74" y="463.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;::_M_get_Node_allocator (237,832 samples, 0.02%)</title><rect x="724.2" y="469" width="0.2" height="15.0" fill="rgb(226,98,23)" rx="2" ry="2" />
+<text  x="727.20" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;bool, std::allocator&lt;bool&gt; &gt;::size (766,734 samples, 0.08%)</title><rect x="201.0" y="469" width="0.7" height="15.0" fill="rgb(208,17,4)" rx="2" ry="2" />
+<text  x="204.04" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;3ul, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::_Tuple_impl&lt;ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;&amp;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;&amp;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;&amp;, void&gt; (163,911 samples, 0.02%)</title><rect x="87.5" y="373" width="0.1" height="15.0" fill="rgb(215,46,11)" rx="2" ry="2" />
+<text  x="90.46" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;3ul, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::_Tuple_impl&lt;ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;&amp;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;&amp;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;&amp;, void&gt; (317,763 samples, 0.03%)</title><rect x="340.5" y="357" width="0.3" height="15.0" fill="rgb(215,46,11)" rx="2" ry="2" />
+<text  x="343.52" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::EventId::operator= (191,741 samples, 0.02%)</title><rect x="715.7" y="517" width="0.1" height="15.0" fill="rgb(241,165,39)" rx="2" ry="2" />
+<text  x="718.66" y="527.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned char, ns3::LteMacSapProvider*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt; &gt;::find (1,168,142 samples, 0.12%)</title><rect x="11.6" y="373" width="0.9" height="15.0" fill="rgb(248,200,47)" rx="2" ry="2" />
+<text  x="14.55" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Head_base&lt;0ul, double const&amp;, false&gt;::_Head_base (202,567 samples, 0.02%)</title><rect x="749.3" y="469" width="0.2" height="15.0" fill="rgb(205,3,0)" rx="2" ry="2" />
+<text  x="752.30" y="479.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_get_node (149,240 samples, 0.02%)</title><rect x="149.4" y="357" width="0.2" height="15.0" fill="rgb(247,194,46)" rx="2" ry="2" />
+<text  x="152.44" y="367.5" ></text>
+</g>
+<g >
+<title>std::_List_iterator&lt;ns3::Ptr&lt;ns3::LteChunkProcessor&gt; &gt;::operator++ (161,403 samples, 0.02%)</title><rect x="414.7" y="533" width="0.1" height="15.0" fill="rgb(220,73,17)" rx="2" ry="2" />
+<text  x="417.69" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::operator!= (199,253 samples, 0.02%)</title><rect x="431.5" y="277" width="0.1" height="15.0" fill="rgb(215,46,11)" rx="2" ry="2" />
+<text  x="434.47" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::LteUePhy::GenerateCqiRsrpRsrq (24,060,374 samples, 2.48%)</title><rect x="582.0" y="325" width="19.3" height="15.0" fill="rgb(215,49,11)" rx="2" ry="2" />
+<text  x="584.99" y="335.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::UlDciListElement_s, std::allocator&lt;ns3::UlDciListElement_s&gt; &gt;::vector (711,457 samples, 0.07%)</title><rect x="228.1" y="453" width="0.6" height="15.0" fill="rgb(210,23,5)" rx="2" ry="2" />
+<text  x="231.09" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleUeCcmMacSapProvider::ReportBufferStatus (1,286,769 samples, 0.13%)</title><rect x="552.0" y="245" width="1.0" height="15.0" fill="rgb(208,16,4)" rx="2" ry="2" />
+<text  x="554.98" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbMac::DoSchedDlConfigInd (314,249 samples, 0.03%)</title><rect x="11.2" y="469" width="0.2" height="15.0" fill="rgb(205,3,0)" rx="2" ry="2" />
+<text  x="14.17" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Tag::Tag (291,173 samples, 0.03%)</title><rect x="560.3" y="245" width="0.2" height="15.0" fill="rgb(212,35,8)" rx="2" ry="2" />
+<text  x="563.29" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::EventImpl::EventImpl (184,225 samples, 0.02%)</title><rect x="666.0" y="469" width="0.2" height="15.0" fill="rgb(247,195,46)" rx="2" ry="2" />
+<text  x="669.05" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::SpectrumSignalParameters, ns3::Empty, ns3::DefaultDeleter&lt;ns3::SpectrumSignalParameters&gt; &gt;::Unref (676,765 samples, 0.07%)</title><rect x="323.9" y="485" width="0.6" height="15.0" fill="rgb(254,229,54)" rx="2" ry="2" />
+<text  x="326.94" y="495.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;double&gt;::allocate (429,586 samples, 0.04%)</title><rect x="325.4" y="373" width="0.4" height="15.0" fill="rgb(248,201,48)" rx="2" ry="2" />
+<text  x="328.42" y="383.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::MacCeListElement_s*&gt; (796,900 samples, 0.08%)</title><rect x="264.8" y="453" width="0.6" height="15.0" fill="rgb(211,32,7)" rx="2" ry="2" />
+<text  x="267.80" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::MacCeListElement_s* std::__uninitialized_move_if_noexcept_a&lt;ns3::MacCeListElement_s*, ns3::MacCeListElement_s*, std::allocator&lt;ns3::MacCeListElement_s&gt; &gt; (659,885 samples, 0.07%)</title><rect x="129.5" y="485" width="0.6" height="15.0" fill="rgb(246,192,45)" rx="2" ry="2" />
+<text  x="132.52" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::_M_get_node (432,981 samples, 0.04%)</title><rect x="190.9" y="421" width="0.3" height="15.0" fill="rgb(217,58,14)" rx="2" ry="2" />
+<text  x="193.86" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::RngStream::RandU01 (729,422 samples, 0.08%)</title><rect x="608.9" y="517" width="0.6" height="15.0" fill="rgb(232,126,30)" rx="2" ry="2" />
+<text  x="611.92" y="527.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, ns3::LteEnbComponentCarrierManager::UeInfo, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt; &gt; &gt;::lower_bound (1,052,171 samples, 0.11%)</title><rect x="429.4" y="277" width="0.9" height="15.0" fill="rgb(236,144,34)" rx="2" ry="2" />
+<text  x="432.41" y="287.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_M_destroy_node (193,911 samples, 0.02%)</title><rect x="104.0" y="373" width="0.1" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="106.96" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;int, std::allocator&lt;int&gt; &gt;::_M_allocate (127,589 samples, 0.01%)</title><rect x="590.4" y="229" width="0.1" height="15.0" fill="rgb(216,52,12)" rx="2" ry="2" />
+<text  x="593.45" y="239.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy::DequeueUlDci[abi:cxx11] (1,038,704 samples, 0.11%)</title><rect x="110.0" y="533" width="0.8" height="15.0" fill="rgb(213,37,9)" rx="2" ry="2" />
+<text  x="113.00" y="543.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt;::destroy&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; (269,841 samples, 0.03%)</title><rect x="497.4" y="517" width="0.2" height="15.0" fill="rgb(230,118,28)" rx="2" ry="2" />
+<text  x="500.37" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::LtePhy::SetControlMessages (460,469 samples, 0.05%)</title><rect x="95.8" y="405" width="0.4" height="15.0" fill="rgb(247,193,46)" rx="2" ry="2" />
+<text  x="98.83" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_Auto_node::_M_key (161,415 samples, 0.02%)</title><rect x="335.7" y="389" width="0.1" height="15.0" fill="rgb(208,14,3)" rx="2" ry="2" />
+<text  x="338.67" y="399.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::UlDciListElement_s, std::allocator&lt;ns3::UlDciListElement_s&gt; &gt;::_M_check_len (840,073 samples, 0.09%)</title><rect x="250.0" y="453" width="0.7" height="15.0" fill="rgb(223,84,20)" rx="2" ry="2" />
+<text  x="253.00" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::HigherLayerSelected_s* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::HigherLayerSelected_s const*, std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt; &gt;, ns3::HigherLayerSelected_s*&gt; (151,182 samples, 0.02%)</title><rect x="92.3" y="325" width="0.1" height="15.0" fill="rgb(230,118,28)" rx="2" ry="2" />
+<text  x="95.31" y="335.5" ></text>
+</g>
+<g >
+<title>std::_List_const_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;::operator* (248,928 samples, 0.03%)</title><rect x="611.5" y="517" width="0.2" height="15.0" fill="rgb(254,229,54)" rx="2" ry="2" />
+<text  x="614.54" y="527.5" ></text>
+</g>
+<g >
+<title>std::map&lt;ns3::LteFlowId_t, ns3::FfMacSchedSapProvider::SchedDlRlcBufferReqParameters, std::less&lt;ns3::LteFlowId_t&gt;, std::allocator&lt;std::pair&lt;ns3::LteFlowId_t const, ns3::FfMacSchedSapProvider::SchedDlRlcBufferReqParameters&gt; &gt; &gt;::find (767,836 samples, 0.08%)</title><rect x="26.8" y="309" width="0.6" height="15.0" fill="rgb(229,112,26)" rx="2" ry="2" />
+<text  x="29.83" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy::DoSendLteControlMessage (162,081 samples, 0.02%)</title><rect x="103.7" y="421" width="0.1" height="15.0" fill="rgb(244,180,43)" rx="2" ry="2" />
+<text  x="106.68" y="431.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::splice (371,326 samples, 0.04%)</title><rect x="734.0" y="469" width="0.3" height="15.0" fill="rgb(220,70,16)" rx="2" ry="2" />
+<text  x="737.04" y="479.5" ></text>
+</g>
+<g >
+<title>void std::_Bind&lt;void  (2,105,662 samples, 0.22%)</title><rect x="15.5" y="629" width="1.6" height="15.0" fill="rgb(242,174,41)" rx="2" ry="2" />
+<text  x="18.45" y="639.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_Rb_tree (434,612 samples, 0.04%)</title><rect x="329.4" y="485" width="0.3" height="15.0" fill="rgb(252,219,52)" rx="2" ry="2" />
+<text  x="332.39" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt; &gt; &gt;::_M_begin (553,771 samples, 0.06%)</title><rect x="433.0" y="293" width="0.5" height="15.0" fill="rgb(217,58,13)" rx="2" ry="2" />
+<text  x="436.01" y="303.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_M_allocate (150,187 samples, 0.02%)</title><rect x="718.4" y="405" width="0.1" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="721.35" y="415.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;::pair (2,848,710 samples, 0.29%)</title><rect x="238.0" y="309" width="2.3" height="15.0" fill="rgb(240,164,39)" rx="2" ry="2" />
+<text  x="241.03" y="319.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::vector&lt;int, std::allocator&lt;int&gt; &gt;, std::allocator&lt;std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt; &gt;::_M_range_check (126,869 samples, 0.01%)</title><rect x="530.8" y="325" width="0.1" height="15.0" fill="rgb(238,152,36)" rx="2" ry="2" />
+<text  x="533.83" y="335.5" ></text>
+</g>
+<g >
+<title>double const* std::__niter_base&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; (126,294 samples, 0.01%)</title><rect x="719.3" y="421" width="0.1" height="15.0" fill="rgb(213,38,9)" rx="2" ry="2" />
+<text  x="722.31" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::VendorSpecificListElement_s* std::__do_uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::VendorSpecificListElement_s const*, std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt; &gt;, ns3::VendorSpecificListElement_s*&gt; (308,120 samples, 0.03%)</title><rect x="144.1" y="389" width="0.3" height="15.0" fill="rgb(219,66,15)" rx="2" ry="2" />
+<text  x="147.10" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt; ns3::Create&lt;ns3::PacketBurst&gt; (3,725,107 samples, 0.38%)</title><rect x="364.1" y="517" width="3.0" height="15.0" fill="rgb(225,93,22)" rx="2" ry="2" />
+<text  x="367.06" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::HarqStatus_e* std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;ns3::DlInfoListElement_s::HarqStatus_e const*, std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt; &gt;, ns3::DlInfoListElement_s::HarqStatus_e*&gt; (234,294 samples, 0.02%)</title><rect x="510.0" y="437" width="0.2" height="15.0" fill="rgb(212,36,8)" rx="2" ry="2" />
+<text  x="512.98" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Time::~Time (234,871 samples, 0.02%)</title><rect x="155.8" y="389" width="0.2" height="15.0" fill="rgb(212,36,8)" rx="2" ry="2" />
+<text  x="158.78" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::Angles::Angles (1,553,770 samples, 0.16%)</title><rect x="641.5" y="517" width="1.3" height="15.0" fill="rgb(254,226,54)" rx="2" ry="2" />
+<text  x="644.54" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::ObjectBase::~ObjectBase (149,528 samples, 0.02%)</title><rect x="561.3" y="165" width="0.1" height="15.0" fill="rgb(232,126,30)" rx="2" ry="2" />
+<text  x="564.26" y="175.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::BuildBroadcastListElement_s*&gt; (197,106 samples, 0.02%)</title><rect x="145.3" y="421" width="0.1" height="15.0" fill="rgb(245,188,44)" rx="2" ry="2" />
+<text  x="148.29" y="431.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_initialize_dispatch&lt;std::_List_const_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; (3,161,094 samples, 0.33%)</title><rect x="498.4" y="533" width="2.5" height="15.0" fill="rgb(215,50,12)" rx="2" ry="2" />
+<text  x="501.35" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_M_erase (983,671 samples, 0.10%)</title><rect x="232.9" y="437" width="0.8" height="15.0" fill="rgb(219,64,15)" rx="2" ry="2" />
+<text  x="235.92" y="447.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt;::_M_check_len (545,391 samples, 0.06%)</title><rect x="211.1" y="453" width="0.4" height="15.0" fill="rgb(228,110,26)" rx="2" ry="2" />
+<text  x="214.11" y="463.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;std::is_constructible&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt;::value, std::pair&lt;std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, bool&gt; &gt;::type std::map&lt;ns3::Scheduler::EventKey, ns3::EventImpl*, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::insert&lt;std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (8,106,001 samples, 0.84%)</title><rect x="269.3" y="485" width="6.5" height="15.0" fill="rgb(211,29,7)" rx="2" ry="2" />
+<text  x="272.32" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::BuildDataListElement_s* std::__uninitialized_copy&lt;false&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::BuildDataListElement_s const*, std::vector&lt;ns3::BuildDataListElement_s, std::allocator&lt;ns3::BuildDataListElement_s&gt; &gt; &gt;, ns3::BuildDataListElement_s*&gt; (143,073 samples, 0.01%)</title><rect x="95.0" y="389" width="0.1" height="15.0" fill="rgb(220,73,17)" rx="2" ry="2" />
+<text  x="97.98" y="399.5" ></text>
+</g>
+<g >
+<title>void  (394,385 samples, 0.04%)</title><rect x="471.9" y="357" width="0.3" height="15.0" fill="rgb(253,221,53)" rx="2" ry="2" />
+<text  x="474.86" y="367.5" ></text>
+</g>
+<g >
+<title>double* std::copy&lt;__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, double*&gt; (895,799 samples, 0.09%)</title><rect x="412.2" y="437" width="0.8" height="15.0" fill="rgb(246,192,46)" rx="2" ry="2" />
+<text  x="415.23" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;int, std::allocator&lt;int&gt; &gt;::_Vector_base (251,724 samples, 0.03%)</title><rect x="594.8" y="245" width="0.2" height="15.0" fill="rgb(215,47,11)" rx="2" ry="2" />
+<text  x="597.80" y="255.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;5ul, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::_Tuple_impl&lt;std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;&amp;&gt; (318,126 samples, 0.03%)</title><rect x="667.0" y="341" width="0.2" height="15.0" fill="rgb(219,68,16)" rx="2" ry="2" />
+<text  x="669.98" y="351.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_drop_node (397,972 samples, 0.04%)</title><rect x="776.8" y="373" width="0.3" height="15.0" fill="rgb(245,188,45)" rx="2" ry="2" />
+<text  x="779.78" y="383.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::vector (314,226 samples, 0.03%)</title><rect x="484.8" y="485" width="0.3" height="15.0" fill="rgb(239,156,37)" rx="2" ry="2" />
+<text  x="487.85" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt; &gt; &gt;::key_comp (161,213 samples, 0.02%)</title><rect x="157.3" y="389" width="0.1" height="15.0" fill="rgb(238,153,36)" rx="2" ry="2" />
+<text  x="160.31" y="399.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt; &gt;::_M_ptr (233,529 samples, 0.02%)</title><rect x="170.4" y="373" width="0.2" height="15.0" fill="rgb(214,41,9)" rx="2" ry="2" />
+<text  x="173.40" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_M_deallocate (275,158 samples, 0.03%)</title><rect x="216.4" y="453" width="0.2" height="15.0" fill="rgb(208,14,3)" rx="2" ry="2" />
+<text  x="219.43" y="463.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::RlcPduListElement_s*&gt; (190,862 samples, 0.02%)</title><rect x="209.1" y="437" width="0.2" height="15.0" fill="rgb(225,93,22)" rx="2" ry="2" />
+<text  x="212.12" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumPhy::AddExpectedTb (5,493,975 samples, 0.57%)</title><rect x="526.1" y="357" width="4.4" height="15.0" fill="rgb(249,206,49)" rx="2" ry="2" />
+<text  x="529.10" y="367.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, unsigned char*, unsigned char&gt; (204,725 samples, 0.02%)</title><rect x="147.2" y="421" width="0.2" height="15.0" fill="rgb(226,96,23)" rx="2" ry="2" />
+<text  x="150.24" y="431.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::BuildDataListElement_s, std::allocator&lt;ns3::BuildDataListElement_s&gt; &gt;::at (192,817 samples, 0.02%)</title><rect x="97.8" y="437" width="0.1" height="15.0" fill="rgb(206,9,2)" rx="2" ry="2" />
+<text  x="100.78" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumPhy&gt;::Ptr (241,373 samples, 0.02%)</title><rect x="750.4" y="565" width="0.2" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="753.44" y="575.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;::base (155,897 samples, 0.02%)</title><rect x="114.1" y="325" width="0.2" height="15.0" fill="rgb(240,163,38)" rx="2" ry="2" />
+<text  x="117.14" y="335.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Callback&lt;void, unsigned short, unsigned char, unsigned int&gt;, std::allocator&lt;ns3::Callback&lt;void, unsigned short, unsigned char, unsigned int&gt; &gt; &gt;::begin (250,676 samples, 0.03%)</title><rect x="567.1" y="245" width="0.2" height="15.0" fill="rgb(236,144,34)" rx="2" ry="2" />
+<text  x="570.06" y="255.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;double&gt;::deallocate (154,926 samples, 0.02%)</title><rect x="484.0" y="437" width="0.1" height="15.0" fill="rgb(223,83,20)" rx="2" ry="2" />
+<text  x="486.97" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::LteRlcSpecificLteMacSapUser::ReceivePdu (5,789,710 samples, 0.60%)</title><rect x="424.1" y="293" width="4.7" height="15.0" fill="rgb(206,6,1)" rx="2" ry="2" />
+<text  x="427.14" y="303.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;int, std::allocator&lt;int&gt; &gt;::~_Vector_base (270,798 samples, 0.03%)</title><rect x="505.8" y="389" width="0.3" height="15.0" fill="rgb(251,213,51)" rx="2" ry="2" />
+<text  x="508.85" y="399.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy_aux&lt;false&gt;::__destroy&lt;ns3::CqiListElement_s*&gt; (416,767 samples, 0.04%)</title><rect x="106.8" y="421" width="0.3" height="15.0" fill="rgb(229,111,26)" rx="2" ry="2" />
+<text  x="109.77" y="431.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;bool, std::allocator&lt;bool&gt; &gt;::_M_copy_aligned (1,193,749 samples, 0.12%)</title><rect x="199.1" y="437" width="0.9" height="15.0" fill="rgb(243,176,42)" rx="2" ry="2" />
+<text  x="202.08" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::int64x64_t::int64x64_t (159,152 samples, 0.02%)</title><rect x="484.3" y="469" width="0.2" height="15.0" fill="rgb(240,161,38)" rx="2" ry="2" />
+<text  x="487.34" y="479.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::Ptr&lt;ns3::Object&gt;*, ns3::Ptr&lt;ns3::Object&gt; &gt; (575,552 samples, 0.06%)</title><rect x="380.2" y="293" width="0.4" height="15.0" fill="rgb(226,98,23)" rx="2" ry="2" />
+<text  x="383.17" y="303.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;*, std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; (240,649 samples, 0.02%)</title><rect x="146.1" y="325" width="0.2" height="15.0" fill="rgb(205,0,0)" rx="2" ry="2" />
+<text  x="149.08" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::operator*= (308,769 samples, 0.03%)</title><rect x="682.8" y="501" width="0.3" height="15.0" fill="rgb(207,9,2)" rx="2" ry="2" />
+<text  x="685.82" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, unsigned char&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, unsigned char&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, unsigned char&gt; &gt; &gt;::_S_key (376,510 samples, 0.04%)</title><rect x="136.1" y="437" width="0.3" height="15.0" fill="rgb(210,27,6)" rx="2" ry="2" />
+<text  x="139.11" y="447.5" ></text>
+</g>
+<g >
+<title> (303,690 samples, 0.03%)</title><rect x="689.8" y="485" width="0.3" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="692.82" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt; &gt;::_Auto_node::_M_key (162,159 samples, 0.02%)</title><rect x="504.2" y="501" width="0.1" height="15.0" fill="rgb(210,26,6)" rx="2" ry="2" />
+<text  x="507.20" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumSignalParameters::SpectrumSignalParameters (1,058,660 samples, 0.11%)</title><rect x="342.8" y="485" width="0.9" height="15.0" fill="rgb(219,67,16)" rx="2" ry="2" />
+<text  x="345.85" y="495.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;unsigned char&gt;::allocate (157,055 samples, 0.02%)</title><rect x="214.0" y="421" width="0.2" height="15.0" fill="rgb(230,117,28)" rx="2" ry="2" />
+<text  x="217.05" y="431.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::~vector (197,904 samples, 0.02%)</title><rect x="220.0" y="485" width="0.2" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="223.00" y="495.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::UlDciListElement_s*, std::vector&lt;ns3::UlDciListElement_s, std::allocator&lt;ns3::UlDciListElement_s&gt; &gt; &gt;::__normal_iterator (202,471 samples, 0.02%)</title><rect x="249.3" y="453" width="0.2" height="15.0" fill="rgb(222,80,19)" rx="2" ry="2" />
+<text  x="252.34" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Bind_helper&lt;std::__or_&lt;std::is_integral&lt;std::decay&lt;void  (151,641 samples, 0.02%)</title><rect x="109.7" y="485" width="0.1" height="15.0" fill="rgb(237,148,35)" rx="2" ry="2" />
+<text  x="112.66" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::~vector (510,825 samples, 0.05%)</title><rect x="216.3" y="485" width="0.4" height="15.0" fill="rgb(243,174,41)" rx="2" ry="2" />
+<text  x="219.34" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::Packet, ns3::Empty, ns3::DefaultDeleter&lt;ns3::Packet&gt; &gt;::Unref (1,114,557 samples, 0.11%)</title><rect x="652.8" y="277" width="0.9" height="15.0" fill="rgb(215,47,11)" rx="2" ry="2" />
+<text  x="655.79" y="287.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::Ptr&lt;ns3::Object&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Object&gt; &gt; &gt;::_Vector_base (745,210 samples, 0.08%)</title><rect x="365.8" y="453" width="0.6" height="15.0" fill="rgb(235,141,33)" rx="2" ry="2" />
+<text  x="368.76" y="463.5" ></text>
+</g>
+<g >
+<title>void  (609,849 samples, 0.06%)</title><rect x="51.4" y="581" width="0.5" height="15.0" fill="rgb(253,221,53)" rx="2" ry="2" />
+<text  x="54.39" y="591.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; &gt; &gt;::_M_valptr (160,660 samples, 0.02%)</title><rect x="167.8" y="437" width="0.1" height="15.0" fill="rgb(219,68,16)" rx="2" ry="2" />
+<text  x="170.78" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt; &gt; &gt;::_M_begin (190,024 samples, 0.02%)</title><rect x="186.4" y="453" width="0.2" height="15.0" fill="rgb(252,216,51)" rx="2" ry="2" />
+<text  x="189.45" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Head_base&lt;2ul, unsigned int, false&gt;::_M_head (165,154 samples, 0.02%)</title><rect x="756.1" y="549" width="0.2" height="15.0" fill="rgb(250,209,50)" rx="2" ry="2" />
+<text  x="759.13" y="559.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::size (244,680 samples, 0.03%)</title><rect x="480.8" y="245" width="0.2" height="15.0" fill="rgb(216,50,12)" rx="2" ry="2" />
+<text  x="483.82" y="255.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::find (820,315 samples, 0.08%)</title><rect x="189.2" y="485" width="0.7" height="15.0" fill="rgb(223,83,20)" rx="2" ry="2" />
+<text  x="192.23" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::FfMacSchedSapProvider::SchedDlTriggerReqParameters::SchedDlTriggerReqParameters (944,566 samples, 0.10%)</title><rect x="131.5" y="517" width="0.7" height="15.0" fill="rgb(247,196,47)" rx="2" ry="2" />
+<text  x="134.48" y="527.5" ></text>
+</g>
+<g >
+<title>std::tuple_element&lt;0ul, std::tuple&lt;ns3::LteEnbPhy*, ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;::type&amp; std::get&lt;0ul, ns3::LteEnbPhy*, ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; (409,426 samples, 0.04%)</title><rect x="751.9" y="597" width="0.3" height="15.0" fill="rgb(213,39,9)" rx="2" ry="2" />
+<text  x="754.92" y="607.5" ></text>
+</g>
+<g >
+<title>ns3::ObjectDeleter::Delete (1,989,572 samples, 0.21%)</title><rect x="773.9" y="357" width="1.6" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="776.86" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::Time::From (739,923 samples, 0.08%)</title><rect x="682.5" y="517" width="0.6" height="15.0" fill="rgb(244,182,43)" rx="2" ry="2" />
+<text  x="685.53" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; std::_Rb_tree&lt;ns3::TbId_t, std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::_Select1st&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::_M_emplace_hint_unique&lt;std::pair&lt;ns3::TbId_t, ns3::tbInfo_t&gt; &gt; (143,473 samples, 0.01%)</title><rect x="120.3" y="485" width="0.1" height="15.0" fill="rgb(216,50,12)" rx="2" ry="2" />
+<text  x="123.30" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::UeMemberLteUePhySapUser::ReceiveLteControlMessage (45,543,635 samples, 4.70%)</title><rect x="535.4" y="357" width="36.7" height="15.0" fill="rgb(221,77,18)" rx="2" ry="2" />
+<text  x="538.43" y="367.5" >ns3..</text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_begin (327,923 samples, 0.03%)</title><rect x="84.5" y="405" width="0.2" height="15.0" fill="rgb(238,154,36)" rx="2" ry="2" />
+<text  x="87.47" y="415.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;::at (183,105 samples, 0.02%)</title><rect x="456.8" y="309" width="0.2" height="15.0" fill="rgb(233,131,31)" rx="2" ry="2" />
+<text  x="459.84" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::Object::Construct (2,631,536 samples, 0.27%)</title><rect x="448.3" y="277" width="2.1" height="15.0" fill="rgb(228,108,26)" rx="2" ry="2" />
+<text  x="451.25" y="287.5" ></text>
+</g>
+<g >
+<title>void std::__invoke_impl&lt;void, ns3::Callback&lt;void, std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt;::Callback&lt;void  (28,112,022 samples, 2.90%)</title><rect x="441.3" y="469" width="22.6" height="15.0" fill="rgb(208,15,3)" rx="2" ry="2" />
+<text  x="444.33" y="479.5" >v..</text>
+</g>
+<g >
+<title>ns3::CallbackImpl&lt;void, ns3::Ptr&lt;ns3::Packet&gt; &gt;::operator (21,094,361 samples, 2.18%)</title><rect x="421.7" y="533" width="17.0" height="15.0" fill="rgb(210,25,6)" rx="2" ry="2" />
+<text  x="424.74" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::UeMemberLteMacSapProvider::TransmitPdu (5,533,169 samples, 0.57%)</title><rect x="560.8" y="229" width="4.4" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="563.78" y="239.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteControlMessage&gt;&amp; std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::emplace_back&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; const&amp;&gt; (564,216 samples, 0.06%)</title><rect x="318.8" y="373" width="0.5" height="15.0" fill="rgb(224,89,21)" rx="2" ry="2" />
+<text  x="321.81" y="383.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::at (187,560 samples, 0.02%)</title><rect x="657.1" y="517" width="0.2" height="15.0" fill="rgb(220,71,17)" rx="2" ry="2" />
+<text  x="660.13" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::GetSpectrumModel (124,953 samples, 0.01%)</title><rect x="79.8" y="517" width="0.1" height="15.0" fill="rgb(228,106,25)" rx="2" ry="2" />
+<text  x="82.75" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::Callback&lt;void, std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt;::IsNull (376,180 samples, 0.04%)</title><rect x="515.5" y="549" width="0.3" height="15.0" fill="rgb(218,61,14)" rx="2" ry="2" />
+<text  x="518.52" y="559.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt; &gt;::allocate (185,306 samples, 0.02%)</title><rect x="661.1" y="357" width="0.1" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="664.08" y="367.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, unsigned int, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt; &gt;::begin (281,870 samples, 0.03%)</title><rect x="234.0" y="469" width="0.2" height="15.0" fill="rgb(243,174,41)" rx="2" ry="2" />
+<text  x="236.96" y="479.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;* std::__niter_base&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;*, std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt; &gt; (187,610 samples, 0.02%)</title><rect x="622.5" y="469" width="0.2" height="15.0" fill="rgb(209,18,4)" rx="2" ry="2" />
+<text  x="625.53" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::NixVector&gt;::Ptr (125,319 samples, 0.01%)</title><rect x="68.4" y="421" width="0.1" height="15.0" fill="rgb(248,201,48)" rx="2" ry="2" />
+<text  x="71.36" y="431.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt;::end (195,428 samples, 0.02%)</title><rect x="210.6" y="469" width="0.1" height="15.0" fill="rgb(213,39,9)" rx="2" ry="2" />
+<text  x="213.57" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::end (304,038 samples, 0.03%)</title><rect x="240.0" y="277" width="0.3" height="15.0" fill="rgb(237,147,35)" rx="2" ry="2" />
+<text  x="243.04" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt;* std::__niter_base&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;*, std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; (194,031 samples, 0.02%)</title><rect x="381.6" y="469" width="0.1" height="15.0" fill="rgb(229,110,26)" rx="2" ry="2" />
+<text  x="384.56" y="479.5" ></text>
+</g>
+<g >
+<title>void std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_construct_node&lt;std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (199,972 samples, 0.02%)</title><rect x="706.6" y="373" width="0.2" height="15.0" fill="rgb(231,122,29)" rx="2" ry="2" />
+<text  x="709.61" y="383.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::vector (836,469 samples, 0.09%)</title><rect x="518.9" y="341" width="0.7" height="15.0" fill="rgb(206,9,2)" rx="2" ry="2" />
+<text  x="521.90" y="351.5" ></text>
+</g>
+<g >
+<title>unsigned short* std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;unsigned short const*, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, unsigned short*&gt; (450,981 samples, 0.05%)</title><rect x="521.1" y="261" width="0.4" height="15.0" fill="rgb(239,157,37)" rx="2" ry="2" />
+<text  x="524.12" y="271.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_M_deallocate (317,082 samples, 0.03%)</title><rect x="693.1" y="453" width="0.3" height="15.0" fill="rgb(208,14,3)" rx="2" ry="2" />
+<text  x="696.13" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::at (331,136 samples, 0.03%)</title><rect x="181.0" y="469" width="0.2" height="15.0" fill="rgb(238,152,36)" rx="2" ry="2" />
+<text  x="183.96" y="479.5" ></text>
+</g>
+<g >
+<title>int* std::__uninitialized_copy&lt;true&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;int const*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt;, int*&gt; (730,011 samples, 0.08%)</title><rect x="398.8" y="501" width="0.6" height="15.0" fill="rgb(207,11,2)" rx="2" ry="2" />
+<text  x="401.81" y="511.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt; &gt; &gt;::construct&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt;, std::pair&lt;unsigned short, ns3::DlInfoListElement_s&gt; &gt; (724,895 samples, 0.07%)</title><rect x="503.4" y="453" width="0.6" height="15.0" fill="rgb(238,156,37)" rx="2" ry="2" />
+<text  x="506.44" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::EventId ns3::Simulator::Schedule&lt;void  (572,651 samples, 0.06%)</title><rect x="112.5" y="501" width="0.5" height="15.0" fill="rgb(253,224,53)" rx="2" ry="2" />
+<text  x="115.51" y="511.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;::_M_addr (156,809 samples, 0.02%)</title><rect x="500.5" y="469" width="0.2" height="15.0" fill="rgb(212,32,7)" rx="2" ry="2" />
+<text  x="503.55" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::vector (323,441 samples, 0.03%)</title><rect x="596.3" y="213" width="0.3" height="15.0" fill="rgb(206,9,2)" rx="2" ry="2" />
+<text  x="599.30" y="223.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;unsigned short&gt;::allocate (360,140 samples, 0.04%)</title><rect x="480.0" y="229" width="0.2" height="15.0" fill="rgb(237,149,35)" rx="2" ry="2" />
+<text  x="482.95" y="239.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy_aux&lt;false&gt;::__destroy&lt;ns3::CqiListElement_s*&gt; (154,796 samples, 0.02%)</title><rect x="131.1" y="453" width="0.1" height="15.0" fill="rgb(229,111,26)" rx="2" ry="2" />
+<text  x="134.12" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::EventImpl&gt;::Ptr (1,021,807 samples, 0.11%)</title><rect x="38.5" y="709" width="0.9" height="15.0" fill="rgb(239,157,37)" rx="2" ry="2" />
+<text  x="41.53" y="719.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter&gt;::SimpleRefCount (422,806 samples, 0.04%)</title><rect x="365.3" y="469" width="0.3" height="15.0" fill="rgb(230,117,28)" rx="2" ry="2" />
+<text  x="368.26" y="479.5" ></text>
+</g>
+<g >
+<title>std::map&lt;ns3::LteSpectrumModelId, ns3::Ptr&lt;ns3::SpectrumModel&gt;, std::less&lt;ns3::LteSpectrumModelId&gt;, std::allocator&lt;std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt; &gt; &gt;::find (1,429,003 samples, 0.15%)</title><rect x="54.9" y="485" width="1.2" height="15.0" fill="rgb(226,100,24)" rx="2" ry="2" />
+<text  x="57.93" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt; &gt;::_M_valptr (379,355 samples, 0.04%)</title><rect x="156.9" y="389" width="0.3" height="15.0" fill="rgb(251,211,50)" rx="2" ry="2" />
+<text  x="159.90" y="399.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, unsigned char*&gt; (520,529 samples, 0.05%)</title><rect x="126.9" y="309" width="0.4" height="15.0" fill="rgb(254,229,54)" rx="2" ry="2" />
+<text  x="129.91" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::LteChunkProcessor::EvaluateChunk (8,414,736 samples, 0.87%)</title><rect x="401.6" y="533" width="6.7" height="15.0" fill="rgb(246,191,45)" rx="2" ry="2" />
+<text  x="404.57" y="543.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::HigherLayerSelected_s*, std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt; &gt; std::copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::HigherLayerSelected_s const*, std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;ns3::HigherLayerSelected_s*, std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt; &gt; &gt; (337,592 samples, 0.03%)</title><rect x="585.7" y="229" width="0.3" height="15.0" fill="rgb(215,48,11)" rx="2" ry="2" />
+<text  x="588.68" y="239.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;*, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; std::move&lt;__gnu_cxx::__normal_iterator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;*, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;*, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; &gt; (180,270 samples, 0.02%)</title><rect x="117.1" y="485" width="0.2" height="15.0" fill="rgb(218,63,15)" rx="2" ry="2" />
+<text  x="120.11" y="495.5" ></text>
+</g>
+<g >
+<title>std::tuple&lt;double const&amp;, double const&amp;, double const&amp;&gt;::tuple&lt;true, true&gt; (1,129,345 samples, 0.12%)</title><rect x="749.1" y="501" width="0.9" height="15.0" fill="rgb(241,166,39)" rx="2" ry="2" />
+<text  x="752.08" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Simulator::GetSystemId (397,961 samples, 0.04%)</title><rect x="559.3" y="229" width="0.4" height="15.0" fill="rgb(235,141,33)" rx="2" ry="2" />
+<text  x="562.35" y="239.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__enable_if&lt;std::__is_scalar&lt;double&gt;::__value, void&gt;::__type std::__fill_a1&lt;double*, double&gt; (195,953 samples, 0.02%)</title><rect x="403.9" y="357" width="0.2" height="15.0" fill="rgb(237,149,35)" rx="2" ry="2" />
+<text  x="406.90" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Packet&gt;::operator= (328,413 samples, 0.03%)</title><rect x="559.9" y="261" width="0.2" height="15.0" fill="rgb(230,115,27)" rx="2" ry="2" />
+<text  x="562.86" y="271.5" ></text>
+</g>
+<g >
+<title>std::_Function_base::~_Function_base (488,113 samples, 0.05%)</title><rect x="640.5" y="421" width="0.4" height="15.0" fill="rgb(221,74,17)" rx="2" ry="2" />
+<text  x="643.55" y="431.5" ></text>
+</g>
+<g >
+<title>std::map&lt;ns3::LteSpectrumModelId, ns3::Ptr&lt;ns3::SpectrumModel&gt;, std::less&lt;ns3::LteSpectrumModelId&gt;, std::allocator&lt;std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt; &gt; &gt;::find (1,123,045 samples, 0.12%)</title><rect x="297.8" y="469" width="0.9" height="15.0" fill="rgb(226,100,24)" rx="2" ry="2" />
+<text  x="300.81" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::MacCeListElement_s, std::allocator&lt;ns3::MacCeListElement_s&gt; &gt;::erase (947,008 samples, 0.10%)</title><rect x="264.7" y="517" width="0.7" height="15.0" fill="rgb(216,52,12)" rx="2" ry="2" />
+<text  x="267.68" y="527.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, std::vector&lt;ns3::DlDciListElement_s, std::allocator&lt;ns3::DlDciListElement_s&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;ns3::DlDciListElement_s, std::allocator&lt;ns3::DlDciListElement_s&gt; &gt; &gt; &gt; &gt;::find (966,324 samples, 0.10%)</title><rect x="187.1" y="485" width="0.7" height="15.0" fill="rgb(241,166,39)" rx="2" ry="2" />
+<text  x="190.07" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultSimulatorImpl::Schedule (1,666,743 samples, 0.17%)</title><rect x="615.3" y="517" width="1.3" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="618.27" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::Ptr&lt;ns3::Object&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Object&gt; &gt; &gt;::_M_deallocate (162,767 samples, 0.02%)</title><rect x="380.0" y="277" width="0.1" height="15.0" fill="rgb(238,152,36)" rx="2" ry="2" />
+<text  x="382.98" y="287.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_M_erase (637,679 samples, 0.07%)</title><rect x="60.6" y="453" width="0.5" height="15.0" fill="rgb(227,102,24)" rx="2" ry="2" />
+<text  x="63.59" y="463.5" ></text>
+</g>
+<g >
+<title>operator delete (125,509 samples, 0.01%)</title><rect x="551.0" y="245" width="0.1" height="15.0" fill="rgb(247,196,46)" rx="2" ry="2" />
+<text  x="554.01" y="255.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, unsigned char, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, unsigned char&gt; &gt; &gt;::end (239,197 samples, 0.02%)</title><rect x="194.2" y="485" width="0.2" height="15.0" fill="rgb(251,213,51)" rx="2" ry="2" />
+<text  x="197.17" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt;::at (308,215 samples, 0.03%)</title><rect x="210.3" y="485" width="0.2" height="15.0" fill="rgb(246,192,45)" rx="2" ry="2" />
+<text  x="213.26" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::EventImpl&gt;::~Ptr (189,897 samples, 0.02%)</title><rect x="278.1" y="501" width="0.1" height="15.0" fill="rgb(225,92,22)" rx="2" ry="2" />
+<text  x="281.06" y="511.5" ></text>
+</g>
+<g >
+<title>std::tuple&lt;ns3::LteEnbPhy*, ns3::Ptr&lt;ns3::PacketBurst&gt; &gt;::tuple (474,767 samples, 0.05%)</title><rect x="284.0" y="437" width="0.4" height="15.0" fill="rgb(235,139,33)" rx="2" ry="2" />
+<text  x="287.03" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;* std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_M_copy&lt;false, std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_Alloc_node&gt; (400,356 samples, 0.04%)</title><rect x="232.5" y="421" width="0.3" height="15.0" fill="rgb(236,146,34)" rx="2" ry="2" />
+<text  x="235.50" y="431.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned short const, unsigned char&gt; &gt;::_M_ptr (189,215 samples, 0.02%)</title><rect x="135.3" y="453" width="0.1" height="15.0" fill="rgb(219,68,16)" rx="2" ry="2" />
+<text  x="138.29" y="463.5" ></text>
+</g>
+<g >
+<title>void std::destroy_at&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; (555,448 samples, 0.06%)</title><rect x="233.2" y="357" width="0.4" height="15.0" fill="rgb(246,192,46)" rx="2" ry="2" />
+<text  x="236.17" y="367.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;std::_Rb_tree_node_base*, std::_Rb_tree_node_base*&gt;::pair&lt;std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt;*&amp;, std::_Rb_tree_node_base*&amp;&gt; (184,807 samples, 0.02%)</title><rect x="504.6" y="469" width="0.1" height="15.0" fill="rgb(237,149,35)" rx="2" ry="2" />
+<text  x="507.58" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::SpectrumValue, ns3::Empty, ns3::DefaultDeleter&lt;ns3::SpectrumValue&gt; &gt;::Unref (602,928 samples, 0.06%)</title><rect x="303.4" y="485" width="0.5" height="15.0" fill="rgb(246,189,45)" rx="2" ry="2" />
+<text  x="306.43" y="495.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt;::find (1,563,753 samples, 0.16%)</title><rect x="171.0" y="453" width="1.2" height="15.0" fill="rgb(235,142,33)" rx="2" ry="2" />
+<text  x="173.99" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::~vector (531,401 samples, 0.05%)</title><rect x="773.1" y="437" width="0.5" height="15.0" fill="rgb(225,92,22)" rx="2" ry="2" />
+<text  x="776.13" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::EnbMacMemberLteEnbPhySapUser::SubframeIndication (314,249 samples, 0.03%)</title><rect x="11.2" y="549" width="0.2" height="15.0" fill="rgb(252,216,51)" rx="2" ry="2" />
+<text  x="14.17" y="559.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; const*, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt;::__normal_iterator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;*, void&gt; (158,435 samples, 0.02%)</title><rect x="347.9" y="533" width="0.1" height="15.0" fill="rgb(213,40,9)" rx="2" ry="2" />
+<text  x="350.91" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::Packet::~Packet (1,078,177 samples, 0.11%)</title><rect x="652.8" y="245" width="0.9" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="655.82" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::GetSpectrumModel (161,203 samples, 0.02%)</title><rect x="327.0" y="485" width="0.2" height="15.0" fill="rgb(228,106,25)" rx="2" ry="2" />
+<text  x="330.02" y="495.5" ></text>
+</g>
+<g >
+<title>[libc.so.6] (124,394 samples, 0.01%)</title><rect x="776.2" y="261" width="0.1" height="15.0" fill="rgb(223,84,20)" rx="2" ry="2" />
+<text  x="779.16" y="271.5" ></text>
+</g>
+<g >
+<title>decltype  (153,618 samples, 0.02%)</title><rect x="689.5" y="389" width="0.1" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="692.48" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt;* std::__copy_move&lt;true, false, std::random_access_iterator_tag&gt;::__copy_m&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;*, ns3::Ptr&lt;ns3::PacketBurst&gt;*&gt; (1,932,346 samples, 0.20%)</title><rect x="634.3" y="437" width="1.5" height="15.0" fill="rgb(212,33,7)" rx="2" ry="2" />
+<text  x="637.27" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Object::DoDelete (667,572 samples, 0.07%)</title><rect x="612.8" y="501" width="0.5" height="15.0" fill="rgb(212,34,8)" rx="2" ry="2" />
+<text  x="615.81" y="511.5" ></text>
+</g>
+<g >
+<title>int* std::__copy_move_a&lt;false, int*, int*&gt; (195,561 samples, 0.02%)</title><rect x="304.3" y="485" width="0.1" height="15.0" fill="rgb(213,37,8)" rx="2" ry="2" />
+<text  x="307.29" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt; ns3::CreateObject&lt;ns3::PacketBurst&gt; (299,709 samples, 0.03%)</title><rect x="96.7" y="437" width="0.2" height="15.0" fill="rgb(205,4,0)" rx="2" ry="2" />
+<text  x="99.70" y="447.5" ></text>
+</g>
+<g >
+<title>std::move_iterator&lt;unsigned short*&gt; std::make_move_iterator&lt;unsigned short*&gt; (398,257 samples, 0.04%)</title><rect x="252.7" y="437" width="0.4" height="15.0" fill="rgb(211,29,6)" rx="2" ry="2" />
+<text  x="255.74" y="447.5" ></text>
+</g>
+<g >
+<title>unsigned long* std::__copy_move_a2&lt;false, unsigned long*, unsigned long*&gt; (228,596 samples, 0.02%)</title><rect x="199.7" y="373" width="0.2" height="15.0" fill="rgb(226,100,23)" rx="2" ry="2" />
+<text  x="202.70" y="383.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt;::~vector (183,938 samples, 0.02%)</title><rect x="106.9" y="341" width="0.2" height="15.0" fill="rgb(234,134,32)" rx="2" ry="2" />
+<text  x="109.93" y="351.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_Rb_tree_impl&lt;std::less&lt;int&gt;, true&gt;::_Rb_tree_impl (172,014 samples, 0.02%)</title><rect x="60.4" y="485" width="0.1" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="63.38" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::AttributeConstructionList::AttributeConstructionList (587,413 samples, 0.06%)</title><rect x="447.6" y="277" width="0.5" height="15.0" fill="rgb(231,122,29)" rx="2" ry="2" />
+<text  x="450.62" y="287.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_transfer (163,122 samples, 0.02%)</title><rect x="734.2" y="437" width="0.1" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="737.21" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::TbId_t::TbId_t (238,722 samples, 0.02%)</title><rect x="383.8" y="533" width="0.2" height="15.0" fill="rgb(219,65,15)" rx="2" ry="2" />
+<text  x="386.80" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;* std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_create_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; const&amp;&gt; (500,996 samples, 0.05%)</title><rect x="341.9" y="373" width="0.4" height="15.0" fill="rgb(227,104,24)" rx="2" ry="2" />
+<text  x="344.88" y="383.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::operator= (340,476 samples, 0.04%)</title><rect x="530.5" y="341" width="0.3" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="533.52" y="351.5" ></text>
+</g>
+<g >
+<title>__floatuntixf (240,107 samples, 0.02%)</title><rect x="407.1" y="469" width="0.1" height="15.0" fill="rgb(208,15,3)" rx="2" ry="2" />
+<text  x="410.05" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::MapScheduler::Insert (239,679 samples, 0.02%)</title><rect x="62.4" y="485" width="0.2" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="65.40" y="495.5" ></text>
+</g>
+<g >
+<title> (151,530 samples, 0.02%)</title><rect x="717.1" y="485" width="0.1" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="720.11" y="495.5" ></text>
+</g>
+<g >
+<title>std::__detail::_List_node_header::_List_node_header (157,771 samples, 0.02%)</title><rect x="721.4" y="453" width="0.1" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="724.37" y="463.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::~list (300,600 samples, 0.03%)</title><rect x="165.7" y="357" width="0.3" height="15.0" fill="rgb(238,152,36)" rx="2" ry="2" />
+<text  x="168.73" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::Object::Construct (3,213,288 samples, 0.33%)</title><rect x="540.3" y="293" width="2.6" height="15.0" fill="rgb(228,108,26)" rx="2" ry="2" />
+<text  x="543.33" y="303.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::begin (594,572 samples, 0.06%)</title><rect x="714.2" y="469" width="0.4" height="15.0" fill="rgb(206,6,1)" rx="2" ry="2" />
+<text  x="717.17" y="479.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::deallocate (190,533 samples, 0.02%)</title><rect x="392.3" y="453" width="0.1" height="15.0" fill="rgb(209,20,4)" rx="2" ry="2" />
+<text  x="395.30" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::IidManager::GetParent (358,780 samples, 0.04%)</title><rect x="34.6" y="405" width="0.3" height="15.0" fill="rgb(217,59,14)" rx="2" ry="2" />
+<text  x="37.64" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_get_insert_hint_unique_pos (848,537 samples, 0.09%)</title><rect x="272.1" y="437" width="0.7" height="15.0" fill="rgb(209,22,5)" rx="2" ry="2" />
+<text  x="275.14" y="447.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt;::vector (788,613 samples, 0.08%)</title><rect x="228.7" y="453" width="0.6" height="15.0" fill="rgb(218,61,14)" rx="2" ry="2" />
+<text  x="231.67" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::GetValuesN (126,759 samples, 0.01%)</title><rect x="600.4" y="309" width="0.1" height="15.0" fill="rgb(251,212,50)" rx="2" ry="2" />
+<text  x="603.38" y="319.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Ptr&lt;ns3::Object&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Object&gt; &gt; &gt;::vector (573,370 samples, 0.06%)</title><rect x="446.9" y="261" width="0.4" height="15.0" fill="rgb(237,147,35)" rx="2" ry="2" />
+<text  x="449.87" y="271.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::empty (167,279 samples, 0.02%)</title><rect x="619.5" y="533" width="0.1" height="15.0" fill="rgb(243,177,42)" rx="2" ry="2" />
+<text  x="622.47" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;ns3::DlDciListElement_s, std::allocator&lt;ns3::DlDciListElement_s&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;ns3::DlDciListElement_s, std::allocator&lt;ns3::DlDciListElement_s&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;ns3::DlDciListElement_s, std::allocator&lt;ns3::DlDciListElement_s&gt; &gt; &gt; &gt; &gt;::_S_key (309,647 samples, 0.03%)</title><rect x="187.3" y="437" width="0.3" height="15.0" fill="rgb(237,150,35)" rx="2" ry="2" />
+<text  x="190.35" y="447.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::max_size (200,229 samples, 0.02%)</title><rect x="215.2" y="421" width="0.2" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="218.23" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::ByteTagList::Add (1,981,337 samples, 0.20%)</title><rect x="553.3" y="245" width="1.6" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="556.29" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::SpectrumValue, ns3::Empty, ns3::DefaultDeleter&lt;ns3::SpectrumValue&gt; &gt;::operator= (126,989 samples, 0.01%)</title><rect x="604.3" y="309" width="0.1" height="15.0" fill="rgb(250,210,50)" rx="2" ry="2" />
+<text  x="607.28" y="319.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt; &gt;::allocate (659,007 samples, 0.07%)</title><rect x="270.3" y="389" width="0.6" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="273.32" y="399.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::uninitialized_fill_n&lt;unsigned char*, unsigned long, unsigned char&gt; (378,589 samples, 0.04%)</title><rect x="216.0" y="437" width="0.3" height="15.0" fill="rgb(247,194,46)" rx="2" ry="2" />
+<text  x="218.97" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Callback&lt;void, ns3::SpectrumValue const&amp;&gt;::Callback&lt;void  (240,445 samples, 0.02%)</title><rect x="468.1" y="437" width="0.2" height="15.0" fill="rgb(231,122,29)" rx="2" ry="2" />
+<text  x="471.13" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultSimulatorImpl::Schedule (1,203,174 samples, 0.12%)</title><rect x="637.2" y="501" width="1.0" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="640.19" y="511.5" ></text>
+</g>
+<g >
+<title>std::_List_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::insert&lt;std::_List_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;, void&gt; (1,819,829 samples, 0.19%)</title><rect x="721.1" y="517" width="1.4" height="15.0" fill="rgb(233,129,30)" rx="2" ry="2" />
+<text  x="724.05" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::TbId_t, std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::_Select1st&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::_M_drop_node (229,826 samples, 0.02%)</title><rect x="506.3" y="485" width="0.2" height="15.0" fill="rgb(222,79,18)" rx="2" ry="2" />
+<text  x="509.35" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt;::_M_valptr (344,085 samples, 0.04%)</title><rect x="241.9" y="421" width="0.3" height="15.0" fill="rgb(249,206,49)" rx="2" ry="2" />
+<text  x="244.93" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt; &gt; &gt;::_M_mbegin (144,996 samples, 0.01%)</title><rect x="157.8" y="357" width="0.1" height="15.0" fill="rgb(242,174,41)" rx="2" ry="2" />
+<text  x="160.77" y="367.5" ></text>
+</g>
+<g >
+<title>[libm.so.6] (150,649 samples, 0.02%)</title><rect x="582.3" y="293" width="0.1" height="15.0" fill="rgb(208,16,4)" rx="2" ry="2" />
+<text  x="585.25" y="303.5" ></text>
+</g>
+<g >
+<title>[libc.so.6] (923,730,017 samples, 95.25%)</title><rect x="35.5" y="805" width="743.0" height="15.0" fill="rgb(223,84,20)" rx="2" ry="2" />
+<text  x="38.54" y="815.5" >[libc.so.6]</text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::operator= (707,925 samples, 0.07%)</title><rect x="72.2" y="421" width="0.6" height="15.0" fill="rgb(243,175,42)" rx="2" ry="2" />
+<text  x="75.21" y="431.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::CqiListElement_s, std::allocator&lt;ns3::CqiListElement_s&gt; &gt;::at (149,647 samples, 0.02%)</title><rect x="137.7" y="485" width="0.2" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="140.75" y="495.5" ></text>
+</g>
+<g >
+<title>operator new (165,071 samples, 0.02%)</title><rect x="564.1" y="69" width="0.1" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="567.07" y="79.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;::end (182,299 samples, 0.02%)</title><rect x="722.9" y="501" width="0.1" height="15.0" fill="rgb(239,159,38)" rx="2" ry="2" />
+<text  x="725.90" y="511.5" ></text>
+</g>
+<g >
+<title>decltype  (998,649 samples, 0.10%)</title><rect x="191.2" y="389" width="0.8" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="194.23" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultDeleter&lt;ns3::EventImpl&gt;::Delete (401,412 samples, 0.04%)</title><rect x="727.5" y="469" width="0.3" height="15.0" fill="rgb(240,163,39)" rx="2" ry="2" />
+<text  x="730.52" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_get_insert_hint_unique_pos (202,320 samples, 0.02%)</title><rect x="659.4" y="469" width="0.2" height="15.0" fill="rgb(240,162,38)" rx="2" ry="2" />
+<text  x="662.40" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy::CreateSrsCqiReport (244,160 samples, 0.03%)</title><rect x="612.0" y="325" width="0.2" height="15.0" fill="rgb(214,43,10)" rx="2" ry="2" />
+<text  x="615.01" y="335.5" ></text>
+</g>
+<g >
+<title>std::_Function_base::_Function_base (342,542 samples, 0.04%)</title><rect x="639.3" y="469" width="0.3" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="642.33" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::~PacketBurst (269,240 samples, 0.03%)</title><rect x="120.0" y="341" width="0.2" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="122.96" y="351.5" ></text>
+</g>
+<g >
+<title>__do_global_dtors_aux (155,299 samples, 0.02%)</title><rect x="35.5" y="725" width="0.2" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="38.54" y="735.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt;::_M_ptr (277,428 samples, 0.03%)</title><rect x="180.7" y="389" width="0.2" height="15.0" fill="rgb(206,4,1)" rx="2" ry="2" />
+<text  x="183.68" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_emplace_hint_unique&lt;std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (538,288 samples, 0.06%)</title><rect x="108.5" y="437" width="0.4" height="15.0" fill="rgb(248,201,48)" rx="2" ry="2" />
+<text  x="111.50" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumSignalParameters::SpectrumSignalParameters (5,377,108 samples, 0.55%)</title><rect x="314.2" y="453" width="4.4" height="15.0" fill="rgb(219,67,16)" rx="2" ry="2" />
+<text  x="317.24" y="463.5" ></text>
+</g>
+<g >
+<title>operator new (169,709 samples, 0.02%)</title><rect x="520.3" y="229" width="0.1" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="523.29" y="239.5" ></text>
+</g>
+<g >
+<title>std::_Function_base::_Function_base (186,634 samples, 0.02%)</title><rect x="283.4" y="485" width="0.1" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="286.37" y="495.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy_aux&lt;false&gt;::__destroy&lt;__gnu_cxx::__normal_iterator&lt;ns3::DlInfoListElement_s*, std::vector&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt; &gt; &gt; (269,165 samples, 0.03%)</title><rect x="207.6" y="437" width="0.2" height="15.0" fill="rgb(211,31,7)" rx="2" ry="2" />
+<text  x="210.57" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt; &gt;::_M_valptr (227,886 samples, 0.02%)</title><rect x="298.3" y="405" width="0.2" height="15.0" fill="rgb(222,81,19)" rx="2" ry="2" />
+<text  x="301.34" y="415.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::_M_range_check (187,936 samples, 0.02%)</title><rect x="678.3" y="469" width="0.2" height="15.0" fill="rgb(221,76,18)" rx="2" ry="2" />
+<text  x="681.31" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumValueHelper::CreateTxPowerSpectralDensity (1,022,169 samples, 0.11%)</title><rect x="111.4" y="485" width="0.8" height="15.0" fill="rgb(250,209,50)" rx="2" ry="2" />
+<text  x="114.35" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::operator+ (125,077 samples, 0.01%)</title><rect x="62.8" y="485" width="0.1" height="15.0" fill="rgb(244,182,43)" rx="2" ry="2" />
+<text  x="65.82" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt; &gt;::_M_valptr (323,451 samples, 0.03%)</title><rect x="433.8" y="261" width="0.3" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="436.84" y="271.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, unsigned short, std::_Identity&lt;unsigned short&gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;unsigned short&gt; &gt;::find (273,587 samples, 0.03%)</title><rect x="194.7" y="469" width="0.2" height="15.0" fill="rgb(238,154,36)" rx="2" ry="2" />
+<text  x="197.68" y="479.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;std::_List_node&lt;ns3::UlDciLteControlMessage&gt; &gt;::deallocate (278,972 samples, 0.03%)</title><rect x="291.0" y="325" width="0.2" height="15.0" fill="rgb(208,13,3)" rx="2" ry="2" />
+<text  x="293.95" y="335.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::TbId_t, std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::_Select1st&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::_S_key (313,691 samples, 0.03%)</title><rect x="528.0" y="277" width="0.3" height="15.0" fill="rgb(220,73,17)" rx="2" ry="2" />
+<text  x="531.03" y="287.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::BuildDataListElement_s, std::allocator&lt;ns3::BuildDataListElement_s&gt; &gt;::_Vector_base (790,436 samples, 0.08%)</title><rect x="142.3" y="437" width="0.7" height="15.0" fill="rgb(224,89,21)" rx="2" ry="2" />
+<text  x="145.33" y="447.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_M_fill_initialize (492,278 samples, 0.05%)</title><rect x="215.9" y="469" width="0.4" height="15.0" fill="rgb(205,0,0)" rx="2" ry="2" />
+<text  x="218.88" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::operator= (270,541 samples, 0.03%)</title><rect x="147.9" y="421" width="0.2" height="15.0" fill="rgb(211,28,6)" rx="2" ry="2" />
+<text  x="150.88" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Bind_helper&lt;std::__or_&lt;std::is_integral&lt;std::decay&lt;void  (857,965 samples, 0.09%)</title><rect x="638.3" y="485" width="0.7" height="15.0" fill="rgb(237,148,35)" rx="2" ry="2" />
+<text  x="641.33" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_get_insert_hint_unique_pos (687,499 samples, 0.07%)</title><rect x="335.8" y="389" width="0.6" height="15.0" fill="rgb(209,22,5)" rx="2" ry="2" />
+<text  x="338.80" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt;* std::__copy_move_a2&lt;true, ns3::Ptr&lt;ns3::PacketBurst&gt;*, ns3::Ptr&lt;ns3::PacketBurst&gt;*&gt; (5,897,576 samples, 0.61%)</title><rect x="376.8" y="453" width="4.8" height="15.0" fill="rgb(213,38,9)" rx="2" ry="2" />
+<text  x="379.82" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_Rb_tree_impl&lt;std::less&lt;unsigned int&gt;, true&gt;::_Rb_tree_impl (152,827 samples, 0.02%)</title><rect x="667.8" y="245" width="0.2" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="670.83" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::EventImpl::Invoke (5,321,712 samples, 0.55%)</title><rect x="11.2" y="741" width="4.3" height="15.0" fill="rgb(209,20,4)" rx="2" ry="2" />
+<text  x="14.17" y="751.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::AttributeConstructionList::Item, std::allocator&lt;ns3::AttributeConstructionList::Item&gt; &gt;::list (652,304 samples, 0.07%)</title><rect x="371.4" y="485" width="0.6" height="15.0" fill="rgb(252,219,52)" rx="2" ry="2" />
+<text  x="374.45" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_S_relocate (381,047 samples, 0.04%)</title><rect x="694.0" y="453" width="0.3" height="15.0" fill="rgb(228,110,26)" rx="2" ry="2" />
+<text  x="697.03" y="463.5" ></text>
+</g>
+<g >
+<title>std::map&lt;ns3::TbId_t, ns3::tbInfo_t, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::find (1,799,150 samples, 0.19%)</title><rect x="506.9" y="549" width="1.5" height="15.0" fill="rgb(224,87,20)" rx="2" ry="2" />
+<text  x="509.91" y="559.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; (481,004 samples, 0.05%)</title><rect x="271.2" y="357" width="0.3" height="15.0" fill="rgb(213,37,9)" rx="2" ry="2" />
+<text  x="274.16" y="367.5" ></text>
+</g>
+<g >
+<title>unsigned short* std::__uninitialized_copy&lt;true&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;unsigned short const*, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, unsigned short*&gt; (545,960 samples, 0.06%)</title><rect x="217.5" y="421" width="0.4" height="15.0" fill="rgb(217,57,13)" rx="2" ry="2" />
+<text  x="220.47" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::LteHarqPhy::GetHarqProcessInfoUl (4,963,729 samples, 0.51%)</title><rect x="522.1" y="357" width="4.0" height="15.0" fill="rgb(239,157,37)" rx="2" ry="2" />
+<text  x="525.08" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteNetDevice&gt;::Ptr (241,803 samples, 0.02%)</title><rect x="582.7" y="293" width="0.2" height="15.0" fill="rgb(233,132,31)" rx="2" ry="2" />
+<text  x="585.71" y="303.5" ></text>
+</g>
+<g >
+<title>std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt; &gt;::operator (231,657 samples, 0.02%)</title><rect x="236.0" y="421" width="0.2" height="15.0" fill="rgb(218,61,14)" rx="2" ry="2" />
+<text  x="238.98" y="431.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::_M_default_initialize (1,464,943 samples, 0.15%)</title><rect x="300.9" y="437" width="1.2" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="303.91" y="447.5" ></text>
+</g>
+<g >
+<title>double* std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, double*&gt; (165,918 samples, 0.02%)</title><rect x="78.3" y="405" width="0.2" height="15.0" fill="rgb(210,23,5)" rx="2" ry="2" />
+<text  x="81.32" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::TypeId::GetAttributeN (1,150,317 samples, 0.12%)</title><rect x="33.7" y="421" width="0.9" height="15.0" fill="rgb(225,95,22)" rx="2" ry="2" />
+<text  x="36.68" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::ConstantPositionMobilityModel::DoGetPosition (190,065 samples, 0.02%)</title><rect x="649.3" y="501" width="0.2" height="15.0" fill="rgb(212,32,7)" rx="2" ry="2" />
+<text  x="652.34" y="511.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;::_M_clear (2,445,979 samples, 0.25%)</title><rect x="501.0" y="533" width="1.9" height="15.0" fill="rgb(245,186,44)" rx="2" ry="2" />
+<text  x="503.96" y="543.5" ></text>
+</g>
+<g >
+<title>[ld-linux-x86-64.so.2] (206,546 samples, 0.02%)</title><rect x="10.1" y="757" width="0.1" height="15.0" fill="rgb(243,178,42)" rx="2" ry="2" />
+<text  x="13.05" y="767.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_Vector_base (663,076 samples, 0.07%)</title><rect x="413.0" y="485" width="0.6" height="15.0" fill="rgb(237,150,35)" rx="2" ry="2" />
+<text  x="416.04" y="495.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned short const, ns3::SbMeasResult_s&gt; &gt;::_M_ptr (163,489 samples, 0.02%)</title><rect x="185.7" y="405" width="0.1" height="15.0" fill="rgb(207,12,2)" rx="2" ry="2" />
+<text  x="188.68" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::_M_allocate (360,140 samples, 0.04%)</title><rect x="480.0" y="261" width="0.2" height="15.0" fill="rgb(220,70,16)" rx="2" ry="2" />
+<text  x="482.95" y="271.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::_M_range_check (154,783 samples, 0.02%)</title><rect x="589.3" y="229" width="0.1" height="15.0" fill="rgb(249,203,48)" rx="2" ry="2" />
+<text  x="592.26" y="239.5" ></text>
+</g>
+<g >
+<title>std::_List_iterator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt;::operator* (237,279 samples, 0.02%)</title><rect x="496.3" y="549" width="0.2" height="15.0" fill="rgb(224,91,21)" rx="2" ry="2" />
+<text  x="499.28" y="559.5" ></text>
+</g>
+<g >
+<title>ns3::operator&lt; (377,493 samples, 0.04%)</title><rect x="85.8" y="373" width="0.3" height="15.0" fill="rgb(234,137,32)" rx="2" ry="2" />
+<text  x="88.81" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::DlCqiLteControlMessage::SetDlCqi (1,473,854 samples, 0.15%)</title><rect x="585.4" y="293" width="1.1" height="15.0" fill="rgb(254,226,54)" rx="2" ry="2" />
+<text  x="588.35" y="303.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::~vector (221,743 samples, 0.02%)</title><rect x="139.3" y="453" width="0.2" height="15.0" fill="rgb(243,174,41)" rx="2" ry="2" />
+<text  x="142.29" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt;::at (473,755 samples, 0.05%)</title><rect x="149.8" y="405" width="0.4" height="15.0" fill="rgb(248,200,47)" rx="2" ry="2" />
+<text  x="152.84" y="415.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::ByteTagListData*, std::allocator&lt;ns3::ByteTagListData*&gt; &gt;::pop_back (350,982 samples, 0.04%)</title><rect x="30.7" y="373" width="0.2" height="15.0" fill="rgb(229,112,26)" rx="2" ry="2" />
+<text  x="33.67" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Bind&lt;void  (378,932 samples, 0.04%)</title><rect x="618.7" y="453" width="0.3" height="15.0" fill="rgb(253,221,52)" rx="2" ry="2" />
+<text  x="621.72" y="463.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_List_node&lt;ns3::UlDciLteControlMessage&gt; &gt; &gt;::destroy&lt;ns3::UlDciLteControlMessage&gt; (234,425 samples, 0.02%)</title><rect x="393.6" y="501" width="0.2" height="15.0" fill="rgb(232,126,30)" rx="2" ry="2" />
+<text  x="396.63" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::int64x64_t::GetDouble (604,584 samples, 0.06%)</title><rect x="406.8" y="485" width="0.5" height="15.0" fill="rgb(230,116,27)" rx="2" ry="2" />
+<text  x="409.83" y="495.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;std::is_constructible&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt;::value, std::pair&lt;std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, bool&gt; &gt;::type std::map&lt;ns3::Scheduler::EventKey, ns3::EventImpl*, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::insert&lt;std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (297,456 samples, 0.03%)</title><rect x="116.0" y="421" width="0.2" height="15.0" fill="rgb(211,29,7)" rx="2" ry="2" />
+<text  x="118.97" y="431.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::copy&lt;__gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, unsigned char*&gt; (556,653 samples, 0.06%)</title><rect x="126.9" y="325" width="0.4" height="15.0" fill="rgb(241,168,40)" rx="2" ry="2" />
+<text  x="129.88" y="335.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_M_get_Tp_allocator (169,242 samples, 0.02%)</title><rect x="57.3" y="437" width="0.2" height="15.0" fill="rgb(227,101,24)" rx="2" ry="2" />
+<text  x="60.33" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Angles::Angles (1,554,886 samples, 0.16%)</title><rect x="702.3" y="533" width="1.2" height="15.0" fill="rgb(254,226,54)" rx="2" ry="2" />
+<text  x="705.27" y="543.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;::_M_initialize_dispatch&lt;std::_List_const_iterator&lt;ns3::UlDciLteControlMessage&gt; &gt; (139,939 samples, 0.01%)</title><rect x="110.3" y="501" width="0.1" height="15.0" fill="rgb(236,145,34)" rx="2" ry="2" />
+<text  x="113.27" y="511.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::operator= (606,661 samples, 0.06%)</title><rect x="482.6" y="309" width="0.5" height="15.0" fill="rgb(243,175,42)" rx="2" ry="2" />
+<text  x="485.57" y="319.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt; &gt; &gt;::operator[] (278,129 samples, 0.03%)</title><rect x="289.2" y="517" width="0.2" height="15.0" fill="rgb(216,54,13)" rx="2" ry="2" />
+<text  x="292.18" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::LteUePowerControl::ReportTpc (2,374,811 samples, 0.24%)</title><rect x="531.7" y="357" width="1.9" height="15.0" fill="rgb(221,74,17)" rx="2" ry="2" />
+<text  x="534.68" y="367.5" ></text>
+</g>
+<g >
+<title>std::tuple_element&lt;2ul, std::tuple&lt;ns3::LteUePhy*, unsigned int, unsigned int&gt; &gt;::type&amp; std::get&lt;2ul, ns3::LteUePhy*, unsigned int, unsigned int&gt; (349,917 samples, 0.04%)</title><rect x="756.3" y="597" width="0.2" height="15.0" fill="rgb(251,213,50)" rx="2" ry="2" />
+<text  x="759.26" y="607.5" ></text>
+</g>
+<g >
+<title>std::tuple_element&lt;0ul, std::tuple&lt;ns3::LteEnbPhy*&gt; &gt;::type&amp; std::get&lt;0ul, ns3::LteEnbPhy*&gt; (491,352 samples, 0.05%)</title><rect x="752.2" y="597" width="0.4" height="15.0" fill="rgb(242,174,41)" rx="2" ry="2" />
+<text  x="755.25" y="607.5" ></text>
+</g>
+<g >
+<title>std::_Bvector_base&lt;std::allocator&lt;bool&gt; &gt;::_M_deallocate (352,416 samples, 0.04%)</title><rect x="195.8" y="469" width="0.3" height="15.0" fill="rgb(237,149,35)" rx="2" ry="2" />
+<text  x="198.83" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_Rb_tree (719,320 samples, 0.07%)</title><rect x="668.3" y="485" width="0.6" height="15.0" fill="rgb(252,219,52)" rx="2" ry="2" />
+<text  x="671.32" y="495.5" ></text>
+</g>
+<g >
+<title>decltype  (151,782 samples, 0.02%)</title><rect x="122.4" y="485" width="0.1" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="125.36" y="495.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::list (1,967,941 samples, 0.20%)</title><rect x="354.7" y="533" width="1.6" height="15.0" fill="rgb(236,145,34)" rx="2" ry="2" />
+<text  x="357.67" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::TbId_t, std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::_Select1st&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::_M_get_node (418,393 samples, 0.04%)</title><rect x="384.4" y="453" width="0.3" height="15.0" fill="rgb(228,105,25)" rx="2" ry="2" />
+<text  x="387.36" y="463.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;int*&gt; (161,562 samples, 0.02%)</title><rect x="575.3" y="325" width="0.1" height="15.0" fill="rgb(235,139,33)" rx="2" ry="2" />
+<text  x="578.30" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::FfMacSchedSapUser::SchedDlConfigIndParameters::SchedDlConfigIndParameters (1,092,598 samples, 0.11%)</title><rect x="173.9" y="485" width="0.9" height="15.0" fill="rgb(208,15,3)" rx="2" ry="2" />
+<text  x="176.88" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_M_erase (702,211 samples, 0.07%)</title><rect x="394.2" y="469" width="0.5" height="15.0" fill="rgb(227,102,24)" rx="2" ry="2" />
+<text  x="397.16" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;* std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_create_node&lt;unsigned int const&amp;, ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp;&gt; (849,776 samples, 0.09%)</title><rect x="658.5" y="453" width="0.7" height="15.0" fill="rgb(245,186,44)" rx="2" ry="2" />
+<text  x="661.48" y="463.5" ></text>
+</g>
+<g >
+<title>std::function&lt;void  (27,867,459 samples, 2.87%)</title><rect x="441.5" y="437" width="22.4" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="444.52" y="447.5" >s..</text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt;::_M_create_storage (499,008 samples, 0.05%)</title><rect x="260.8" y="357" width="0.4" height="15.0" fill="rgb(206,4,1)" rx="2" ry="2" />
+<text  x="263.77" y="367.5" ></text>
+</g>
+<g >
+<title>unsigned short* std::copy&lt;std::move_iterator&lt;unsigned short*&gt;, unsigned short*&gt; (687,255 samples, 0.07%)</title><rect x="253.1" y="389" width="0.5" height="15.0" fill="rgb(234,136,32)" rx="2" ry="2" />
+<text  x="256.10" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::Simulator::DoSchedule (1,350,821 samples, 0.14%)</title><rect x="304.9" y="501" width="1.1" height="15.0" fill="rgb(222,79,18)" rx="2" ry="2" />
+<text  x="307.95" y="511.5" ></text>
+</g>
+<g >
+<title>void std::_Function_base::_Base_manager&lt;std::_Bind&lt;void  (240,043 samples, 0.02%)</title><rect x="727.1" y="453" width="0.2" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="730.07" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;4ul, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::_Tuple_impl&lt;ns3::Ptr&lt;ns3::SpectrumPhy&gt;&amp;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;&amp;, void&gt; (317,763 samples, 0.03%)</title><rect x="340.5" y="341" width="0.3" height="15.0" fill="rgb(208,17,4)" rx="2" ry="2" />
+<text  x="343.52" y="351.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::lower_bound (163,786 samples, 0.02%)</title><rect x="82.5" y="501" width="0.1" height="15.0" fill="rgb(247,197,47)" rx="2" ry="2" />
+<text  x="85.49" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt; &gt;::_M_mbegin (229,108 samples, 0.02%)</title><rect x="320.7" y="437" width="0.2" height="15.0" fill="rgb(208,16,3)" rx="2" ry="2" />
+<text  x="323.69" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy*&amp;&amp; std::forward&lt;ns3::LteEnbPhy*&gt; (159,430 samples, 0.02%)</title><rect x="267.2" y="533" width="0.1" height="15.0" fill="rgb(238,152,36)" rx="2" ry="2" />
+<text  x="270.18" y="543.5" ></text>
+</g>
+<g >
+<title>cfree (159,331 samples, 0.02%)</title><rect x="453.6" y="69" width="0.1" height="15.0" fill="rgb(223,86,20)" rx="2" ry="2" />
+<text  x="456.61" y="79.5" ></text>
+</g>
+<g >
+<title>double&amp; std::__get_helper&lt;2ul, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt; (437,238 samples, 0.05%)</title><rect x="756.6" y="581" width="0.3" height="15.0" fill="rgb(240,161,38)" rx="2" ry="2" />
+<text  x="759.58" y="591.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;::_M_addr (164,453 samples, 0.02%)</title><rect x="222.0" y="389" width="0.1" height="15.0" fill="rgb(242,172,41)" rx="2" ry="2" />
+<text  x="224.96" y="399.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::RlcPduListElement_s*, ns3::RlcPduListElement_s&gt; (190,862 samples, 0.02%)</title><rect x="209.1" y="453" width="0.2" height="15.0" fill="rgb(236,143,34)" rx="2" ry="2" />
+<text  x="212.12" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::vector (719,050 samples, 0.07%)</title><rect x="215.8" y="485" width="0.5" height="15.0" fill="rgb(206,9,2)" rx="2" ry="2" />
+<text  x="218.76" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt;::vector (1,038,323 samples, 0.11%)</title><rect x="583.7" y="261" width="0.8" height="15.0" fill="rgb(248,198,47)" rx="2" ry="2" />
+<text  x="586.65" y="271.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::IidManager::IidInformation, std::allocator&lt;ns3::IidManager::IidInformation&gt; &gt;::operator[] (167,043 samples, 0.02%)</title><rect x="541.4" y="213" width="0.2" height="15.0" fill="rgb(214,41,9)" rx="2" ry="2" />
+<text  x="544.42" y="223.5" ></text>
+</g>
+<g >
+<title>ns3::EnbMacMemberFfMacSchedSapUser::SchedDlConfigInd (3,932,604 samples, 0.41%)</title><rect x="94.9" y="469" width="3.1" height="15.0" fill="rgb(241,166,39)" rx="2" ry="2" />
+<text  x="97.86" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::end (384,192 samples, 0.04%)</title><rect x="687.4" y="453" width="0.3" height="15.0" fill="rgb(205,0,0)" rx="2" ry="2" />
+<text  x="690.39" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::CeBitmap_e const* std::__niter_base&lt;ns3::CeBitmap_e const*, std::vector&lt;ns3::CeBitmap_e, std::allocator&lt;ns3::CeBitmap_e&gt; &gt; &gt; (152,075 samples, 0.02%)</title><rect x="204.0" y="309" width="0.1" height="15.0" fill="rgb(253,224,53)" rx="2" ry="2" />
+<text  x="206.96" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::AddPacket (234,373 samples, 0.02%)</title><rect x="17.4" y="341" width="0.2" height="15.0" fill="rgb(207,10,2)" rx="2" ry="2" />
+<text  x="20.39" y="351.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy_aux&lt;false&gt;::__destroy&lt;ns3::FfMacSchedSapProvider::SchedUlCqiInfoReqParameters*&gt; (1,018,939 samples, 0.11%)</title><rect x="263.2" y="453" width="0.9" height="15.0" fill="rgb(250,210,50)" rx="2" ry="2" />
+<text  x="266.24" y="463.5" ></text>
+</g>
+<g >
+<title>void std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_construct_node&lt;unsigned int const&amp;, ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp;&gt; (251,956 samples, 0.03%)</title><rect x="81.9" y="437" width="0.3" height="15.0" fill="rgb(234,135,32)" rx="2" ry="2" />
+<text  x="84.95" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::HarqStatus_e* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;ns3::DlInfoListElement_s::HarqStatus_e const*, std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt; &gt;, ns3::DlInfoListElement_s::HarqStatus_e*, ns3::DlInfoListElement_s::HarqStatus_e&gt; (723,994 samples, 0.07%)</title><rect x="444.1" y="309" width="0.6" height="15.0" fill="rgb(235,140,33)" rx="2" ry="2" />
+<text  x="447.08" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::EventId ns3::Simulator::Schedule&lt;void  (790,276 samples, 0.08%)</title><rect x="726.7" y="517" width="0.6" height="15.0" fill="rgb(253,224,53)" rx="2" ry="2" />
+<text  x="729.66" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt; &gt; &gt;::_S_key (502,432 samples, 0.05%)</title><rect x="235.8" y="437" width="0.4" height="15.0" fill="rgb(227,104,25)" rx="2" ry="2" />
+<text  x="238.76" y="447.5" ></text>
+</g>
+<g >
+<title>std::remove_reference&lt;ns3::HigherLayerSelected_s&amp;&gt;::type&amp;&amp; std::move&lt;ns3::HigherLayerSelected_s&amp;&gt; (170,828 samples, 0.02%)</title><rect x="595.6" y="197" width="0.1" height="15.0" fill="rgb(206,6,1)" rx="2" ry="2" />
+<text  x="598.55" y="207.5" ></text>
+</g>
+<g >
+<title>ns3::EnbMacMemberLteEnbPhySapUser::SubframeIndication (4,972,136 samples, 0.51%)</title><rect x="11.4" y="565" width="4.0" height="15.0" fill="rgb(252,216,51)" rx="2" ry="2" />
+<text  x="14.43" y="575.5" ></text>
+</g>
+<g >
+<title>ns3::PacketMetadata::PacketMetadata (1,027,645 samples, 0.11%)</title><rect x="14.6" y="373" width="0.8" height="15.0" fill="rgb(231,121,28)" rx="2" ry="2" />
+<text  x="17.57" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteControlMessage&gt;::Ptr&lt;ns3::DlDciLteControlMessage&gt; (316,058 samples, 0.03%)</title><rect x="160.4" y="453" width="0.3" height="15.0" fill="rgb(224,89,21)" rx="2" ry="2" />
+<text  x="163.40" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::vector (200,365 samples, 0.02%)</title><rect x="442.8" y="197" width="0.2" height="15.0" fill="rgb(206,9,2)" rx="2" ry="2" />
+<text  x="445.84" y="207.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt; &gt;::end (422,449 samples, 0.04%)</title><rect x="179.5" y="469" width="0.3" height="15.0" fill="rgb(230,117,28)" rx="2" ry="2" />
+<text  x="182.49" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt;::vector (765,141 samples, 0.08%)</title><rect x="204.7" y="405" width="0.6" height="15.0" fill="rgb(215,48,11)" rx="2" ry="2" />
+<text  x="207.67" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::PacketTagList::Add (1,584,708 samples, 0.16%)</title><rect x="561.5" y="181" width="1.3" height="15.0" fill="rgb(248,197,47)" rx="2" ry="2" />
+<text  x="564.52" y="191.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::Buffer::Data* const*, std::vector&lt;ns3::Buffer::Data*, std::allocator&lt;ns3::Buffer::Data*&gt; &gt; &gt;::__normal_iterator (154,434 samples, 0.02%)</title><rect x="32.4" y="309" width="0.2" height="15.0" fill="rgb(205,0,0)" rx="2" ry="2" />
+<text  x="35.45" y="319.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;::allocate (428,661 samples, 0.04%)</title><rect x="724.5" y="437" width="0.3" height="15.0" fill="rgb(227,104,24)" rx="2" ry="2" />
+<text  x="727.45" y="447.5" ></text>
+</g>
+<g >
+<title>std::tuple&lt;ns3::LteSpectrumPhy*&gt;::tuple (264,111 samples, 0.03%)</title><rect x="307.7" y="405" width="0.2" height="15.0" fill="rgb(217,55,13)" rx="2" ry="2" />
+<text  x="310.71" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::NoOpComponentCarrierManager::DoReportBufferStatus (747,299 samples, 0.08%)</title><rect x="12.5" y="373" width="0.6" height="15.0" fill="rgb(230,119,28)" rx="2" ry="2" />
+<text  x="15.49" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::LteUePhy::UeMeasurementsElement&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::LteUePhy::UeMeasurementsElement&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::LteUePhy::UeMeasurementsElement&gt; &gt; &gt;::_M_lower_bound (202,753 samples, 0.02%)</title><rect x="726.4" y="293" width="0.1" height="15.0" fill="rgb(205,1,0)" rx="2" ry="2" />
+<text  x="729.36" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::UlInfoListElement_s* std::__uninitialized_copy&lt;false&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::UlInfoListElement_s const*, std::vector&lt;ns3::UlInfoListElement_s, std::allocator&lt;ns3::UlInfoListElement_s&gt; &gt; &gt;, ns3::UlInfoListElement_s*&gt; (794,783 samples, 0.08%)</title><rect x="266.2" y="453" width="0.7" height="15.0" fill="rgb(226,97,23)" rx="2" ry="2" />
+<text  x="269.23" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue&gt; ns3::Create&lt;ns3::SpectrumValue, ns3::Ptr&lt;ns3::SpectrumModel const&gt; const&amp;&gt; (1,007,918 samples, 0.10%)</title><rect x="718.1" y="485" width="0.8" height="15.0" fill="rgb(246,189,45)" rx="2" ry="2" />
+<text  x="721.12" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_M_begin (148,965 samples, 0.02%)</title><rect x="121.5" y="501" width="0.2" height="15.0" fill="rgb(248,199,47)" rx="2" ry="2" />
+<text  x="124.54" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Function_base::_Base_manager&lt;std::_Bind&lt;void  (488,113 samples, 0.05%)</title><rect x="640.5" y="389" width="0.4" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="643.55" y="399.5" ></text>
+</g>
+<g >
+<title>std::operator== (145,718 samples, 0.02%)</title><rect x="109.4" y="485" width="0.1" height="15.0" fill="rgb(229,110,26)" rx="2" ry="2" />
+<text  x="112.39" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt;::vector (275,175 samples, 0.03%)</title><rect x="132.0" y="501" width="0.2" height="15.0" fill="rgb(218,61,14)" rx="2" ry="2" />
+<text  x="135.02" y="511.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__promote_2&lt;decltype  (310,695 samples, 0.03%)</title><rect x="227.1" y="485" width="0.3" height="15.0" fill="rgb(250,209,50)" rx="2" ry="2" />
+<text  x="230.10" y="495.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::ByteTagListData**, std::vector&lt;ns3::ByteTagListData*, std::allocator&lt;ns3::ByteTagListData*&gt; &gt; &gt;::operator- (157,845 samples, 0.02%)</title><rect x="29.7" y="357" width="0.1" height="15.0" fill="rgb(248,198,47)" rx="2" ry="2" />
+<text  x="32.65" y="367.5" ></text>
+</g>
+<g >
+<title>void std::__invoke_impl&lt;void, ns3::Callback&lt;void, unsigned short, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;::Callback&lt;void  (1,115,555 samples, 0.12%)</title><rect x="725.7" y="437" width="0.9" height="15.0" fill="rgb(249,206,49)" rx="2" ry="2" />
+<text  x="728.69" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::ByteTagList::Iterator::PrepareForNext (615,765 samples, 0.06%)</title><rect x="426.7" y="197" width="0.4" height="15.0" fill="rgb(206,5,1)" rx="2" ry="2" />
+<text  x="429.65" y="207.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;::_M_move_assign (1,013,617 samples, 0.10%)</title><rect x="290.5" y="405" width="0.8" height="15.0" fill="rgb(208,16,3)" rx="2" ry="2" />
+<text  x="293.46" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_emplace_hint_unique&lt;std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (450,043 samples, 0.05%)</title><rect x="615.5" y="453" width="0.4" height="15.0" fill="rgb(248,201,48)" rx="2" ry="2" />
+<text  x="618.51" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt;::operator* (279,655 samples, 0.03%)</title><rect x="179.1" y="469" width="0.2" height="15.0" fill="rgb(220,71,17)" rx="2" ry="2" />
+<text  x="182.11" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteCcmMacSapProvider*&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteCcmMacSapProvider*&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteCcmMacSapProvider*&gt; &gt; &gt;::_S_key (572,914 samples, 0.06%)</title><rect x="458.4" y="229" width="0.5" height="15.0" fill="rgb(250,211,50)" rx="2" ry="2" />
+<text  x="461.44" y="239.5" ></text>
+</g>
+<g >
+<title> (207,486 samples, 0.02%)</title><rect x="408.8" y="517" width="0.2" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="411.85" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node_base::_S_maximum (160,901 samples, 0.02%)</title><rect x="59.1" y="437" width="0.1" height="15.0" fill="rgb(225,94,22)" rx="2" ry="2" />
+<text  x="62.08" y="447.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Callback&lt;void, ns3::PhyReceptionStatParameters&gt;, std::allocator&lt;ns3::Callback&lt;void, ns3::PhyReceptionStatParameters&gt; &gt; &gt;::end (157,995 samples, 0.02%)</title><rect x="494.0" y="533" width="0.1" height="15.0" fill="rgb(231,121,28)" rx="2" ry="2" />
+<text  x="496.97" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::CqiListElement_s::operator= (1,390,282 samples, 0.14%)</title><rect x="585.4" y="277" width="1.1" height="15.0" fill="rgb(207,11,2)" rx="2" ry="2" />
+<text  x="588.42" y="287.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::LteSpectrumModelId, std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt;, std::_Select1st&lt;std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt; &gt;, std::less&lt;ns3::LteSpectrumModelId&gt;, std::allocator&lt;std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt; &gt; &gt;::_S_key (491,785 samples, 0.05%)</title><rect x="55.4" y="437" width="0.4" height="15.0" fill="rgb(209,19,4)" rx="2" ry="2" />
+<text  x="58.36" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::RlcPduListElement_s* std::__uninitialized_copy&lt;false&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::RlcPduListElement_s const*, std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt;, ns3::RlcPduListElement_s*&gt; (980,187 samples, 0.10%)</title><rect x="211.8" y="373" width="0.8" height="15.0" fill="rgb(223,83,19)" rx="2" ry="2" />
+<text  x="214.84" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_get_insert_hint_unique_pos (200,604 samples, 0.02%)</title><rect x="707.0" y="405" width="0.2" height="15.0" fill="rgb(209,22,5)" rx="2" ry="2" />
+<text  x="710.00" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;int, std::allocator&lt;int&gt; &gt;::~_Vector_base (169,673 samples, 0.02%)</title><rect x="575.2" y="341" width="0.1" height="15.0" fill="rgb(251,213,51)" rx="2" ry="2" />
+<text  x="578.16" y="351.5" ></text>
+</g>
+<g >
+<title>std::map&lt;int, double, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::clear (301,718 samples, 0.03%)</title><rect x="121.5" y="533" width="0.3" height="15.0" fill="rgb(233,132,31)" rx="2" ry="2" />
+<text  x="124.51" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::HigherLayerSelected_s* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;ns3::HigherLayerSelected_s const*, std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt; &gt;, ns3::HigherLayerSelected_s*, ns3::HigherLayerSelected_s&gt; (213,295 samples, 0.02%)</title><rect x="583.7" y="245" width="0.2" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="586.69" y="255.5" ></text>
+</g>
+<g >
+<title>bool __gnu_cxx::operator==&lt;ns3::Buffer::Data* const*, std::vector&lt;ns3::Buffer::Data*, std::allocator&lt;ns3::Buffer::Data*&gt; &gt; &gt; (253,162 samples, 0.03%)</title><rect x="556.4" y="165" width="0.2" height="15.0" fill="rgb(244,183,43)" rx="2" ry="2" />
+<text  x="559.40" y="175.5" ></text>
+</g>
+<g >
+<title>std::_Function_base::_Function_base (204,573 samples, 0.02%)</title><rect x="63.8" y="469" width="0.1" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="66.78" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::TracedCallback&lt;unsigned short, unsigned char, unsigned int, unsigned long&gt;::operator (487,633 samples, 0.05%)</title><rect x="428.3" y="261" width="0.4" height="15.0" fill="rgb(227,104,25)" rx="2" ry="2" />
+<text  x="431.30" y="271.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::TbId_t, std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::_Select1st&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::_M_destroy_node (1,297,607 samples, 0.13%)</title><rect x="505.2" y="485" width="1.1" height="15.0" fill="rgb(219,66,15)" rx="2" ry="2" />
+<text  x="508.24" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::ByteTagListData*, std::allocator&lt;ns3::ByteTagListData*&gt; &gt;::push_back (480,087 samples, 0.05%)</title><rect x="452.7" y="69" width="0.4" height="15.0" fill="rgb(249,204,48)" rx="2" ry="2" />
+<text  x="455.67" y="79.5" ></text>
+</g>
+<g >
+<title>unsigned short* std::uninitialized_copy&lt;std::move_iterator&lt;unsigned short*&gt;, unsigned short*&gt; (154,651 samples, 0.02%)</title><rect x="106.3" y="405" width="0.1" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="109.25" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;::operator++ (161,661 samples, 0.02%)</title><rect x="497.1" y="549" width="0.2" height="15.0" fill="rgb(254,229,54)" rx="2" ry="2" />
+<text  x="500.14" y="559.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::BuildDataListElement_s, std::allocator&lt;ns3::BuildDataListElement_s&gt; &gt;::_Vector_impl_data::_Vector_impl_data (193,156 samples, 0.02%)</title><rect x="142.8" y="405" width="0.2" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="145.82" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumValueHelper::GetSpectrumModel (332,755 samples, 0.03%)</title><rect x="111.4" y="469" width="0.2" height="15.0" fill="rgb(207,12,3)" rx="2" ry="2" />
+<text  x="114.35" y="479.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;int*, int&gt; (265,597 samples, 0.03%)</title><rect x="506.1" y="389" width="0.2" height="15.0" fill="rgb(206,5,1)" rx="2" ry="2" />
+<text  x="509.07" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumModel::GetNumBands (216,568 samples, 0.02%)</title><rect x="300.0" y="453" width="0.2" height="15.0" fill="rgb(247,194,46)" rx="2" ry="2" />
+<text  x="303.02" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::~SpectrumValue (125,754 samples, 0.01%)</title><rect x="79.0" y="469" width="0.1" height="15.0" fill="rgb(247,193,46)" rx="2" ry="2" />
+<text  x="81.96" y="479.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::list (501,982 samples, 0.05%)</title><rect x="516.9" y="437" width="0.4" height="15.0" fill="rgb(236,145,34)" rx="2" ry="2" />
+<text  x="519.88" y="447.5" ></text>
+</g>
+<g >
+<title>std::tuple&lt;unsigned short const&amp;&gt;::tuple (265,541 samples, 0.03%)</title><rect x="191.8" y="373" width="0.2" height="15.0" fill="rgb(233,129,30)" rx="2" ry="2" />
+<text  x="194.82" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Bit_iterator_base::_Bit_iterator_base (148,793 samples, 0.02%)</title><rect x="195.5" y="405" width="0.1" height="15.0" fill="rgb(234,136,32)" rx="2" ry="2" />
+<text  x="198.48" y="415.5" ></text>
+</g>
+<g >
+<title>void  (370,976 samples, 0.04%)</title><rect x="471.2" y="357" width="0.3" height="15.0" fill="rgb(253,221,53)" rx="2" ry="2" />
+<text  x="474.24" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::VendorSpecificListElement_s* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;ns3::VendorSpecificListElement_s const*, std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt; &gt;, ns3::VendorSpecificListElement_s*, ns3::VendorSpecificListElement_s&gt; (198,957 samples, 0.02%)</title><rect x="228.7" y="437" width="0.2" height="15.0" fill="rgb(210,23,5)" rx="2" ry="2" />
+<text  x="231.70" y="447.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; const*, std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt; &gt;::__normal_iterator (155,343 samples, 0.02%)</title><rect x="358.4" y="501" width="0.1" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="361.37" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::LteUePhy::EnqueueDlHarqFeedback (2,635,248 samples, 0.27%)</title><rect x="419.3" y="373" width="2.1" height="15.0" fill="rgb(226,96,23)" rx="2" ry="2" />
+<text  x="422.27" y="383.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::BuildDataListElement_s*&gt; (793,632 samples, 0.08%)</title><rect x="145.6" y="421" width="0.7" height="15.0" fill="rgb(214,45,10)" rx="2" ry="2" />
+<text  x="148.63" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::int64x64_t::int64x64_t (1,284,908 samples, 0.13%)</title><rect x="390.0" y="501" width="1.0" height="15.0" fill="rgb(240,161,38)" rx="2" ry="2" />
+<text  x="392.99" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter&gt;::SimpleRefCount (335,668 samples, 0.03%)</title><rect x="161.2" y="405" width="0.3" height="15.0" fill="rgb(230,117,28)" rx="2" ry="2" />
+<text  x="164.21" y="415.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;int&gt;::allocate (152,677 samples, 0.02%)</title><rect x="397.5" y="485" width="0.1" height="15.0" fill="rgb(235,139,33)" rx="2" ry="2" />
+<text  x="400.46" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::GetSize (336,952 samples, 0.03%)</title><rect x="119.0" y="517" width="0.3" height="15.0" fill="rgb(229,113,27)" rx="2" ry="2" />
+<text  x="122.05" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt;* std::__copy_move_a1&lt;true, ns3::Ptr&lt;ns3::PacketBurst&gt;*, ns3::Ptr&lt;ns3::PacketBurst&gt;*&gt; (5,935,274 samples, 0.61%)</title><rect x="376.8" y="469" width="4.8" height="15.0" fill="rgb(219,68,16)" rx="2" ry="2" />
+<text  x="379.79" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp; std::__get_helper&lt;1ul, ns3::Ptr&lt;ns3::SpectrumValue&gt;, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt; (465,270 samples, 0.05%)</title><rect x="755.1" y="581" width="0.4" height="15.0" fill="rgb(226,98,23)" rx="2" ry="2" />
+<text  x="758.12" y="591.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::LteFlowId_t, std::pair&lt;ns3::LteFlowId_t const, ns3::FfMacSchedSapProvider::SchedDlRlcBufferReqParameters&gt;, std::_Select1st&lt;std::pair&lt;ns3::LteFlowId_t const, ns3::FfMacSchedSapProvider::SchedDlRlcBufferReqParameters&gt; &gt;, std::less&lt;ns3::LteFlowId_t&gt;, std::allocator&lt;std::pair&lt;ns3::LteFlowId_t const, ns3::FfMacSchedSapProvider::SchedDlRlcBufferReqParameters&gt; &gt; &gt;::begin (229,777 samples, 0.02%)</title><rect x="177.6" y="453" width="0.2" height="15.0" fill="rgb(226,100,23)" rx="2" ry="2" />
+<text  x="180.64" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::LteAmc::CreateCqiFeedbacks (6,876,813 samples, 0.71%)</title><rect x="586.7" y="293" width="5.6" height="15.0" fill="rgb(248,198,47)" rx="2" ry="2" />
+<text  x="589.73" y="303.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;int&gt;::allocate (137,246 samples, 0.01%)</title><rect x="699.8" y="453" width="0.2" height="15.0" fill="rgb(212,34,8)" rx="2" ry="2" />
+<text  x="702.85" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::~vector (275,354 samples, 0.03%)</title><rect x="387.7" y="501" width="0.2" height="15.0" fill="rgb(252,219,52)" rx="2" ry="2" />
+<text  x="390.72" y="511.5" ></text>
+</g>
+<g >
+<title>std::operator== (159,377 samples, 0.02%)</title><rect x="720.2" y="501" width="0.1" height="15.0" fill="rgb(229,110,26)" rx="2" ry="2" />
+<text  x="723.17" y="511.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;is_invocable_r_v&lt;void, void  (874,599 samples, 0.09%)</title><rect x="725.9" y="373" width="0.7" height="15.0" fill="rgb(243,178,42)" rx="2" ry="2" />
+<text  x="728.86" y="383.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::operator= (241,903 samples, 0.02%)</title><rect x="585.5" y="229" width="0.2" height="15.0" fill="rgb(211,28,6)" rx="2" ry="2" />
+<text  x="588.46" y="239.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, ns3::LteEnbComponentCarrierManager::UeInfo, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt; &gt; &gt;::lower_bound (1,800,854 samples, 0.19%)</title><rect x="157.4" y="405" width="1.5" height="15.0" fill="rgb(236,144,34)" rx="2" ry="2" />
+<text  x="160.44" y="415.5" ></text>
+</g>
+<g >
+<title>decltype  (233,530 samples, 0.02%)</title><rect x="456.6" y="277" width="0.2" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="459.59" y="287.5" ></text>
+</g>
+<g >
+<title>void std::destroy_at&lt;ns3::FfMacSchedSapProvider::SchedUlCqiInfoReqParameters&gt; (745,848 samples, 0.08%)</title><rect x="263.5" y="421" width="0.6" height="15.0" fill="rgb(229,113,27)" rx="2" ry="2" />
+<text  x="266.46" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::TypeId::TypeId (250,661 samples, 0.03%)</title><rect x="542.5" y="245" width="0.2" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="545.52" y="255.5" ></text>
+</g>
+<g >
+<title>std::_List_const_iterator&lt;ns3::Callback&lt;void, ns3::Ptr&lt;ns3::SpectrumPhy const&gt;, ns3::Ptr&lt;ns3::SpectrumPhy const&gt;, double&gt; &gt;::_List_const_iterator (161,602 samples, 0.02%)</title><rect x="746.7" y="517" width="0.1" height="15.0" fill="rgb(244,179,43)" rx="2" ry="2" />
+<text  x="749.70" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::Tag::~Tag (233,481 samples, 0.02%)</title><rect x="20.5" y="341" width="0.2" height="15.0" fill="rgb(248,201,48)" rx="2" ry="2" />
+<text  x="23.55" y="351.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;* std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_copy&lt;false, std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_Alloc_node&gt; (284,436 samples, 0.03%)</title><rect x="88.2" y="437" width="0.2" height="15.0" fill="rgb(251,212,50)" rx="2" ry="2" />
+<text  x="91.22" y="447.5" ></text>
+</g>
+<g >
+<title>void std::destroy_at&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; (186,011 samples, 0.02%)</title><rect x="776.3" y="325" width="0.1" height="15.0" fill="rgb(216,52,12)" rx="2" ry="2" />
+<text  x="779.26" y="335.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::CqiListElement_s*, std::vector&lt;ns3::CqiListElement_s, std::allocator&lt;ns3::CqiListElement_s&gt; &gt; &gt; std::vector&lt;ns3::CqiListElement_s, std::allocator&lt;ns3::CqiListElement_s&gt; &gt;::insert&lt;__gnu_cxx::__normal_iterator&lt;ns3::CqiListElement_s*, std::vector&lt;ns3::CqiListElement_s, std::allocator&lt;ns3::CqiListElement_s&gt; &gt; &gt;, void&gt; (1,418,884 samples, 0.15%)</title><rect x="92.0" y="501" width="1.1" height="15.0" fill="rgb(235,140,33)" rx="2" ry="2" />
+<text  x="94.97" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::SpectrumValue, ns3::Empty, ns3::DefaultDeleter&lt;ns3::SpectrumValue&gt; &gt;::Unref (248,283 samples, 0.03%)</title><rect x="78.9" y="501" width="0.2" height="15.0" fill="rgb(246,189,45)" rx="2" ry="2" />
+<text  x="81.87" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumModel const&gt;::Acquire (143,319 samples, 0.01%)</title><rect x="299.1" y="453" width="0.1" height="15.0" fill="rgb(222,80,19)" rx="2" ry="2" />
+<text  x="302.06" y="463.5" ></text>
+</g>
+<g >
+<title> (158,234 samples, 0.02%)</title><rect x="737.3" y="517" width="0.1" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="740.27" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::FfMacSchedSapProvider::SchedDlRlcBufferReqParameters::SchedDlRlcBufferReqParameters (393,529 samples, 0.04%)</title><rect x="24.4" y="341" width="0.4" height="15.0" fill="rgb(240,161,38)" rx="2" ry="2" />
+<text  x="27.44" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::MobilityModel* ns3::PeekPointer&lt;ns3::MobilityModel&gt; (168,016 samples, 0.02%)</title><rect x="740.7" y="501" width="0.1" height="15.0" fill="rgb(240,161,38)" rx="2" ry="2" />
+<text  x="743.69" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::LogComponent::IsEnabled (252,384 samples, 0.03%)</title><rect x="536.7" y="293" width="0.2" height="15.0" fill="rgb(214,43,10)" rx="2" ry="2" />
+<text  x="539.71" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumModel const* ns3::PeekPointer&lt;ns3::SpectrumModel const&gt; (253,729 samples, 0.03%)</title><rect x="416.4" y="501" width="0.2" height="15.0" fill="rgb(228,108,26)" rx="2" ry="2" />
+<text  x="419.35" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_M_get_node (236,751 samples, 0.02%)</title><rect x="293.1" y="453" width="0.2" height="15.0" fill="rgb(231,120,28)" rx="2" ry="2" />
+<text  x="296.13" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Object::Object (1,300,864 samples, 0.13%)</title><rect x="161.0" y="421" width="1.0" height="15.0" fill="rgb(242,174,41)" rx="2" ry="2" />
+<text  x="163.97" y="431.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::allocate (124,601 samples, 0.01%)</title><rect x="611.2" y="437" width="0.1" height="15.0" fill="rgb(230,118,28)" rx="2" ry="2" />
+<text  x="614.25" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::BuildRarListElement_s, std::allocator&lt;ns3::BuildRarListElement_s&gt; &gt;::_Vector_base (198,813 samples, 0.02%)</title><rect x="143.5" y="437" width="0.1" height="15.0" fill="rgb(222,81,19)" rx="2" ry="2" />
+<text  x="146.47" y="447.5" ></text>
+</g>
+<g >
+<title>double const&amp; const&amp; std::__get_helper&lt;1ul, double const&amp;, double const&amp;&gt; (407,082 samples, 0.04%)</title><rect x="748.1" y="453" width="0.3" height="15.0" fill="rgb(234,134,32)" rx="2" ry="2" />
+<text  x="751.12" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt;::operator= (701,868 samples, 0.07%)</title><rect x="585.7" y="245" width="0.5" height="15.0" fill="rgb(252,217,52)" rx="2" ry="2" />
+<text  x="588.65" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::TypeId::GetUid (236,772 samples, 0.02%)</title><rect x="13.6" y="373" width="0.2" height="15.0" fill="rgb(230,116,27)" rx="2" ry="2" />
+<text  x="16.57" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::SpectrumValue (534,268 samples, 0.06%)</title><rect x="111.7" y="453" width="0.4" height="15.0" fill="rgb(211,27,6)" rx="2" ry="2" />
+<text  x="114.72" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::FriisPropagationLossModel::DoCalcRxPower (2,967,176 samples, 0.31%)</title><rect x="738.9" y="533" width="2.3" height="15.0" fill="rgb(222,80,19)" rx="2" ry="2" />
+<text  x="741.86" y="543.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt;::deallocate (189,106 samples, 0.02%)</title><rect x="256.5" y="325" width="0.2" height="15.0" fill="rgb(233,132,31)" rx="2" ry="2" />
+<text  x="259.54" y="335.5" ></text>
+</g>
+<g >
+<title>std::function&lt;void  (304,521 samples, 0.03%)</title><rect x="112.7" y="453" width="0.3" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="115.73" y="463.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;unsigned short&gt; &gt;::allocate (163,524 samples, 0.02%)</title><rect x="474.0" y="149" width="0.2" height="15.0" fill="rgb(250,209,50)" rx="2" ry="2" />
+<text  x="477.03" y="159.5" ></text>
+</g>
+<g >
+<title>void std::destroy_at&lt;ns3::ByteTagListData*&gt; (350,982 samples, 0.04%)</title><rect x="30.7" y="341" width="0.2" height="15.0" fill="rgb(210,26,6)" rx="2" ry="2" />
+<text  x="33.67" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::int64x64_t::int64x64_t (246,965 samples, 0.03%)</title><rect x="605.7" y="469" width="0.2" height="15.0" fill="rgb(240,161,38)" rx="2" ry="2" />
+<text  x="608.73" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Ptr&lt;ns3::Object&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Object&gt; &gt; &gt;::~vector (419,148 samples, 0.04%)</title><rect x="635.2" y="309" width="0.3" height="15.0" fill="rgb(223,83,19)" rx="2" ry="2" />
+<text  x="638.16" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::GetTypeId (231,702 samples, 0.02%)</title><rect x="374.9" y="501" width="0.2" height="15.0" fill="rgb(216,54,13)" rx="2" ry="2" />
+<text  x="377.95" y="511.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::begin (148,148 samples, 0.02%)</title><rect x="380.6" y="325" width="0.2" height="15.0" fill="rgb(230,117,28)" rx="2" ry="2" />
+<text  x="383.63" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::LtePhy::SetControlMessages (1,385,802 samples, 0.14%)</title><rect x="419.6" y="357" width="1.1" height="15.0" fill="rgb(247,193,46)" rx="2" ry="2" />
+<text  x="422.62" y="367.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; &gt; &gt;::_M_addr (159,937 samples, 0.02%)</title><rect x="455.3" y="261" width="0.2" height="15.0" fill="rgb(230,116,27)" rx="2" ry="2" />
+<text  x="458.34" y="271.5" ></text>
+</g>
+<g >
+<title>unsigned int* std::__uninitialized_fill_n_a&lt;unsigned int*, unsigned long, unsigned int, unsigned int&gt; (1,206,539 samples, 0.12%)</title><rect x="695.5" y="469" width="0.9" height="15.0" fill="rgb(240,162,38)" rx="2" ry="2" />
+<text  x="698.47" y="479.5" ></text>
+</g>
+<g >
+<title>malloc (156,584 samples, 0.02%)</title><rect x="154.6" y="357" width="0.1" height="15.0" fill="rgb(230,119,28)" rx="2" ry="2" />
+<text  x="157.60" y="367.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;int const, double&gt; &gt;* std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_M_create_node&lt;std::pair&lt;int const, double&gt; const&amp;&gt; (417,843 samples, 0.04%)</title><rect x="59.5" y="405" width="0.3" height="15.0" fill="rgb(235,139,33)" rx="2" ry="2" />
+<text  x="62.51" y="415.5" ></text>
+</g>
+<g >
+<title>void std::__invoke_impl&lt;void, void  (18,977,087 samples, 1.96%)</title><rect x="423.4" y="389" width="15.3" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="426.44" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::HarqStatus_e* std::copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::DlInfoListElement_s::HarqStatus_e const*, std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt; &gt;, ns3::DlInfoListElement_s::HarqStatus_e*&gt; (683,830 samples, 0.07%)</title><rect x="444.1" y="261" width="0.6" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="447.11" y="271.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt;::~vector (234,807 samples, 0.02%)</title><rect x="263.9" y="389" width="0.2" height="15.0" fill="rgb(254,227,54)" rx="2" ry="2" />
+<text  x="266.87" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_Vector_base (254,332 samples, 0.03%)</title><rect x="595.9" y="133" width="0.2" height="15.0" fill="rgb(205,2,0)" rx="2" ry="2" />
+<text  x="598.86" y="143.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::~vector (193,911 samples, 0.02%)</title><rect x="104.0" y="309" width="0.1" height="15.0" fill="rgb(225,92,22)" rx="2" ry="2" />
+<text  x="106.96" y="319.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::HigherLayerSelected_s*, ns3::HigherLayerSelected_s&gt; (126,894 samples, 0.01%)</title><rect x="585.2" y="245" width="0.1" height="15.0" fill="rgb(237,150,35)" rx="2" ry="2" />
+<text  x="588.18" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::SbMeasResult_s::operator= (338,715 samples, 0.03%)</title><rect x="93.8" y="469" width="0.2" height="15.0" fill="rgb(205,4,1)" rx="2" ry="2" />
+<text  x="96.76" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter&gt;::Unref (238,924 samples, 0.02%)</title><rect x="36.6" y="597" width="0.2" height="15.0" fill="rgb(221,78,18)" rx="2" ry="2" />
+<text  x="39.64" y="607.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::GetSpectrumModel (551,820 samples, 0.06%)</title><rect x="405.0" y="517" width="0.5" height="15.0" fill="rgb(228,106,25)" rx="2" ry="2" />
+<text  x="408.02" y="527.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::BuildBroadcastListElement_s, std::allocator&lt;ns3::BuildBroadcastListElement_s&gt; &gt;::~vector (432,794 samples, 0.04%)</title><rect x="145.1" y="453" width="0.3" height="15.0" fill="rgb(224,87,20)" rx="2" ry="2" />
+<text  x="148.10" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt;::operator* (303,984 samples, 0.03%)</title><rect x="178.2" y="469" width="0.2" height="15.0" fill="rgb(220,71,17)" rx="2" ry="2" />
+<text  x="181.17" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt;::~_Vector_base (220,788 samples, 0.02%)</title><rect x="131.3" y="485" width="0.2" height="15.0" fill="rgb(253,220,52)" rx="2" ry="2" />
+<text  x="134.28" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned long, std::allocator&lt;unsigned long&gt; &gt;::end (154,845 samples, 0.02%)</title><rect x="327.4" y="485" width="0.1" height="15.0" fill="rgb(222,80,19)" rx="2" ry="2" />
+<text  x="330.40" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::TbId_t, std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::_Select1st&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::_M_get_insert_hint_unique_pos (473,287 samples, 0.05%)</title><rect x="385.8" y="485" width="0.4" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="388.84" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbMac::ReceiveBsrMessage (4,862,603 samples, 0.50%)</title><rect x="457.1" y="325" width="3.9" height="15.0" fill="rgb(233,130,31)" rx="2" ry="2" />
+<text  x="460.09" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbMac::DoTransmitPdu (5,387,885 samples, 0.56%)</title><rect x="19.6" y="373" width="4.3" height="15.0" fill="rgb(220,70,16)" rx="2" ry="2" />
+<text  x="22.60" y="383.5" ></text>
+</g>
+<g >
+<title>void std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_construct_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; const&amp;&gt; (344,140 samples, 0.04%)</title><rect x="342.0" y="357" width="0.3" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="345.01" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::IidManager::LookupInformation (534,682 samples, 0.06%)</title><rect x="541.2" y="229" width="0.4" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="544.16" y="239.5" ></text>
+</g>
+<g >
+<title>ns3::TracedCallback&lt;unsigned short, unsigned char, unsigned int&gt;::operator (515,825 samples, 0.05%)</title><rect x="156.0" y="389" width="0.4" height="15.0" fill="rgb(228,106,25)" rx="2" ry="2" />
+<text  x="158.97" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::TbId_t, std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::_Select1st&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::_M_destroy_node (229,826 samples, 0.02%)</title><rect x="506.3" y="469" width="0.2" height="15.0" fill="rgb(219,66,15)" rx="2" ry="2" />
+<text  x="509.35" y="479.5" ></text>
+</g>
+<g >
+<title>double* std::__uninitialized_default_n_1&lt;true&gt;::__uninit_default_n&lt;double*, unsigned long&gt; (403,975 samples, 0.04%)</title><rect x="729.9" y="389" width="0.3" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="732.86" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::CqiListElement_s::CqiListElement_s (1,645,474 samples, 0.17%)</title><rect x="442.6" y="341" width="1.3" height="15.0" fill="rgb(238,156,37)" rx="2" ry="2" />
+<text  x="445.63" y="351.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_Vector_base (206,509 samples, 0.02%)</title><rect x="606.9" y="469" width="0.2" height="15.0" fill="rgb(237,150,35)" rx="2" ry="2" />
+<text  x="609.89" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::LteHarqPhy::ResetUlHarqProcessStatus (2,339,527 samples, 0.24%)</title><rect x="465.0" y="549" width="1.9" height="15.0" fill="rgb(220,73,17)" rx="2" ry="2" />
+<text  x="467.98" y="559.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;int const, double&gt; &gt;* std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_M_copy&lt;false, std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_Alloc_node&gt; (1,950,782 samples, 0.20%)</title><rect x="58.8" y="469" width="1.6" height="15.0" fill="rgb(224,87,21)" rx="2" ry="2" />
+<text  x="61.81" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::RlcTag::Serialize (366,372 samples, 0.04%)</title><rect x="555.1" y="245" width="0.3" height="15.0" fill="rgb(233,133,31)" rx="2" ry="2" />
+<text  x="558.07" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt; ns3::Create&lt;ns3::PacketBurst&gt; (610,469 samples, 0.06%)</title><rect x="627.0" y="517" width="0.5" height="15.0" fill="rgb(225,93,22)" rx="2" ry="2" />
+<text  x="630.03" y="527.5" ></text>
+</g>
+<g >
+<title>void std::destroy_at&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; (1,015,028 samples, 0.10%)</title><rect x="505.5" y="453" width="0.8" height="15.0" fill="rgb(233,130,31)" rx="2" ry="2" />
+<text  x="508.46" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::PacketMetadata::PacketMetadata (796,815 samples, 0.08%)</title><rect x="32.7" y="389" width="0.6" height="15.0" fill="rgb(231,121,28)" rx="2" ry="2" />
+<text  x="35.70" y="399.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;std::is_constructible&lt;std::pair&lt;int const, double&gt;, std::pair&lt;int, double&gt; &gt;::value, std::pair&lt;std::_Rb_tree_iterator&lt;std::pair&lt;int const, double&gt; &gt;, bool&gt; &gt;::type std::map&lt;int, double, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::insert&lt;std::pair&lt;int, double&gt; &gt; (2,157,773 samples, 0.22%)</title><rect x="292.8" y="533" width="1.7" height="15.0" fill="rgb(219,65,15)" rx="2" ry="2" />
+<text  x="295.78" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumModel const&gt;::Ptr (280,962 samples, 0.03%)</title><rect x="402.2" y="501" width="0.2" height="15.0" fill="rgb(232,125,30)" rx="2" ry="2" />
+<text  x="405.21" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::SpectrumSignalParameters, ns3::Empty, ns3::DefaultDeleter&lt;ns3::SpectrumSignalParameters&gt; &gt;::Unref (2,461,305 samples, 0.25%)</title><rect x="652.5" y="501" width="1.9" height="15.0" fill="rgb(254,229,54)" rx="2" ry="2" />
+<text  x="655.46" y="511.5" ></text>
+</g>
+<g >
+<title>decltype  (169,019 samples, 0.02%)</title><rect x="533.4" y="293" width="0.2" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="536.42" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumPhy::GetMobility (496,870 samples, 0.05%)</title><rect x="313.3" y="501" width="0.4" height="15.0" fill="rgb(228,107,25)" rx="2" ry="2" />
+<text  x="316.32" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;::_M_valptr (827,930 samples, 0.09%)</title><rect x="759.5" y="677" width="0.7" height="15.0" fill="rgb(213,38,9)" rx="2" ry="2" />
+<text  x="762.54" y="687.5" ></text>
+</g>
+<g >
+<title> (160,403 samples, 0.02%)</title><rect x="744.9" y="517" width="0.2" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="747.94" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::DoDispose (865,729 samples, 0.09%)</title><rect x="501.7" y="421" width="0.7" height="15.0" fill="rgb(242,172,41)" rx="2" ry="2" />
+<text  x="504.71" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::DlDciListElement_s::operator= (918,195 samples, 0.09%)</title><rect x="140.0" y="485" width="0.7" height="15.0" fill="rgb(254,228,54)" rx="2" ry="2" />
+<text  x="142.96" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_get_insert_hint_unique_pos (165,767 samples, 0.02%)</title><rect x="82.3" y="469" width="0.2" height="15.0" fill="rgb(240,162,38)" rx="2" ry="2" />
+<text  x="85.32" y="479.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;double&gt; &gt;::deallocate (190,332 samples, 0.02%)</title><rect x="674.2" y="405" width="0.1" height="15.0" fill="rgb(236,143,34)" rx="2" ry="2" />
+<text  x="677.16" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumModel&gt;::operator= (145,744 samples, 0.02%)</title><rect x="297.5" y="469" width="0.1" height="15.0" fill="rgb(248,198,47)" rx="2" ry="2" />
+<text  x="300.48" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::PacketBurst (301,065 samples, 0.03%)</title><rect x="118.8" y="485" width="0.2" height="15.0" fill="rgb(208,15,3)" rx="2" ry="2" />
+<text  x="121.78" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::UlInfoListElement_s* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::UlInfoListElement_s const*, std::vector&lt;ns3::UlInfoListElement_s, std::allocator&lt;ns3::UlInfoListElement_s&gt; &gt; &gt;, ns3::UlInfoListElement_s*&gt; (794,783 samples, 0.08%)</title><rect x="266.2" y="469" width="0.7" height="15.0" fill="rgb(205,1,0)" rx="2" ry="2" />
+<text  x="269.23" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Packet::AddByteTag (2,074,064 samples, 0.21%)</title><rect x="29.5" y="421" width="1.7" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="32.50" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::HigherLayerSelected_s* std::__do_uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::HigherLayerSelected_s const*, std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt; &gt;, ns3::HigherLayerSelected_s*&gt; (241,929 samples, 0.02%)</title><rect x="593.4" y="197" width="0.2" height="15.0" fill="rgb(244,179,43)" rx="2" ry="2" />
+<text  x="596.38" y="207.5" ></text>
+</g>
+<g >
+<title>std::_Bit_iterator std::__copy_move_a&lt;false, std::_Bit_const_iterator, std::_Bit_iterator&gt; (273,527 samples, 0.03%)</title><rect x="248.0" y="405" width="0.3" height="15.0" fill="rgb(224,87,20)" rx="2" ry="2" />
+<text  x="251.04" y="415.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;std::is_constructible&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::pair&lt;ns3::TbId_t, ns3::tbInfo_t&gt; &gt;::value, std::pair&lt;std::_Rb_tree_iterator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, bool&gt; &gt;::type std::map&lt;ns3::TbId_t, ns3::tbInfo_t, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::insert&lt;std::pair&lt;ns3::TbId_t, ns3::tbInfo_t&gt; &gt; (2,996,775 samples, 0.31%)</title><rect x="384.1" y="533" width="2.4" height="15.0" fill="rgb(213,40,9)" rx="2" ry="2" />
+<text  x="387.05" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::Time::Time (197,236 samples, 0.02%)</title><rect x="670.4" y="485" width="0.1" height="15.0" fill="rgb(226,100,24)" rx="2" ry="2" />
+<text  x="673.38" y="495.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::AttributeConstructionList::Item, std::allocator&lt;ns3::AttributeConstructionList::Item&gt; &gt;::_List_base (495,491 samples, 0.05%)</title><rect x="630.2" y="469" width="0.4" height="15.0" fill="rgb(251,212,50)" rx="2" ry="2" />
+<text  x="633.21" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::LtePhy::GetTti (159,059 samples, 0.02%)</title><rect x="383.5" y="549" width="0.1" height="15.0" fill="rgb(238,152,36)" rx="2" ry="2" />
+<text  x="386.52" y="559.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;::_M_erase_at_end (228,146 samples, 0.02%)</title><rect x="209.1" y="469" width="0.2" height="15.0" fill="rgb(205,3,0)" rx="2" ry="2" />
+<text  x="212.09" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt;::~vector (429,894 samples, 0.04%)</title><rect x="445.6" y="309" width="0.4" height="15.0" fill="rgb(246,189,45)" rx="2" ry="2" />
+<text  x="448.63" y="319.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;* std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_M_copy&lt;false, std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_Alloc_node&gt; (3,799,581 samples, 0.39%)</title><rect x="237.4" y="421" width="3.0" height="15.0" fill="rgb(236,146,34)" rx="2" ry="2" />
+<text  x="240.35" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::_Vector_base (364,748 samples, 0.04%)</title><rect x="474.3" y="277" width="0.3" height="15.0" fill="rgb(219,65,15)" rx="2" ry="2" />
+<text  x="477.35" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::ObjectDeleter::Delete (4,924,388 samples, 0.51%)</title><rect x="451.1" y="277" width="4.0" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="454.12" y="287.5" ></text>
+</g>
+<g >
+<title>std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt; &gt;::operator (148,923 samples, 0.02%)</title><rect x="158.6" y="341" width="0.1" height="15.0" fill="rgb(233,130,31)" rx="2" ry="2" />
+<text  x="161.61" y="351.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt;::_M_erase (2,189,170 samples, 0.23%)</title><rect x="621.4" y="517" width="1.8" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="624.44" y="527.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_put_node (269,933 samples, 0.03%)</title><rect x="392.2" y="501" width="0.2" height="15.0" fill="rgb(235,141,33)" rx="2" ry="2" />
+<text  x="395.23" y="511.5" ></text>
+</g>
+<g >
+<title>cfree (155,386 samples, 0.02%)</title><rect x="216.5" y="389" width="0.1" height="15.0" fill="rgb(223,86,20)" rx="2" ry="2" />
+<text  x="219.49" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_end (247,206 samples, 0.03%)</title><rect x="84.7" y="405" width="0.2" height="15.0" fill="rgb(219,65,15)" rx="2" ry="2" />
+<text  x="87.73" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;0ul, double const&amp;, double const&amp;, double const&amp;&gt;::_M_head (311,781 samples, 0.03%)</title><rect x="748.8" y="453" width="0.2" height="15.0" fill="rgb(236,145,34)" rx="2" ry="2" />
+<text  x="751.79" y="463.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::map (198,211 samples, 0.02%)</title><rect x="667.1" y="309" width="0.1" height="15.0" fill="rgb(242,171,40)" rx="2" ry="2" />
+<text  x="670.07" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::Simulator::Now (151,574 samples, 0.02%)</title><rect x="697.4" y="517" width="0.2" height="15.0" fill="rgb(240,164,39)" rx="2" ry="2" />
+<text  x="700.45" y="527.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;ns3::Buffer::Data*&gt; &gt;::construct&lt;ns3::Buffer::Data*, ns3::Buffer::Data* const&amp;&gt; (345,768 samples, 0.04%)</title><rect x="546.1" y="69" width="0.3" height="15.0" fill="rgb(251,213,50)" rx="2" ry="2" />
+<text  x="549.11" y="79.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::lower_bound (1,665,605 samples, 0.17%)</title><rect x="663.0" y="421" width="1.3" height="15.0" fill="rgb(254,228,54)" rx="2" ry="2" />
+<text  x="666.00" y="431.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, ns3::DlInfoListElement_s, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt; &gt;::begin (250,766 samples, 0.03%)</title><rect x="508.4" y="549" width="0.2" height="15.0" fill="rgb(241,167,40)" rx="2" ry="2" />
+<text  x="511.36" y="559.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::~_Vector_base (190,332 samples, 0.02%)</title><rect x="674.2" y="437" width="0.1" height="15.0" fill="rgb(223,86,20)" rx="2" ry="2" />
+<text  x="677.16" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_S_key (340,756 samples, 0.04%)</title><rect x="337.1" y="373" width="0.2" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="340.07" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::DoDispose (5,576,521 samples, 0.58%)</title><rect x="544.7" y="261" width="4.4" height="15.0" fill="rgb(242,172,41)" rx="2" ry="2" />
+<text  x="547.65" y="271.5" ></text>
+</g>
+<g >
+<title>pow (501,451 samples, 0.05%)</title><rect x="678.6" y="501" width="0.4" height="15.0" fill="rgb(254,226,54)" rx="2" ry="2" />
+<text  x="681.61" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter&gt;::Unref (158,753 samples, 0.02%)</title><rect x="17.0" y="437" width="0.1" height="15.0" fill="rgb(221,78,18)" rx="2" ry="2" />
+<text  x="19.99" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_M_get_Tp_allocator (158,009 samples, 0.02%)</title><rect x="239.0" y="277" width="0.2" height="15.0" fill="rgb(227,101,24)" rx="2" ry="2" />
+<text  x="242.03" y="287.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::HarqProcessInfoElement_t*, ns3::HarqProcessInfoElement_t&gt; (288,179 samples, 0.03%)</title><rect x="515.0" y="533" width="0.3" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="518.03" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt; &gt;::_S_key (209,098 samples, 0.02%)</title><rect x="73.8" y="453" width="0.2" height="15.0" fill="rgb(238,153,36)" rx="2" ry="2" />
+<text  x="76.78" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::LteUePowerControl::SetRsrp (935,867 samples, 0.10%)</title><rect x="603.0" y="325" width="0.7" height="15.0" fill="rgb(214,44,10)" rx="2" ry="2" />
+<text  x="605.99" y="335.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;int, std::allocator&lt;int&gt; &gt;::_M_allocate (231,272 samples, 0.02%)</title><rect x="397.4" y="517" width="0.2" height="15.0" fill="rgb(216,52,12)" rx="2" ry="2" />
+<text  x="400.40" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::UeMemberLteUePhySapUser::ReceivePhyPdu (4,482,363 samples, 0.46%)</title><rect x="435.0" y="357" width="3.6" height="15.0" fill="rgb(216,54,12)" rx="2" ry="2" />
+<text  x="438.01" y="367.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::LteUePhy::PssElement, std::allocator&lt;ns3::LteUePhy::PssElement&gt; &gt;::_M_insert&lt;ns3::LteUePhy::PssElement const&amp;&gt; (194,530 samples, 0.02%)</title><rect x="726.2" y="309" width="0.1" height="15.0" fill="rgb(251,212,50)" rx="2" ry="2" />
+<text  x="729.19" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultDeleter&lt;ns3::EventImpl&gt;::Delete (444,360 samples, 0.05%)</title><rect x="64.6" y="485" width="0.3" height="15.0" fill="rgb(240,163,39)" rx="2" ry="2" />
+<text  x="67.57" y="495.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; &gt;::_M_addr (147,511 samples, 0.02%)</title><rect x="466.0" y="437" width="0.1" height="15.0" fill="rgb(224,87,20)" rx="2" ry="2" />
+<text  x="468.97" y="447.5" ></text>
+</g>
+<g >
+<title>malloc (220,654 samples, 0.02%)</title><rect x="21.6" y="309" width="0.2" height="15.0" fill="rgb(230,119,28)" rx="2" ry="2" />
+<text  x="24.63" y="319.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::list (276,041 samples, 0.03%)</title><rect x="162.0" y="421" width="0.2" height="15.0" fill="rgb(252,216,51)" rx="2" ry="2" />
+<text  x="165.01" y="431.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::~list (343,413 samples, 0.04%)</title><rect x="654.2" y="437" width="0.2" height="15.0" fill="rgb(222,80,19)" rx="2" ry="2" />
+<text  x="657.16" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::MacCeValue_u::MacCeValue_u (234,615 samples, 0.02%)</title><rect x="129.3" y="389" width="0.2" height="15.0" fill="rgb(219,65,15)" rx="2" ry="2" />
+<text  x="132.34" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;int const, double&gt; &gt; std::map&lt;int, double, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::emplace_hint&lt;std::pair&lt;int, double&gt; &gt; (1,385,087 samples, 0.14%)</title><rect x="293.0" y="517" width="1.1" height="15.0" fill="rgb(232,126,30)" rx="2" ry="2" />
+<text  x="296.00" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::MemberSchedSapProvider&lt;ns3::PfFfMacScheduler&gt;::SchedDlTriggerReq (1,650,854 samples, 0.17%)</title><rect x="15.8" y="517" width="1.3" height="15.0" fill="rgb(247,193,46)" rx="2" ry="2" />
+<text  x="18.79" y="527.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt;::_M_ptr (199,234 samples, 0.02%)</title><rect x="362.8" y="437" width="0.2" height="15.0" fill="rgb(215,48,11)" rx="2" ry="2" />
+<text  x="365.81" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::BuildDataListElement_s* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::BuildDataListElement_s const*, std::vector&lt;ns3::BuildDataListElement_s, std::allocator&lt;ns3::BuildDataListElement_s&gt; &gt; &gt;, ns3::BuildDataListElement_s*&gt; (143,073 samples, 0.01%)</title><rect x="95.0" y="405" width="0.1" height="15.0" fill="rgb(249,206,49)" rx="2" ry="2" />
+<text  x="97.98" y="415.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;std::_Rb_tree_iterator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, bool&gt; std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::emplace&lt;unsigned int const&amp;, ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp;&gt; (1,130,669 samples, 0.12%)</title><rect x="81.8" y="517" width="0.9" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="84.78" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;0ul, ns3::LteSpectrumPhy*&gt;::_Tuple_impl&lt;ns3::LteSpectrumPhy*&amp;&gt; (415,211 samples, 0.04%)</title><rect x="638.7" y="437" width="0.3" height="15.0" fill="rgb(216,52,12)" rx="2" ry="2" />
+<text  x="641.66" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::_Vector_impl::~_Vector_impl (154,656 samples, 0.02%)</title><rect x="473.0" y="245" width="0.1" height="15.0" fill="rgb(226,97,23)" rx="2" ry="2" />
+<text  x="476.01" y="255.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt;, std::allocator&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt; &gt; &gt;::_M_range_check (158,396 samples, 0.02%)</title><rect x="213.3" y="469" width="0.1" height="15.0" fill="rgb(235,142,34)" rx="2" ry="2" />
+<text  x="216.28" y="479.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;::~list (231,280 samples, 0.02%)</title><rect x="121.3" y="533" width="0.2" height="15.0" fill="rgb(217,57,13)" rx="2" ry="2" />
+<text  x="124.33" y="543.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;std::__strip_reference_wrapper&lt;std::decay&lt;ns3::Scheduler::EventKey const&amp;&gt;::type&gt;::__type, std::__strip_reference_wrapper&lt;std::decay&lt;ns3::EventImpl* const&amp;&gt;::type&gt;::__type&gt; std::make_pair&lt;ns3::Scheduler::EventKey const&amp;, ns3::EventImpl* const&amp;&gt; (141,536 samples, 0.01%)</title><rect x="664.7" y="453" width="0.1" height="15.0" fill="rgb(235,141,33)" rx="2" ry="2" />
+<text  x="667.69" y="463.5" ></text>
+</g>
+<g >
+<title>std::tuple_element&lt;1ul, std::pair&lt;unsigned int const&amp;, ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp;&gt; &gt;::type&amp;&amp; std::get&lt;1ul, unsigned int const&amp;, ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp;&gt; (161,945 samples, 0.02%)</title><rect x="333.1" y="485" width="0.2" height="15.0" fill="rgb(219,65,15)" rx="2" ry="2" />
+<text  x="336.14" y="495.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::BuildDataListElement_s const*, std::vector&lt;ns3::BuildDataListElement_s, std::allocator&lt;ns3::BuildDataListElement_s&gt; &gt; &gt;::operator* (163,914 samples, 0.02%)</title><rect x="141.9" y="373" width="0.2" height="15.0" fill="rgb(229,112,26)" rx="2" ry="2" />
+<text  x="144.92" y="383.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::operator= (1,045,585 samples, 0.11%)</title><rect x="680.0" y="533" width="0.8" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="682.97" y="543.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;double&gt;::deallocate (190,332 samples, 0.02%)</title><rect x="674.2" y="373" width="0.1" height="15.0" fill="rgb(250,208,49)" rx="2" ry="2" />
+<text  x="677.16" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue const&gt;::operator (129,312 samples, 0.01%)</title><rect x="79.2" y="501" width="0.1" height="15.0" fill="rgb(248,200,47)" rx="2" ry="2" />
+<text  x="82.23" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumPhy::SetTxPowerSpectralDensity (1,023,722 samples, 0.11%)</title><rect x="303.1" y="517" width="0.8" height="15.0" fill="rgb(208,14,3)" rx="2" ry="2" />
+<text  x="306.09" y="527.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;ns3::TbId_t, ns3::tbInfo_t&gt;::~pair (656,469 samples, 0.07%)</title><rect x="387.4" y="533" width="0.5" height="15.0" fill="rgb(229,112,27)" rx="2" ry="2" />
+<text  x="390.42" y="543.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::CqiListElement_s*, ns3::CqiListElement_s&gt; (190,387 samples, 0.02%)</title><rect x="131.1" y="485" width="0.1" height="15.0" fill="rgb(225,92,22)" rx="2" ry="2" />
+<text  x="134.09" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue&gt;::Ptr (158,198 samples, 0.02%)</title><rect x="670.1" y="485" width="0.2" height="15.0" fill="rgb(220,73,17)" rx="2" ry="2" />
+<text  x="673.13" y="495.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;double&gt;::allocate (126,483 samples, 0.01%)</title><rect x="606.9" y="389" width="0.1" height="15.0" fill="rgb(248,201,48)" rx="2" ry="2" />
+<text  x="609.92" y="399.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::FfMacSchedSapProvider::SchedUlCqiInfoReqParameters, std::allocator&lt;ns3::FfMacSchedSapProvider::SchedUlCqiInfoReqParameters&gt; &gt;::push_back (722,100 samples, 0.07%)</title><rect x="473.6" y="293" width="0.6" height="15.0" fill="rgb(237,148,35)" rx="2" ry="2" />
+<text  x="476.65" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::int64x64_t::int64x64_t (1,343,589 samples, 0.14%)</title><rect x="683.1" y="517" width="1.1" height="15.0" fill="rgb(240,161,38)" rx="2" ry="2" />
+<text  x="686.13" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::TagBuffer::WriteU16 (309,646 samples, 0.03%)</title><rect x="21.4" y="309" width="0.2" height="15.0" fill="rgb(215,48,11)" rx="2" ry="2" />
+<text  x="24.38" y="319.5" ></text>
+</g>
+<g >
+<title>decltype  (518,331 samples, 0.05%)</title><rect x="271.1" y="373" width="0.4" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="274.13" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::PfFfMacScheduler::DoSchedDlRlcBufferReq (605,673 samples, 0.06%)</title><rect x="17.9" y="309" width="0.5" height="15.0" fill="rgb(236,143,34)" rx="2" ry="2" />
+<text  x="20.95" y="319.5" ></text>
+</g>
+<g >
+<title>std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;* std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_create_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; const&amp;&gt; (494,618 samples, 0.05%)</title><rect x="355.6" y="469" width="0.4" height="15.0" fill="rgb(230,116,27)" rx="2" ry="2" />
+<text  x="358.61" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::_M_default_initialize (1,425,764 samples, 0.15%)</title><rect x="403.4" y="469" width="1.1" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="406.39" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;unsigned short&gt;::_M_valptr (202,650 samples, 0.02%)</title><rect x="463.1" y="293" width="0.2" height="15.0" fill="rgb(211,28,6)" rx="2" ry="2" />
+<text  x="466.13" y="303.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_S_relocate (348,271 samples, 0.04%)</title><rect x="597.8" y="245" width="0.2" height="15.0" fill="rgb(228,110,26)" rx="2" ry="2" />
+<text  x="600.75" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::TagBuffer::TagBuffer (294,318 samples, 0.03%)</title><rect x="490.9" y="517" width="0.2" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="493.87" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::LteSpectrumModelId, std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt;, std::_Select1st&lt;std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt; &gt;, std::less&lt;ns3::LteSpectrumModelId&gt;, std::allocator&lt;std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt; &gt; &gt;::_M_lower_bound (843,869 samples, 0.09%)</title><rect x="675.8" y="453" width="0.7" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="678.80" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::MakeEvent&lt;void  (379,721 samples, 0.04%)</title><rect x="112.7" y="469" width="0.3" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="115.67" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteSpectrumSignalParametersDataFrame&gt;::Ptr (160,095 samples, 0.02%)</title><rect x="735.4" y="533" width="0.1" height="15.0" fill="rgb(243,178,42)" rx="2" ry="2" />
+<text  x="738.39" y="543.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt; &gt;::allocate (258,278 samples, 0.03%)</title><rect x="334.5" y="341" width="0.2" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="337.53" y="351.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;std::_Rb_tree_node_base*, std::_Rb_tree_node_base*&gt;::pair&lt;std::_Rb_tree_node&lt;std::pair&lt;int const, double&gt; &gt;*&amp;, std::_Rb_tree_node_base*&amp;&gt; (186,478 samples, 0.02%)</title><rect x="293.9" y="453" width="0.1" height="15.0" fill="rgb(241,166,39)" rx="2" ry="2" />
+<text  x="296.87" y="463.5" ></text>
+</g>
+<g >
+<title>malloc (169,207 samples, 0.02%)</title><rect x="574.6" y="229" width="0.1" height="15.0" fill="rgb(230,119,28)" rx="2" ry="2" />
+<text  x="577.55" y="239.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::~vector (242,607 samples, 0.03%)</title><rect x="521.7" y="341" width="0.2" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="524.72" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::TypeId::~TypeId (183,254 samples, 0.02%)</title><rect x="375.1" y="501" width="0.2" height="15.0" fill="rgb(232,125,30)" rx="2" ry="2" />
+<text  x="378.13" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::PacketMetadata::Recycle (521,509 samples, 0.05%)</title><rect x="453.2" y="85" width="0.4" height="15.0" fill="rgb(238,154,37)" rx="2" ry="2" />
+<text  x="456.15" y="95.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;unsigned short&gt; &gt;::allocate (360,140 samples, 0.04%)</title><rect x="480.0" y="245" width="0.2" height="15.0" fill="rgb(250,209,50)" rx="2" ry="2" />
+<text  x="482.95" y="255.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::VendorSpecificListElement_s const*, std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt; &gt;::base (158,549 samples, 0.02%)</title><rect x="144.2" y="357" width="0.2" height="15.0" fill="rgb(218,60,14)" rx="2" ry="2" />
+<text  x="147.23" y="367.5" ></text>
+</g>
+<g >
+<title>double* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, double*, double&gt; (251,522 samples, 0.03%)</title><rect x="78.3" y="469" width="0.2" height="15.0" fill="rgb(222,79,19)" rx="2" ry="2" />
+<text  x="81.29" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt;::~Ptr (2,069,772 samples, 0.21%)</title><rect x="773.8" y="389" width="1.7" height="15.0" fill="rgb(205,3,0)" rx="2" ry="2" />
+<text  x="776.80" y="399.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, unsigned char*&gt; (190,052 samples, 0.02%)</title><rect x="443.8" y="293" width="0.1" height="15.0" fill="rgb(227,104,25)" rx="2" ry="2" />
+<text  x="446.80" y="303.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt; &gt;::_M_get_insert_hint_unique_pos (501,334 samples, 0.05%)</title><rect x="504.4" y="501" width="0.4" height="15.0" fill="rgb(212,35,8)" rx="2" ry="2" />
+<text  x="507.39" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::IidManager::GetAttributeN (456,193 samples, 0.05%)</title><rect x="631.3" y="453" width="0.4" height="15.0" fill="rgb(232,125,30)" rx="2" ry="2" />
+<text  x="634.31" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Ptr&lt;ns3::Object&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Object&gt; &gt; &gt;::clear (158,065 samples, 0.02%)</title><rect x="165.0" y="341" width="0.1" height="15.0" fill="rgb(241,167,40)" rx="2" ry="2" />
+<text  x="167.98" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::LteControlMessage, ns3::Empty, ns3::DefaultDeleter&lt;ns3::LteControlMessage&gt; &gt;::Ref (156,385 samples, 0.02%)</title><rect x="319.1" y="261" width="0.2" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="322.14" y="271.5" ></text>
+</g>
+<g >
+<title>void std::_Function_base::_Base_manager&lt;std::_Bind&lt;void  (489,748 samples, 0.05%)</title><rect x="639.6" y="469" width="0.4" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="642.61" y="479.5" ></text>
+</g>
+<g >
+<title>unsigned long const&amp; std::min&lt;unsigned long&gt; (159,495 samples, 0.02%)</title><rect x="696.8" y="453" width="0.1" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="699.77" y="463.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::__copy_move_a2&lt;false, unsigned char const*, unsigned char*&gt; (185,651 samples, 0.02%)</title><rect x="127.2" y="277" width="0.1" height="15.0" fill="rgb(209,20,4)" rx="2" ry="2" />
+<text  x="130.15" y="287.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::__uninitialized_copy&lt;true&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, unsigned char*&gt; (163,843 samples, 0.02%)</title><rect x="147.3" y="389" width="0.1" height="15.0" fill="rgb(233,129,30)" rx="2" ry="2" />
+<text  x="150.28" y="399.5" ></text>
+</g>
+<g >
+<title>void std::__invoke_impl&lt;void, ns3::Callback&lt;void, ns3::SpectrumValue const&amp;&gt;::Callback&lt;void  (34,038,084 samples, 3.51%)</title><rect x="578.0" y="437" width="27.4" height="15.0" fill="rgb(245,184,44)" rx="2" ry="2" />
+<text  x="580.99" y="447.5" >v..</text>
+</g>
+<g >
+<title>ns3::Packet::AddPacketTag (1,534,193 samples, 0.16%)</title><rect x="20.7" y="357" width="1.3" height="15.0" fill="rgb(233,131,31)" rx="2" ry="2" />
+<text  x="23.74" y="367.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_M_drop_node (325,437 samples, 0.03%)</title><rect x="60.8" y="373" width="0.3" height="15.0" fill="rgb(225,93,22)" rx="2" ry="2" />
+<text  x="63.84" y="383.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::vector (677,875 samples, 0.07%)</title><rect x="91.1" y="549" width="0.5" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="94.09" y="559.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;5ul, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::~_Tuple_impl (220,721 samples, 0.02%)</title><rect x="666.3" y="357" width="0.2" height="15.0" fill="rgb(207,10,2)" rx="2" ry="2" />
+<text  x="669.34" y="367.5" ></text>
+</g>
+<g >
+<title>std::function&lt;void  (2,496,720 samples, 0.26%)</title><rect x="438.9" y="517" width="2.0" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="441.93" y="527.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt;::_M_range_check (228,068 samples, 0.02%)</title><rect x="210.3" y="469" width="0.1" height="15.0" fill="rgb(248,198,47)" rx="2" ry="2" />
+<text  x="213.26" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt;::~Ptr (816,661 samples, 0.08%)</title><rect x="166.1" y="453" width="0.7" height="15.0" fill="rgb(205,3,0)" rx="2" ry="2" />
+<text  x="169.13" y="463.5" ></text>
+</g>
+<g >
+<title>std::map&lt;ns3::Scheduler::EventKey, ns3::EventImpl*, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::lower_bound (2,631,944 samples, 0.27%)</title><rect x="273.3" y="469" width="2.2" height="15.0" fill="rgb(238,153,36)" rx="2" ry="2" />
+<text  x="276.34" y="479.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;unsigned short*, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;::__normal_iterator (153,496 samples, 0.02%)</title><rect x="218.1" y="437" width="0.2" height="15.0" fill="rgb(213,38,9)" rx="2" ry="2" />
+<text  x="221.13" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::TagBuffer::ReadU16 (721,482 samples, 0.07%)</title><rect x="490.1" y="501" width="0.6" height="15.0" fill="rgb(239,157,37)" rx="2" ry="2" />
+<text  x="493.10" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Buffer::~Buffer (1,257,420 samples, 0.13%)</title><rect x="545.7" y="117" width="1.0" height="15.0" fill="rgb(240,162,38)" rx="2" ry="2" />
+<text  x="548.71" y="127.5" ></text>
+</g>
+<g >
+<title>ns3::LteRlcSm::DoReceivePdu (5,629,506 samples, 0.58%)</title><rect x="424.3" y="277" width="4.5" height="15.0" fill="rgb(239,160,38)" rx="2" ry="2" />
+<text  x="427.27" y="287.5" ></text>
+</g>
+<g >
+<title>void std::_Construct&lt;ns3::HigherLayerSelected_s, ns3::HigherLayerSelected_s const&amp;&gt; (241,929 samples, 0.02%)</title><rect x="593.4" y="181" width="0.2" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="596.38" y="191.5" ></text>
+</g>
+<g >
+<title>double* std::__uninitialized_default_n&lt;double*, unsigned long&gt; (152,182 samples, 0.02%)</title><rect x="112.0" y="389" width="0.1" height="15.0" fill="rgb(231,123,29)" rx="2" ry="2" />
+<text  x="115.02" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::Buffer::Create (1,901,878 samples, 0.20%)</title><rect x="31.2" y="357" width="1.5" height="15.0" fill="rgb(242,174,41)" rx="2" ry="2" />
+<text  x="34.17" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultSimulatorImpl::ScheduleWithContext (6,714,863 samples, 0.69%)</title><rect x="660.6" y="485" width="5.4" height="15.0" fill="rgb(253,222,53)" rx="2" ry="2" />
+<text  x="663.58" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s* std::__copy_move_a&lt;false, ns3::DlInfoListElement_s*, ns3::DlInfoListElement_s*&gt; (394,051 samples, 0.04%)</title><rect x="206.9" y="453" width="0.4" height="15.0" fill="rgb(254,228,54)" rx="2" ry="2" />
+<text  x="209.94" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;int, std::allocator&lt;int&gt; &gt;::_Vector_impl_data::_M_copy_data (368,766 samples, 0.04%)</title><rect x="594.4" y="245" width="0.3" height="15.0" fill="rgb(206,6,1)" rx="2" ry="2" />
+<text  x="597.43" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::CqiListElement_s* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::CqiListElement_s*, std::vector&lt;ns3::CqiListElement_s, std::allocator&lt;ns3::CqiListElement_s&gt; &gt; &gt;, ns3::CqiListElement_s*&gt; (3,635,299 samples, 0.37%)</title><rect x="124.4" y="469" width="3.0" height="15.0" fill="rgb(240,163,38)" rx="2" ry="2" />
+<text  x="127.44" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_Auto_node::_Auto_node&lt;std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (403,625 samples, 0.04%)</title><rect x="706.4" y="405" width="0.4" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="709.45" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapProvider::ReportBufferStatusParameters&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider::ReportBufferStatusParameters&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider::ReportBufferStatusParameters&gt; &gt; &gt;::_M_lower_bound (904,347 samples, 0.09%)</title><rect x="570.2" y="293" width="0.8" height="15.0" fill="rgb(206,8,2)" rx="2" ry="2" />
+<text  x="573.24" y="303.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned short const, double&gt; &gt;::_M_addr (198,698 samples, 0.02%)</title><rect x="292.6" y="469" width="0.2" height="15.0" fill="rgb(215,46,11)" rx="2" ry="2" />
+<text  x="295.62" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::~PacketBurst (269,240 samples, 0.03%)</title><rect x="120.0" y="325" width="0.2" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="122.96" y="335.5" ></text>
+</g>
+<g >
+<title>unsigned short* std::__uninitialized_copy&lt;true&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;unsigned short const*, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, unsigned short*&gt; (534,449 samples, 0.06%)</title><rect x="521.1" y="293" width="0.4" height="15.0" fill="rgb(217,57,13)" rx="2" ry="2" />
+<text  x="524.06" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::Angles::Angles (388,419 samples, 0.04%)</title><rect x="113.2" y="485" width="0.3" height="15.0" fill="rgb(254,226,54)" rx="2" ry="2" />
+<text  x="116.18" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::at (431,395 samples, 0.04%)</title><rect x="488.0" y="501" width="0.3" height="15.0" fill="rgb(220,69,16)" rx="2" ry="2" />
+<text  x="490.98" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Time::GetMilliSeconds (240,705 samples, 0.02%)</title><rect x="391.2" y="549" width="0.2" height="15.0" fill="rgb(250,207,49)" rx="2" ry="2" />
+<text  x="394.21" y="559.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::SbMeasResult_s&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::SbMeasResult_s&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::SbMeasResult_s&gt; &gt; &gt;::_S_key (240,787 samples, 0.02%)</title><rect x="185.6" y="437" width="0.2" height="15.0" fill="rgb(224,88,21)" rx="2" ry="2" />
+<text  x="188.61" y="447.5" ></text>
+</g>
+<g >
+<title>std::_List_const_iterator&lt;ns3::Callback&lt;void, unsigned short, unsigned short, double&gt; &gt;::_List_const_iterator (194,040 samples, 0.02%)</title><rect x="682.2" y="501" width="0.2" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="685.20" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_Auto_node::_M_key (311,517 samples, 0.03%)</title><rect x="271.9" y="437" width="0.2" height="15.0" fill="rgb(208,14,3)" rx="2" ry="2" />
+<text  x="274.86" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;2ul, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::_Tuple_impl&lt;double&amp;, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;&amp;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;&amp;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;&amp;, void&gt; (163,911 samples, 0.02%)</title><rect x="87.5" y="389" width="0.1" height="15.0" fill="rgb(240,161,38)" rx="2" ry="2" />
+<text  x="90.46" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::PhichListElement_s, std::allocator&lt;ns3::PhichListElement_s&gt; &gt;::~_Vector_base (153,471 samples, 0.02%)</title><rect x="229.3" y="437" width="0.1" height="15.0" fill="rgb(245,188,45)" rx="2" ry="2" />
+<text  x="232.30" y="447.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, ns3::SbMeasResult_s, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::SbMeasResult_s&gt; &gt; &gt;::end (191,621 samples, 0.02%)</title><rect x="185.2" y="485" width="0.2" height="15.0" fill="rgb(226,100,24)" rx="2" ry="2" />
+<text  x="188.24" y="495.5" ></text>
+</g>
+<g >
+<title>bool __gnu_cxx::operator==&lt;ns3::ByteTagListData* const*, std::vector&lt;ns3::ByteTagListData*, std::allocator&lt;ns3::ByteTagListData*&gt; &gt; &gt; (160,543 samples, 0.02%)</title><rect x="554.1" y="197" width="0.1" height="15.0" fill="rgb(241,169,40)" rx="2" ry="2" />
+<text  x="557.05" y="207.5" ></text>
+</g>
+<g >
+<title>ns3::PfFfMacScheduler::DoSchedDlCqiInfoReq (4,461,995 samples, 0.46%)</title><rect x="134.3" y="501" width="3.6" height="15.0" fill="rgb(242,173,41)" rx="2" ry="2" />
+<text  x="137.31" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::TbId_t, std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::_Select1st&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::_M_get_insert_unique_pos (403,662 samples, 0.04%)</title><rect x="528.3" y="277" width="0.3" height="15.0" fill="rgb(240,162,38)" rx="2" ry="2" />
+<text  x="531.31" y="287.5" ></text>
+</g>
+<g >
+<title>decltype  (351,931 samples, 0.04%)</title><rect x="658.8" y="405" width="0.3" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="661.79" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::RlcTag::GetTypeId (126,373 samples, 0.01%)</title><rect x="555.0" y="229" width="0.1" height="15.0" fill="rgb(252,216,51)" rx="2" ry="2" />
+<text  x="557.97" y="239.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;int, std::allocator&lt;int&gt; &gt;::_Vector_base (576,261 samples, 0.06%)</title><rect x="574.3" y="341" width="0.5" height="15.0" fill="rgb(215,47,11)" rx="2" ry="2" />
+<text  x="577.32" y="351.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt;::deallocate (158,232 samples, 0.02%)</title><rect x="501.2" y="501" width="0.1" height="15.0" fill="rgb(242,171,41)" rx="2" ry="2" />
+<text  x="504.20" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumSignalParametersDataFrame::LteSpectrumSignalParametersDataFrame (6,515,982 samples, 0.67%)</title><rect x="67.6" y="485" width="5.2" height="15.0" fill="rgb(206,8,1)" rx="2" ry="2" />
+<text  x="70.61" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt; &gt;::_M_valptr (233,529 samples, 0.02%)</title><rect x="170.4" y="389" width="0.2" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="173.40" y="399.5" ></text>
+</g>
+<g >
+<title>__libc_start_main (2,105,662 samples, 0.22%)</title><rect x="15.5" y="821" width="1.6" height="15.0" fill="rgb(236,142,34)" rx="2" ry="2" />
+<text  x="18.45" y="831.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::vector (712,112 samples, 0.07%)</title><rect x="718.4" y="453" width="0.5" height="15.0" fill="rgb(239,156,37)" rx="2" ry="2" />
+<text  x="721.35" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumSignalParametersDlCtrlFrame::~LteSpectrumSignalParametersDlCtrlFrame (656,172 samples, 0.07%)</title><rect x="775.9" y="405" width="0.5" height="15.0" fill="rgb(220,69,16)" rx="2" ry="2" />
+<text  x="778.88" y="415.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_M_check_len (226,478 samples, 0.02%)</title><rect x="459.7" y="245" width="0.2" height="15.0" fill="rgb(220,70,16)" rx="2" ry="2" />
+<text  x="462.70" y="255.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::DlInfoListElement_s*, std::vector&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt; &gt; std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;ns3::DlInfoListElement_s const*, std::vector&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;ns3::DlInfoListElement_s*, std::vector&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt; &gt; &gt; (293,879 samples, 0.03%)</title><rect x="206.2" y="453" width="0.2" height="15.0" fill="rgb(211,29,6)" rx="2" ry="2" />
+<text  x="209.19" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::PfFfMacScheduler::DoSchedDlTriggerReq (102,241,082 samples, 10.54%)</title><rect x="137.9" y="501" width="82.3" height="15.0" fill="rgb(214,45,10)" rx="2" ry="2" />
+<text  x="140.93" y="511.5" >ns3::PfFf..</text>
+</g>
+<g >
+<title>ns3::Simulator::ScheduleWithContext (179,532 samples, 0.02%)</title><rect x="614.1" y="501" width="0.2" height="15.0" fill="rgb(230,116,27)" rx="2" ry="2" />
+<text  x="617.14" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::_M_deallocate (126,977 samples, 0.01%)</title><rect x="521.8" y="309" width="0.1" height="15.0" fill="rgb(221,77,18)" rx="2" ry="2" />
+<text  x="524.75" y="319.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::back (197,417 samples, 0.02%)</title><rect x="610.9" y="501" width="0.1" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="613.89" y="511.5" ></text>
+</g>
+<g >
+<title> (309,905 samples, 0.03%)</title><rect x="652.2" y="501" width="0.2" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="655.18" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultSimulatorImpl::ProcessEventsWithContext (229,456 samples, 0.02%)</title><rect x="37.8" y="725" width="0.2" height="15.0" fill="rgb(243,179,42)" rx="2" ry="2" />
+<text  x="40.82" y="735.5" ></text>
+</g>
+<g >
+<title>ns3::ByteTagList::ByteTagList (194,885 samples, 0.02%)</title><rect x="624.5" y="485" width="0.2" height="15.0" fill="rgb(220,69,16)" rx="2" ry="2" />
+<text  x="627.53" y="495.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, unsigned char*&gt; (356,896 samples, 0.04%)</title><rect x="442.3" y="277" width="0.3" height="15.0" fill="rgb(227,104,25)" rx="2" ry="2" />
+<text  x="445.31" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::LteRlcSpecificLteMacSapUser::NotifyTxOpportunity (19,853,193 samples, 2.05%)</title><rect x="551.5" y="293" width="16.0" height="15.0" fill="rgb(249,204,48)" rx="2" ry="2" />
+<text  x="554.49" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::ConstValuesEnd (330,602 samples, 0.03%)</title><rect x="589.5" y="277" width="0.3" height="15.0" fill="rgb(210,25,6)" rx="2" ry="2" />
+<text  x="592.55" y="287.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::_Vector_base (189,435 samples, 0.02%)</title><rect x="203.5" y="373" width="0.2" height="15.0" fill="rgb(219,65,15)" rx="2" ry="2" />
+<text  x="206.51" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::TypeId::SetUid (156,879 samples, 0.02%)</title><rect x="436.5" y="213" width="0.1" height="15.0" fill="rgb(252,219,52)" rx="2" ry="2" />
+<text  x="439.46" y="223.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt;::_M_valptr (265,616 samples, 0.03%)</title><rect x="178.2" y="453" width="0.2" height="15.0" fill="rgb(249,206,49)" rx="2" ry="2" />
+<text  x="181.20" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Object::Object (1,324,951 samples, 0.14%)</title><rect x="446.3" y="277" width="1.0" height="15.0" fill="rgb(242,174,41)" rx="2" ry="2" />
+<text  x="449.26" y="287.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Ptr&lt;ns3::Object&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Object&gt; &gt; &gt;::clear (272,736 samples, 0.03%)</title><rect x="379.4" y="309" width="0.2" height="15.0" fill="rgb(241,167,40)" rx="2" ry="2" />
+<text  x="382.42" y="319.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::__uninitialized_copy&lt;true&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, unsigned char*&gt; (360,886 samples, 0.04%)</title><rect x="519.3" y="293" width="0.3" height="15.0" fill="rgb(233,129,30)" rx="2" ry="2" />
+<text  x="522.28" y="303.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::_M_put_node (124,434 samples, 0.01%)</title><rect x="545.2" y="213" width="0.1" height="15.0" fill="rgb(251,213,51)" rx="2" ry="2" />
+<text  x="548.24" y="223.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;double&gt;::deallocate (237,323 samples, 0.02%)</title><rect x="233.3" y="245" width="0.2" height="15.0" fill="rgb(250,208,49)" rx="2" ry="2" />
+<text  x="236.30" y="255.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::Ptr&lt;ns3::UeManager&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::Ptr&lt;ns3::UeManager&gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::Ptr&lt;ns3::UeManager&gt; &gt; &gt; &gt;::find (1,377,498 samples, 0.14%)</title><rect x="28.1" y="325" width="1.1" height="15.0" fill="rgb(248,199,47)" rx="2" ry="2" />
+<text  x="31.09" y="335.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt; &gt;::_S_key (613,816 samples, 0.06%)</title><rect x="650.3" y="453" width="0.5" height="15.0" fill="rgb(238,153,36)" rx="2" ry="2" />
+<text  x="653.31" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::CqiListElement_s* std::__do_uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::CqiListElement_s*, std::vector&lt;ns3::CqiListElement_s, std::allocator&lt;ns3::CqiListElement_s&gt; &gt; &gt;, ns3::CqiListElement_s*&gt; (1,085,784 samples, 0.11%)</title><rect x="92.1" y="421" width="0.8" height="15.0" fill="rgb(253,224,53)" rx="2" ry="2" />
+<text  x="95.06" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::RlcTag::Serialize (343,838 samples, 0.04%)</title><rect x="13.9" y="389" width="0.2" height="15.0" fill="rgb(233,133,31)" rx="2" ry="2" />
+<text  x="16.86" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, ns3::SbMeasResult_s&gt; &gt;::_M_valptr (240,787 samples, 0.02%)</title><rect x="185.6" y="421" width="0.2" height="15.0" fill="rgb(251,213,51)" rx="2" ry="2" />
+<text  x="188.61" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_Auto_node::_M_key (128,223 samples, 0.01%)</title><rect x="82.2" y="469" width="0.1" height="15.0" fill="rgb(238,154,36)" rx="2" ry="2" />
+<text  x="85.22" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt;::~_Vector_base (242,999 samples, 0.03%)</title><rect x="473.3" y="277" width="0.2" height="15.0" fill="rgb(253,220,52)" rx="2" ry="2" />
+<text  x="476.29" y="287.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt;::find (964,623 samples, 0.10%)</title><rect x="432.0" y="309" width="0.8" height="15.0" fill="rgb(219,68,16)" rx="2" ry="2" />
+<text  x="435.01" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::int64x64_t::GetDouble (246,625 samples, 0.03%)</title><rect x="605.9" y="485" width="0.2" height="15.0" fill="rgb(230,116,27)" rx="2" ry="2" />
+<text  x="608.93" y="495.5" ></text>
+</g>
+<g >
+<title>std::function&lt;void  (282,732 samples, 0.03%)</title><rect x="64.7" y="437" width="0.2" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="67.70" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::Packet, ns3::Empty, ns3::DefaultDeleter&lt;ns3::Packet&gt; &gt;::Unref (2,803,402 samples, 0.29%)</title><rect x="451.6" y="149" width="2.3" height="15.0" fill="rgb(215,47,11)" rx="2" ry="2" />
+<text  x="454.64" y="159.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt;::_M_allocate (238,842 samples, 0.02%)</title><rect x="476.4" y="261" width="0.2" height="15.0" fill="rgb(217,59,14)" rx="2" ry="2" />
+<text  x="479.41" y="271.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt;, std::allocator&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt;::_M_ptr (201,235 samples, 0.02%)</title><rect x="188.5" y="405" width="0.2" height="15.0" fill="rgb(252,218,52)" rx="2" ry="2" />
+<text  x="191.50" y="415.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt;, std::allocator&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt; &gt; &gt;::at (311,692 samples, 0.03%)</title><rect x="213.2" y="485" width="0.3" height="15.0" fill="rgb(234,135,32)" rx="2" ry="2" />
+<text  x="216.22" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::DlDciLteControlMessage::SetDci (501,657 samples, 0.05%)</title><rect x="147.9" y="453" width="0.4" height="15.0" fill="rgb(209,18,4)" rx="2" ry="2" />
+<text  x="150.88" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::operator*= (412,379 samples, 0.04%)</title><rect x="493.2" y="549" width="0.4" height="15.0" fill="rgb(222,79,18)" rx="2" ry="2" />
+<text  x="496.24" y="559.5" ></text>
+</g>
+<g >
+<title>std::_Head_base&lt;1ul, ns3::Ptr&lt;ns3::SpectrumValue&gt;, false&gt;::_M_head (146,531 samples, 0.02%)</title><rect x="755.4" y="549" width="0.1" height="15.0" fill="rgb(223,83,20)" rx="2" ry="2" />
+<text  x="758.37" y="559.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::~list (466,245 samples, 0.05%)</title><rect x="776.0" y="389" width="0.4" height="15.0" fill="rgb(222,80,19)" rx="2" ry="2" />
+<text  x="779.03" y="399.5" ></text>
+</g>
+<g >
+<title>decltype  (127,066 samples, 0.01%)</title><rect x="88.3" y="341" width="0.1" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="91.28" y="351.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;::_M_valptr (128,223 samples, 0.01%)</title><rect x="82.2" y="437" width="0.1" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="85.22" y="447.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__promote_2&lt;decltype  (555,396 samples, 0.06%)</title><rect x="486.1" y="533" width="0.4" height="15.0" fill="rgb(250,209,50)" rx="2" ry="2" />
+<text  x="489.06" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter&gt;::Unref (384,276 samples, 0.04%)</title><rect x="119.9" y="389" width="0.3" height="15.0" fill="rgb(221,78,18)" rx="2" ry="2" />
+<text  x="122.86" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;::get_allocator (277,666 samples, 0.03%)</title><rect x="350.4" y="389" width="0.3" height="15.0" fill="rgb(241,169,40)" rx="2" ry="2" />
+<text  x="353.45" y="399.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::~list (159,855 samples, 0.02%)</title><rect x="722.4" y="501" width="0.1" height="15.0" fill="rgb(222,80,19)" rx="2" ry="2" />
+<text  x="725.39" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::TracedCallback&lt;ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt; &gt;::operator (618,076 samples, 0.06%)</title><rect x="79.9" y="517" width="0.5" height="15.0" fill="rgb(228,106,25)" rx="2" ry="2" />
+<text  x="82.92" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::NoOpComponentCarrierManager::DoReportBufferStatus (1,019,985 samples, 0.11%)</title><rect x="17.9" y="373" width="0.8" height="15.0" fill="rgb(230,119,28)" rx="2" ry="2" />
+<text  x="20.88" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::~PacketBurst (2,253,374 samples, 0.23%)</title><rect x="549.2" y="245" width="1.8" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="552.20" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::LogComponent::IsEnabled (152,096 samples, 0.02%)</title><rect x="642.9" y="501" width="0.1" height="15.0" fill="rgb(214,43,10)" rx="2" ry="2" />
+<text  x="645.91" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt; &gt;::find (1,373,897 samples, 0.14%)</title><rect x="179.8" y="453" width="1.1" height="15.0" fill="rgb(214,44,10)" rx="2" ry="2" />
+<text  x="182.83" y="463.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt;::find (224,964 samples, 0.02%)</title><rect x="97.3" y="437" width="0.2" height="15.0" fill="rgb(228,106,25)" rx="2" ry="2" />
+<text  x="100.35" y="447.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::ByteTagListData*, std::allocator&lt;ns3::ByteTagListData*&gt; &gt;::end (167,215 samples, 0.02%)</title><rect x="554.2" y="197" width="0.1" height="15.0" fill="rgb(238,154,36)" rx="2" ry="2" />
+<text  x="557.22" y="207.5" ></text>
+</g>
+<g >
+<title>int* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;int const*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt;, int*&gt; (268,424 samples, 0.03%)</title><rect x="91.1" y="517" width="0.2" height="15.0" fill="rgb(251,216,51)" rx="2" ry="2" />
+<text  x="94.12" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteUeMac::LcInfo&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteUeMac::LcInfo&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteUeMac::LcInfo&gt; &gt; &gt;::_M_lower_bound (893,620 samples, 0.09%)</title><rect x="437.8" y="293" width="0.7" height="15.0" fill="rgb(237,148,35)" rx="2" ry="2" />
+<text  x="440.80" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::DlDciLteControlMessage&gt;::Ptr (301,451 samples, 0.03%)</title><rect x="388.2" y="533" width="0.3" height="15.0" fill="rgb(228,108,26)" rx="2" ry="2" />
+<text  x="391.24" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt; &gt;::operator (160,344 samples, 0.02%)</title><rect x="431.8" y="325" width="0.1" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="434.79" y="335.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;* std::__copy_move&lt;true, false, std::random_access_iterator_tag&gt;::__copy_m&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;*, std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;*&gt; (154,567 samples, 0.02%)</title><rect x="117.8" y="421" width="0.1" height="15.0" fill="rgb(209,21,5)" rx="2" ry="2" />
+<text  x="120.78" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::ByteTagList::Add (1,876,916 samples, 0.19%)</title><rect x="29.5" y="405" width="1.5" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="32.50" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::DlInfoListElement_s const*, std::vector&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt; &gt;, ns3::DlInfoListElement_s*&gt; (411,592 samples, 0.04%)</title><rect x="107.3" y="453" width="0.3" height="15.0" fill="rgb(254,227,54)" rx="2" ry="2" />
+<text  x="110.29" y="463.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;is_invocable_r_v&lt;void, void  (324,769 samples, 0.03%)</title><rect x="611.9" y="373" width="0.3" height="15.0" fill="rgb(243,178,42)" rx="2" ry="2" />
+<text  x="614.94" y="383.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::vector (276,695 samples, 0.03%)</title><rect x="71.7" y="405" width="0.2" height="15.0" fill="rgb(239,156,37)" rx="2" ry="2" />
+<text  x="74.69" y="415.5" ></text>
+</g>
+<g >
+<title>int const* std::__niter_base&lt;int const*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt; (149,777 samples, 0.02%)</title><rect x="399.1" y="453" width="0.1" height="15.0" fill="rgb(218,62,14)" rx="2" ry="2" />
+<text  x="402.06" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::EventImpl, ns3::Empty, ns3::DefaultDeleter&lt;ns3::EventImpl&gt; &gt;::Unref (635,403 samples, 0.07%)</title><rect x="308.1" y="485" width="0.5" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="311.07" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned int const, ns3::RxSpectrumModelInfo&gt; &gt;::_Rb_tree_iterator (128,201 samples, 0.01%)</title><rect x="80.9" y="485" width="0.1" height="15.0" fill="rgb(243,175,42)" rx="2" ry="2" />
+<text  x="83.93" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleUeComponentCarrierManager::DoNotifyTxOpportunity (21,809,279 samples, 2.25%)</title><rect x="551.2" y="309" width="17.6" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="554.22" y="319.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;std::_Rb_tree_node_base*, std::_Rb_tree_node_base*&gt;::pair (186,508 samples, 0.02%)</title><rect x="243.7" y="437" width="0.1" height="15.0" fill="rgb(221,76,18)" rx="2" ry="2" />
+<text  x="246.67" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Head_base&lt;1ul, ns3::Ptr&lt;ns3::SpectrumValue const&gt;, false&gt;::_M_head (163,671 samples, 0.02%)</title><rect x="754.6" y="549" width="0.2" height="15.0" fill="rgb(207,9,2)" rx="2" ry="2" />
+<text  x="757.64" y="559.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt; &gt;::destroy&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; (1,015,028 samples, 0.10%)</title><rect x="505.5" y="469" width="0.8" height="15.0" fill="rgb(209,18,4)" rx="2" ry="2" />
+<text  x="508.46" y="479.5" ></text>
+</g>
+<g >
+<title>std::function&lt;void  (891,744,980 samples, 91.95%)</title><rect x="41.0" y="693" width="717.2" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="43.97" y="703.5" >std::function&lt;void </text>
+</g>
+<g >
+<title>ns3::HarqProcessInfoElement_t* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::HarqProcessInfoElement_t const*, std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt;, ns3::HarqProcessInfoElement_t*&gt; (1,522,938 samples, 0.16%)</title><rect x="512.4" y="517" width="1.3" height="15.0" fill="rgb(233,131,31)" rx="2" ry="2" />
+<text  x="515.43" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Function_handler&lt;void  (2,105,662 samples, 0.22%)</title><rect x="15.5" y="677" width="1.6" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="18.45" y="687.5" ></text>
+</g>
+<g >
+<title>std::less&lt;unsigned short&gt;::operator (232,709 samples, 0.02%)</title><rect x="136.5" y="437" width="0.2" height="15.0" fill="rgb(207,11,2)" rx="2" ry="2" />
+<text  x="139.50" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;3ul, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::~_Tuple_impl (297,048 samples, 0.03%)</title><rect x="666.3" y="389" width="0.2" height="15.0" fill="rgb(254,225,53)" rx="2" ry="2" />
+<text  x="669.27" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::~PacketBurst (460,732 samples, 0.05%)</title><rect x="166.4" y="389" width="0.4" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="169.42" y="399.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::lower_bound (455,631 samples, 0.05%)</title><rect x="192.6" y="469" width="0.4" height="15.0" fill="rgb(218,61,14)" rx="2" ry="2" />
+<text  x="195.63" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt; &gt; &gt;::find (198,041 samples, 0.02%)</title><rect x="104.3" y="453" width="0.2" height="15.0" fill="rgb(222,81,19)" rx="2" ry="2" />
+<text  x="107.29" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::EventImpl&gt;::Ptr (124,898 samples, 0.01%)</title><rect x="706.2" y="453" width="0.1" height="15.0" fill="rgb(239,157,37)" rx="2" ry="2" />
+<text  x="709.19" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Buffer::Buffer (535,246 samples, 0.06%)</title><rect x="14.1" y="373" width="0.5" height="15.0" fill="rgb(254,226,54)" rx="2" ry="2" />
+<text  x="17.13" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;ns3::UlDciListElement_s, std::allocator&lt;ns3::UlDciListElement_s&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;ns3::UlDciListElement_s, std::allocator&lt;ns3::UlDciListElement_s&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;ns3::UlDciListElement_s, std::allocator&lt;ns3::UlDciListElement_s&gt; &gt; &gt; &gt; &gt;::_M_lower_bound (347,387 samples, 0.04%)</title><rect x="241.2" y="453" width="0.3" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="244.25" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::TbId_t, std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::_Select1st&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::clear (2,200,745 samples, 0.23%)</title><rect x="505.0" y="533" width="1.8" height="15.0" fill="rgb(207,9,2)" rx="2" ry="2" />
+<text  x="508.05" y="543.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::end (186,424 samples, 0.02%)</title><rect x="397.0" y="533" width="0.1" height="15.0" fill="rgb(214,44,10)" rx="2" ry="2" />
+<text  x="399.97" y="543.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt;::_M_check_len (162,250 samples, 0.02%)</title><rect x="595.1" y="261" width="0.2" height="15.0" fill="rgb(211,30,7)" rx="2" ry="2" />
+<text  x="598.12" y="271.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::PhichListElement_s*&gt; (154,556 samples, 0.02%)</title><rect x="229.4" y="421" width="0.1" height="15.0" fill="rgb(232,126,30)" rx="2" ry="2" />
+<text  x="232.42" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::Object::DoDelete (4,921,016 samples, 0.51%)</title><rect x="377.4" y="373" width="4.0" height="15.0" fill="rgb(212,34,8)" rx="2" ry="2" />
+<text  x="380.45" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumPhy::SetTxPowerSpectralDensity (252,668 samples, 0.03%)</title><rect x="61.3" y="533" width="0.2" height="15.0" fill="rgb(208,14,3)" rx="2" ry="2" />
+<text  x="64.27" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::operator&lt; (151,762 samples, 0.02%)</title><rect x="676.4" y="421" width="0.1" height="15.0" fill="rgb(234,137,32)" rx="2" ry="2" />
+<text  x="679.36" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter&gt;::SimpleRefCount (283,524 samples, 0.03%)</title><rect x="446.6" y="261" width="0.3" height="15.0" fill="rgb(230,117,28)" rx="2" ry="2" />
+<text  x="449.64" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::MapScheduler::RemoveNext (12,466,528 samples, 1.29%)</title><rect x="758.3" y="725" width="10.1" height="15.0" fill="rgb(247,194,46)" rx="2" ry="2" />
+<text  x="761.34" y="735.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;double&gt; &gt;::deallocate (276,642 samples, 0.03%)</title><rect x="233.3" y="277" width="0.2" height="15.0" fill="rgb(236,143,34)" rx="2" ry="2" />
+<text  x="236.27" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::TimeStep (151,604 samples, 0.02%)</title><rect x="665.2" y="469" width="0.1" height="15.0" fill="rgb(242,171,41)" rx="2" ry="2" />
+<text  x="668.20" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Packet::Copy (1,194,409 samples, 0.12%)</title><rect x="67.8" y="453" width="1.0" height="15.0" fill="rgb(250,211,50)" rx="2" ry="2" />
+<text  x="70.80" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_Rb_tree (155,456 samples, 0.02%)</title><rect x="341.2" y="453" width="0.2" height="15.0" fill="rgb(252,219,52)" rx="2" ry="2" />
+<text  x="344.24" y="463.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;unsigned short*, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;::base (158,533 samples, 0.02%)</title><rect x="218.5" y="421" width="0.1" height="15.0" fill="rgb(237,151,36)" rx="2" ry="2" />
+<text  x="221.50" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::EventImpl, ns3::Empty, ns3::DefaultDeleter&lt;ns3::EventImpl&gt; &gt;::Unref (565,943 samples, 0.06%)</title><rect x="727.4" y="485" width="0.4" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="730.39" y="495.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::HigherLayerSelected_s*, std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt; &gt; std::__niter_wrap&lt;__gnu_cxx::__normal_iterator&lt;ns3::HigherLayerSelected_s*, std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt; &gt;, ns3::HigherLayerSelected_s*&gt; (126,370 samples, 0.01%)</title><rect x="585.7" y="197" width="0.1" height="15.0" fill="rgb(212,36,8)" rx="2" ry="2" />
+<text  x="588.72" y="207.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt;::_M_create_storage (403,537 samples, 0.04%)</title><rect x="444.8" y="293" width="0.3" height="15.0" fill="rgb(206,4,1)" rx="2" ry="2" />
+<text  x="447.78" y="303.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Buffer::Data*, std::allocator&lt;ns3::Buffer::Data*&gt; &gt;::size (288,898 samples, 0.03%)</title><rect x="546.4" y="85" width="0.2" height="15.0" fill="rgb(221,74,17)" rx="2" ry="2" />
+<text  x="549.38" y="95.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::TbId_t, std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::_Select1st&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::_M_get_insert_unique_pos (357,360 samples, 0.04%)</title><rect x="385.9" y="469" width="0.3" height="15.0" fill="rgb(240,162,38)" rx="2" ry="2" />
+<text  x="388.90" y="479.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt;::find (562,566 samples, 0.06%)</title><rect x="437.0" y="293" width="0.5" height="15.0" fill="rgb(228,106,25)" rx="2" ry="2" />
+<text  x="440.02" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::HarqProcessInfoElement_t* std::copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::HarqProcessInfoElement_t const*, std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt;, ns3::HarqProcessInfoElement_t*&gt; (447,796 samples, 0.05%)</title><rect x="525.0" y="277" width="0.3" height="15.0" fill="rgb(247,195,46)" rx="2" ry="2" />
+<text  x="527.98" y="287.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::TbId_t, std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::_Select1st&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::_M_insert_node (194,473 samples, 0.02%)</title><rect x="527.8" y="277" width="0.2" height="15.0" fill="rgb(225,92,22)" rx="2" ry="2" />
+<text  x="530.80" y="287.5" ></text>
+</g>
+<g >
+<title>void std::destroy_at&lt;ns3::CqiListElement_s&gt; (154,796 samples, 0.02%)</title><rect x="131.1" y="421" width="0.1" height="15.0" fill="rgb(208,15,3)" rx="2" ry="2" />
+<text  x="134.12" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt;::_Vector_base (443,709 samples, 0.05%)</title><rect x="476.3" y="293" width="0.4" height="15.0" fill="rgb(216,55,13)" rx="2" ry="2" />
+<text  x="479.31" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::Object::DoDelete (8,154,602 samples, 0.84%)</title><rect x="544.6" y="277" width="6.5" height="15.0" fill="rgb(212,34,8)" rx="2" ry="2" />
+<text  x="547.56" y="287.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;std::_Rb_tree_node_base*, std::_Rb_tree_node_base*&gt;::pair&lt;std::_Rb_tree_node&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;*&amp;, std::_Rb_tree_node_base*&amp;&gt; (331,552 samples, 0.03%)</title><rect x="528.4" y="261" width="0.2" height="15.0" fill="rgb(207,9,2)" rx="2" ry="2" />
+<text  x="531.37" y="271.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, std::vector&lt;ns3::DlDciListElement_s, std::allocator&lt;ns3::DlDciListElement_s&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;ns3::DlDciListElement_s, std::allocator&lt;ns3::DlDciListElement_s&gt; &gt; &gt; &gt; &gt;::find (184,813 samples, 0.02%)</title><rect x="99.1" y="469" width="0.1" height="15.0" fill="rgb(241,166,39)" rx="2" ry="2" />
+<text  x="102.05" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::HigherLayerSelected_s* std::__copy_move_a2&lt;false, ns3::HigherLayerSelected_s const*, ns3::HigherLayerSelected_s*&gt; (193,644 samples, 0.02%)</title><rect x="134.9" y="405" width="0.1" height="15.0" fill="rgb(221,75,17)" rx="2" ry="2" />
+<text  x="137.86" y="415.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;::_M_put_node (199,431 samples, 0.02%)</title><rect x="393.5" y="501" width="0.1" height="15.0" fill="rgb(230,118,28)" rx="2" ry="2" />
+<text  x="396.47" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, unsigned int&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt; &gt;::begin (148,580 samples, 0.02%)</title><rect x="178.6" y="453" width="0.1" height="15.0" fill="rgb(218,62,14)" rx="2" ry="2" />
+<text  x="181.56" y="463.5" ></text>
+</g>
+<g >
+<title>[libc.so.6] (270,636 samples, 0.03%)</title><rect x="239.6" y="149" width="0.2" height="15.0" fill="rgb(223,84,20)" rx="2" ry="2" />
+<text  x="242.59" y="159.5" ></text>
+</g>
+<g >
+<title>ns3::MapScheduler::Insert (407,207 samples, 0.04%)</title><rect x="115.9" y="437" width="0.4" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="118.94" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Packet&gt;::~Ptr (392,648 samples, 0.04%)</title><rect x="612.9" y="405" width="0.3" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="615.90" y="415.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;__gnu_cxx::__normal_iterator&lt;ns3::VendorSpecificListElement_s*, std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt; &gt; &gt; (317,071 samples, 0.03%)</title><rect x="26.4" y="261" width="0.3" height="15.0" fill="rgb(213,37,9)" rx="2" ry="2" />
+<text  x="29.42" y="271.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::BuildDataListElement_s, std::allocator&lt;ns3::BuildDataListElement_s&gt; &gt;::_M_create_storage (253,158 samples, 0.03%)</title><rect x="142.5" y="421" width="0.2" height="15.0" fill="rgb(221,77,18)" rx="2" ry="2" />
+<text  x="145.52" y="431.5" ></text>
+</g>
+<g >
+<title>std::function&lt;void  (495,402 samples, 0.05%)</title><rect x="340.8" y="453" width="0.4" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="343.78" y="463.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::operator= (155,136 samples, 0.02%)</title><rect x="116.7" y="501" width="0.1" height="15.0" fill="rgb(251,215,51)" rx="2" ry="2" />
+<text  x="119.66" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_M_allocate (266,378 samples, 0.03%)</title><rect x="300.6" y="405" width="0.2" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="303.60" y="415.5" ></text>
+</g>
+<g >
+<title>double* std::__uninitialized_copy&lt;true&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, double*&gt; (979,447 samples, 0.10%)</title><rect x="412.2" y="453" width="0.8" height="15.0" fill="rgb(238,153,36)" rx="2" ry="2" />
+<text  x="415.17" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumConverter::Convert (724,879 samples, 0.07%)</title><rect x="79.1" y="517" width="0.5" height="15.0" fill="rgb(223,86,20)" rx="2" ry="2" />
+<text  x="82.07" y="527.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::list&lt;std::_List_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;, void&gt; (1,329,282 samples, 0.14%)</title><rect x="721.3" y="501" width="1.0" height="15.0" fill="rgb(247,196,47)" rx="2" ry="2" />
+<text  x="724.27" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::LteChunkProcessor::End (22,516,339 samples, 2.32%)</title><rect x="467.2" y="533" width="18.1" height="15.0" fill="rgb(223,83,19)" rx="2" ry="2" />
+<text  x="470.18" y="543.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;ns3::BuildDataListElement_s&gt; &gt;::allocate (158,386 samples, 0.02%)</title><rect x="202.5" y="437" width="0.1" height="15.0" fill="rgb(228,106,25)" rx="2" ry="2" />
+<text  x="205.48" y="447.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::push_back (307,397 samples, 0.03%)</title><rect x="118.4" y="485" width="0.3" height="15.0" fill="rgb(222,79,18)" rx="2" ry="2" />
+<text  x="121.41" y="495.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, unsigned char*, unsigned char&gt; (685,962 samples, 0.07%)</title><rect x="687.7" y="453" width="0.5" height="15.0" fill="rgb(226,96,23)" rx="2" ry="2" />
+<text  x="690.70" y="463.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::back (161,548 samples, 0.02%)</title><rect x="620.4" y="485" width="0.1" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="623.39" y="495.5" ></text>
+</g>
+<g >
+<title>void std::__invoke_impl&lt;void, void  (14,431,856 samples, 1.49%)</title><rect x="472.2" y="357" width="11.6" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="475.17" y="367.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt;::_M_erase_at_end (1,267,352 samples, 0.13%)</title><rect x="255.9" y="501" width="1.0" height="15.0" fill="rgb(236,145,34)" rx="2" ry="2" />
+<text  x="258.92" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumModel const&gt;::Ptr&lt;ns3::SpectrumModel&gt; (555,656 samples, 0.06%)</title><rect x="298.8" y="469" width="0.5" height="15.0" fill="rgb(254,225,53)" rx="2" ry="2" />
+<text  x="301.84" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::SpectrumValue (869,023 samples, 0.09%)</title><rect x="606.4" y="501" width="0.7" height="15.0" fill="rgb(211,27,6)" rx="2" ry="2" />
+<text  x="609.39" y="511.5" ></text>
+</g>
+<g >
+<title>[ld-linux-x86-64.so.2] (155,299 samples, 0.02%)</title><rect x="35.5" y="757" width="0.2" height="15.0" fill="rgb(243,178,42)" rx="2" ry="2" />
+<text  x="38.54" y="767.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultSimulatorImpl::ScheduleWithContext (179,532 samples, 0.02%)</title><rect x="614.1" y="485" width="0.2" height="15.0" fill="rgb(253,222,53)" rx="2" ry="2" />
+<text  x="617.14" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;::vector (261,998 samples, 0.03%)</title><rect x="117.4" y="469" width="0.2" height="15.0" fill="rgb(249,203,48)" rx="2" ry="2" />
+<text  x="120.37" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_Auto_node::_M_key (191,540 samples, 0.02%)</title><rect x="661.8" y="405" width="0.2" height="15.0" fill="rgb(208,14,3)" rx="2" ry="2" />
+<text  x="664.83" y="415.5" ></text>
+</g>
+<g >
+<title>void std::__invoke_impl&lt;void, std::_Bind&lt;void  (22,443,594 samples, 2.31%)</title><rect x="17.2" y="677" width="18.0" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="20.17" y="687.5" ></text>
+</g>
+<g >
+<title>ns3::HarqProcessInfoElement_t* std::__uninitialized_copy&lt;true&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::HarqProcessInfoElement_t const*, std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt;, ns3::HarqProcessInfoElement_t*&gt; (185,369 samples, 0.02%)</title><rect x="117.4" y="421" width="0.1" height="15.0" fill="rgb(238,156,37)" rx="2" ry="2" />
+<text  x="120.37" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;int const, double&gt; &gt;* std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_M_copy&lt;false, std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_Alloc_node&gt; (294,404 samples, 0.03%)</title><rect x="60.1" y="421" width="0.3" height="15.0" fill="rgb(224,87,21)" rx="2" ry="2" />
+<text  x="63.14" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::CallbackImpl&lt;void, ns3::SpectrumValue const&amp;&gt;::operator (20,037,682 samples, 2.07%)</title><rect x="467.7" y="501" width="16.1" height="15.0" fill="rgb(219,64,15)" rx="2" ry="2" />
+<text  x="470.67" y="511.5" ></text>
+</g>
+<g >
+<title>unsigned short* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;unsigned short const*, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, unsigned short*, unsigned short&gt; (192,062 samples, 0.02%)</title><rect x="147.7" y="421" width="0.1" height="15.0" fill="rgb(217,56,13)" rx="2" ry="2" />
+<text  x="150.69" y="431.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::deallocate (164,554 samples, 0.02%)</title><rect x="777.0" y="325" width="0.1" height="15.0" fill="rgb(213,39,9)" rx="2" ry="2" />
+<text  x="779.97" y="335.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::operator= (1,223,540 samples, 0.13%)</title><rect x="216.9" y="485" width="1.0" height="15.0" fill="rgb(224,91,21)" rx="2" ry="2" />
+<text  x="219.93" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Buffer::Buffer (165,400 samples, 0.02%)</title><rect x="68.0" y="421" width="0.2" height="15.0" fill="rgb(254,226,54)" rx="2" ry="2" />
+<text  x="71.03" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::MobilityModel&gt;::Ptr (189,531 samples, 0.02%)</title><rect x="643.9" y="501" width="0.1" height="15.0" fill="rgb(213,37,8)" rx="2" ry="2" />
+<text  x="646.89" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::_M_get_Node_allocator (204,937 samples, 0.02%)</title><rect x="190.9" y="405" width="0.1" height="15.0" fill="rgb(252,220,52)" rx="2" ry="2" />
+<text  x="193.86" y="415.5" ></text>
+</g>
+<g >
+<title>double* std::fill_n&lt;double*, unsigned long, double&gt; (550,124 samples, 0.06%)</title><rect x="403.7" y="405" width="0.5" height="15.0" fill="rgb(234,135,32)" rx="2" ry="2" />
+<text  x="406.71" y="415.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt;::~vector (153,009 samples, 0.02%)</title><rect x="93.4" y="485" width="0.1" height="15.0" fill="rgb(254,227,54)" rx="2" ry="2" />
+<text  x="96.42" y="495.5" ></text>
+</g>
+<g >
+<title>bool __gnu_cxx::operator==&lt;ns3::HigherLayerSelected_s const*, std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt; &gt; (229,505 samples, 0.02%)</title><rect x="125.0" y="293" width="0.2" height="15.0" fill="rgb(228,107,25)" rx="2" ry="2" />
+<text  x="128.01" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::EnbMacMemberFfMacSchedSapUser::SchedDlConfigInd (19,285,336 samples, 1.99%)</title><rect x="19.6" y="517" width="15.5" height="15.0" fill="rgb(241,166,39)" rx="2" ry="2" />
+<text  x="22.60" y="527.5" ></text>
+</g>
+<g >
+<title> (157,592 samples, 0.02%)</title><rect x="743.7" y="533" width="0.2" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="746.73" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::NoOpComponentCarrierManager::DoReceivePdu (7,688,560 samples, 0.79%)</title><rect x="424.1" y="309" width="6.2" height="15.0" fill="rgb(252,219,52)" rx="2" ry="2" />
+<text  x="427.07" y="319.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::TbId_t, std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::_Select1st&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::_M_drop_node (1,378,012 samples, 0.14%)</title><rect x="505.2" y="501" width="1.1" height="15.0" fill="rgb(222,79,18)" rx="2" ry="2" />
+<text  x="508.24" y="511.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, unsigned char*&gt; (280,915 samples, 0.03%)</title><rect x="519.3" y="261" width="0.3" height="15.0" fill="rgb(254,229,54)" rx="2" ry="2" />
+<text  x="522.35" y="271.5" ></text>
+</g>
+<g >
+<title>[ld-linux-x86-64.so.2] (279,737 samples, 0.03%)</title><rect x="10.0" y="773" width="0.2" height="15.0" fill="rgb(243,178,42)" rx="2" ry="2" />
+<text  x="13.00" y="783.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::vector (153,635 samples, 0.02%)</title><rect x="457.2" y="277" width="0.1" height="15.0" fill="rgb(206,9,2)" rx="2" ry="2" />
+<text  x="460.19" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::SbMeasResult_s::operator= (986,836 samples, 0.10%)</title><rect x="585.4" y="261" width="0.8" height="15.0" fill="rgb(205,4,1)" rx="2" ry="2" />
+<text  x="588.42" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::FfMacSchedSapProvider::SchedUlCqiInfoReqParameters::~SchedUlCqiInfoReqParameters (544,597 samples, 0.06%)</title><rect x="263.6" y="405" width="0.5" height="15.0" fill="rgb(219,67,16)" rx="2" ry="2" />
+<text  x="266.62" y="415.5" ></text>
+</g>
+<g >
+<title>double* std::__copy_move_a2&lt;false, double const*, double*&gt; (157,987 samples, 0.02%)</title><rect x="325.1" y="357" width="0.1" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="328.10" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::operator= (829,393 samples, 0.09%)</title><rect x="72.1" y="437" width="0.7" height="15.0" fill="rgb(243,177,42)" rx="2" ry="2" />
+<text  x="75.11" y="447.5" ></text>
+</g>
+<g >
+<title>std::less&lt;ns3::Scheduler::EventKey&gt;::operator (678,555 samples, 0.07%)</title><rect x="274.9" y="421" width="0.6" height="15.0" fill="rgb(234,137,32)" rx="2" ry="2" />
+<text  x="277.91" y="431.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::AttributeConstructionList::Item, std::allocator&lt;ns3::AttributeConstructionList::Item&gt; &gt;::list (568,564 samples, 0.06%)</title><rect x="630.2" y="485" width="0.4" height="15.0" fill="rgb(252,219,52)" rx="2" ry="2" />
+<text  x="633.15" y="495.5" ></text>
+</g>
+<g >
+<title>unsigned short* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;unsigned short const*, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, unsigned short*&gt; (575,480 samples, 0.06%)</title><rect x="521.0" y="309" width="0.5" height="15.0" fill="rgb(212,32,7)" rx="2" ry="2" />
+<text  x="524.02" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleUeCcmMacSapUser::NotifyTxOpportunity (21,852,046 samples, 2.25%)</title><rect x="551.2" y="325" width="17.6" height="15.0" fill="rgb(238,152,36)" rx="2" ry="2" />
+<text  x="554.19" y="335.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::CqiListElement_s*, ns3::CqiListElement_s&gt; (183,284 samples, 0.02%)</title><rect x="128.1" y="485" width="0.2" height="15.0" fill="rgb(225,92,22)" rx="2" ry="2" />
+<text  x="131.14" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt;::_M_deallocate (158,001 samples, 0.02%)</title><rect x="262.4" y="501" width="0.1" height="15.0" fill="rgb(228,109,26)" rx="2" ry="2" />
+<text  x="265.36" y="511.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_move_assign (524,495 samples, 0.05%)</title><rect x="357.2" y="405" width="0.4" height="15.0" fill="rgb(213,40,9)" rx="2" ry="2" />
+<text  x="360.22" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::Node::DoDispose (238,924 samples, 0.02%)</title><rect x="36.6" y="517" width="0.2" height="15.0" fill="rgb(209,22,5)" rx="2" ry="2" />
+<text  x="39.64" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_M_create_storage (150,187 samples, 0.02%)</title><rect x="718.4" y="421" width="0.1" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="721.35" y="431.5" ></text>
+</g>
+<g >
+<title>std::function&lt;void  (1,713,426 samples, 0.18%)</title><rect x="283.1" y="501" width="1.4" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="286.13" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumPhy::GetDevice (383,185 samples, 0.04%)</title><rect x="313.0" y="501" width="0.3" height="15.0" fill="rgb(236,146,35)" rx="2" ry="2" />
+<text  x="316.01" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::UlInfoListElement_s* std::vector&lt;ns3::UlInfoListElement_s, std::allocator&lt;ns3::UlInfoListElement_s&gt; &gt;::_M_allocate_and_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::UlInfoListElement_s const*, std::vector&lt;ns3::UlInfoListElement_s, std::allocator&lt;ns3::UlInfoListElement_s&gt; &gt; &gt; &gt; (1,018,809 samples, 0.11%)</title><rect x="266.1" y="501" width="0.8" height="15.0" fill="rgb(239,157,37)" rx="2" ry="2" />
+<text  x="269.11" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::~_Vector_base (233,349 samples, 0.02%)</title><rect x="472.9" y="261" width="0.2" height="15.0" fill="rgb(205,1,0)" rx="2" ry="2" />
+<text  x="475.94" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::AddPacket (2,126,604 samples, 0.22%)</title><rect x="562.8" y="197" width="1.7" height="15.0" fill="rgb(207,10,2)" rx="2" ry="2" />
+<text  x="565.79" y="207.5" ></text>
+</g>
+<g >
+<title>ns3::PacketMetadata::PacketMetadata (262,148 samples, 0.03%)</title><rect x="624.7" y="485" width="0.2" height="15.0" fill="rgb(231,121,28)" rx="2" ry="2" />
+<text  x="627.69" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy::ReportUlHarqFeedback (652,539 samples, 0.07%)</title><rect x="440.3" y="373" width="0.5" height="15.0" fill="rgb(222,81,19)" rx="2" ry="2" />
+<text  x="443.31" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::EnbMacMemberFfMacSchedSapUser::SchedDlConfigInd (41,165,130 samples, 4.24%)</title><rect x="140.8" y="485" width="33.1" height="15.0" fill="rgb(241,166,39)" rx="2" ry="2" />
+<text  x="143.77" y="495.5" >ns..</text>
+</g>
+<g >
+<title>std::vector&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt;::~vector (470,466 samples, 0.05%)</title><rect x="207.8" y="485" width="0.4" height="15.0" fill="rgb(213,39,9)" rx="2" ry="2" />
+<text  x="210.78" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::vector (235,913 samples, 0.02%)</title><rect x="159.6" y="405" width="0.2" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="162.56" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::HarqProcessInfoElement_t const* std::__niter_base&lt;ns3::HarqProcessInfoElement_t const*, std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; (200,788 samples, 0.02%)</title><rect x="513.0" y="453" width="0.1" height="15.0" fill="rgb(233,132,31)" rx="2" ry="2" />
+<text  x="515.96" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_Vector_impl_data::_Vector_impl_data (146,004 samples, 0.02%)</title><rect x="413.5" y="453" width="0.1" height="15.0" fill="rgb(233,133,31)" rx="2" ry="2" />
+<text  x="416.46" y="463.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::__fill_n_a&lt;unsigned char*, unsigned long, unsigned char&gt; (268,012 samples, 0.03%)</title><rect x="216.1" y="389" width="0.2" height="15.0" fill="rgb(243,177,42)" rx="2" ry="2" />
+<text  x="219.06" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::Time::GetSeconds (693,056 samples, 0.07%)</title><rect x="605.6" y="517" width="0.5" height="15.0" fill="rgb(249,203,48)" rx="2" ry="2" />
+<text  x="608.57" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::PacketTagList::Remove (349,447 samples, 0.04%)</title><rect x="435.3" y="309" width="0.2" height="15.0" fill="rgb(241,169,40)" rx="2" ry="2" />
+<text  x="438.25" y="319.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::_M_drop_node (496,453 samples, 0.05%)</title><rect x="193.2" y="437" width="0.4" height="15.0" fill="rgb(212,32,7)" rx="2" ry="2" />
+<text  x="196.18" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::LogComponent::IsEnabled (199,761 samples, 0.02%)</title><rect x="703.7" y="549" width="0.1" height="15.0" fill="rgb(214,43,10)" rx="2" ry="2" />
+<text  x="706.68" y="559.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt;::at (589,794 samples, 0.06%)</title><rect x="525.6" y="341" width="0.5" height="15.0" fill="rgb(251,215,51)" rx="2" ry="2" />
+<text  x="528.59" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::DlDciListElement_s::DlDciListElement_s (3,299,485 samples, 0.34%)</title><rect x="518.8" y="357" width="2.7" height="15.0" fill="rgb(233,129,30)" rx="2" ry="2" />
+<text  x="521.83" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt; ns3::CreateObject&lt;ns3::PacketBurst&gt; (4,247,837 samples, 0.44%)</title><rect x="160.7" y="453" width="3.4" height="15.0" fill="rgb(205,4,0)" rx="2" ry="2" />
+<text  x="163.66" y="463.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;is_invocable_r_v&lt;void, void  (19,263,971 samples, 1.99%)</title><rect x="423.2" y="405" width="15.5" height="15.0" fill="rgb(243,178,42)" rx="2" ry="2" />
+<text  x="426.21" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst const&gt;::~Ptr (148,119 samples, 0.02%)</title><rect x="720.5" y="517" width="0.1" height="15.0" fill="rgb(239,159,38)" rx="2" ry="2" />
+<text  x="723.45" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt; &gt; &gt;::_S_key (503,437 samples, 0.05%)</title><rect x="170.2" y="405" width="0.4" height="15.0" fill="rgb(243,176,42)" rx="2" ry="2" />
+<text  x="173.19" y="415.5" ></text>
+</g>
+<g >
+<title>std::__detail::_List_node_header::_List_node_header (572,667 samples, 0.06%)</title><rect x="285.6" y="485" width="0.5" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="288.64" y="495.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy_aux&lt;false&gt;::__destroy&lt;ns3::Ptr&lt;ns3::Object&gt;*&gt; (162,694 samples, 0.02%)</title><rect x="550.3" y="165" width="0.1" height="15.0" fill="rgb(208,15,3)" rx="2" ry="2" />
+<text  x="553.29" y="175.5" ></text>
+</g>
+<g >
+<title>void std::_Function_base::_Base_manager&lt;std::_Bind&lt;void  (153,002 samples, 0.02%)</title><rect x="53.7" y="469" width="0.2" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="56.75" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::LteUePhy::ReceiveLteControlMessageList (71,922,230 samples, 7.42%)</title><rect x="518.2" y="373" width="57.8" height="15.0" fill="rgb(205,0,0)" rx="2" ry="2" />
+<text  x="521.18" y="383.5" >ns3::L..</text>
+</g>
+<g >
+<title>std::_Vector_base&lt;int, std::allocator&lt;int&gt; &gt;::_M_get_Tp_allocator (179,945 samples, 0.02%)</title><rect x="699.2" y="533" width="0.1" height="15.0" fill="rgb(254,228,54)" rx="2" ry="2" />
+<text  x="702.15" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::LteUePhy::QueueSubChannelsForTransmission (714,483 samples, 0.07%)</title><rect x="530.5" y="357" width="0.6" height="15.0" fill="rgb(218,60,14)" rx="2" ry="2" />
+<text  x="533.52" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::HarqStatus_e* std::__copy_move_a1&lt;false, ns3::DlInfoListElement_s::HarqStatus_e const*, ns3::DlInfoListElement_s::HarqStatus_e*&gt; (158,174 samples, 0.02%)</title><rect x="510.0" y="421" width="0.2" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="513.04" y="431.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::operator= (1,174,367 samples, 0.12%)</title><rect x="672.8" y="533" width="1.0" height="15.0" fill="rgb(251,215,51)" rx="2" ry="2" />
+<text  x="675.85" y="543.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned char, ns3::LteUeMac::LcInfo, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteUeMac::LcInfo&gt; &gt; &gt;::find (1,463,058 samples, 0.15%)</title><rect x="690.8" y="501" width="1.2" height="15.0" fill="rgb(226,97,23)" rx="2" ry="2" />
+<text  x="693.81" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::LteRlcSm::DoNotifyTxOpportunity (2,715,978 samples, 0.28%)</title><rect x="17.2" y="421" width="2.2" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="20.17" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::Object::DoDelete (1,607,547 samples, 0.17%)</title><rect x="634.5" y="373" width="1.3" height="15.0" fill="rgb(212,34,8)" rx="2" ry="2" />
+<text  x="637.53" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::PacketTagList::~PacketTagList (184,330 samples, 0.02%)</title><rect x="653.5" y="229" width="0.2" height="15.0" fill="rgb(223,87,20)" rx="2" ry="2" />
+<text  x="656.51" y="239.5" ></text>
+</g>
+<g >
+<title>unsigned short* std::copy&lt;__gnu_cxx::__normal_iterator&lt;unsigned short const*, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, unsigned short*&gt; (649,960 samples, 0.07%)</title><rect x="474.9" y="229" width="0.5" height="15.0" fill="rgb(226,96,23)" rx="2" ry="2" />
+<text  x="477.87" y="239.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned char const, ns3::LteCcmMacSapProvider*&gt; &gt;::_M_valptr (243,580 samples, 0.03%)</title><rect x="458.6" y="213" width="0.2" height="15.0" fill="rgb(231,122,29)" rx="2" ry="2" />
+<text  x="461.61" y="223.5" ></text>
+</g>
+<g >
+<title> (247,279 samples, 0.03%)</title><rect x="534.1" y="341" width="0.2" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="537.14" y="351.5" ></text>
+</g>
+<g >
+<title>std::_List_node&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt;* std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::_M_create_node&lt;ns3::Ptr&lt;ns3::Packet&gt; const&amp;&gt; (194,175 samples, 0.02%)</title><rect x="17.4" y="293" width="0.1" height="15.0" fill="rgb(211,30,7)" rx="2" ry="2" />
+<text  x="20.39" y="303.5" ></text>
+</g>
+<g >
+<title>std::__tuple_compare&lt;std::tuple&lt;double const&amp;, double const&amp;, double const&amp;&gt;, std::tuple&lt;double const&amp;, double const&amp;, double const&amp;&gt;, 0ul, 3ul&gt;::__eq (2,160,599 samples, 0.22%)</title><rect x="747.3" y="501" width="1.7" height="15.0" fill="rgb(235,140,33)" rx="2" ry="2" />
+<text  x="750.31" y="511.5" ></text>
+</g>
+<g >
+<title>double* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, double*&gt; (156,421 samples, 0.02%)</title><rect x="484.8" y="453" width="0.2" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="487.85" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultSimulatorImpl::Run (2,105,662 samples, 0.22%)</title><rect x="15.5" y="757" width="1.6" height="15.0" fill="rgb(207,11,2)" rx="2" ry="2" />
+<text  x="18.45" y="767.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::_M_insert&lt;ns3::Ptr&lt;ns3::Packet&gt; const&amp;&gt; (1,174,204 samples, 0.12%)</title><rect x="625.9" y="485" width="1.0" height="15.0" fill="rgb(234,135,32)" rx="2" ry="2" />
+<text  x="628.93" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_S_key (206,860 samples, 0.02%)</title><rect x="83.5" y="373" width="0.2" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="86.54" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::tbInfo_t&amp;&amp; std::forward&lt;ns3::tbInfo_t&gt; (124,354 samples, 0.01%)</title><rect x="527.0" y="197" width="0.1" height="15.0" fill="rgb(228,107,25)" rx="2" ry="2" />
+<text  x="529.98" y="207.5" ></text>
+</g>
+<g >
+<title>ns3::MemberLteCcmMacSapUser&lt;ns3::NoOpComponentCarrierManager&gt;::NotifyTxOpportunity (10,219,715 samples, 1.05%)</title><rect x="150.7" y="453" width="8.2" height="15.0" fill="rgb(205,3,0)" rx="2" ry="2" />
+<text  x="153.73" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;5ul, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::_Tuple_impl&lt;std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;&amp;&gt; (236,989 samples, 0.02%)</title><rect x="340.6" y="325" width="0.2" height="15.0" fill="rgb(219,68,16)" rx="2" ry="2" />
+<text  x="343.59" y="335.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt; &gt; &gt;::_M_lower_bound (1,154,434 samples, 0.12%)</title><rect x="158.0" y="373" width="0.9" height="15.0" fill="rgb(238,153,36)" rx="2" ry="2" />
+<text  x="160.95" y="383.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;double&gt;::allocate (150,187 samples, 0.02%)</title><rect x="718.4" y="357" width="0.1" height="15.0" fill="rgb(248,201,48)" rx="2" ry="2" />
+<text  x="721.35" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::UlInfoListElement_s::UlInfoListElement_s (561,715 samples, 0.06%)</title><rect x="439.4" y="437" width="0.4" height="15.0" fill="rgb(211,29,7)" rx="2" ry="2" />
+<text  x="442.38" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt; &gt;::_M_get_Node_allocator (124,773 samples, 0.01%)</title><rect x="503.2" y="453" width="0.1" height="15.0" fill="rgb(209,19,4)" rx="2" ry="2" />
+<text  x="506.21" y="463.5" ></text>
+</g>
+<g >
+<title>std::function&lt;void  (261,746 samples, 0.03%)</title><rect x="109.8" y="485" width="0.2" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="112.79" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt;::operator (350,639 samples, 0.04%)</title><rect x="321.8" y="421" width="0.3" height="15.0" fill="rgb(252,217,52)" rx="2" ry="2" />
+<text  x="324.80" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt;::_M_lower_bound (193,840 samples, 0.02%)</title><rect x="156.6" y="373" width="0.2" height="15.0" fill="rgb(240,162,38)" rx="2" ry="2" />
+<text  x="159.62" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Bind&lt;void  (869,324 samples, 0.09%)</title><rect x="283.8" y="453" width="0.7" height="15.0" fill="rgb(253,221,52)" rx="2" ry="2" />
+<text  x="286.81" y="463.5" ></text>
+</g>
+<g >
+<title>double const&amp; const&amp; std::__get_helper&lt;2ul, double const&amp;&gt; (303,442 samples, 0.03%)</title><rect x="747.9" y="437" width="0.2" height="15.0" fill="rgb(232,125,30)" rx="2" ry="2" />
+<text  x="750.87" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_insert_node (220,811 samples, 0.02%)</title><rect x="661.7" y="389" width="0.1" height="15.0" fill="rgb(218,62,14)" rx="2" ry="2" />
+<text  x="664.65" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_M_drop_node (193,911 samples, 0.02%)</title><rect x="104.0" y="389" width="0.1" height="15.0" fill="rgb(217,55,13)" rx="2" ry="2" />
+<text  x="106.96" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::SbMeasResult_s::~SbMeasResult_s (493,524 samples, 0.05%)</title><rect x="461.1" y="293" width="0.4" height="15.0" fill="rgb(221,77,18)" rx="2" ry="2" />
+<text  x="464.07" y="303.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::AttributeConstructionList::Item, std::allocator&lt;ns3::AttributeConstructionList::Item&gt; &gt;::_List_base (414,980 samples, 0.04%)</title><rect x="162.4" y="389" width="0.4" height="15.0" fill="rgb(251,212,50)" rx="2" ry="2" />
+<text  x="165.42" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumPhy*&amp; std::forward&lt;ns3::LteSpectrumPhy*&amp;&gt; (192,441 samples, 0.02%)</title><rect x="638.4" y="469" width="0.1" height="15.0" fill="rgb(222,78,18)" rx="2" ry="2" />
+<text  x="641.36" y="479.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy_aux&lt;false&gt;::__destroy&lt;ns3::BuildDataListElement_s*&gt; (793,632 samples, 0.08%)</title><rect x="145.6" y="405" width="0.7" height="15.0" fill="rgb(224,89,21)" rx="2" ry="2" />
+<text  x="148.63" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::HigherLayerSelected_s* std::__uninitialized_copy&lt;false&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::HigherLayerSelected_s const*, std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt; &gt;, ns3::HigherLayerSelected_s*&gt; (213,295 samples, 0.02%)</title><rect x="583.7" y="213" width="0.2" height="15.0" fill="rgb(251,215,51)" rx="2" ry="2" />
+<text  x="586.69" y="223.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;*, std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt;::operator+ (151,748 samples, 0.02%)</title><rect x="376.4" y="517" width="0.1" height="15.0" fill="rgb(232,125,29)" rx="2" ry="2" />
+<text  x="379.42" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt; &gt; &gt;::_M_end (156,504 samples, 0.02%)</title><rect x="235.5" y="453" width="0.2" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="238.54" y="463.5" ></text>
+</g>
+<g >
+<title>decltype  (1,840,875 samples, 0.19%)</title><rect x="211.7" y="437" width="1.5" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="214.74" y="447.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Callback&lt;void, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt; &gt;, std::allocator&lt;ns3::Callback&lt;void, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt; &gt; &gt; &gt;::begin (158,211 samples, 0.02%)</title><rect x="80.0" y="501" width="0.1" height="15.0" fill="rgb(236,144,34)" rx="2" ry="2" />
+<text  x="82.99" y="511.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::end (160,592 samples, 0.02%)</title><rect x="498.9" y="501" width="0.1" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="501.86" y="511.5" ></text>
+</g>
+<g >
+<title>pow (358,907 samples, 0.04%)</title><rect x="302.6" y="485" width="0.2" height="15.0" fill="rgb(254,226,54)" rx="2" ry="2" />
+<text  x="305.56" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::lower_bound (431,721 samples, 0.04%)</title><rect x="243.9" y="453" width="0.4" height="15.0" fill="rgb(251,211,50)" rx="2" ry="2" />
+<text  x="246.94" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::NixVector&gt;::Acquire (419,529 samples, 0.04%)</title><rect x="360.8" y="469" width="0.3" height="15.0" fill="rgb(238,156,37)" rx="2" ry="2" />
+<text  x="363.80" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumModel const&gt;::~Ptr (312,525 samples, 0.03%)</title><rect x="315.6" y="405" width="0.2" height="15.0" fill="rgb(218,61,14)" rx="2" ry="2" />
+<text  x="318.56" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt;::_Vector_base (1,053,971 samples, 0.11%)</title><rect x="260.6" y="373" width="0.9" height="15.0" fill="rgb(208,17,4)" rx="2" ry="2" />
+<text  x="263.64" y="383.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::allocate (493,183 samples, 0.05%)</title><rect x="563.8" y="101" width="0.4" height="15.0" fill="rgb(238,153,36)" rx="2" ry="2" />
+<text  x="566.80" y="111.5" ></text>
+</g>
+<g >
+<title>double* std::__uninitialized_default_n_1&lt;true&gt;::__uninit_default_n&lt;double*, unsigned long&gt; (158,356 samples, 0.02%)</title><rect x="646.6" y="341" width="0.2" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="649.62" y="351.5" ></text>
+</g>
+<g >
+<title>void std::__fill_a&lt;double*, double&gt; (344,019 samples, 0.04%)</title><rect x="301.5" y="341" width="0.2" height="15.0" fill="rgb(211,27,6)" rx="2" ry="2" />
+<text  x="304.46" y="351.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; (372,854 samples, 0.04%)</title><rect x="72.2" y="389" width="0.3" height="15.0" fill="rgb(212,35,8)" rx="2" ry="2" />
+<text  x="75.24" y="399.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy_aux&lt;false&gt;::__destroy&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;*&gt; (160,848 samples, 0.02%)</title><rect x="146.1" y="293" width="0.2" height="15.0" fill="rgb(222,81,19)" rx="2" ry="2" />
+<text  x="149.14" y="303.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::push_back (452,241 samples, 0.05%)</title><rect x="230.2" y="405" width="0.3" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="233.16" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::HarqProcessInfoElement_t* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::HarqProcessInfoElement_t const*, std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt;, ns3::HarqProcessInfoElement_t*&gt; (419,766 samples, 0.04%)</title><rect x="591.5" y="245" width="0.3" height="15.0" fill="rgb(233,131,31)" rx="2" ry="2" />
+<text  x="594.49" y="255.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::PhichListElement_s, std::allocator&lt;ns3::PhichListElement_s&gt; &gt;::vector (813,912 samples, 0.08%)</title><rect x="227.4" y="453" width="0.7" height="15.0" fill="rgb(211,28,6)" rx="2" ry="2" />
+<text  x="230.44" y="463.5" ></text>
+</g>
+<g >
+<title>std::map&lt;ns3::Scheduler::EventKey, ns3::EventImpl*, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::lower_bound (1,848,808 samples, 0.19%)</title><rect x="336.6" y="421" width="1.5" height="15.0" fill="rgb(238,153,36)" rx="2" ry="2" />
+<text  x="339.60" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::operator&lt; (204,834 samples, 0.02%)</title><rect x="707.5" y="373" width="0.2" height="15.0" fill="rgb(234,137,32)" rx="2" ry="2" />
+<text  x="710.51" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter&gt;::SimpleRefCount (573,224 samples, 0.06%)</title><rect x="537.7" y="277" width="0.5" height="15.0" fill="rgb(230,117,28)" rx="2" ry="2" />
+<text  x="540.71" y="287.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt;::pair&lt;unsigned short, ns3::DlInfoListElement_s&gt; (569,357 samples, 0.06%)</title><rect x="503.5" y="421" width="0.5" height="15.0" fill="rgb(234,137,32)" rx="2" ry="2" />
+<text  x="506.53" y="431.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;*, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt;::operator+ (155,822 samples, 0.02%)</title><rect x="352.1" y="501" width="0.1" height="15.0" fill="rgb(234,136,32)" rx="2" ry="2" />
+<text  x="355.08" y="511.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::~vector (408,168 samples, 0.04%)</title><rect x="303.6" y="437" width="0.3" height="15.0" fill="rgb(225,92,22)" rx="2" ry="2" />
+<text  x="306.59" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::PfFfMacScheduler::DoSchedDlTriggerReq (2,983,151 samples, 0.31%)</title><rect x="17.2" y="517" width="2.4" height="15.0" fill="rgb(214,45,10)" rx="2" ry="2" />
+<text  x="20.17" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumPhy::SetTxPowerSpectralDensity (266,358 samples, 0.03%)</title><rect x="112.2" y="501" width="0.2" height="15.0" fill="rgb(208,14,3)" rx="2" ry="2" />
+<text  x="115.18" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::SbMeasResult_s::~SbMeasResult_s (340,024 samples, 0.04%)</title><rect x="106.8" y="357" width="0.3" height="15.0" fill="rgb(221,77,18)" rx="2" ry="2" />
+<text  x="109.80" y="367.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::map (934,328 samples, 0.10%)</title><rect x="189.9" y="485" width="0.7" height="15.0" fill="rgb(212,35,8)" rx="2" ry="2" />
+<text  x="192.89" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::UniformRandomVariable::GetValue (1,052,360 samples, 0.11%)</title><rect x="608.7" y="549" width="0.8" height="15.0" fill="rgb(238,152,36)" rx="2" ry="2" />
+<text  x="611.66" y="559.5" ></text>
+</g>
+<g >
+<title>std::operator+ (505,904 samples, 0.05%)</title><rect x="198.3" y="437" width="0.4" height="15.0" fill="rgb(239,157,37)" rx="2" ry="2" />
+<text  x="201.32" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteUeNetDevice&gt; ns3::Object::GetObject&lt;ns3::LteUeNetDevice&gt; (242,422 samples, 0.02%)</title><rect x="599.7" y="309" width="0.2" height="15.0" fill="rgb(251,215,51)" rx="2" ry="2" />
+<text  x="602.66" y="319.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_insert&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; const&amp;&gt; (180,536 samples, 0.02%)</title><rect x="697.8" y="501" width="0.1" height="15.0" fill="rgb(210,27,6)" rx="2" ry="2" />
+<text  x="700.79" y="511.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::~map (934,712 samples, 0.10%)</title><rect x="776.5" y="437" width="0.7" height="15.0" fill="rgb(228,107,25)" rx="2" ry="2" />
+<text  x="779.47" y="447.5" ></text>
+</g>
+<g >
+<title>__libc_start_main (923,730,017 samples, 95.25%)</title><rect x="35.5" y="821" width="743.0" height="15.0" fill="rgb(236,142,34)" rx="2" ry="2" />
+<text  x="38.54" y="831.5" >__libc_start_main</text>
+</g>
+<g >
+<title>ns3::BuildDataListElement_s* std::__relocate_a&lt;ns3::BuildDataListElement_s*, ns3::BuildDataListElement_s*, std::allocator&lt;ns3::BuildDataListElement_s&gt; &gt; (268,184 samples, 0.03%)</title><rect x="203.0" y="437" width="0.2" height="15.0" fill="rgb(221,74,17)" rx="2" ry="2" />
+<text  x="205.97" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt; &gt;::_M_lower_bound (162,629 samples, 0.02%)</title><rect x="189.0" y="453" width="0.2" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="192.03" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::EnbMacMemberLteEnbPhySapUser::UlInfoListElementHarqFeedback (486,223 samples, 0.05%)</title><rect x="440.3" y="357" width="0.4" height="15.0" fill="rgb(253,221,53)" rx="2" ry="2" />
+<text  x="443.35" y="367.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;::vector (634,130 samples, 0.07%)</title><rect x="350.7" y="389" width="0.5" height="15.0" fill="rgb(249,203,48)" rx="2" ry="2" />
+<text  x="353.67" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Bind&lt;void  (396,468 samples, 0.04%)</title><rect x="666.2" y="469" width="0.3" height="15.0" fill="rgb(253,221,52)" rx="2" ry="2" />
+<text  x="669.19" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::MatrixArray&lt;std::complex&lt;double&gt; &gt; const&gt;::operator= (149,159 samples, 0.02%)</title><rect x="645.4" y="453" width="0.1" height="15.0" fill="rgb(243,177,42)" rx="2" ry="2" />
+<text  x="648.40" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider::ReportBufferStatusParameters&gt; &gt;::_M_valptr (164,987 samples, 0.02%)</title><rect x="568.9" y="309" width="0.1" height="15.0" fill="rgb(228,107,25)" rx="2" ry="2" />
+<text  x="571.88" y="319.5" ></text>
+</g>
+<g >
+<title>std::_Bit_iterator std::__copy_move_a2&lt;false, std::_Bit_const_iterator, std::_Bit_iterator&gt; (267,552 samples, 0.03%)</title><rect x="199.4" y="373" width="0.2" height="15.0" fill="rgb(251,211,50)" rx="2" ry="2" />
+<text  x="202.39" y="383.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::operator= (1,826,902 samples, 0.19%)</title><rect x="647.0" y="421" width="1.5" height="15.0" fill="rgb(243,175,42)" rx="2" ry="2" />
+<text  x="650.00" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_get_node (493,361 samples, 0.05%)</title><rect x="334.3" y="357" width="0.4" height="15.0" fill="rgb(221,75,17)" rx="2" ry="2" />
+<text  x="337.34" y="367.5" ></text>
+</g>
+<g >
+<title>double&amp; std::forward&lt;double&amp;&gt; (125,210 samples, 0.01%)</title><rect x="48.7" y="581" width="0.1" height="15.0" fill="rgb(246,188,45)" rx="2" ry="2" />
+<text  x="51.66" y="591.5" ></text>
+</g>
+<g >
+<title>std::_List_const_iterator&lt;ns3::Callback&lt;void, ns3::Ptr&lt;ns3::MobilityModel const&gt;, ns3::Ptr&lt;ns3::MobilityModel const&gt;, double, double, double, double&gt; &gt;::_List_const_iterator (158,162 samples, 0.02%)</title><rect x="746.4" y="517" width="0.2" height="15.0" fill="rgb(213,40,9)" rx="2" ry="2" />
+<text  x="749.44" y="527.5" ></text>
+</g>
+<g >
+<title>std::_List_const_iterator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt;::_List_const_iterator (161,744 samples, 0.02%)</title><rect x="491.7" y="517" width="0.1" height="15.0" fill="rgb(234,137,32)" rx="2" ry="2" />
+<text  x="494.66" y="527.5" ></text>
+</g>
+<g >
+<title>void std::__invoke_impl&lt;void, void  (2,105,662 samples, 0.22%)</title><rect x="15.5" y="581" width="1.6" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="18.45" y="591.5" ></text>
+</g>
+<g >
+<title>ns3::operator&lt; (654,418 samples, 0.07%)</title><rect x="337.6" y="357" width="0.5" height="15.0" fill="rgb(234,137,32)" rx="2" ry="2" />
+<text  x="340.56" y="367.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt;::_M_create_storage (160,120 samples, 0.02%)</title><rect x="443.1" y="277" width="0.1" height="15.0" fill="rgb(244,180,43)" rx="2" ry="2" />
+<text  x="446.10" y="287.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::LteSpectrumModelId, std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt;, std::_Select1st&lt;std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt; &gt;, std::less&lt;ns3::LteSpectrumModelId&gt;, std::allocator&lt;std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt; &gt; &gt;::end (125,572 samples, 0.01%)</title><rect x="676.5" y="453" width="0.1" height="15.0" fill="rgb(238,156,37)" rx="2" ry="2" />
+<text  x="679.48" y="463.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, unsigned char*, unsigned char&gt; (500,842 samples, 0.05%)</title><rect x="214.2" y="453" width="0.4" height="15.0" fill="rgb(226,96,23)" rx="2" ry="2" />
+<text  x="217.21" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_Auto_node::_M_key (154,486 samples, 0.02%)</title><rect x="659.3" y="469" width="0.1" height="15.0" fill="rgb(238,154,36)" rx="2" ry="2" />
+<text  x="662.28" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt;, std::allocator&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt; &gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt;, std::allocator&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt;, std::allocator&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt;::find (151,942 samples, 0.02%)</title><rect x="99.2" y="453" width="0.1" height="15.0" fill="rgb(253,225,53)" rx="2" ry="2" />
+<text  x="102.20" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Buffer::Initialize (198,909 samples, 0.02%)</title><rect x="19.0" y="357" width="0.1" height="15.0" fill="rgb(211,31,7)" rx="2" ry="2" />
+<text  x="21.95" y="367.5" ></text>
+</g>
+<g >
+<title>decltype  (189,091 samples, 0.02%)</title><rect x="100.8" y="421" width="0.2" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="103.84" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumSignalParameters::~SpectrumSignalParameters (150,807 samples, 0.02%)</title><rect x="775.9" y="389" width="0.1" height="15.0" fill="rgb(205,2,0)" rx="2" ry="2" />
+<text  x="778.91" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::ByteTagList::~ByteTagList (286,110 samples, 0.03%)</title><rect x="76.3" y="229" width="0.2" height="15.0" fill="rgb(206,5,1)" rx="2" ry="2" />
+<text  x="79.28" y="239.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumModel const&gt;::operator= (275,587 samples, 0.03%)</title><rect x="316.7" y="405" width="0.2" height="15.0" fill="rgb(232,124,29)" rx="2" ry="2" />
+<text  x="319.72" y="415.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;int*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt;::operator++ (129,245 samples, 0.01%)</title><rect x="54.4" y="501" width="0.1" height="15.0" fill="rgb(222,80,19)" rx="2" ry="2" />
+<text  x="57.40" y="511.5" ></text>
+</g>
+<g >
+<title>std::set&lt;unsigned short, std::less&lt;unsigned short&gt;, std::allocator&lt;unsigned short&gt; &gt;::find (997,034 samples, 0.10%)</title><rect x="462.8" y="357" width="0.8" height="15.0" fill="rgb(207,12,2)" rx="2" ry="2" />
+<text  x="465.81" y="367.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt;::_M_ptr (221,148 samples, 0.02%)</title><rect x="650.6" y="421" width="0.2" height="15.0" fill="rgb(226,97,23)" rx="2" ry="2" />
+<text  x="653.60" y="431.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt; &gt;::construct&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (558,175 samples, 0.06%)</title><rect x="271.1" y="389" width="0.4" height="15.0" fill="rgb(231,122,29)" rx="2" ry="2" />
+<text  x="274.10" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::ObjectDeleter::Delete (659,540 samples, 0.07%)</title><rect x="166.3" y="421" width="0.5" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="169.26" y="431.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;::pair&lt;unsigned short const&amp;, 0ul&gt; (363,578 samples, 0.04%)</title><rect x="243.0" y="357" width="0.3" height="15.0" fill="rgb(232,124,29)" rx="2" ry="2" />
+<text  x="245.96" y="367.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt;::_M_begin (473,969 samples, 0.05%)</title><rect x="171.1" y="421" width="0.3" height="15.0" fill="rgb(254,225,53)" rx="2" ry="2" />
+<text  x="174.05" y="431.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::end (304,113 samples, 0.03%)</title><rect x="370.2" y="517" width="0.2" height="15.0" fill="rgb(211,29,6)" rx="2" ry="2" />
+<text  x="373.17" y="527.5" ></text>
+</g>
+<g >
+<title>std::less&lt;ns3::LteSpectrumModelId&gt;::operator (304,181 samples, 0.03%)</title><rect x="676.2" y="437" width="0.3" height="15.0" fill="rgb(243,176,42)" rx="2" ry="2" />
+<text  x="679.23" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Time::~Time (126,395 samples, 0.01%)</title><rect x="86.7" y="469" width="0.1" height="15.0" fill="rgb(212,36,8)" rx="2" ry="2" />
+<text  x="89.68" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::UlDciListElement_s, std::allocator&lt;ns3::UlDciListElement_s&gt; &gt;::push_back (2,043,951 samples, 0.21%)</title><rect x="249.3" y="485" width="1.6" height="15.0" fill="rgb(218,64,15)" rx="2" ry="2" />
+<text  x="252.28" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Angles::NormalizeAngles (187,861 samples, 0.02%)</title><rect x="65.9" y="485" width="0.2" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="68.93" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::LteFlowId_t, std::pair&lt;ns3::LteFlowId_t const, ns3::FfMacSchedSapProvider::SchedDlRlcBufferReqParameters&gt;, std::_Select1st&lt;std::pair&lt;ns3::LteFlowId_t const, ns3::FfMacSchedSapProvider::SchedDlRlcBufferReqParameters&gt; &gt;, std::less&lt;ns3::LteFlowId_t&gt;, std::allocator&lt;std::pair&lt;ns3::LteFlowId_t const, ns3::FfMacSchedSapProvider::SchedDlRlcBufferReqParameters&gt; &gt; &gt;::_M_lower_bound (462,671 samples, 0.05%)</title><rect x="27.0" y="277" width="0.4" height="15.0" fill="rgb(243,175,42)" rx="2" ry="2" />
+<text  x="30.01" y="287.5" ></text>
+</g>
+<g >
+<title>malloc (249,753 samples, 0.03%)</title><rect x="72.8" y="469" width="0.2" height="15.0" fill="rgb(230,119,28)" rx="2" ry="2" />
+<text  x="75.85" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::Add (189,127 samples, 0.02%)</title><rect x="405.5" y="501" width="0.1" height="15.0" fill="rgb(234,136,32)" rx="2" ry="2" />
+<text  x="408.47" y="511.5" ></text>
+</g>
+<g >
+<title>void std::__invoke_impl&lt;void, ns3::Callback&lt;void, ns3::DlInfoListElement_s&gt;::Callback&lt;void  (3,583,306 samples, 0.37%)</title><rect x="418.5" y="469" width="2.9" height="15.0" fill="rgb(216,54,12)" rx="2" ry="2" />
+<text  x="421.51" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned int, std::allocator&lt;unsigned int&gt; &gt;::_M_fill_initialize (1,326,838 samples, 0.14%)</title><rect x="695.4" y="485" width="1.0" height="15.0" fill="rgb(227,103,24)" rx="2" ry="2" />
+<text  x="698.37" y="495.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;int*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt; std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;int const*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;int*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt; &gt; (248,988 samples, 0.03%)</title><rect x="61.7" y="501" width="0.2" height="15.0" fill="rgb(236,146,35)" rx="2" ry="2" />
+<text  x="64.70" y="511.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::back (194,530 samples, 0.02%)</title><rect x="479.1" y="277" width="0.1" height="15.0" fill="rgb(237,148,35)" rx="2" ry="2" />
+<text  x="482.09" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::HarqStatus_e* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::DlInfoListElement_s::HarqStatus_e const*, std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt; &gt;, ns3::DlInfoListElement_s::HarqStatus_e*&gt; (147,743 samples, 0.02%)</title><rect x="107.3" y="341" width="0.1" height="15.0" fill="rgb(235,140,33)" rx="2" ry="2" />
+<text  x="110.33" y="351.5" ></text>
+</g>
+<g >
+<title>std::_Function_handler&lt;void  (145,405 samples, 0.01%)</title><rect x="308.5" y="389" width="0.1" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="311.46" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteUeMac::LcInfo&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteUeMac::LcInfo&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteUeMac::LcInfo&gt; &gt; &gt;::_M_lower_bound (805,256 samples, 0.08%)</title><rect x="691.2" y="469" width="0.7" height="15.0" fill="rgb(237,148,35)" rx="2" ry="2" />
+<text  x="694.25" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Object::Construct (2,205,090 samples, 0.23%)</title><rect x="33.3" y="453" width="1.8" height="15.0" fill="rgb(228,108,26)" rx="2" ry="2" />
+<text  x="36.34" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::SpectrumValue (3,061,806 samples, 0.32%)</title><rect x="411.4" y="517" width="2.5" height="15.0" fill="rgb(211,27,6)" rx="2" ry="2" />
+<text  x="414.42" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;ns3::UlDciListElement_s, std::allocator&lt;ns3::UlDciListElement_s&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;ns3::UlDciListElement_s, std::allocator&lt;ns3::UlDciListElement_s&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;ns3::UlDciListElement_s, std::allocator&lt;ns3::UlDciListElement_s&gt; &gt; &gt; &gt; &gt;::_S_key (155,594 samples, 0.02%)</title><rect x="241.3" y="437" width="0.2" height="15.0" fill="rgb(228,109,26)" rx="2" ry="2" />
+<text  x="244.34" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::LteInterference::DoSubtractSignal (20,555,876 samples, 2.12%)</title><rect x="400.6" y="565" width="16.6" height="15.0" fill="rgb(218,62,15)" rx="2" ry="2" />
+<text  x="403.64" y="575.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;ns3::LteFlowId_t const, ns3::FfMacSchedSapProvider::SchedDlRlcBufferReqParameters&gt; &gt;::_M_valptr (158,324 samples, 0.02%)</title><rect x="177.5" y="453" width="0.1" height="15.0" fill="rgb(222,81,19)" rx="2" ry="2" />
+<text  x="180.48" y="463.5" ></text>
+</g>
+<g >
+<title>operator new (152,076 samples, 0.02%)</title><rect x="270.7" y="341" width="0.2" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="273.73" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumSignalParameters* ns3::PeekPointer&lt;ns3::SpectrumSignalParameters&gt; (126,810 samples, 0.01%)</title><rect x="74.9" y="501" width="0.1" height="15.0" fill="rgb(214,43,10)" rx="2" ry="2" />
+<text  x="77.92" y="511.5" ></text>
+</g>
+<g >
+<title>std::tuple_element&lt;2ul, std::tuple&lt;double const&amp;, double const&amp;, double const&amp;&gt; &gt;::type const&amp; std::get&lt;2ul, double const&amp;, double const&amp;, double const&amp;&gt; (498,549 samples, 0.05%)</title><rect x="747.7" y="453" width="0.4" height="15.0" fill="rgb(217,56,13)" rx="2" ry="2" />
+<text  x="750.72" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumPhy::StartRx (40,953,039 samples, 4.22%)</title><rect x="705.2" y="549" width="33.0" height="15.0" fill="rgb(218,63,15)" rx="2" ry="2" />
+<text  x="708.24" y="559.5" >ns..</text>
+</g>
+<g >
+<title>double std::reduce&lt;__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, double, std::plus&lt;void&gt; &gt; (163,427 samples, 0.02%)</title><rect x="725.9" y="309" width="0.2" height="15.0" fill="rgb(221,77,18)" rx="2" ry="2" />
+<text  x="728.92" y="319.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, unsigned short, std::_Identity&lt;unsigned short&gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;unsigned short&gt; &gt;::_Rb_tree_impl&lt;std::less&lt;unsigned short&gt;, true&gt;::_Rb_tree_impl (238,331 samples, 0.02%)</title><rect x="195.0" y="453" width="0.2" height="15.0" fill="rgb(215,50,12)" rx="2" ry="2" />
+<text  x="197.99" y="463.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; std::copy&lt;__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; (372,854 samples, 0.04%)</title><rect x="72.2" y="405" width="0.3" height="15.0" fill="rgb(249,204,48)" rx="2" ry="2" />
+<text  x="75.24" y="415.5" ></text>
+</g>
+<g >
+<title>std::function&lt;void  (20,037,682 samples, 2.07%)</title><rect x="467.7" y="485" width="16.1" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="470.67" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;::_Vector_impl_data::_Vector_impl_data (152,701 samples, 0.02%)</title><rect x="514.4" y="501" width="0.1" height="15.0" fill="rgb(244,180,43)" rx="2" ry="2" />
+<text  x="517.38" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumSignalParametersDataFrame::~LteSpectrumSignalParametersDataFrame (2,628,658 samples, 0.27%)</title><rect x="773.8" y="421" width="2.1" height="15.0" fill="rgb(242,174,41)" rx="2" ry="2" />
+<text  x="776.77" y="431.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Ptr&lt;ns3::Object&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Object&gt; &gt; &gt;::~vector (266,121 samples, 0.03%)</title><rect x="502.5" y="373" width="0.2" height="15.0" fill="rgb(223,83,19)" rx="2" ry="2" />
+<text  x="505.53" y="383.5" ></text>
+</g>
+<g >
+<title>void std::destroy_at&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; (4,680,368 samples, 0.48%)</title><rect x="545.3" y="197" width="3.8" height="15.0" fill="rgb(224,88,21)" rx="2" ry="2" />
+<text  x="548.34" y="207.5" ></text>
+</g>
+<g >
+<title>__dynamic_cast (254,736 samples, 0.03%)</title><rect x="89.9" y="517" width="0.2" height="15.0" fill="rgb(227,102,24)" rx="2" ry="2" />
+<text  x="92.91" y="527.5" ></text>
+</g>
+<g >
+<title>unsigned int* std::fill_n&lt;unsigned int*, unsigned long, unsigned int&gt; (716,615 samples, 0.07%)</title><rect x="695.9" y="421" width="0.5" height="15.0" fill="rgb(219,67,16)" rx="2" ry="2" />
+<text  x="698.86" y="431.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::fill_n&lt;unsigned char*, unsigned long, unsigned char&gt; (682,457 samples, 0.07%)</title><rect x="460.4" y="197" width="0.5" height="15.0" fill="rgb(211,28,6)" rx="2" ry="2" />
+<text  x="463.39" y="207.5" ></text>
+</g>
+<g >
+<title>std::_List_iterator&lt;ns3::UlDciLteControlMessage&gt;::operator* (176,788 samples, 0.02%)</title><rect x="391.6" y="549" width="0.2" height="15.0" fill="rgb(253,224,53)" rx="2" ry="2" />
+<text  x="394.65" y="559.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::MobilityModel const&gt;::Acquire (164,722 samples, 0.02%)</title><rect x="740.8" y="501" width="0.2" height="15.0" fill="rgb(237,148,35)" rx="2" ry="2" />
+<text  x="743.82" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::_Vector_base (125,979 samples, 0.01%)</title><rect x="440.6" y="245" width="0.1" height="15.0" fill="rgb(219,65,15)" rx="2" ry="2" />
+<text  x="443.57" y="255.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt;::vector (297,291 samples, 0.03%)</title><rect x="130.8" y="501" width="0.2" height="15.0" fill="rgb(218,61,14)" rx="2" ry="2" />
+<text  x="133.79" y="511.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned int, std::allocator&lt;unsigned int&gt; &gt;::vector (2,570,731 samples, 0.27%)</title><rect x="694.8" y="501" width="2.1" height="15.0" fill="rgb(229,111,26)" rx="2" ry="2" />
+<text  x="697.83" y="511.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;::list (4,322,765 samples, 0.45%)</title><rect x="285.4" y="533" width="3.5" height="15.0" fill="rgb(231,121,29)" rx="2" ry="2" />
+<text  x="288.38" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_Vector_impl::_Vector_impl (148,226 samples, 0.02%)</title><rect x="125.3" y="229" width="0.2" height="15.0" fill="rgb(226,98,23)" rx="2" ry="2" />
+<text  x="128.35" y="239.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt;::_M_addr (195,800 samples, 0.02%)</title><rect x="723.7" y="437" width="0.1" height="15.0" fill="rgb(209,18,4)" rx="2" ry="2" />
+<text  x="726.66" y="447.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::_M_clear (5,410,131 samples, 0.56%)</title><rect x="544.8" y="229" width="4.3" height="15.0" fill="rgb(217,56,13)" rx="2" ry="2" />
+<text  x="547.75" y="239.5" ></text>
+</g>
+<g >
+<title>void ns3::Callback&lt;void, ns3::SpectrumValue const&amp;&gt;::Callback&lt;void  (18,776,737 samples, 1.94%)</title><rect x="468.7" y="421" width="15.1" height="15.0" fill="rgb(221,75,18)" rx="2" ry="2" />
+<text  x="471.68" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Function_handler&lt;void  (200,664 samples, 0.02%)</title><rect x="64.8" y="405" width="0.1" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="67.77" y="415.5" ></text>
+</g>
+<g >
+<title>void std::_Function_base::_Base_manager&lt;std::_Bind&lt;void  (495,402 samples, 0.05%)</title><rect x="340.8" y="437" width="0.4" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="343.78" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue&gt; ns3::Create&lt;ns3::SpectrumValue, ns3::Ptr&lt;ns3::SpectrumModel const&gt; const&amp;&gt; (997,289 samples, 0.10%)</title><rect x="71.2" y="437" width="0.8" height="15.0" fill="rgb(246,189,45)" rx="2" ry="2" />
+<text  x="74.24" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Function_handler&lt;void  (1,211,161 samples, 0.12%)</title><rect x="440.0" y="421" width="0.9" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="442.96" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::MemberLteFfrSapProvider&lt;ns3::LteFrNoOpAlgorithm&gt;::ReportUlCqiInfo (231,712 samples, 0.02%)</title><rect x="103.9" y="469" width="0.2" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="106.93" y="479.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__enable_if&lt;std::__is_integer&lt;int&gt;::__value, double&gt;::__type std::sqrt&lt;int&gt; (152,846 samples, 0.02%)</title><rect x="486.9" y="517" width="0.1" height="15.0" fill="rgb(213,40,9)" rx="2" ry="2" />
+<text  x="489.92" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_Vector_base (344,519 samples, 0.04%)</title><rect x="592.8" y="229" width="0.2" height="15.0" fill="rgb(205,2,0)" rx="2" ry="2" />
+<text  x="595.76" y="239.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;* std::__niter_base&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;*, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; (393,544 samples, 0.04%)</title><rect x="351.7" y="469" width="0.3" height="15.0" fill="rgb(215,48,11)" rx="2" ry="2" />
+<text  x="354.67" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::operator*= (1,505,163 samples, 0.16%)</title><rect x="745.1" y="549" width="1.2" height="15.0" fill="rgb(222,79,18)" rx="2" ry="2" />
+<text  x="748.13" y="559.5" ></text>
+</g>
+<g >
+<title>std::_List_const_iterator&lt;ns3::Callback&lt;void, unsigned short, unsigned char, unsigned int, unsigned long&gt; &gt;::_List_const_iterator (203,852 samples, 0.02%)</title><rect x="428.4" y="229" width="0.1" height="15.0" fill="rgb(237,149,35)" rx="2" ry="2" />
+<text  x="431.37" y="239.5" ></text>
+</g>
+<g >
+<title>ns3::CallbackImpl&lt;void, ns3::UlInfoListElement_s&gt;::operator (2,539,404 samples, 0.26%)</title><rect x="438.9" y="533" width="2.0" height="15.0" fill="rgb(230,118,28)" rx="2" ry="2" />
+<text  x="441.90" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_Vector_base (187,036 samples, 0.02%)</title><rect x="718.4" y="437" width="0.1" height="15.0" fill="rgb(237,150,35)" rx="2" ry="2" />
+<text  x="721.35" y="447.5" ></text>
+</g>
+<g >
+<title>void std::_Function_base::_Base_manager&lt;std::_Bind&lt;void  (675,431 samples, 0.07%)</title><rect x="307.4" y="453" width="0.5" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="310.38" y="463.5" ></text>
+</g>
+<g >
+<title>std::operator== (189,080 samples, 0.02%)</title><rect x="665.6" y="469" width="0.2" height="15.0" fill="rgb(229,110,26)" rx="2" ry="2" />
+<text  x="668.62" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_lower_bound (193,007 samples, 0.02%)</title><rect x="109.0" y="421" width="0.2" height="15.0" fill="rgb(229,113,27)" rx="2" ry="2" />
+<text  x="112.03" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue&gt;::operator* (277,433 samples, 0.03%)</title><rect x="713.5" y="501" width="0.2" height="15.0" fill="rgb(243,176,42)" rx="2" ry="2" />
+<text  x="716.49" y="511.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::_M_default_initialize (160,457 samples, 0.02%)</title><rect x="71.8" y="389" width="0.1" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="74.78" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;* std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_create_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; const&amp;&gt; (156,128 samples, 0.02%)</title><rect x="667.1" y="197" width="0.1" height="15.0" fill="rgb(227,104,24)" rx="2" ry="2" />
+<text  x="670.07" y="207.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;::~list (234,294 samples, 0.02%)</title><rect x="291.8" y="469" width="0.2" height="15.0" fill="rgb(217,57,13)" rx="2" ry="2" />
+<text  x="294.83" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy* ns3::PeekPointer&lt;ns3::LteEnbPhy&gt; (151,158 samples, 0.02%)</title><rect x="469.2" y="389" width="0.1" height="15.0" fill="rgb(221,77,18)" rx="2" ry="2" />
+<text  x="472.19" y="399.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::operator[] (2,456,594 samples, 0.25%)</title><rect x="242.5" y="485" width="2.0" height="15.0" fill="rgb(219,66,15)" rx="2" ry="2" />
+<text  x="245.49" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::BuildDataListElement_s, std::allocator&lt;ns3::BuildDataListElement_s&gt; &gt;::max_size (153,400 samples, 0.02%)</title><rect x="202.7" y="437" width="0.1" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="205.67" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_Rb_tree (4,812,209 samples, 0.50%)</title><rect x="236.7" y="469" width="3.9" height="15.0" fill="rgb(223,86,20)" rx="2" ry="2" />
+<text  x="239.73" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;bool, std::allocator&lt;bool&gt; &gt;::resize (149,910 samples, 0.02%)</title><rect x="176.1" y="453" width="0.1" height="15.0" fill="rgb(219,68,16)" rx="2" ry="2" />
+<text  x="179.10" y="463.5" ></text>
+</g>
+<g >
+<title>std::function&lt;void  (3,263,000 samples, 0.34%)</title><rect x="418.8" y="437" width="2.6" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="421.77" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::HigherLayerSelected_s* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;ns3::HigherLayerSelected_s const*, std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt; &gt;, ns3::HigherLayerSelected_s*, ns3::HigherLayerSelected_s&gt; (860,392 samples, 0.09%)</title><rect x="124.9" y="357" width="0.7" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="127.86" y="367.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;0ul, ns3::LteSpectrumPhy*&gt;::_Tuple_impl&lt;ns3::LteSpectrumPhy*&amp;&gt; (205,546 samples, 0.02%)</title><rect x="63.4" y="437" width="0.1" height="15.0" fill="rgb(216,52,12)" rx="2" ry="2" />
+<text  x="66.35" y="447.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;int&gt; &gt;::allocate (177,537 samples, 0.02%)</title><rect x="699.8" y="485" width="0.2" height="15.0" fill="rgb(248,200,47)" rx="2" ry="2" />
+<text  x="702.81" y="495.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt; &gt;::allocate (195,540 samples, 0.02%)</title><rect x="83.1" y="357" width="0.1" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="86.06" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::LtePhy::GetControlMessages[abi:cxx11] (517,990 samples, 0.05%)</title><rect x="117.6" y="533" width="0.4" height="15.0" fill="rgb(250,208,49)" rx="2" ry="2" />
+<text  x="120.58" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::int64x64_t::int64x64_t (1,365,624 samples, 0.14%)</title><rect x="389.9" y="517" width="1.1" height="15.0" fill="rgb(240,161,38)" rx="2" ry="2" />
+<text  x="392.92" y="527.5" ></text>
+</g>
+<g >
+<title>std::map&lt;ns3::LteSpectrumModelId, ns3::Ptr&lt;ns3::SpectrumModel&gt;, std::less&lt;ns3::LteSpectrumModelId&gt;, std::allocator&lt;std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt; &gt; &gt;::find (220,015 samples, 0.02%)</title><rect x="111.4" y="453" width="0.2" height="15.0" fill="rgb(226,100,24)" rx="2" ry="2" />
+<text  x="114.45" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::LteRlcSm::ReportBufferStatus (1,286,769 samples, 0.13%)</title><rect x="552.0" y="261" width="1.0" height="15.0" fill="rgb(224,89,21)" rx="2" ry="2" />
+<text  x="554.98" y="271.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;::_M_clear (433,351 samples, 0.04%)</title><rect x="290.9" y="373" width="0.3" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="293.89" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;0ul, ns3::LteEnbPhy*, ns3::Ptr&lt;ns3::PacketBurst&gt; &gt;::_M_head (204,180 samples, 0.02%)</title><rect x="752.1" y="565" width="0.1" height="15.0" fill="rgb(213,40,9)" rx="2" ry="2" />
+<text  x="755.08" y="575.5" ></text>
+</g>
+<g >
+<title>std::_Function_handler&lt;void  (34,696,291 samples, 3.58%)</title><rect x="577.5" y="469" width="27.9" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="580.46" y="479.5" >s..</text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; &gt; &gt;::_M_ptr (200,206 samples, 0.02%)</title><rect x="455.3" y="277" width="0.2" height="15.0" fill="rgb(226,97,23)" rx="2" ry="2" />
+<text  x="458.31" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::FfMacSchedSapUser::SchedDlConfigIndParameters::SchedDlConfigIndParameters (5,344,608 samples, 0.55%)</title><rect x="140.8" y="469" width="4.3" height="15.0" fill="rgb(208,15,3)" rx="2" ry="2" />
+<text  x="143.80" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::MobilityModel const&gt;::Ptr&lt;ns3::MobilityModel&gt; (387,700 samples, 0.04%)</title><rect x="742.5" y="549" width="0.3" height="15.0" fill="rgb(233,130,31)" rx="2" ry="2" />
+<text  x="745.46" y="559.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt;::_M_valptr (157,233 samples, 0.02%)</title><rect x="503.3" y="453" width="0.1" height="15.0" fill="rgb(249,202,48)" rx="2" ry="2" />
+<text  x="506.31" y="463.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::end (241,920 samples, 0.02%)</title><rect x="491.9" y="533" width="0.2" height="15.0" fill="rgb(211,29,6)" rx="2" ry="2" />
+<text  x="494.95" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::MemberLteCcmMacSapUser&lt;ns3::NoOpComponentCarrierManager&gt;::NotifyTxOpportunity (1,376,216 samples, 0.14%)</title><rect x="15.9" y="453" width="1.1" height="15.0" fill="rgb(205,3,0)" rx="2" ry="2" />
+<text  x="18.88" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::TypeId::~TypeId (294,683 samples, 0.03%)</title><rect x="544.0" y="293" width="0.3" height="15.0" fill="rgb(232,125,30)" rx="2" ry="2" />
+<text  x="547.03" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::LteRadioBearerTag::GetTypeId (197,030 samples, 0.02%)</title><rect x="490.7" y="501" width="0.2" height="15.0" fill="rgb(247,197,47)" rx="2" ry="2" />
+<text  x="493.71" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_Vector_base (183,612 samples, 0.02%)</title><rect x="688.9" y="421" width="0.1" height="15.0" fill="rgb(205,2,0)" rx="2" ry="2" />
+<text  x="691.88" y="431.5" ></text>
+</g>
+<g >
+<title>__cxxabiv1::__si_class_type_info::__do_dyncast (350,826 samples, 0.04%)</title><rect x="345.2" y="485" width="0.3" height="15.0" fill="rgb(219,65,15)" rx="2" ry="2" />
+<text  x="348.24" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::~SpectrumValue (202,197 samples, 0.02%)</title><rect x="728.9" y="453" width="0.1" height="15.0" fill="rgb(247,193,46)" rx="2" ry="2" />
+<text  x="731.89" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Packet&gt;::~Ptr (146,523 samples, 0.02%)</title><rect x="155.1" y="389" width="0.1" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="158.07" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;&amp; std::__get_helper&lt;3ul, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt; (236,255 samples, 0.02%)</title><rect x="756.9" y="581" width="0.2" height="15.0" fill="rgb(217,56,13)" rx="2" ry="2" />
+<text  x="759.93" y="591.5" ></text>
+</g>
+<g >
+<title>void std::__invoke_impl&lt;void, std::_Bind&lt;void  (2,105,662 samples, 0.22%)</title><rect x="15.5" y="645" width="1.6" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="18.45" y="655.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy::SetDownlinkSubChannels (9,637,583 samples, 0.99%)</title><rect x="296.8" y="533" width="7.7" height="15.0" fill="rgb(207,12,2)" rx="2" ry="2" />
+<text  x="299.76" y="543.5" ></text>
+</g>
+<g >
+<title>std::less&lt;unsigned short&gt;::operator (223,783 samples, 0.02%)</title><rect x="396.0" y="501" width="0.2" height="15.0" fill="rgb(207,11,2)" rx="2" ry="2" />
+<text  x="399.03" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteUePhy&gt;::Ptr (764,206 samples, 0.08%)</title><rect x="578.9" y="405" width="0.6" height="15.0" fill="rgb(241,169,40)" rx="2" ry="2" />
+<text  x="581.88" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;* std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_create_node&lt;unsigned int const&amp;, ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp;&gt; (669,703 samples, 0.07%)</title><rect x="331.6" y="437" width="0.5" height="15.0" fill="rgb(245,186,44)" rx="2" ry="2" />
+<text  x="334.57" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_Auto_node::_Auto_node&lt;std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (940,707 samples, 0.10%)</title><rect x="660.9" y="405" width="0.8" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="663.89" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumValueHelper::CreateUlTxPowerSpectralDensity (5,829,900 samples, 0.60%)</title><rect x="674.4" y="517" width="4.7" height="15.0" fill="rgb(253,224,53)" rx="2" ry="2" />
+<text  x="677.41" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::IidManager::GetParent (309,404 samples, 0.03%)</title><rect x="449.8" y="229" width="0.2" height="15.0" fill="rgb(217,59,14)" rx="2" ry="2" />
+<text  x="452.76" y="239.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::lower_bound (308,342 samples, 0.03%)</title><rect x="659.6" y="485" width="0.3" height="15.0" fill="rgb(234,137,32)" rx="2" ry="2" />
+<text  x="662.62" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::_S_check_init_len (269,236 samples, 0.03%)</title><rect x="302.1" y="437" width="0.2" height="15.0" fill="rgb(233,130,31)" rx="2" ry="2" />
+<text  x="305.09" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Time::GetSeconds (2,106,405 samples, 0.22%)</title><rect x="405.6" y="517" width="1.7" height="15.0" fill="rgb(249,203,48)" rx="2" ry="2" />
+<text  x="408.62" y="527.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::back (308,674 samples, 0.03%)</title><rect x="396.6" y="517" width="0.2" height="15.0" fill="rgb(233,130,31)" rx="2" ry="2" />
+<text  x="399.58" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt;::Ptr (242,157 samples, 0.02%)</title><rect x="633.3" y="533" width="0.2" height="15.0" fill="rgb(219,67,16)" rx="2" ry="2" />
+<text  x="636.34" y="543.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt;::at (160,105 samples, 0.02%)</title><rect x="621.0" y="533" width="0.1" height="15.0" fill="rgb(248,200,47)" rx="2" ry="2" />
+<text  x="623.97" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::RarLteControlMessage::RarLteControlMessage (154,430 samples, 0.02%)</title><rect x="166.9" y="437" width="0.1" height="15.0" fill="rgb(228,110,26)" rx="2" ry="2" />
+<text  x="169.88" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::~_Vector_base (201,377 samples, 0.02%)</title><rect x="717.7" y="421" width="0.2" height="15.0" fill="rgb(223,86,20)" rx="2" ry="2" />
+<text  x="720.73" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Node&gt;::Ptr (264,636 samples, 0.03%)</title><rect x="643.4" y="501" width="0.2" height="15.0" fill="rgb(237,147,35)" rx="2" ry="2" />
+<text  x="646.36" y="511.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::_M_clear (1,273,753 samples, 0.13%)</title><rect x="75.7" y="341" width="1.0" height="15.0" fill="rgb(217,56,13)" rx="2" ry="2" />
+<text  x="78.68" y="351.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::operator= (396,148 samples, 0.04%)</title><rect x="304.2" y="517" width="0.3" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="307.19" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::EnbMemberLteEnbPhySapProvider::SendLteControlMessage (3,042,329 samples, 0.31%)</title><rect x="148.3" y="453" width="2.4" height="15.0" fill="rgb(253,222,53)" rx="2" ry="2" />
+<text  x="151.28" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Function_handler&lt;void  (324,769 samples, 0.03%)</title><rect x="611.9" y="469" width="0.3" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="614.94" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Object::Check (206,111 samples, 0.02%)</title><rect x="450.5" y="261" width="0.2" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="453.52" y="271.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::_M_get_insert_unique_pos (159,018 samples, 0.02%)</title><rect x="192.4" y="437" width="0.2" height="15.0" fill="rgb(230,115,27)" rx="2" ry="2" />
+<text  x="195.44" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::~PacketBurst (1,161,332 samples, 0.12%)</title><rect x="454.0" y="229" width="0.9" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="456.99" y="239.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::end (181,482 samples, 0.02%)</title><rect x="680.6" y="517" width="0.2" height="15.0" fill="rgb(214,44,10)" rx="2" ry="2" />
+<text  x="683.63" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Function_base::_Base_manager&lt;ns3::Callback&lt;void, ns3::Ptr&lt;ns3::Packet&gt; &gt;::Callback&lt;void  (426,263 samples, 0.04%)</title><rect x="422.0" y="485" width="0.3" height="15.0" fill="rgb(205,0,0)" rx="2" ry="2" />
+<text  x="424.97" y="495.5" ></text>
+</g>
+<g >
+<title>unsigned short* std::__uninitialized_copy_a&lt;std::move_iterator&lt;unsigned short*&gt;, unsigned short*, unsigned short&gt; (728,775 samples, 0.08%)</title><rect x="253.1" y="437" width="0.5" height="15.0" fill="rgb(225,96,22)" rx="2" ry="2" />
+<text  x="256.06" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::~PacketBurst (1,475,273 samples, 0.15%)</title><rect x="76.7" y="373" width="1.2" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="79.70" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultDeleter&lt;ns3::SpectrumValue&gt;::Delete (235,829 samples, 0.02%)</title><rect x="656.0" y="485" width="0.2" height="15.0" fill="rgb(222,79,19)" rx="2" ry="2" />
+<text  x="659.02" y="495.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;ns3::FfMacSchedSapProvider::SchedUlCqiInfoReqParameters&gt; &gt;::construct&lt;ns3::FfMacSchedSapProvider::SchedUlCqiInfoReqParameters, ns3::FfMacSchedSapProvider::SchedUlCqiInfoReqParameters const&amp;&gt; (480,241 samples, 0.05%)</title><rect x="473.8" y="277" width="0.4" height="15.0" fill="rgb(205,0,0)" rx="2" ry="2" />
+<text  x="476.84" y="287.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::lower_bound (2,631,944 samples, 0.27%)</title><rect x="273.3" y="453" width="2.2" height="15.0" fill="rgb(254,228,54)" rx="2" ry="2" />
+<text  x="276.34" y="463.5" ></text>
+</g>
+<g >
+<title>int const&amp; std::min&lt;int&gt; (162,428 samples, 0.02%)</title><rect x="425.6" y="213" width="0.2" height="15.0" fill="rgb(250,207,49)" rx="2" ry="2" />
+<text  x="428.63" y="223.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_S_key (573,784 samples, 0.06%)</title><rect x="274.2" y="421" width="0.4" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="277.16" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::Now (284,192 samples, 0.03%)</title><rect x="607.3" y="517" width="0.3" height="15.0" fill="rgb(241,168,40)" rx="2" ry="2" />
+<text  x="610.35" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Bind&lt;void  (889,944 samples, 0.09%)</title><rect x="44.1" y="645" width="0.8" height="15.0" fill="rgb(253,221,52)" rx="2" ry="2" />
+<text  x="47.14" y="655.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;int const, double&gt; &gt; std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_M_emplace_hint_unique&lt;std::pair&lt;int, double&gt; &gt; (385,367 samples, 0.04%)</title><rect x="110.9" y="485" width="0.3" height="15.0" fill="rgb(237,149,35)" rx="2" ry="2" />
+<text  x="113.86" y="495.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt; &gt;::find (277,435 samples, 0.03%)</title><rect x="188.9" y="485" width="0.3" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="191.94" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::AntennaModel&gt;::Acquire (338,066 samples, 0.03%)</title><rect x="669.0" y="517" width="0.3" height="15.0" fill="rgb(205,4,1)" rx="2" ry="2" />
+<text  x="671.99" y="527.5" ></text>
+</g>
+<g >
+<title>cfree (157,707 samples, 0.02%)</title><rect x="716.8" y="325" width="0.2" height="15.0" fill="rgb(223,86,20)" rx="2" ry="2" />
+<text  x="719.83" y="335.5" ></text>
+</g>
+<g >
+<title>void std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::_M_construct_node&lt;std::piecewise_construct_t const&amp;, std::tuple&lt;unsigned short const&amp;&gt;, std::tuple&lt;&gt; &gt; (1,034,007 samples, 0.11%)</title><rect x="191.2" y="421" width="0.8" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="194.20" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::int64x64_t::int64x64_t (150,413 samples, 0.02%)</title><rect x="121.0" y="485" width="0.1" height="15.0" fill="rgb(240,161,38)" rx="2" ry="2" />
+<text  x="123.99" y="495.5" ></text>
+</g>
+<g >
+<title>std::operator== (196,279 samples, 0.02%)</title><rect x="166.0" y="357" width="0.1" height="15.0" fill="rgb(229,110,26)" rx="2" ry="2" />
+<text  x="168.97" y="367.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;unsigned char*, unsigned char&gt; (220,248 samples, 0.02%)</title><rect x="255.2" y="325" width="0.2" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="258.22" y="335.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::_M_check_len (170,871 samples, 0.02%)</title><rect x="591.2" y="245" width="0.2" height="15.0" fill="rgb(229,114,27)" rx="2" ry="2" />
+<text  x="594.22" y="255.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::TbId_t, std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::_Select1st&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::find (1,490,594 samples, 0.15%)</title><rect x="507.2" y="533" width="1.2" height="15.0" fill="rgb(215,50,12)" rx="2" ry="2" />
+<text  x="510.16" y="543.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;* std::__copy_move&lt;true, false, std::random_access_iterator_tag&gt;::__copy_m&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;*, std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;*&gt; (603,213 samples, 0.06%)</title><rect x="357.2" y="437" width="0.4" height="15.0" fill="rgb(209,21,5)" rx="2" ry="2" />
+<text  x="360.16" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Time::GetTimeStep (222,929 samples, 0.02%)</title><rect x="664.8" y="469" width="0.2" height="15.0" fill="rgb(205,0,0)" rx="2" ry="2" />
+<text  x="667.80" y="479.5" ></text>
+</g>
+<g >
+<title>unsigned int&amp; std::__get_helper&lt;2ul, unsigned int&gt; (546,981 samples, 0.06%)</title><rect x="755.8" y="581" width="0.5" height="15.0" fill="rgb(211,31,7)" rx="2" ry="2" />
+<text  x="758.83" y="591.5" ></text>
+</g>
+<g >
+<title>std::_Bit_const_iterator::_M_const_cast (177,400 samples, 0.02%)</title><rect x="197.1" y="453" width="0.1" height="15.0" fill="rgb(219,68,16)" rx="2" ry="2" />
+<text  x="200.08" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt;::_S_key (463,094 samples, 0.05%)</title><rect x="171.5" y="405" width="0.4" height="15.0" fill="rgb(229,113,27)" rx="2" ry="2" />
+<text  x="174.52" y="415.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Callback&lt;void, ns3::Ptr&lt;ns3::PacketBurst const&gt; &gt;, std::allocator&lt;ns3::Callback&lt;void, ns3::Ptr&lt;ns3::PacketBurst const&gt; &gt; &gt; &gt;::begin (162,620 samples, 0.02%)</title><rect x="90.4" y="517" width="0.1" height="15.0" fill="rgb(243,175,41)" rx="2" ry="2" />
+<text  x="93.42" y="527.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;::~pair (198,551 samples, 0.02%)</title><rect x="233.0" y="357" width="0.1" height="15.0" fill="rgb(226,100,24)" rx="2" ry="2" />
+<text  x="235.95" y="367.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::back (166,101 samples, 0.02%)</title><rect x="590.0" y="245" width="0.2" height="15.0" fill="rgb(233,130,31)" rx="2" ry="2" />
+<text  x="593.05" y="255.5" ></text>
+</g>
+<g >
+<title>std::less&lt;unsigned short&gt;::operator (282,929 samples, 0.03%)</title><rect x="466.2" y="485" width="0.2" height="15.0" fill="rgb(207,11,2)" rx="2" ry="2" />
+<text  x="469.16" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt;::vector (154,721 samples, 0.02%)</title><rect x="461.6" y="229" width="0.1" height="15.0" fill="rgb(248,198,47)" rx="2" ry="2" />
+<text  x="464.55" y="239.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; std::map&lt;ns3::TbId_t, ns3::tbInfo_t, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::emplace_hint&lt;std::pair&lt;ns3::TbId_t, ns3::tbInfo_t&gt; &gt; (2,992,854 samples, 0.31%)</title><rect x="526.3" y="325" width="2.4" height="15.0" fill="rgb(245,186,44)" rx="2" ry="2" />
+<text  x="529.26" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumSignalParameters::SpectrumSignalParameters (580,700 samples, 0.06%)</title><rect x="113.8" y="437" width="0.5" height="15.0" fill="rgb(219,67,16)" rx="2" ry="2" />
+<text  x="116.83" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::ObjectDeleter::Delete (1,607,547 samples, 0.17%)</title><rect x="634.5" y="389" width="1.3" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="637.53" y="399.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt;::vector (1,506,714 samples, 0.16%)</title><rect x="143.9" y="453" width="1.2" height="15.0" fill="rgb(218,61,14)" rx="2" ry="2" />
+<text  x="146.89" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbMac::DoSubframeIndication (19,358,790 samples, 2.00%)</title><rect x="19.6" y="565" width="15.5" height="15.0" fill="rgb(248,200,47)" rx="2" ry="2" />
+<text  x="22.57" y="575.5" ></text>
+</g>
+<g >
+<title>malloc (197,254 samples, 0.02%)</title><rect x="446.4" y="261" width="0.1" height="15.0" fill="rgb(230,119,28)" rx="2" ry="2" />
+<text  x="449.36" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::EnbMacMemberLteMacSapProvider&lt;ns3::NoOpComponentCarrierManager&gt;::ReportBufferStatus (747,299 samples, 0.08%)</title><rect x="12.5" y="389" width="0.6" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="15.49" y="399.5" ></text>
+</g>
+<g >
+<title>operator new (372,038 samples, 0.04%)</title><rect x="557.9" y="181" width="0.3" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="560.93" y="191.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;::empty (324,331 samples, 0.03%)</title><rect x="488.9" y="533" width="0.2" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="491.89" y="543.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;*, std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt; &gt; std::__copy_move_a&lt;true, __gnu_cxx::__normal_iterator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;*, std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;*, std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt; &gt; &gt; (1,076,159 samples, 0.11%)</title><rect x="357.0" y="485" width="0.9" height="15.0" fill="rgb(226,96,23)" rx="2" ry="2" />
+<text  x="360.03" y="495.5" ></text>
+</g>
+<g >
+<title>bool __gnu_cxx::operator==&lt;ns3::DlInfoListElement_s*, std::vector&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt; &gt; (230,973 samples, 0.02%)</title><rect x="207.6" y="421" width="0.2" height="15.0" fill="rgb(238,154,36)" rx="2" ry="2" />
+<text  x="210.60" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt; &gt; &gt;::_M_lower_bound (464,204 samples, 0.05%)</title><rect x="186.7" y="453" width="0.3" height="15.0" fill="rgb(243,176,42)" rx="2" ry="2" />
+<text  x="189.66" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::HarqStatus_e* std::__uninitialized_copy&lt;true&gt;::__uninit_copy&lt;std::move_iterator&lt;ns3::DlInfoListElement_s::HarqStatus_e*&gt;, ns3::DlInfoListElement_s::HarqStatus_e*&gt; (347,263 samples, 0.04%)</title><rect x="511.3" y="469" width="0.3" height="15.0" fill="rgb(210,24,5)" rx="2" ry="2" />
+<text  x="514.33" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt;::_S_key (208,515 samples, 0.02%)</title><rect x="568.2" y="245" width="0.2" height="15.0" fill="rgb(224,91,21)" rx="2" ry="2" />
+<text  x="571.22" y="255.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;*, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; std::move&lt;__gnu_cxx::__normal_iterator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;*, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;*, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; &gt; (3,099,663 samples, 0.32%)</title><rect x="349.6" y="501" width="2.5" height="15.0" fill="rgb(218,63,15)" rx="2" ry="2" />
+<text  x="352.59" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::FfMacSchedSapProvider::SchedDlCqiInfoReqParameters::SchedDlCqiInfoReqParameters (527,752 samples, 0.05%)</title><rect x="130.6" y="517" width="0.4" height="15.0" fill="rgb(253,222,53)" rx="2" ry="2" />
+<text  x="133.61" y="527.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::max_size (189,176 samples, 0.02%)</title><rect x="102.2" y="405" width="0.2" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="105.23" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt; &gt; &gt;::_M_lower_bound (925,594 samples, 0.10%)</title><rect x="170.1" y="421" width="0.7" height="15.0" fill="rgb(208,18,4)" rx="2" ry="2" />
+<text  x="173.09" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::LteUePhy::ReceivePss (833,626 samples, 0.09%)</title><rect x="725.9" y="341" width="0.7" height="15.0" fill="rgb(247,196,46)" rx="2" ry="2" />
+<text  x="728.89" y="351.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::_M_clear (3,222,559 samples, 0.33%)</title><rect x="451.3" y="213" width="2.6" height="15.0" fill="rgb(217,56,13)" rx="2" ry="2" />
+<text  x="454.30" y="223.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::MobilityModel&gt;::operator (237,842 samples, 0.02%)</title><rect x="741.1" y="517" width="0.1" height="15.0" fill="rgb(206,8,1)" rx="2" ry="2" />
+<text  x="744.05" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_lower_bound (1,279,264 samples, 0.13%)</title><rect x="663.3" y="405" width="1.0" height="15.0" fill="rgb(229,113,27)" rx="2" ry="2" />
+<text  x="666.31" y="415.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;ns3::RlcPduListElement_s&gt;::allocate (190,161 samples, 0.02%)</title><rect x="212.9" y="341" width="0.1" height="15.0" fill="rgb(225,94,22)" rx="2" ry="2" />
+<text  x="215.85" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::LteChunkProcessor::Start (1,058,141 samples, 0.11%)</title><rect x="716.2" y="501" width="0.9" height="15.0" fill="rgb(227,103,24)" rx="2" ry="2" />
+<text  x="719.22" y="511.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt;::construct&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; const&amp;&gt; (406,463 samples, 0.04%)</title><rect x="623.6" y="517" width="0.3" height="15.0" fill="rgb(217,55,13)" rx="2" ry="2" />
+<text  x="626.61" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::Angles::Angles (1,131,340 samples, 0.12%)</title><rect x="65.5" y="501" width="0.9" height="15.0" fill="rgb(254,226,54)" rx="2" ry="2" />
+<text  x="68.52" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteSpectrumPhy&gt;::operator* (166,039 samples, 0.02%)</title><rect x="605.1" y="341" width="0.2" height="15.0" fill="rgb(218,61,14)" rx="2" ry="2" />
+<text  x="608.13" y="351.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::lower_bound (152,705 samples, 0.02%)</title><rect x="116.1" y="389" width="0.1" height="15.0" fill="rgb(254,228,54)" rx="2" ry="2" />
+<text  x="119.06" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_Vector_impl::_Vector_impl (212,001 samples, 0.02%)</title><rect x="595.9" y="117" width="0.2" height="15.0" fill="rgb(226,98,23)" rx="2" ry="2" />
+<text  x="598.89" y="127.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;::vector (2,102,576 samples, 0.22%)</title><rect x="352.6" y="485" width="1.7" height="15.0" fill="rgb(249,203,48)" rx="2" ry="2" />
+<text  x="355.61" y="495.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::push_back (691,803 samples, 0.07%)</title><rect x="419.6" y="341" width="0.6" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="422.65" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy::StartFrame (38,351,386 samples, 3.95%)</title><rect x="91.7" y="565" width="30.8" height="15.0" fill="rgb(209,22,5)" rx="2" ry="2" />
+<text  x="94.67" y="575.5" >ns..</text>
+</g>
+<g >
+<title>ns3::SimpleUeComponentCarrierManager::DoTransmitPdu (7,667,549 samples, 0.79%)</title><rect x="560.7" y="245" width="6.1" height="15.0" fill="rgb(239,160,38)" rx="2" ry="2" />
+<text  x="563.65" y="255.5" ></text>
+</g>
+<g >
+<title>std::_Head_base&lt;2ul, unsigned int, false&gt;::_Head_base&lt;unsigned int&amp;&gt; (281,440 samples, 0.03%)</title><rect x="710.0" y="373" width="0.2" height="15.0" fill="rgb(209,19,4)" rx="2" ry="2" />
+<text  x="712.95" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::TbId_t, std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::_Select1st&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::_Auto_node::_M_key (372,232 samples, 0.04%)</title><rect x="385.5" y="485" width="0.3" height="15.0" fill="rgb(214,44,10)" rx="2" ry="2" />
+<text  x="388.51" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Object::GetInstanceTypeId (156,330 samples, 0.02%)</title><rect x="372.7" y="469" width="0.1" height="15.0" fill="rgb(230,117,28)" rx="2" ry="2" />
+<text  x="375.65" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::CqiListElement_s::~CqiListElement_s (894,967 samples, 0.09%)</title><rect x="255.0" y="389" width="0.7" height="15.0" fill="rgb(225,92,22)" rx="2" ry="2" />
+<text  x="258.00" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::MakeEvent&lt;void  (2,105,662 samples, 0.22%)</title><rect x="15.5" y="709" width="1.6" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="18.45" y="719.5" ></text>
+</g>
+<g >
+<title>std::_Bvector_base&lt;std::allocator&lt;bool&gt; &gt;::_M_move_data (305,258 samples, 0.03%)</title><rect x="196.2" y="469" width="0.2" height="15.0" fill="rgb(244,182,43)" rx="2" ry="2" />
+<text  x="199.20" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Function_base::_Base_manager&lt;std::_Bind&lt;void  (145,405 samples, 0.01%)</title><rect x="308.5" y="373" width="0.1" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="311.46" y="383.5" ></text>
+</g>
+<g >
+<title>cfree (124,394 samples, 0.01%)</title><rect x="776.2" y="277" width="0.1" height="15.0" fill="rgb(223,86,20)" rx="2" ry="2" />
+<text  x="779.16" y="287.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;ns3::DlDciListElement_s, std::allocator&lt;ns3::DlDciListElement_s&gt; &gt; &gt; &gt;::_M_valptr (232,350 samples, 0.02%)</title><rect x="187.3" y="421" width="0.2" height="15.0" fill="rgb(222,81,19)" rx="2" ry="2" />
+<text  x="190.35" y="431.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy_aux&lt;false&gt;::__destroy&lt;ns3::CqiListElement_s*&gt; (933,761 samples, 0.10%)</title><rect x="255.0" y="437" width="0.7" height="15.0" fill="rgb(229,111,26)" rx="2" ry="2" />
+<text  x="257.97" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt; &gt;::_M_begin (244,771 samples, 0.03%)</title><rect x="73.4" y="469" width="0.2" height="15.0" fill="rgb(212,35,8)" rx="2" ry="2" />
+<text  x="76.41" y="479.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_clear (569,510 samples, 0.06%)</title><rect x="392.1" y="517" width="0.4" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="395.05" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::NixVector&gt;::Acquire (169,425 samples, 0.02%)</title><rect x="559.0" y="213" width="0.2" height="15.0" fill="rgb(238,156,37)" rx="2" ry="2" />
+<text  x="562.01" y="223.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt;::erase (2,631,164 samples, 0.27%)</title><rect x="356.4" y="533" width="2.1" height="15.0" fill="rgb(213,39,9)" rx="2" ry="2" />
+<text  x="359.38" y="543.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::lower_bound (431,721 samples, 0.04%)</title><rect x="243.9" y="469" width="0.4" height="15.0" fill="rgb(218,61,14)" rx="2" ry="2" />
+<text  x="246.94" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::DlDciLteControlMessage&gt; ns3::DynamicCast&lt;ns3::DlDciLteControlMessage, ns3::LteControlMessage&gt; (458,846 samples, 0.05%)</title><rect x="533.8" y="357" width="0.3" height="15.0" fill="rgb(254,228,54)" rx="2" ry="2" />
+<text  x="536.77" y="367.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt;::cbegin (469,030 samples, 0.05%)</title><rect x="623.2" y="517" width="0.4" height="15.0" fill="rgb(245,184,44)" rx="2" ry="2" />
+<text  x="626.20" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::SbMeasResult_s::SbMeasResult_s (365,319 samples, 0.04%)</title><rect x="92.2" y="373" width="0.3" height="15.0" fill="rgb(235,141,33)" rx="2" ry="2" />
+<text  x="95.25" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::TypeId::TypeId (165,840 samples, 0.02%)</title><rect x="543.6" y="277" width="0.2" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="546.64" y="287.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::end (139,584 samples, 0.01%)</title><rect x="648.3" y="405" width="0.1" height="15.0" fill="rgb(237,147,35)" rx="2" ry="2" />
+<text  x="651.30" y="415.5" ></text>
+</g>
+<g >
+<title>void ns3::Callback&lt;void, ns3::Ptr&lt;ns3::Packet&gt; &gt;::Callback&lt;void  (20,138,435 samples, 2.08%)</title><rect x="422.5" y="453" width="16.2" height="15.0" fill="rgb(212,36,8)" rx="2" ry="2" />
+<text  x="425.51" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::EnbMemberLteEnbPhySapProvider::SendLteControlMessage (498,633 samples, 0.05%)</title><rect x="95.8" y="437" width="0.4" height="15.0" fill="rgb(253,222,53)" rx="2" ry="2" />
+<text  x="98.80" y="447.5" ></text>
+</g>
+<g >
+<title>void std::__invoke_impl&lt;void, ns3::Callback&lt;void, ns3::Ptr&lt;ns3::Packet&gt; &gt;::Callback&lt;void  (20,180,449 samples, 2.08%)</title><rect x="422.5" y="469" width="16.2" height="15.0" fill="rgb(236,145,34)" rx="2" ry="2" />
+<text  x="425.47" y="479.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;::clear (2,445,979 samples, 0.25%)</title><rect x="501.0" y="549" width="1.9" height="15.0" fill="rgb(246,188,45)" rx="2" ry="2" />
+<text  x="503.96" y="559.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_insert&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; const&amp;&gt; (530,447 samples, 0.05%)</title><rect x="611.1" y="501" width="0.4" height="15.0" fill="rgb(210,27,6)" rx="2" ry="2" />
+<text  x="614.12" y="511.5" ></text>
+</g>
+<g >
+<title>unsigned short* std::uninitialized_copy&lt;std::move_iterator&lt;unsigned short*&gt;, unsigned short*&gt; (728,775 samples, 0.08%)</title><rect x="253.1" y="421" width="0.5" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="256.06" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::TbId_t, std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::_Select1st&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::_Auto_node::_Auto_node&lt;std::pair&lt;ns3::TbId_t, ns3::tbInfo_t&gt; &gt; (1,620,533 samples, 0.17%)</title><rect x="384.1" y="485" width="1.3" height="15.0" fill="rgb(218,62,14)" rx="2" ry="2" />
+<text  x="387.11" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::LogComponent::IsEnabled (206,491 samples, 0.02%)</title><rect x="400.8" y="549" width="0.2" height="15.0" fill="rgb(214,43,10)" rx="2" ry="2" />
+<text  x="403.80" y="559.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, ns3::LteEnbComponentCarrierManager::UeInfo, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt; &gt; &gt;::at (1,778,082 samples, 0.18%)</title><rect x="428.8" y="293" width="1.5" height="15.0" fill="rgb(209,18,4)" rx="2" ry="2" />
+<text  x="431.82" y="303.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned int, ns3::TxSpectrumModelInfo, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt; &gt;::find (1,213,331 samples, 0.13%)</title><rect x="73.3" y="501" width="1.0" height="15.0" fill="rgb(208,16,3)" rx="2" ry="2" />
+<text  x="76.28" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt; std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt; &gt;::_M_emplace_hint_unique&lt;std::pair&lt;unsigned short, ns3::DlInfoListElement_s&gt; &gt; (2,130,125 samples, 0.22%)</title><rect x="503.1" y="517" width="1.7" height="15.0" fill="rgb(223,83,19)" rx="2" ry="2" />
+<text  x="506.08" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::SpectrumValue, ns3::Empty, ns3::DefaultDeleter&lt;ns3::SpectrumValue&gt; &gt;::Unref (227,190 samples, 0.02%)</title><rect x="112.2" y="469" width="0.2" height="15.0" fill="rgb(246,189,45)" rx="2" ry="2" />
+<text  x="115.21" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PropagationLossModel&gt;::operator bool (286,148 samples, 0.03%)</title><rect x="743.4" y="549" width="0.3" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="746.44" y="559.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt;::operator= (324,739 samples, 0.03%)</title><rect x="593.3" y="277" width="0.3" height="15.0" fill="rgb(252,217,52)" rx="2" ry="2" />
+<text  x="596.31" y="287.5" ></text>
+</g>
+<g >
+<title>std::_Bvector_base&lt;std::allocator&lt;bool&gt; &gt;::_M_allocate (148,686 samples, 0.02%)</title><rect x="247.3" y="437" width="0.1" height="15.0" fill="rgb(235,141,33)" rx="2" ry="2" />
+<text  x="250.26" y="447.5" ></text>
+</g>
+<g >
+<title>__dynamic_cast (724,942 samples, 0.07%)</title><rect x="671.3" y="517" width="0.6" height="15.0" fill="rgb(227,102,24)" rx="2" ry="2" />
+<text  x="674.33" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::RlcPduListElement_s* std::__relocate_a_1&lt;ns3::RlcPduListElement_s*, ns3::RlcPduListElement_s*, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; (159,106 samples, 0.02%)</title><rect x="210.0" y="421" width="0.2" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="213.04" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteSpectrumSignalParametersDataFrame&gt; ns3::Create&lt;ns3::LteSpectrumSignalParametersDataFrame&gt; (1,120,807 samples, 0.12%)</title><rect x="88.5" y="533" width="0.9" height="15.0" fill="rgb(223,86,20)" rx="2" ry="2" />
+<text  x="91.55" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::EventImpl::EventImpl (155,310 samples, 0.02%)</title><rect x="616.8" y="501" width="0.1" height="15.0" fill="rgb(247,195,46)" rx="2" ry="2" />
+<text  x="619.76" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::MacCeListElement_s* std::__do_uninit_copy&lt;std::move_iterator&lt;ns3::MacCeListElement_s*&gt;, ns3::MacCeListElement_s*&gt; (193,178 samples, 0.02%)</title><rect x="129.7" y="421" width="0.2" height="15.0" fill="rgb(208,14,3)" rx="2" ry="2" />
+<text  x="132.71" y="431.5" ></text>
+</g>
+<g >
+<title>void std::_Function_base::_Base_manager&lt;std::_Bind&lt;void  (574,266 samples, 0.06%)</title><rect x="618.6" y="485" width="0.4" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="621.57" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumPhy&gt;::operator= (154,933 samples, 0.02%)</title><rect x="672.0" y="533" width="0.2" height="15.0" fill="rgb(238,153,36)" rx="2" ry="2" />
+<text  x="675.04" y="543.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_clear (263,603 samples, 0.03%)</title><rect x="357.4" y="373" width="0.2" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="360.43" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::operator= (980,052 samples, 0.10%)</title><rect x="718.9" y="485" width="0.8" height="15.0" fill="rgb(243,177,42)" rx="2" ry="2" />
+<text  x="721.93" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::operator* (125,769 samples, 0.01%)</title><rect x="601.8" y="325" width="0.1" height="15.0" fill="rgb(251,212,50)" rx="2" ry="2" />
+<text  x="604.75" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter&gt;::Unref (1,713,044 samples, 0.18%)</title><rect x="634.4" y="405" width="1.4" height="15.0" fill="rgb(221,78,18)" rx="2" ry="2" />
+<text  x="637.44" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::SpectrumValue, ns3::Empty, ns3::DefaultDeleter&lt;ns3::SpectrumValue&gt; &gt;::Unref (127,422 samples, 0.01%)</title><rect x="61.4" y="501" width="0.1" height="15.0" fill="rgb(246,189,45)" rx="2" ry="2" />
+<text  x="64.37" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::operator*= (321,020 samples, 0.03%)</title><rect x="389.7" y="501" width="0.2" height="15.0" fill="rgb(207,9,2)" rx="2" ry="2" />
+<text  x="392.66" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, double&gt; &gt;::_M_valptr (275,175 samples, 0.03%)</title><rect x="292.6" y="501" width="0.2" height="15.0" fill="rgb(254,229,54)" rx="2" ry="2" />
+<text  x="295.56" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::FfMacSchedSapUser::SchedUlConfigIndParameters::~SchedUlConfigIndParameters (876,854 samples, 0.09%)</title><rect x="229.3" y="469" width="0.7" height="15.0" fill="rgb(224,91,21)" rx="2" ry="2" />
+<text  x="232.30" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt;, std::allocator&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt;::operator (188,098 samples, 0.02%)</title><rect x="188.7" y="421" width="0.1" height="15.0" fill="rgb(228,108,26)" rx="2" ry="2" />
+<text  x="191.66" y="431.5" ></text>
+</g>
+<g >
+<title>double* std::__uninitialized_default_n_1&lt;true&gt;::__uninit_default_n&lt;double*, unsigned long&gt; (322,925 samples, 0.03%)</title><rect x="718.5" y="389" width="0.3" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="721.54" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::PacketMetadata::Allocate (678,878 samples, 0.07%)</title><rect x="32.7" y="357" width="0.5" height="15.0" fill="rgb(231,121,29)" rx="2" ry="2" />
+<text  x="35.70" y="367.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::allocate (126,498 samples, 0.01%)</title><rect x="81.8" y="405" width="0.1" height="15.0" fill="rgb(212,32,7)" rx="2" ry="2" />
+<text  x="84.85" y="415.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt;::construct&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, ns3::Ptr&lt;ns3::PacketBurst&gt; const&amp;&gt; (389,168 samples, 0.04%)</title><rect x="724.8" y="469" width="0.3" height="15.0" fill="rgb(222,79,18)" rx="2" ry="2" />
+<text  x="727.80" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;signed char, std::allocator&lt;signed char&gt; &gt;::_M_range_check (245,588 samples, 0.03%)</title><rect x="532.0" y="325" width="0.2" height="15.0" fill="rgb(222,79,19)" rx="2" ry="2" />
+<text  x="535.05" y="335.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;::_Rb_tree_iterator (629,732 samples, 0.06%)</title><rect x="276.4" y="469" width="0.5" height="15.0" fill="rgb(223,85,20)" rx="2" ry="2" />
+<text  x="279.40" y="479.5" ></text>
+</g>
+<g >
+<title>double* std::__uninitialized_default_n&lt;double*, unsigned long&gt; (605,341 samples, 0.06%)</title><rect x="729.7" y="405" width="0.5" height="15.0" fill="rgb(231,123,29)" rx="2" ry="2" />
+<text  x="732.73" y="415.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::end (153,672 samples, 0.02%)</title><rect x="355.5" y="485" width="0.1" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="358.45" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::HarqStatus_e* std::__copy_move_a&lt;true, ns3::DlInfoListElement_s::HarqStatus_e*, ns3::DlInfoListElement_s::HarqStatus_e*&gt; (267,517 samples, 0.03%)</title><rect x="511.4" y="437" width="0.2" height="15.0" fill="rgb(237,150,36)" rx="2" ry="2" />
+<text  x="514.40" y="447.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Callback&lt;void, ns3::Ptr&lt;ns3::Packet const&gt; &gt;, std::allocator&lt;ns3::Callback&lt;void, ns3::Ptr&lt;ns3::Packet const&gt; &gt; &gt; &gt;::end (205,687 samples, 0.02%)</title><rect x="494.6" y="533" width="0.1" height="15.0" fill="rgb(245,186,44)" rx="2" ry="2" />
+<text  x="497.57" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::HarqProcessInfoElement_t* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::HarqProcessInfoElement_t const*, std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt;, ns3::HarqProcessInfoElement_t*&gt; (1,567,317 samples, 0.16%)</title><rect x="352.7" y="453" width="1.3" height="15.0" fill="rgb(233,131,31)" rx="2" ry="2" />
+<text  x="355.73" y="463.5" ></text>
+</g>
+<g >
+<title>void std::_Construct&lt;ns3::DlInfoListElement_s, ns3::DlInfoListElement_s&amp;&gt; (313,569 samples, 0.03%)</title><rect x="206.7" y="405" width="0.2" height="15.0" fill="rgb(228,106,25)" rx="2" ry="2" />
+<text  x="209.69" y="415.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::CqiListElement_s, std::allocator&lt;ns3::CqiListElement_s&gt; &gt;::_M_erase_at_end (416,767 samples, 0.04%)</title><rect x="106.8" y="469" width="0.3" height="15.0" fill="rgb(244,182,43)" rx="2" ry="2" />
+<text  x="109.77" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::erase[abi:cxx11] (6,953,857 samples, 0.72%)</title><rect x="762.4" y="693" width="5.6" height="15.0" fill="rgb(218,59,14)" rx="2" ry="2" />
+<text  x="765.39" y="703.5" ></text>
+</g>
+<g >
+<title>ns3::CqiListElement_s::CqiListElement_s (3,330,355 samples, 0.34%)</title><rect x="124.7" y="405" width="2.6" height="15.0" fill="rgb(238,156,37)" rx="2" ry="2" />
+<text  x="127.65" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_Rb_tree (152,827 samples, 0.02%)</title><rect x="667.8" y="261" width="0.2" height="15.0" fill="rgb(252,219,52)" rx="2" ry="2" />
+<text  x="670.83" y="271.5" ></text>
+</g>
+<g >
+<title>bool __gnu_cxx::operator==&lt;ns3::VendorSpecificListElement_s const*, std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt; &gt; (156,843 samples, 0.02%)</title><rect x="228.7" y="373" width="0.2" height="15.0" fill="rgb(233,131,31)" rx="2" ry="2" />
+<text  x="231.73" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter&gt;::Unref (2,031,472 samples, 0.21%)</title><rect x="773.8" y="373" width="1.7" height="15.0" fill="rgb(221,78,18)" rx="2" ry="2" />
+<text  x="776.83" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::ByteTagList::~ByteTagList (336,743 samples, 0.03%)</title><rect x="653.2" y="229" width="0.3" height="15.0" fill="rgb(206,5,1)" rx="2" ry="2" />
+<text  x="656.21" y="239.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::begin (166,916 samples, 0.02%)</title><rect x="574.8" y="341" width="0.1" height="15.0" fill="rgb(233,133,31)" rx="2" ry="2" />
+<text  x="577.78" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::operator[] (472,196 samples, 0.05%)</title><rect x="488.0" y="517" width="0.3" height="15.0" fill="rgb(248,202,48)" rx="2" ry="2" />
+<text  x="490.95" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumPhy&gt; ns3::Object::GetObject&lt;ns3::SpectrumPhy&gt; (1,654,930 samples, 0.17%)</title><rect x="344.5" y="517" width="1.3" height="15.0" fill="rgb(214,45,10)" rx="2" ry="2" />
+<text  x="347.52" y="527.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;::operator= (1,124,799 samples, 0.12%)</title><rect x="290.4" y="421" width="0.9" height="15.0" fill="rgb(246,191,45)" rx="2" ry="2" />
+<text  x="293.37" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultSimulatorImpl::Schedule (15,576,788 samples, 1.61%)</title><rect x="267.8" y="517" width="12.6" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="270.84" y="527.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt;::allocate (265,191 samples, 0.03%)</title><rect x="262.0" y="469" width="0.2" height="15.0" fill="rgb(228,110,26)" rx="2" ry="2" />
+<text  x="265.02" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;::size (154,036 samples, 0.02%)</title><rect x="525.5" y="325" width="0.1" height="15.0" fill="rgb(244,182,43)" rx="2" ry="2" />
+<text  x="528.47" y="335.5" ></text>
+</g>
+<g >
+<title>decltype  (181,678 samples, 0.02%)</title><rect x="636.4" y="485" width="0.2" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="639.43" y="495.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::construct&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; const&amp;&gt; (127,066 samples, 0.01%)</title><rect x="88.3" y="357" width="0.1" height="15.0" fill="rgb(236,146,35)" rx="2" ry="2" />
+<text  x="91.28" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::~PacketBurst (1,782,590 samples, 0.18%)</title><rect x="164.7" y="373" width="1.4" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="167.70" y="383.5" ></text>
+</g>
+<g >
+<title>malloc (429,586 samples, 0.04%)</title><rect x="325.4" y="341" width="0.4" height="15.0" fill="rgb(230,119,28)" rx="2" ry="2" />
+<text  x="328.42" y="351.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Callback&lt;void, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt; &gt;, std::allocator&lt;ns3::Callback&lt;void, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt; &gt; &gt; &gt;::begin (232,164 samples, 0.02%)</title><rect x="328.1" y="485" width="0.2" height="15.0" fill="rgb(236,144,34)" rx="2" ry="2" />
+<text  x="331.13" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::Packet, ns3::Empty, ns3::DefaultDeleter&lt;ns3::Packet&gt; &gt;::SimpleRefCount (222,949 samples, 0.02%)</title><rect x="361.3" y="485" width="0.2" height="15.0" fill="rgb(223,86,20)" rx="2" ry="2" />
+<text  x="364.28" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Buffer::Initialize (1,790,059 samples, 0.18%)</title><rect x="555.8" y="213" width="1.4" height="15.0" fill="rgb(211,31,7)" rx="2" ry="2" />
+<text  x="558.80" y="223.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::Ptr&lt;ns3::Object&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Object&gt; &gt; &gt;::_Vector_base (124,541 samples, 0.01%)</title><rect x="69.9" y="389" width="0.1" height="15.0" fill="rgb(235,141,33)" rx="2" ry="2" />
+<text  x="72.91" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::ByteTagList::Iterator::Iterator (236,079 samples, 0.02%)</title><rect x="436.6" y="213" width="0.2" height="15.0" fill="rgb(248,198,47)" rx="2" ry="2" />
+<text  x="439.62" y="223.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::at (190,175 samples, 0.02%)</title><rect x="327.2" y="469" width="0.1" height="15.0" fill="rgb(220,69,16)" rx="2" ry="2" />
+<text  x="330.15" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::DlHarqFeedbackLteControlMessage::SetDlHarqFeedback (234,084 samples, 0.02%)</title><rect x="419.3" y="357" width="0.2" height="15.0" fill="rgb(233,129,30)" rx="2" ry="2" />
+<text  x="422.30" y="367.5" ></text>
+</g>
+<g >
+<title>std::_Bit_const_iterator::_Bit_const_iterator (148,793 samples, 0.02%)</title><rect x="195.5" y="421" width="0.1" height="15.0" fill="rgb(225,95,22)" rx="2" ry="2" />
+<text  x="198.48" y="431.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::begin (160,992 samples, 0.02%)</title><rect x="70.4" y="453" width="0.1" height="15.0" fill="rgb(230,117,28)" rx="2" ry="2" />
+<text  x="73.40" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::IidManager::IidInformation, std::allocator&lt;ns3::IidManager::IidInformation&gt; &gt;::size (157,042 samples, 0.02%)</title><rect x="631.5" y="421" width="0.1" height="15.0" fill="rgb(249,206,49)" rx="2" ry="2" />
+<text  x="634.46" y="431.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::_List_base (209,616 samples, 0.02%)</title><rect x="538.8" y="277" width="0.2" height="15.0" fill="rgb(250,210,50)" rx="2" ry="2" />
+<text  x="541.79" y="287.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt;::begin (156,943 samples, 0.02%)</title><rect x="207.3" y="469" width="0.1" height="15.0" fill="rgb(244,183,43)" rx="2" ry="2" />
+<text  x="210.32" y="479.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_List_impl::_List_impl (410,572 samples, 0.04%)</title><rect x="619.8" y="501" width="0.4" height="15.0" fill="rgb(244,183,43)" rx="2" ry="2" />
+<text  x="622.83" y="511.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy_aux&lt;false&gt;::__destroy&lt;ns3::VendorSpecificListElement_s*&gt; (234,807 samples, 0.02%)</title><rect x="263.9" y="341" width="0.2" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="266.87" y="351.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt;::_M_mbegin (191,851 samples, 0.02%)</title><rect x="171.3" y="405" width="0.1" height="15.0" fill="rgb(249,206,49)" rx="2" ry="2" />
+<text  x="174.28" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::TypeId::GetAttributeN (942,736 samples, 0.10%)</title><rect x="448.9" y="245" width="0.7" height="15.0" fill="rgb(225,95,22)" rx="2" ry="2" />
+<text  x="451.88" y="255.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::BuildDataListElement_s, std::allocator&lt;ns3::BuildDataListElement_s&gt; &gt;::vector (1,851,121 samples, 0.19%)</title><rect x="141.5" y="453" width="1.5" height="15.0" fill="rgb(225,95,22)" rx="2" ry="2" />
+<text  x="144.54" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;int, std::allocator&lt;int&gt; &gt;::_M_create_storage (635,025 samples, 0.07%)</title><rect x="699.4" y="517" width="0.6" height="15.0" fill="rgb(212,35,8)" rx="2" ry="2" />
+<text  x="702.45" y="527.5" ></text>
+</g>
+<g >
+<title>bool std::_Function_base::_Base_manager&lt;std::_Bind&lt;void  (159,062 samples, 0.02%)</title><rect x="639.1" y="469" width="0.2" height="15.0" fill="rgb(213,39,9)" rx="2" ry="2" />
+<text  x="642.14" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;::_Rb_tree_iterator (189,556 samples, 0.02%)</title><rect x="192.8" y="421" width="0.2" height="15.0" fill="rgb(223,87,20)" rx="2" ry="2" />
+<text  x="195.85" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumModel const&gt;::operator (157,592 samples, 0.02%)</title><rect x="743.7" y="549" width="0.2" height="15.0" fill="rgb(226,96,23)" rx="2" ry="2" />
+<text  x="746.73" y="559.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteControlMessage&gt;::~Ptr (167,870 samples, 0.02%)</title><rect x="576.5" y="293" width="0.1" height="15.0" fill="rgb(208,17,4)" rx="2" ry="2" />
+<text  x="579.46" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::PacketTagList::Remove (1,461,431 samples, 0.15%)</title><rect x="430.5" y="309" width="1.2" height="15.0" fill="rgb(241,169,40)" rx="2" ry="2" />
+<text  x="433.48" y="319.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;::__normal_iterator (157,586 samples, 0.02%)</title><rect x="746.0" y="501" width="0.2" height="15.0" fill="rgb(215,50,12)" rx="2" ry="2" />
+<text  x="749.04" y="511.5" ></text>
+</g>
+<g >
+<title>std::operator== (190,947 samples, 0.02%)</title><rect x="331.2" y="501" width="0.1" height="15.0" fill="rgb(229,110,26)" rx="2" ry="2" />
+<text  x="334.19" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::DlDciLteControlMessage&gt;::operator (247,279 samples, 0.03%)</title><rect x="534.1" y="357" width="0.2" height="15.0" fill="rgb(222,79,19)" rx="2" ry="2" />
+<text  x="537.14" y="367.5" ></text>
+</g>
+<g >
+<title>double* std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, double*&gt; (231,188 samples, 0.02%)</title><rect x="654.7" y="405" width="0.2" height="15.0" fill="rgb(210,23,5)" rx="2" ry="2" />
+<text  x="657.74" y="415.5" ></text>
+</g>
+<g >
+<title>decltype (238,924 samples, 0.02%)</title><rect x="36.6" y="709" width="0.2" height="15.0" fill="rgb(220,73,17)" rx="2" ry="2" />
+<text  x="39.64" y="719.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter&gt;::Unref (4,924,388 samples, 0.51%)</title><rect x="451.1" y="293" width="4.0" height="15.0" fill="rgb(221,78,18)" rx="2" ry="2" />
+<text  x="454.12" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::Simulator::Run (5,321,712 samples, 0.55%)</title><rect x="11.2" y="789" width="4.3" height="15.0" fill="rgb(234,134,32)" rx="2" ry="2" />
+<text  x="14.17" y="799.5" ></text>
+</g>
+<g >
+<title>void std::_Construct&lt;ns3::CqiListElement_s, ns3::CqiListElement_s&amp;&gt; (3,446,655 samples, 0.36%)</title><rect x="124.6" y="421" width="2.8" height="15.0" fill="rgb(236,143,34)" rx="2" ry="2" />
+<text  x="127.59" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::Simulator::Destroy (238,924 samples, 0.02%)</title><rect x="36.6" y="773" width="0.2" height="15.0" fill="rgb(211,29,6)" rx="2" ry="2" />
+<text  x="39.64" y="783.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt; &gt;::find (353,675 samples, 0.04%)</title><rect x="508.8" y="533" width="0.3" height="15.0" fill="rgb(212,32,7)" rx="2" ry="2" />
+<text  x="511.84" y="543.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;double&gt;::deallocate (199,701 samples, 0.02%)</title><rect x="716.8" y="341" width="0.2" height="15.0" fill="rgb(250,208,49)" rx="2" ry="2" />
+<text  x="719.83" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::ObjectDeleter::Delete (2,326,898 samples, 0.24%)</title><rect x="164.3" y="421" width="1.8" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="167.26" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; std::map&lt;ns3::Scheduler::EventKey, ns3::EventImpl*, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::emplace_hint&lt;std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (2,428,249 samples, 0.25%)</title><rect x="660.8" y="437" width="2.0" height="15.0" fill="rgb(253,224,53)" rx="2" ry="2" />
+<text  x="663.83" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt;::~_Vector_base (148,819 samples, 0.02%)</title><rect x="255.5" y="341" width="0.1" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="258.45" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::UlDciLteControlMessage&amp; std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;::emplace_back&lt;ns3::UlDciLteControlMessage const&amp;&gt; (139,939 samples, 0.01%)</title><rect x="110.3" y="485" width="0.1" height="15.0" fill="rgb(207,11,2)" rx="2" ry="2" />
+<text  x="113.27" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::GetSpectrumModel (192,465 samples, 0.02%)</title><rect x="327.6" y="501" width="0.2" height="15.0" fill="rgb(228,106,25)" rx="2" ry="2" />
+<text  x="330.62" y="511.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt; &gt;::allocate (228,044 samples, 0.02%)</title><rect x="191.0" y="405" width="0.2" height="15.0" fill="rgb(250,207,49)" rx="2" ry="2" />
+<text  x="194.02" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_M_deallocate (124,900 samples, 0.01%)</title><rect x="605.4" y="469" width="0.1" height="15.0" fill="rgb(240,162,38)" rx="2" ry="2" />
+<text  x="608.43" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned int, std::allocator&lt;unsigned int&gt; &gt;::_M_deallocate (393,825 samples, 0.04%)</title><rect x="697.0" y="469" width="0.4" height="15.0" fill="rgb(230,117,28)" rx="2" ry="2" />
+<text  x="700.04" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::TagBuffer::ReadU8 (242,549 samples, 0.03%)</title><rect x="490.5" y="485" width="0.2" height="15.0" fill="rgb(242,174,41)" rx="2" ry="2" />
+<text  x="493.48" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::push_back (376,292 samples, 0.04%)</title><rect x="102.2" y="469" width="0.3" height="15.0" fill="rgb(229,113,27)" rx="2" ry="2" />
+<text  x="105.17" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::VendorSpecificListElement_s* std::__do_uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::VendorSpecificListElement_s const*, std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt; &gt;, ns3::VendorSpecificListElement_s*&gt; (401,487 samples, 0.04%)</title><rect x="475.8" y="245" width="0.3" height="15.0" fill="rgb(219,66,15)" rx="2" ry="2" />
+<text  x="478.80" y="255.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;* std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_M_create_node&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; const&amp;&gt; (3,565,957 samples, 0.37%)</title><rect x="237.4" y="373" width="2.9" height="15.0" fill="rgb(235,139,33)" rx="2" ry="2" />
+<text  x="240.45" y="383.5" ></text>
+</g>
+<g >
+<title>std::__is_constant_evaluated (126,671 samples, 0.01%)</title><rect x="563.8" y="85" width="0.1" height="15.0" fill="rgb(234,137,32)" rx="2" ry="2" />
+<text  x="566.80" y="95.5" ></text>
+</g>
+<g >
+<title>ns3::CqiListElement_s::CqiListElement_s (892,722 samples, 0.09%)</title><rect x="92.2" y="389" width="0.7" height="15.0" fill="rgb(238,156,37)" rx="2" ry="2" />
+<text  x="95.22" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::CallbackImpl&lt;void, std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt;::operator (75,554,587 samples, 7.79%)</title><rect x="515.9" y="533" width="60.7" height="15.0" fill="rgb(232,124,29)" rx="2" ry="2" />
+<text  x="518.86" y="543.5" >ns3::C..</text>
+</g>
+<g >
+<title>ns3::Object::Construct (2,912,216 samples, 0.30%)</title><rect x="372.2" y="501" width="2.4" height="15.0" fill="rgb(228,108,26)" rx="2" ry="2" />
+<text  x="375.23" y="511.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;int const*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt; std::__miter_base&lt;__gnu_cxx::__normal_iterator&lt;int const*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt; &gt; (153,542 samples, 0.02%)</title><rect x="398.8" y="469" width="0.1" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="401.81" y="479.5" ></text>
+</g>
+<g >
+<title>std::_List_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::insert&lt;std::_List_const_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;, void&gt; (804,377 samples, 0.08%)</title><rect x="318.7" y="421" width="0.7" height="15.0" fill="rgb(210,23,5)" rx="2" ry="2" />
+<text  x="321.72" y="431.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;::~vector (530,782 samples, 0.05%)</title><rect x="351.2" y="389" width="0.4" height="15.0" fill="rgb(235,139,33)" rx="2" ry="2" />
+<text  x="354.18" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt;::_M_begin (452,338 samples, 0.05%)</title><rect x="567.8" y="261" width="0.4" height="15.0" fill="rgb(249,203,48)" rx="2" ry="2" />
+<text  x="570.83" y="271.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::_Temporary_value::_Temporary_value&lt;unsigned short const&amp;&gt; (610,808 samples, 0.06%)</title><rect x="251.4" y="453" width="0.5" height="15.0" fill="rgb(206,6,1)" rx="2" ry="2" />
+<text  x="254.43" y="463.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy_aux&lt;false&gt;::__destroy&lt;__gnu_cxx::__normal_iterator&lt;ns3::VendorSpecificListElement_s*, std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt; &gt; &gt; (201,318 samples, 0.02%)</title><rect x="26.5" y="245" width="0.2" height="15.0" fill="rgb(222,81,19)" rx="2" ry="2" />
+<text  x="29.51" y="255.5" ></text>
+</g>
+<g >
+<title>std::_Function_base::_Base_manager&lt;std::_Bind&lt;void  (159,033 samples, 0.02%)</title><rect x="727.7" y="373" width="0.1" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="730.72" y="383.5" ></text>
+</g>
+<g >
+<title>double* std::__uninitialized_copy&lt;true&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, double*&gt; (165,918 samples, 0.02%)</title><rect x="78.3" y="437" width="0.2" height="15.0" fill="rgb(238,153,36)" rx="2" ry="2" />
+<text  x="81.32" y="447.5" ></text>
+</g>
+<g >
+<title>decltype  (2,931,196 samples, 0.30%)</title><rect x="238.0" y="325" width="2.3" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="240.96" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::CqiListElement_s* std::__uninitialized_copy&lt;false&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::CqiListElement_s*, std::vector&lt;ns3::CqiListElement_s, std::allocator&lt;ns3::CqiListElement_s&gt; &gt; &gt;, ns3::CqiListElement_s*&gt; (3,635,299 samples, 0.37%)</title><rect x="124.4" y="453" width="3.0" height="15.0" fill="rgb(211,29,7)" rx="2" ry="2" />
+<text  x="127.44" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::back (207,937 samples, 0.02%)</title><rect x="596.6" y="261" width="0.2" height="15.0" fill="rgb(223,85,20)" rx="2" ry="2" />
+<text  x="599.62" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::MemberLteCcmMacSapUser&lt;ns3::NoOpComponentCarrierManager&gt;::NotifyTxOpportunity (314,249 samples, 0.03%)</title><rect x="11.2" y="453" width="0.2" height="15.0" fill="rgb(205,3,0)" rx="2" ry="2" />
+<text  x="14.17" y="463.5" ></text>
+</g>
+<g >
+<title>void std::__invoke_impl&lt;void, void  (2,784,150 samples, 0.29%)</title><rect x="419.2" y="389" width="2.2" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="422.15" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_mbegin (202,221 samples, 0.02%)</title><rect x="84.6" y="389" width="0.1" height="15.0" fill="rgb(234,135,32)" rx="2" ry="2" />
+<text  x="87.57" y="399.5" ></text>
+</g>
+<g >
+<title>__cxxabiv1::__vmi_class_type_info::__do_dyncast (186,796 samples, 0.02%)</title><rect x="736.0" y="501" width="0.1" height="15.0" fill="rgb(245,186,44)" rx="2" ry="2" />
+<text  x="738.96" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::operator- (162,725 samples, 0.02%)</title><rect x="740.2" y="485" width="0.1" height="15.0" fill="rgb(231,122,29)" rx="2" ry="2" />
+<text  x="743.18" y="495.5" ></text>
+</g>
+<g >
+<title>decltype  (290,705 samples, 0.03%)</title><rect x="623.6" y="501" width="0.2" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="626.61" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt;::_Vector_impl::_Vector_impl (271,897 samples, 0.03%)</title><rect x="503.8" y="357" width="0.2" height="15.0" fill="rgb(229,112,26)" rx="2" ry="2" />
+<text  x="506.77" y="367.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_M_create_storage (235,300 samples, 0.02%)</title><rect x="677.3" y="437" width="0.2" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="680.28" y="447.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::end (205,079 samples, 0.02%)</title><rect x="596.8" y="261" width="0.2" height="15.0" fill="rgb(205,0,0)" rx="2" ry="2" />
+<text  x="599.79" y="271.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_insert&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; const&amp;&gt; (532,874 samples, 0.05%)</title><rect x="355.6" y="485" width="0.4" height="15.0" fill="rgb(210,27,6)" rx="2" ry="2" />
+<text  x="358.58" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_copy (527,289 samples, 0.05%)</title><rect x="668.4" y="469" width="0.4" height="15.0" fill="rgb(246,192,46)" rx="2" ry="2" />
+<text  x="671.41" y="479.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; &gt;::_M_ptr (246,841 samples, 0.03%)</title><rect x="522.2" y="309" width="0.2" height="15.0" fill="rgb(219,67,16)" rx="2" ry="2" />
+<text  x="525.21" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::MakeEvent&lt;&gt; (238,924 samples, 0.02%)</title><rect x="36.6" y="645" width="0.2" height="15.0" fill="rgb(205,0,0)" rx="2" ry="2" />
+<text  x="39.64" y="655.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::__copy_move_a2&lt;false, unsigned char const*, unsigned char*&gt; (225,178 samples, 0.02%)</title><rect x="688.0" y="357" width="0.2" height="15.0" fill="rgb(209,20,4)" rx="2" ry="2" />
+<text  x="691.00" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::EnbMacMemberLteEnbPhySapUser::UlCqiReport (1,913,367 samples, 0.20%)</title><rect x="472.7" y="325" width="1.5" height="15.0" fill="rgb(237,148,35)" rx="2" ry="2" />
+<text  x="475.69" y="335.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_M_allocate_and_copy&lt;__gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt; (144,727 samples, 0.01%)</title><rect x="686.2" y="437" width="0.2" height="15.0" fill="rgb(236,143,34)" rx="2" ry="2" />
+<text  x="689.23" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue&gt;::operator= (208,946 samples, 0.02%)</title><rect x="61.3" y="517" width="0.2" height="15.0" fill="rgb(220,71,17)" rx="2" ry="2" />
+<text  x="64.30" y="527.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::Ptr&lt;ns3::Object&gt;*&gt; (500,080 samples, 0.05%)</title><rect x="380.2" y="277" width="0.4" height="15.0" fill="rgb(248,201,48)" rx="2" ry="2" />
+<text  x="383.23" y="287.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Buffer::Data*, std::allocator&lt;ns3::Buffer::Data*&gt; &gt;::end (168,242 samples, 0.02%)</title><rect x="556.1" y="165" width="0.1" height="15.0" fill="rgb(223,86,20)" rx="2" ry="2" />
+<text  x="559.10" y="175.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::EventImpl&gt;::~Ptr (261,450 samples, 0.03%)</title><rect x="769.3" y="725" width="0.2" height="15.0" fill="rgb(225,92,22)" rx="2" ry="2" />
+<text  x="772.32" y="735.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;::__normal_iterator (286,765 samples, 0.03%)</title><rect x="213.8" y="453" width="0.2" height="15.0" fill="rgb(226,99,23)" rx="2" ry="2" />
+<text  x="216.79" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::end (185,556 samples, 0.02%)</title><rect x="692.4" y="469" width="0.1" height="15.0" fill="rgb(205,0,0)" rx="2" ry="2" />
+<text  x="695.39" y="479.5" ></text>
+</g>
+<g >
+<title>malloc (125,582 samples, 0.01%)</title><rect x="70.0" y="421" width="0.1" height="15.0" fill="rgb(230,119,28)" rx="2" ry="2" />
+<text  x="73.04" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::VendorSpecificListElement_s* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::VendorSpecificListElement_s const*, std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt; &gt;, ns3::VendorSpecificListElement_s*&gt; (198,957 samples, 0.02%)</title><rect x="228.7" y="421" width="0.2" height="15.0" fill="rgb(206,5,1)" rx="2" ry="2" />
+<text  x="231.70" y="431.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;is_member_pointer_v&lt;void  (239,715 samples, 0.02%)</title><rect x="715.5" y="501" width="0.2" height="15.0" fill="rgb(241,170,40)" rx="2" ry="2" />
+<text  x="718.47" y="511.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt;::end (143,255 samples, 0.01%)</title><rect x="623.1" y="501" width="0.1" height="15.0" fill="rgb(215,48,11)" rx="2" ry="2" />
+<text  x="626.05" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::MemberLteCcmMacSapProvider&lt;ns3::LteEnbMac&gt;::ReportMacCeToScheduler (280,173 samples, 0.03%)</title><rect x="457.6" y="277" width="0.3" height="15.0" fill="rgb(219,68,16)" rx="2" ry="2" />
+<text  x="460.63" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::HarqStatus_e* std::uninitialized_copy&lt;std::move_iterator&lt;ns3::DlInfoListElement_s::HarqStatus_e*&gt;, ns3::DlInfoListElement_s::HarqStatus_e*&gt; (347,263 samples, 0.04%)</title><rect x="511.3" y="485" width="0.3" height="15.0" fill="rgb(254,229,54)" rx="2" ry="2" />
+<text  x="514.33" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteControlMessage&gt;::~Ptr (269,841 samples, 0.03%)</title><rect x="497.4" y="485" width="0.2" height="15.0" fill="rgb(208,17,4)" rx="2" ry="2" />
+<text  x="500.37" y="495.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt;::_M_ptr (279,342 samples, 0.03%)</title><rect x="566.1" y="149" width="0.2" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="569.12" y="159.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;int*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt; std::copy&lt;__gnu_cxx::__normal_iterator&lt;int const*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;int*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt; &gt; (489,292 samples, 0.05%)</title><rect x="680.1" y="517" width="0.4" height="15.0" fill="rgb(223,85,20)" rx="2" ry="2" />
+<text  x="683.09" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteControlMessage&gt;&amp; std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::emplace_back&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; const&amp;&gt; (539,424 samples, 0.06%)</title><rect x="620.4" y="501" width="0.4" height="15.0" fill="rgb(224,89,21)" rx="2" ry="2" />
+<text  x="623.36" y="511.5" ></text>
+</g>
+<g >
+<title>unsigned char&amp; std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::emplace_back&lt;unsigned char&gt; (1,837,360 samples, 0.19%)</title><rect x="596.6" y="277" width="1.5" height="15.0" fill="rgb(237,147,35)" rx="2" ry="2" />
+<text  x="599.59" y="287.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt;::_M_addr (160,217 samples, 0.02%)</title><rect x="362.8" y="421" width="0.2" height="15.0" fill="rgb(219,68,16)" rx="2" ry="2" />
+<text  x="365.84" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;::~Ptr (3,444,708 samples, 0.36%)</title><rect x="75.3" y="517" width="2.8" height="15.0" fill="rgb(236,143,34)" rx="2" ry="2" />
+<text  x="78.31" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::Simulator::ScheduleWithContext (6,833,554 samples, 0.70%)</title><rect x="660.5" y="501" width="5.5" height="15.0" fill="rgb(230,116,27)" rx="2" ry="2" />
+<text  x="663.52" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::AttributeConstructionList::AttributeConstructionList (1,330,457 samples, 0.14%)</title><rect x="539.0" y="293" width="1.1" height="15.0" fill="rgb(231,122,29)" rx="2" ry="2" />
+<text  x="541.99" y="303.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt; &gt;::_S_key (393,630 samples, 0.04%)</title><rect x="24.0" y="341" width="0.3" height="15.0" fill="rgb(230,116,27)" rx="2" ry="2" />
+<text  x="26.97" y="351.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;* std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_create_node&lt;std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (217,068 samples, 0.02%)</title><rect x="615.6" y="421" width="0.1" height="15.0" fill="rgb(217,56,13)" rx="2" ry="2" />
+<text  x="618.57" y="431.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::push_back (2,730,012 samples, 0.28%)</title><rect x="361.8" y="501" width="2.2" height="15.0" fill="rgb(222,79,18)" rx="2" ry="2" />
+<text  x="364.77" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_Vector_base (692,819 samples, 0.07%)</title><rect x="300.4" y="437" width="0.5" height="15.0" fill="rgb(237,150,35)" rx="2" ry="2" />
+<text  x="303.35" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbRrcProtocolIdeal::DoSendSystemInformation (188,903 samples, 0.02%)</title><rect x="400.5" y="533" width="0.1" height="15.0" fill="rgb(210,24,5)" rx="2" ry="2" />
+<text  x="403.49" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::BuildBroadcastListElement_s, std::allocator&lt;ns3::BuildBroadcastListElement_s&gt; &gt;::_Vector_impl::_Vector_impl (185,676 samples, 0.02%)</title><rect x="141.3" y="421" width="0.2" height="15.0" fill="rgb(207,10,2)" rx="2" ry="2" />
+<text  x="144.33" y="431.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; &gt;::_M_addr (305,390 samples, 0.03%)</title><rect x="348.3" y="485" width="0.3" height="15.0" fill="rgb(224,87,20)" rx="2" ry="2" />
+<text  x="351.32" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::DlDciLteControlMessage&gt; ns3::DynamicCast&lt;ns3::DlDciLteControlMessage, ns3::LteControlMessage&gt; (478,172 samples, 0.05%)</title><rect x="388.1" y="549" width="0.4" height="15.0" fill="rgb(254,228,54)" rx="2" ry="2" />
+<text  x="391.10" y="559.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt;::find (153,882 samples, 0.02%)</title><rect x="23.6" y="357" width="0.2" height="15.0" fill="rgb(235,142,33)" rx="2" ry="2" />
+<text  x="26.63" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultSimulatorImpl::Schedule (192,930 samples, 0.02%)</title><rect x="112.5" y="469" width="0.2" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="115.51" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;bool, std::allocator&lt;bool&gt; &gt;::begin (414,441 samples, 0.04%)</title><rect x="201.2" y="453" width="0.3" height="15.0" fill="rgb(230,118,28)" rx="2" ry="2" />
+<text  x="204.16" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::LogComponent::IsEnabled (165,541 samples, 0.02%)</title><rect x="88.9" y="485" width="0.2" height="15.0" fill="rgb(214,43,10)" rx="2" ry="2" />
+<text  x="91.92" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::lower_bound (294,424 samples, 0.03%)</title><rect x="615.9" y="453" width="0.3" height="15.0" fill="rgb(254,228,54)" rx="2" ry="2" />
+<text  x="618.93" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::vector (1,634,801 samples, 0.17%)</title><rect x="654.5" y="485" width="1.3" height="15.0" fill="rgb(239,156,37)" rx="2" ry="2" />
+<text  x="657.53" y="495.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::end (154,831 samples, 0.02%)</title><rect x="22.1" y="325" width="0.1" height="15.0" fill="rgb(211,29,6)" rx="2" ry="2" />
+<text  x="25.07" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::DlDciListElement_s::~DlDciListElement_s (280,667 samples, 0.03%)</title><rect x="610.0" y="405" width="0.2" height="15.0" fill="rgb(219,64,15)" rx="2" ry="2" />
+<text  x="612.97" y="415.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt;::_M_addr (280,432 samples, 0.03%)</title><rect x="545.0" y="181" width="0.2" height="15.0" fill="rgb(219,68,16)" rx="2" ry="2" />
+<text  x="547.98" y="191.5" ></text>
+</g>
+<g >
+<title>ns3::Time::To (989,300 samples, 0.10%)</title><rect x="406.0" y="485" width="0.8" height="15.0" fill="rgb(244,182,43)" rx="2" ry="2" />
+<text  x="409.03" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumModel const&gt;::Acquire (160,796 samples, 0.02%)</title><rect x="402.7" y="469" width="0.1" height="15.0" fill="rgb(222,80,19)" rx="2" ry="2" />
+<text  x="405.72" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned int, std::allocator&lt;unsigned int&gt; &gt;::at (426,836 samples, 0.04%)</title><rect x="694.5" y="501" width="0.3" height="15.0" fill="rgb(210,24,5)" rx="2" ry="2" />
+<text  x="697.49" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Time::Time (201,450 samples, 0.02%)</title><rect x="343.5" y="469" width="0.2" height="15.0" fill="rgb(226,100,24)" rx="2" ry="2" />
+<text  x="346.53" y="479.5" ></text>
+</g>
+<g >
+<title>malloc (147,798 samples, 0.02%)</title><rect x="319.4" y="453" width="0.1" height="15.0" fill="rgb(230,119,28)" rx="2" ry="2" />
+<text  x="322.42" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::RarLteControlMessage::~RarLteControlMessage (509,242 samples, 0.05%)</title><rect x="167.1" y="405" width="0.4" height="15.0" fill="rgb(215,46,11)" rx="2" ry="2" />
+<text  x="170.06" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_Vector_base (539,442 samples, 0.06%)</title><rect x="325.4" y="453" width="0.4" height="15.0" fill="rgb(237,150,35)" rx="2" ry="2" />
+<text  x="328.35" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt;::cbegin (346,916 samples, 0.04%)</title><rect x="358.2" y="517" width="0.3" height="15.0" fill="rgb(245,184,44)" rx="2" ry="2" />
+<text  x="361.22" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::HarqStatus_e* std::__copy_move_a1&lt;false, ns3::DlInfoListElement_s::HarqStatus_e const*, ns3::DlInfoListElement_s::HarqStatus_e*&gt; (749,922 samples, 0.08%)</title><rect x="259.9" y="293" width="0.6" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="262.91" y="303.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;unsigned long&gt;::allocate (271,783 samples, 0.03%)</title><rect x="198.0" y="405" width="0.3" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="201.04" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy::DoSendLteControlMessage (773,102 samples, 0.08%)</title><rect x="230.2" y="437" width="0.6" height="15.0" fill="rgb(244,180,43)" rx="2" ry="2" />
+<text  x="233.16" y="447.5" ></text>
+</g>
+<g >
+<title>void std::__fill_a&lt;double*, double&gt; (203,543 samples, 0.02%)</title><rect x="730.0" y="341" width="0.2" height="15.0" fill="rgb(211,27,6)" rx="2" ry="2" />
+<text  x="732.99" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::Buffer::Buffer (239,848 samples, 0.02%)</title><rect x="16.7" y="357" width="0.2" height="15.0" fill="rgb(254,226,54)" rx="2" ry="2" />
+<text  x="19.70" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumSignalParametersDataFrame::Copy (7,176,472 samples, 0.74%)</title><rect x="67.3" y="517" width="5.8" height="15.0" fill="rgb(214,43,10)" rx="2" ry="2" />
+<text  x="70.34" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, unsigned char&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, unsigned char&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, unsigned char&gt; &gt; &gt;::_M_lower_bound (709,426 samples, 0.07%)</title><rect x="244.7" y="453" width="0.6" height="15.0" fill="rgb(226,99,23)" rx="2" ry="2" />
+<text  x="247.71" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;::at (232,011 samples, 0.02%)</title><rect x="173.2" y="453" width="0.2" height="15.0" fill="rgb(233,131,31)" rx="2" ry="2" />
+<text  x="176.25" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_M_fill_initialize (189,712 samples, 0.02%)</title><rect x="102.0" y="453" width="0.1" height="15.0" fill="rgb(205,0,0)" rx="2" ry="2" />
+<text  x="104.98" y="463.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;is_member_pointer_v&lt;void  (759,561 samples, 0.08%)</title><rect x="53.3" y="533" width="0.6" height="15.0" fill="rgb(241,170,40)" rx="2" ry="2" />
+<text  x="56.26" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;0ul, ns3::LteSpectrumPhy*&gt;::_Tuple_impl (202,993 samples, 0.02%)</title><rect x="64.2" y="405" width="0.1" height="15.0" fill="rgb(214,41,9)" rx="2" ry="2" />
+<text  x="67.18" y="415.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::begin (193,810 samples, 0.02%)</title><rect x="482.8" y="293" width="0.1" height="15.0" fill="rgb(206,6,1)" rx="2" ry="2" />
+<text  x="485.79" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::Packet::~Packet (319,925 samples, 0.03%)</title><rect x="502.1" y="293" width="0.2" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="505.08" y="303.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt;::at (322,129 samples, 0.03%)</title><rect x="420.2" y="341" width="0.3" height="15.0" fill="rgb(248,200,47)" rx="2" ry="2" />
+<text  x="423.20" y="351.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::allocate (423,703 samples, 0.04%)</title><rect x="270.5" y="357" width="0.4" height="15.0" fill="rgb(213,40,9)" rx="2" ry="2" />
+<text  x="273.51" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::MakeEvent&lt;void  (4,824,055 samples, 0.50%)</title><rect x="280.6" y="517" width="3.9" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="283.62" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteControlMessage&gt;::~Ptr (199,934 samples, 0.02%)</title><rect x="150.4" y="421" width="0.1" height="15.0" fill="rgb(208,17,4)" rx="2" ry="2" />
+<text  x="153.38" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::ChangeSign (1,192,502 samples, 0.12%)</title><rect x="410.5" y="517" width="0.9" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="413.46" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt;::Ptr (160,262 samples, 0.02%)</title><rect x="282.6" y="405" width="0.2" height="15.0" fill="rgb(219,67,16)" rx="2" ry="2" />
+<text  x="285.62" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::HarqStatus_e* std::__copy_move_a2&lt;false, ns3::DlInfoListElement_s::HarqStatus_e const*, ns3::DlInfoListElement_s::HarqStatus_e*&gt; (243,097 samples, 0.03%)</title><rect x="444.4" y="213" width="0.2" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="447.40" y="223.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::end (293,521 samples, 0.03%)</title><rect x="589.6" y="261" width="0.2" height="15.0" fill="rgb(237,147,35)" rx="2" ry="2" />
+<text  x="592.58" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::Time::operator= (180,257 samples, 0.02%)</title><rect x="318.4" y="437" width="0.2" height="15.0" fill="rgb(251,213,51)" rx="2" ry="2" />
+<text  x="321.42" y="447.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt;::erase (3,797,469 samples, 0.39%)</title><rect x="349.3" y="533" width="3.1" height="15.0" fill="rgb(216,54,13)" rx="2" ry="2" />
+<text  x="352.31" y="543.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;bool, std::allocator&lt;bool&gt; &gt;::insert (5,134,912 samples, 0.53%)</title><rect x="196.9" y="469" width="4.1" height="15.0" fill="rgb(250,209,50)" rx="2" ry="2" />
+<text  x="199.91" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Simulator::Now (384,287 samples, 0.04%)</title><rect x="155.5" y="389" width="0.3" height="15.0" fill="rgb(240,164,39)" rx="2" ry="2" />
+<text  x="158.47" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;0ul, ns3::LteEnbPhy*, ns3::Ptr&lt;ns3::PacketBurst&gt; &gt;::_Tuple_impl (474,767 samples, 0.05%)</title><rect x="284.0" y="421" width="0.4" height="15.0" fill="rgb(232,125,30)" rx="2" ry="2" />
+<text  x="287.03" y="431.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::VendorSpecificListElement_s*, std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt; &gt; std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;ns3::VendorSpecificListElement_s const*, std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;ns3::VendorSpecificListElement_s*, std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt; &gt; &gt; (603,286 samples, 0.06%)</title><rect x="25.7" y="261" width="0.5" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="28.74" y="271.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_M_allocate (429,586 samples, 0.04%)</title><rect x="325.4" y="421" width="0.4" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="328.42" y="431.5" ></text>
+</g>
+<g >
+<title>std::_List_node&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt;* std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::_M_create_node&lt;ns3::Ptr&lt;ns3::Packet&gt; const&amp;&gt; (955,890 samples, 0.10%)</title><rect x="626.1" y="469" width="0.8" height="15.0" fill="rgb(211,30,7)" rx="2" ry="2" />
+<text  x="629.10" y="479.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt; &gt;::allocate (264,767 samples, 0.03%)</title><rect x="384.5" y="437" width="0.2" height="15.0" fill="rgb(205,0,0)" rx="2" ry="2" />
+<text  x="387.48" y="447.5" ></text>
+</g>
+<g >
+<title>std::numeric_limits&lt;unsigned int&gt;::max (161,154 samples, 0.02%)</title><rect x="562.6" y="149" width="0.1" height="15.0" fill="rgb(234,134,32)" rx="2" ry="2" />
+<text  x="565.56" y="159.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::DoDispose (507,948 samples, 0.05%)</title><rect x="612.8" y="485" width="0.5" height="15.0" fill="rgb(242,172,41)" rx="2" ry="2" />
+<text  x="615.84" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::PacketBurst (220,732 samples, 0.02%)</title><rect x="644.9" y="437" width="0.2" height="15.0" fill="rgb(208,15,3)" rx="2" ry="2" />
+<text  x="647.94" y="447.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::Ptr&lt;ns3::Object&gt;*&gt; (194,998 samples, 0.02%)</title><rect x="165.3" y="309" width="0.1" height="15.0" fill="rgb(248,201,48)" rx="2" ry="2" />
+<text  x="168.29" y="319.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt; &gt;::find (152,754 samples, 0.02%)</title><rect x="104.9" y="469" width="0.1" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="107.92" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; std::_Rb_tree&lt;ns3::TbId_t, std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::_Select1st&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::_M_emplace_hint_unique&lt;std::pair&lt;ns3::TbId_t, ns3::tbInfo_t&gt; &gt; (2,663,179 samples, 0.27%)</title><rect x="384.1" y="501" width="2.1" height="15.0" fill="rgb(216,50,12)" rx="2" ry="2" />
+<text  x="387.11" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::MacCeValue_u::~MacCeValue_u (408,728 samples, 0.04%)</title><rect x="265.1" y="373" width="0.3" height="15.0" fill="rgb(205,0,0)" rx="2" ry="2" />
+<text  x="268.12" y="383.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, ns3::SbMeasResult_s, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::SbMeasResult_s&gt; &gt; &gt;::find (873,028 samples, 0.09%)</title><rect x="185.4" y="485" width="0.7" height="15.0" fill="rgb(242,171,40)" rx="2" ry="2" />
+<text  x="188.39" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumModel* ns3::PeekPointer&lt;ns3::SpectrumModel&gt; (148,477 samples, 0.02%)</title><rect x="299.2" y="453" width="0.1" height="15.0" fill="rgb(210,27,6)" rx="2" ry="2" />
+<text  x="302.17" y="463.5" ></text>
+</g>
+<g >
+<title>bool __gnu_cxx::operator==&lt;ns3::ByteTagListData* const*, std::vector&lt;ns3::ByteTagListData*, std::allocator&lt;ns3::ByteTagListData*&gt; &gt; &gt; (357,081 samples, 0.04%)</title><rect x="30.2" y="357" width="0.2" height="15.0" fill="rgb(241,169,40)" rx="2" ry="2" />
+<text  x="33.15" y="367.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt;::_M_valptr (255,360 samples, 0.03%)</title><rect x="168.7" y="389" width="0.2" height="15.0" fill="rgb(222,82,19)" rx="2" ry="2" />
+<text  x="171.66" y="399.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::ByteTagListData**, std::vector&lt;ns3::ByteTagListData*, std::allocator&lt;ns3::ByteTagListData*&gt; &gt; &gt;::operator* (164,625 samples, 0.02%)</title><rect x="553.6" y="197" width="0.1" height="15.0" fill="rgb(217,57,13)" rx="2" ry="2" />
+<text  x="556.58" y="207.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_Rb_tree (198,211 samples, 0.02%)</title><rect x="667.1" y="293" width="0.1" height="15.0" fill="rgb(252,219,52)" rx="2" ry="2" />
+<text  x="670.07" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy::GeneratePowerAllocationMap (650,842 samples, 0.07%)</title><rect x="110.8" y="533" width="0.6" height="15.0" fill="rgb(247,197,47)" rx="2" ry="2" />
+<text  x="113.83" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Packet&gt;::operator= (230,262 samples, 0.02%)</title><rect x="154.9" y="389" width="0.2" height="15.0" fill="rgb(230,115,27)" rx="2" ry="2" />
+<text  x="157.89" y="399.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::_List_base (159,271 samples, 0.02%)</title><rect x="447.4" y="261" width="0.1" height="15.0" fill="rgb(250,210,50)" rx="2" ry="2" />
+<text  x="450.35" y="271.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy_aux&lt;true&gt;::__destroy&lt;ns3::RlcPduListElement_s*&gt; (151,388 samples, 0.02%)</title><rect x="209.2" y="421" width="0.1" height="15.0" fill="rgb(219,66,15)" rx="2" ry="2" />
+<text  x="212.16" y="431.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, std::vector&lt;double, std::allocator&lt;double&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::find (1,290,271 samples, 0.13%)</title><rect x="221.2" y="485" width="1.1" height="15.0" fill="rgb(209,22,5)" rx="2" ry="2" />
+<text  x="224.25" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::_M_fill_insert (343,043 samples, 0.04%)</title><rect x="106.1" y="453" width="0.3" height="15.0" fill="rgb(236,146,34)" rx="2" ry="2" />
+<text  x="109.10" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_Vector_base (242,221 samples, 0.02%)</title><rect x="729.5" y="437" width="0.2" height="15.0" fill="rgb(237,150,35)" rx="2" ry="2" />
+<text  x="732.54" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt;::operator= (2,555,713 samples, 0.26%)</title><rect x="164.1" y="453" width="2.0" height="15.0" fill="rgb(219,65,15)" rx="2" ry="2" />
+<text  x="167.07" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::UlInfoListElement_s::UlInfoListElement_s (526,168 samples, 0.05%)</title><rect x="494.8" y="549" width="0.4" height="15.0" fill="rgb(211,29,7)" rx="2" ry="2" />
+<text  x="497.77" y="559.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;::vector (1,840,875 samples, 0.19%)</title><rect x="211.7" y="421" width="1.5" height="15.0" fill="rgb(246,192,45)" rx="2" ry="2" />
+<text  x="214.74" y="431.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::back (305,905 samples, 0.03%)</title><rect x="498.6" y="501" width="0.3" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="501.61" y="511.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;double&gt;::allocate (429,586 samples, 0.04%)</title><rect x="325.4" y="389" width="0.4" height="15.0" fill="rgb(221,76,18)" rx="2" ry="2" />
+<text  x="328.42" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, unsigned int&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt; &gt;::find (1,164,278 samples, 0.12%)</title><rect x="136.8" y="469" width="0.9" height="15.0" fill="rgb(214,44,10)" rx="2" ry="2" />
+<text  x="139.81" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::vector (242,130 samples, 0.02%)</title><rect x="409.8" y="501" width="0.2" height="15.0" fill="rgb(239,156,37)" rx="2" ry="2" />
+<text  x="412.84" y="511.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;std::is_constructible&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::pair&lt;ns3::TbId_t, ns3::tbInfo_t&gt; &gt;::value, std::pair&lt;std::_Rb_tree_iterator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, bool&gt; &gt;::type std::map&lt;ns3::TbId_t, ns3::tbInfo_t, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::insert&lt;std::pair&lt;ns3::TbId_t, ns3::tbInfo_t&gt; &gt; (181,887 samples, 0.02%)</title><rect x="120.3" y="517" width="0.1" height="15.0" fill="rgb(213,40,9)" rx="2" ry="2" />
+<text  x="123.30" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;::operator* (341,636 samples, 0.04%)</title><rect x="184.3" y="485" width="0.3" height="15.0" fill="rgb(234,134,32)" rx="2" ry="2" />
+<text  x="187.29" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteControlMessage&gt;::~Ptr (156,455 samples, 0.02%)</title><rect x="571.9" y="341" width="0.2" height="15.0" fill="rgb(208,17,4)" rx="2" ry="2" />
+<text  x="574.94" y="351.5" ></text>
+</g>
+<g >
+<title>std::operator== (191,748 samples, 0.02%)</title><rect x="279.6" y="501" width="0.1" height="15.0" fill="rgb(229,110,26)" rx="2" ry="2" />
+<text  x="282.56" y="511.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::UlInfoListElement_s, std::allocator&lt;ns3::UlInfoListElement_s&gt; &gt;::operator= (1,296,028 samples, 0.13%)</title><rect x="266.0" y="517" width="1.1" height="15.0" fill="rgb(212,32,7)" rx="2" ry="2" />
+<text  x="269.01" y="527.5" ></text>
+</g>
+<g >
+<title>std::function&lt;void  (235,820 samples, 0.02%)</title><rect x="727.7" y="421" width="0.1" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="730.66" y="431.5" ></text>
+</g>
+<g >
+<title>operator new (159,293 samples, 0.02%)</title><rect x="352.5" y="485" width="0.1" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="355.48" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::MobilityModel&gt;::Ptr (283,469 samples, 0.03%)</title><rect x="742.8" y="549" width="0.3" height="15.0" fill="rgb(213,37,8)" rx="2" ry="2" />
+<text  x="745.84" y="559.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::__uninitialized_copy&lt;true&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, unsigned char*&gt; (356,896 samples, 0.04%)</title><rect x="442.3" y="261" width="0.3" height="15.0" fill="rgb(233,129,30)" rx="2" ry="2" />
+<text  x="445.31" y="271.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Buffer::Data*, std::allocator&lt;ns3::Buffer::Data*&gt; &gt;::back (542,975 samples, 0.06%)</title><rect x="31.4" y="341" width="0.4" height="15.0" fill="rgb(242,172,41)" rx="2" ry="2" />
+<text  x="34.39" y="351.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_M_mbegin (125,248 samples, 0.01%)</title><rect x="58.9" y="453" width="0.1" height="15.0" fill="rgb(244,180,43)" rx="2" ry="2" />
+<text  x="61.91" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;2ul, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::_Tuple_impl&lt;double&amp;, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;&amp;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;&amp;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;&amp;, void&gt; (317,763 samples, 0.03%)</title><rect x="340.5" y="373" width="0.3" height="15.0" fill="rgb(240,161,38)" rx="2" ry="2" />
+<text  x="343.52" y="383.5" ></text>
+</g>
+<g >
+<title>decltype  (389,168 samples, 0.04%)</title><rect x="724.8" y="453" width="0.3" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="727.80" y="463.5" ></text>
+</g>
+<g >
+<title>unsigned int* std::uninitialized_fill_n&lt;unsigned int*, unsigned long, unsigned int&gt; (1,094,828 samples, 0.11%)</title><rect x="695.6" y="453" width="0.8" height="15.0" fill="rgb(205,3,0)" rx="2" ry="2" />
+<text  x="698.56" y="463.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt;::construct&lt;ns3::HigherLayerSelected_s, ns3::HigherLayerSelected_s&gt; (545,065 samples, 0.06%)</title><rect x="595.7" y="197" width="0.4" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="598.69" y="207.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::HarqStatus_e* std::__copy_move&lt;false, true, std::random_access_iterator_tag&gt;::__copy_m&lt;ns3::DlInfoListElement_s::HarqStatus_e const, ns3::DlInfoListElement_s::HarqStatus_e&gt; (158,174 samples, 0.02%)</title><rect x="510.0" y="389" width="0.2" height="15.0" fill="rgb(240,161,38)" rx="2" ry="2" />
+<text  x="513.04" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_Auto_node::_M_insert (162,012 samples, 0.02%)</title><rect x="332.1" y="453" width="0.1" height="15.0" fill="rgb(243,178,42)" rx="2" ry="2" />
+<text  x="335.10" y="463.5" ></text>
+</g>
+<g >
+<title>decltype  (353,605 samples, 0.04%)</title><rect x="149.6" y="341" width="0.2" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="152.56" y="351.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned int, ns3::TxSpectrumModelInfo, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt; &gt;::find (2,900,479 samples, 0.30%)</title><rect x="320.3" y="485" width="2.3" height="15.0" fill="rgb(208,16,3)" rx="2" ry="2" />
+<text  x="323.28" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::at (200,222 samples, 0.02%)</title><rect x="400.2" y="549" width="0.1" height="15.0" fill="rgb(251,215,51)" rx="2" ry="2" />
+<text  x="403.18" y="559.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::deallocate (124,394 samples, 0.01%)</title><rect x="776.2" y="309" width="0.1" height="15.0" fill="rgb(232,125,29)" rx="2" ry="2" />
+<text  x="779.16" y="319.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;is_invocable_r_v&lt;void, void  (2,940,550 samples, 0.30%)</title><rect x="419.0" y="405" width="2.4" height="15.0" fill="rgb(243,178,42)" rx="2" ry="2" />
+<text  x="422.03" y="415.5" ></text>
+</g>
+<g >
+<title>[libm.so.6] (153,007 samples, 0.02%)</title><rect x="603.6" y="293" width="0.1" height="15.0" fill="rgb(208,16,4)" rx="2" ry="2" />
+<text  x="606.62" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::SpectrumValue (742,462 samples, 0.08%)</title><rect x="315.8" y="405" width="0.6" height="15.0" fill="rgb(211,27,6)" rx="2" ry="2" />
+<text  x="318.81" y="415.5" ></text>
+</g>
+<g >
+<title>std::less&lt;unsigned short&gt;::operator (263,666 samples, 0.03%)</title><rect x="236.4" y="437" width="0.2" height="15.0" fill="rgb(207,11,2)" rx="2" ry="2" />
+<text  x="239.39" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::CqiListElement_s::~CqiListElement_s (293,386 samples, 0.03%)</title><rect x="585.1" y="293" width="0.3" height="15.0" fill="rgb(225,92,22)" rx="2" ry="2" />
+<text  x="588.12" y="303.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_List_base (293,130 samples, 0.03%)</title><rect x="610.4" y="533" width="0.2" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="613.36" y="543.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::VendorSpecificListElement_s*, std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt; &gt; std::copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::VendorSpecificListElement_s const*, std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;ns3::VendorSpecificListElement_s*, std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt; &gt; &gt; (183,538 samples, 0.02%)</title><rect x="18.0" y="261" width="0.2" height="15.0" fill="rgb(231,119,28)" rx="2" ry="2" />
+<text  x="21.01" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Packet&gt;::Ptr (567,669 samples, 0.06%)</title><rect x="368.0" y="517" width="0.5" height="15.0" fill="rgb(230,117,28)" rx="2" ry="2" />
+<text  x="371.02" y="527.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::UlInfoListElement_s, std::allocator&lt;ns3::UlInfoListElement_s&gt; &gt;::empty (391,139 samples, 0.04%)</title><rect x="265.7" y="517" width="0.3" height="15.0" fill="rgb(253,225,53)" rx="2" ry="2" />
+<text  x="268.70" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultSimulatorImpl::ProcessOneEvent (5,321,712 samples, 0.55%)</title><rect x="11.2" y="757" width="4.3" height="15.0" fill="rgb(211,30,7)" rx="2" ry="2" />
+<text  x="14.17" y="767.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::~vector (448,730 samples, 0.05%)</title><rect x="575.1" y="357" width="0.3" height="15.0" fill="rgb(252,219,52)" rx="2" ry="2" />
+<text  x="578.07" y="367.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;* std::__addressof&lt;std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; (320,226 samples, 0.03%)</title><rect x="723.8" y="453" width="0.3" height="15.0" fill="rgb(247,194,46)" rx="2" ry="2" />
+<text  x="726.85" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Function_base::_Base_manager&lt;std::_Bind&lt;void  (6,819,282 samples, 0.70%)</title><rect x="771.7" y="613" width="5.5" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="774.74" y="623.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::HarqStatus_e* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;ns3::DlInfoListElement_s::HarqStatus_e const*, std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt; &gt;, ns3::DlInfoListElement_s::HarqStatus_e*, ns3::DlInfoListElement_s::HarqStatus_e&gt; (147,743 samples, 0.02%)</title><rect x="107.3" y="357" width="0.1" height="15.0" fill="rgb(235,140,33)" rx="2" ry="2" />
+<text  x="110.33" y="367.5" ></text>
+</g>
+<g >
+<title>int* std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;int const*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt;, int*&gt; (232,547 samples, 0.02%)</title><rect x="91.2" y="469" width="0.1" height="15.0" fill="rgb(229,111,26)" rx="2" ry="2" />
+<text  x="94.15" y="479.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, bool&gt;::pair (150,672 samples, 0.02%)</title><rect x="616.2" y="485" width="0.2" height="15.0" fill="rgb(252,220,52)" rx="2" ry="2" />
+<text  x="619.23" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumModel const&gt;::Ptr (194,816 samples, 0.02%)</title><rect x="402.7" y="485" width="0.1" height="15.0" fill="rgb(232,125,30)" rx="2" ry="2" />
+<text  x="405.69" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::tbInfo_t::~tbInfo_t (271,160 samples, 0.03%)</title><rect x="530.2" y="325" width="0.3" height="15.0" fill="rgb(210,26,6)" rx="2" ry="2" />
+<text  x="533.23" y="335.5" ></text>
+</g>
+<g >
+<title>std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;* std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_create_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; const&amp;&gt; (447,972 samples, 0.05%)</title><rect x="598.4" y="245" width="0.3" height="15.0" fill="rgb(230,116,27)" rx="2" ry="2" />
+<text  x="601.37" y="255.5" ></text>
+</g>
+<g >
+<title>std::operator== (294,846 samples, 0.03%)</title><rect x="524.6" y="309" width="0.3" height="15.0" fill="rgb(229,110,26)" rx="2" ry="2" />
+<text  x="527.64" y="319.5" ></text>
+</g>
+<g >
+<title>void std::vector&lt;ns3::CqiListElement_s, std::allocator&lt;ns3::CqiListElement_s&gt; &gt;::_M_range_insert&lt;__gnu_cxx::__normal_iterator&lt;ns3::CqiListElement_s*, std::vector&lt;ns3::CqiListElement_s, std::allocator&lt;ns3::CqiListElement_s&gt; &gt; &gt; &gt; (4,898,473 samples, 0.51%)</title><rect x="124.3" y="501" width="4.0" height="15.0" fill="rgb(213,40,9)" rx="2" ry="2" />
+<text  x="127.35" y="511.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::push_back (2,561,414 samples, 0.26%)</title><rect x="217.9" y="485" width="2.1" height="15.0" fill="rgb(229,113,27)" rx="2" ry="2" />
+<text  x="220.91" y="495.5" ></text>
+</g>
+<g >
+<title>void std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_construct_node&lt;std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (522,481 samples, 0.05%)</title><rect x="661.2" y="373" width="0.5" height="15.0" fill="rgb(231,122,29)" rx="2" ry="2" />
+<text  x="664.23" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::empty (283,670 samples, 0.03%)</title><rect x="778.1" y="709" width="0.2" height="15.0" fill="rgb(241,170,40)" rx="2" ry="2" />
+<text  x="781.12" y="719.5" ></text>
+</g>
+<g >
+<title>void std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_construct_node&lt;std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (861,873 samples, 0.09%)</title><rect x="270.9" y="405" width="0.6" height="15.0" fill="rgb(231,122,29)" rx="2" ry="2" />
+<text  x="273.85" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::Object::Object (977,100 samples, 0.10%)</title><rect x="629.0" y="501" width="0.8" height="15.0" fill="rgb(242,174,41)" rx="2" ry="2" />
+<text  x="632.00" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::SpectrumConverter&gt; &gt;::operator (208,208 samples, 0.02%)</title><rect x="81.4" y="453" width="0.2" height="15.0" fill="rgb(238,156,37)" rx="2" ry="2" />
+<text  x="84.38" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;* std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_clone_node&lt;false, std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_Alloc_node&gt; (158,119 samples, 0.02%)</title><rect x="340.6" y="213" width="0.2" height="15.0" fill="rgb(205,4,0)" rx="2" ry="2" />
+<text  x="343.65" y="223.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::HigherLayerSelected_s*, std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt; &gt; std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;ns3::HigherLayerSelected_s const*, std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;ns3::HigherLayerSelected_s*, std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt; &gt; &gt; (231,948 samples, 0.02%)</title><rect x="134.8" y="437" width="0.2" height="15.0" fill="rgb(228,109,26)" rx="2" ry="2" />
+<text  x="137.83" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::PfFfMacScheduler::DoSchedDlTriggerReq (314,249 samples, 0.03%)</title><rect x="11.2" y="501" width="0.2" height="15.0" fill="rgb(214,45,10)" rx="2" ry="2" />
+<text  x="14.17" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Time::operator= (268,567 samples, 0.03%)</title><rect x="346.2" y="517" width="0.2" height="15.0" fill="rgb(251,213,51)" rx="2" ry="2" />
+<text  x="349.16" y="527.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;::_List_base (945,418 samples, 0.10%)</title><rect x="285.4" y="517" width="0.8" height="15.0" fill="rgb(230,115,27)" rx="2" ry="2" />
+<text  x="288.43" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::EventImpl, ns3::Empty, ns3::DefaultDeleter&lt;ns3::EventImpl&gt; &gt;::Unref (152,343 samples, 0.02%)</title><rect x="715.7" y="485" width="0.1" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="718.69" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::DlInfoListElement_s (4,041,567 samples, 0.42%)</title><rect x="258.7" y="405" width="3.2" height="15.0" fill="rgb(231,119,28)" rx="2" ry="2" />
+<text  x="261.68" y="415.5" ></text>
+</g>
+<g >
+<title>void std::__fill_a&lt;std::_Bit_iterator, bool&gt; (391,811 samples, 0.04%)</title><rect x="200.6" y="421" width="0.3" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="203.59" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::CallbackImpl&lt;void, ns3::SpectrumValue const&amp;&gt;::operator (324,769 samples, 0.03%)</title><rect x="611.9" y="501" width="0.3" height="15.0" fill="rgb(219,64,15)" rx="2" ry="2" />
+<text  x="614.94" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::LogComponent::IsEnabled (155,530 samples, 0.02%)</title><rect x="758.2" y="725" width="0.1" height="15.0" fill="rgb(214,43,10)" rx="2" ry="2" />
+<text  x="761.21" y="735.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;double&gt; &gt;::deallocate (154,926 samples, 0.02%)</title><rect x="484.0" y="453" width="0.1" height="15.0" fill="rgb(236,143,34)" rx="2" ry="2" />
+<text  x="486.97" y="463.5" ></text>
+</g>
+<g >
+<title>unsigned long const&amp; std::max&lt;unsigned long&gt; (149,635 samples, 0.02%)</title><rect x="398.3" y="501" width="0.1" height="15.0" fill="rgb(244,183,43)" rx="2" ry="2" />
+<text  x="401.29" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::FfMacSchedSapProvider::SchedUlCqiInfoReqParameters::SchedUlCqiInfoReqParameters (569,767 samples, 0.06%)</title><rect x="477.9" y="309" width="0.4" height="15.0" fill="rgb(233,131,31)" rx="2" ry="2" />
+<text  x="480.85" y="319.5" ></text>
+</g>
+<g >
+<title>std::_Head_base&lt;1ul, unsigned int, false&gt;::_Head_base&lt;unsigned int&amp;&gt; (390,794 samples, 0.04%)</title><rect x="617.6" y="421" width="0.3" height="15.0" fill="rgb(215,48,11)" rx="2" ry="2" />
+<text  x="620.62" y="431.5" ></text>
+</g>
+<g >
+<title>int* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;int const*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt;, int*, int&gt; (973,754 samples, 0.10%)</title><rect x="698.4" y="533" width="0.8" height="15.0" fill="rgb(205,0,0)" rx="2" ry="2" />
+<text  x="701.37" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::Seconds (258,846 samples, 0.03%)</title><rect x="120.9" y="533" width="0.2" height="15.0" fill="rgb(236,145,34)" rx="2" ry="2" />
+<text  x="123.90" y="543.5" ></text>
+</g>
+<g >
+<title>double const* std::__niter_base&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; (181,230 samples, 0.02%)</title><rect x="238.7" y="197" width="0.1" height="15.0" fill="rgb(213,38,9)" rx="2" ry="2" />
+<text  x="241.69" y="207.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;::_M_get_Tp_allocator (236,458 samples, 0.02%)</title><rect x="350.5" y="373" width="0.2" height="15.0" fill="rgb(237,148,35)" rx="2" ry="2" />
+<text  x="353.48" y="383.5" ></text>
+</g>
+<g >
+<title>void std::_Function_base::_Base_manager&lt;std::_Bind&lt;void  (819,716 samples, 0.08%)</title><rect x="667.3" y="437" width="0.7" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="670.29" y="447.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_M_default_append (1,930,472 samples, 0.20%)</title><rect x="459.4" y="261" width="1.6" height="15.0" fill="rgb(206,5,1)" rx="2" ry="2" />
+<text  x="462.45" y="271.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::HarqProcessInfoElement_t*&gt; (288,179 samples, 0.03%)</title><rect x="515.0" y="517" width="0.3" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="518.03" y="527.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::map (158,119 samples, 0.02%)</title><rect x="340.6" y="293" width="0.2" height="15.0" fill="rgb(242,171,40)" rx="2" ry="2" />
+<text  x="343.65" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt;::~Ptr (3,158,900 samples, 0.33%)</title><rect x="75.3" y="437" width="2.6" height="15.0" fill="rgb(205,3,0)" rx="2" ry="2" />
+<text  x="78.35" y="447.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Buffer::Data*, std::allocator&lt;ns3::Buffer::Data*&gt; &gt;::empty (1,091,313 samples, 0.11%)</title><rect x="556.2" y="181" width="0.9" height="15.0" fill="rgb(221,77,18)" rx="2" ry="2" />
+<text  x="559.23" y="191.5" ></text>
+</g>
+<g >
+<title>ns3::LteMiErrorModel::Mib (946,675 samples, 0.10%)</title><rect x="588.7" y="261" width="0.7" height="15.0" fill="rgb(222,78,18)" rx="2" ry="2" />
+<text  x="591.65" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::LteRadioBearerTag::LteRadioBearerTag (416,698 samples, 0.04%)</title><rect x="489.1" y="549" width="0.4" height="15.0" fill="rgb(220,71,17)" rx="2" ry="2" />
+<text  x="492.15" y="559.5" ></text>
+</g>
+<g >
+<title>std::_Function_base::_M_empty (149,519 samples, 0.02%)</title><rect x="467.8" y="469" width="0.1" height="15.0" fill="rgb(244,183,43)" rx="2" ry="2" />
+<text  x="470.78" y="479.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;double&gt; &gt;::allocate (429,586 samples, 0.04%)</title><rect x="325.4" y="405" width="0.4" height="15.0" fill="rgb(234,136,32)" rx="2" ry="2" />
+<text  x="328.42" y="415.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::MacCeListElement_s, std::allocator&lt;ns3::MacCeListElement_s&gt; &gt;::begin (152,476 samples, 0.02%)</title><rect x="264.4" y="501" width="0.2" height="15.0" fill="rgb(237,149,35)" rx="2" ry="2" />
+<text  x="267.43" y="511.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::vector (578,299 samples, 0.06%)</title><rect x="443.5" y="325" width="0.4" height="15.0" fill="rgb(206,9,2)" rx="2" ry="2" />
+<text  x="446.48" y="335.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::begin (290,983 samples, 0.03%)</title><rect x="550.4" y="229" width="0.3" height="15.0" fill="rgb(230,117,28)" rx="2" ry="2" />
+<text  x="553.42" y="239.5" ></text>
+</g>
+<g >
+<title>std::_Function_handler&lt;void  (7,010,506 samples, 0.72%)</title><rect x="771.6" y="629" width="5.6" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="774.59" y="639.5" ></text>
+</g>
+<g >
+<title>ns3::operator/ (752,804 samples, 0.08%)</title><rect x="484.5" y="517" width="0.6" height="15.0" fill="rgb(218,63,15)" rx="2" ry="2" />
+<text  x="487.49" y="527.5" ></text>
+</g>
+<g >
+<title>void std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::_M_construct_node&lt;std::piecewise_construct_t const&amp;, std::tuple&lt;unsigned short const&amp;&gt;, std::tuple&lt;&gt; &gt; (190,282 samples, 0.02%)</title><rect x="99.5" y="405" width="0.2" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="102.50" y="415.5" ></text>
+</g>
+<g >
+<title>std::operator== (198,006 samples, 0.02%)</title><rect x="339.6" y="453" width="0.1" height="15.0" fill="rgb(229,110,26)" rx="2" ry="2" />
+<text  x="342.59" y="463.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;ns3::UlInfoListElement_s&gt; &gt;::construct&lt;ns3::UlInfoListElement_s, ns3::UlInfoListElement_s const&amp;&gt; (331,199 samples, 0.03%)</title><rect x="440.4" y="309" width="0.3" height="15.0" fill="rgb(249,204,48)" rx="2" ry="2" />
+<text  x="443.44" y="319.5" ></text>
+</g>
+<g >
+<title>[libc.so.6] (125,474 samples, 0.01%)</title><rect x="557.5" y="213" width="0.1" height="15.0" fill="rgb(223,84,20)" rx="2" ry="2" />
+<text  x="560.50" y="223.5" ></text>
+</g>
+<g >
+<title>ns3::EnbMacMemberFfMacSchedSapUser::SchedDlConfigInd (314,249 samples, 0.03%)</title><rect x="11.2" y="485" width="0.2" height="15.0" fill="rgb(241,166,39)" rx="2" ry="2" />
+<text  x="14.17" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::int64x64_t::Mul (269,603 samples, 0.03%)</title><rect x="682.8" y="485" width="0.3" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="685.85" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::MemberLteFfrSapProvider&lt;ns3::LteFrNoOpAlgorithm&gt;::ReportUlCqiInfo (378,546 samples, 0.04%)</title><rect x="220.7" y="485" width="0.3" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="223.65" y="495.5" ></text>
+</g>
+<g >
+<title>std::__invoke_result&lt;void  (5,321,712 samples, 0.55%)</title><rect x="11.2" y="613" width="4.3" height="15.0" fill="rgb(240,163,39)" rx="2" ry="2" />
+<text  x="14.17" y="623.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue&gt;::~Ptr (165,191 samples, 0.02%)</title><rect x="481.6" y="325" width="0.2" height="15.0" fill="rgb(207,9,2)" rx="2" ry="2" />
+<text  x="484.64" y="335.5" ></text>
+</g>
+<g >
+<title>[ld-linux-x86-64.so.2] (280,175 samples, 0.03%)</title><rect x="10.0" y="789" width="0.2" height="15.0" fill="rgb(243,178,42)" rx="2" ry="2" />
+<text  x="13.00" y="799.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; std::map&lt;ns3::Scheduler::EventKey, ns3::EventImpl*, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::emplace_hint&lt;std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (538,288 samples, 0.06%)</title><rect x="108.5" y="453" width="0.4" height="15.0" fill="rgb(253,224,53)" rx="2" ry="2" />
+<text  x="111.50" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::operator= (156,275 samples, 0.02%)</title><rect x="251.2" y="485" width="0.1" height="15.0" fill="rgb(224,91,21)" rx="2" ry="2" />
+<text  x="254.16" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::TypeId::TypeId (163,126 samples, 0.02%)</title><rect x="491.1" y="517" width="0.1" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="494.10" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::HarqProcessInfoElement_t* std::__copy_move_a2&lt;false, ns3::HarqProcessInfoElement_t const*, ns3::HarqProcessInfoElement_t*&gt; (363,923 samples, 0.04%)</title><rect x="353.4" y="373" width="0.3" height="15.0" fill="rgb(222,82,19)" rx="2" ry="2" />
+<text  x="356.45" y="383.5" ></text>
+</g>
+<g >
+<title>int* std::__copy_move_a1&lt;false, int*, int*&gt; (153,996 samples, 0.02%)</title><rect x="304.3" y="469" width="0.1" height="15.0" fill="rgb(246,191,45)" rx="2" ry="2" />
+<text  x="307.32" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;* std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_Alloc_node::operator (3,608,007 samples, 0.37%)</title><rect x="237.4" y="389" width="2.9" height="15.0" fill="rgb(231,122,29)" rx="2" ry="2" />
+<text  x="240.42" y="399.5" ></text>
+</g>
+<g >
+<title>[libm.so.6] (271,870 samples, 0.03%)</title><rect x="678.7" y="485" width="0.2" height="15.0" fill="rgb(208,16,4)" rx="2" ry="2" />
+<text  x="681.67" y="495.5" ></text>
+</g>
+<g >
+<title>std::less&lt;unsigned short&gt;::operator (156,875 samples, 0.02%)</title><rect x="172.0" y="405" width="0.1" height="15.0" fill="rgb(207,11,2)" rx="2" ry="2" />
+<text  x="174.96" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Head_base&lt;4ul, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, false&gt;::_M_head (197,720 samples, 0.02%)</title><rect x="757.2" y="549" width="0.2" height="15.0" fill="rgb(221,76,18)" rx="2" ry="2" />
+<text  x="760.24" y="559.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::operator= (165,413 samples, 0.02%)</title><rect x="581.7" y="309" width="0.1" height="15.0" fill="rgb(243,175,42)" rx="2" ry="2" />
+<text  x="584.70" y="319.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;0ul, ns3::MultiModelSpectrumChannel*, ns3::Ptr&lt;ns3::SpectrumValue&gt;, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::_Tuple_impl&lt;ns3::MultiModelSpectrumChannel*&amp;, ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp;, double&amp;, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;&amp;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;&amp;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;&amp;, void&gt; (714,235 samples, 0.07%)</title><rect x="666.7" y="421" width="0.6" height="15.0" fill="rgb(231,123,29)" rx="2" ry="2" />
+<text  x="669.69" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::Simulator::Run (2,105,662 samples, 0.22%)</title><rect x="15.5" y="773" width="1.6" height="15.0" fill="rgb(234,134,32)" rx="2" ry="2" />
+<text  x="18.45" y="783.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt;::allocate (428,661 samples, 0.04%)</title><rect x="724.5" y="453" width="0.3" height="15.0" fill="rgb(240,164,39)" rx="2" ry="2" />
+<text  x="727.45" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt; &gt;::find (277,435 samples, 0.03%)</title><rect x="188.9" y="469" width="0.3" height="15.0" fill="rgb(214,44,10)" rx="2" ry="2" />
+<text  x="191.94" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::HarqStatus_e* std::__uninitialized_copy&lt;true&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::DlInfoListElement_s::HarqStatus_e const*, std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt; &gt;, ns3::DlInfoListElement_s::HarqStatus_e*&gt; (147,743 samples, 0.02%)</title><rect x="107.3" y="325" width="0.1" height="15.0" fill="rgb(241,165,39)" rx="2" ry="2" />
+<text  x="110.33" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::ObjectBase::ObjectBase (222,732 samples, 0.02%)</title><rect x="365.4" y="453" width="0.2" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="368.42" y="463.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;is_invocable_r_v&lt;void, ns3::Callback&lt;void, ns3::SpectrumValue const&amp;&gt;::Callback&lt;void  (324,769 samples, 0.03%)</title><rect x="611.9" y="453" width="0.3" height="15.0" fill="rgb(222,79,18)" rx="2" ry="2" />
+<text  x="614.94" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::_S_relocate (230,884 samples, 0.02%)</title><rect x="398.4" y="517" width="0.2" height="15.0" fill="rgb(238,154,37)" rx="2" ry="2" />
+<text  x="401.41" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy::StartFrame (415,834 samples, 0.04%)</title><rect x="15.5" y="565" width="0.3" height="15.0" fill="rgb(209,22,5)" rx="2" ry="2" />
+<text  x="18.45" y="575.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;bool, std::allocator&lt;bool&gt; &gt;::insert (572,036 samples, 0.06%)</title><rect x="100.2" y="453" width="0.4" height="15.0" fill="rgb(250,209,50)" rx="2" ry="2" />
+<text  x="103.16" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Time::GetSeconds (495,841 samples, 0.05%)</title><rect x="484.1" y="517" width="0.4" height="15.0" fill="rgb(249,203,48)" rx="2" ry="2" />
+<text  x="487.10" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt;::_Vector_impl::_Vector_impl (272,688 samples, 0.03%)</title><rect x="130.8" y="469" width="0.2" height="15.0" fill="rgb(237,150,35)" rx="2" ry="2" />
+<text  x="133.81" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::HarqStatus_e* std::__copy_move&lt;false, true, std::random_access_iterator_tag&gt;::__copy_m&lt;ns3::DlInfoListElement_s::HarqStatus_e const, ns3::DlInfoListElement_s::HarqStatus_e&gt; (593,050 samples, 0.06%)</title><rect x="260.0" y="261" width="0.5" height="15.0" fill="rgb(240,161,38)" rx="2" ry="2" />
+<text  x="263.04" y="271.5" ></text>
+</g>
+<g >
+<title>unsigned short* std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;unsigned short const*, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, unsigned short*&gt; (485,137 samples, 0.05%)</title><rect x="475.0" y="213" width="0.4" height="15.0" fill="rgb(239,157,37)" rx="2" ry="2" />
+<text  x="478.00" y="223.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned char, ns3::LteUeMac::LcInfo, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteUeMac::LcInfo&gt; &gt; &gt;::find (1,135,998 samples, 0.12%)</title><rect x="437.6" y="325" width="0.9" height="15.0" fill="rgb(226,97,23)" rx="2" ry="2" />
+<text  x="440.60" y="335.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;::_Vector_base (198,899 samples, 0.02%)</title><rect x="354.0" y="469" width="0.2" height="15.0" fill="rgb(247,197,47)" rx="2" ry="2" />
+<text  x="356.99" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::operator[] (316,514 samples, 0.03%)</title><rect x="302.3" y="485" width="0.3" height="15.0" fill="rgb(248,202,48)" rx="2" ry="2" />
+<text  x="305.31" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue&gt; ns3::Create&lt;ns3::SpectrumValue, ns3::SpectrumValue const&amp;&gt; (186,604 samples, 0.02%)</title><rect x="481.5" y="325" width="0.1" height="15.0" fill="rgb(207,12,2)" rx="2" ry="2" />
+<text  x="484.49" y="335.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::operator= (345,577 samples, 0.04%)</title><rect x="114.0" y="389" width="0.3" height="15.0" fill="rgb(243,175,42)" rx="2" ry="2" />
+<text  x="117.02" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::Subtract (2,558,547 samples, 0.26%)</title><rect x="415.1" y="533" width="2.1" height="15.0" fill="rgb(220,69,16)" rx="2" ry="2" />
+<text  x="418.11" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::~PacketBurst (1,132,572 samples, 0.12%)</title><rect x="634.9" y="357" width="0.9" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="637.88" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::Packet, ns3::Empty, ns3::DefaultDeleter&lt;ns3::Packet&gt; &gt;::SimpleRefCount (246,179 samples, 0.03%)</title><rect x="559.2" y="229" width="0.1" height="15.0" fill="rgb(223,86,20)" rx="2" ry="2" />
+<text  x="562.15" y="239.5" ></text>
+</g>
+<g >
+<title>ns3::HigherLayerSelected_s* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::HigherLayerSelected_s const*, std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt; &gt;, ns3::HigherLayerSelected_s*&gt; (356,634 samples, 0.04%)</title><rect x="442.7" y="277" width="0.3" height="15.0" fill="rgb(230,118,28)" rx="2" ry="2" />
+<text  x="445.72" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::ObjectBase::ObjectBase (229,496 samples, 0.02%)</title><rect x="489.3" y="517" width="0.2" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="492.30" y="527.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt;::construct&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, ns3::Ptr&lt;ns3::LteControlMessage&gt; const&amp;&gt; (353,605 samples, 0.04%)</title><rect x="149.6" y="357" width="0.2" height="15.0" fill="rgb(231,120,28)" rx="2" ry="2" />
+<text  x="152.56" y="367.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;unsigned short, ns3::DlInfoListElement_s&gt;::pair&lt;unsigned short&amp;, ns3::DlInfoListElement_s&amp;&gt; (647,715 samples, 0.07%)</title><rect x="509.8" y="549" width="0.6" height="15.0" fill="rgb(210,23,5)" rx="2" ry="2" />
+<text  x="512.85" y="559.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_Vector_impl::_Vector_impl (200,380 samples, 0.02%)</title><rect x="159.4" y="373" width="0.2" height="15.0" fill="rgb(226,98,23)" rx="2" ry="2" />
+<text  x="162.40" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::DoDispose (3,367,904 samples, 0.35%)</title><rect x="451.2" y="245" width="2.7" height="15.0" fill="rgb(242,172,41)" rx="2" ry="2" />
+<text  x="454.22" y="255.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt; &gt;::_M_ptr (208,839 samples, 0.02%)</title><rect x="429.0" y="245" width="0.2" height="15.0" fill="rgb(207,9,2)" rx="2" ry="2" />
+<text  x="432.02" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Object&gt;::~Ptr (152,955 samples, 0.02%)</title><rect x="743.3" y="549" width="0.1" height="15.0" fill="rgb(222,82,19)" rx="2" ry="2" />
+<text  x="746.26" y="559.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;__gnu_cxx::__normal_iterator&lt;ns3::VendorSpecificListElement_s*, std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt; &gt;, ns3::VendorSpecificListElement_s&gt; (317,071 samples, 0.03%)</title><rect x="26.4" y="277" width="0.3" height="15.0" fill="rgb(241,168,40)" rx="2" ry="2" />
+<text  x="29.42" y="287.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::~vector (782,981 samples, 0.08%)</title><rect x="505.7" y="405" width="0.6" height="15.0" fill="rgb(252,219,52)" rx="2" ry="2" />
+<text  x="508.65" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::DlCqiLteControlMessage&gt; ns3::Create&lt;ns3::DlCqiLteControlMessage&gt; (1,129,510 samples, 0.12%)</title><rect x="592.3" y="293" width="0.9" height="15.0" fill="rgb(225,93,22)" rx="2" ry="2" />
+<text  x="595.26" y="303.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::BuildDataListElement_s, std::allocator&lt;ns3::BuildDataListElement_s&gt; &gt;::_Vector_impl::_Vector_impl (271,168 samples, 0.03%)</title><rect x="174.3" y="437" width="0.2" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="177.28" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt; &gt;::find (393,630 samples, 0.04%)</title><rect x="24.0" y="373" width="0.3" height="15.0" fill="rgb(225,93,22)" rx="2" ry="2" />
+<text  x="26.97" y="383.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::AttributeConstructionList::Item, std::allocator&lt;ns3::AttributeConstructionList::Item&gt; &gt;::list (1,123,852 samples, 0.12%)</title><rect x="539.2" y="277" width="0.9" height="15.0" fill="rgb(252,219,52)" rx="2" ry="2" />
+<text  x="542.15" y="287.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::ByteTagListData*, std::allocator&lt;ns3::ByteTagListData*&gt; &gt;::back (511,487 samples, 0.05%)</title><rect x="29.6" y="373" width="0.4" height="15.0" fill="rgb(207,9,2)" rx="2" ry="2" />
+<text  x="32.59" y="383.5" ></text>
+</g>
+<g >
+<title>void std::destroy_at&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; (392,648 samples, 0.04%)</title><rect x="612.9" y="421" width="0.3" height="15.0" fill="rgb(224,88,21)" rx="2" ry="2" />
+<text  x="615.90" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_Auto_node::_Auto_node&lt;unsigned int const&amp;, ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp;&gt; (925,680 samples, 0.10%)</title><rect x="658.4" y="469" width="0.8" height="15.0" fill="rgb(209,20,4)" rx="2" ry="2" />
+<text  x="661.42" y="479.5" ></text>
+</g>
+<g >
+<title>std::function&lt;void  (856,730 samples, 0.09%)</title><rect x="667.3" y="469" width="0.7" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="670.27" y="479.5" ></text>
+</g>
+<g >
+<title>std::__allocated_ptr&lt;std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt;::__allocated_ptr (363,344 samples, 0.04%)</title><rect x="723.8" y="469" width="0.3" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="726.81" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::operator= (946,469 samples, 0.10%)</title><rect x="685.8" y="453" width="0.7" height="15.0" fill="rgb(211,28,6)" rx="2" ry="2" />
+<text  x="688.78" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::LteRadioBearerTag::LteRadioBearerTag (235,722 samples, 0.02%)</title><rect x="20.3" y="357" width="0.2" height="15.0" fill="rgb(220,71,17)" rx="2" ry="2" />
+<text  x="23.33" y="367.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;::pair (194,069 samples, 0.02%)</title><rect x="104.6" y="293" width="0.2" height="15.0" fill="rgb(240,164,39)" rx="2" ry="2" />
+<text  x="107.61" y="303.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;::_M_valptr (245,098 samples, 0.03%)</title><rect x="528.0" y="261" width="0.2" height="15.0" fill="rgb(218,62,14)" rx="2" ry="2" />
+<text  x="531.05" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::RlcTag::GetInstanceTypeId (165,086 samples, 0.02%)</title><rect x="554.9" y="245" width="0.2" height="15.0" fill="rgb(248,200,47)" rx="2" ry="2" />
+<text  x="557.94" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::Object::DoDelete (1,796,083 samples, 0.19%)</title><rect x="501.5" y="437" width="1.4" height="15.0" fill="rgb(212,34,8)" rx="2" ry="2" />
+<text  x="504.48" y="447.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::allocate (195,540 samples, 0.02%)</title><rect x="83.1" y="341" width="0.1" height="15.0" fill="rgb(236,145,34)" rx="2" ry="2" />
+<text  x="86.06" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt; ns3::CreateObject&lt;ns3::PacketBurst&gt; (5,924,813 samples, 0.61%)</title><rect x="446.1" y="309" width="4.8" height="15.0" fill="rgb(205,4,0)" rx="2" ry="2" />
+<text  x="449.13" y="319.5" ></text>
+</g>
+<g >
+<title>void std::vector&lt;int, std::allocator&lt;int&gt; &gt;::_M_realloc_insert&lt;int&gt; (917,956 samples, 0.09%)</title><rect x="590.3" y="245" width="0.8" height="15.0" fill="rgb(211,28,6)" rx="2" ry="2" />
+<text  x="593.31" y="255.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_clear (271,061 samples, 0.03%)</title><rect x="775.7" y="357" width="0.2" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="778.66" y="367.5" ></text>
+</g>
+<g >
+<title>decltype  (338,177 samples, 0.03%)</title><rect x="117.3" y="485" width="0.3" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="120.31" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_const_iterator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;::_Rb_tree_const_iterator (163,290 samples, 0.02%)</title><rect x="331.4" y="485" width="0.1" height="15.0" fill="rgb(252,220,52)" rx="2" ry="2" />
+<text  x="334.37" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;1ul, ns3::Ptr&lt;ns3::SpectrumValue&gt;, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::_Tuple_impl (589,946 samples, 0.06%)</title><rect x="667.5" y="373" width="0.5" height="15.0" fill="rgb(206,6,1)" rx="2" ry="2" />
+<text  x="670.48" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;* std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_copy&lt;false, std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_Alloc_node&gt; (326,142 samples, 0.03%)</title><rect x="88.2" y="453" width="0.2" height="15.0" fill="rgb(251,212,50)" rx="2" ry="2" />
+<text  x="91.19" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::HigherLayerSelected_s* std::__copy_move_a1&lt;false, ns3::HigherLayerSelected_s const*, ns3::HigherLayerSelected_s*&gt; (231,948 samples, 0.02%)</title><rect x="134.8" y="421" width="0.2" height="15.0" fill="rgb(227,104,25)" rx="2" ry="2" />
+<text  x="137.83" y="431.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::end (316,703 samples, 0.03%)</title><rect x="416.9" y="517" width="0.3" height="15.0" fill="rgb(237,147,35)" rx="2" ry="2" />
+<text  x="419.92" y="527.5" ></text>
+</g>
+<g >
+<title> (233,577 samples, 0.02%)</title><rect x="344.0" y="501" width="0.2" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="347.01" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Scheduler::EventKey&amp;&amp; std::forward&lt;ns3::Scheduler::EventKey&gt; (159,059 samples, 0.02%)</title><rect x="271.4" y="341" width="0.1" height="15.0" fill="rgb(232,125,29)" rx="2" ry="2" />
+<text  x="274.42" y="351.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::BuildBroadcastListElement_s, std::allocator&lt;ns3::BuildBroadcastListElement_s&gt; &gt;::_M_create_storage (276,341 samples, 0.03%)</title><rect x="141.1" y="421" width="0.2" height="15.0" fill="rgb(233,133,31)" rx="2" ry="2" />
+<text  x="144.11" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::DlInfoListElement_s (1,840,989 samples, 0.19%)</title><rect x="444.0" y="341" width="1.5" height="15.0" fill="rgb(231,119,28)" rx="2" ry="2" />
+<text  x="446.98" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::FfMacSchedSapProvider::SchedUlMacCtrlInfoReqParameters::~SchedUlMacCtrlInfoReqParameters (274,453 samples, 0.03%)</title><rect x="133.3" y="517" width="0.2" height="15.0" fill="rgb(242,171,41)" rx="2" ry="2" />
+<text  x="136.29" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;0ul, ns3::MultiModelSpectrumChannel*, ns3::Ptr&lt;ns3::SpectrumValue&gt;, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::_Tuple_impl (411,266 samples, 0.04%)</title><rect x="87.6" y="389" width="0.4" height="15.0" fill="rgb(229,111,26)" rx="2" ry="2" />
+<text  x="90.62" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::LteFrNoOpAlgorithm::DoReportUlCqiInfo (261,636 samples, 0.03%)</title><rect x="220.7" y="469" width="0.3" height="15.0" fill="rgb(245,184,44)" rx="2" ry="2" />
+<text  x="223.75" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;3ul, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::_Tuple_impl (326,828 samples, 0.03%)</title><rect x="87.7" y="341" width="0.3" height="15.0" fill="rgb(218,59,14)" rx="2" ry="2" />
+<text  x="90.69" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::SpectrumValue, ns3::Empty, ns3::DefaultDeleter&lt;ns3::SpectrumValue&gt; &gt;::Unref (235,829 samples, 0.02%)</title><rect x="656.0" y="501" width="0.2" height="15.0" fill="rgb(246,189,45)" rx="2" ry="2" />
+<text  x="659.02" y="511.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;::list (480,104 samples, 0.05%)</title><rect x="110.0" y="517" width="0.4" height="15.0" fill="rgb(231,121,29)" rx="2" ry="2" />
+<text  x="113.00" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node_base*&amp; std::forward&lt;std::_Rb_tree_node_base*&amp;&gt; (209,016 samples, 0.02%)</title><rect x="528.5" y="245" width="0.1" height="15.0" fill="rgb(253,224,53)" rx="2" ry="2" />
+<text  x="531.47" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumPhy::GetRxSpectrumModel (176,892 samples, 0.02%)</title><rect x="644.0" y="517" width="0.2" height="15.0" fill="rgb(248,199,47)" rx="2" ry="2" />
+<text  x="647.05" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::Packet::GetByteTagIterator (1,295,465 samples, 0.13%)</title><rect x="426.1" y="245" width="1.1" height="15.0" fill="rgb(211,31,7)" rx="2" ry="2" />
+<text  x="429.14" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::MacCeListElement_s::MacCeListElement_s (339,065 samples, 0.03%)</title><rect x="688.8" y="469" width="0.2" height="15.0" fill="rgb(223,85,20)" rx="2" ry="2" />
+<text  x="691.76" y="479.5" ></text>
+</g>
+<g >
+<title>std::operator== (124,937 samples, 0.01%)</title><rect x="611.7" y="517" width="0.1" height="15.0" fill="rgb(229,110,26)" rx="2" ry="2" />
+<text  x="614.74" y="527.5" ></text>
+</g>
+<g >
+<title>pow (310,695 samples, 0.03%)</title><rect x="227.1" y="469" width="0.3" height="15.0" fill="rgb(254,226,54)" rx="2" ry="2" />
+<text  x="230.10" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::push_back (148,897 samples, 0.02%)</title><rect x="347.2" y="533" width="0.1" height="15.0" fill="rgb(225,94,22)" rx="2" ry="2" />
+<text  x="350.19" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt; ns3::CompleteConstruct&lt;ns3::PacketBurst&gt; (5,277,768 samples, 0.54%)</title><rect x="371.0" y="517" width="4.3" height="15.0" fill="rgb(212,33,7)" rx="2" ry="2" />
+<text  x="374.04" y="527.5" ></text>
+</g>
+<g >
+<title>std::less&lt;ns3::Scheduler::EventKey&gt;::operator (414,791 samples, 0.04%)</title><rect x="85.8" y="389" width="0.3" height="15.0" fill="rgb(234,137,32)" rx="2" ry="2" />
+<text  x="88.78" y="399.5" ></text>
+</g>
+<g >
+<title>cfree (124,845 samples, 0.01%)</title><rect x="76.7" y="357" width="0.1" height="15.0" fill="rgb(223,86,20)" rx="2" ry="2" />
+<text  x="79.70" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt;::~Ptr (1,777,558 samples, 0.18%)</title><rect x="652.6" y="437" width="1.4" height="15.0" fill="rgb(205,3,0)" rx="2" ry="2" />
+<text  x="655.59" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Bind&lt;void  (1,437,343 samples, 0.15%)</title><rect x="711.4" y="421" width="1.1" height="15.0" fill="rgb(253,221,52)" rx="2" ry="2" />
+<text  x="714.39" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::Callback&lt;void, std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt;::operator (75,636,826 samples, 7.80%)</title><rect x="515.8" y="549" width="60.9" height="15.0" fill="rgb(229,110,26)" rx="2" ry="2" />
+<text  x="518.83" y="559.5" >ns3::C..</text>
+</g>
+<g >
+<title>ns3::LteFrNoOpAlgorithm::DoGetAvailableDlRbg (848,072 samples, 0.09%)</title><rect x="175.5" y="469" width="0.7" height="15.0" fill="rgb(229,112,26)" rx="2" ry="2" />
+<text  x="178.54" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::LteRlcSpecificLteMacSapUser::ReceivePdu (1,587,883 samples, 0.16%)</title><rect x="435.7" y="293" width="1.3" height="15.0" fill="rgb(206,6,1)" rx="2" ry="2" />
+<text  x="438.74" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::~SpectrumValue (390,089 samples, 0.04%)</title><rect x="483.8" y="517" width="0.3" height="15.0" fill="rgb(247,193,46)" rx="2" ry="2" />
+<text  x="486.78" y="527.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::operator[] (186,851 samples, 0.02%)</title><rect x="678.5" y="469" width="0.1" height="15.0" fill="rgb(248,200,47)" rx="2" ry="2" />
+<text  x="681.46" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; &gt;::_Rb_tree_iterator (160,302 samples, 0.02%)</title><rect x="348.9" y="501" width="0.1" height="15.0" fill="rgb(223,87,20)" rx="2" ry="2" />
+<text  x="351.88" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::PacketTagList::PacketTagList (222,450 samples, 0.02%)</title><rect x="153.9" y="357" width="0.1" height="15.0" fill="rgb(237,151,36)" rx="2" ry="2" />
+<text  x="156.87" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::ObjectDeleter::Delete (238,924 samples, 0.02%)</title><rect x="36.6" y="581" width="0.2" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="39.64" y="591.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::at (196,396 samples, 0.02%)</title><rect x="173.7" y="453" width="0.2" height="15.0" fill="rgb(238,152,36)" rx="2" ry="2" />
+<text  x="176.72" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::emplace_hint&lt;unsigned int const&amp;, ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp;&gt; (1,489,049 samples, 0.15%)</title><rect x="331.5" y="485" width="1.2" height="15.0" fill="rgb(211,29,6)" rx="2" ry="2" />
+<text  x="334.51" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_Vector_impl::~_Vector_impl (125,125 samples, 0.01%)</title><rect x="216.6" y="453" width="0.1" height="15.0" fill="rgb(212,34,8)" rx="2" ry="2" />
+<text  x="219.65" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumPhy&gt;::~Ptr (200,126 samples, 0.02%)</title><rect x="672.2" y="533" width="0.1" height="15.0" fill="rgb(224,91,21)" rx="2" ry="2" />
+<text  x="675.17" y="543.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::~list (578,265 samples, 0.06%)</title><rect x="576.1" y="373" width="0.5" height="15.0" fill="rgb(222,80,19)" rx="2" ry="2" />
+<text  x="579.13" y="383.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;std::is_constructible&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt;::value, std::pair&lt;std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, bool&gt; &gt;::type std::map&lt;ns3::Scheduler::EventKey, ns3::EventImpl*, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::insert&lt;std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (932,942 samples, 0.10%)</title><rect x="615.4" y="485" width="0.8" height="15.0" fill="rgb(211,29,7)" rx="2" ry="2" />
+<text  x="618.45" y="495.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, ns3::LteUePhy::UeMeasurementsElement, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::LteUePhy::UeMeasurementsElement&gt; &gt; &gt;::find (242,538 samples, 0.03%)</title><rect x="726.4" y="325" width="0.2" height="15.0" fill="rgb(235,141,33)" rx="2" ry="2" />
+<text  x="729.36" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultSimulatorImpl::Run (22,443,594 samples, 2.31%)</title><rect x="17.2" y="789" width="18.0" height="15.0" fill="rgb(207,11,2)" rx="2" ry="2" />
+<text  x="20.17" y="799.5" ></text>
+</g>
+<g >
+<title>operator new (201,409 samples, 0.02%)</title><rect x="547.4" y="37" width="0.2" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="550.41" y="47.5" ></text>
+</g>
+<g >
+<title>ns3::LteUePhy*&amp; std::_Mu&lt;ns3::LteUePhy*, false, false&gt;::operator (226,205 samples, 0.02%)</title><rect x="49.6" y="597" width="0.1" height="15.0" fill="rgb(235,139,33)" rx="2" ry="2" />
+<text  x="52.55" y="607.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;* std::__copy_move_a2&lt;true, std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;*, std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;*&gt; (154,567 samples, 0.02%)</title><rect x="117.8" y="437" width="0.1" height="15.0" fill="rgb(210,26,6)" rx="2" ry="2" />
+<text  x="120.78" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::key_comp (125,297 samples, 0.01%)</title><rect x="84.2" y="421" width="0.1" height="15.0" fill="rgb(229,114,27)" rx="2" ry="2" />
+<text  x="87.20" y="431.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;::_M_erase (2,288,506 samples, 0.24%)</title><rect x="634.1" y="517" width="1.8" height="15.0" fill="rgb(223,86,20)" rx="2" ry="2" />
+<text  x="637.11" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteControlMessage&gt;&amp; std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::emplace_back&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; const&amp;&gt; (919,396 samples, 0.09%)</title><rect x="732.9" y="437" width="0.8" height="15.0" fill="rgb(224,89,21)" rx="2" ry="2" />
+<text  x="735.95" y="447.5" ></text>
+</g>
+<g >
+<title>operator new (156,584 samples, 0.02%)</title><rect x="154.6" y="373" width="0.1" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="157.60" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteSpectrumSignalParametersDlCtrlFrame&gt;::operator (168,179 samples, 0.02%)</title><rect x="731.6" y="517" width="0.1" height="15.0" fill="rgb(226,97,23)" rx="2" ry="2" />
+<text  x="734.56" y="527.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; const* std::__addressof&lt;std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; const&gt; (186,584 samples, 0.02%)</title><rect x="685.9" y="437" width="0.2" height="15.0" fill="rgb(230,118,28)" rx="2" ry="2" />
+<text  x="688.91" y="447.5" ></text>
+</g>
+<g >
+<title>void std::destroy_at&lt;ns3::DlInfoListElement_s&gt; (652,447 samples, 0.07%)</title><rect x="132.6" y="421" width="0.5" height="15.0" fill="rgb(254,227,54)" rx="2" ry="2" />
+<text  x="135.56" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_Rb_tree_impl&lt;std::less&lt;unsigned int&gt;, true&gt;::_Rb_tree_impl (236,125 samples, 0.02%)</title><rect x="329.5" y="469" width="0.2" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="332.55" y="479.5" ></text>
+</g>
+<g >
+<title> (160,485 samples, 0.02%)</title><rect x="368.5" y="501" width="0.1" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="371.48" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::MacCeListElement_s::~MacCeListElement_s (599,086 samples, 0.06%)</title><rect x="265.0" y="389" width="0.4" height="15.0" fill="rgb(209,20,4)" rx="2" ry="2" />
+<text  x="267.96" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultDeleter&lt;ns3::SpectrumSignalParameters&gt;::Delete (2,421,676 samples, 0.25%)</title><rect x="652.5" y="485" width="1.9" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="655.49" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::LteUePhy::PhyPduReceived (4,557,849 samples, 0.47%)</title><rect x="434.9" y="373" width="3.7" height="15.0" fill="rgb(215,47,11)" rx="2" ry="2" />
+<text  x="437.94" y="383.5" ></text>
+</g>
+<g >
+<title>void  (200,340 samples, 0.02%)</title><rect x="423.0" y="389" width="0.2" height="15.0" fill="rgb(253,221,53)" rx="2" ry="2" />
+<text  x="426.05" y="399.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;double&gt;::allocate (490,258 samples, 0.05%)</title><rect x="239.4" y="197" width="0.4" height="15.0" fill="rgb(248,201,48)" rx="2" ry="2" />
+<text  x="242.41" y="207.5" ></text>
+</g>
+<g >
+<title>std::__detail::_List_node_header::_M_init (156,589 samples, 0.02%)</title><rect x="162.1" y="357" width="0.1" height="15.0" fill="rgb(243,178,42)" rx="2" ry="2" />
+<text  x="165.11" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt;::operator= (5,201,507 samples, 0.54%)</title><rect x="450.9" y="309" width="4.2" height="15.0" fill="rgb(219,65,15)" rx="2" ry="2" />
+<text  x="453.90" y="319.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::TbId_t, std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::_Select1st&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::_M_erase (270,189 samples, 0.03%)</title><rect x="506.3" y="501" width="0.3" height="15.0" fill="rgb(224,87,21)" rx="2" ry="2" />
+<text  x="509.35" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleUeCcmMacSapUser::ReceivePdu (2,333,945 samples, 0.24%)</title><rect x="435.6" y="325" width="1.9" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="438.60" y="335.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, unsigned char&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, unsigned char&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, unsigned char&gt; &gt; &gt;::_S_key (312,442 samples, 0.03%)</title><rect x="177.0" y="421" width="0.2" height="15.0" fill="rgb(210,27,6)" rx="2" ry="2" />
+<text  x="179.97" y="431.5" ></text>
+</g>
+<g >
+<title>void std::_Bind&lt;void  (884,239,690 samples, 91.18%)</title><rect x="47.0" y="613" width="711.2" height="15.0" fill="rgb(242,174,41)" rx="2" ry="2" />
+<text  x="50.01" y="623.5" >void std::_Bind&lt;void </text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;* std::__copy_move&lt;true, false, std::random_access_iterator_tag&gt;::__copy_m&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;*, std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;*&gt; (1,074,226 samples, 0.11%)</title><rect x="621.6" y="437" width="0.9" height="15.0" fill="rgb(209,21,5)" rx="2" ry="2" />
+<text  x="624.64" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt;::_Vector_base (431,145 samples, 0.04%)</title><rect x="131.7" y="485" width="0.3" height="15.0" fill="rgb(226,97,23)" rx="2" ry="2" />
+<text  x="134.68" y="495.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::allocate (143,335 samples, 0.01%)</title><rect x="499.5" y="421" width="0.1" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="502.52" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::EventImpl::EventImpl (158,256 samples, 0.02%)</title><rect x="340.0" y="453" width="0.1" height="15.0" fill="rgb(247,195,46)" rx="2" ry="2" />
+<text  x="343.02" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::LteControlMessage::LteControlMessage (271,693 samples, 0.03%)</title><rect x="288.2" y="405" width="0.2" height="15.0" fill="rgb(214,43,10)" rx="2" ry="2" />
+<text  x="291.18" y="415.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;::push_back (148,059 samples, 0.02%)</title><rect x="101.4" y="469" width="0.1" height="15.0" fill="rgb(205,3,0)" rx="2" ry="2" />
+<text  x="104.41" y="479.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;::operator* (233,448 samples, 0.02%)</title><rect x="745.5" y="517" width="0.2" height="15.0" fill="rgb(215,47,11)" rx="2" ry="2" />
+<text  x="748.50" y="527.5" ></text>
+</g>
+<g >
+<title>std::tuple&lt;unsigned short const&amp;&gt;::tuple (200,653 samples, 0.02%)</title><rect x="243.3" y="373" width="0.1" height="15.0" fill="rgb(233,129,30)" rx="2" ry="2" />
+<text  x="246.26" y="383.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt;::~vector (399,447 samples, 0.04%)</title><rect x="145.9" y="341" width="0.4" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="148.95" y="351.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_Vector_base (125,411 samples, 0.01%)</title><rect x="584.5" y="261" width="0.1" height="15.0" fill="rgb(205,2,0)" rx="2" ry="2" />
+<text  x="587.52" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultDeleter&lt;ns3::SpectrumSignalParameters&gt;::Delete (233,861 samples, 0.02%)</title><rect x="344.2" y="485" width="0.2" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="347.23" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;1ul, ns3::Ptr&lt;ns3::SpectrumValue&gt;, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::_Tuple_impl (368,770 samples, 0.04%)</title><rect x="87.7" y="373" width="0.3" height="15.0" fill="rgb(206,6,1)" rx="2" ry="2" />
+<text  x="90.66" y="383.5" ></text>
+</g>
+<g >
+<title>std::__detail::_List_node_header::_List_node_header (309,432 samples, 0.03%)</title><rect x="630.4" y="437" width="0.2" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="633.36" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_Auto_node::_M_insert (233,734 samples, 0.02%)</title><rect x="293.5" y="485" width="0.2" height="15.0" fill="rgb(223,83,20)" rx="2" ry="2" />
+<text  x="296.50" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumPhy::GetAntenna (524,985 samples, 0.05%)</title><rect x="703.8" y="549" width="0.5" height="15.0" fill="rgb(231,119,28)" rx="2" ry="2" />
+<text  x="706.84" y="559.5" ></text>
+</g>
+<g >
+<title>std::operator== (467,378 samples, 0.05%)</title><rect x="768.0" y="709" width="0.4" height="15.0" fill="rgb(229,110,26)" rx="2" ry="2" />
+<text  x="770.99" y="719.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::CqiListElement_s, std::allocator&lt;ns3::CqiListElement_s&gt; &gt;::_M_erase (1,008,706 samples, 0.10%)</title><rect x="254.9" y="501" width="0.8" height="15.0" fill="rgb(207,9,2)" rx="2" ry="2" />
+<text  x="257.91" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::BuildRarListElement_s* std::__uninitialized_copy&lt;false&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::BuildRarListElement_s const*, std::vector&lt;ns3::BuildRarListElement_s, std::allocator&lt;ns3::BuildRarListElement_s&gt; &gt; &gt;, ns3::BuildRarListElement_s*&gt; (198,569 samples, 0.02%)</title><rect x="143.1" y="405" width="0.2" height="15.0" fill="rgb(216,52,12)" rx="2" ry="2" />
+<text  x="146.13" y="415.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;* std::__copy_move_a2&lt;true, std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;*, std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;*&gt; (1,149,860 samples, 0.12%)</title><rect x="621.6" y="453" width="0.9" height="15.0" fill="rgb(210,26,6)" rx="2" ry="2" />
+<text  x="624.61" y="463.5" ></text>
+</g>
+<g >
+<title>unsigned short* std::__copy_move_a&lt;true, unsigned short*, unsigned short*&gt; (251,127 samples, 0.03%)</title><rect x="253.4" y="373" width="0.2" height="15.0" fill="rgb(253,223,53)" rx="2" ry="2" />
+<text  x="256.45" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::GetImpl (158,305 samples, 0.02%)</title><rect x="280.4" y="517" width="0.1" height="15.0" fill="rgb(223,87,20)" rx="2" ry="2" />
+<text  x="283.37" y="527.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt;::deallocate (152,095 samples, 0.02%)</title><rect x="256.6" y="309" width="0.1" height="15.0" fill="rgb(210,27,6)" rx="2" ry="2" />
+<text  x="259.57" y="319.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::Ptr&lt;ns3::Object&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Object&gt; &gt; &gt;::_Vector_impl::_Vector_impl (391,527 samples, 0.04%)</title><rect x="366.0" y="437" width="0.4" height="15.0" fill="rgb(206,6,1)" rx="2" ry="2" />
+<text  x="369.04" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::TracedCallback&lt;unsigned short, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;::operator (569,042 samples, 0.06%)</title><rect x="481.8" y="325" width="0.4" height="15.0" fill="rgb(221,76,18)" rx="2" ry="2" />
+<text  x="484.77" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::MacCeListElement_s::MacCeListElement_s (153,635 samples, 0.02%)</title><rect x="457.2" y="309" width="0.1" height="15.0" fill="rgb(223,85,20)" rx="2" ry="2" />
+<text  x="460.19" y="319.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;::back (388,694 samples, 0.04%)</title><rect x="382.9" y="501" width="0.3" height="15.0" fill="rgb(219,64,15)" rx="2" ry="2" />
+<text  x="385.86" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::HarqProcessInfoElement_t* std::copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::HarqProcessInfoElement_t const*, std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt;, ns3::HarqProcessInfoElement_t*&gt; (334,764 samples, 0.03%)</title><rect x="591.6" y="213" width="0.2" height="15.0" fill="rgb(247,195,46)" rx="2" ry="2" />
+<text  x="594.56" y="223.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue&gt; ns3::Create&lt;ns3::SpectrumValue, ns3::Ptr&lt;ns3::SpectrumModel&gt;&amp;&gt; (650,459 samples, 0.07%)</title><rect x="111.6" y="469" width="0.5" height="15.0" fill="rgb(228,107,25)" rx="2" ry="2" />
+<text  x="114.62" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt;&amp; std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;::emplace_back&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; (551,584 samples, 0.06%)</title><rect x="636.1" y="517" width="0.5" height="15.0" fill="rgb(228,106,25)" rx="2" ry="2" />
+<text  x="639.13" y="527.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Ptr&lt;ns3::Object&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Object&gt; &gt; &gt;::_M_erase_at_end (127,447 samples, 0.01%)</title><rect x="549.6" y="197" width="0.1" height="15.0" fill="rgb(246,189,45)" rx="2" ry="2" />
+<text  x="552.60" y="207.5" ></text>
+</g>
+<g >
+<title>ns3::MemberLteCcmMacSapUser&lt;ns3::NoOpComponentCarrierManager&gt;::ReceivePdu (7,833,319 samples, 0.81%)</title><rect x="424.0" y="325" width="6.3" height="15.0" fill="rgb(212,35,8)" rx="2" ry="2" />
+<text  x="426.95" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::VendorSpecificListElement_s const* std::__niter_base&lt;ns3::VendorSpecificListElement_s const*, std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt; &gt; (192,328 samples, 0.02%)</title><rect x="25.9" y="245" width="0.2" height="15.0" fill="rgb(221,77,18)" rx="2" ry="2" />
+<text  x="28.90" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt;::Ptr (156,542 samples, 0.02%)</title><rect x="163.8" y="421" width="0.1" height="15.0" fill="rgb(219,67,16)" rx="2" ry="2" />
+<text  x="166.80" y="431.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt; &gt;::destroy&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; (142,224 samples, 0.01%)</title><rect x="634.7" y="309" width="0.1" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="637.73" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Object&gt;::Acquire (269,784 samples, 0.03%)</title><rect x="704.0" y="517" width="0.3" height="15.0" fill="rgb(227,101,24)" rx="2" ry="2" />
+<text  x="707.05" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::~_Vector_base (357,028 samples, 0.04%)</title><rect x="233.3" y="309" width="0.3" height="15.0" fill="rgb(223,86,20)" rx="2" ry="2" />
+<text  x="236.27" y="319.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::operator= (1,336,444 samples, 0.14%)</title><rect x="213.6" y="485" width="1.0" height="15.0" fill="rgb(211,28,6)" rx="2" ry="2" />
+<text  x="216.57" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::AntennaModel&gt;::Ptr (201,269 samples, 0.02%)</title><rect x="742.0" y="533" width="0.2" height="15.0" fill="rgb(215,49,11)" rx="2" ry="2" />
+<text  x="745.03" y="543.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; const*, std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt;::difference_type __gnu_cxx::operator-&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; const*, std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; (278,789 samples, 0.03%)</title><rect x="633.8" y="517" width="0.2" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="636.79" y="527.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned char, ns3::LteMacSapProvider::ReportBufferStatusParameters, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider::ReportBufferStatusParameters&gt; &gt; &gt;::find (1,503,084 samples, 0.15%)</title><rect x="569.8" y="325" width="1.2" height="15.0" fill="rgb(239,157,37)" rx="2" ry="2" />
+<text  x="572.79" y="335.5" ></text>
+</g>
+<g >
+<title>std::tuple_element&lt;1ul, std::tuple&lt;double const&amp;, double const&amp;, double const&amp;&gt; &gt;::type const&amp; std::get&lt;1ul, double const&amp;, double const&amp;, double const&amp;&gt; (407,082 samples, 0.04%)</title><rect x="748.1" y="469" width="0.3" height="15.0" fill="rgb(230,116,27)" rx="2" ry="2" />
+<text  x="751.12" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt;::find (1,766,493 samples, 0.18%)</title><rect x="168.0" y="437" width="1.5" height="15.0" fill="rgb(219,68,16)" rx="2" ry="2" />
+<text  x="171.04" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Packet&gt;::Acquire (154,647 samples, 0.02%)</title><rect x="628.2" y="501" width="0.1" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="631.16" y="511.5" ></text>
+</g>
+<g >
+<title>void  (614,254 samples, 0.06%)</title><rect x="580.3" y="357" width="0.5" height="15.0" fill="rgb(253,221,53)" rx="2" ry="2" />
+<text  x="583.33" y="367.5" ></text>
+</g>
+<g >
+<title>std::modf (232,865 samples, 0.02%)</title><rect x="684.0" y="485" width="0.2" height="15.0" fill="rgb(249,206,49)" rx="2" ry="2" />
+<text  x="687.02" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::int64x64_t::MulByInvert (163,855 samples, 0.02%)</title><rect x="605.6" y="469" width="0.1" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="608.60" y="479.5" ></text>
+</g>
+<g >
+<title>[ld-linux-x86-64.so.2] (1,432,110 samples, 0.15%)</title><rect x="10.0" y="805" width="1.2" height="15.0" fill="rgb(243,178,42)" rx="2" ry="2" />
+<text  x="13.00" y="815.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::CqiListElement_s, std::allocator&lt;ns3::CqiListElement_s&gt; &gt;::erase (456,537 samples, 0.05%)</title><rect x="106.7" y="501" width="0.4" height="15.0" fill="rgb(231,123,29)" rx="2" ry="2" />
+<text  x="109.74" y="511.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::FfMacSchedSapProvider::SchedUlCqiInfoReqParameters*&gt; (1,058,935 samples, 0.11%)</title><rect x="263.2" y="469" width="0.9" height="15.0" fill="rgb(241,166,39)" rx="2" ry="2" />
+<text  x="266.21" y="479.5" ></text>
+</g>
+<g >
+<title>exit (155,299 samples, 0.02%)</title><rect x="35.5" y="789" width="0.2" height="15.0" fill="rgb(208,15,3)" rx="2" ry="2" />
+<text  x="38.54" y="799.5" ></text>
+</g>
+<g >
+<title>ns3::Buffer::~Buffer (206,160 samples, 0.02%)</title><rect x="76.1" y="229" width="0.2" height="15.0" fill="rgb(240,162,38)" rx="2" ry="2" />
+<text  x="79.11" y="239.5" ></text>
+</g>
+<g >
+<title>std::__allocated_ptr&lt;std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt; &gt;::operator= (147,762 samples, 0.02%)</title><rect x="363.1" y="453" width="0.1" height="15.0" fill="rgb(206,8,2)" rx="2" ry="2" />
+<text  x="366.13" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned int, std::allocator&lt;unsigned int&gt; &gt;::_M_allocate (191,041 samples, 0.02%)</title><rect x="695.2" y="453" width="0.1" height="15.0" fill="rgb(228,110,26)" rx="2" ry="2" />
+<text  x="698.16" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::ObjectDeleter::Delete (3,074,446 samples, 0.32%)</title><rect x="75.4" y="405" width="2.5" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="78.42" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::Time::ToDouble (1,825,393 samples, 0.19%)</title><rect x="405.8" y="501" width="1.5" height="15.0" fill="rgb(249,204,48)" rx="2" ry="2" />
+<text  x="408.85" y="511.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned char const, ns3::LteCcmMacSapProvider*&gt; &gt;::_M_ptr (243,580 samples, 0.03%)</title><rect x="458.6" y="197" width="0.2" height="15.0" fill="rgb(237,150,36)" rx="2" ry="2" />
+<text  x="461.61" y="207.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::operator= (1,599,149 samples, 0.16%)</title><rect x="317.1" y="405" width="1.3" height="15.0" fill="rgb(243,175,42)" rx="2" ry="2" />
+<text  x="320.14" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt; &gt;::find (1,126,228 samples, 0.12%)</title><rect x="73.3" y="485" width="1.0" height="15.0" fill="rgb(233,130,31)" rx="2" ry="2" />
+<text  x="76.35" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::PacketTagList::PacketTagList (159,488 samples, 0.02%)</title><rect x="624.9" y="485" width="0.1" height="15.0" fill="rgb(237,151,36)" rx="2" ry="2" />
+<text  x="627.90" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;ns3::UlDciListElement_s, std::allocator&lt;ns3::UlDciListElement_s&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;ns3::UlDciListElement_s, std::allocator&lt;ns3::UlDciListElement_s&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;ns3::UlDciListElement_s, std::allocator&lt;ns3::UlDciListElement_s&gt; &gt; &gt; &gt; &gt;::_M_mbegin (155,860 samples, 0.02%)</title><rect x="241.0" y="437" width="0.2" height="15.0" fill="rgb(248,202,48)" rx="2" ry="2" />
+<text  x="244.03" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;* std::_Rb_tree&lt;ns3::TbId_t, std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::_Select1st&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::_M_create_node&lt;std::pair&lt;ns3::TbId_t, ns3::tbInfo_t&gt; &gt; (1,386,943 samples, 0.14%)</title><rect x="384.3" y="469" width="1.1" height="15.0" fill="rgb(234,136,32)" rx="2" ry="2" />
+<text  x="387.30" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::PfFfMacScheduler::DoSchedUlCqiInfoReq (821,265 samples, 0.08%)</title><rect x="102.6" y="485" width="0.6" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="105.56" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::~vector (199,813 samples, 0.02%)</title><rect x="610.0" y="389" width="0.1" height="15.0" fill="rgb(243,174,41)" rx="2" ry="2" />
+<text  x="612.97" y="399.5" ></text>
+</g>
+<g >
+<title>void std::_Construct&lt;ns3::DlInfoListElement_s, ns3::DlInfoListElement_s const&amp;&gt; (4,273,011 samples, 0.44%)</title><rect x="258.5" y="421" width="3.4" height="15.0" fill="rgb(212,32,7)" rx="2" ry="2" />
+<text  x="261.49" y="431.5" ></text>
+</g>
+<g >
+<title>void std::__invoke_impl&lt;void, std::_Bind&lt;void  (5,321,712 samples, 0.55%)</title><rect x="11.2" y="661" width="4.3" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="14.17" y="671.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::SbMeasResult_s&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::SbMeasResult_s&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::SbMeasResult_s&gt; &gt; &gt;::_M_lower_bound (228,291 samples, 0.02%)</title><rect x="135.6" y="453" width="0.2" height="15.0" fill="rgb(239,160,38)" rx="2" ry="2" />
+<text  x="138.63" y="463.5" ></text>
+</g>
+<g >
+<title>void std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_M_realloc_insert&lt;unsigned char&gt; (1,385,167 samples, 0.14%)</title><rect x="597.0" y="261" width="1.1" height="15.0" fill="rgb(246,191,45)" rx="2" ry="2" />
+<text  x="599.96" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::Time::Time (156,551 samples, 0.02%)</title><rect x="408.7" y="469" width="0.1" height="15.0" fill="rgb(226,100,24)" rx="2" ry="2" />
+<text  x="411.69" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;int, std::allocator&lt;int&gt; &gt;::_Vector_base (427,278 samples, 0.04%)</title><rect x="399.4" y="533" width="0.3" height="15.0" fill="rgb(215,47,11)" rx="2" ry="2" />
+<text  x="402.40" y="543.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt;::construct&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; const&amp;&gt; (252,039 samples, 0.03%)</title><rect x="101.6" y="437" width="0.2" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="104.59" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::LteControlMessage, ns3::Empty, ns3::DefaultDeleter&lt;ns3::LteControlMessage&gt; &gt;::Ref (330,055 samples, 0.03%)</title><rect x="499.9" y="405" width="0.2" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="502.86" y="415.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Buffer::Data*, std::allocator&lt;ns3::Buffer::Data*&gt; &gt;::pop_back (158,310 samples, 0.02%)</title><rect x="32.6" y="341" width="0.1" height="15.0" fill="rgb(214,44,10)" rx="2" ry="2" />
+<text  x="35.57" y="351.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::AttributeConstructionList::Item, std::allocator&lt;ns3::AttributeConstructionList::Item&gt; &gt;::_M_clear (124,335 samples, 0.01%)</title><rect x="540.2" y="245" width="0.1" height="15.0" fill="rgb(217,58,13)" rx="2" ry="2" />
+<text  x="543.23" y="255.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;signed char&gt; &gt;::construct&lt;signed char, signed char&gt; (169,019 samples, 0.02%)</title><rect x="533.4" y="309" width="0.2" height="15.0" fill="rgb(233,132,31)" rx="2" ry="2" />
+<text  x="536.42" y="319.5" ></text>
+</g>
+<g >
+<title>_start (923,730,017 samples, 95.25%)</title><rect x="35.5" y="837" width="743.0" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="38.54" y="847.5" >_start</text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::operator[] (196,931 samples, 0.02%)</title><rect x="488.2" y="485" width="0.1" height="15.0" fill="rgb(248,200,47)" rx="2" ry="2" />
+<text  x="491.17" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Function_base::_M_empty (150,383 samples, 0.02%)</title><rect x="41.4" y="677" width="0.2" height="15.0" fill="rgb(244,183,43)" rx="2" ry="2" />
+<text  x="44.44" y="687.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Callback&lt;void, unsigned short, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::allocator&lt;ns3::Callback&lt;void, unsigned short, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::begin (240,498 samples, 0.02%)</title><rect x="481.8" y="309" width="0.2" height="15.0" fill="rgb(223,85,20)" rx="2" ry="2" />
+<text  x="484.83" y="319.5" ></text>
+</g>
+<g >
+<title>void std::__invoke_impl&lt;void, void  (833,626 samples, 0.09%)</title><rect x="725.9" y="357" width="0.7" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="728.89" y="367.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned char, ns3::LteMacSapProvider*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt; &gt;::find (306,410 samples, 0.03%)</title><rect x="29.3" y="373" width="0.2" height="15.0" fill="rgb(248,200,47)" rx="2" ry="2" />
+<text  x="32.25" y="383.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;::push_back (1,103,607 samples, 0.11%)</title><rect x="209.3" y="485" width="0.9" height="15.0" fill="rgb(205,3,0)" rx="2" ry="2" />
+<text  x="212.28" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Packet&gt; ns3::Create&lt;ns3::Packet, unsigned int&amp;&gt; (5,253,542 samples, 0.54%)</title><rect x="555.6" y="261" width="4.2" height="15.0" fill="rgb(253,223,53)" rx="2" ry="2" />
+<text  x="558.60" y="271.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt; &gt;::_M_ptr (158,837 samples, 0.02%)</title><rect x="675.2" y="437" width="0.2" height="15.0" fill="rgb(228,109,26)" rx="2" ry="2" />
+<text  x="678.24" y="447.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::UlDciListElement_s, std::allocator&lt;ns3::UlDciListElement_s&gt; &gt;::max_size (276,398 samples, 0.03%)</title><rect x="250.2" y="437" width="0.2" height="15.0" fill="rgb(235,141,33)" rx="2" ry="2" />
+<text  x="253.17" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;::_M_get_Tp_allocator (314,467 samples, 0.03%)</title><rect x="513.7" y="533" width="0.2" height="15.0" fill="rgb(237,148,35)" rx="2" ry="2" />
+<text  x="516.69" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbRrc::AddUe (285,958 samples, 0.03%)</title><rect x="130.4" y="485" width="0.2" height="15.0" fill="rgb(230,118,28)" rx="2" ry="2" />
+<text  x="133.38" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Bvector_base&lt;std::allocator&lt;bool&gt; &gt;::_Bvector_impl_data::_M_reset (156,996 samples, 0.02%)</title><rect x="202.1" y="437" width="0.2" height="15.0" fill="rgb(233,129,31)" rx="2" ry="2" />
+<text  x="205.13" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::HarqProcessInfoElement_t* std::__niter_wrap&lt;ns3::HarqProcessInfoElement_t*&gt; (274,590 samples, 0.03%)</title><rect x="353.8" y="389" width="0.2" height="15.0" fill="rgb(221,74,17)" rx="2" ry="2" />
+<text  x="356.77" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::HarqStatus_e* std::__copy_move_a2&lt;false, ns3::DlInfoListElement_s::HarqStatus_e const*, ns3::DlInfoListElement_s::HarqStatus_e*&gt; (158,174 samples, 0.02%)</title><rect x="510.0" y="405" width="0.2" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="513.04" y="415.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;bool, std::allocator&lt;bool&gt; &gt;::_M_copy_aligned (653,505 samples, 0.07%)</title><rect x="248.0" y="437" width="0.5" height="15.0" fill="rgb(243,176,42)" rx="2" ry="2" />
+<text  x="250.98" y="447.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;::__normal_iterator (126,951 samples, 0.01%)</title><rect x="408.1" y="453" width="0.1" height="15.0" fill="rgb(249,206,49)" rx="2" ry="2" />
+<text  x="411.14" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Packet&gt;::operator bool (157,451 samples, 0.02%)</title><rect x="361.6" y="501" width="0.2" height="15.0" fill="rgb(252,219,52)" rx="2" ry="2" />
+<text  x="364.65" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultDeleter&lt;ns3::SpectrumValue&gt;::Delete (362,265 samples, 0.04%)</title><rect x="728.3" y="453" width="0.3" height="15.0" fill="rgb(222,79,19)" rx="2" ry="2" />
+<text  x="731.27" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::UlDciListElement_s* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;ns3::UlDciListElement_s const*, std::vector&lt;ns3::UlDciListElement_s, std::allocator&lt;ns3::UlDciListElement_s&gt; &gt; &gt;, ns3::UlDciListElement_s*, ns3::UlDciListElement_s&gt; (196,365 samples, 0.02%)</title><rect x="228.2" y="437" width="0.1" height="15.0" fill="rgb(235,139,33)" rx="2" ry="2" />
+<text  x="231.16" y="447.5" ></text>
+</g>
+<g >
+<title>void std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_construct_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; const&amp;&gt; (127,066 samples, 0.01%)</title><rect x="88.3" y="373" width="0.1" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="91.28" y="383.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt;::begin (157,097 samples, 0.02%)</title><rect x="205.1" y="389" width="0.2" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="208.13" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::EnbMacMemberLteEnbPhySapUser::SubframeIndication (19,358,790 samples, 2.00%)</title><rect x="19.6" y="581" width="15.5" height="15.0" fill="rgb(252,216,51)" rx="2" ry="2" />
+<text  x="22.57" y="591.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::list (205,185 samples, 0.02%)</title><rect x="343.7" y="485" width="0.2" height="15.0" fill="rgb(236,145,34)" rx="2" ry="2" />
+<text  x="346.70" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::BuildDataListElement_s, std::allocator&lt;ns3::BuildDataListElement_s&gt; &gt;::_M_allocate (198,391 samples, 0.02%)</title><rect x="202.4" y="453" width="0.2" height="15.0" fill="rgb(225,94,22)" rx="2" ry="2" />
+<text  x="205.45" y="463.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned char, ns3::LteMacSapProvider*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt; &gt;::find (270,008 samples, 0.03%)</title><rect x="17.7" y="373" width="0.2" height="15.0" fill="rgb(248,200,47)" rx="2" ry="2" />
+<text  x="20.67" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::operator+ (149,473 samples, 0.02%)</title><rect x="339.5" y="453" width="0.1" height="15.0" fill="rgb(244,182,43)" rx="2" ry="2" />
+<text  x="342.47" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::_Auto_node::_Auto_node&lt;std::piecewise_construct_t const&amp;, std::tuple&lt;unsigned short const&amp;&gt;, std::tuple&lt;&gt; &gt; (1,505,468 samples, 0.16%)</title><rect x="190.8" y="453" width="1.2" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="193.82" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::PacketMetadata::Create (796,815 samples, 0.08%)</title><rect x="32.7" y="373" width="0.6" height="15.0" fill="rgb(231,122,29)" rx="2" ry="2" />
+<text  x="35.70" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteSpectrumSignalParametersDataFrame&gt; ns3::Create&lt;ns3::LteSpectrumSignalParametersDataFrame, ns3::LteSpectrumSignalParametersDataFrame const&amp;&gt; (6,974,208 samples, 0.72%)</title><rect x="67.4" y="501" width="5.6" height="15.0" fill="rgb(226,98,23)" rx="2" ry="2" />
+<text  x="70.44" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::NetDevice&gt;::Ptr (158,827 samples, 0.02%)</title><rect x="643.7" y="501" width="0.1" height="15.0" fill="rgb(226,98,23)" rx="2" ry="2" />
+<text  x="646.67" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::UniformRandomVariable::GetValue (910,934 samples, 0.09%)</title><rect x="495.2" y="549" width="0.7" height="15.0" fill="rgb(238,152,36)" rx="2" ry="2" />
+<text  x="498.19" y="559.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt; &gt;::_M_ptr (165,849 samples, 0.02%)</title><rect x="55.5" y="405" width="0.1" height="15.0" fill="rgb(228,109,26)" rx="2" ry="2" />
+<text  x="58.46" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt;::_M_allocate (364,814 samples, 0.04%)</title><rect x="444.8" y="277" width="0.3" height="15.0" fill="rgb(209,21,5)" rx="2" ry="2" />
+<text  x="447.82" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::LteHarqPhy::SubframeIndication (778,194 samples, 0.08%)</title><rect x="117.0" y="533" width="0.6" height="15.0" fill="rgb(229,112,26)" rx="2" ry="2" />
+<text  x="119.96" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::EnbMacMemberFfMacSchedSapUser::SchedDlConfigInd (415,834 samples, 0.04%)</title><rect x="15.5" y="469" width="0.3" height="15.0" fill="rgb(241,166,39)" rx="2" ry="2" />
+<text  x="18.45" y="479.5" ></text>
+</g>
+<g >
+<title>double const* std::__niter_base&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; (157,559 samples, 0.02%)</title><rect x="730.7" y="421" width="0.1" height="15.0" fill="rgb(213,38,9)" rx="2" ry="2" />
+<text  x="733.70" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::tbInfo_t::tbInfo_t (653,622 samples, 0.07%)</title><rect x="527.1" y="197" width="0.5" height="15.0" fill="rgb(224,91,21)" rx="2" ry="2" />
+<text  x="530.08" y="207.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::end (261,288 samples, 0.03%)</title><rect x="635.5" y="325" width="0.2" height="15.0" fill="rgb(211,29,6)" rx="2" ry="2" />
+<text  x="638.53" y="335.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::vector (487,568 samples, 0.05%)</title><rect x="494.8" y="533" width="0.4" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="497.80" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::PfFfMacScheduler::RefreshDlCqiMaps (1,254,491 samples, 0.13%)</title><rect x="177.9" y="485" width="1.0" height="15.0" fill="rgb(230,115,27)" rx="2" ry="2" />
+<text  x="180.88" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned int const, ns3::RxSpectrumModelInfo&gt; &gt;::_M_valptr (258,528 samples, 0.03%)</title><rect x="656.9" y="485" width="0.2" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="659.92" y="495.5" ></text>
+</g>
+<g >
+<title>std::tuple_element&lt;2ul, std::tuple&lt;ns3::LteInterference*, ns3::Ptr&lt;ns3::SpectrumValue const&gt;, unsigned int&gt; &gt;::type&amp; std::get&lt;2ul, ns3::LteInterference*, ns3::Ptr&lt;ns3::SpectrumValue const&gt;, unsigned int&gt; (960,298 samples, 0.10%)</title><rect x="755.5" y="597" width="0.8" height="15.0" fill="rgb(248,201,48)" rx="2" ry="2" />
+<text  x="758.49" y="607.5" ></text>
+</g>
+<g >
+<title>ns3::LteUeRrc::DoRecvMasterInformationBlock (193,516 samples, 0.02%)</title><rect x="533.6" y="341" width="0.1" height="15.0" fill="rgb(234,134,32)" rx="2" ry="2" />
+<text  x="536.59" y="351.5" ></text>
+</g>
+<g >
+<title>void std::destroy_at&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; (193,911 samples, 0.02%)</title><rect x="104.0" y="341" width="0.1" height="15.0" fill="rgb(246,192,46)" rx="2" ry="2" />
+<text  x="106.96" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::TagBuffer::WriteU8 (197,148 samples, 0.02%)</title><rect x="31.0" y="373" width="0.2" height="15.0" fill="rgb(219,64,15)" rx="2" ry="2" />
+<text  x="34.01" y="383.5" ></text>
+</g>
+<g >
+<title>double* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, double*, double&gt; (418,403 samples, 0.04%)</title><rect x="654.6" y="469" width="0.3" height="15.0" fill="rgb(222,79,19)" rx="2" ry="2" />
+<text  x="657.59" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::at (276,726 samples, 0.03%)</title><rect x="459.2" y="277" width="0.2" height="15.0" fill="rgb(238,152,36)" rx="2" ry="2" />
+<text  x="462.19" y="287.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_M_erase (818,048 samples, 0.08%)</title><rect x="394.1" y="517" width="0.7" height="15.0" fill="rgb(227,102,24)" rx="2" ry="2" />
+<text  x="397.10" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::MemberSchedSapProvider&lt;ns3::PfFfMacScheduler&gt;::SchedDlRlcBufferReq (605,673 samples, 0.06%)</title><rect x="17.9" y="325" width="0.5" height="15.0" fill="rgb(218,60,14)" rx="2" ry="2" />
+<text  x="20.95" y="335.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt;::end (201,886 samples, 0.02%)</title><rect x="443.3" y="293" width="0.2" height="15.0" fill="rgb(246,189,45)" rx="2" ry="2" />
+<text  x="446.29" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::HigherLayerSelected_s::HigherLayerSelected_s (202,804 samples, 0.02%)</title><rect x="593.4" y="165" width="0.1" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="596.38" y="175.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::~_Rb_tree (895,963 samples, 0.09%)</title><rect x="776.5" y="421" width="0.7" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="779.50" y="431.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;double&gt;::deallocate (154,926 samples, 0.02%)</title><rect x="484.0" y="421" width="0.1" height="15.0" fill="rgb(250,208,49)" rx="2" ry="2" />
+<text  x="486.97" y="431.5" ></text>
+</g>
+<g >
+<title>int* std::__copy_move_a2&lt;false, int const*, int*&gt; (162,673 samples, 0.02%)</title><rect x="531.3" y="277" width="0.1" height="15.0" fill="rgb(224,87,20)" rx="2" ry="2" />
+<text  x="534.29" y="287.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_insert_and_rebalance (195,862 samples, 0.02%)</title><rect x="335.5" y="357" width="0.1" height="15.0" fill="rgb(225,94,22)" rx="2" ry="2" />
+<text  x="338.48" y="367.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned char, ns3::LteCcmMacSapProvider*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteCcmMacSapProvider*&gt; &gt; &gt;::find (1,417,571 samples, 0.15%)</title><rect x="458.0" y="277" width="1.2" height="15.0" fill="rgb(245,186,44)" rx="2" ry="2" />
+<text  x="461.05" y="287.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;1ul, ns3::Ptr&lt;ns3::SpectrumValue const&gt;, unsigned int&gt;::_Tuple_impl (853,910 samples, 0.09%)</title><rect x="711.9" y="373" width="0.6" height="15.0" fill="rgb(216,54,13)" rx="2" ry="2" />
+<text  x="714.86" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::~PacketBurst (383,002 samples, 0.04%)</title><rect x="166.4" y="373" width="0.3" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="169.42" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::SpectrumSignalParameters, ns3::Empty, ns3::DefaultDeleter&lt;ns3::SpectrumSignalParameters&gt; &gt;::Ref (272,369 samples, 0.03%)</title><rect x="750.9" y="533" width="0.2" height="15.0" fill="rgb(221,74,17)" rx="2" ry="2" />
+<text  x="753.86" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::LogComponent::IsEnabled (155,440 samples, 0.02%)</title><rect x="220.5" y="485" width="0.1" height="15.0" fill="rgb(214,43,10)" rx="2" ry="2" />
+<text  x="223.50" y="495.5" ></text>
+</g>
+<g >
+<title>operator delete (153,527 samples, 0.02%)</title><rect x="764.9" y="581" width="0.1" height="15.0" fill="rgb(247,196,46)" rx="2" ry="2" />
+<text  x="767.92" y="591.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt;::construct&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, ns3::Ptr&lt;ns3::MibLteControlMessage&gt;&amp;&gt; (151,782 samples, 0.02%)</title><rect x="122.4" y="501" width="0.1" height="15.0" fill="rgb(238,154,36)" rx="2" ry="2" />
+<text  x="125.36" y="511.5" ></text>
+</g>
+<g >
+<title> (240,645 samples, 0.02%)</title><rect x="160.2" y="437" width="0.1" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="163.15" y="447.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::VendorSpecificListElement_s*, ns3::VendorSpecificListElement_s&gt; (234,807 samples, 0.02%)</title><rect x="263.9" y="373" width="0.2" height="15.0" fill="rgb(207,12,3)" rx="2" ry="2" />
+<text  x="266.87" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt;::_M_lower_bound (500,820 samples, 0.05%)</title><rect x="568.2" y="261" width="0.4" height="15.0" fill="rgb(240,162,38)" rx="2" ry="2" />
+<text  x="571.19" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultSimulatorImpl::Schedule (888,679 samples, 0.09%)</title><rect x="62.2" y="501" width="0.7" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="65.21" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumPhy::EndRxData (121,921,584 samples, 12.57%)</title><rect x="417.2" y="565" width="98.1" height="15.0" fill="rgb(222,80,19)" rx="2" ry="2" />
+<text  x="420.20" y="575.5" >ns3::LteSpe..</text>
+</g>
+<g >
+<title>modff64x (241,188 samples, 0.02%)</title><rect x="390.8" y="469" width="0.2" height="15.0" fill="rgb(218,62,14)" rx="2" ry="2" />
+<text  x="393.79" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt;::max_size (465,751 samples, 0.05%)</title><rect x="211.1" y="437" width="0.4" height="15.0" fill="rgb(241,167,39)" rx="2" ry="2" />
+<text  x="214.11" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbMac::DoSchedUlConfigInd (1,937,481 samples, 0.20%)</title><rect x="230.0" y="469" width="1.6" height="15.0" fill="rgb(246,188,45)" rx="2" ry="2" />
+<text  x="233.01" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::WrapToPi (196,497 samples, 0.02%)</title><rect x="311.2" y="453" width="0.2" height="15.0" fill="rgb(227,105,25)" rx="2" ry="2" />
+<text  x="314.20" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, unsigned char&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, unsigned char&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, unsigned char&gt; &gt; &gt;::_M_begin (182,609 samples, 0.02%)</title><rect x="244.5" y="453" width="0.1" height="15.0" fill="rgb(235,139,33)" rx="2" ry="2" />
+<text  x="247.50" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::LteFfrAlgorithm::GetRbgSize (314,835 samples, 0.03%)</title><rect x="175.8" y="453" width="0.3" height="15.0" fill="rgb(208,14,3)" rx="2" ry="2" />
+<text  x="178.85" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::_M_default_initialize (647,164 samples, 0.07%)</title><rect x="729.7" y="437" width="0.6" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="732.73" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; &gt; &gt;::find (2,749,650 samples, 0.28%)</title><rect x="522.7" y="325" width="2.2" height="15.0" fill="rgb(205,3,0)" rx="2" ry="2" />
+<text  x="525.67" y="335.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;* std::__copy_move&lt;true, false, std::random_access_iterator_tag&gt;::__copy_m&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;*, std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;*&gt; (145,758 samples, 0.02%)</title><rect x="110.6" y="421" width="0.1" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="113.56" y="431.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::BuildDataListElement_s, std::allocator&lt;ns3::BuildDataListElement_s&gt; &gt;::operator[] (152,525 samples, 0.02%)</title><rect x="172.9" y="437" width="0.1" height="15.0" fill="rgb(235,140,33)" rx="2" ry="2" />
+<text  x="175.90" y="447.5" ></text>
+</g>
+<g >
+<title>int&amp; std::vector&lt;int, std::allocator&lt;int&gt; &gt;::emplace_back&lt;int&gt; (931,649 samples, 0.10%)</title><rect x="572.5" y="341" width="0.7" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="575.50" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt;::~Ptr (279,109 samples, 0.03%)</title><rect x="382.1" y="469" width="0.2" height="15.0" fill="rgb(205,3,0)" rx="2" ry="2" />
+<text  x="385.09" y="479.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::allocate (313,319 samples, 0.03%)</title><rect x="626.6" y="405" width="0.2" height="15.0" fill="rgb(215,48,11)" rx="2" ry="2" />
+<text  x="629.59" y="415.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::copy&lt;__gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, unsigned char*&gt; (280,915 samples, 0.03%)</title><rect x="519.3" y="277" width="0.3" height="15.0" fill="rgb(241,168,40)" rx="2" ry="2" />
+<text  x="522.35" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Packet&gt;::Ptr (218,155 samples, 0.02%)</title><rect x="363.8" y="421" width="0.1" height="15.0" fill="rgb(230,117,28)" rx="2" ry="2" />
+<text  x="366.77" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;* std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_clone_node&lt;false, std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_Alloc_node&gt; (155,456 samples, 0.02%)</title><rect x="341.2" y="389" width="0.2" height="15.0" fill="rgb(205,4,0)" rx="2" ry="2" />
+<text  x="344.24" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::LteControlMessage, ns3::Empty, ns3::DefaultDeleter&lt;ns3::LteControlMessage&gt; &gt;::Unref (127,064 samples, 0.01%)</title><rect x="576.5" y="277" width="0.1" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="579.49" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::Packet, ns3::Empty, ns3::DefaultDeleter&lt;ns3::Packet&gt; &gt;::Unref (943,939 samples, 0.10%)</title><rect x="75.9" y="277" width="0.8" height="15.0" fill="rgb(215,47,11)" rx="2" ry="2" />
+<text  x="78.94" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultDeleter&lt;ns3::Packet&gt;::Delete (359,163 samples, 0.04%)</title><rect x="502.1" y="309" width="0.2" height="15.0" fill="rgb(231,123,29)" rx="2" ry="2" />
+<text  x="505.05" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::HigherLayerSelected_s* std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt;::_M_allocate_and_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::HigherLayerSelected_s const*, std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt; &gt; &gt; (324,739 samples, 0.03%)</title><rect x="593.3" y="261" width="0.3" height="15.0" fill="rgb(209,22,5)" rx="2" ry="2" />
+<text  x="596.31" y="271.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::_M_clear (891,714 samples, 0.09%)</title><rect x="377.9" y="325" width="0.7" height="15.0" fill="rgb(217,56,13)" rx="2" ry="2" />
+<text  x="380.91" y="335.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::CqiListElement_s&gt; (154,796 samples, 0.02%)</title><rect x="131.1" y="437" width="0.1" height="15.0" fill="rgb(241,165,39)" rx="2" ry="2" />
+<text  x="134.12" y="447.5" ></text>
+</g>
+<g >
+<title>operator new (190,161 samples, 0.02%)</title><rect x="212.9" y="309" width="0.1" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="215.85" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::EventImpl&gt;::~Ptr (281,749 samples, 0.03%)</title><rect x="305.7" y="469" width="0.2" height="15.0" fill="rgb(225,92,22)" rx="2" ry="2" />
+<text  x="308.65" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Simulator::DoSchedule (888,679 samples, 0.09%)</title><rect x="62.2" y="517" width="0.7" height="15.0" fill="rgb(222,79,18)" rx="2" ry="2" />
+<text  x="65.21" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;5ul, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::~_Tuple_impl (934,712 samples, 0.10%)</title><rect x="776.5" y="469" width="0.7" height="15.0" fill="rgb(207,10,2)" rx="2" ry="2" />
+<text  x="779.47" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt;::_Rb_tree_iterator (163,346 samples, 0.02%)</title><rect x="242.4" y="437" width="0.1" height="15.0" fill="rgb(210,24,5)" rx="2" ry="2" />
+<text  x="245.36" y="447.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::BuildDataListElement_s*, ns3::BuildDataListElement_s&gt; (793,632 samples, 0.08%)</title><rect x="145.6" y="437" width="0.7" height="15.0" fill="rgb(215,47,11)" rx="2" ry="2" />
+<text  x="148.63" y="447.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__enable_if&lt;std::__is_scalar&lt;unsigned int&gt;::__value, void&gt;::__type std::__fill_a1&lt;unsigned int*, unsigned int&gt; (467,368 samples, 0.05%)</title><rect x="696.1" y="373" width="0.3" height="15.0" fill="rgb(222,81,19)" rx="2" ry="2" />
+<text  x="699.06" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::MacCeValue_u::MacCeValue_u (153,635 samples, 0.02%)</title><rect x="457.2" y="293" width="0.1" height="15.0" fill="rgb(219,65,15)" rx="2" ry="2" />
+<text  x="460.19" y="303.5" ></text>
+</g>
+<g >
+<title>decltype  (232,855 samples, 0.02%)</title><rect x="722.0" y="405" width="0.1" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="724.96" y="415.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::operator= (3,155,006 samples, 0.33%)</title><rect x="731.9" y="517" width="2.5" height="15.0" fill="rgb(251,215,51)" rx="2" ry="2" />
+<text  x="734.89" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::ByteTagList::Begin (1,259,994 samples, 0.13%)</title><rect x="426.2" y="229" width="1.0" height="15.0" fill="rgb(243,174,41)" rx="2" ry="2" />
+<text  x="429.17" y="239.5" ></text>
+</g>
+<g >
+<title>ns3::SbMeasResult_s::~SbMeasResult_s (154,796 samples, 0.02%)</title><rect x="131.1" y="389" width="0.1" height="15.0" fill="rgb(221,77,18)" rx="2" ry="2" />
+<text  x="134.12" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::MemberSchedSapProvider&lt;ns3::PfFfMacScheduler&gt;::SchedDlTriggerReq (102,277,174 samples, 10.55%)</title><rect x="137.9" y="517" width="82.3" height="15.0" fill="rgb(247,193,46)" rx="2" ry="2" />
+<text  x="140.90" y="527.5" >ns3::Memb..</text>
+</g>
+<g >
+<title>ns3::HigherLayerSelected_s* std::__copy_move_a1&lt;false, ns3::HigherLayerSelected_s const*, ns3::HigherLayerSelected_s*&gt; (126,567 samples, 0.01%)</title><rect x="585.8" y="197" width="0.1" height="15.0" fill="rgb(227,104,25)" rx="2" ry="2" />
+<text  x="588.82" y="207.5" ></text>
+</g>
+<g >
+<title>ns3::FfMacSchedSapProvider::SchedUlCqiInfoReqParameters* std::__addressof&lt;ns3::FfMacSchedSapProvider::SchedUlCqiInfoReqParameters&gt; (156,394 samples, 0.02%)</title><rect x="263.3" y="437" width="0.2" height="15.0" fill="rgb(248,200,47)" rx="2" ry="2" />
+<text  x="266.34" y="447.5" ></text>
+</g>
+<g >
+<title>std::__allocated_ptr&lt;std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt;::operator= (125,732 samples, 0.01%)</title><rect x="733.4" y="389" width="0.1" height="15.0" fill="rgb(249,202,48)" rx="2" ry="2" />
+<text  x="736.43" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::RlcTag::Serialize (356,272 samples, 0.04%)</title><rect x="16.4" y="373" width="0.3" height="15.0" fill="rgb(233,133,31)" rx="2" ry="2" />
+<text  x="19.41" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::Object::Construct (2,451,198 samples, 0.25%)</title><rect x="630.7" y="501" width="2.0" height="15.0" fill="rgb(228,108,26)" rx="2" ry="2" />
+<text  x="633.71" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_get_node (768,882 samples, 0.08%)</title><rect x="270.2" y="405" width="0.7" height="15.0" fill="rgb(221,75,17)" rx="2" ry="2" />
+<text  x="273.23" y="415.5" ></text>
+</g>
+<g >
+<title>int* std::__copy_move_a1&lt;false, int const*, int*&gt; (214,092 samples, 0.02%)</title><rect x="574.1" y="261" width="0.2" height="15.0" fill="rgb(230,117,28)" rx="2" ry="2" />
+<text  x="577.15" y="271.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, unsigned short, std::_Identity&lt;unsigned short&gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;unsigned short&gt; &gt;::find (955,568 samples, 0.10%)</title><rect x="462.8" y="341" width="0.8" height="15.0" fill="rgb(238,154,36)" rx="2" ry="2" />
+<text  x="465.85" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue const&gt;::Ptr&lt;ns3::SpectrumValue&gt; (191,031 samples, 0.02%)</title><rect x="737.7" y="533" width="0.2" height="15.0" fill="rgb(249,202,48)" rx="2" ry="2" />
+<text  x="740.71" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::~_Vector_base (146,912 samples, 0.02%)</title><rect x="303.7" y="421" width="0.1" height="15.0" fill="rgb(223,86,20)" rx="2" ry="2" />
+<text  x="306.68" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::GetImpl (242,375 samples, 0.02%)</title><rect x="779.5" y="837" width="0.2" height="15.0" fill="rgb(223,87,20)" rx="2" ry="2" />
+<text  x="782.49" y="847.5" ></text>
+</g>
+<g >
+<title>std::_Head_base&lt;5ul, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;, false&gt;::~_Head_base (934,712 samples, 0.10%)</title><rect x="776.5" y="453" width="0.7" height="15.0" fill="rgb(205,2,0)" rx="2" ry="2" />
+<text  x="779.47" y="463.5" ></text>
+</g>
+<g >
+<title>int* std::__copy_move&lt;false, true, std::random_access_iterator_tag&gt;::__copy_m&lt;int const, int&gt; (162,673 samples, 0.02%)</title><rect x="531.3" y="261" width="0.1" height="15.0" fill="rgb(250,207,49)" rx="2" ry="2" />
+<text  x="534.29" y="271.5" ></text>
+</g>
+<g >
+<title>[libm.so.6] (276,808 samples, 0.03%)</title><rect x="750.0" y="533" width="0.3" height="15.0" fill="rgb(208,16,4)" rx="2" ry="2" />
+<text  x="753.05" y="543.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;is_invocable_r_v&lt;void, std::_Bind&lt;void  (888,830,008 samples, 91.65%)</title><rect x="43.3" y="661" width="714.9" height="15.0" fill="rgb(243,178,42)" rx="2" ry="2" />
+<text  x="46.31" y="671.5" >std::enable_if&lt;is_invocable_r_v&lt;void, std::_Bind&lt;void </text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue&gt; ns3::Create&lt;ns3::SpectrumValue, ns3::Ptr&lt;ns3::SpectrumModel const&gt; const&amp;&gt; (1,116,674 samples, 0.12%)</title><rect x="645.9" y="437" width="0.9" height="15.0" fill="rgb(246,189,45)" rx="2" ry="2" />
+<text  x="648.94" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumValueHelper::GetSpectrumModel (1,991,247 samples, 0.21%)</title><rect x="54.5" y="501" width="1.6" height="15.0" fill="rgb(207,12,3)" rx="2" ry="2" />
+<text  x="57.51" y="511.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, unsigned char, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, unsigned char&gt; &gt; &gt;::begin (434,661 samples, 0.04%)</title><rect x="193.8" y="485" width="0.4" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="196.82" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::BuildDataListElement_s, std::allocator&lt;ns3::BuildDataListElement_s&gt; &gt;::_S_relocate (371,811 samples, 0.04%)</title><rect x="202.9" y="453" width="0.3" height="15.0" fill="rgb(247,197,47)" rx="2" ry="2" />
+<text  x="205.89" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::NixVector&gt;::Ptr (292,715 samples, 0.03%)</title><rect x="558.9" y="229" width="0.3" height="15.0" fill="rgb(248,201,48)" rx="2" ry="2" />
+<text  x="561.92" y="239.5" ></text>
+</g>
+<g >
+<title>ns3::SbMeasResult_s::SbMeasResult_s (154,721 samples, 0.02%)</title><rect x="461.6" y="245" width="0.1" height="15.0" fill="rgb(235,141,33)" rx="2" ry="2" />
+<text  x="464.55" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s* std::vector&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt;::_M_allocate_and_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::DlInfoListElement_s const*, std::vector&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt; &gt; &gt; (5,646,301 samples, 0.58%)</title><rect x="257.8" y="501" width="4.6" height="15.0" fill="rgb(248,198,47)" rx="2" ry="2" />
+<text  x="260.82" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::TagBuffer::TagBuffer (206,219 samples, 0.02%)</title><rect x="13.1" y="373" width="0.2" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="16.10" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::LteControlMessage, ns3::Empty, ns3::DefaultDeleter&lt;ns3::LteControlMessage&gt; &gt;::SimpleRefCount (141,410 samples, 0.01%)</title><rect x="421.0" y="309" width="0.1" height="15.0" fill="rgb(208,15,3)" rx="2" ry="2" />
+<text  x="424.03" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::PfFfMacScheduler::DoSchedDlTriggerReq (415,834 samples, 0.04%)</title><rect x="15.5" y="485" width="0.3" height="15.0" fill="rgb(214,45,10)" rx="2" ry="2" />
+<text  x="18.45" y="495.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt; &gt;::construct&lt;ns3::Ptr&lt;ns3::Packet&gt;, ns3::Ptr&lt;ns3::Packet&gt; const&amp;&gt; (247,590 samples, 0.03%)</title><rect x="564.2" y="133" width="0.2" height="15.0" fill="rgb(254,228,54)" rx="2" ry="2" />
+<text  x="567.20" y="143.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumPhy::EndRxUlSrs (363,240 samples, 0.04%)</title><rect x="611.9" y="565" width="0.3" height="15.0" fill="rgb(252,216,51)" rx="2" ry="2" />
+<text  x="614.94" y="575.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;bool, std::allocator&lt;bool&gt; &gt;::size (156,263 samples, 0.02%)</title><rect x="248.8" y="469" width="0.2" height="15.0" fill="rgb(208,17,4)" rx="2" ry="2" />
+<text  x="251.84" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::~PacketBurst (1,016,178 samples, 0.10%)</title><rect x="635.0" y="341" width="0.8" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="637.98" y="351.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;std::__is_bitwise_relocatable&lt;unsigned short, void&gt;::value, unsigned short*&gt;::type std::__relocate_a_1&lt;unsigned short, unsigned short&gt; (126,646 samples, 0.01%)</title><rect x="481.2" y="229" width="0.1" height="15.0" fill="rgb(235,141,33)" rx="2" ry="2" />
+<text  x="484.24" y="239.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;::_S_relocate (319,205 samples, 0.03%)</title><rect x="209.9" y="453" width="0.3" height="15.0" fill="rgb(218,63,15)" rx="2" ry="2" />
+<text  x="212.91" y="463.5" ></text>
+</g>
+<g >
+<title>double* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, double*&gt; (210,427 samples, 0.02%)</title><rect x="78.3" y="453" width="0.2" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="81.29" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::ObjectBase::ObjectBase (178,001 samples, 0.02%)</title><rect x="161.3" y="389" width="0.2" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="164.34" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_emplace_hint_unique&lt;std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (917,334 samples, 0.09%)</title><rect x="706.4" y="421" width="0.8" height="15.0" fill="rgb(248,201,48)" rx="2" ry="2" />
+<text  x="709.45" y="431.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;bool, std::allocator&lt;bool&gt; &gt;::_M_fill_insert (4,584,091 samples, 0.47%)</title><rect x="197.2" y="453" width="3.7" height="15.0" fill="rgb(229,112,26)" rx="2" ry="2" />
+<text  x="200.22" y="463.5" ></text>
+</g>
+<g >
+<title>[ld-linux-x86-64.so.2] (1,432,154 samples, 0.15%)</title><rect x="10.0" y="821" width="1.2" height="15.0" fill="rgb(243,178,42)" rx="2" ry="2" />
+<text  x="13.00" y="831.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::clear (1,296,666 samples, 0.13%)</title><rect x="652.6" y="357" width="1.1" height="15.0" fill="rgb(217,58,13)" rx="2" ry="2" />
+<text  x="655.64" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::ObjectBase::ConstructSelf (2,205,090 samples, 0.23%)</title><rect x="33.3" y="437" width="1.8" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="36.34" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;::operator-- (189,133 samples, 0.02%)</title><rect x="336.1" y="373" width="0.1" height="15.0" fill="rgb(223,86,20)" rx="2" ry="2" />
+<text  x="339.08" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::LtePhy::SetMacPdu (539,148 samples, 0.06%)</title><rect x="19.9" y="325" width="0.4" height="15.0" fill="rgb(248,201,48)" rx="2" ry="2" />
+<text  x="22.86" y="335.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt;::at (165,094 samples, 0.02%)</title><rect x="598.8" y="277" width="0.1" height="15.0" fill="rgb(248,200,47)" rx="2" ry="2" />
+<text  x="601.76" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::UeSelected_s::operator= (127,305 samples, 0.01%)</title><rect x="593.2" y="277" width="0.1" height="15.0" fill="rgb(244,183,43)" rx="2" ry="2" />
+<text  x="596.21" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::PacketMetadata::Create (266,992 samples, 0.03%)</title><rect x="19.1" y="357" width="0.2" height="15.0" fill="rgb(231,122,29)" rx="2" ry="2" />
+<text  x="22.11" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::ObjectBase::ConstructSelf (185,707 samples, 0.02%)</title><rect x="119.4" y="469" width="0.2" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="122.44" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt; &gt;::_Auto_node::_Auto_node&lt;std::pair&lt;unsigned short, ns3::DlInfoListElement_s&gt; &gt; (1,129,994 samples, 0.12%)</title><rect x="503.1" y="501" width="0.9" height="15.0" fill="rgb(245,184,44)" rx="2" ry="2" />
+<text  x="506.11" y="511.5" ></text>
+</g>
+<g >
+<title>[libm.so.6] (283,669 samples, 0.03%)</title><rect x="309.8" y="469" width="0.2" height="15.0" fill="rgb(208,16,4)" rx="2" ry="2" />
+<text  x="312.79" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;::Ptr (126,810 samples, 0.01%)</title><rect x="74.9" y="517" width="0.1" height="15.0" fill="rgb(250,208,49)" rx="2" ry="2" />
+<text  x="77.92" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteControlMessage&gt;::Acquire (196,949 samples, 0.02%)</title><rect x="319.1" y="277" width="0.2" height="15.0" fill="rgb(212,36,8)" rx="2" ry="2" />
+<text  x="322.11" y="287.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::LteSpectrumModelId, std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt;, std::_Select1st&lt;std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt; &gt;, std::less&lt;ns3::LteSpectrumModelId&gt;, std::allocator&lt;std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt; &gt; &gt;::find (1,328,190 samples, 0.14%)</title><rect x="675.5" y="469" width="1.1" height="15.0" fill="rgb(254,226,54)" rx="2" ry="2" />
+<text  x="678.51" y="479.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::push_back (234,373 samples, 0.02%)</title><rect x="17.4" y="325" width="0.2" height="15.0" fill="rgb(222,79,18)" rx="2" ry="2" />
+<text  x="20.39" y="335.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::~vector (162,616 samples, 0.02%)</title><rect x="457.7" y="229" width="0.2" height="15.0" fill="rgb(243,174,41)" rx="2" ry="2" />
+<text  x="460.72" y="239.5" ></text>
+</g>
+<g >
+<title>ns3::SbMeasResult_s::SbMeasResult_s (1,765,679 samples, 0.18%)</title><rect x="124.7" y="389" width="1.4" height="15.0" fill="rgb(235,141,33)" rx="2" ry="2" />
+<text  x="127.68" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::EnbMacMemberLteMacSapProvider&lt;ns3::LteEnbMac&gt;::ReportBufferStatus (3,928,142 samples, 0.41%)</title><rect x="24.3" y="373" width="3.1" height="15.0" fill="rgb(241,166,39)" rx="2" ry="2" />
+<text  x="27.28" y="383.5" ></text>
+</g>
+<g >
+<title>pow (353,785 samples, 0.04%)</title><rect x="750.0" y="549" width="0.3" height="15.0" fill="rgb(254,226,54)" rx="2" ry="2" />
+<text  x="752.99" y="559.5" ></text>
+</g>
+<g >
+<title>void std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_construct_node&lt;unsigned int const&amp;, ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp;&gt; (395,726 samples, 0.04%)</title><rect x="331.8" y="421" width="0.3" height="15.0" fill="rgb(234,135,32)" rx="2" ry="2" />
+<text  x="334.79" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::Buffer::Buffer (238,535 samples, 0.02%)</title><rect x="153.2" y="357" width="0.2" height="15.0" fill="rgb(254,226,54)" rx="2" ry="2" />
+<text  x="156.17" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumModel const&gt;::Ptr (141,816 samples, 0.01%)</title><rect x="718.1" y="469" width="0.2" height="15.0" fill="rgb(232,125,30)" rx="2" ry="2" />
+<text  x="721.15" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::TracedCallback&lt;ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt; &gt;::operator (699,741 samples, 0.07%)</title><rect x="328.0" y="501" width="0.6" height="15.0" fill="rgb(228,106,25)" rx="2" ry="2" />
+<text  x="331.00" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::LtePhy::GetControlMessages[abi:cxx11] (5,917,079 samples, 0.61%)</title><rect x="619.2" y="549" width="4.7" height="15.0" fill="rgb(250,208,49)" rx="2" ry="2" />
+<text  x="622.18" y="559.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt; &gt;::construct&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; const&amp;&gt; (2,931,196 samples, 0.30%)</title><rect x="238.0" y="341" width="2.3" height="15.0" fill="rgb(216,54,12)" rx="2" ry="2" />
+<text  x="240.96" y="351.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::push_back (155,710 samples, 0.02%)</title><rect x="101.9" y="469" width="0.1" height="15.0" fill="rgb(215,50,11)" rx="2" ry="2" />
+<text  x="104.86" y="479.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::CqiListElement_s*&gt; (416,767 samples, 0.04%)</title><rect x="106.8" y="437" width="0.3" height="15.0" fill="rgb(219,67,16)" rx="2" ry="2" />
+<text  x="109.77" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::~PacketBurst (158,753 samples, 0.02%)</title><rect x="17.0" y="389" width="0.1" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="19.99" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::CqiListElement_s::~CqiListElement_s (154,796 samples, 0.02%)</title><rect x="131.1" y="405" width="0.1" height="15.0" fill="rgb(225,92,22)" rx="2" ry="2" />
+<text  x="134.12" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, unsigned int&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt; &gt;::_M_begin (318,309 samples, 0.03%)</title><rect x="172.2" y="421" width="0.3" height="15.0" fill="rgb(243,178,42)" rx="2" ry="2" />
+<text  x="175.25" y="431.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;int*, int&gt; (161,562 samples, 0.02%)</title><rect x="575.3" y="341" width="0.1" height="15.0" fill="rgb(206,5,1)" rx="2" ry="2" />
+<text  x="578.30" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::HarqStatus_e* std::copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::DlInfoListElement_s::HarqStatus_e const*, std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt; &gt;, ns3::DlInfoListElement_s::HarqStatus_e*&gt; (1,860,884 samples, 0.19%)</title><rect x="259.1" y="325" width="1.5" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="262.11" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::Packet::~Packet (734,989 samples, 0.08%)</title><rect x="76.1" y="245" width="0.6" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="79.08" y="255.5" ></text>
+</g>
+<g >
+<title>std::_Bind_helper&lt;std::__or_&lt;std::is_integral&lt;std::decay&lt;void  (325,363 samples, 0.03%)</title><rect x="87.4" y="469" width="0.2" height="15.0" fill="rgb(237,148,35)" rx="2" ry="2" />
+<text  x="90.36" y="479.5" ></text>
+</g>
+<g >
+<title>decltype  (240,418 samples, 0.02%)</title><rect x="611.3" y="453" width="0.2" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="614.35" y="463.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;::_M_insert&lt;ns3::UlDciLteControlMessage const&amp;&gt; (1,786,879 samples, 0.18%)</title><rect x="287.1" y="485" width="1.4" height="15.0" fill="rgb(224,91,21)" rx="2" ry="2" />
+<text  x="290.08" y="495.5" ></text>
+</g>
+<g >
+<title>double* std::__uninitialized_default_n&lt;double*, unsigned long&gt; (455,698 samples, 0.05%)</title><rect x="677.6" y="421" width="0.4" height="15.0" fill="rgb(231,123,29)" rx="2" ry="2" />
+<text  x="680.60" y="431.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt;::_M_ptr (349,350 samples, 0.04%)</title><rect x="224.2" y="405" width="0.3" height="15.0" fill="rgb(206,4,1)" rx="2" ry="2" />
+<text  x="227.20" y="415.5" ></text>
+</g>
+<g >
+<title>void std::__invoke_impl&lt;void, ns3::MakeEvent&lt;&gt; (238,924 samples, 0.02%)</title><rect x="36.6" y="661" width="0.2" height="15.0" fill="rgb(218,62,14)" rx="2" ry="2" />
+<text  x="39.64" y="671.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt; &gt;::_M_lower_bound (420,439 samples, 0.04%)</title><rect x="73.7" y="469" width="0.4" height="15.0" fill="rgb(253,225,53)" rx="2" ry="2" />
+<text  x="76.75" y="479.5" ></text>
+</g>
+<g >
+<title>unsigned short* std::__uninitialized_copy&lt;true&gt;::__uninit_copy&lt;std::move_iterator&lt;unsigned short*&gt;, unsigned short*&gt; (728,775 samples, 0.08%)</title><rect x="253.1" y="405" width="0.5" height="15.0" fill="rgb(226,97,23)" rx="2" ry="2" />
+<text  x="256.06" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt;::_Vector_impl_data::_Vector_impl_data (157,537 samples, 0.02%)</title><rect x="130.9" y="453" width="0.1" height="15.0" fill="rgb(213,37,9)" rx="2" ry="2" />
+<text  x="133.91" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::LteAmc::GetMcsFromCqi (233,362 samples, 0.02%)</title><rect x="175.3" y="485" width="0.2" height="15.0" fill="rgb(234,135,32)" rx="2" ry="2" />
+<text  x="178.30" y="495.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;*, std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; std::__miter_base&lt;__gnu_cxx::__normal_iterator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;*, std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; (188,301 samples, 0.02%)</title><rect x="381.7" y="485" width="0.2" height="15.0" fill="rgb(217,55,13)" rx="2" ry="2" />
+<text  x="384.72" y="495.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned char, ns3::LteMacSapProvider::ReportBufferStatusParameters, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider::ReportBufferStatusParameters&gt; &gt; &gt;::end (158,274 samples, 0.02%)</title><rect x="569.7" y="325" width="0.1" height="15.0" fill="rgb(223,87,20)" rx="2" ry="2" />
+<text  x="572.66" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::Singleton&lt;ns3::IidManager&gt;::Get (145,954 samples, 0.02%)</title><rect x="373.8" y="453" width="0.1" height="15.0" fill="rgb(222,79,19)" rx="2" ry="2" />
+<text  x="376.77" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; &gt; &gt;::find (1,985,670 samples, 0.20%)</title><rect x="465.1" y="517" width="1.6" height="15.0" fill="rgb(205,3,0)" rx="2" ry="2" />
+<text  x="468.11" y="527.5" ></text>
+</g>
+<g >
+<title>std::tuple_element&lt;3ul, std::tuple&lt;ns3::MultiModelSpectrumChannel*, ns3::Ptr&lt;ns3::SpectrumValue&gt;, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt; &gt;::type&amp; std::get&lt;3ul, ns3::MultiModelSpectrumChannel*, ns3::Ptr&lt;ns3::SpectrumValue&gt;, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt; (236,255 samples, 0.02%)</title><rect x="756.9" y="597" width="0.2" height="15.0" fill="rgb(218,63,15)" rx="2" ry="2" />
+<text  x="759.93" y="607.5" ></text>
+</g>
+<g >
+<title>std::move_iterator&lt;unsigned short*&gt;::move_iterator (197,587 samples, 0.02%)</title><rect x="252.9" y="421" width="0.1" height="15.0" fill="rgb(239,160,38)" rx="2" ry="2" />
+<text  x="255.87" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::Object::Dispose (238,924 samples, 0.02%)</title><rect x="36.6" y="533" width="0.2" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="39.64" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_emplace_hint_unique&lt;std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (2,388,285 samples, 0.25%)</title><rect x="660.9" y="421" width="1.9" height="15.0" fill="rgb(248,201,48)" rx="2" ry="2" />
+<text  x="663.86" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultSimulatorImpl::Schedule (2,358,952 samples, 0.24%)</title><rect x="706.2" y="485" width="1.9" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="709.16" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::MemberLteCcmMacSapUser&lt;ns3::NoOpComponentCarrierManager&gt;::NotifyTxOpportunity (304,289 samples, 0.03%)</title><rect x="15.5" y="437" width="0.2" height="15.0" fill="rgb(205,3,0)" rx="2" ry="2" />
+<text  x="18.45" y="447.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned char, ns3::LteMacSapProvider::ReportBufferStatusParameters, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider::ReportBufferStatusParameters&gt; &gt; &gt;::end (393,274 samples, 0.04%)</title><rect x="690.5" y="501" width="0.3" height="15.0" fill="rgb(223,87,20)" rx="2" ry="2" />
+<text  x="693.46" y="511.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, ns3::pfsFlowPerf_t, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt; &gt; &gt;::find (1,750,862 samples, 0.18%)</title><rect x="235.3" y="485" width="1.4" height="15.0" fill="rgb(211,28,6)" rx="2" ry="2" />
+<text  x="238.26" y="495.5" ></text>
+</g>
+<g >
+<title>std::_List_const_iterator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt;::operator++ (196,897 samples, 0.02%)</title><rect x="628.5" y="517" width="0.2" height="15.0" fill="rgb(228,107,25)" rx="2" ry="2" />
+<text  x="631.50" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::LogComponent::IsEnabled (217,399 samples, 0.02%)</title><rect x="367.5" y="517" width="0.2" height="15.0" fill="rgb(214,43,10)" rx="2" ry="2" />
+<text  x="370.52" y="527.5" ></text>
+</g>
+<g >
+<title>double* std::__copy_move_a2&lt;false, double const*, double*&gt; (125,420 samples, 0.01%)</title><rect x="72.4" y="357" width="0.1" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="75.44" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::CqiListElement_s* std::__uninitialized_copy&lt;false&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::CqiListElement_s*, std::vector&lt;ns3::CqiListElement_s, std::allocator&lt;ns3::CqiListElement_s&gt; &gt; &gt;, ns3::CqiListElement_s*&gt; (1,085,784 samples, 0.11%)</title><rect x="92.1" y="437" width="0.8" height="15.0" fill="rgb(211,29,7)" rx="2" ry="2" />
+<text  x="95.06" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::LogComponent::IsEnabled (126,870 samples, 0.01%)</title><rect x="587.3" y="277" width="0.1" height="15.0" fill="rgb(214,43,10)" rx="2" ry="2" />
+<text  x="590.30" y="287.5" ></text>
+</g>
+<g >
+<title>std::__tuple_compare&lt;std::tuple&lt;double const&amp;, double const&amp;, double const&amp;&gt;, std::tuple&lt;double const&amp;, double const&amp;, double const&amp;&gt;, 1ul, 3ul&gt;::__eq (1,304,506 samples, 0.13%)</title><rect x="747.4" y="485" width="1.0" height="15.0" fill="rgb(229,110,26)" rx="2" ry="2" />
+<text  x="750.40" y="495.5" ></text>
+</g>
+<g >
+<title>std::less&lt;unsigned short&gt;::operator (310,760 samples, 0.03%)</title><rect x="524.1" y="293" width="0.3" height="15.0" fill="rgb(207,11,2)" rx="2" ry="2" />
+<text  x="527.11" y="303.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt; &gt; &gt;::_M_lower_bound (1,339,418 samples, 0.14%)</title><rect x="433.6" y="293" width="1.1" height="15.0" fill="rgb(208,18,4)" rx="2" ry="2" />
+<text  x="436.58" y="303.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt;::destroy&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; (1,991,119 samples, 0.21%)</title><rect x="501.3" y="517" width="1.6" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="504.32" y="527.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt;::begin (154,700 samples, 0.02%)</title><rect x="257.3" y="501" width="0.1" height="15.0" fill="rgb(244,183,43)" rx="2" ry="2" />
+<text  x="260.32" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned short const, unsigned char&gt; &gt;::operator* (264,202 samples, 0.03%)</title><rect x="135.2" y="485" width="0.2" height="15.0" fill="rgb(234,134,32)" rx="2" ry="2" />
+<text  x="138.23" y="495.5" ></text>
+</g>
+<g >
+<title> (234,452 samples, 0.02%)</title><rect x="297.6" y="453" width="0.2" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="300.59" y="463.5" ></text>
+</g>
+<g >
+<title>std::tuple&lt;ns3::LteInterference*, ns3::Ptr&lt;ns3::SpectrumValue const&gt;, unsigned int&gt;::~tuple (1,016,655 samples, 0.10%)</title><rect x="772.7" y="565" width="0.9" height="15.0" fill="rgb(251,215,51)" rx="2" ry="2" />
+<text  x="775.74" y="575.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::RxSpectrumModelInfo&gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::RxSpectrumModelInfo&gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::RxSpectrumModelInfo&gt; &gt; &gt;::begin (414,271 samples, 0.04%)</title><rect x="657.6" y="501" width="0.3" height="15.0" fill="rgb(226,97,23)" rx="2" ry="2" />
+<text  x="660.61" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteControlMessage&gt;::Ptr (199,678 samples, 0.02%)</title><rect x="150.5" y="437" width="0.2" height="15.0" fill="rgb(222,81,19)" rx="2" ry="2" />
+<text  x="153.54" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::MacCeValue_u::~MacCeValue_u (457,826 samples, 0.05%)</title><rect x="688.2" y="485" width="0.4" height="15.0" fill="rgb(205,0,0)" rx="2" ry="2" />
+<text  x="691.25" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::CeBitmap_e, std::allocator&lt;ns3::CeBitmap_e&gt; &gt;::~vector (156,611 samples, 0.02%)</title><rect x="139.5" y="469" width="0.1" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="142.47" y="479.5" ></text>
+</g>
+<g >
+<title>void std::_Function_base::_Base_manager&lt;std::_Bind&lt;void  (496,911 samples, 0.05%)</title><rect x="63.9" y="469" width="0.4" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="66.94" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::AntennaModel&gt;::Acquire (155,047 samples, 0.02%)</title><rect x="342.4" y="501" width="0.2" height="15.0" fill="rgb(205,4,1)" rx="2" ry="2" />
+<text  x="345.44" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Packet::RemovePacketTag (1,745,173 samples, 0.18%)</title><rect x="430.3" y="325" width="1.4" height="15.0" fill="rgb(227,103,24)" rx="2" ry="2" />
+<text  x="433.25" y="335.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;int&gt;::allocate (169,207 samples, 0.02%)</title><rect x="574.6" y="277" width="0.1" height="15.0" fill="rgb(235,139,33)" rx="2" ry="2" />
+<text  x="577.55" y="287.5" ></text>
+</g>
+<g >
+<title>[libm.so.6] (303,230 samples, 0.03%)</title><rect x="641.9" y="469" width="0.2" height="15.0" fill="rgb(208,16,4)" rx="2" ry="2" />
+<text  x="644.89" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::max_size (250,041 samples, 0.03%)</title><rect x="597.4" y="229" width="0.2" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="600.39" y="239.5" ></text>
+</g>
+<g >
+<title>ns3::MakeEvent&lt;void  (319,694 samples, 0.03%)</title><rect x="727.6" y="437" width="0.2" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="730.59" y="447.5" ></text>
+</g>
+<g >
+<title> (164,113 samples, 0.02%)</title><rect x="70.7" y="453" width="0.1" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="73.69" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::CeBitmap_e* std::__uninitialized_copy&lt;true&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::CeBitmap_e const*, std::vector&lt;ns3::CeBitmap_e, std::allocator&lt;ns3::CeBitmap_e&gt; &gt; &gt;, ns3::CeBitmap_e*&gt; (414,390 samples, 0.04%)</title><rect x="203.9" y="357" width="0.3" height="15.0" fill="rgb(239,156,37)" rx="2" ry="2" />
+<text  x="206.90" y="367.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::vector (1,354,660 samples, 0.14%)</title><rect x="324.8" y="469" width="1.1" height="15.0" fill="rgb(239,156,37)" rx="2" ry="2" />
+<text  x="327.79" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned char const, std::map&lt;unsigned char, ns3::LteMacSapProvider*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt; &gt; &gt; &gt;::operator (126,576 samples, 0.01%)</title><rect x="552.3" y="213" width="0.1" height="15.0" fill="rgb(213,38,9)" rx="2" ry="2" />
+<text  x="555.26" y="223.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteControlMessage&gt;::Ptr (156,463 samples, 0.02%)</title><rect x="388.7" y="549" width="0.1" height="15.0" fill="rgb(222,81,19)" rx="2" ry="2" />
+<text  x="391.69" y="559.5" ></text>
+</g>
+<g >
+<title>ns3::EventId ns3::Simulator::Schedule&lt;void  (4,891,359 samples, 0.50%)</title><rect x="615.2" y="549" width="3.9" height="15.0" fill="rgb(253,224,53)" rx="2" ry="2" />
+<text  x="618.19" y="559.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt;* std::__copy_move&lt;true, false, std::random_access_iterator_tag&gt;::__copy_m&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;*, ns3::Ptr&lt;ns3::PacketBurst&gt;*&gt; (5,666,405 samples, 0.58%)</title><rect x="377.0" y="437" width="4.6" height="15.0" fill="rgb(212,33,7)" rx="2" ry="2" />
+<text  x="380.00" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt;::_M_begin (155,598 samples, 0.02%)</title><rect x="455.6" y="277" width="0.1" height="15.0" fill="rgb(254,225,53)" rx="2" ry="2" />
+<text  x="458.59" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::~SpectrumValue (127,422 samples, 0.01%)</title><rect x="61.4" y="469" width="0.1" height="15.0" fill="rgb(247,193,46)" rx="2" ry="2" />
+<text  x="64.37" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::RarLteControlMessage&gt;::~Ptr (538,741 samples, 0.06%)</title><rect x="167.0" y="453" width="0.5" height="15.0" fill="rgb(215,50,12)" rx="2" ry="2" />
+<text  x="170.03" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Buffer::Buffer (1,912,352 samples, 0.20%)</title><rect x="555.7" y="229" width="1.5" height="15.0" fill="rgb(254,226,54)" rx="2" ry="2" />
+<text  x="558.70" y="239.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;int*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt; std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;int const*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;int*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt; &gt; (330,607 samples, 0.03%)</title><rect x="531.2" y="309" width="0.3" height="15.0" fill="rgb(236,146,35)" rx="2" ry="2" />
+<text  x="534.19" y="319.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_mbegin (234,522 samples, 0.02%)</title><rect x="273.5" y="421" width="0.2" height="15.0" fill="rgb(234,135,32)" rx="2" ry="2" />
+<text  x="276.49" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbMac::DoSchedDlConfigInd (1,650,854 samples, 0.17%)</title><rect x="15.8" y="469" width="1.3" height="15.0" fill="rgb(205,3,0)" rx="2" ry="2" />
+<text  x="18.79" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::size (164,095 samples, 0.02%)</title><rect x="597.6" y="229" width="0.1" height="15.0" fill="rgb(252,217,52)" rx="2" ry="2" />
+<text  x="600.59" y="239.5" ></text>
+</g>
+<g >
+<title>ns3::PacketMetadata::~PacketMetadata (559,336 samples, 0.06%)</title><rect x="453.1" y="101" width="0.5" height="15.0" fill="rgb(217,56,13)" rx="2" ry="2" />
+<text  x="456.12" y="111.5" ></text>
+</g>
+<g >
+<title>ns3::MemberSchedSapProvider&lt;ns3::PfFfMacScheduler&gt;::SchedUlTriggerReq (34,464,006 samples, 3.55%)</title><rect x="226.2" y="517" width="27.7" height="15.0" fill="rgb(237,148,35)" rx="2" ry="2" />
+<text  x="229.18" y="527.5" >n..</text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_M_check_len (545,573 samples, 0.06%)</title><rect x="215.1" y="437" width="0.4" height="15.0" fill="rgb(220,70,16)" rx="2" ry="2" />
+<text  x="218.10" y="447.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::operator= (277,205 samples, 0.03%)</title><rect x="140.1" y="469" width="0.2" height="15.0" fill="rgb(211,28,6)" rx="2" ry="2" />
+<text  x="143.05" y="479.5" ></text>
+</g>
+<g >
+<title>std::less&lt;unsigned int&gt;::operator (177,845 samples, 0.02%)</title><rect x="322.3" y="437" width="0.1" height="15.0" fill="rgb(236,146,35)" rx="2" ry="2" />
+<text  x="325.26" y="447.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;ns3::TbId_t, ns3::tbInfo_t&gt;::~pair (307,118 samples, 0.03%)</title><rect x="530.2" y="341" width="0.3" height="15.0" fill="rgb(229,112,27)" rx="2" ry="2" />
+<text  x="533.21" y="351.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::DlDciListElement_s, std::allocator&lt;ns3::DlDciListElement_s&gt; &gt;::size (284,337 samples, 0.03%)</title><rect x="205.5" y="453" width="0.2" height="15.0" fill="rgb(225,92,22)" rx="2" ry="2" />
+<text  x="208.50" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::~vector (292,063 samples, 0.03%)</title><rect x="728.3" y="421" width="0.3" height="15.0" fill="rgb(225,92,22)" rx="2" ry="2" />
+<text  x="731.32" y="431.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::map (164,996 samples, 0.02%)</title><rect x="88.0" y="485" width="0.1" height="15.0" fill="rgb(242,171,40)" rx="2" ry="2" />
+<text  x="90.95" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;1ul, ns3::Ptr&lt;ns3::SpectrumValue const&gt;, unsigned int&gt;::_Tuple_impl&lt;ns3::Ptr&lt;ns3::SpectrumValue const&gt;&amp;, unsigned int&amp;, void&gt; (939,853 samples, 0.10%)</title><rect x="709.5" y="405" width="0.7" height="15.0" fill="rgb(238,154,37)" rx="2" ry="2" />
+<text  x="712.45" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::Object::SetTypeId (389,266 samples, 0.04%)</title><rect x="450.4" y="277" width="0.3" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="453.37" y="287.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt; &gt; &gt;::end (191,913 samples, 0.02%)</title><rect x="291.6" y="501" width="0.2" height="15.0" fill="rgb(205,1,0)" rx="2" ry="2" />
+<text  x="294.65" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumModel const&gt;::Acquire (156,296 samples, 0.02%)</title><rect x="402.3" y="485" width="0.1" height="15.0" fill="rgb(222,80,19)" rx="2" ry="2" />
+<text  x="405.27" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt;::vector (485,819 samples, 0.05%)</title><rect x="510.0" y="517" width="0.4" height="15.0" fill="rgb(210,23,5)" rx="2" ry="2" />
+<text  x="512.98" y="527.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::AttributeConstructionList::Item, std::allocator&lt;ns3::AttributeConstructionList::Item&gt; &gt;::list (496,879 samples, 0.05%)</title><rect x="162.4" y="405" width="0.4" height="15.0" fill="rgb(252,219,52)" rx="2" ry="2" />
+<text  x="165.36" y="415.5" ></text>
+</g>
+<g >
+<title>decltype  (274,733 samples, 0.03%)</title><rect x="23.2" y="277" width="0.3" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="26.25" y="287.5" ></text>
+</g>
+<g >
+<title>std::map&lt;ns3::TbId_t, ns3::tbInfo_t, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::clear (2,281,160 samples, 0.24%)</title><rect x="505.0" y="549" width="1.8" height="15.0" fill="rgb(215,46,11)" rx="2" ry="2" />
+<text  x="507.98" y="559.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::_S_check_init_len (245,728 samples, 0.03%)</title><rect x="404.5" y="469" width="0.2" height="15.0" fill="rgb(233,130,31)" rx="2" ry="2" />
+<text  x="407.54" y="479.5" ></text>
+</g>
+<g >
+<title>std::map&lt;ns3::Scheduler::EventKey, ns3::EventImpl*, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::erase[abi:cxx11] (7,110,876 samples, 0.73%)</title><rect x="762.3" y="709" width="5.7" height="15.0" fill="rgb(251,215,51)" rx="2" ry="2" />
+<text  x="765.27" y="719.5" ></text>
+</g>
+<g >
+<title>ns3::Simulator::DoSchedule (192,930 samples, 0.02%)</title><rect x="112.5" y="485" width="0.2" height="15.0" fill="rgb(222,79,18)" rx="2" ry="2" />
+<text  x="115.51" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::LteUeMac::RefreshHarqProcessesPacketBuffer (953,324 samples, 0.10%)</title><rect x="684.5" y="517" width="0.8" height="15.0" fill="rgb(213,37,9)" rx="2" ry="2" />
+<text  x="687.49" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_M_allocate (126,483 samples, 0.01%)</title><rect x="606.9" y="437" width="0.1" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="609.92" y="447.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_insert&lt;ns3::Ptr&lt;ns3::MibLteControlMessage&gt;&amp;&gt; (190,229 samples, 0.02%)</title><rect x="122.3" y="533" width="0.2" height="15.0" fill="rgb(218,61,14)" rx="2" ry="2" />
+<text  x="125.33" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::emplace_hint&lt;unsigned int const&amp;, ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp;&gt; (1,502,471 samples, 0.15%)</title><rect x="658.4" y="501" width="1.2" height="15.0" fill="rgb(211,29,6)" rx="2" ry="2" />
+<text  x="661.36" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteControlMessage&gt;&amp; std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::emplace_back&lt;ns3::Ptr&lt;ns3::MibLteControlMessage&gt;&amp;&gt; (190,229 samples, 0.02%)</title><rect x="122.3" y="549" width="0.2" height="15.0" fill="rgb(231,123,29)" rx="2" ry="2" />
+<text  x="125.33" y="559.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;is_member_pointer_v&lt;void  (2,016,394 samples, 0.21%)</title><rect x="340.0" y="485" width="1.6" height="15.0" fill="rgb(241,170,40)" rx="2" ry="2" />
+<text  x="342.96" y="495.5" ></text>
+</g>
+<g >
+<title>void std::__copy_move&lt;false, false, std::random_access_iterator_tag&gt;::__assign_one&lt;ns3::DlInfoListElement_s::HarqStatus_e, ns3::DlInfoListElement_s::HarqStatus_e const&gt; (390,278 samples, 0.04%)</title><rect x="260.2" y="245" width="0.3" height="15.0" fill="rgb(234,133,31)" rx="2" ry="2" />
+<text  x="263.20" y="255.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt;::_M_create_storage (329,313 samples, 0.03%)</title><rect x="583.9" y="229" width="0.2" height="15.0" fill="rgb(244,180,43)" rx="2" ry="2" />
+<text  x="586.86" y="239.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::~list (191,802 samples, 0.02%)</title><rect x="344.3" y="437" width="0.1" height="15.0" fill="rgb(222,80,19)" rx="2" ry="2" />
+<text  x="347.27" y="447.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt;::deallocate (124,394 samples, 0.01%)</title><rect x="776.2" y="325" width="0.1" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="779.16" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::ByteTagList::Allocate (1,800,803 samples, 0.19%)</title><rect x="29.5" y="389" width="1.4" height="15.0" fill="rgb(225,95,22)" rx="2" ry="2" />
+<text  x="32.50" y="399.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;::_List_impl::_List_impl (831,229 samples, 0.09%)</title><rect x="285.4" y="501" width="0.7" height="15.0" fill="rgb(239,159,38)" rx="2" ry="2" />
+<text  x="288.43" y="511.5" ></text>
+</g>
+<g >
+<title>std::tuple&lt;ns3::LteEnbPhy*, ns3::Ptr&lt;ns3::PacketBurst&gt; &gt;::tuple&lt;ns3::LteEnbPhy*&amp;, ns3::Ptr&lt;ns3::PacketBurst&gt;&amp;, true&gt; (929,346 samples, 0.10%)</title><rect x="282.0" y="469" width="0.8" height="15.0" fill="rgb(232,126,30)" rx="2" ry="2" />
+<text  x="285.01" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;0ul, ns3::LteInterference*, ns3::Ptr&lt;ns3::SpectrumValue const&gt;, unsigned int&gt;::~_Tuple_impl (448,944 samples, 0.05%)</title><rect x="708.4" y="437" width="0.4" height="15.0" fill="rgb(248,202,48)" rx="2" ry="2" />
+<text  x="711.43" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_Rb_tree (400,356 samples, 0.04%)</title><rect x="232.5" y="453" width="0.3" height="15.0" fill="rgb(223,86,20)" rx="2" ry="2" />
+<text  x="235.50" y="463.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;ns3::DlInfoListElement_s&gt;::allocate (265,191 samples, 0.03%)</title><rect x="262.0" y="437" width="0.2" height="15.0" fill="rgb(243,175,41)" rx="2" ry="2" />
+<text  x="265.02" y="447.5" ></text>
+</g>
+<g >
+<title>std::tuple&lt;ns3::LteSpectrumPhy*&gt;::tuple (285,575 samples, 0.03%)</title><rect x="64.1" y="421" width="0.2" height="15.0" fill="rgb(217,55,13)" rx="2" ry="2" />
+<text  x="67.11" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::FfMacSchedSapProvider::SchedDlTriggerReqParameters::~SchedDlTriggerReqParameters (1,122,238 samples, 0.12%)</title><rect x="132.2" y="517" width="0.9" height="15.0" fill="rgb(233,132,31)" rx="2" ry="2" />
+<text  x="135.24" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;::operator* (316,524 samples, 0.03%)</title><rect x="272.8" y="469" width="0.3" height="15.0" fill="rgb(233,132,31)" rx="2" ry="2" />
+<text  x="275.83" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, unsigned int&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt; &gt;::_M_mbegin (159,315 samples, 0.02%)</title><rect x="172.4" y="405" width="0.1" height="15.0" fill="rgb(239,159,38)" rx="2" ry="2" />
+<text  x="175.37" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy::StartSubFrame (415,834 samples, 0.04%)</title><rect x="15.5" y="549" width="0.3" height="15.0" fill="rgb(234,136,32)" rx="2" ry="2" />
+<text  x="18.45" y="559.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;is_invocable_r_v&lt;void, ns3::Callback&lt;void, std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt;::Callback&lt;void  (28,232,039 samples, 2.91%)</title><rect x="441.2" y="485" width="22.7" height="15.0" fill="rgb(235,139,33)" rx="2" ry="2" />
+<text  x="444.23" y="495.5" >s..</text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt;::_M_lower_bound (1,144,795 samples, 0.12%)</title><rect x="168.4" y="421" width="0.9" height="15.0" fill="rgb(240,162,38)" rx="2" ry="2" />
+<text  x="171.38" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; std::map&lt;ns3::TbId_t, ns3::tbInfo_t, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::emplace_hint&lt;std::pair&lt;ns3::TbId_t, ns3::tbInfo_t&gt; &gt; (143,473 samples, 0.01%)</title><rect x="120.3" y="501" width="0.1" height="15.0" fill="rgb(245,186,44)" rx="2" ry="2" />
+<text  x="123.30" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Bind&lt;void  (782,663 samples, 0.08%)</title><rect x="667.3" y="421" width="0.7" height="15.0" fill="rgb(253,221,52)" rx="2" ry="2" />
+<text  x="670.32" y="431.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt;::_M_erase (1,544,641 samples, 0.16%)</title><rect x="356.9" y="517" width="1.3" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="359.94" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt; &gt;::_M_valptr (234,452 samples, 0.02%)</title><rect x="297.6" y="437" width="0.2" height="15.0" fill="rgb(222,81,19)" rx="2" ry="2" />
+<text  x="300.59" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::LteRlcSpecificLteMacSapUser::NotifyTxOpportunity (4,972,136 samples, 0.51%)</title><rect x="11.4" y="437" width="4.0" height="15.0" fill="rgb(249,204,48)" rx="2" ry="2" />
+<text  x="14.43" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::EnbMemberLteEnbPhySapProvider::SendMacPdu (783,721 samples, 0.08%)</title><rect x="19.7" y="357" width="0.6" height="15.0" fill="rgb(254,229,54)" rx="2" ry="2" />
+<text  x="22.70" y="367.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, unsigned int, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt; &gt;::find (1,203,918 samples, 0.12%)</title><rect x="136.8" y="485" width="0.9" height="15.0" fill="rgb(239,156,37)" rx="2" ry="2" />
+<text  x="139.78" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::Ptr&lt;ns3::Object&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Object&gt; &gt; &gt;::_Vector_impl_data::_Vector_impl_data (154,775 samples, 0.02%)</title><rect x="366.2" y="421" width="0.2" height="15.0" fill="rgb(231,123,29)" rx="2" ry="2" />
+<text  x="369.23" y="431.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::clear (3,285,580 samples, 0.34%)</title><rect x="451.3" y="229" width="2.6" height="15.0" fill="rgb(217,58,13)" rx="2" ry="2" />
+<text  x="454.28" y="239.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::vector (775,418 samples, 0.08%)</title><rect x="442.0" y="309" width="0.6" height="15.0" fill="rgb(206,9,2)" rx="2" ry="2" />
+<text  x="444.97" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::NixVector&gt;::Ptr (395,681 samples, 0.04%)</title><rect x="625.0" y="485" width="0.3" height="15.0" fill="rgb(248,201,48)" rx="2" ry="2" />
+<text  x="628.02" y="495.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__enable_if&lt;std::__is_byte&lt;unsigned char&gt;::__value, void&gt;::__type std::__fill_a1&lt;unsigned char&gt; (464,806 samples, 0.05%)</title><rect x="460.6" y="149" width="0.3" height="15.0" fill="rgb(222,82,19)" rx="2" ry="2" />
+<text  x="463.56" y="159.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::DoDispose (262,214 samples, 0.03%)</title><rect x="634.7" y="357" width="0.2" height="15.0" fill="rgb(242,172,41)" rx="2" ry="2" />
+<text  x="637.67" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::operator/= (127,965 samples, 0.01%)</title><rect x="601.3" y="325" width="0.1" height="15.0" fill="rgb(239,160,38)" rx="2" ry="2" />
+<text  x="604.34" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumPhy&gt;::Acquire (282,880 samples, 0.03%)</title><rect x="345.6" y="485" width="0.2" height="15.0" fill="rgb(228,110,26)" rx="2" ry="2" />
+<text  x="348.62" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt;::operator (236,363 samples, 0.02%)</title><rect x="375.3" y="533" width="0.2" height="15.0" fill="rgb(213,38,9)" rx="2" ry="2" />
+<text  x="378.34" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;1ul, ns3::Ptr&lt;ns3::SpectrumValue&gt;, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::~_Tuple_impl (4,562,243 samples, 0.47%)</title><rect x="773.6" y="533" width="3.6" height="15.0" fill="rgb(242,172,41)" rx="2" ry="2" />
+<text  x="776.56" y="543.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::MacCeListElement_s, std::allocator&lt;ns3::MacCeListElement_s&gt; &gt;::_M_check_len (366,216 samples, 0.04%)</title><rect x="130.1" y="485" width="0.3" height="15.0" fill="rgb(233,130,31)" rx="2" ry="2" />
+<text  x="133.09" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::TracedCallback&lt;ns3::Ptr&lt;ns3::PacketBurst const&gt; &gt;::operator (284,159 samples, 0.03%)</title><rect x="90.4" y="533" width="0.2" height="15.0" fill="rgb(231,121,28)" rx="2" ry="2" />
+<text  x="93.38" y="543.5" ></text>
+</g>
+<g >
+<title>std::remove_reference&lt;std::_Vector_base&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_Vector_impl&amp;&gt;::type&amp;&amp; std::move&lt;std::_Vector_base&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_Vector_impl&amp;&gt; (130,561 samples, 0.01%)</title><rect x="596.0" y="101" width="0.1" height="15.0" fill="rgb(238,152,36)" rx="2" ry="2" />
+<text  x="598.96" y="111.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; &gt; &gt;::_S_key (474,607 samples, 0.05%)</title><rect x="465.7" y="485" width="0.4" height="15.0" fill="rgb(210,26,6)" rx="2" ry="2" />
+<text  x="468.74" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;signed char, std::allocator&lt;signed char&gt; &gt;::_M_erase (208,683 samples, 0.02%)</title><rect x="532.5" y="325" width="0.1" height="15.0" fill="rgb(211,28,6)" rx="2" ry="2" />
+<text  x="535.46" y="335.5" ></text>
+</g>
+<g >
+<title>std::_List_iterator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt;::_List_iterator (190,641 samples, 0.02%)</title><rect x="362.1" y="469" width="0.2" height="15.0" fill="rgb(231,119,28)" rx="2" ry="2" />
+<text  x="365.15" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;5ul, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::_Tuple_impl&lt;std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;&amp;&gt; (163,911 samples, 0.02%)</title><rect x="87.5" y="341" width="0.1" height="15.0" fill="rgb(219,68,16)" rx="2" ry="2" />
+<text  x="90.46" y="351.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;1ul, ns3::Ptr&lt;ns3::SpectrumValue&gt;, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::_Tuple_impl&lt;ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp;, double&amp;, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;&amp;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;&amp;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;&amp;, void&gt; (206,637 samples, 0.02%)</title><rect x="87.4" y="405" width="0.2" height="15.0" fill="rgb(237,151,36)" rx="2" ry="2" />
+<text  x="90.42" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::SpectrumValue, ns3::Empty, ns3::DefaultDeleter&lt;ns3::SpectrumValue&gt; &gt;::Unref (470,391 samples, 0.05%)</title><rect x="717.5" y="485" width="0.4" height="15.0" fill="rgb(246,189,45)" rx="2" ry="2" />
+<text  x="720.55" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;int const, double&gt; &gt; std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_M_emplace_hint_unique&lt;std::pair&lt;int, double&gt; &gt; (1,269,252 samples, 0.13%)</title><rect x="293.1" y="501" width="1.0" height="15.0" fill="rgb(237,149,35)" rx="2" ry="2" />
+<text  x="296.09" y="511.5" ></text>
+</g>
+<g >
+<title>std::tuple_element&lt;2ul, std::tuple&lt;ns3::MultiModelSpectrumChannel*, ns3::Ptr&lt;ns3::SpectrumValue&gt;, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt; &gt;::type&amp; std::get&lt;2ul, ns3::MultiModelSpectrumChannel*, ns3::Ptr&lt;ns3::SpectrumValue&gt;, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt; (473,819 samples, 0.05%)</title><rect x="756.5" y="597" width="0.4" height="15.0" fill="rgb(231,122,29)" rx="2" ry="2" />
+<text  x="759.55" y="607.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, unsigned char*&gt; (292,785 samples, 0.03%)</title><rect x="584.9" y="197" width="0.2" height="15.0" fill="rgb(254,229,54)" rx="2" ry="2" />
+<text  x="587.88" y="207.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::~_Vector_base (167,250 samples, 0.02%)</title><rect x="605.4" y="485" width="0.1" height="15.0" fill="rgb(223,86,20)" rx="2" ry="2" />
+<text  x="608.40" y="495.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;ns3::LteFlowId_t const, ns3::FfMacSchedSapProvider::SchedDlRlcBufferReqParameters&gt; &gt;::_M_ptr (151,492 samples, 0.02%)</title><rect x="182.0" y="389" width="0.1" height="15.0" fill="rgb(228,109,26)" rx="2" ry="2" />
+<text  x="185.02" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::~PacketBurst (3,267,652 samples, 0.34%)</title><rect x="378.7" y="357" width="2.6" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="381.69" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::HigherLayerSelected_s* std::__copy_move&lt;false, false, std::random_access_iterator_tag&gt;::__copy_m&lt;ns3::HigherLayerSelected_s const*, ns3::HigherLayerSelected_s*&gt; (193,644 samples, 0.02%)</title><rect x="134.9" y="389" width="0.1" height="15.0" fill="rgb(220,70,16)" rx="2" ry="2" />
+<text  x="137.86" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::Time::ToDouble (693,056 samples, 0.07%)</title><rect x="605.6" y="501" width="0.5" height="15.0" fill="rgb(249,204,48)" rx="2" ry="2" />
+<text  x="608.57" y="511.5" ></text>
+</g>
+<g >
+<title>int&amp; std::forward&lt;int&amp;&gt; (154,940 samples, 0.02%)</title><rect x="296.3" y="517" width="0.1" height="15.0" fill="rgb(223,85,20)" rx="2" ry="2" />
+<text  x="299.29" y="527.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::vector (158,373 samples, 0.02%)</title><rect x="203.4" y="389" width="0.1" height="15.0" fill="rgb(206,9,2)" rx="2" ry="2" />
+<text  x="206.35" y="399.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;unsigned short&gt;::_M_ptr (275,914 samples, 0.03%)</title><rect x="395.6" y="469" width="0.2" height="15.0" fill="rgb(217,56,13)" rx="2" ry="2" />
+<text  x="398.59" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::tbInfo_t::tbInfo_t (509,350 samples, 0.05%)</title><rect x="384.9" y="389" width="0.4" height="15.0" fill="rgb(224,91,21)" rx="2" ry="2" />
+<text  x="387.91" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::TbId_t, std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::_Select1st&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::_M_erase (1,924,737 samples, 0.20%)</title><rect x="505.1" y="517" width="1.6" height="15.0" fill="rgb(224,87,21)" rx="2" ry="2" />
+<text  x="508.14" y="527.5" ></text>
+</g>
+<g >
+<title>unsigned long* std::__copy_move_a&lt;false, unsigned long*, unsigned long*&gt; (190,049 samples, 0.02%)</title><rect x="248.3" y="405" width="0.2" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="251.33" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::LteUeMac::DoSubframeIndication (16,576,198 samples, 1.71%)</title><rect x="684.3" y="533" width="13.4" height="15.0" fill="rgb(236,144,34)" rx="2" ry="2" />
+<text  x="687.33" y="543.5" ></text>
+</g>
+<g >
+<title>void ns3::Callback&lt;void, ns3::DlInfoListElement_s&gt;::Callback&lt;void  (3,542,887 samples, 0.37%)</title><rect x="418.5" y="453" width="2.9" height="15.0" fill="rgb(242,174,41)" rx="2" ry="2" />
+<text  x="421.54" y="463.5" ></text>
+</g>
+<g >
+<title>bool __gnu_cxx::operator==&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; (229,110 samples, 0.02%)</title><rect x="477.6" y="309" width="0.2" height="15.0" fill="rgb(239,159,38)" rx="2" ry="2" />
+<text  x="480.60" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::EventImpl&gt;::~Ptr (390,370 samples, 0.04%)</title><rect x="39.7" y="709" width="0.4" height="15.0" fill="rgb(225,92,22)" rx="2" ry="2" />
+<text  x="42.74" y="719.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt;* std::__copy_move&lt;true, false, std::random_access_iterator_tag&gt;::__copy_m&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;*, ns3::Ptr&lt;ns3::PacketBurst&gt;*&gt; (458,200 samples, 0.05%)</title><rect x="119.8" y="421" width="0.4" height="15.0" fill="rgb(212,33,7)" rx="2" ry="2" />
+<text  x="122.80" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::CqiListElement_s::~CqiListElement_s (377,731 samples, 0.04%)</title><rect x="106.8" y="373" width="0.3" height="15.0" fill="rgb(225,92,22)" rx="2" ry="2" />
+<text  x="109.80" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, unsigned int&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt; &gt;::clear (355,870 samples, 0.04%)</title><rect x="172.2" y="437" width="0.3" height="15.0" fill="rgb(205,3,0)" rx="2" ry="2" />
+<text  x="175.25" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt; &gt;::_M_lower_bound (725,002 samples, 0.07%)</title><rect x="241.8" y="453" width="0.6" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="244.78" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapProvider::ReportBufferStatusParameters&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider::ReportBufferStatusParameters&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider::ReportBufferStatusParameters&gt; &gt; &gt;::find (1,345,383 samples, 0.14%)</title><rect x="569.9" y="309" width="1.1" height="15.0" fill="rgb(236,144,34)" rx="2" ry="2" />
+<text  x="572.92" y="319.5" ></text>
+</g>
+<g >
+<title>std::__invoke_result&lt;ns3::MakeEvent&lt;&gt; (238,924 samples, 0.02%)</title><rect x="36.6" y="677" width="0.2" height="15.0" fill="rgb(242,172,41)" rx="2" ry="2" />
+<text  x="39.64" y="687.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::Packet, ns3::Empty, ns3::DefaultDeleter&lt;ns3::Packet&gt; &gt;::Unref (161,302 samples, 0.02%)</title><rect x="368.9" y="501" width="0.1" height="15.0" fill="rgb(215,47,11)" rx="2" ry="2" />
+<text  x="371.86" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;::_M_valptr (352,479 samples, 0.04%)</title><rect x="496.9" y="533" width="0.2" height="15.0" fill="rgb(218,62,14)" rx="2" ry="2" />
+<text  x="499.86" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::DlDciListElement_s::DlDciListElement_s (500,791 samples, 0.05%)</title><rect x="203.3" y="405" width="0.4" height="15.0" fill="rgb(233,129,30)" rx="2" ry="2" />
+<text  x="206.32" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned int, std::allocator&lt;unsigned int&gt; &gt;::_Vector_base (447,425 samples, 0.05%)</title><rect x="695.0" y="485" width="0.4" height="15.0" fill="rgb(227,105,25)" rx="2" ry="2" />
+<text  x="698.01" y="495.5" ></text>
+</g>
+<g >
+<title>operator delete[] (204,130 samples, 0.02%)</title><rect x="548.7" y="69" width="0.1" height="15.0" fill="rgb(208,18,4)" rx="2" ry="2" />
+<text  x="551.68" y="79.5" ></text>
+</g>
+<g >
+<title>std::map&lt;ns3::Scheduler::EventKey, ns3::EventImpl*, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::lower_bound (1,750,547 samples, 0.18%)</title><rect x="662.9" y="437" width="1.4" height="15.0" fill="rgb(238,153,36)" rx="2" ry="2" />
+<text  x="665.93" y="447.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::__copy_move_a1&lt;false, unsigned char const*, unsigned char*&gt; (185,651 samples, 0.02%)</title><rect x="127.2" y="293" width="0.1" height="15.0" fill="rgb(215,50,12)" rx="2" ry="2" />
+<text  x="130.15" y="303.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;ns3::TbId_t, ns3::tbInfo_t&gt;::pair&lt;ns3::TbId_t&amp;, ns3::tbInfo_t&amp;&gt; (217,947 samples, 0.02%)</title><rect x="387.2" y="533" width="0.2" height="15.0" fill="rgb(249,202,48)" rx="2" ry="2" />
+<text  x="390.24" y="543.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; (507,555 samples, 0.05%)</title><rect x="719.2" y="437" width="0.4" height="15.0" fill="rgb(212,35,8)" rx="2" ry="2" />
+<text  x="722.22" y="447.5" ></text>
+</g>
+<g >
+<title>unsigned int const&amp; std::max&lt;unsigned int&gt; (238,645 samples, 0.02%)</title><rect x="547.7" y="85" width="0.2" height="15.0" fill="rgb(249,206,49)" rx="2" ry="2" />
+<text  x="550.73" y="95.5" ></text>
+</g>
+<g >
+<title>std::set&lt;unsigned short, std::less&lt;unsigned short&gt;, std::allocator&lt;unsigned short&gt; &gt;::find (495,883 samples, 0.05%)</title><rect x="245.9" y="485" width="0.4" height="15.0" fill="rgb(207,12,2)" rx="2" ry="2" />
+<text  x="248.88" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Ptr&lt;ns3::Object&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Object&gt; &gt; &gt;::vector (350,110 samples, 0.04%)</title><rect x="629.5" y="485" width="0.3" height="15.0" fill="rgb(237,147,35)" rx="2" ry="2" />
+<text  x="632.51" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::CallbackImpl&lt;void, ns3::DlInfoListElement_s&gt;::operator (4,219,650 samples, 0.44%)</title><rect x="418.0" y="533" width="3.4" height="15.0" fill="rgb(240,163,39)" rx="2" ry="2" />
+<text  x="421.00" y="543.5" ></text>
+</g>
+<g >
+<title>void std::_Rb_tree&lt;ns3::TbId_t, std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::_Select1st&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::_M_construct_node&lt;std::pair&lt;ns3::TbId_t, ns3::tbInfo_t&gt; &gt; (1,227,522 samples, 0.13%)</title><rect x="526.6" y="261" width="1.0" height="15.0" fill="rgb(243,177,42)" rx="2" ry="2" />
+<text  x="529.62" y="271.5" ></text>
+</g>
+<g >
+<title>std::function&lt;void  (324,769 samples, 0.03%)</title><rect x="611.9" y="405" width="0.3" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="614.94" y="415.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;::_M_ptr (192,658 samples, 0.02%)</title><rect x="733.8" y="405" width="0.1" height="15.0" fill="rgb(207,12,3)" rx="2" ry="2" />
+<text  x="736.76" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::Buffer::Recycle (663,612 samples, 0.07%)</title><rect x="452.0" y="85" width="0.5" height="15.0" fill="rgb(250,207,49)" rx="2" ry="2" />
+<text  x="455.02" y="95.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_M_erase (704,923 samples, 0.07%)</title><rect x="233.1" y="421" width="0.6" height="15.0" fill="rgb(219,64,15)" rx="2" ry="2" />
+<text  x="236.11" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_Auto_node::_M_insert (391,675 samples, 0.04%)</title><rect x="271.5" y="437" width="0.4" height="15.0" fill="rgb(213,38,9)" rx="2" ry="2" />
+<text  x="274.55" y="447.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;int&gt;::allocate (127,251 samples, 0.01%)</title><rect x="573.4" y="309" width="0.1" height="15.0" fill="rgb(235,139,33)" rx="2" ry="2" />
+<text  x="576.38" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::HigherLayerSelected_s::HigherLayerSelected_s (323,441 samples, 0.03%)</title><rect x="596.3" y="229" width="0.3" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="599.30" y="239.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned short const, std::vector&lt;ns3::DlDciListElement_s, std::allocator&lt;ns3::DlDciListElement_s&gt; &gt; &gt; &gt;::_M_addr (155,689 samples, 0.02%)</title><rect x="184.0" y="437" width="0.1" height="15.0" fill="rgb(233,128,30)" rx="2" ry="2" />
+<text  x="187.01" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s* std::__do_uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::DlInfoListElement_s const*, std::vector&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt; &gt;, ns3::DlInfoListElement_s*&gt; (411,592 samples, 0.04%)</title><rect x="107.3" y="421" width="0.3" height="15.0" fill="rgb(217,58,13)" rx="2" ry="2" />
+<text  x="110.29" y="431.5" ></text>
+</g>
+<g >
+<title>decltype  (240,540 samples, 0.02%)</title><rect x="83.3" y="341" width="0.2" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="86.31" y="351.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt;::_M_valptr (221,148 samples, 0.02%)</title><rect x="650.6" y="437" width="0.2" height="15.0" fill="rgb(220,69,16)" rx="2" ry="2" />
+<text  x="653.60" y="447.5" ></text>
+</g>
+<g >
+<title>void std::_Function_base::_Base_manager&lt;std::_Bind&lt;void  (411,266 samples, 0.04%)</title><rect x="87.6" y="453" width="0.4" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="90.62" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::_M_emplace_hint_unique&lt;std::piecewise_construct_t const&amp;, std::tuple&lt;unsigned short const&amp;&gt;, std::tuple&lt;&gt; &gt; (299,849 samples, 0.03%)</title><rect x="105.1" y="453" width="0.2" height="15.0" fill="rgb(213,37,8)" rx="2" ry="2" />
+<text  x="108.07" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::EventImpl&gt;::operator= (572,810 samples, 0.06%)</title><rect x="64.5" y="517" width="0.4" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="67.47" y="527.5" ></text>
+</g>
+<g >
+<title>__cxxabiv1::__si_class_type_info::__do_dyncast (128,525 samples, 0.01%)</title><rect x="90.0" y="501" width="0.1" height="15.0" fill="rgb(219,65,15)" rx="2" ry="2" />
+<text  x="93.02" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::PacketTagList::Add (190,338 samples, 0.02%)</title><rect x="17.2" y="325" width="0.2" height="15.0" fill="rgb(248,197,47)" rx="2" ry="2" />
+<text  x="20.23" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::TracedCallback&lt;ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt; &gt;::operator (312,772 samples, 0.03%)</title><rect x="656.5" y="517" width="0.3" height="15.0" fill="rgb(228,106,25)" rx="2" ry="2" />
+<text  x="659.52" y="527.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;*, std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; std::move&lt;__gnu_cxx::__normal_iterator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;*, std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;*, std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; (6,507,760 samples, 0.67%)</title><rect x="376.6" y="501" width="5.3" height="15.0" fill="rgb(211,30,7)" rx="2" ry="2" />
+<text  x="379.63" y="511.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::at (645,472 samples, 0.07%)</title><rect x="488.3" y="517" width="0.6" height="15.0" fill="rgb(247,196,47)" rx="2" ry="2" />
+<text  x="491.33" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_key_compare&lt;std::less&lt;unsigned short&gt; &gt;::_Rb_tree_key_compare (234,753 samples, 0.02%)</title><rect x="509.2" y="501" width="0.2" height="15.0" fill="rgb(217,58,13)" rx="2" ry="2" />
+<text  x="512.22" y="511.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_initialize_dispatch&lt;std::_List_const_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; (1,438,361 samples, 0.15%)</title><rect x="732.9" y="453" width="1.1" height="15.0" fill="rgb(215,50,12)" rx="2" ry="2" />
+<text  x="735.88" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::HarqStatus_e* std::copy&lt;std::move_iterator&lt;ns3::DlInfoListElement_s::HarqStatus_e*&gt;, ns3::DlInfoListElement_s::HarqStatus_e*&gt; (267,517 samples, 0.03%)</title><rect x="511.4" y="453" width="0.2" height="15.0" fill="rgb(218,63,15)" rx="2" ry="2" />
+<text  x="514.40" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::UniformRandomVariable::GetValue (789,202 samples, 0.08%)</title><rect x="495.3" y="533" width="0.6" height="15.0" fill="rgb(238,152,36)" rx="2" ry="2" />
+<text  x="498.29" y="543.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::clear (265,487 samples, 0.03%)</title><rect x="622.2" y="389" width="0.2" height="15.0" fill="rgb(252,216,51)" rx="2" ry="2" />
+<text  x="625.22" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::MacCeValue_u::MacCeValue_u (858,457 samples, 0.09%)</title><rect x="441.9" y="325" width="0.7" height="15.0" fill="rgb(219,65,15)" rx="2" ry="2" />
+<text  x="444.90" y="335.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_initialize_dispatch&lt;std::_List_const_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; (216,051 samples, 0.02%)</title><rect x="697.8" y="533" width="0.2" height="15.0" fill="rgb(215,50,12)" rx="2" ry="2" />
+<text  x="700.79" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt; ns3::CompleteConstruct&lt;ns3::PacketBurst&gt; (2,140,117 samples, 0.22%)</title><rect x="162.2" y="437" width="1.8" height="15.0" fill="rgb(212,33,7)" rx="2" ry="2" />
+<text  x="165.24" y="447.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::clear (154,782 samples, 0.02%)</title><rect x="164.5" y="373" width="0.1" height="15.0" fill="rgb(217,58,13)" rx="2" ry="2" />
+<text  x="167.51" y="383.5" ></text>
+</g>
+<g >
+<title> (124,340 samples, 0.01%)</title><rect x="457.9" y="261" width="0.1" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="460.85" y="271.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::~vector (241,102 samples, 0.02%)</title><rect x="717.7" y="437" width="0.2" height="15.0" fill="rgb(225,92,22)" rx="2" ry="2" />
+<text  x="720.73" y="447.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt;::_S_relocate (199,707 samples, 0.02%)</title><rect x="211.5" y="453" width="0.2" height="15.0" fill="rgb(237,150,35)" rx="2" ry="2" />
+<text  x="214.55" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::HarqProcessInfoElement_t* std::__copy_move&lt;false, true, std::random_access_iterator_tag&gt;::__copy_m&lt;ns3::HarqProcessInfoElement_t const, ns3::HarqProcessInfoElement_t&gt; (368,034 samples, 0.04%)</title><rect x="513.2" y="421" width="0.3" height="15.0" fill="rgb(248,202,48)" rx="2" ry="2" />
+<text  x="516.18" y="431.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::CqiListElement_s&gt; (933,761 samples, 0.10%)</title><rect x="255.0" y="421" width="0.7" height="15.0" fill="rgb(241,165,39)" rx="2" ry="2" />
+<text  x="257.97" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::LteInterference::EndRx (23,269,983 samples, 2.40%)</title><rect x="466.9" y="549" width="18.7" height="15.0" fill="rgb(208,17,4)" rx="2" ry="2" />
+<text  x="469.86" y="559.5" ></text>
+</g>
+<g >
+<title>void std::vector&lt;int, std::allocator&lt;int&gt; &gt;::_M_realloc_insert&lt;int const&amp;&gt; (336,155 samples, 0.03%)</title><rect x="591.2" y="261" width="0.3" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="594.19" y="271.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;int const, double&gt; &gt; &gt; &gt;::allocate (199,176 samples, 0.02%)</title><rect x="293.2" y="437" width="0.1" height="15.0" fill="rgb(239,157,37)" rx="2" ry="2" />
+<text  x="296.16" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultDeleter&lt;ns3::SpectrumValue&gt;::Delete (392,749 samples, 0.04%)</title><rect x="716.7" y="453" width="0.3" height="15.0" fill="rgb(222,79,19)" rx="2" ry="2" />
+<text  x="719.67" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_M_erase (231,712 samples, 0.02%)</title><rect x="103.9" y="421" width="0.2" height="15.0" fill="rgb(219,64,15)" rx="2" ry="2" />
+<text  x="106.93" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_S_key (429,986 samples, 0.04%)</title><rect x="57.9" y="453" width="0.3" height="15.0" fill="rgb(224,87,20)" rx="2" ry="2" />
+<text  x="60.90" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumPhy::StartTxDlCtrlFrame (52,866,048 samples, 5.45%)</title><rect x="304.5" y="533" width="42.5" height="15.0" fill="rgb(230,118,28)" rx="2" ry="2" />
+<text  x="307.51" y="543.5" >ns3:..</text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::push_back (263,413 samples, 0.03%)</title><rect x="121.9" y="533" width="0.2" height="15.0" fill="rgb(225,94,22)" rx="2" ry="2" />
+<text  x="124.91" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt; &gt;::end (149,904 samples, 0.02%)</title><rect x="322.4" y="453" width="0.2" height="15.0" fill="rgb(218,60,14)" rx="2" ry="2" />
+<text  x="325.44" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::RlcPduListElement_s* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;ns3::RlcPduListElement_s const*, std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt;, ns3::RlcPduListElement_s*, ns3::RlcPduListElement_s&gt; (1,020,771 samples, 0.11%)</title><rect x="211.8" y="405" width="0.8" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="214.81" y="415.5" ></text>
+</g>
+<g >
+<title> (353,348 samples, 0.04%)</title><rect x="717.2" y="485" width="0.3" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="720.23" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned int const, ns3::RxSpectrumModelInfo&gt; &gt;::_M_valptr (415,198 samples, 0.04%)</title><rect x="328.8" y="469" width="0.3" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="331.78" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::EventImpl&gt;::Acquire (195,822 samples, 0.02%)</title><rect x="305.5" y="453" width="0.2" height="15.0" fill="rgb(229,112,26)" rx="2" ry="2" />
+<text  x="308.50" y="463.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Callback&lt;void, unsigned short, unsigned short, double&gt;, std::allocator&lt;ns3::Callback&lt;void, unsigned short, unsigned short, double&gt; &gt; &gt;::begin (274,474 samples, 0.03%)</title><rect x="682.1" y="517" width="0.3" height="15.0" fill="rgb(209,22,5)" rx="2" ry="2" />
+<text  x="685.13" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt; &gt; &gt;::_S_key (775,617 samples, 0.08%)</title><rect x="158.1" y="357" width="0.6" height="15.0" fill="rgb(222,81,19)" rx="2" ry="2" />
+<text  x="161.11" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumPhy&gt;::Ptr (359,569 samples, 0.04%)</title><rect x="345.6" y="501" width="0.2" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="348.56" y="511.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::DlDciListElement_s, std::allocator&lt;ns3::DlDciListElement_s&gt; &gt;::at (514,866 samples, 0.05%)</title><rect x="205.3" y="485" width="0.4" height="15.0" fill="rgb(210,26,6)" rx="2" ry="2" />
+<text  x="208.32" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Bind&lt;void  (1,733,420 samples, 0.18%)</title><rect x="708.8" y="453" width="1.4" height="15.0" fill="rgb(253,221,52)" rx="2" ry="2" />
+<text  x="711.85" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::SpectrumValue (152,703 samples, 0.02%)</title><rect x="481.5" y="309" width="0.1" height="15.0" fill="rgb(211,27,6)" rx="2" ry="2" />
+<text  x="484.49" y="319.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; std::copy&lt;__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; (307,652 samples, 0.03%)</title><rect x="114.0" y="373" width="0.3" height="15.0" fill="rgb(249,204,48)" rx="2" ry="2" />
+<text  x="117.02" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Function_handler&lt;void  (19,740,362 samples, 2.04%)</title><rect x="467.9" y="469" width="15.9" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="470.90" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::NoOpComponentCarrierManager::DoNotifyTxOpportunity (4,972,136 samples, 0.51%)</title><rect x="11.4" y="453" width="4.0" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="14.43" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue&gt;::operator= (512,892 samples, 0.05%)</title><rect x="717.5" y="501" width="0.4" height="15.0" fill="rgb(220,71,17)" rx="2" ry="2" />
+<text  x="720.51" y="511.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt;::at (139,701 samples, 0.01%)</title><rect x="464.7" y="533" width="0.1" height="15.0" fill="rgb(251,215,51)" rx="2" ry="2" />
+<text  x="467.70" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapProvider::ReportBufferStatusParameters&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider::ReportBufferStatusParameters&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider::ReportBufferStatusParameters&gt; &gt; &gt;::_M_begin (234,350 samples, 0.02%)</title><rect x="570.0" y="293" width="0.2" height="15.0" fill="rgb(215,49,11)" rx="2" ry="2" />
+<text  x="572.98" y="303.5" ></text>
+</g>
+<g >
+<title>std::operator== (210,233 samples, 0.02%)</title><rect x="80.2" y="501" width="0.2" height="15.0" fill="rgb(229,110,26)" rx="2" ry="2" />
+<text  x="83.24" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::Ptr&lt;ns3::Object&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Object&gt; &gt; &gt;::_Vector_base (420,986 samples, 0.04%)</title><rect x="447.0" y="245" width="0.3" height="15.0" fill="rgb(235,141,33)" rx="2" ry="2" />
+<text  x="449.99" y="255.5" ></text>
+</g>
+<g >
+<title>double* std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, double*&gt; (456,050 samples, 0.05%)</title><rect x="238.7" y="213" width="0.3" height="15.0" fill="rgb(210,23,5)" rx="2" ry="2" />
+<text  x="241.66" y="223.5" ></text>
+</g>
+<g >
+<title>void std::destroy_at&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; (1,191,133 samples, 0.12%)</title><rect x="75.7" y="309" width="1.0" height="15.0" fill="rgb(224,88,21)" rx="2" ry="2" />
+<text  x="78.74" y="319.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;ns3::ByteTagListData*&gt; &gt;::destroy&lt;ns3::ByteTagListData*&gt; (350,982 samples, 0.04%)</title><rect x="30.7" y="357" width="0.2" height="15.0" fill="rgb(216,54,13)" rx="2" ry="2" />
+<text  x="33.67" y="367.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Callback&lt;void, unsigned short, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::allocator&lt;ns3::Callback&lt;void, unsigned short, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::end (207,421 samples, 0.02%)</title><rect x="482.0" y="309" width="0.2" height="15.0" fill="rgb(254,226,54)" rx="2" ry="2" />
+<text  x="485.03" y="319.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::ByteTagListData*, std::allocator&lt;ns3::ByteTagListData*&gt; &gt;::empty (455,493 samples, 0.05%)</title><rect x="554.0" y="213" width="0.3" height="15.0" fill="rgb(236,144,34)" rx="2" ry="2" />
+<text  x="556.98" y="223.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Callback&lt;void, unsigned short, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::allocator&lt;ns3::Callback&lt;void, unsigned short, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::begin (189,841 samples, 0.02%)</title><rect x="679.5" y="501" width="0.2" height="15.0" fill="rgb(223,85,20)" rx="2" ry="2" />
+<text  x="682.51" y="511.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;::__normal_iterator (229,352 samples, 0.02%)</title><rect x="687.5" y="437" width="0.2" height="15.0" fill="rgb(226,99,23)" rx="2" ry="2" />
+<text  x="690.51" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::TracedCallback&lt;unsigned short, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;::operator (538,849 samples, 0.06%)</title><rect x="679.4" y="517" width="0.4" height="15.0" fill="rgb(221,76,18)" rx="2" ry="2" />
+<text  x="682.35" y="527.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::_M_get_node (655,781 samples, 0.07%)</title><rect x="563.7" y="133" width="0.5" height="15.0" fill="rgb(212,36,8)" rx="2" ry="2" />
+<text  x="566.67" y="143.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_M_insert_node (196,868 samples, 0.02%)</title><rect x="293.5" y="469" width="0.2" height="15.0" fill="rgb(228,107,25)" rx="2" ry="2" />
+<text  x="296.53" y="479.5" ></text>
+</g>
+<g >
+<title>double* std::copy&lt;__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, double*&gt; (165,918 samples, 0.02%)</title><rect x="78.3" y="421" width="0.2" height="15.0" fill="rgb(246,192,46)" rx="2" ry="2" />
+<text  x="81.32" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_M_copy (4,538,330 samples, 0.47%)</title><rect x="236.8" y="453" width="3.6" height="15.0" fill="rgb(218,60,14)" rx="2" ry="2" />
+<text  x="239.76" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;* std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_M_copy&lt;false, std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_Alloc_node&gt; (347,372 samples, 0.04%)</title><rect x="104.5" y="405" width="0.3" height="15.0" fill="rgb(236,146,34)" rx="2" ry="2" />
+<text  x="107.52" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Head_base&lt;5ul, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;, false&gt;::~_Head_base (220,721 samples, 0.02%)</title><rect x="666.3" y="341" width="0.2" height="15.0" fill="rgb(205,2,0)" rx="2" ry="2" />
+<text  x="669.34" y="351.5" ></text>
+</g>
+<g >
+<title>unsigned short* std::__relocate_a&lt;unsigned short*, unsigned short*, std::allocator&lt;unsigned short&gt; &gt; (196,177 samples, 0.02%)</title><rect x="219.7" y="421" width="0.2" height="15.0" fill="rgb(210,27,6)" rx="2" ry="2" />
+<text  x="222.69" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_S_key (400,281 samples, 0.04%)</title><rect x="221.8" y="437" width="0.3" height="15.0" fill="rgb(215,49,11)" rx="2" ry="2" />
+<text  x="224.77" y="447.5" ></text>
+</g>
+<g >
+<title>std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;* std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_create_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; const&amp;&gt; (530,447 samples, 0.05%)</title><rect x="611.1" y="485" width="0.4" height="15.0" fill="rgb(230,116,27)" rx="2" ry="2" />
+<text  x="614.12" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;1ul, ns3::Ptr&lt;ns3::SpectrumValue const&gt;, unsigned int&gt;::~_Tuple_impl (370,840 samples, 0.04%)</title><rect x="708.5" y="421" width="0.3" height="15.0" fill="rgb(252,220,52)" rx="2" ry="2" />
+<text  x="711.49" y="431.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt; &gt;::allocate (163,549 samples, 0.02%)</title><rect x="706.5" y="357" width="0.1" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="709.48" y="367.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt;::find (1,336,082 samples, 0.14%)</title><rect x="567.7" y="293" width="1.1" height="15.0" fill="rgb(228,106,25)" rx="2" ry="2" />
+<text  x="570.69" y="303.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::_M_clear (182,893 samples, 0.02%)</title><rect x="634.7" y="325" width="0.1" height="15.0" fill="rgb(217,56,13)" rx="2" ry="2" />
+<text  x="637.70" y="335.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_insert&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; const&amp;&gt; (228,584 samples, 0.02%)</title><rect x="689.4" y="437" width="0.2" height="15.0" fill="rgb(210,27,6)" rx="2" ry="2" />
+<text  x="692.42" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Simulator::DoSchedule (1,698,311 samples, 0.18%)</title><rect x="615.3" y="533" width="1.3" height="15.0" fill="rgb(222,79,18)" rx="2" ry="2" />
+<text  x="618.27" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::ByteTagList::Deallocate (267,431 samples, 0.03%)</title><rect x="653.2" y="213" width="0.2" height="15.0" fill="rgb(227,103,24)" rx="2" ry="2" />
+<text  x="656.23" y="223.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::Divide (414,550 samples, 0.04%)</title><rect x="414.0" y="517" width="0.3" height="15.0" fill="rgb(239,160,38)" rx="2" ry="2" />
+<text  x="416.97" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;5ul, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::_Tuple_impl (152,827 samples, 0.02%)</title><rect x="667.8" y="309" width="0.2" height="15.0" fill="rgb(221,74,17)" rx="2" ry="2" />
+<text  x="670.83" y="319.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt; &gt;::_S_key (552,579 samples, 0.06%)</title><rect x="180.5" y="421" width="0.4" height="15.0" fill="rgb(219,66,15)" rx="2" ry="2" />
+<text  x="183.46" y="431.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;unsigned int&gt;::deallocate (227,074 samples, 0.02%)</title><rect x="697.2" y="437" width="0.2" height="15.0" fill="rgb(218,61,14)" rx="2" ry="2" />
+<text  x="700.18" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::_M_create_storage (578,790 samples, 0.06%)</title><rect x="520.0" y="309" width="0.4" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="522.96" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::BuildRarListElement_s* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;ns3::BuildRarListElement_s const*, std::vector&lt;ns3::BuildRarListElement_s, std::allocator&lt;ns3::BuildRarListElement_s&gt; &gt; &gt;, ns3::BuildRarListElement_s*, ns3::BuildRarListElement_s&gt; (278,330 samples, 0.03%)</title><rect x="143.1" y="437" width="0.2" height="15.0" fill="rgb(227,102,24)" rx="2" ry="2" />
+<text  x="146.10" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::FfMacSchedSapUser::SchedDlConfigIndParameters::SchedDlConfigIndParameters (155,354 samples, 0.02%)</title><rect x="98.0" y="469" width="0.1" height="15.0" fill="rgb(208,15,3)" rx="2" ry="2" />
+<text  x="101.02" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt;::_M_range_check (426,031 samples, 0.04%)</title><rect x="525.6" y="325" width="0.4" height="15.0" fill="rgb(253,222,53)" rx="2" ry="2" />
+<text  x="528.63" y="335.5" ></text>
+</g>
+<g >
+<title>[libm.so.6] (277,109 samples, 0.03%)</title><rect x="65.7" y="469" width="0.2" height="15.0" fill="rgb(208,16,4)" rx="2" ry="2" />
+<text  x="68.71" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::ByteTagIterator::HasNext (236,780 samples, 0.02%)</title><rect x="424.4" y="245" width="0.2" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="427.43" y="255.5" ></text>
+</g>
+<g >
+<title>double&amp; std::_Mu&lt;double, false, false&gt;::operator (202,203 samples, 0.02%)</title><rect x="48.6" y="597" width="0.2" height="15.0" fill="rgb(217,57,13)" rx="2" ry="2" />
+<text  x="51.60" y="607.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;double&gt;::allocate (530,824 samples, 0.05%)</title><rect x="239.4" y="213" width="0.4" height="15.0" fill="rgb(221,76,18)" rx="2" ry="2" />
+<text  x="242.38" y="223.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_Vector_base (211,429 samples, 0.02%)</title><rect x="78.5" y="469" width="0.2" height="15.0" fill="rgb(237,150,35)" rx="2" ry="2" />
+<text  x="81.49" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::CqiListElement_s, std::allocator&lt;ns3::CqiListElement_s&gt; &gt;::end (201,936 samples, 0.02%)</title><rect x="254.6" y="501" width="0.1" height="15.0" fill="rgb(233,131,31)" rx="2" ry="2" />
+<text  x="257.59" y="511.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, unsigned char*, unsigned char&gt; (223,250 samples, 0.02%)</title><rect x="92.8" y="357" width="0.1" height="15.0" fill="rgb(226,96,23)" rx="2" ry="2" />
+<text  x="95.76" y="367.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned char, std::map&lt;unsigned char, ns3::LteMacSapProvider*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, std::map&lt;unsigned char, ns3::LteMacSapProvider*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt; &gt; &gt; &gt; &gt;::begin (204,131 samples, 0.02%)</title><rect x="552.7" y="213" width="0.1" height="15.0" fill="rgb(235,141,33)" rx="2" ry="2" />
+<text  x="555.65" y="223.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_M_erase (637,679 samples, 0.07%)</title><rect x="60.6" y="469" width="0.5" height="15.0" fill="rgb(227,102,24)" rx="2" ry="2" />
+<text  x="63.59" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::emplace_hint&lt;unsigned int const&amp;, ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp;&gt; (838,836 samples, 0.09%)</title><rect x="81.8" y="501" width="0.7" height="15.0" fill="rgb(211,29,6)" rx="2" ry="2" />
+<text  x="84.78" y="511.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;double&gt;::deallocate (163,066 samples, 0.02%)</title><rect x="773.3" y="373" width="0.2" height="15.0" fill="rgb(223,83,20)" rx="2" ry="2" />
+<text  x="776.33" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_copy (878,011 samples, 0.09%)</title><rect x="341.6" y="453" width="0.7" height="15.0" fill="rgb(246,192,46)" rx="2" ry="2" />
+<text  x="344.64" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::RlcTag::GetInstanceTypeId (313,712 samples, 0.03%)</title><rect x="427.2" y="245" width="0.2" height="15.0" fill="rgb(248,200,47)" rx="2" ry="2" />
+<text  x="430.18" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue&gt; ns3::Create&lt;ns3::SpectrumValue, ns3::Ptr&lt;ns3::SpectrumModel&gt;&amp;&gt; (1,854,475 samples, 0.19%)</title><rect x="56.1" y="501" width="1.5" height="15.0" fill="rgb(228,107,25)" rx="2" ry="2" />
+<text  x="59.11" y="511.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt; &gt;::_M_addr (124,878 samples, 0.01%)</title><rect x="429.1" y="229" width="0.1" height="15.0" fill="rgb(211,29,7)" rx="2" ry="2" />
+<text  x="432.09" y="239.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumSignalParametersDataFrame::LteSpectrumSignalParametersDataFrame (1,082,844 samples, 0.11%)</title><rect x="88.6" y="517" width="0.8" height="15.0" fill="rgb(206,8,1)" rx="2" ry="2" />
+<text  x="91.58" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::PacketBurst (495,532 samples, 0.05%)</title><rect x="627.1" y="501" width="0.4" height="15.0" fill="rgb(208,15,3)" rx="2" ry="2" />
+<text  x="630.06" y="511.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;::cbegin (384,549 samples, 0.04%)</title><rect x="382.4" y="517" width="0.3" height="15.0" fill="rgb(230,116,27)" rx="2" ry="2" />
+<text  x="385.38" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::LteUePhy::UeMeasurementsElement&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::LteUePhy::UeMeasurementsElement&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::LteUePhy::UeMeasurementsElement&gt; &gt; &gt;::find (162,761 samples, 0.02%)</title><rect x="601.2" y="293" width="0.1" height="15.0" fill="rgb(234,136,32)" rx="2" ry="2" />
+<text  x="604.21" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumPhy*&amp; std::_Mu&lt;ns3::LteSpectrumPhy*, false, false&gt;::operator (199,187 samples, 0.02%)</title><rect x="49.4" y="597" width="0.2" height="15.0" fill="rgb(243,178,42)" rx="2" ry="2" />
+<text  x="52.39" y="607.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::operator= (193,644 samples, 0.02%)</title><rect x="134.9" y="357" width="0.1" height="15.0" fill="rgb(211,28,6)" rx="2" ry="2" />
+<text  x="137.86" y="367.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt; &gt;::operator* (379,355 samples, 0.04%)</title><rect x="156.9" y="405" width="0.3" height="15.0" fill="rgb(221,76,18)" rx="2" ry="2" />
+<text  x="159.90" y="415.5" ></text>
+</g>
+<g >
+<title>unsigned long const&amp; std::min&lt;unsigned long&gt; (156,731 samples, 0.02%)</title><rect x="211.4" y="405" width="0.1" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="214.36" y="415.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;ns3::DlInfoListElement_s&gt;::allocate (265,191 samples, 0.03%)</title><rect x="262.0" y="453" width="0.2" height="15.0" fill="rgb(215,50,12)" rx="2" ry="2" />
+<text  x="265.02" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::~_Rb_tree (763,268 samples, 0.08%)</title><rect x="60.6" y="501" width="0.6" height="15.0" fill="rgb(218,60,14)" rx="2" ry="2" />
+<text  x="63.55" y="511.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::CeBitmap_e, std::allocator&lt;ns3::CeBitmap_e&gt; &gt;::end (267,288 samples, 0.03%)</title><rect x="204.5" y="389" width="0.2" height="15.0" fill="rgb(207,10,2)" rx="2" ry="2" />
+<text  x="207.45" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::Simulator::DoSchedule (1,482,842 samples, 0.15%)</title><rect x="108.3" y="517" width="1.2" height="15.0" fill="rgb(222,79,18)" rx="2" ry="2" />
+<text  x="111.32" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::BufferSizeLevelBsr::BsrId2BufferSize (237,172 samples, 0.02%)</title><rect x="225.6" y="485" width="0.2" height="15.0" fill="rgb(236,145,34)" rx="2" ry="2" />
+<text  x="228.58" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt;::_M_valptr (126,162 samples, 0.01%)</title><rect x="568.3" y="229" width="0.1" height="15.0" fill="rgb(222,82,19)" rx="2" ry="2" />
+<text  x="571.26" y="239.5" ></text>
+</g>
+<g >
+<title>ns3::HarqProcessInfoElement_t* std::__uninitialized_copy&lt;true&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::HarqProcessInfoElement_t const*, std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt;, ns3::HarqProcessInfoElement_t*&gt; (1,453,727 samples, 0.15%)</title><rect x="352.8" y="437" width="1.2" height="15.0" fill="rgb(238,156,37)" rx="2" ry="2" />
+<text  x="355.82" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultSimulatorImpl::ScheduleWithContext (7,958,779 samples, 0.82%)</title><rect x="333.6" y="469" width="6.4" height="15.0" fill="rgb(253,222,53)" rx="2" ry="2" />
+<text  x="336.55" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Callback&lt;void, ns3::UlInfoListElement_s&gt;::Callback&lt;void  (249,755 samples, 0.03%)</title><rect x="439.1" y="469" width="0.2" height="15.0" fill="rgb(243,177,42)" rx="2" ry="2" />
+<text  x="442.08" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::lower_bound (567,494 samples, 0.06%)</title><rect x="707.2" y="421" width="0.5" height="15.0" fill="rgb(254,228,54)" rx="2" ry="2" />
+<text  x="710.21" y="431.5" ></text>
+</g>
+<g >
+<title>std::map&lt;ns3::Scheduler::EventKey, ns3::EventImpl*, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::empty (712,405 samples, 0.07%)</title><rect x="777.8" y="725" width="0.5" height="15.0" fill="rgb(225,95,22)" rx="2" ry="2" />
+<text  x="780.78" y="735.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;*, std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt; &gt;::operator+ (160,323 samples, 0.02%)</title><rect x="356.8" y="517" width="0.1" height="15.0" fill="rgb(229,113,27)" rx="2" ry="2" />
+<text  x="359.81" y="527.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::max_size (230,324 samples, 0.02%)</title><rect x="219.4" y="421" width="0.1" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="222.36" y="431.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy_aux&lt;true&gt;::__destroy&lt;unsigned short*&gt; (155,477 samples, 0.02%)</title><rect x="473.1" y="229" width="0.2" height="15.0" fill="rgb(231,121,28)" rx="2" ry="2" />
+<text  x="476.13" y="239.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::vector (631,882 samples, 0.07%)</title><rect x="78.2" y="485" width="0.5" height="15.0" fill="rgb(239,156,37)" rx="2" ry="2" />
+<text  x="81.22" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Vector3D::GetLength (361,586 samples, 0.04%)</title><rect x="703.2" y="517" width="0.3" height="15.0" fill="rgb(211,31,7)" rx="2" ry="2" />
+<text  x="706.23" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumChannel&gt;::operator bool (155,807 samples, 0.02%)</title><rect x="671.0" y="533" width="0.1" height="15.0" fill="rgb(228,108,26)" rx="2" ry="2" />
+<text  x="673.96" y="543.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::clear (467,457 samples, 0.05%)</title><rect x="612.9" y="469" width="0.4" height="15.0" fill="rgb(217,58,13)" rx="2" ry="2" />
+<text  x="615.88" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;::erase (616,017 samples, 0.06%)</title><rect x="119.7" y="517" width="0.5" height="15.0" fill="rgb(248,200,48)" rx="2" ry="2" />
+<text  x="122.71" y="527.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt;::_M_range_check (190,527 samples, 0.02%)</title><rect x="150.0" y="389" width="0.1" height="15.0" fill="rgb(250,207,49)" rx="2" ry="2" />
+<text  x="152.97" y="399.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;std::is_constructible&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt;::value, std::pair&lt;std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, bool&gt; &gt;::type std::map&lt;ns3::Scheduler::EventKey, ns3::EventImpl*, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::insert&lt;std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (239,679 samples, 0.02%)</title><rect x="62.4" y="469" width="0.2" height="15.0" fill="rgb(211,29,7)" rx="2" ry="2" />
+<text  x="65.40" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_copy (155,456 samples, 0.02%)</title><rect x="341.2" y="437" width="0.2" height="15.0" fill="rgb(246,192,46)" rx="2" ry="2" />
+<text  x="344.24" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Bvector_base&lt;std::allocator&lt;bool&gt; &gt;::~_Bvector_base (545,023 samples, 0.06%)</title><rect x="201.9" y="469" width="0.4" height="15.0" fill="rgb(237,150,36)" rx="2" ry="2" />
+<text  x="204.88" y="479.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt;::_M_ptr (396,644 samples, 0.04%)</title><rect x="22.4" y="277" width="0.4" height="15.0" fill="rgb(215,48,11)" rx="2" ry="2" />
+<text  x="25.44" y="287.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::~map (148,912 samples, 0.02%)</title><rect x="99.7" y="469" width="0.2" height="15.0" fill="rgb(248,201,48)" rx="2" ry="2" />
+<text  x="102.75" y="479.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::__copy_move_a1&lt;false, unsigned char const*, unsigned char*&gt; (149,127 samples, 0.02%)</title><rect x="442.4" y="213" width="0.2" height="15.0" fill="rgb(215,50,12)" rx="2" ry="2" />
+<text  x="445.44" y="223.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;* std::__copy_move_a2&lt;true, std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;*, std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;*&gt; (1,623,419 samples, 0.17%)</title><rect x="290.1" y="453" width="1.3" height="15.0" fill="rgb(245,186,44)" rx="2" ry="2" />
+<text  x="293.09" y="463.5" ></text>
+</g>
+<g >
+<title>main (2,105,662 samples, 0.22%)</title><rect x="15.5" y="789" width="1.6" height="15.0" fill="rgb(243,179,42)" rx="2" ry="2" />
+<text  x="18.45" y="799.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt; &gt;::destroy&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; (521,712 samples, 0.05%)</title><rect x="501.9" y="373" width="0.4" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="504.92" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::NoOpComponentCarrierManager::DoUlReceiveMacCe (4,513,254 samples, 0.47%)</title><rect x="457.4" y="293" width="3.6" height="15.0" fill="rgb(225,95,22)" rx="2" ry="2" />
+<text  x="460.37" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::UeSelected_s::operator= (241,903 samples, 0.02%)</title><rect x="585.5" y="245" width="0.2" height="15.0" fill="rgb(244,183,43)" rx="2" ry="2" />
+<text  x="588.46" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::LteUePhy::RlfDetection (610,186 samples, 0.06%)</title><rect x="599.0" y="309" width="0.5" height="15.0" fill="rgb(242,173,41)" rx="2" ry="2" />
+<text  x="602.00" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::VendorSpecificListElement_s* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::VendorSpecificListElement_s const*, std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt; &gt;, ns3::VendorSpecificListElement_s*&gt; (598,518 samples, 0.06%)</title><rect x="475.6" y="277" width="0.5" height="15.0" fill="rgb(206,5,1)" rx="2" ry="2" />
+<text  x="478.64" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbRrc::GetUeManager (297,730 samples, 0.03%)</title><rect x="18.4" y="341" width="0.3" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="21.43" y="351.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;double&gt;::deallocate (163,066 samples, 0.02%)</title><rect x="773.3" y="357" width="0.2" height="15.0" fill="rgb(250,208,49)" rx="2" ry="2" />
+<text  x="776.33" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::Time::To (446,431 samples, 0.05%)</title><rect x="605.6" y="485" width="0.3" height="15.0" fill="rgb(244,182,43)" rx="2" ry="2" />
+<text  x="608.57" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::ByteTagList::Deallocate (675,876 samples, 0.07%)</title><rect x="452.6" y="85" width="0.5" height="15.0" fill="rgb(227,103,24)" rx="2" ry="2" />
+<text  x="455.58" y="95.5" ></text>
+</g>
+<g >
+<title>ns3::PacketMetadata::Deallocate (241,216 samples, 0.02%)</title><rect x="453.4" y="69" width="0.2" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="456.38" y="79.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;ns3::ByteTagListData*&gt; &gt;::construct&lt;ns3::ByteTagListData*, ns3::ByteTagListData* const&amp;&gt; (320,897 samples, 0.03%)</title><rect x="452.8" y="53" width="0.3" height="15.0" fill="rgb(248,199,47)" rx="2" ry="2" />
+<text  x="455.80" y="63.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumSignalParameters* ns3::PeekPointer&lt;ns3::SpectrumSignalParameters&gt; (161,138 samples, 0.02%)</title><rect x="735.3" y="517" width="0.1" height="15.0" fill="rgb(214,43,10)" rx="2" ry="2" />
+<text  x="738.26" y="527.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::~vector (159,560 samples, 0.02%)</title><rect x="233.0" y="341" width="0.1" height="15.0" fill="rgb(225,92,22)" rx="2" ry="2" />
+<text  x="235.98" y="351.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::copy&lt;__gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, unsigned char*&gt; (330,967 samples, 0.03%)</title><rect x="584.9" y="213" width="0.2" height="15.0" fill="rgb(241,168,40)" rx="2" ry="2" />
+<text  x="587.85" y="223.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;int, std::allocator&lt;int&gt; &gt;::~_Vector_base (157,700 samples, 0.02%)</title><rect x="387.8" y="485" width="0.1" height="15.0" fill="rgb(251,213,51)" rx="2" ry="2" />
+<text  x="390.82" y="495.5" ></text>
+</g>
+<g >
+<title>void std::_Construct&lt;ns3::CqiListElement_s, ns3::CqiListElement_s&amp;&gt; (968,712 samples, 0.10%)</title><rect x="92.2" y="405" width="0.7" height="15.0" fill="rgb(236,143,34)" rx="2" ry="2" />
+<text  x="95.16" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::Simulator::Run (922,121,412 samples, 95.09%)</title><rect x="36.8" y="773" width="741.7" height="15.0" fill="rgb(234,134,32)" rx="2" ry="2" />
+<text  x="39.84" y="783.5" >ns3::Simulator::Run</text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;::_M_ptr (315,999 samples, 0.03%)</title><rect x="500.4" y="485" width="0.3" height="15.0" fill="rgb(207,12,3)" rx="2" ry="2" />
+<text  x="503.42" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt;* std::__copy_move_a2&lt;true, ns3::Ptr&lt;ns3::PacketBurst&gt;*, ns3::Ptr&lt;ns3::PacketBurst&gt;*&gt; (1,973,200 samples, 0.20%)</title><rect x="634.3" y="453" width="1.6" height="15.0" fill="rgb(213,38,9)" rx="2" ry="2" />
+<text  x="637.27" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;0ul, ns3::MultiModelSpectrumChannel*, ns3::Ptr&lt;ns3::SpectrumValue&gt;, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::_Tuple_impl&lt;ns3::MultiModelSpectrumChannel*&amp;, ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp;, double&amp;, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;&amp;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;&amp;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;&amp;, void&gt; (206,637 samples, 0.02%)</title><rect x="87.4" y="421" width="0.2" height="15.0" fill="rgb(231,123,29)" rx="2" ry="2" />
+<text  x="90.42" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_M_create_storage (162,839 samples, 0.02%)</title><rect x="606.9" y="453" width="0.1" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="609.89" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; std::map&lt;ns3::Scheduler::EventKey, ns3::EventImpl*, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::emplace_hint&lt;std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (1,461,013 samples, 0.15%)</title><rect x="83.0" y="437" width="1.2" height="15.0" fill="rgb(253,224,53)" rx="2" ry="2" />
+<text  x="85.99" y="447.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;unsigned char*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;unsigned char*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt; (155,513 samples, 0.02%)</title><rect x="134.6" y="421" width="0.1" height="15.0" fill="rgb(243,176,42)" rx="2" ry="2" />
+<text  x="137.58" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::Buffer::~Buffer (158,245 samples, 0.02%)</title><rect x="502.1" y="277" width="0.1" height="15.0" fill="rgb(240,162,38)" rx="2" ry="2" />
+<text  x="505.11" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue&gt;::Ptr (302,852 samples, 0.03%)</title><rect x="303.9" y="517" width="0.3" height="15.0" fill="rgb(220,73,17)" rx="2" ry="2" />
+<text  x="306.92" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter&gt;::Unref (5,067,937 samples, 0.52%)</title><rect x="377.3" y="405" width="4.1" height="15.0" fill="rgb(221,78,18)" rx="2" ry="2" />
+<text  x="380.33" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleUeComponentCarrierManager::DoReportBufferStatus (1,164,381 samples, 0.12%)</title><rect x="552.1" y="229" width="0.9" height="15.0" fill="rgb(241,169,40)" rx="2" ry="2" />
+<text  x="555.08" y="239.5" ></text>
+</g>
+<g >
+<title>std::tuple&lt;ns3::MultiModelSpectrumChannel*, ns3::Ptr&lt;ns3::SpectrumValue&gt;, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::~tuple (4,562,243 samples, 0.47%)</title><rect x="773.6" y="565" width="3.6" height="15.0" fill="rgb(218,61,14)" rx="2" ry="2" />
+<text  x="776.56" y="575.5" ></text>
+</g>
+<g >
+<title>ns3::UlDciListElement_s* std::__do_uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::UlDciListElement_s const*, std::vector&lt;ns3::UlDciListElement_s, std::allocator&lt;ns3::UlDciListElement_s&gt; &gt; &gt;, ns3::UlDciListElement_s*&gt; (160,843 samples, 0.02%)</title><rect x="228.2" y="389" width="0.1" height="15.0" fill="rgb(223,86,20)" rx="2" ry="2" />
+<text  x="231.19" y="399.5" ></text>
+</g>
+<g >
+<title>std::_List_const_iterator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt;::operator* (789,338 samples, 0.08%)</title><rect x="369.0" y="517" width="0.6" height="15.0" fill="rgb(212,34,8)" rx="2" ry="2" />
+<text  x="371.99" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;4ul, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::_Tuple_impl (283,515 samples, 0.03%)</title><rect x="87.7" y="325" width="0.3" height="15.0" fill="rgb(213,41,9)" rx="2" ry="2" />
+<text  x="90.72" y="335.5" ></text>
+</g>
+<g >
+<title>void std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_M_realloc_insert&lt;unsigned char&gt; (2,339,611 samples, 0.24%)</title><rect x="692.6" y="469" width="1.9" height="15.0" fill="rgb(246,191,45)" rx="2" ry="2" />
+<text  x="695.61" y="479.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::allocate (228,044 samples, 0.02%)</title><rect x="191.0" y="389" width="0.2" height="15.0" fill="rgb(237,147,35)" rx="2" ry="2" />
+<text  x="194.02" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::EventImpl, ns3::Empty, ns3::DefaultDeleter&lt;ns3::EventImpl&gt; &gt;::Ref (161,738 samples, 0.02%)</title><rect x="277.9" y="469" width="0.2" height="15.0" fill="rgb(249,202,48)" rx="2" ry="2" />
+<text  x="280.93" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::RachListElement_s, std::allocator&lt;ns3::RachListElement_s&gt; &gt;::_M_erase_at_end (156,259 samples, 0.02%)</title><rect x="208.8" y="469" width="0.1" height="15.0" fill="rgb(241,167,40)" rx="2" ry="2" />
+<text  x="211.81" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::ByteTagList::~ByteTagList (713,131 samples, 0.07%)</title><rect x="452.5" y="101" width="0.6" height="15.0" fill="rgb(206,5,1)" rx="2" ry="2" />
+<text  x="455.55" y="111.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, ns3::DlInfoListElement_s, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt; &gt;::map (351,966 samples, 0.04%)</title><rect x="509.1" y="549" width="0.3" height="15.0" fill="rgb(226,100,24)" rx="2" ry="2" />
+<text  x="512.12" y="559.5" ></text>
+</g>
+<g >
+<title>ns3::LtePhy::SetMacPdu (332,587 samples, 0.03%)</title><rect x="564.8" y="165" width="0.3" height="15.0" fill="rgb(248,201,48)" rx="2" ry="2" />
+<text  x="567.83" y="175.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::~map (270,414 samples, 0.03%)</title><rect x="341.4" y="469" width="0.2" height="15.0" fill="rgb(228,107,25)" rx="2" ry="2" />
+<text  x="344.36" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_emplace_hint_unique&lt;std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (2,857,108 samples, 0.29%)</title><rect x="334.1" y="405" width="2.3" height="15.0" fill="rgb(248,201,48)" rx="2" ry="2" />
+<text  x="337.06" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::LteUePhy*&amp; std::forward&lt;ns3::LteUePhy*&amp;&gt; (157,221 samples, 0.02%)</title><rect x="616.9" y="485" width="0.1" height="15.0" fill="rgb(213,40,9)" rx="2" ry="2" />
+<text  x="619.91" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_M_range_check (188,564 samples, 0.02%)</title><rect x="400.0" y="533" width="0.1" height="15.0" fill="rgb(239,159,38)" rx="2" ry="2" />
+<text  x="402.96" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, unsigned int&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt; &gt;::_M_lower_bound (601,671 samples, 0.06%)</title><rect x="137.1" y="453" width="0.5" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="140.12" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;::_Vector_impl::_Vector_impl (155,130 samples, 0.02%)</title><rect x="213.0" y="389" width="0.1" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="216.00" y="399.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, unsigned char*&gt; (275,599 samples, 0.03%)</title><rect x="442.4" y="229" width="0.2" height="15.0" fill="rgb(254,229,54)" rx="2" ry="2" />
+<text  x="445.37" y="239.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::BuildBroadcastListElement_s, std::allocator&lt;ns3::BuildBroadcastListElement_s&gt; &gt;::_Vector_base (584,510 samples, 0.06%)</title><rect x="141.0" y="437" width="0.5" height="15.0" fill="rgb(236,145,34)" rx="2" ry="2" />
+<text  x="144.01" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::Copy (4,566,749 samples, 0.47%)</title><rect x="624.0" y="533" width="3.7" height="15.0" fill="rgb(240,161,38)" rx="2" ry="2" />
+<text  x="627.00" y="543.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;* std::__copy_move_a1&lt;true, std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;*, std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;*&gt; (2,516,750 samples, 0.26%)</title><rect x="349.6" y="469" width="2.1" height="15.0" fill="rgb(222,79,18)" rx="2" ry="2" />
+<text  x="352.65" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::SpectrumSignalParameters, ns3::Empty, ns3::DefaultDeleter&lt;ns3::SpectrumSignalParameters&gt; &gt;::Unref (273,890 samples, 0.03%)</title><rect x="344.2" y="501" width="0.2" height="15.0" fill="rgb(254,229,54)" rx="2" ry="2" />
+<text  x="347.20" y="511.5" ></text>
+</g>
+<g >
+<title>std::operator== (160,825 samples, 0.02%)</title><rect x="628.8" y="517" width="0.1" height="15.0" fill="rgb(229,110,26)" rx="2" ry="2" />
+<text  x="631.81" y="527.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, std::vector&lt;double, std::allocator&lt;double&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::map (459,078 samples, 0.05%)</title><rect x="104.5" y="469" width="0.3" height="15.0" fill="rgb(249,204,48)" rx="2" ry="2" />
+<text  x="107.45" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::LteRlcSpecificLteMacSapUser::NotifyTxOpportunity (17,080,246 samples, 1.76%)</title><rect x="19.6" y="453" width="13.7" height="15.0" fill="rgb(249,204,48)" rx="2" ry="2" />
+<text  x="22.60" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt;::push_back (2,568,842 samples, 0.26%)</title><rect x="352.4" y="533" width="2.0" height="15.0" fill="rgb(229,113,27)" rx="2" ry="2" />
+<text  x="355.36" y="543.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::CqiListElement_s*&gt; (970,280 samples, 0.10%)</title><rect x="254.9" y="453" width="0.8" height="15.0" fill="rgb(219,67,16)" rx="2" ry="2" />
+<text  x="257.94" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::Ptr&lt;ns3::UeManager&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::Ptr&lt;ns3::UeManager&gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::Ptr&lt;ns3::UeManager&gt; &gt; &gt; &gt;::_S_key (321,034 samples, 0.03%)</title><rect x="28.7" y="293" width="0.2" height="15.0" fill="rgb(253,222,53)" rx="2" ry="2" />
+<text  x="31.69" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::MapScheduler::Insert (1,160,513 samples, 0.12%)</title><rect x="615.4" y="501" width="1.0" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="618.42" y="511.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::~vector (202,197 samples, 0.02%)</title><rect x="728.9" y="437" width="0.1" height="15.0" fill="rgb(225,92,22)" rx="2" ry="2" />
+<text  x="731.89" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, unsigned char&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, unsigned char&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, unsigned char&gt; &gt; &gt;::find (1,128,415 samples, 0.12%)</title><rect x="135.9" y="469" width="0.9" height="15.0" fill="rgb(206,4,1)" rx="2" ry="2" />
+<text  x="138.87" y="479.5" ></text>
+</g>
+<g >
+<title>void std::__invoke_impl&lt;void, void  (5,321,712 samples, 0.55%)</title><rect x="11.2" y="597" width="4.3" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="14.17" y="607.5" ></text>
+</g>
+<g >
+<title>main (5,321,712 samples, 0.55%)</title><rect x="11.2" y="805" width="4.3" height="15.0" fill="rgb(243,179,42)" rx="2" ry="2" />
+<text  x="14.17" y="815.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteSpectrumSignalParametersUlSrsFrame&gt; ns3::DynamicCast&lt;ns3::LteSpectrumSignalParametersUlSrsFrame, ns3::SpectrumSignalParameters&gt; (670,184 samples, 0.07%)</title><rect x="736.6" y="533" width="0.5" height="15.0" fill="rgb(221,77,18)" rx="2" ry="2" />
+<text  x="739.57" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Bvector_base&lt;std::allocator&lt;bool&gt; &gt;::_Bvector_impl_data::_M_move_data (231,889 samples, 0.02%)</title><rect x="196.2" y="453" width="0.2" height="15.0" fill="rgb(218,62,15)" rx="2" ry="2" />
+<text  x="199.20" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::CqiListElement_s, std::allocator&lt;ns3::CqiListElement_s&gt; &gt;::_M_erase (416,767 samples, 0.04%)</title><rect x="106.8" y="485" width="0.3" height="15.0" fill="rgb(207,9,2)" rx="2" ry="2" />
+<text  x="109.77" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_Rb_tree_impl&lt;std::less&lt;unsigned int&gt;, true&gt;::_Rb_tree_impl (152,651 samples, 0.02%)</title><rect x="657.4" y="485" width="0.1" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="660.37" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::Packet, ns3::Empty, ns3::DefaultDeleter&lt;ns3::Packet&gt; &gt;::Unref (750,603 samples, 0.08%)</title><rect x="774.1" y="229" width="0.6" height="15.0" fill="rgb(215,47,11)" rx="2" ry="2" />
+<text  x="777.11" y="239.5" ></text>
+</g>
+<g >
+<title>void std::_Bind&lt;void  (5,321,712 samples, 0.55%)</title><rect x="11.2" y="629" width="4.3" height="15.0" fill="rgb(242,174,41)" rx="2" ry="2" />
+<text  x="14.17" y="639.5" ></text>
+</g>
+<g >
+<title> (353,481 samples, 0.04%)</title><rect x="740.4" y="485" width="0.3" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="743.37" y="495.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;::~pair (190,528 samples, 0.02%)</title><rect x="506.4" y="421" width="0.1" height="15.0" fill="rgb(213,38,9)" rx="2" ry="2" />
+<text  x="509.38" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::Packet::AddByteTag (1,292,520 samples, 0.13%)</title><rect x="13.1" y="405" width="1.0" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="16.10" y="415.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt;::vector (381,879 samples, 0.04%)</title><rect x="503.7" y="389" width="0.3" height="15.0" fill="rgb(210,23,5)" rx="2" ry="2" />
+<text  x="506.68" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumSignalParametersDlCtrlFrame::~LteSpectrumSignalParametersDlCtrlFrame (233,861 samples, 0.02%)</title><rect x="344.2" y="469" width="0.2" height="15.0" fill="rgb(220,69,16)" rx="2" ry="2" />
+<text  x="347.23" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::SpectrumValue (1,744,005 samples, 0.18%)</title><rect x="654.4" y="501" width="1.4" height="15.0" fill="rgb(211,27,6)" rx="2" ry="2" />
+<text  x="657.44" y="511.5" ></text>
+</g>
+<g >
+<title>[ld-linux-x86-64.so.2] (1,432,157 samples, 0.15%)</title><rect x="10.0" y="837" width="1.2" height="15.0" fill="rgb(243,178,42)" rx="2" ry="2" />
+<text  x="13.00" y="847.5" ></text>
+</g>
+<g >
+<title>std::_Bit_const_iterator::_Bit_const_iterator (204,269 samples, 0.02%)</title><rect x="198.9" y="389" width="0.2" height="15.0" fill="rgb(225,95,22)" rx="2" ry="2" />
+<text  x="201.92" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt; &gt; &gt;::lower_bound (151,718 samples, 0.02%)</title><rect x="96.5" y="373" width="0.1" height="15.0" fill="rgb(213,37,8)" rx="2" ry="2" />
+<text  x="99.52" y="383.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, unsigned char*, unsigned char&gt; (481,444 samples, 0.05%)</title><rect x="519.2" y="325" width="0.4" height="15.0" fill="rgb(226,96,23)" rx="2" ry="2" />
+<text  x="522.19" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::Callback&lt;void, ns3::SpectrumValue const&amp;&gt;::operator (20,199,448 samples, 2.08%)</title><rect x="467.5" y="517" width="16.3" height="15.0" fill="rgb(215,50,12)" rx="2" ry="2" />
+<text  x="470.54" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt; &gt;::find (188,402 samples, 0.02%)</title><rect x="114.5" y="453" width="0.2" height="15.0" fill="rgb(233,130,31)" rx="2" ry="2" />
+<text  x="117.51" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::HarqStatus_e* std::__copy_move&lt;false, true, std::random_access_iterator_tag&gt;::__copy_m&lt;ns3::DlInfoListElement_s::HarqStatus_e const, ns3::DlInfoListElement_s::HarqStatus_e&gt; (243,097 samples, 0.03%)</title><rect x="444.4" y="197" width="0.2" height="15.0" fill="rgb(240,161,38)" rx="2" ry="2" />
+<text  x="447.40" y="207.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::allocate (183,384 samples, 0.02%)</title><rect x="334.6" y="309" width="0.1" height="15.0" fill="rgb(213,40,9)" rx="2" ry="2" />
+<text  x="337.59" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::Time::Time (244,557 samples, 0.03%)</title><rect x="279.4" y="485" width="0.2" height="15.0" fill="rgb(226,100,24)" rx="2" ry="2" />
+<text  x="282.37" y="495.5" ></text>
+</g>
+<g >
+<title>void std::vector&lt;ns3::CqiListElement_s, std::allocator&lt;ns3::CqiListElement_s&gt; &gt;::_M_range_insert&lt;__gnu_cxx::__normal_iterator&lt;ns3::CqiListElement_s*, std::vector&lt;ns3::CqiListElement_s, std::allocator&lt;ns3::CqiListElement_s&gt; &gt; &gt; &gt; (1,338,732 samples, 0.14%)</title><rect x="92.0" y="485" width="1.1" height="15.0" fill="rgb(213,40,9)" rx="2" ry="2" />
+<text  x="95.03" y="495.5" ></text>
+</g>
+<g >
+<title>std::function&lt;void  (1,214,433 samples, 0.13%)</title><rect x="639.0" y="485" width="1.0" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="642.02" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::UlDciListElement_s, std::allocator&lt;ns3::UlDciListElement_s&gt; &gt;::end (241,860 samples, 0.02%)</title><rect x="249.3" y="469" width="0.2" height="15.0" fill="rgb(208,14,3)" rx="2" ry="2" />
+<text  x="252.31" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::Copy (2,143,209 samples, 0.22%)</title><rect x="718.0" y="501" width="1.7" height="15.0" fill="rgb(241,167,40)" rx="2" ry="2" />
+<text  x="720.99" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumSignalParametersDlCtrlFrame::Copy (729,950 samples, 0.08%)</title><rect x="113.8" y="485" width="0.6" height="15.0" fill="rgb(252,220,52)" rx="2" ry="2" />
+<text  x="116.83" y="495.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;unsigned short&gt;::allocate (378,103 samples, 0.04%)</title><rect x="520.1" y="261" width="0.3" height="15.0" fill="rgb(237,149,35)" rx="2" ry="2" />
+<text  x="523.12" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultDeleter&lt;ns3::SpectrumSignalParameters&gt;::Delete (3,402,650 samples, 0.35%)</title><rect x="773.7" y="437" width="2.7" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="776.67" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumModel const&gt;::operator= (199,517 samples, 0.02%)</title><rect x="730.4" y="469" width="0.1" height="15.0" fill="rgb(232,124,29)" rx="2" ry="2" />
+<text  x="733.38" y="479.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::__uninitialized_fill_n&lt;true&gt;::__uninit_fill_n&lt;unsigned char*, unsigned long, unsigned char&gt; (149,553 samples, 0.02%)</title><rect x="102.0" y="405" width="0.1" height="15.0" fill="rgb(207,12,2)" rx="2" ry="2" />
+<text  x="105.01" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::ObjectDeleter::Delete (8,154,602 samples, 0.84%)</title><rect x="544.6" y="293" width="6.5" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="547.56" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Packet&gt;::~Ptr (479,003 samples, 0.05%)</title><rect x="368.6" y="517" width="0.4" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="371.61" y="527.5" ></text>
+</g>
+<g >
+<title>void std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt;::_M_realloc_insert&lt;ns3::HigherLayerSelected_s const&amp;&gt; (1,903,180 samples, 0.20%)</title><rect x="595.1" y="277" width="1.5" height="15.0" fill="rgb(246,193,46)" rx="2" ry="2" />
+<text  x="598.06" y="287.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_Auto_node::_M_insert (143,534 samples, 0.01%)</title><rect x="659.2" y="469" width="0.1" height="15.0" fill="rgb(243,178,42)" rx="2" ry="2" />
+<text  x="662.16" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;::~vector (449,968 samples, 0.05%)</title><rect x="514.9" y="549" width="0.4" height="15.0" fill="rgb(235,139,33)" rx="2" ry="2" />
+<text  x="517.90" y="559.5" ></text>
+</g>
+<g >
+<title>ns3::FfMacSchedSapProvider::SchedUlCqiInfoReqParameters::SchedUlCqiInfoReqParameters (319,872 samples, 0.03%)</title><rect x="473.9" y="245" width="0.3" height="15.0" fill="rgb(233,131,31)" rx="2" ry="2" />
+<text  x="476.91" y="255.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;int, std::allocator&lt;int&gt; &gt;::_Vector_impl_data::_Vector_impl_data (195,817 samples, 0.02%)</title><rect x="700.1" y="501" width="0.2" height="15.0" fill="rgb(211,30,7)" rx="2" ry="2" />
+<text  x="703.10" y="511.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned int const, ns3::RxSpectrumModelInfo&gt; &gt;::_M_ptr (376,880 samples, 0.04%)</title><rect x="328.8" y="453" width="0.3" height="15.0" fill="rgb(239,156,37)" rx="2" ry="2" />
+<text  x="331.81" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt; &gt; &gt;::_M_end (161,396 samples, 0.02%)</title><rect x="170.0" y="421" width="0.1" height="15.0" fill="rgb(248,199,47)" rx="2" ry="2" />
+<text  x="172.96" y="431.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, bool&gt;::operator= (149,032 samples, 0.02%)</title><rect x="338.3" y="437" width="0.1" height="15.0" fill="rgb(214,45,10)" rx="2" ry="2" />
+<text  x="341.30" y="447.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, ns3::LteEnbComponentCarrierManager::UeInfo, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt; &gt; &gt;::at (2,696,904 samples, 0.28%)</title><rect x="156.8" y="421" width="2.1" height="15.0" fill="rgb(209,18,4)" rx="2" ry="2" />
+<text  x="159.78" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultSimulatorImpl::Now (126,194 samples, 0.01%)</title><rect x="607.4" y="485" width="0.1" height="15.0" fill="rgb(213,40,9)" rx="2" ry="2" />
+<text  x="610.41" y="495.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::operator= (154,567 samples, 0.02%)</title><rect x="117.8" y="405" width="0.1" height="15.0" fill="rgb(251,215,51)" rx="2" ry="2" />
+<text  x="120.78" y="415.5" ></text>
+</g>
+<g >
+<title>void std::vector&lt;ns3::UlDciListElement_s, std::allocator&lt;ns3::UlDciListElement_s&gt; &gt;::_M_realloc_insert&lt;ns3::UlDciListElement_s const&amp;&gt; (1,765,394 samples, 0.18%)</title><rect x="249.5" y="469" width="1.4" height="15.0" fill="rgb(214,44,10)" rx="2" ry="2" />
+<text  x="252.50" y="479.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy_aux&lt;false&gt;::__destroy&lt;ns3::Ptr&lt;ns3::Object&gt;*&gt; (190,590 samples, 0.02%)</title><rect x="380.5" y="261" width="0.1" height="15.0" fill="rgb(208,15,3)" rx="2" ry="2" />
+<text  x="383.48" y="271.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::get_allocator (396,683 samples, 0.04%)</title><rect x="732.5" y="469" width="0.3" height="15.0" fill="rgb(215,50,12)" rx="2" ry="2" />
+<text  x="735.47" y="479.5" ></text>
+</g>
+<g >
+<title>double* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, double*&gt; (460,469 samples, 0.05%)</title><rect x="606.5" y="453" width="0.4" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="609.52" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumModel const&gt;::Ptr&lt;ns3::SpectrumModel&gt; (273,542 samples, 0.03%)</title><rect x="676.6" y="485" width="0.3" height="15.0" fill="rgb(254,225,53)" rx="2" ry="2" />
+<text  x="679.64" y="495.5" ></text>
+</g>
+<g >
+<title>std::tuple&lt;ns3::LteUePhy*, unsigned int, unsigned int&gt;::tuple (190,393 samples, 0.02%)</title><rect x="618.9" y="437" width="0.1" height="15.0" fill="rgb(217,55,13)" rx="2" ry="2" />
+<text  x="621.88" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt;::_M_create_storage (317,668 samples, 0.03%)</title><rect x="476.3" y="277" width="0.3" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="479.35" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::VendorSpecificListElement_s* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;ns3::VendorSpecificListElement_s const*, std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt; &gt;, ns3::VendorSpecificListElement_s*, ns3::VendorSpecificListElement_s&gt; (675,744 samples, 0.07%)</title><rect x="475.6" y="293" width="0.6" height="15.0" fill="rgb(210,23,5)" rx="2" ry="2" />
+<text  x="478.61" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s* std::uninitialized_copy&lt;ns3::DlInfoListElement_s*, ns3::DlInfoListElement_s*&gt; (632,143 samples, 0.07%)</title><rect x="206.4" y="453" width="0.5" height="15.0" fill="rgb(227,102,24)" rx="2" ry="2" />
+<text  x="209.43" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::~_Rb_tree (220,721 samples, 0.02%)</title><rect x="666.3" y="309" width="0.2" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="669.34" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::HigherLayerSelected_s* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;ns3::HigherLayerSelected_s const*, std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt; &gt;, ns3::HigherLayerSelected_s*, ns3::HigherLayerSelected_s&gt; (389,363 samples, 0.04%)</title><rect x="442.7" y="293" width="0.3" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="445.69" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumPhy::AddExpectedTb (5,530,969 samples, 0.57%)</title><rect x="383.6" y="549" width="4.5" height="15.0" fill="rgb(249,206,49)" rx="2" ry="2" />
+<text  x="386.65" y="559.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_M_get_node (474,197 samples, 0.05%)</title><rect x="237.5" y="357" width="0.4" height="15.0" fill="rgb(222,82,19)" rx="2" ry="2" />
+<text  x="240.55" y="367.5" ></text>
+</g>
+<g >
+<title>std::tuple&lt;ns3::MultiModelSpectrumChannel*, ns3::Ptr&lt;ns3::SpectrumValue&gt;, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::tuple (665,649 samples, 0.07%)</title><rect x="667.4" y="405" width="0.6" height="15.0" fill="rgb(232,125,30)" rx="2" ry="2" />
+<text  x="670.42" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_insert_node (391,675 samples, 0.04%)</title><rect x="271.5" y="421" width="0.4" height="15.0" fill="rgb(218,62,14)" rx="2" ry="2" />
+<text  x="274.55" y="431.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::CqiListElement_s*&gt; (190,387 samples, 0.02%)</title><rect x="131.1" y="469" width="0.1" height="15.0" fill="rgb(219,67,16)" rx="2" ry="2" />
+<text  x="134.09" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::LtePhy::GetPacketBurst (2,782,438 samples, 0.29%)</title><rect x="118.0" y="533" width="2.2" height="15.0" fill="rgb(221,76,18)" rx="2" ry="2" />
+<text  x="121.00" y="543.5" ></text>
+</g>
+<g >
+<title>std::map&lt;ns3::Scheduler::EventKey, ns3::EventImpl*, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::lower_bound (272,545 samples, 0.03%)</title><rect x="109.0" y="453" width="0.2" height="15.0" fill="rgb(238,153,36)" rx="2" ry="2" />
+<text  x="111.96" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned char const, ns3::LteCcmMacSapProvider*&gt; &gt;::operator (124,340 samples, 0.01%)</title><rect x="457.9" y="277" width="0.1" height="15.0" fill="rgb(223,85,20)" rx="2" ry="2" />
+<text  x="460.85" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::Vector3D::GetLength (548,871 samples, 0.06%)</title><rect x="311.4" y="469" width="0.5" height="15.0" fill="rgb(211,31,7)" rx="2" ry="2" />
+<text  x="314.42" y="479.5" ></text>
+</g>
+<g >
+<title>bool __gnu_cxx::operator==&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; (408,801 samples, 0.04%)</title><rect x="410.8" y="501" width="0.3" height="15.0" fill="rgb(205,3,0)" rx="2" ry="2" />
+<text  x="413.78" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultDeleter&lt;ns3::SpectrumValue&gt;::Delete (196,986 samples, 0.02%)</title><rect x="326.0" y="469" width="0.1" height="15.0" fill="rgb(222,79,19)" rx="2" ry="2" />
+<text  x="328.98" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_erase (437,697 samples, 0.05%)</title><rect x="776.8" y="389" width="0.3" height="15.0" fill="rgb(247,197,47)" rx="2" ry="2" />
+<text  x="779.78" y="399.5" ></text>
+</g>
+<g >
+<title>std::less&lt;ns3::Scheduler::EventKey&gt;::operator (246,576 samples, 0.03%)</title><rect x="707.5" y="389" width="0.2" height="15.0" fill="rgb(234,137,32)" rx="2" ry="2" />
+<text  x="710.47" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::Packet::GetByteTagIterator (353,377 samples, 0.04%)</title><rect x="436.6" y="245" width="0.3" height="15.0" fill="rgb(211,31,7)" rx="2" ry="2" />
+<text  x="439.59" y="255.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::vector (435,841 samples, 0.04%)</title><rect x="147.1" y="437" width="0.3" height="15.0" fill="rgb(206,9,2)" rx="2" ry="2" />
+<text  x="150.06" y="447.5" ></text>
+</g>
+<g >
+<title>__fixunsxfti (505,737 samples, 0.05%)</title><rect x="683.5" y="485" width="0.4" height="15.0" fill="rgb(252,219,52)" rx="2" ry="2" />
+<text  x="686.50" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;* std::_Rb_tree&lt;ns3::TbId_t, std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::_Select1st&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::_M_create_node&lt;std::pair&lt;ns3::TbId_t, ns3::tbInfo_t&gt; &gt; (1,468,656 samples, 0.15%)</title><rect x="526.4" y="277" width="1.2" height="15.0" fill="rgb(234,136,32)" rx="2" ry="2" />
+<text  x="529.43" y="287.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;unsigned char&gt; &gt;::allocate (352,577 samples, 0.04%)</title><rect x="692.8" y="437" width="0.3" height="15.0" fill="rgb(243,177,42)" rx="2" ry="2" />
+<text  x="695.85" y="447.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::CqiListElement_s, std::allocator&lt;ns3::CqiListElement_s&gt; &gt;::end (186,918 samples, 0.02%)</title><rect x="106.6" y="485" width="0.1" height="15.0" fill="rgb(233,131,31)" rx="2" ry="2" />
+<text  x="109.56" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::AddPacket (2,019,519 samples, 0.21%)</title><rect x="22.0" y="357" width="1.6" height="15.0" fill="rgb(207,10,2)" rx="2" ry="2" />
+<text  x="24.97" y="367.5" ></text>
+</g>
+<g >
+<title>void std::destroy_at&lt;ns3::UlDciLteControlMessage&gt; (234,425 samples, 0.02%)</title><rect x="393.6" y="485" width="0.2" height="15.0" fill="rgb(242,171,40)" rx="2" ry="2" />
+<text  x="396.63" y="495.5" ></text>
+</g>
+<g >
+<title>std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;* std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_create_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; const&amp;&gt; (370,818 samples, 0.04%)</title><rect x="419.9" y="309" width="0.3" height="15.0" fill="rgb(230,116,27)" rx="2" ry="2" />
+<text  x="422.87" y="319.5" ></text>
+</g>
+<g >
+<title>std::tuple_element&lt;1ul, std::tuple&lt;ns3::LteInterference*, ns3::Ptr&lt;ns3::SpectrumValue const&gt;, unsigned int&gt; &gt;::type&amp; std::get&lt;1ul, ns3::LteInterference*, ns3::Ptr&lt;ns3::SpectrumValue const&gt;, unsigned int&gt; (881,128 samples, 0.09%)</title><rect x="754.1" y="597" width="0.7" height="15.0" fill="rgb(211,31,7)" rx="2" ry="2" />
+<text  x="757.07" y="607.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;::_Vector_base (623,026 samples, 0.06%)</title><rect x="212.6" y="405" width="0.5" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="215.63" y="415.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::vector (194,069 samples, 0.02%)</title><rect x="104.6" y="277" width="0.2" height="15.0" fill="rgb(239,156,37)" rx="2" ry="2" />
+<text  x="107.61" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::EventId::operator= (688,506 samples, 0.07%)</title><rect x="727.3" y="517" width="0.5" height="15.0" fill="rgb(241,165,39)" rx="2" ry="2" />
+<text  x="730.29" y="527.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;std::_List_node&lt;ns3::UlDciLteControlMessage&gt; &gt;::allocate (420,367 samples, 0.04%)</title><rect x="287.7" y="421" width="0.4" height="15.0" fill="rgb(206,6,1)" rx="2" ry="2" />
+<text  x="290.75" y="431.5" ></text>
+</g>
+<g >
+<title>bool __gnu_cxx::operator==&lt;ns3::CqiListElement_s const*, std::vector&lt;ns3::CqiListElement_s, std::allocator&lt;ns3::CqiListElement_s&gt; &gt; &gt; (158,030 samples, 0.02%)</title><rect x="254.4" y="501" width="0.1" height="15.0" fill="rgb(234,135,32)" rx="2" ry="2" />
+<text  x="257.37" y="511.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;std::_List_node&lt;ns3::UlDciLteControlMessage&gt; &gt;::allocate (397,126 samples, 0.04%)</title><rect x="287.8" y="405" width="0.3" height="15.0" fill="rgb(233,131,31)" rx="2" ry="2" />
+<text  x="290.76" y="415.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::MacCeListElement_s*, ns3::MacCeListElement_s&gt; (796,900 samples, 0.08%)</title><rect x="264.8" y="469" width="0.6" height="15.0" fill="rgb(209,20,5)" rx="2" ry="2" />
+<text  x="267.80" y="479.5" ></text>
+</g>
+<g >
+<title>std::is_constant_evaluated (159,721 samples, 0.02%)</title><rect x="357.6" y="437" width="0.2" height="15.0" fill="rgb(212,33,8)" rx="2" ry="2" />
+<text  x="360.64" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Object::DoDelete (238,924 samples, 0.02%)</title><rect x="36.6" y="565" width="0.2" height="15.0" fill="rgb(212,34,8)" rx="2" ry="2" />
+<text  x="39.64" y="575.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt;::_M_erase (3,534,925 samples, 0.36%)</title><rect x="349.5" y="517" width="2.8" height="15.0" fill="rgb(242,170,40)" rx="2" ry="2" />
+<text  x="352.49" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;* std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_Alloc_node::operator (346,575 samples, 0.04%)</title><rect x="668.6" y="405" width="0.2" height="15.0" fill="rgb(217,55,13)" rx="2" ry="2" />
+<text  x="671.56" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumModel const&gt;::Ptr (150,773 samples, 0.02%)</title><rect x="646.2" y="421" width="0.1" height="15.0" fill="rgb(232,125,30)" rx="2" ry="2" />
+<text  x="649.17" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt;&amp; std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;::emplace_back&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; (838,531 samples, 0.09%)</title><rect x="382.7" y="517" width="0.7" height="15.0" fill="rgb(228,106,25)" rx="2" ry="2" />
+<text  x="385.71" y="527.5" ></text>
+</g>
+<g >
+<title> (160,407 samples, 0.02%)</title><rect x="328.6" y="485" width="0.1" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="331.59" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt; &gt; &gt;::lower_bound (966,658 samples, 0.10%)</title><rect x="429.5" y="261" width="0.8" height="15.0" fill="rgb(213,37,8)" rx="2" ry="2" />
+<text  x="432.48" y="271.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::~vector (384,119 samples, 0.04%)</title><rect x="688.3" y="469" width="0.3" height="15.0" fill="rgb(243,174,41)" rx="2" ry="2" />
+<text  x="691.31" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Packet const&gt;::Ptr&lt;ns3::Packet&gt; (235,834 samples, 0.02%)</title><rect x="492.5" y="549" width="0.2" height="15.0" fill="rgb(218,60,14)" rx="2" ry="2" />
+<text  x="495.47" y="559.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue const&gt;::Ptr (238,944 samples, 0.02%)</title><rect x="714.9" y="517" width="0.2" height="15.0" fill="rgb(254,229,54)" rx="2" ry="2" />
+<text  x="717.93" y="527.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt;::erase (446,852 samples, 0.05%)</title><rect x="117.6" y="517" width="0.4" height="15.0" fill="rgb(213,39,9)" rx="2" ry="2" />
+<text  x="120.64" y="527.5" ></text>
+</g>
+<g >
+<title>decltype  (368,604 samples, 0.04%)</title><rect x="602.5" y="293" width="0.3" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="605.54" y="303.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;*, std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt; &gt; std::move&lt;__gnu_cxx::__normal_iterator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;*, std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;*, std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt; &gt; &gt; (1,076,159 samples, 0.11%)</title><rect x="357.0" y="501" width="0.9" height="15.0" fill="rgb(254,225,54)" rx="2" ry="2" />
+<text  x="360.03" y="511.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::BuildRarListElement_s*, ns3::BuildRarListElement_s&gt; (157,406 samples, 0.02%)</title><rect x="146.4" y="437" width="0.2" height="15.0" fill="rgb(213,38,9)" rx="2" ry="2" />
+<text  x="149.43" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; &gt; &gt;::_S_key (158,025 samples, 0.02%)</title><rect x="524.4" y="309" width="0.1" height="15.0" fill="rgb(210,26,6)" rx="2" ry="2" />
+<text  x="527.36" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt;* std::__copy_move_a1&lt;true, ns3::Ptr&lt;ns3::PacketBurst&gt;*, ns3::Ptr&lt;ns3::PacketBurst&gt;*&gt; (2,014,508 samples, 0.21%)</title><rect x="634.2" y="469" width="1.7" height="15.0" fill="rgb(219,68,16)" rx="2" ry="2" />
+<text  x="637.23" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::VendorSpecificListElement_s* std::__uninitialized_copy&lt;false&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::VendorSpecificListElement_s const*, std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt; &gt;, ns3::VendorSpecificListElement_s*&gt; (198,957 samples, 0.02%)</title><rect x="228.7" y="405" width="0.2" height="15.0" fill="rgb(227,101,24)" rx="2" ry="2" />
+<text  x="231.70" y="415.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt; &gt;::construct&lt;ns3::Ptr&lt;ns3::Packet&gt;, ns3::Ptr&lt;ns3::Packet&gt; const&amp;&gt; (408,582 samples, 0.04%)</title><rect x="363.6" y="453" width="0.4" height="15.0" fill="rgb(254,228,54)" rx="2" ry="2" />
+<text  x="366.64" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::HarqProcessInfoElement_t* std::__uninitialized_copy&lt;true&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::HarqProcessInfoElement_t const*, std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt;, ns3::HarqProcessInfoElement_t*&gt; (419,766 samples, 0.04%)</title><rect x="591.5" y="229" width="0.3" height="15.0" fill="rgb(238,156,37)" rx="2" ry="2" />
+<text  x="594.49" y="239.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; &gt; &gt;::find (1,985,670 samples, 0.20%)</title><rect x="465.1" y="533" width="1.6" height="15.0" fill="rgb(223,83,20)" rx="2" ry="2" />
+<text  x="468.11" y="543.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::at (197,283 samples, 0.02%)</title><rect x="302.4" y="469" width="0.2" height="15.0" fill="rgb(220,69,16)" rx="2" ry="2" />
+<text  x="305.40" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt;::_Vector_base (426,707 samples, 0.04%)</title><rect x="228.9" y="437" width="0.3" height="15.0" fill="rgb(216,55,13)" rx="2" ry="2" />
+<text  x="231.89" y="447.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::_M_check_len (249,636 samples, 0.03%)</title><rect x="572.9" y="309" width="0.2" height="15.0" fill="rgb(229,114,27)" rx="2" ry="2" />
+<text  x="575.88" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultDeleter&lt;ns3::SpectrumValue&gt;::Delete (433,382 samples, 0.04%)</title><rect x="717.6" y="469" width="0.3" height="15.0" fill="rgb(222,79,19)" rx="2" ry="2" />
+<text  x="720.58" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::FfMacSchedSapProvider::SchedDlRlcBufferReqParameters::operator= (1,434,031 samples, 0.15%)</title><rect x="25.5" y="309" width="1.2" height="15.0" fill="rgb(232,125,29)" rx="2" ry="2" />
+<text  x="28.52" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter&gt;::Unref (3,158,900 samples, 0.33%)</title><rect x="75.3" y="421" width="2.6" height="15.0" fill="rgb(221,78,18)" rx="2" ry="2" />
+<text  x="78.35" y="431.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;::pair&lt;ns3::TbId_t, ns3::tbInfo_t&gt; (581,670 samples, 0.06%)</title><rect x="384.9" y="405" width="0.4" height="15.0" fill="rgb(223,87,20)" rx="2" ry="2" />
+<text  x="387.85" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::TypeId::GetAttributeN (149,666 samples, 0.02%)</title><rect x="119.5" y="453" width="0.1" height="15.0" fill="rgb(225,95,22)" rx="2" ry="2" />
+<text  x="122.47" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::BuildDataListElement_s, std::allocator&lt;ns3::BuildDataListElement_s&gt; &gt;::vector (296,060 samples, 0.03%)</title><rect x="94.9" y="437" width="0.3" height="15.0" fill="rgb(225,95,22)" rx="2" ry="2" />
+<text  x="97.95" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy::SendControlChannels (63,350,263 samples, 6.53%)</title><rect x="296.7" y="549" width="51.0" height="15.0" fill="rgb(227,105,25)" rx="2" ry="2" />
+<text  x="299.73" y="559.5" >ns3::..</text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Packet&gt;::operator (160,485 samples, 0.02%)</title><rect x="368.5" y="517" width="0.1" height="15.0" fill="rgb(224,88,21)" rx="2" ry="2" />
+<text  x="371.48" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::Object::GetTypeId (544,814 samples, 0.06%)</title><rect x="537.3" y="277" width="0.4" height="15.0" fill="rgb(234,134,32)" rx="2" ry="2" />
+<text  x="540.27" y="287.5" ></text>
+</g>
+<g >
+<title>std::less&lt;ns3::LteFlowId_t&gt;::operator (150,830 samples, 0.02%)</title><rect x="182.3" y="421" width="0.1" height="15.0" fill="rgb(252,218,52)" rx="2" ry="2" />
+<text  x="185.33" y="431.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::MacCeListElement_s, std::allocator&lt;ns3::MacCeListElement_s&gt; &gt;::~vector (237,617 samples, 0.02%)</title><rect x="133.3" y="501" width="0.2" height="15.0" fill="rgb(206,5,1)" rx="2" ry="2" />
+<text  x="136.29" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::TypeId::operator= (327,866 samples, 0.03%)</title><rect x="543.3" y="277" width="0.3" height="15.0" fill="rgb(211,28,6)" rx="2" ry="2" />
+<text  x="546.35" y="287.5" ></text>
+</g>
+<g >
+<title>bool __gnu_cxx::operator==&lt;ns3::VendorSpecificListElement_s const*, std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt; &gt; (316,067 samples, 0.03%)</title><rect x="475.9" y="229" width="0.2" height="15.0" fill="rgb(233,131,31)" rx="2" ry="2" />
+<text  x="478.87" y="239.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;int&gt; &gt;::deallocate (169,673 samples, 0.02%)</title><rect x="575.2" y="309" width="0.1" height="15.0" fill="rgb(250,207,49)" rx="2" ry="2" />
+<text  x="578.16" y="319.5" ></text>
+</g>
+<g >
+<title>void std::_Bind&lt;void  (22,443,594 samples, 2.31%)</title><rect x="17.2" y="661" width="18.0" height="15.0" fill="rgb(242,174,41)" rx="2" ry="2" />
+<text  x="20.17" y="671.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::SpectrumValue, ns3::Empty, ns3::DefaultDeleter&lt;ns3::SpectrumValue&gt; &gt;::Unref (165,191 samples, 0.02%)</title><rect x="481.6" y="309" width="0.2" height="15.0" fill="rgb(246,189,45)" rx="2" ry="2" />
+<text  x="484.64" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::VendorSpecificListElement_s* std::__copy_move_a1&lt;false, ns3::VendorSpecificListElement_s const*, ns3::VendorSpecificListElement_s*&gt; (181,476 samples, 0.02%)</title><rect x="26.1" y="245" width="0.1" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="29.05" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::Object::Construct (260,304 samples, 0.03%)</title><rect x="162.8" y="421" width="0.3" height="15.0" fill="rgb(228,108,26)" rx="2" ry="2" />
+<text  x="165.85" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; &gt; &gt;::_M_lower_bound (993,953 samples, 0.10%)</title><rect x="465.6" y="501" width="0.8" height="15.0" fill="rgb(226,97,23)" rx="2" ry="2" />
+<text  x="468.59" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultSimulatorImpl::ProcessOneEvent (22,443,594 samples, 2.31%)</title><rect x="17.2" y="773" width="18.0" height="15.0" fill="rgb(211,30,7)" rx="2" ry="2" />
+<text  x="20.17" y="783.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, unsigned char*&gt; (204,725 samples, 0.02%)</title><rect x="147.2" y="405" width="0.2" height="15.0" fill="rgb(227,104,25)" rx="2" ry="2" />
+<text  x="150.24" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::SpectrumValue, ns3::Empty, ns3::DefaultDeleter&lt;ns3::SpectrumValue&gt; &gt;::operator= (239,557 samples, 0.02%)</title><rect x="316.9" y="405" width="0.2" height="15.0" fill="rgb(250,210,50)" rx="2" ry="2" />
+<text  x="319.94" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::~_Rb_tree (270,414 samples, 0.03%)</title><rect x="341.4" y="453" width="0.2" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="344.36" y="463.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;is_member_pointer_v&lt;void  (1,840,445 samples, 0.19%)</title><rect x="62.9" y="517" width="1.5" height="15.0" fill="rgb(241,170,40)" rx="2" ry="2" />
+<text  x="65.92" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::Object::Object (2,165,809 samples, 0.22%)</title><rect x="536.9" y="293" width="1.8" height="15.0" fill="rgb(242,174,41)" rx="2" ry="2" />
+<text  x="539.92" y="303.5" ></text>
+</g>
+<g >
+<title>std::set&lt;unsigned short, std::less&lt;unsigned short&gt;, std::allocator&lt;unsigned short&gt; &gt;::find (148,308 samples, 0.02%)</title><rect x="121.8" y="533" width="0.1" height="15.0" fill="rgb(207,12,2)" rx="2" ry="2" />
+<text  x="124.79" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::operator[] (190,175 samples, 0.02%)</title><rect x="327.2" y="485" width="0.1" height="15.0" fill="rgb(248,202,48)" rx="2" ry="2" />
+<text  x="330.15" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_S_left (158,793 samples, 0.02%)</title><rect x="337.3" y="373" width="0.2" height="15.0" fill="rgb(231,120,28)" rx="2" ry="2" />
+<text  x="340.35" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;int, std::allocator&lt;int&gt; &gt;::_Vector_impl::_Vector_impl (165,440 samples, 0.02%)</title><rect x="91.4" y="517" width="0.1" height="15.0" fill="rgb(236,142,34)" rx="2" ry="2" />
+<text  x="94.41" y="527.5" ></text>
+</g>
+<g >
+<title>void std::vector&lt;ns3::BuildDataListElement_s, std::allocator&lt;ns3::BuildDataListElement_s&gt; &gt;::_M_realloc_insert&lt;ns3::BuildDataListElement_s const&amp;&gt; (3,684,590 samples, 0.38%)</title><rect x="202.4" y="469" width="2.9" height="15.0" fill="rgb(238,153,36)" rx="2" ry="2" />
+<text  x="205.35" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_decrement (156,793 samples, 0.02%)</title><rect x="272.6" y="405" width="0.2" height="15.0" fill="rgb(238,152,36)" rx="2" ry="2" />
+<text  x="275.64" y="415.5" ></text>
+</g>
+<g >
+<title>decltype  (2,332,441 samples, 0.24%)</title><rect x="352.4" y="501" width="1.9" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="355.42" y="511.5" ></text>
+</g>
+<g >
+<title>double* std::__uninitialized_default_n_1&lt;true&gt;::__uninit_default_n&lt;double*, unsigned long&gt; (153,593 samples, 0.02%)</title><rect x="316.3" y="325" width="0.1" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="319.25" y="335.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_List_base (403,989 samples, 0.04%)</title><rect x="497.7" y="533" width="0.3" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="500.72" y="543.5" ></text>
+</g>
+<g >
+<title>bool __gnu_cxx::operator==&lt;ns3::RlcPduListElement_s const*, std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; (346,484 samples, 0.04%)</title><rect x="212.3" y="341" width="0.2" height="15.0" fill="rgb(251,212,50)" rx="2" ry="2" />
+<text  x="215.26" y="351.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_Auto_node::_Auto_node&lt;std::pair&lt;int, double&gt; &gt; (461,183 samples, 0.05%)</title><rect x="293.1" y="485" width="0.4" height="15.0" fill="rgb(205,4,1)" rx="2" ry="2" />
+<text  x="296.13" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::DlCqiLteControlMessage::~DlCqiLteControlMessage (197,585 samples, 0.02%)</title><rect x="497.4" y="437" width="0.2" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="500.43" y="447.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::operator= (458,503 samples, 0.05%)</title><rect x="61.6" y="533" width="0.4" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="64.63" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt;::Ptr (272,135 samples, 0.03%)</title><rect x="724.9" y="437" width="0.2" height="15.0" fill="rgb(219,67,16)" rx="2" ry="2" />
+<text  x="727.89" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::TagBuffer::ReadU32 (197,361 samples, 0.02%)</title><rect x="436.7" y="181" width="0.1" height="15.0" fill="rgb(252,216,51)" rx="2" ry="2" />
+<text  x="439.65" y="191.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumSignalParameters::~SpectrumSignalParameters (184,600 samples, 0.02%)</title><rect x="654.0" y="437" width="0.2" height="15.0" fill="rgb(205,2,0)" rx="2" ry="2" />
+<text  x="657.02" y="447.5" ></text>
+</g>
+<g >
+<title>double* std::fill_n&lt;double*, unsigned long, double&gt; (162,027 samples, 0.02%)</title><rect x="57.1" y="389" width="0.1" height="15.0" fill="rgb(234,135,32)" rx="2" ry="2" />
+<text  x="60.11" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultSimulatorImpl::Run (922,121,412 samples, 95.09%)</title><rect x="36.8" y="757" width="741.7" height="15.0" fill="rgb(207,11,2)" rx="2" ry="2" />
+<text  x="39.84" y="767.5" >ns3::DefaultSimulatorImpl::Run</text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_Vector_impl::_Vector_impl (183,612 samples, 0.02%)</title><rect x="688.9" y="405" width="0.1" height="15.0" fill="rgb(226,98,23)" rx="2" ry="2" />
+<text  x="691.88" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;5ul, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::_Tuple_impl (165,624 samples, 0.02%)</title><rect x="87.8" y="309" width="0.2" height="15.0" fill="rgb(221,74,17)" rx="2" ry="2" />
+<text  x="90.82" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::MakeEvent&lt;void  (2,408,455 samples, 0.25%)</title><rect x="666.0" y="485" width="2.0" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="669.02" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::Copy (10,413,233 samples, 1.07%)</title><rect x="358.8" y="533" width="8.4" height="15.0" fill="rgb(240,161,38)" rx="2" ry="2" />
+<text  x="361.81" y="543.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;* std::__niter_base&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;*, std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt; &gt; (157,965 samples, 0.02%)</title><rect x="357.8" y="469" width="0.1" height="15.0" fill="rgb(209,18,4)" rx="2" ry="2" />
+<text  x="360.77" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::~PacketBurst (2,458,313 samples, 0.25%)</title><rect x="549.1" y="261" width="2.0" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="552.14" y="271.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::_S_key (157,744 samples, 0.02%)</title><rect x="244.1" y="421" width="0.1" height="15.0" fill="rgb(210,26,6)" rx="2" ry="2" />
+<text  x="247.10" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::EventId::EventId (646,382 samples, 0.07%)</title><rect x="305.0" y="469" width="0.5" height="15.0" fill="rgb(206,4,1)" rx="2" ry="2" />
+<text  x="307.98" y="479.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::operator[] (3,043,186 samples, 0.31%)</title><rect x="190.6" y="485" width="2.5" height="15.0" fill="rgb(219,66,15)" rx="2" ry="2" />
+<text  x="193.64" y="495.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;::_M_ptr (179,937 samples, 0.02%)</title><rect x="385.6" y="437" width="0.1" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="388.57" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Head_base&lt;1ul, ns3::Ptr&lt;ns3::SpectrumValue const&gt;, false&gt;::_Head_base (380,537 samples, 0.04%)</title><rect x="712.2" y="357" width="0.3" height="15.0" fill="rgb(206,5,1)" rx="2" ry="2" />
+<text  x="715.21" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumModel const&gt;::Acquire (127,934 samples, 0.01%)</title><rect x="405.4" y="485" width="0.1" height="15.0" fill="rgb(222,80,19)" rx="2" ry="2" />
+<text  x="408.37" y="495.5" ></text>
+</g>
+<g >
+<title>unsigned short&amp;&amp; std::forward&lt;unsigned short&gt; (242,245 samples, 0.02%)</title><rect x="479.4" y="277" width="0.2" height="15.0" fill="rgb(227,104,24)" rx="2" ry="2" />
+<text  x="482.44" y="287.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::__uninitialized_copy&lt;true&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, unsigned char*&gt; (650,532 samples, 0.07%)</title><rect x="687.7" y="421" width="0.5" height="15.0" fill="rgb(233,129,30)" rx="2" ry="2" />
+<text  x="690.72" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::~SpectrumValue (362,265 samples, 0.04%)</title><rect x="728.3" y="437" width="0.3" height="15.0" fill="rgb(247,193,46)" rx="2" ry="2" />
+<text  x="731.27" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter&gt;::Unref (191,238 samples, 0.02%)</title><rect x="97.0" y="421" width="0.1" height="15.0" fill="rgb(221,78,18)" rx="2" ry="2" />
+<text  x="99.98" y="431.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_assign_dispatch&lt;std::_List_const_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; (776,735 samples, 0.08%)</title><rect x="346.4" y="501" width="0.6" height="15.0" fill="rgb(237,148,35)" rx="2" ry="2" />
+<text  x="349.41" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::TbId_t, std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::_Select1st&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::_M_get_insert_hint_unique_pos (485,965 samples, 0.05%)</title><rect x="528.3" y="293" width="0.4" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="531.28" y="303.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::end (220,899 samples, 0.02%)</title><rect x="746.2" y="517" width="0.1" height="15.0" fill="rgb(237,147,35)" rx="2" ry="2" />
+<text  x="749.17" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;::_Vector_impl_data::_M_swap_data (195,859 samples, 0.02%)</title><rect x="350.3" y="389" width="0.1" height="15.0" fill="rgb(239,156,37)" rx="2" ry="2" />
+<text  x="353.29" y="399.5" ></text>
+</g>
+<g >
+<title>__dynamic_cast (271,796 samples, 0.03%)</title><rect x="736.7" y="517" width="0.2" height="15.0" fill="rgb(227,102,24)" rx="2" ry="2" />
+<text  x="739.72" y="527.5" ></text>
+</g>
+<g >
+<title>unsigned short* std::__uninitialized_copy&lt;true&gt;::__uninit_copy&lt;std::move_iterator&lt;unsigned short*&gt;, unsigned short*&gt; (154,651 samples, 0.02%)</title><rect x="106.3" y="389" width="0.1" height="15.0" fill="rgb(226,97,23)" rx="2" ry="2" />
+<text  x="109.25" y="399.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::end (326,697 samples, 0.03%)</title><rect x="213.8" y="469" width="0.2" height="15.0" fill="rgb(205,0,0)" rx="2" ry="2" />
+<text  x="216.76" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Bit_iterator::_Bit_iterator (156,996 samples, 0.02%)</title><rect x="202.1" y="405" width="0.2" height="15.0" fill="rgb(222,78,18)" rx="2" ry="2" />
+<text  x="205.13" y="415.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned char, unsigned int, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, unsigned int&gt; &gt; &gt;::empty (277,085 samples, 0.03%)</title><rect x="253.9" y="517" width="0.2" height="15.0" fill="rgb(251,212,50)" rx="2" ry="2" />
+<text  x="256.90" y="527.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::PacketMetadata::Data*, std::allocator&lt;ns3::PacketMetadata::Data*&gt; &gt;::begin (175,095 samples, 0.02%)</title><rect x="15.1" y="325" width="0.1" height="15.0" fill="rgb(220,70,16)" rx="2" ry="2" />
+<text  x="18.10" y="335.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_S_key (553,980 samples, 0.06%)</title><rect x="663.4" y="389" width="0.4" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="666.38" y="399.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt;::allocate (185,863 samples, 0.02%)</title><rect x="261.0" y="309" width="0.2" height="15.0" fill="rgb(232,124,29)" rx="2" ry="2" />
+<text  x="264.02" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumModel const&gt;::operator* (233,289 samples, 0.02%)</title><rect x="326.5" y="485" width="0.2" height="15.0" fill="rgb(254,228,54)" rx="2" ry="2" />
+<text  x="329.52" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt; &gt;::operator* (587,602 samples, 0.06%)</title><rect x="183.4" y="485" width="0.5" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="186.45" y="495.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::VendorSpecificListElement_s*&gt; (234,807 samples, 0.02%)</title><rect x="263.9" y="357" width="0.2" height="15.0" fill="rgb(236,143,34)" rx="2" ry="2" />
+<text  x="266.87" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::EventId ns3::Simulator::ScheduleNow&lt;void  (1,222,846 samples, 0.13%)</title><rect x="52.9" y="549" width="1.0" height="15.0" fill="rgb(214,41,9)" rx="2" ry="2" />
+<text  x="55.89" y="559.5" ></text>
+</g>
+<g >
+<title>std::function&lt;void  (2,750,000 samples, 0.28%)</title><rect x="710.3" y="469" width="2.2" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="713.33" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::TagBuffer::ReadU8 (285,405 samples, 0.03%)</title><rect x="426.9" y="165" width="0.2" height="15.0" fill="rgb(242,174,41)" rx="2" ry="2" />
+<text  x="429.92" y="175.5" ></text>
+</g>
+<g >
+<title>void std::__invoke_impl&lt;void, std::_Bind&lt;void  (886,915,093 samples, 91.46%)</title><rect x="44.9" y="645" width="713.3" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="47.85" y="655.5" >void std::__invoke_impl&lt;void, std::_Bind&lt;void </text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; std::map&lt;ns3::Scheduler::EventKey, ns3::EventImpl*, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::emplace_hint&lt;std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (953,823 samples, 0.10%)</title><rect x="706.4" y="437" width="0.8" height="15.0" fill="rgb(253,224,53)" rx="2" ry="2" />
+<text  x="709.45" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::TbId_t, std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::_Select1st&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::end (332,913 samples, 0.03%)</title><rect x="529.8" y="309" width="0.3" height="15.0" fill="rgb(250,210,50)" rx="2" ry="2" />
+<text  x="532.84" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::CeBitmap_e* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::CeBitmap_e const*, std::vector&lt;ns3::CeBitmap_e, std::allocator&lt;ns3::CeBitmap_e&gt; &gt; &gt;, ns3::CeBitmap_e*&gt; (492,021 samples, 0.05%)</title><rect x="203.8" y="373" width="0.4" height="15.0" fill="rgb(233,131,31)" rx="2" ry="2" />
+<text  x="206.84" y="383.5" ></text>
+</g>
+<g >
+<title>unsigned short const&amp; std::__get_helper&lt;0ul, unsigned short const&amp;&gt; (277,874 samples, 0.03%)</title><rect x="191.4" y="325" width="0.3" height="15.0" fill="rgb(238,154,36)" rx="2" ry="2" />
+<text  x="194.45" y="335.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt;::_M_ptr (311,832 samples, 0.03%)</title><rect x="723.6" y="453" width="0.2" height="15.0" fill="rgb(254,228,54)" rx="2" ry="2" />
+<text  x="726.56" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::ObjectBase::~ObjectBase (202,260 samples, 0.02%)</title><rect x="77.1" y="309" width="0.1" height="15.0" fill="rgb(232,126,30)" rx="2" ry="2" />
+<text  x="80.07" y="319.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;bool, std::allocator&lt;bool&gt; &gt;::_M_check_len (234,878 samples, 0.02%)</title><rect x="247.8" y="437" width="0.2" height="15.0" fill="rgb(226,100,23)" rx="2" ry="2" />
+<text  x="250.79" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::LteRadioBearerTag::Deserialize (721,482 samples, 0.07%)</title><rect x="490.1" y="517" width="0.6" height="15.0" fill="rgb(231,121,28)" rx="2" ry="2" />
+<text  x="493.10" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Function_handler&lt;void  (916,117 samples, 0.09%)</title><rect x="725.8" y="389" width="0.8" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="728.82" y="399.5" ></text>
+</g>
+<g >
+<title>operator new (333,876 samples, 0.03%)</title><rect x="239.5" y="181" width="0.3" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="242.54" y="191.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;int, double&gt;::pair&lt;int&amp;, double&amp;&gt; (314,047 samples, 0.03%)</title><rect x="296.2" y="533" width="0.2" height="15.0" fill="rgb(217,57,13)" rx="2" ry="2" />
+<text  x="299.16" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Select1st&lt;std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt; &gt;::operator (203,288 samples, 0.02%)</title><rect x="55.6" y="421" width="0.2" height="15.0" fill="rgb(254,229,54)" rx="2" ry="2" />
+<text  x="58.59" y="431.5" ></text>
+</g>
+<g >
+<title>std::this_thread::get_id (261,839 samples, 0.03%)</title><rect x="665.8" y="469" width="0.2" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="668.77" y="479.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::~_List_base (277,280 samples, 0.03%)</title><rect x="463.7" y="357" width="0.2" height="15.0" fill="rgb(221,74,17)" rx="2" ry="2" />
+<text  x="466.71" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::MapScheduler::Insert (146,147 samples, 0.02%)</title><rect x="614.1" y="469" width="0.2" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="617.14" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::_M_get_insert_hint_unique_pos (424,499 samples, 0.04%)</title><rect x="192.3" y="453" width="0.3" height="15.0" fill="rgb(206,6,1)" rx="2" ry="2" />
+<text  x="195.29" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;::clear (165,983 samples, 0.02%)</title><rect x="464.6" y="533" width="0.1" height="15.0" fill="rgb(253,223,53)" rx="2" ry="2" />
+<text  x="467.56" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::EventImpl&gt;::Ptr (596,385 samples, 0.06%)</title><rect x="277.6" y="501" width="0.5" height="15.0" fill="rgb(239,157,37)" rx="2" ry="2" />
+<text  x="280.58" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt;::_M_allocate (381,294 samples, 0.04%)</title><rect x="261.9" y="485" width="0.3" height="15.0" fill="rgb(227,102,24)" rx="2" ry="2" />
+<text  x="264.93" y="495.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;double&gt; &gt;::allocate (168,940 samples, 0.02%)</title><rect x="78.5" y="421" width="0.2" height="15.0" fill="rgb(234,136,32)" rx="2" ry="2" />
+<text  x="81.52" y="431.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::TypeId::AttributeInformation, std::allocator&lt;ns3::TypeId::AttributeInformation&gt; &gt;::size (214,385 samples, 0.02%)</title><rect x="541.6" y="229" width="0.2" height="15.0" fill="rgb(230,117,28)" rx="2" ry="2" />
+<text  x="544.62" y="239.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt; &gt;::_M_end (171,031 samples, 0.02%)</title><rect x="73.6" y="469" width="0.1" height="15.0" fill="rgb(243,176,42)" rx="2" ry="2" />
+<text  x="76.61" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::LteInterference*&amp; std::forward&lt;ns3::LteInterference*&amp;&gt; (156,121 samples, 0.02%)</title><rect x="51.2" y="581" width="0.1" height="15.0" fill="rgb(211,27,6)" rx="2" ry="2" />
+<text  x="54.16" y="591.5" ></text>
+</g>
+<g >
+<title>operator new (167,253 samples, 0.02%)</title><rect x="71.9" y="421" width="0.1" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="74.91" y="431.5" ></text>
+</g>
+<g >
+<title>std::map&lt;ns3::Scheduler::EventKey, ns3::EventImpl*, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::key_comp (280,831 samples, 0.03%)</title><rect x="273.1" y="469" width="0.2" height="15.0" fill="rgb(213,39,9)" rx="2" ry="2" />
+<text  x="276.11" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::PhichListElement_s* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::PhichListElement_s const*, std::vector&lt;ns3::PhichListElement_s, std::allocator&lt;ns3::PhichListElement_s&gt; &gt; &gt;, ns3::PhichListElement_s*&gt; (202,017 samples, 0.02%)</title><rect x="227.5" y="421" width="0.2" height="15.0" fill="rgb(238,153,36)" rx="2" ry="2" />
+<text  x="230.50" y="431.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, std::vector&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt;, std::allocator&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt;, std::allocator&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt;::find (1,363,562 samples, 0.14%)</title><rect x="187.8" y="485" width="1.1" height="15.0" fill="rgb(238,154,37)" rx="2" ry="2" />
+<text  x="190.84" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::lower_bound (2,165,306 samples, 0.22%)</title><rect x="84.4" y="421" width="1.7" height="15.0" fill="rgb(254,228,54)" rx="2" ry="2" />
+<text  x="87.37" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt; &gt;::end (151,000 samples, 0.02%)</title><rect x="651.1" y="469" width="0.1" height="15.0" fill="rgb(218,60,14)" rx="2" ry="2" />
+<text  x="654.11" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::TypeId::GetAttributeN (1,373,694 samples, 0.14%)</title><rect x="372.8" y="469" width="1.1" height="15.0" fill="rgb(225,95,22)" rx="2" ry="2" />
+<text  x="375.78" y="479.5" ></text>
+</g>
+<g >
+<title>void std::__invoke_impl&lt;void, ns3::Callback&lt;void, ns3::SpectrumValue const&amp;&gt;::Callback&lt;void  (324,769 samples, 0.03%)</title><rect x="611.9" y="437" width="0.3" height="15.0" fill="rgb(245,184,44)" rx="2" ry="2" />
+<text  x="614.94" y="447.5" ></text>
+</g>
+<g >
+<title>void std::vector&lt;int, std::allocator&lt;int&gt; &gt;::_M_realloc_insert&lt;int const&amp;&gt; (1,905,826 samples, 0.20%)</title><rect x="397.1" y="533" width="1.6" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="400.12" y="543.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;ns3::UlDciLteControlMessage&gt;::_M_ptr (143,958 samples, 0.01%)</title><rect x="287.3" y="437" width="0.1" height="15.0" fill="rgb(233,131,31)" rx="2" ry="2" />
+<text  x="290.30" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;::_M_valptr (126,568 samples, 0.01%)</title><rect x="81.9" y="421" width="0.2" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="84.95" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::DlDciListElement_s::~DlDciListElement_s (221,743 samples, 0.02%)</title><rect x="139.3" y="469" width="0.2" height="15.0" fill="rgb(219,64,15)" rx="2" ry="2" />
+<text  x="142.29" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::LteRlcSpecificLteMacSapUser::NotifyTxOpportunity (1,376,216 samples, 0.14%)</title><rect x="15.9" y="421" width="1.1" height="15.0" fill="rgb(249,204,48)" rx="2" ry="2" />
+<text  x="18.88" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::ByteTagList::Iterator::PrepareForNext (236,079 samples, 0.02%)</title><rect x="436.6" y="197" width="0.2" height="15.0" fill="rgb(206,5,1)" rx="2" ry="2" />
+<text  x="439.62" y="207.5" ></text>
+</g>
+<g >
+<title>std::_Bvector_base&lt;std::allocator&lt;bool&gt; &gt;::_Bvector_impl_data::_Bvector_impl_data (156,996 samples, 0.02%)</title><rect x="202.1" y="421" width="0.2" height="15.0" fill="rgb(214,45,10)" rx="2" ry="2" />
+<text  x="205.13" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::Angles::Angles (3,272,025 samples, 0.34%)</title><rect x="309.5" y="501" width="2.7" height="15.0" fill="rgb(254,226,54)" rx="2" ry="2" />
+<text  x="312.54" y="511.5" ></text>
+</g>
+<g >
+<title>double* std::__copy_move_a2&lt;false, double const*, double*&gt; (447,358 samples, 0.05%)</title><rect x="647.6" y="357" width="0.3" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="650.56" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumSignalParametersDataFrame::LteSpectrumSignalParametersDataFrame (5,596,120 samples, 0.58%)</title><rect x="644.6" y="485" width="4.5" height="15.0" fill="rgb(206,8,1)" rx="2" ry="2" />
+<text  x="647.56" y="495.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_List_impl::_List_impl (157,771 samples, 0.02%)</title><rect x="721.4" y="469" width="0.1" height="15.0" fill="rgb(244,183,43)" rx="2" ry="2" />
+<text  x="724.37" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::EventId ns3::Simulator::Schedule&lt;void  (2,167,776 samples, 0.22%)</title><rect x="108.3" y="533" width="1.7" height="15.0" fill="rgb(253,224,53)" rx="2" ry="2" />
+<text  x="111.25" y="543.5" ></text>
+</g>
+<g >
+<title>std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;::_M_valptr (151,932 samples, 0.02%)</title><rect x="356.1" y="485" width="0.1" height="15.0" fill="rgb(207,10,2)" rx="2" ry="2" />
+<text  x="359.07" y="495.5" ></text>
+</g>
+<g >
+<title>unsigned int&amp; std::__get_helper&lt;2ul, unsigned int&gt; (272,452 samples, 0.03%)</title><rect x="756.3" y="581" width="0.2" height="15.0" fill="rgb(211,31,7)" rx="2" ry="2" />
+<text  x="759.33" y="591.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbMac::DoReceiveLteControlMessage (20,358,746 samples, 2.10%)</title><rect x="445.5" y="341" width="16.4" height="15.0" fill="rgb(229,110,26)" rx="2" ry="2" />
+<text  x="448.50" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::ObjectBase::ConstructSelf (2,873,447 samples, 0.30%)</title><rect x="372.3" y="485" width="2.3" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="375.26" y="495.5" ></text>
+</g>
+<g >
+<title>double* std::__niter_base&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; (155,897 samples, 0.02%)</title><rect x="114.1" y="341" width="0.2" height="15.0" fill="rgb(245,186,44)" rx="2" ry="2" />
+<text  x="117.14" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::PacketTagList::COWTraverse (1,126,525 samples, 0.12%)</title><rect x="430.8" y="293" width="0.9" height="15.0" fill="rgb(252,219,52)" rx="2" ry="2" />
+<text  x="433.75" y="303.5" ></text>
+</g>
+<g >
+<title>std::tuple_element&lt;5ul, std::tuple&lt;ns3::MultiModelSpectrumChannel*, ns3::Ptr&lt;ns3::SpectrumValue&gt;, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt; &gt;::type&amp; std::get&lt;5ul, ns3::MultiModelSpectrumChannel*, ns3::Ptr&lt;ns3::SpectrumValue&gt;, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt; (744,917 samples, 0.08%)</title><rect x="757.4" y="597" width="0.6" height="15.0" fill="rgb(242,174,41)" rx="2" ry="2" />
+<text  x="760.40" y="607.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumPhy::GetMobility (303,143 samples, 0.03%)</title><rect x="643.8" y="517" width="0.2" height="15.0" fill="rgb(228,107,25)" rx="2" ry="2" />
+<text  x="646.80" y="527.5" ></text>
+</g>
+<g >
+<title>std::_List_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::insert&lt;std::_List_const_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;, void&gt; (411,083 samples, 0.04%)</title><rect x="648.7" y="437" width="0.4" height="15.0" fill="rgb(210,23,5)" rx="2" ry="2" />
+<text  x="651.73" y="447.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt; &gt;::destroy&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; (190,528 samples, 0.02%)</title><rect x="506.4" y="453" width="0.1" height="15.0" fill="rgb(209,18,4)" rx="2" ry="2" />
+<text  x="509.38" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt;::size (173,421 samples, 0.02%)</title><rect x="525.8" y="309" width="0.2" height="15.0" fill="rgb(216,50,12)" rx="2" ry="2" />
+<text  x="528.83" y="319.5" ></text>
+</g>
+<g >
+<title>std::map&lt;int, double, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::~map (804,188 samples, 0.08%)</title><rect x="60.5" y="517" width="0.7" height="15.0" fill="rgb(218,61,14)" rx="2" ry="2" />
+<text  x="63.52" y="527.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::IidManager::IidInformation, std::allocator&lt;ns3::IidManager::IidInformation&gt; &gt;::operator[] (150,378 samples, 0.02%)</title><rect x="373.4" y="421" width="0.1" height="15.0" fill="rgb(214,41,9)" rx="2" ry="2" />
+<text  x="376.36" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_Auto_node::_M_insert (220,811 samples, 0.02%)</title><rect x="661.7" y="405" width="0.1" height="15.0" fill="rgb(213,38,9)" rx="2" ry="2" />
+<text  x="664.65" y="415.5" ></text>
+</g>
+<g >
+<title>double* std::__uninitialized_default_n&lt;double*, unsigned long&gt; (197,197 samples, 0.02%)</title><rect x="646.6" y="357" width="0.2" height="15.0" fill="rgb(231,123,29)" rx="2" ry="2" />
+<text  x="649.59" y="367.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapProvider::ReportBufferStatusParameters&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider::ReportBufferStatusParameters&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider::ReportBufferStatusParameters&gt; &gt; &gt;::begin (295,218 samples, 0.03%)</title><rect x="569.4" y="309" width="0.3" height="15.0" fill="rgb(240,163,39)" rx="2" ry="2" />
+<text  x="572.43" y="319.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Callback&lt;void, ns3::Ptr&lt;ns3::PacketBurst const&gt; &gt;, std::allocator&lt;ns3::Callback&lt;void, ns3::Ptr&lt;ns3::PacketBurst const&gt; &gt; &gt; &gt;::begin (233,931 samples, 0.02%)</title><rect x="672.7" y="517" width="0.1" height="15.0" fill="rgb(243,175,41)" rx="2" ry="2" />
+<text  x="675.66" y="527.5" ></text>
+</g>
+<g >
+<title>bool __gnu_cxx::operator==&lt;ns3::PhichListElement_s const*, std::vector&lt;ns3::PhichListElement_s, std::allocator&lt;ns3::PhichListElement_s&gt; &gt; &gt; (161,679 samples, 0.02%)</title><rect x="227.5" y="373" width="0.2" height="15.0" fill="rgb(222,82,19)" rx="2" ry="2" />
+<text  x="230.53" y="383.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;unsigned short*, unsigned short&gt; (155,477 samples, 0.02%)</title><rect x="473.1" y="261" width="0.2" height="15.0" fill="rgb(210,23,5)" rx="2" ry="2" />
+<text  x="476.13" y="271.5" ></text>
+</g>
+<g >
+<title>std::__allocated_ptr&lt;std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt; &gt;::__allocated_ptr (199,424 samples, 0.02%)</title><rect x="363.0" y="453" width="0.1" height="15.0" fill="rgb(206,6,1)" rx="2" ry="2" />
+<text  x="365.97" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::LtePhy::SetControlMessages (985,557 samples, 0.10%)</title><rect x="598.1" y="293" width="0.8" height="15.0" fill="rgb(247,193,46)" rx="2" ry="2" />
+<text  x="601.14" y="303.5" ></text>
+</g>
+<g >
+<title>void std::__invoke_impl&lt;void, void  (870,107,623 samples, 89.72%)</title><rect x="51.9" y="581" width="699.8" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="54.88" y="591.5" >void std::__invoke_impl&lt;void, void </text>
+</g>
+<g >
+<title>ns3::LteEnbRrc::GetUeManager (2,186,317 samples, 0.23%)</title><rect x="27.4" y="357" width="1.8" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="30.44" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::Object::DoDelete (191,238 samples, 0.02%)</title><rect x="97.0" y="389" width="0.1" height="15.0" fill="rgb(212,34,8)" rx="2" ry="2" />
+<text  x="99.98" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumPhy::UpdateSinrPerceived (400,144 samples, 0.04%)</title><rect x="581.5" y="341" width="0.3" height="15.0" fill="rgb(226,98,23)" rx="2" ry="2" />
+<text  x="584.51" y="351.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_M_erase (763,268 samples, 0.08%)</title><rect x="60.6" y="485" width="0.6" height="15.0" fill="rgb(227,102,24)" rx="2" ry="2" />
+<text  x="63.55" y="495.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt; &gt;::_M_ptr (230,371 samples, 0.02%)</title><rect x="158.4" y="325" width="0.2" height="15.0" fill="rgb(207,9,2)" rx="2" ry="2" />
+<text  x="161.43" y="335.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt; &gt; &gt;::erase (3,494,424 samples, 0.36%)</title><rect x="289.5" y="533" width="2.8" height="15.0" fill="rgb(253,223,53)" rx="2" ry="2" />
+<text  x="292.46" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::TbId_t, std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::_Select1st&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::_Auto_node::_Auto_node&lt;std::pair&lt;ns3::TbId_t, ns3::tbInfo_t&gt; &gt; (1,468,656 samples, 0.15%)</title><rect x="526.4" y="293" width="1.2" height="15.0" fill="rgb(218,62,14)" rx="2" ry="2" />
+<text  x="529.43" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::PacketMetadata::PacketMetadata (266,992 samples, 0.03%)</title><rect x="19.1" y="373" width="0.2" height="15.0" fill="rgb(231,121,28)" rx="2" ry="2" />
+<text  x="22.11" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::clear (1,054,314 samples, 0.11%)</title><rect x="393.9" y="533" width="0.9" height="15.0" fill="rgb(210,24,5)" rx="2" ry="2" />
+<text  x="396.91" y="543.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;::at (194,370 samples, 0.02%)</title><rect x="633.6" y="533" width="0.2" height="15.0" fill="rgb(233,131,31)" rx="2" ry="2" />
+<text  x="636.60" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; std::map&lt;ns3::Scheduler::EventKey, ns3::EventImpl*, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::emplace_hint&lt;std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (487,403 samples, 0.05%)</title><rect x="615.5" y="469" width="0.4" height="15.0" fill="rgb(253,224,53)" rx="2" ry="2" />
+<text  x="618.48" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::~PacketBurst (3,088,032 samples, 0.32%)</title><rect x="378.7" y="341" width="2.5" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="381.74" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumPhy::AddExpectedTb (590,754 samples, 0.06%)</title><rect x="120.2" y="533" width="0.5" height="15.0" fill="rgb(249,206,49)" rx="2" ry="2" />
+<text  x="123.24" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::MemberSchedSapProvider&lt;ns3::PfFfMacScheduler&gt;::SchedUlCqiInfoReq (6,622,886 samples, 0.68%)</title><rect x="220.2" y="517" width="5.3" height="15.0" fill="rgb(214,45,10)" rx="2" ry="2" />
+<text  x="223.16" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s* std::copy&lt;ns3::DlInfoListElement_s*, ns3::DlInfoListElement_s*&gt; (475,054 samples, 0.05%)</title><rect x="206.9" y="469" width="0.4" height="15.0" fill="rgb(241,167,39)" rx="2" ry="2" />
+<text  x="209.94" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_emplace_hint_unique&lt;unsigned int const&amp;, ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp;&gt; (838,836 samples, 0.09%)</title><rect x="81.8" y="485" width="0.7" height="15.0" fill="rgb(226,100,24)" rx="2" ry="2" />
+<text  x="84.78" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue const&gt;::Acquire (472,815 samples, 0.05%)</title><rect x="751.2" y="549" width="0.4" height="15.0" fill="rgb(245,184,44)" rx="2" ry="2" />
+<text  x="754.18" y="559.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt;::push_back (371,903 samples, 0.04%)</title><rect x="117.3" y="517" width="0.3" height="15.0" fill="rgb(229,113,27)" rx="2" ry="2" />
+<text  x="120.28" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::Buffer::~Buffer (338,881 samples, 0.03%)</title><rect x="652.9" y="229" width="0.3" height="15.0" fill="rgb(240,162,38)" rx="2" ry="2" />
+<text  x="655.94" y="239.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; &gt;::_M_ptr (232,556 samples, 0.02%)</title><rect x="465.9" y="453" width="0.2" height="15.0" fill="rgb(219,67,16)" rx="2" ry="2" />
+<text  x="468.91" y="463.5" ></text>
+</g>
+<g >
+<title>f32xsqrtf64 (164,839 samples, 0.02%)</title><rect x="703.4" y="501" width="0.1" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="706.39" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::ByteTagList::ByteTagList (157,202 samples, 0.02%)</title><rect x="153.4" y="357" width="0.1" height="15.0" fill="rgb(220,69,16)" rx="2" ry="2" />
+<text  x="156.36" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::Packet::~Packet (2,563,159 samples, 0.26%)</title><rect x="451.8" y="117" width="2.1" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="454.80" y="127.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteControlMessage&gt;&amp; std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::emplace_back&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; const&amp;&gt; (156,292 samples, 0.02%)</title><rect x="781.5" y="837" width="0.1" height="15.0" fill="rgb(224,89,21)" rx="2" ry="2" />
+<text  x="784.51" y="847.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Callback&lt;void, ns3::PhyTransmissionStatParameters&gt;, std::allocator&lt;ns3::Callback&lt;void, ns3::PhyTransmissionStatParameters&gt; &gt; &gt;::begin (125,646 samples, 0.01%)</title><rect x="535.3" y="341" width="0.1" height="15.0" fill="rgb(239,160,38)" rx="2" ry="2" />
+<text  x="538.27" y="351.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt; &gt;::_M_begin (343,708 samples, 0.04%)</title><rect x="649.9" y="469" width="0.3" height="15.0" fill="rgb(212,35,8)" rx="2" ry="2" />
+<text  x="652.91" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;1ul, ns3::Ptr&lt;ns3::SpectrumValue const&gt;, unsigned int&gt;::~_Tuple_impl (935,788 samples, 0.10%)</title><rect x="772.8" y="533" width="0.8" height="15.0" fill="rgb(252,220,52)" rx="2" ry="2" />
+<text  x="775.80" y="543.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt; &gt; &gt;::_M_range_check (215,267 samples, 0.02%)</title><rect x="289.0" y="517" width="0.2" height="15.0" fill="rgb(239,160,38)" rx="2" ry="2" />
+<text  x="292.00" y="527.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;::_M_range_check (145,739 samples, 0.02%)</title><rect x="375.6" y="517" width="0.1" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="378.57" y="527.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::vector (293,137 samples, 0.03%)</title><rect x="594.8" y="261" width="0.2" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="597.77" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteSpectrumPhy&gt;::Ptr (960,925 samples, 0.10%)</title><rect x="469.4" y="405" width="0.8" height="15.0" fill="rgb(246,188,45)" rx="2" ry="2" />
+<text  x="472.41" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::SpectrumValue, ns3::Empty, ns3::DefaultDeleter&lt;ns3::SpectrumValue&gt; &gt;::Unref (508,044 samples, 0.05%)</title><rect x="716.6" y="469" width="0.4" height="15.0" fill="rgb(246,189,45)" rx="2" ry="2" />
+<text  x="719.58" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_M_copy (425,223 samples, 0.04%)</title><rect x="104.5" y="437" width="0.3" height="15.0" fill="rgb(218,60,14)" rx="2" ry="2" />
+<text  x="107.45" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumPhy&gt;::Ptr (160,484 samples, 0.02%)</title><rect x="660.3" y="501" width="0.1" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="663.30" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::RlcPduListElement_s* std::__uninitialized_copy&lt;false&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::RlcPduListElement_s const*, std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt;, ns3::RlcPduListElement_s*&gt; (178,382 samples, 0.02%)</title><rect x="101.6" y="357" width="0.2" height="15.0" fill="rgb(223,83,19)" rx="2" ry="2" />
+<text  x="104.62" y="367.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::AttributeConstructionList::Item, std::allocator&lt;ns3::AttributeConstructionList::Item&gt; &gt;::_List_base (961,294 samples, 0.10%)</title><rect x="539.3" y="261" width="0.8" height="15.0" fill="rgb(251,212,50)" rx="2" ry="2" />
+<text  x="542.29" y="271.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;unsigned short&gt;::_M_addr (241,097 samples, 0.02%)</title><rect x="395.6" y="453" width="0.2" height="15.0" fill="rgb(221,75,18)" rx="2" ry="2" />
+<text  x="398.62" y="463.5" ></text>
+</g>
+<g >
+<title>operator new (195,089 samples, 0.02%)</title><rect x="316.4" y="405" width="0.2" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="319.41" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteInterference&gt;::operator (310,011 samples, 0.03%)</title><rect x="734.6" y="533" width="0.3" height="15.0" fill="rgb(234,134,32)" rx="2" ry="2" />
+<text  x="737.62" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy::StartSubFrame (19,358,790 samples, 2.00%)</title><rect x="19.6" y="597" width="15.5" height="15.0" fill="rgb(234,136,32)" rx="2" ry="2" />
+<text  x="22.57" y="607.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;* std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_Alloc_node::operator (310,137 samples, 0.03%)</title><rect x="104.5" y="373" width="0.3" height="15.0" fill="rgb(231,122,29)" rx="2" ry="2" />
+<text  x="107.52" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::clear (301,718 samples, 0.03%)</title><rect x="121.5" y="517" width="0.3" height="15.0" fill="rgb(210,24,5)" rx="2" ry="2" />
+<text  x="124.51" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_get_insert_hint_unique_pos (920,658 samples, 0.09%)</title><rect x="662.0" y="405" width="0.7" height="15.0" fill="rgb(209,22,5)" rx="2" ry="2" />
+<text  x="664.98" y="415.5" ></text>
+</g>
+<g >
+<title>void std::_Function_base::_Base_manager&lt;std::_Bind&lt;void  (266,931 samples, 0.03%)</title><rect x="53.7" y="485" width="0.2" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="56.66" y="495.5" ></text>
+</g>
+<g >
+<title>__sqrt_finite (155,543 samples, 0.02%)</title><rect x="311.6" y="453" width="0.1" height="15.0" fill="rgb(235,142,34)" rx="2" ry="2" />
+<text  x="314.61" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PropagationDelayModel&gt;::operator bool (144,100 samples, 0.01%)</title><rect x="323.1" y="501" width="0.1" height="15.0" fill="rgb(252,219,52)" rx="2" ry="2" />
+<text  x="326.08" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;3ul, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::_Tuple_impl (517,866 samples, 0.05%)</title><rect x="667.5" y="341" width="0.5" height="15.0" fill="rgb(218,59,14)" rx="2" ry="2" />
+<text  x="670.54" y="351.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::at (291,311 samples, 0.03%)</title><rect x="588.9" y="229" width="0.3" height="15.0" fill="rgb(220,69,16)" rx="2" ry="2" />
+<text  x="591.92" y="239.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, unsigned char&gt; &gt;::_M_valptr (632,959 samples, 0.07%)</title><rect x="184.7" y="469" width="0.5" height="15.0" fill="rgb(213,40,9)" rx="2" ry="2" />
+<text  x="187.67" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::UeSelected_s::~UeSelected_s (156,086 samples, 0.02%)</title><rect x="106.8" y="341" width="0.1" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="109.80" y="351.5" ></text>
+</g>
+<g >
+<title>double* std::copy&lt;__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, double*&gt; (775,199 samples, 0.08%)</title><rect x="238.4" y="229" width="0.6" height="15.0" fill="rgb(246,192,46)" rx="2" ry="2" />
+<text  x="241.40" y="239.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::clear (828,329 samples, 0.09%)</title><rect x="501.7" y="405" width="0.7" height="15.0" fill="rgb(217,58,13)" rx="2" ry="2" />
+<text  x="504.74" y="415.5" ></text>
+</g>
+<g >
+<title>int* std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;int const*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt;, int*&gt; (599,025 samples, 0.06%)</title><rect x="698.7" y="469" width="0.5" height="15.0" fill="rgb(229,111,26)" rx="2" ry="2" />
+<text  x="701.67" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_decrement (195,924 samples, 0.02%)</title><rect x="662.4" y="373" width="0.2" height="15.0" fill="rgb(238,152,36)" rx="2" ry="2" />
+<text  x="665.45" y="383.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Ptr&lt;ns3::Object&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Object&gt; &gt; &gt;::vector (604,571 samples, 0.06%)</title><rect x="538.2" y="277" width="0.5" height="15.0" fill="rgb(237,147,35)" rx="2" ry="2" />
+<text  x="541.17" y="287.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;ns3::UlDciLteControlMessage&gt;::_M_ptr (283,830 samples, 0.03%)</title><rect x="393.0" y="485" width="0.3" height="15.0" fill="rgb(233,131,31)" rx="2" ry="2" />
+<text  x="396.05" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;0ul, ns3::LteInterference*, ns3::Ptr&lt;ns3::SpectrumValue const&gt;, unsigned int&gt;::~_Tuple_impl (976,372 samples, 0.10%)</title><rect x="772.8" y="549" width="0.8" height="15.0" fill="rgb(248,202,48)" rx="2" ry="2" />
+<text  x="775.77" y="559.5" ></text>
+</g>
+<g >
+<title>decltype  (979,889 samples, 0.10%)</title><rect x="526.8" y="229" width="0.8" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="529.82" y="239.5" ></text>
+</g>
+<g >
+<title>malloc (333,876 samples, 0.03%)</title><rect x="239.5" y="165" width="0.3" height="15.0" fill="rgb(230,119,28)" rx="2" ry="2" />
+<text  x="242.54" y="175.5" ></text>
+</g>
+<g >
+<title>ns3::Object::Initialize (214,377 samples, 0.02%)</title><rect x="130.4" y="469" width="0.2" height="15.0" fill="rgb(231,120,28)" rx="2" ry="2" />
+<text  x="133.38" y="479.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;double&gt; &gt;::deallocate (163,066 samples, 0.02%)</title><rect x="773.3" y="389" width="0.2" height="15.0" fill="rgb(236,143,34)" rx="2" ry="2" />
+<text  x="776.33" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt;::_M_mbegin (161,866 samples, 0.02%)</title><rect x="568.1" y="245" width="0.1" height="15.0" fill="rgb(245,184,44)" rx="2" ry="2" />
+<text  x="571.06" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::operator+ (373,725 samples, 0.04%)</title><rect x="665.3" y="469" width="0.3" height="15.0" fill="rgb(244,182,43)" rx="2" ry="2" />
+<text  x="668.32" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumSignalParametersDataFrame::~LteSpectrumSignalParametersDataFrame (3,401,494 samples, 0.35%)</title><rect x="75.3" y="469" width="2.8" height="15.0" fill="rgb(242,174,41)" rx="2" ry="2" />
+<text  x="78.35" y="479.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt;::allocate (272,885 samples, 0.03%)</title><rect x="210.9" y="437" width="0.2" height="15.0" fill="rgb(219,67,16)" rx="2" ry="2" />
+<text  x="213.86" y="447.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::at (338,936 samples, 0.03%)</title><rect x="399.9" y="549" width="0.3" height="15.0" fill="rgb(238,152,36)" rx="2" ry="2" />
+<text  x="402.90" y="559.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;::~vector (250,258 samples, 0.03%)</title><rect x="592.1" y="277" width="0.2" height="15.0" fill="rgb(235,139,33)" rx="2" ry="2" />
+<text  x="595.06" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::BufferSizeLevelBsr::BufferSize2BsrId (148,238 samples, 0.02%)</title><rect x="686.5" y="501" width="0.2" height="15.0" fill="rgb(236,145,34)" rx="2" ry="2" />
+<text  x="689.54" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::_M_get_insert_hint_unique_pos (303,018 samples, 0.03%)</title><rect x="243.6" y="453" width="0.2" height="15.0" fill="rgb(206,6,1)" rx="2" ry="2" />
+<text  x="246.57" y="463.5" ></text>
+</g>
+<g >
+<title>std::tuple_element&lt;1ul, std::tuple&lt;ns3::LteUePhy*, unsigned int, unsigned int&gt; &gt;::type&amp; std::get&lt;1ul, ns3::LteUePhy*, unsigned int, unsigned int&gt; (345,321 samples, 0.04%)</title><rect x="754.8" y="597" width="0.3" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="757.78" y="607.5" ></text>
+</g>
+<g >
+<title>double* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, double*&gt; (418,403 samples, 0.04%)</title><rect x="654.6" y="453" width="0.3" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="657.59" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;4ul, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::_Tuple_impl&lt;ns3::Ptr&lt;ns3::SpectrumPhy&gt;&amp;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;&amp;, void&gt; (395,163 samples, 0.04%)</title><rect x="666.9" y="357" width="0.4" height="15.0" fill="rgb(208,17,4)" rx="2" ry="2" />
+<text  x="669.95" y="367.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt;::find (1,318,462 samples, 0.14%)</title><rect x="455.5" y="309" width="1.0" height="15.0" fill="rgb(235,142,33)" rx="2" ry="2" />
+<text  x="458.47" y="319.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider::ReportBufferStatusParameters&gt; &gt;::_M_ptr (283,636 samples, 0.03%)</title><rect x="570.5" y="245" width="0.2" height="15.0" fill="rgb(234,136,32)" rx="2" ry="2" />
+<text  x="573.50" y="255.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::find (146,964 samples, 0.02%)</title><rect x="99.3" y="453" width="0.1" height="15.0" fill="rgb(205,3,0)" rx="2" ry="2" />
+<text  x="102.32" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumPhy&gt; ns3::Object::GetObject&lt;ns3::SpectrumPhy&gt; (506,061 samples, 0.05%)</title><rect x="89.8" y="533" width="0.4" height="15.0" fill="rgb(214,45,10)" rx="2" ry="2" />
+<text  x="92.81" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt;::operator= (418,721 samples, 0.04%)</title><rect x="119.8" y="405" width="0.4" height="15.0" fill="rgb(219,65,15)" rx="2" ry="2" />
+<text  x="122.84" y="415.5" ></text>
+</g>
+<g >
+<title>std::_List_node&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt;::_M_valptr (136,464 samples, 0.01%)</title><rect x="501.0" y="517" width="0.1" height="15.0" fill="rgb(254,226,54)" rx="2" ry="2" />
+<text  x="503.99" y="527.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::CqiListElement_s*, ns3::CqiListElement_s&gt; (416,767 samples, 0.04%)</title><rect x="106.8" y="453" width="0.3" height="15.0" fill="rgb(225,92,22)" rx="2" ry="2" />
+<text  x="109.77" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::UlDciLteControlMessage::UlDciLteControlMessage (388,309 samples, 0.04%)</title><rect x="288.1" y="421" width="0.3" height="15.0" fill="rgb(206,8,1)" rx="2" ry="2" />
+<text  x="291.08" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::VendorSpecificListElement_s* std::__do_uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::VendorSpecificListElement_s const*, std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt; &gt;, ns3::VendorSpecificListElement_s*&gt; (156,843 samples, 0.02%)</title><rect x="228.7" y="389" width="0.2" height="15.0" fill="rgb(219,66,15)" rx="2" ry="2" />
+<text  x="231.73" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Bit_iterator::operator* (166,567 samples, 0.02%)</title><rect x="234.5" y="485" width="0.2" height="15.0" fill="rgb(219,65,15)" rx="2" ry="2" />
+<text  x="237.54" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::BsrLteControlMessage&gt;::operator (142,163 samples, 0.01%)</title><rect x="689.1" y="501" width="0.1" height="15.0" fill="rgb(210,26,6)" rx="2" ry="2" />
+<text  x="692.06" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Function_base::_Base_manager&lt;void  (405,896 samples, 0.04%)</title><rect x="517.5" y="405" width="0.3" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="520.49" y="415.5" ></text>
+</g>
+<g >
+<title>operator new (239,912 samples, 0.02%)</title><rect x="404.3" y="389" width="0.2" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="407.28" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Bind&lt;void  (1,111,745 samples, 0.11%)</title><rect x="42.4" y="645" width="0.9" height="15.0" fill="rgb(253,221,52)" rx="2" ry="2" />
+<text  x="45.42" y="655.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned int, std::allocator&lt;unsigned int&gt; &gt;::_S_check_init_len (571,492 samples, 0.06%)</title><rect x="696.4" y="485" width="0.5" height="15.0" fill="rgb(223,85,20)" rx="2" ry="2" />
+<text  x="699.44" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt;::operator* (248,472 samples, 0.03%)</title><rect x="567.5" y="293" width="0.2" height="15.0" fill="rgb(243,177,42)" rx="2" ry="2" />
+<text  x="570.46" y="303.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, double&gt; &gt;::_M_valptr (567,548 samples, 0.06%)</title><rect x="295.3" y="469" width="0.4" height="15.0" fill="rgb(254,229,54)" rx="2" ry="2" />
+<text  x="298.25" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;::operator-- (195,924 samples, 0.02%)</title><rect x="662.4" y="389" width="0.2" height="15.0" fill="rgb(223,86,20)" rx="2" ry="2" />
+<text  x="665.45" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_M_create_storage (507,018 samples, 0.05%)</title><rect x="325.4" y="437" width="0.4" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="328.35" y="447.5" ></text>
+</g>
+<g >
+<title>int* std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;int const*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt;, int*&gt; (468,442 samples, 0.05%)</title><rect x="573.9" y="277" width="0.4" height="15.0" fill="rgb(229,111,26)" rx="2" ry="2" />
+<text  x="576.94" y="287.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;unsigned char&gt;::deallocate (194,524 samples, 0.02%)</title><rect x="216.5" y="405" width="0.1" height="15.0" fill="rgb(209,19,4)" rx="2" ry="2" />
+<text  x="219.49" y="415.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;bool, std::allocator&lt;bool&gt; &gt;::operator= (842,802 samples, 0.09%)</title><rect x="195.8" y="485" width="0.7" height="15.0" fill="rgb(217,57,13)" rx="2" ry="2" />
+<text  x="198.83" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt;::~vector (629,475 samples, 0.06%)</title><rect x="24.8" y="325" width="0.6" height="15.0" fill="rgb(254,227,54)" rx="2" ry="2" />
+<text  x="27.85" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::LteMacSapUser::TxOpportunityParameters::TxOpportunityParameters (163,135 samples, 0.02%)</title><rect x="536.4" y="325" width="0.1" height="15.0" fill="rgb(213,39,9)" rx="2" ry="2" />
+<text  x="539.35" y="335.5" ></text>
+</g>
+<g >
+<title>std::_List_const_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;::operator* (275,268 samples, 0.03%)</title><rect x="733.7" y="437" width="0.2" height="15.0" fill="rgb(254,229,54)" rx="2" ry="2" />
+<text  x="736.69" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::lower_bound (238,325 samples, 0.02%)</title><rect x="332.8" y="469" width="0.2" height="15.0" fill="rgb(234,137,32)" rx="2" ry="2" />
+<text  x="335.80" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue const&gt;::Ptr&lt;ns3::SpectrumValue&gt; (235,951 samples, 0.02%)</title><rect x="324.5" y="501" width="0.2" height="15.0" fill="rgb(249,202,48)" rx="2" ry="2" />
+<text  x="327.51" y="511.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::map (263,384 samples, 0.03%)</title><rect x="657.3" y="517" width="0.2" height="15.0" fill="rgb(242,171,40)" rx="2" ry="2" />
+<text  x="660.28" y="527.5" ></text>
+</g>
+<g >
+<title>void std::fill&lt;unsigned short*, unsigned short&gt; (157,918 samples, 0.02%)</title><rect x="253.6" y="453" width="0.2" height="15.0" fill="rgb(210,24,5)" rx="2" ry="2" />
+<text  x="256.65" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumModel const&gt;::Acquire (223,430 samples, 0.02%)</title><rect x="411.6" y="485" width="0.2" height="15.0" fill="rgb(222,80,19)" rx="2" ry="2" />
+<text  x="414.65" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::BuildDataListElement_s, std::allocator&lt;ns3::BuildDataListElement_s&gt; &gt;::_Vector_impl_data::_Vector_impl_data (199,981 samples, 0.02%)</title><rect x="174.3" y="421" width="0.2" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="177.34" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::NixVector&gt;::Acquire (191,450 samples, 0.02%)</title><rect x="625.2" y="469" width="0.1" height="15.0" fill="rgb(238,156,37)" rx="2" ry="2" />
+<text  x="628.19" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::resize (343,043 samples, 0.04%)</title><rect x="106.1" y="469" width="0.3" height="15.0" fill="rgb(227,101,24)" rx="2" ry="2" />
+<text  x="109.10" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::TagBuffer::ReadU8 (154,581 samples, 0.02%)</title><rect x="436.7" y="165" width="0.1" height="15.0" fill="rgb(242,174,41)" rx="2" ry="2" />
+<text  x="439.68" y="175.5" ></text>
+</g>
+<g >
+<title>std::_List_const_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;::operator* (644,591 samples, 0.07%)</title><rect x="500.2" y="517" width="0.5" height="15.0" fill="rgb(254,229,54)" rx="2" ry="2" />
+<text  x="503.16" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::BsrLteControlMessage&gt; ns3::Create&lt;ns3::BsrLteControlMessage&gt; (556,282 samples, 0.06%)</title><rect x="688.6" y="501" width="0.5" height="15.0" fill="rgb(220,69,16)" rx="2" ry="2" />
+<text  x="691.62" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::BuildDataListElement_s::BuildDataListElement_s (189,091 samples, 0.02%)</title><rect x="100.8" y="405" width="0.2" height="15.0" fill="rgb(229,111,26)" rx="2" ry="2" />
+<text  x="103.84" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt; &gt;::_M_mbegin (398,471 samples, 0.04%)</title><rect x="180.0" y="421" width="0.3" height="15.0" fill="rgb(239,159,38)" rx="2" ry="2" />
+<text  x="182.95" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteEnbPhy&gt;::Ptr (308,737 samples, 0.03%)</title><rect x="469.1" y="405" width="0.3" height="15.0" fill="rgb(254,225,53)" rx="2" ry="2" />
+<text  x="472.13" y="415.5" ></text>
+</g>
+<g >
+<title>void std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_M_construct_node&lt;std::pair&lt;int const, double&gt; const&amp;&gt; (205,403 samples, 0.02%)</title><rect x="59.7" y="389" width="0.1" height="15.0" fill="rgb(210,23,5)" rx="2" ry="2" />
+<text  x="62.68" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt;::_Vector_impl::_Vector_impl (165,586 samples, 0.02%)</title><rect x="420.9" y="277" width="0.1" height="15.0" fill="rgb(229,112,26)" rx="2" ry="2" />
+<text  x="423.86" y="287.5" ></text>
+</g>
+<g >
+<title>std::less&lt;ns3::Scheduler::EventKey&gt;::operator (529,361 samples, 0.05%)</title><rect x="663.9" y="389" width="0.4" height="15.0" fill="rgb(234,137,32)" rx="2" ry="2" />
+<text  x="666.92" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteControlMessage&gt;::Acquire (234,941 samples, 0.02%)</title><rect x="149.6" y="309" width="0.2" height="15.0" fill="rgb(212,36,8)" rx="2" ry="2" />
+<text  x="152.59" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue&gt;::operator= (291,061 samples, 0.03%)</title><rect x="78.8" y="517" width="0.3" height="15.0" fill="rgb(220,71,17)" rx="2" ry="2" />
+<text  x="81.83" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, double&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, double&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, double&gt; &gt; &gt;::_M_end (151,821 samples, 0.02%)</title><rect x="294.8" y="501" width="0.2" height="15.0" fill="rgb(239,157,37)" rx="2" ry="2" />
+<text  x="297.85" y="511.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::_M_check_len (563,247 samples, 0.06%)</title><rect x="219.2" y="437" width="0.5" height="15.0" fill="rgb(234,133,31)" rx="2" ry="2" />
+<text  x="222.21" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumValueHelper::GetSpectrumModel (2,320,104 samples, 0.24%)</title><rect x="674.7" y="501" width="1.9" height="15.0" fill="rgb(207,12,3)" rx="2" ry="2" />
+<text  x="677.71" y="511.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; (307,652 samples, 0.03%)</title><rect x="114.0" y="357" width="0.3" height="15.0" fill="rgb(212,35,8)" rx="2" ry="2" />
+<text  x="117.02" y="367.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt; &gt;::_M_ptr (234,295 samples, 0.02%)</title><rect x="157.0" y="373" width="0.2" height="15.0" fill="rgb(207,9,2)" rx="2" ry="2" />
+<text  x="160.02" y="383.5" ></text>
+</g>
+<g >
+<title>std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;* std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_create_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;&amp;&gt; (498,015 samples, 0.05%)</title><rect x="721.7" y="437" width="0.4" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="724.75" y="447.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_M_check_len (747,839 samples, 0.08%)</title><rect x="597.2" y="245" width="0.6" height="15.0" fill="rgb(220,70,16)" rx="2" ry="2" />
+<text  x="600.15" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::Angles::CheckIfValid (149,412 samples, 0.02%)</title><rect x="642.2" y="469" width="0.1" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="645.17" y="479.5" ></text>
+</g>
+<g >
+<title>void  (325,947 samples, 0.03%)</title><rect x="517.5" y="389" width="0.3" height="15.0" fill="rgb(253,221,53)" rx="2" ry="2" />
+<text  x="520.55" y="399.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::_M_init (154,782 samples, 0.02%)</title><rect x="164.5" y="357" width="0.1" height="15.0" fill="rgb(253,222,53)" rx="2" ry="2" />
+<text  x="167.51" y="367.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_M_deallocate (149,822 samples, 0.02%)</title><rect x="139.4" y="421" width="0.1" height="15.0" fill="rgb(208,14,3)" rx="2" ry="2" />
+<text  x="142.35" y="431.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;is_invocable_r_v&lt;void, std::_Bind&lt;void  (22,443,594 samples, 2.31%)</title><rect x="17.2" y="693" width="18.0" height="15.0" fill="rgb(243,178,42)" rx="2" ry="2" />
+<text  x="20.17" y="703.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned short const, unsigned char&gt; &gt;::_Rb_tree_iterator (238,804 samples, 0.02%)</title><rect x="194.0" y="453" width="0.2" height="15.0" fill="rgb(224,87,20)" rx="2" ry="2" />
+<text  x="196.98" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue&gt; ns3::Create&lt;ns3::SpectrumValue, ns3::Ptr&lt;ns3::SpectrumModel const&gt; const&amp;&gt; (1,704,960 samples, 0.18%)</title><rect x="315.2" y="421" width="1.4" height="15.0" fill="rgb(246,189,45)" rx="2" ry="2" />
+<text  x="318.19" y="431.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;::_M_addr (162,805 samples, 0.02%)</title><rect x="663.6" y="341" width="0.1" height="15.0" fill="rgb(223,85,20)" rx="2" ry="2" />
+<text  x="666.60" y="351.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::LteSpectrumModelId, std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt;, std::_Select1st&lt;std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt; &gt;, std::less&lt;ns3::LteSpectrumModelId&gt;, std::allocator&lt;std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt; &gt; &gt;::find (220,015 samples, 0.02%)</title><rect x="111.4" y="437" width="0.2" height="15.0" fill="rgb(254,226,54)" rx="2" ry="2" />
+<text  x="114.45" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::LteRlcSm::ReportBufferStatus (6,485,597 samples, 0.67%)</title><rect x="24.3" y="421" width="5.2" height="15.0" fill="rgb(224,89,21)" rx="2" ry="2" />
+<text  x="27.28" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt; &gt; &gt;::begin (210,507 samples, 0.02%)</title><rect x="186.2" y="469" width="0.2" height="15.0" fill="rgb(226,100,24)" rx="2" ry="2" />
+<text  x="189.19" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::LteAmc::GetUlTbSizeFromMcs (193,747 samples, 0.02%)</title><rect x="232.1" y="485" width="0.2" height="15.0" fill="rgb(248,198,47)" rx="2" ry="2" />
+<text  x="235.10" y="495.5" ></text>
+</g>
+<g >
+<title>decltype  (2,563,971 samples, 0.26%)</title><rect x="203.3" y="437" width="2.0" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="206.25" y="447.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;is_invocable_r_v&lt;void, ns3::Callback&lt;void, ns3::UlInfoListElement_s&gt;::Callback&lt;void  (2,054,238 samples, 0.21%)</title><rect x="439.3" y="485" width="1.6" height="15.0" fill="rgb(234,133,31)" rx="2" ry="2" />
+<text  x="442.29" y="495.5" ></text>
+</g>
+<g >
+<title>[libc.so.6] (5,321,712 samples, 0.55%)</title><rect x="11.2" y="821" width="4.3" height="15.0" fill="rgb(223,84,20)" rx="2" ry="2" />
+<text  x="14.17" y="831.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::_M_clear (424,329 samples, 0.04%)</title><rect x="612.9" y="453" width="0.3" height="15.0" fill="rgb(217,56,13)" rx="2" ry="2" />
+<text  x="615.88" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_lower_bound (1,465,798 samples, 0.15%)</title><rect x="84.9" y="405" width="1.2" height="15.0" fill="rgb(229,113,27)" rx="2" ry="2" />
+<text  x="87.93" y="415.5" ></text>
+</g>
+<g >
+<title> (126,110 samples, 0.01%)</title><rect x="402.8" y="469" width="0.1" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="405.85" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::GetTypeId (273,306 samples, 0.03%)</title><rect x="163.6" y="421" width="0.2" height="15.0" fill="rgb(216,54,13)" rx="2" ry="2" />
+<text  x="166.58" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::TbId_t, std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::_Select1st&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::find (814,139 samples, 0.08%)</title><rect x="386.6" y="517" width="0.6" height="15.0" fill="rgb(215,50,12)" rx="2" ry="2" />
+<text  x="389.59" y="527.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_insert&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; const&amp;&gt; (564,216 samples, 0.06%)</title><rect x="318.8" y="357" width="0.5" height="15.0" fill="rgb(210,27,6)" rx="2" ry="2" />
+<text  x="321.81" y="367.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::_S_relocate (124,634 samples, 0.01%)</title><rect x="591.4" y="245" width="0.1" height="15.0" fill="rgb(238,154,37)" rx="2" ry="2" />
+<text  x="594.36" y="255.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;ns3::BuildDataListElement_s&gt; &gt;::construct&lt;ns3::BuildDataListElement_s, ns3::BuildDataListElement_s const&amp;&gt; (189,091 samples, 0.02%)</title><rect x="100.8" y="437" width="0.2" height="15.0" fill="rgb(226,98,23)" rx="2" ry="2" />
+<text  x="103.84" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::EventId::~EventId (866,210 samples, 0.09%)</title><rect x="39.4" y="725" width="0.7" height="15.0" fill="rgb(242,170,40)" rx="2" ry="2" />
+<text  x="42.36" y="735.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned char const, ns3::LteUeMac::LcInfo&gt; &gt;::_M_valptr (126,661 samples, 0.01%)</title><rect x="569.1" y="309" width="0.1" height="15.0" fill="rgb(221,77,18)" rx="2" ry="2" />
+<text  x="572.12" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::Buffer::Initialize (535,246 samples, 0.06%)</title><rect x="14.1" y="357" width="0.5" height="15.0" fill="rgb(211,31,7)" rx="2" ry="2" />
+<text  x="17.13" y="367.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;ns3::LteFlowId_t const, ns3::FfMacSchedSapProvider::SchedDlRlcBufferReqParameters&gt; &gt;::operator* (195,770 samples, 0.02%)</title><rect x="177.5" y="469" width="0.1" height="15.0" fill="rgb(243,175,42)" rx="2" ry="2" />
+<text  x="180.45" y="479.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::allocate (313,319 samples, 0.03%)</title><rect x="626.6" y="421" width="0.2" height="15.0" fill="rgb(238,153,36)" rx="2" ry="2" />
+<text  x="629.59" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::LteMacSapUser::ReceivePduParameters::ReceivePduParameters (154,503 samples, 0.02%)</title><rect x="435.1" y="325" width="0.1" height="15.0" fill="rgb(249,204,48)" rx="2" ry="2" />
+<text  x="438.09" y="335.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::operator= (814,123 samples, 0.08%)</title><rect x="346.4" y="517" width="0.6" height="15.0" fill="rgb(251,215,51)" rx="2" ry="2" />
+<text  x="349.38" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::UlInfoListElement_s, std::allocator&lt;ns3::UlInfoListElement_s&gt; &gt;::~_Vector_base (160,392 samples, 0.02%)</title><rect x="134.0" y="485" width="0.2" height="15.0" fill="rgb(242,173,41)" rx="2" ry="2" />
+<text  x="137.03" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::MacCeListElement_s::~MacCeListElement_s (457,826 samples, 0.05%)</title><rect x="688.2" y="501" width="0.4" height="15.0" fill="rgb(209,20,4)" rx="2" ry="2" />
+<text  x="691.25" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::SpectrumConverter&gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::SpectrumConverter&gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::SpectrumConverter&gt; &gt; &gt;::find (738,382 samples, 0.08%)</title><rect x="81.1" y="501" width="0.6" height="15.0" fill="rgb(243,177,42)" rx="2" ry="2" />
+<text  x="84.12" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteCcmMacSapProvider*&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteCcmMacSapProvider*&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteCcmMacSapProvider*&gt; &gt; &gt;::_M_end (200,561 samples, 0.02%)</title><rect x="458.2" y="245" width="0.2" height="15.0" fill="rgb(205,4,1)" rx="2" ry="2" />
+<text  x="461.21" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::~SpectrumValue (392,749 samples, 0.04%)</title><rect x="716.7" y="437" width="0.3" height="15.0" fill="rgb(247,193,46)" rx="2" ry="2" />
+<text  x="719.67" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Time::GetNanoSeconds (191,170 samples, 0.02%)</title><rect x="14.0" y="373" width="0.1" height="15.0" fill="rgb(241,166,39)" rx="2" ry="2" />
+<text  x="16.98" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_Vector_base (194,555 samples, 0.02%)</title><rect x="519.0" y="325" width="0.2" height="15.0" fill="rgb(205,2,0)" rx="2" ry="2" />
+<text  x="522.00" y="335.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::list (368,722 samples, 0.04%)</title><rect x="538.7" y="293" width="0.3" height="15.0" fill="rgb(252,216,51)" rx="2" ry="2" />
+<text  x="541.66" y="303.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;* std::__copy_move_a1&lt;true, std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;*, std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;*&gt; (1,663,604 samples, 0.17%)</title><rect x="290.1" y="469" width="1.3" height="15.0" fill="rgb(252,216,51)" rx="2" ry="2" />
+<text  x="293.06" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::EventImpl&gt;::Ptr (195,822 samples, 0.02%)</title><rect x="305.5" y="469" width="0.2" height="15.0" fill="rgb(239,157,37)" rx="2" ry="2" />
+<text  x="308.50" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::SbMeasResult_s&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::SbMeasResult_s&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::SbMeasResult_s&gt; &gt; &gt;::_M_mbegin (155,977 samples, 0.02%)</title><rect x="185.4" y="437" width="0.2" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="188.43" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::Ptr&lt;ns3::Object&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Object&gt; &gt; &gt;::~_Vector_base (148,451 samples, 0.02%)</title><rect x="635.3" y="293" width="0.1" height="15.0" fill="rgb(221,76,18)" rx="2" ry="2" />
+<text  x="638.25" y="303.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::vector (165,594 samples, 0.02%)</title><rect x="440.5" y="261" width="0.2" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="443.54" y="271.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;::_M_initialize_dispatch&lt;std::_List_const_iterator&lt;ns3::UlDciLteControlMessage&gt; &gt; (3,076,347 samples, 0.32%)</title><rect x="286.4" y="517" width="2.5" height="15.0" fill="rgb(236,145,34)" rx="2" ry="2" />
+<text  x="289.38" y="527.5" ></text>
+</g>
+<g >
+<title>std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;::_M_valptr (234,399 samples, 0.02%)</title><rect x="733.7" y="421" width="0.2" height="15.0" fill="rgb(207,10,2)" rx="2" ry="2" />
+<text  x="736.72" y="431.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::~_List_base (309,041 samples, 0.03%)</title><rect x="775.6" y="373" width="0.3" height="15.0" fill="rgb(221,74,17)" rx="2" ry="2" />
+<text  x="778.63" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned short const, unsigned char&gt; &gt;::operator* (714,872 samples, 0.07%)</title><rect x="184.6" y="485" width="0.6" height="15.0" fill="rgb(234,134,32)" rx="2" ry="2" />
+<text  x="187.60" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;::begin (261,627 samples, 0.03%)</title><rect x="514.5" y="533" width="0.2" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="517.51" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::SpectrumValue (826,746 samples, 0.09%)</title><rect x="718.3" y="469" width="0.6" height="15.0" fill="rgb(211,27,6)" rx="2" ry="2" />
+<text  x="721.26" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::SpectrumValue (332,272 samples, 0.03%)</title><rect x="593.7" y="293" width="0.3" height="15.0" fill="rgb(211,27,6)" rx="2" ry="2" />
+<text  x="596.71" y="303.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::at (377,393 samples, 0.04%)</title><rect x="575.6" y="357" width="0.3" height="15.0" fill="rgb(238,152,36)" rx="2" ry="2" />
+<text  x="578.59" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Object&gt;::Ptr&lt;ns3::AntennaModel&gt; (485,174 samples, 0.05%)</title><rect x="703.9" y="533" width="0.4" height="15.0" fill="rgb(225,96,23)" rx="2" ry="2" />
+<text  x="706.87" y="543.5" ></text>
+</g>
+<g >
+<title>decltype  (398,640 samples, 0.04%)</title><rect x="473.8" y="261" width="0.4" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="476.84" y="271.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt; &gt;::_Rb_tree_impl&lt;std::less&lt;unsigned short&gt;, true&gt;::_Rb_tree_impl (313,901 samples, 0.03%)</title><rect x="509.2" y="517" width="0.2" height="15.0" fill="rgb(239,158,37)" rx="2" ry="2" />
+<text  x="512.15" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::Packet::Packet (1,604,788 samples, 0.17%)</title><rect x="14.1" y="389" width="1.3" height="15.0" fill="rgb(230,115,27)" rx="2" ry="2" />
+<text  x="17.13" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::operator= (1,064,743 samples, 0.11%)</title><rect x="730.4" y="485" width="0.8" height="15.0" fill="rgb(243,177,42)" rx="2" ry="2" />
+<text  x="733.38" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteUeMac::LcInfo&gt; &gt;::operator (151,315 samples, 0.02%)</title><rect x="691.6" y="437" width="0.1" height="15.0" fill="rgb(254,226,54)" rx="2" ry="2" />
+<text  x="694.63" y="447.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; &gt; &gt;::find (2,994,899 samples, 0.31%)</title><rect x="522.5" y="341" width="2.4" height="15.0" fill="rgb(223,83,20)" rx="2" ry="2" />
+<text  x="525.47" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::PacketTagList::~PacketTagList (323,410 samples, 0.03%)</title><rect x="453.6" y="101" width="0.2" height="15.0" fill="rgb(223,87,20)" rx="2" ry="2" />
+<text  x="456.57" y="111.5" ></text>
+</g>
+<g >
+<title>ns3::EnbMacMemberLteEnbPhySapUser::SubframeIndication (415,834 samples, 0.04%)</title><rect x="15.5" y="533" width="0.3" height="15.0" fill="rgb(252,216,51)" rx="2" ry="2" />
+<text  x="18.45" y="543.5" ></text>
+</g>
+<g >
+<title>void std::_Function_base::_Base_manager&lt;std::_Bind&lt;void  (188,902 samples, 0.02%)</title><rect x="109.8" y="469" width="0.2" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="112.84" y="479.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_clear (191,802 samples, 0.02%)</title><rect x="344.3" y="405" width="0.1" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="347.27" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::MemberLteEnbRrcSapUser&lt;ns3::LteEnbRrcProtocolIdeal&gt;::SendSystemInformation (188,903 samples, 0.02%)</title><rect x="400.5" y="549" width="0.1" height="15.0" fill="rgb(215,47,11)" rx="2" ry="2" />
+<text  x="403.49" y="559.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;* std::__copy_move&lt;true, false, std::random_access_iterator_tag&gt;::__copy_m&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;*, std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;*&gt; (148,381 samples, 0.02%)</title><rect x="117.1" y="421" width="0.1" height="15.0" fill="rgb(214,44,10)" rx="2" ry="2" />
+<text  x="120.11" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::ObjectBase::~ObjectBase (189,056 samples, 0.02%)</title><rect x="454.1" y="181" width="0.1" height="15.0" fill="rgb(232,126,30)" rx="2" ry="2" />
+<text  x="457.08" y="191.5" ></text>
+</g>
+<g >
+<title>malloc (168,940 samples, 0.02%)</title><rect x="78.5" y="357" width="0.2" height="15.0" fill="rgb(230,119,28)" rx="2" ry="2" />
+<text  x="81.52" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt; ns3::CompleteConstruct&lt;ns3::PacketBurst&gt; (4,210,057 samples, 0.43%)</title><rect x="447.5" y="293" width="3.4" height="15.0" fill="rgb(212,33,7)" rx="2" ry="2" />
+<text  x="450.48" y="303.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, unsigned int&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt; &gt;::begin (162,137 samples, 0.02%)</title><rect x="234.1" y="453" width="0.1" height="15.0" fill="rgb(218,62,14)" rx="2" ry="2" />
+<text  x="237.06" y="463.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::end (158,022 samples, 0.02%)</title><rect x="464.0" y="517" width="0.2" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="467.03" y="527.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::CeBitmap_e const*, std::vector&lt;ns3::CeBitmap_e, std::allocator&lt;ns3::CeBitmap_e&gt; &gt; &gt;::__normal_iterator (148,109 samples, 0.02%)</title><rect x="204.6" y="373" width="0.1" height="15.0" fill="rgb(230,116,27)" rx="2" ry="2" />
+<text  x="207.55" y="383.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;::_M_move_assign (2,021,899 samples, 0.21%)</title><rect x="350.0" y="405" width="1.7" height="15.0" fill="rgb(215,47,11)" rx="2" ry="2" />
+<text  x="353.05" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue&gt; ns3::Create&lt;ns3::SpectrumValue, ns3::Ptr&lt;ns3::SpectrumModel const&gt; const&amp;&gt; (159,012 samples, 0.02%)</title><rect x="326.9" y="485" width="0.1" height="15.0" fill="rgb(246,189,45)" rx="2" ry="2" />
+<text  x="329.89" y="495.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, std::vector&lt;double, std::allocator&lt;double&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::~map (231,712 samples, 0.02%)</title><rect x="103.9" y="453" width="0.2" height="15.0" fill="rgb(235,140,33)" rx="2" ry="2" />
+<text  x="106.93" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::Ptr&lt;ns3::Object&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Object&gt; &gt; &gt;::_Vector_base (200,921 samples, 0.02%)</title><rect x="538.5" y="261" width="0.2" height="15.0" fill="rgb(235,141,33)" rx="2" ry="2" />
+<text  x="541.50" y="271.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_initialize_dispatch&lt;std::_List_const_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; (1,272,114 samples, 0.13%)</title><rect x="610.8" y="533" width="1.0" height="15.0" fill="rgb(215,50,12)" rx="2" ry="2" />
+<text  x="613.82" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Bind&lt;void  (410,482 samples, 0.04%)</title><rect x="63.2" y="469" width="0.3" height="15.0" fill="rgb(253,221,52)" rx="2" ry="2" />
+<text  x="66.19" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::AttributeConstructionList::~AttributeConstructionList (332,038 samples, 0.03%)</title><rect x="540.1" y="293" width="0.2" height="15.0" fill="rgb(217,58,13)" rx="2" ry="2" />
+<text  x="543.06" y="303.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;::_M_move_assign (148,381 samples, 0.02%)</title><rect x="117.1" y="389" width="0.1" height="15.0" fill="rgb(215,47,11)" rx="2" ry="2" />
+<text  x="120.11" y="399.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::MacCeListElement_s, std::allocator&lt;ns3::MacCeListElement_s&gt; &gt;::at (309,993 samples, 0.03%)</title><rect x="225.8" y="485" width="0.2" height="15.0" fill="rgb(251,212,50)" rx="2" ry="2" />
+<text  x="228.77" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;::_Vector_base (550,304 samples, 0.06%)</title><rect x="350.7" y="373" width="0.5" height="15.0" fill="rgb(247,197,47)" rx="2" ry="2" />
+<text  x="353.74" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt;::_Rb_tree_iterator (124,409 samples, 0.01%)</title><rect x="508.5" y="517" width="0.1" height="15.0" fill="rgb(209,20,4)" rx="2" ry="2" />
+<text  x="511.46" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::TimeStep (329,548 samples, 0.03%)</title><rect x="278.8" y="501" width="0.3" height="15.0" fill="rgb(242,171,41)" rx="2" ry="2" />
+<text  x="281.79" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_Vector_impl_data::_Vector_impl_data (148,226 samples, 0.02%)</title><rect x="125.3" y="213" width="0.2" height="15.0" fill="rgb(251,215,51)" rx="2" ry="2" />
+<text  x="128.35" y="223.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; &gt; &gt;::_M_ptr (155,635 samples, 0.02%)</title><rect x="171.8" y="373" width="0.1" height="15.0" fill="rgb(226,97,23)" rx="2" ry="2" />
+<text  x="174.77" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;* std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_M_clone_node&lt;false, std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_Alloc_node&gt; (347,372 samples, 0.04%)</title><rect x="104.5" y="389" width="0.3" height="15.0" fill="rgb(241,167,40)" rx="2" ry="2" />
+<text  x="107.52" y="399.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt; &gt;::destroy&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; (193,911 samples, 0.02%)</title><rect x="104.0" y="357" width="0.1" height="15.0" fill="rgb(235,141,33)" rx="2" ry="2" />
+<text  x="106.96" y="367.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::SpectrumConverter&gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::SpectrumConverter&gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::SpectrumConverter&gt; &gt; &gt;::_S_key (240,712 samples, 0.02%)</title><rect x="330.8" y="453" width="0.2" height="15.0" fill="rgb(248,199,47)" rx="2" ry="2" />
+<text  x="333.79" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::LteControlMessage, ns3::Empty, ns3::DefaultDeleter&lt;ns3::LteControlMessage&gt; &gt;::SimpleRefCount (152,002 samples, 0.02%)</title><rect x="159.9" y="405" width="0.2" height="15.0" fill="rgb(208,15,3)" rx="2" ry="2" />
+<text  x="162.94" y="415.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;::_M_ptr (204,057 samples, 0.02%)</title><rect x="528.1" y="245" width="0.1" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="531.08" y="255.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;::operator* (791,920 samples, 0.08%)</title><rect x="496.5" y="549" width="0.6" height="15.0" fill="rgb(239,157,37)" rx="2" ry="2" />
+<text  x="499.50" y="559.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::CqiListElement_s, std::allocator&lt;ns3::CqiListElement_s&gt; &gt;::push_back (234,240 samples, 0.02%)</title><rect x="461.6" y="309" width="0.1" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="464.55" y="319.5" ></text>
+</g>
+<g >
+<title>int* std::__uninitialized_copy&lt;true&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;int const*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt;, int*&gt; (833,507 samples, 0.09%)</title><rect x="698.5" y="501" width="0.7" height="15.0" fill="rgb(207,11,2)" rx="2" ry="2" />
+<text  x="701.48" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Head_base&lt;1ul, double const&amp;, false&gt;::_M_head (200,778 samples, 0.02%)</title><rect x="748.3" y="421" width="0.1" height="15.0" fill="rgb(250,208,49)" rx="2" ry="2" />
+<text  x="751.28" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::operator* (1,238,991 samples, 0.13%)</title><rect x="407.3" y="517" width="1.0" height="15.0" fill="rgb(251,212,50)" rx="2" ry="2" />
+<text  x="410.31" y="527.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::vector (344,519 samples, 0.04%)</title><rect x="592.8" y="245" width="0.2" height="15.0" fill="rgb(206,9,2)" rx="2" ry="2" />
+<text  x="595.76" y="255.5" ></text>
+</g>
+<g >
+<title>double* std::__copy_move_a1&lt;false, double const*, double*&gt; (200,338 samples, 0.02%)</title><rect x="238.8" y="197" width="0.2" height="15.0" fill="rgb(239,156,37)" rx="2" ry="2" />
+<text  x="241.83" y="207.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;unsigned short&gt; &gt;::allocate (378,466 samples, 0.04%)</title><rect x="218.8" y="421" width="0.3" height="15.0" fill="rgb(250,209,50)" rx="2" ry="2" />
+<text  x="221.77" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::MatrixArray&lt;std::complex&lt;double&gt; &gt; const&gt;::Acquire (192,272 samples, 0.02%)</title><rect x="314.6" y="421" width="0.2" height="15.0" fill="rgb(234,134,32)" rx="2" ry="2" />
+<text  x="317.64" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue const&gt;::Ptr (396,945 samples, 0.04%)</title><rect x="737.4" y="533" width="0.3" height="15.0" fill="rgb(254,229,54)" rx="2" ry="2" />
+<text  x="740.39" y="543.5" ></text>
+</g>
+<g >
+<title>void std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_construct_node&lt;std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (405,977 samples, 0.04%)</title><rect x="83.2" y="373" width="0.3" height="15.0" fill="rgb(231,122,29)" rx="2" ry="2" />
+<text  x="86.21" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::LtePhy::GetControlMessages[abi:cxx11] (5,327,384 samples, 0.55%)</title><rect x="354.4" y="549" width="4.3" height="15.0" fill="rgb(250,208,49)" rx="2" ry="2" />
+<text  x="357.43" y="559.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumModel const&gt;::operator= (252,993 samples, 0.03%)</title><rect x="604.1" y="309" width="0.2" height="15.0" fill="rgb(232,124,29)" rx="2" ry="2" />
+<text  x="607.07" y="319.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::operator= (127,305 samples, 0.01%)</title><rect x="593.2" y="261" width="0.1" height="15.0" fill="rgb(211,28,6)" rx="2" ry="2" />
+<text  x="596.21" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::DlInfoListElement_s (152,454 samples, 0.02%)</title><rect x="456.7" y="261" width="0.1" height="15.0" fill="rgb(231,119,28)" rx="2" ry="2" />
+<text  x="459.65" y="271.5" ></text>
+</g>
+<g >
+<title>void ns3::Callback&lt;void, std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt;::Callback&lt;void  (74,700,874 samples, 7.70%)</title><rect x="516.5" y="453" width="60.1" height="15.0" fill="rgb(234,135,32)" rx="2" ry="2" />
+<text  x="519.51" y="463.5" >void n..</text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::~_List_base (343,413 samples, 0.04%)</title><rect x="654.2" y="421" width="0.2" height="15.0" fill="rgb(221,74,17)" rx="2" ry="2" />
+<text  x="657.16" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt;::Ptr (203,782 samples, 0.02%)</title><rect x="750.3" y="565" width="0.1" height="15.0" fill="rgb(219,67,16)" rx="2" ry="2" />
+<text  x="753.27" y="575.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::AttributeConstructionList::Item, std::allocator&lt;ns3::AttributeConstructionList::Item&gt; &gt;::_List_impl::_List_impl (374,981 samples, 0.04%)</title><rect x="162.5" y="373" width="0.3" height="15.0" fill="rgb(210,27,6)" rx="2" ry="2" />
+<text  x="165.45" y="383.5" ></text>
+</g>
+<g >
+<title>unsigned long* std::copy&lt;unsigned long*, unsigned long*&gt; (260,141 samples, 0.03%)</title><rect x="248.3" y="421" width="0.2" height="15.0" fill="rgb(236,144,34)" rx="2" ry="2" />
+<text  x="251.30" y="431.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::map (719,320 samples, 0.07%)</title><rect x="668.3" y="501" width="0.6" height="15.0" fill="rgb(242,171,40)" rx="2" ry="2" />
+<text  x="671.32" y="511.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::DlInfoListElement_s::HarqStatus_e*, ns3::DlInfoListElement_s::HarqStatus_e&gt; (305,928 samples, 0.03%)</title><rect x="256.7" y="373" width="0.2" height="15.0" fill="rgb(249,204,48)" rx="2" ry="2" />
+<text  x="259.69" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;int const, double&gt; &gt;* std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_M_create_node&lt;std::pair&lt;int, double&gt; &gt; (461,183 samples, 0.05%)</title><rect x="293.1" y="469" width="0.4" height="15.0" fill="rgb(206,5,1)" rx="2" ry="2" />
+<text  x="296.13" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::MacCeListElement_s, std::allocator&lt;ns3::MacCeListElement_s&gt; &gt;::_M_erase_at_end (796,900 samples, 0.08%)</title><rect x="264.8" y="485" width="0.6" height="15.0" fill="rgb(229,111,26)" rx="2" ry="2" />
+<text  x="267.80" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;* std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_copy&lt;false, std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_Alloc_node&gt; (878,011 samples, 0.09%)</title><rect x="341.6" y="437" width="0.7" height="15.0" fill="rgb(251,212,50)" rx="2" ry="2" />
+<text  x="344.64" y="447.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;::_M_ptr (461,464 samples, 0.05%)</title><rect x="759.8" y="661" width="0.4" height="15.0" fill="rgb(219,66,15)" rx="2" ry="2" />
+<text  x="762.84" y="671.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;* std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_copy&lt;false, std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_Alloc_node&gt; (688,048 samples, 0.07%)</title><rect x="341.8" y="421" width="0.5" height="15.0" fill="rgb(251,212,50)" rx="2" ry="2" />
+<text  x="344.79" y="431.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt;::at (152,411 samples, 0.02%)</title><rect x="173.6" y="453" width="0.1" height="15.0" fill="rgb(208,14,3)" rx="2" ry="2" />
+<text  x="176.56" y="463.5" ></text>
+</g>
+<g >
+<title>double std::reduce&lt;__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, double, std::plus&lt;void&gt; &gt; (650,475 samples, 0.07%)</title><rect x="602.3" y="309" width="0.5" height="15.0" fill="rgb(221,77,18)" rx="2" ry="2" />
+<text  x="605.31" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultDeleter&lt;ns3::SpectrumValue&gt;::Delete (189,290 samples, 0.02%)</title><rect x="112.2" y="453" width="0.2" height="15.0" fill="rgb(222,79,19)" rx="2" ry="2" />
+<text  x="115.24" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::SbMeasResult_s&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::SbMeasResult_s&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::SbMeasResult_s&gt; &gt; &gt;::find (231,252 samples, 0.02%)</title><rect x="94.1" y="453" width="0.2" height="15.0" fill="rgb(219,65,15)" rx="2" ry="2" />
+<text  x="97.09" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::Begin (649,187 samples, 0.07%)</title><rect x="491.3" y="549" width="0.5" height="15.0" fill="rgb(212,32,7)" rx="2" ry="2" />
+<text  x="494.27" y="559.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; std::_Rb_tree&lt;ns3::TbId_t, std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::_Select1st&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::_M_emplace_hint_unique&lt;std::pair&lt;ns3::TbId_t, ns3::tbInfo_t&gt; &gt; (2,868,330 samples, 0.30%)</title><rect x="526.4" y="309" width="2.3" height="15.0" fill="rgb(216,50,12)" rx="2" ry="2" />
+<text  x="529.36" y="319.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::vector (302,989 samples, 0.03%)</title><rect x="203.5" y="389" width="0.2" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="206.48" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt; &gt;::operator (234,452 samples, 0.02%)</title><rect x="297.6" y="469" width="0.2" height="15.0" fill="rgb(214,43,10)" rx="2" ry="2" />
+<text  x="300.59" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Bvector_base&lt;std::allocator&lt;bool&gt; &gt;::_Bvector_impl_data::_M_reset (153,274 samples, 0.02%)</title><rect x="196.3" y="437" width="0.1" height="15.0" fill="rgb(233,129,31)" rx="2" ry="2" />
+<text  x="199.26" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::LteSpectrumModelId, std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt;, std::_Select1st&lt;std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt; &gt;, std::less&lt;ns3::LteSpectrumModelId&gt;, std::allocator&lt;std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt; &gt; &gt;::_S_key (418,561 samples, 0.04%)</title><rect x="298.2" y="421" width="0.3" height="15.0" fill="rgb(209,19,4)" rx="2" ry="2" />
+<text  x="301.19" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter&gt;::GetReferenceCount (169,529 samples, 0.02%)</title><rect x="450.5" y="245" width="0.2" height="15.0" fill="rgb(218,61,14)" rx="2" ry="2" />
+<text  x="453.55" y="255.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;int const, double&gt; &gt; &gt;::allocate (199,176 samples, 0.02%)</title><rect x="293.2" y="421" width="0.1" height="15.0" fill="rgb(226,97,23)" rx="2" ry="2" />
+<text  x="296.16" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Any_data::_M_access (231,298 samples, 0.02%)</title><rect x="43.1" y="629" width="0.2" height="15.0" fill="rgb(219,68,16)" rx="2" ry="2" />
+<text  x="46.13" y="639.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::MacCeListElement_s*, std::vector&lt;ns3::MacCeListElement_s, std::allocator&lt;ns3::MacCeListElement_s&gt; &gt; &gt; std::vector&lt;ns3::MacCeListElement_s, std::allocator&lt;ns3::MacCeListElement_s&gt; &gt;::insert&lt;__gnu_cxx::__normal_iterator&lt;ns3::MacCeListElement_s*, std::vector&lt;ns3::MacCeListElement_s, std::allocator&lt;ns3::MacCeListElement_s&gt; &gt; &gt;, void&gt; (2,564,176 samples, 0.26%)</title><rect x="128.3" y="517" width="2.1" height="15.0" fill="rgb(223,85,20)" rx="2" ry="2" />
+<text  x="131.32" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultSimulatorImpl::Schedule (1,482,842 samples, 0.15%)</title><rect x="108.3" y="501" width="1.2" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="111.32" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter&gt;::Unref (8,236,952 samples, 0.85%)</title><rect x="544.5" y="309" width="6.6" height="15.0" fill="rgb(221,78,18)" rx="2" ry="2" />
+<text  x="547.49" y="319.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::AttributeConstructionList::Item, std::allocator&lt;ns3::AttributeConstructionList::Item&gt; &gt;::~_List_base (248,847 samples, 0.03%)</title><rect x="540.1" y="261" width="0.2" height="15.0" fill="rgb(237,148,35)" rx="2" ry="2" />
+<text  x="543.13" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::Node::GetId (131,119 samples, 0.01%)</title><rect x="651.3" y="517" width="0.1" height="15.0" fill="rgb(234,135,32)" rx="2" ry="2" />
+<text  x="654.29" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::EventImpl::Invoke (2,105,662 samples, 0.22%)</title><rect x="15.5" y="725" width="1.6" height="15.0" fill="rgb(209,20,4)" rx="2" ry="2" />
+<text  x="18.45" y="735.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt; &gt; &gt;::_M_mbegin (194,122 samples, 0.02%)</title><rect x="169.8" y="405" width="0.2" height="15.0" fill="rgb(213,39,9)" rx="2" ry="2" />
+<text  x="172.80" y="415.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;is_invocable_r_v&lt;void, void  (73,085,767 samples, 7.54%)</title><rect x="517.8" y="405" width="58.8" height="15.0" fill="rgb(243,178,42)" rx="2" ry="2" />
+<text  x="520.81" y="415.5" >std::e..</text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::max_size (128,242 samples, 0.01%)</title><rect x="590.7" y="213" width="0.1" height="15.0" fill="rgb(242,171,41)" rx="2" ry="2" />
+<text  x="593.71" y="223.5" ></text>
+</g>
+<g >
+<title>ns3::ByteTagList::Add (831,259 samples, 0.09%)</title><rect x="13.1" y="389" width="0.7" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="16.10" y="399.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_insert&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; const&amp;&gt; (1,452,841 samples, 0.15%)</title><rect x="499.0" y="501" width="1.2" height="15.0" fill="rgb(210,27,6)" rx="2" ry="2" />
+<text  x="501.99" y="511.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_initialize_dispatch&lt;std::_List_const_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; (1,343,666 samples, 0.14%)</title><rect x="355.2" y="517" width="1.1" height="15.0" fill="rgb(215,50,12)" rx="2" ry="2" />
+<text  x="358.17" y="527.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; const*, std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt; &gt;::difference_type __gnu_cxx::operator-&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; const*, std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt; &gt; (346,160 samples, 0.04%)</title><rect x="356.5" y="517" width="0.3" height="15.0" fill="rgb(252,220,52)" rx="2" ry="2" />
+<text  x="359.54" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;2ul, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::_Tuple_impl (552,616 samples, 0.06%)</title><rect x="667.5" y="357" width="0.5" height="15.0" fill="rgb(231,121,29)" rx="2" ry="2" />
+<text  x="670.51" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt;::operator= (229,336 samples, 0.02%)</title><rect x="96.9" y="437" width="0.2" height="15.0" fill="rgb(219,65,15)" rx="2" ry="2" />
+<text  x="99.94" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;* std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_M_copy&lt;false, std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_Alloc_node&gt; (425,223 samples, 0.04%)</title><rect x="104.5" y="421" width="0.3" height="15.0" fill="rgb(236,146,34)" rx="2" ry="2" />
+<text  x="107.45" y="431.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::FfMacSchedSapProvider::SchedUlCqiInfoReqParameters, std::allocator&lt;ns3::FfMacSchedSapProvider::SchedUlCqiInfoReqParameters&gt; &gt;::clear (1,175,215 samples, 0.12%)</title><rect x="263.1" y="517" width="1.0" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="266.12" y="527.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;unsigned short*&gt; (155,477 samples, 0.02%)</title><rect x="473.1" y="245" width="0.2" height="15.0" fill="rgb(237,148,35)" rx="2" ry="2" />
+<text  x="476.13" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::MapScheduler::Insert (1,924,172 samples, 0.20%)</title><rect x="706.3" y="469" width="1.5" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="709.29" y="479.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt;::allocate (145,308 samples, 0.01%)</title><rect x="261.1" y="293" width="0.1" height="15.0" fill="rgb(209,19,4)" rx="2" ry="2" />
+<text  x="264.05" y="303.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Callback&lt;void, ns3::Ptr&lt;ns3::SpectrumPhy const&gt;, ns3::Ptr&lt;ns3::SpectrumPhy const&gt;, double&gt;, std::allocator&lt;ns3::Callback&lt;void, ns3::Ptr&lt;ns3::SpectrumPhy const&gt;, ns3::Ptr&lt;ns3::SpectrumPhy const&gt;, double&gt; &gt; &gt;::end (161,602 samples, 0.02%)</title><rect x="746.7" y="533" width="0.1" height="15.0" fill="rgb(229,113,27)" rx="2" ry="2" />
+<text  x="749.70" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::MultiModelSpectrumChannel::FindAndEventuallyAddTxSpectrumModel (2,239,555 samples, 0.23%)</title><rect x="649.5" y="517" width="1.8" height="15.0" fill="rgb(212,32,7)" rx="2" ry="2" />
+<text  x="652.49" y="527.5" ></text>
+</g>
+<g >
+<title>unsigned short* std::__copy_move_a1&lt;true, unsigned short*, unsigned short*&gt; (140,404 samples, 0.01%)</title><rect x="253.5" y="357" width="0.1" height="15.0" fill="rgb(237,147,35)" rx="2" ry="2" />
+<text  x="256.47" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::~SpectrumValue (431,105 samples, 0.04%)</title><rect x="409.2" y="533" width="0.3" height="15.0" fill="rgb(247,193,46)" rx="2" ry="2" />
+<text  x="412.18" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Bit_iterator std::__copy_move_a&lt;false, std::_Bit_iterator, std::_Bit_iterator&gt; (749,593 samples, 0.08%)</title><rect x="197.4" y="421" width="0.6" height="15.0" fill="rgb(247,193,46)" rx="2" ry="2" />
+<text  x="200.38" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::ConstantPositionMobilityModel::DoGetPosition (233,482 samples, 0.02%)</title><rect x="319.8" y="485" width="0.2" height="15.0" fill="rgb(212,32,7)" rx="2" ry="2" />
+<text  x="322.82" y="495.5" ></text>
+</g>
+<g >
+<title>std::_List_iterator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt;::_List_iterator (155,009 samples, 0.02%)</title><rect x="165.5" y="341" width="0.1" height="15.0" fill="rgb(231,119,28)" rx="2" ry="2" />
+<text  x="168.51" y="351.5" ></text>
+</g>
+<g >
+<title>__dynamic_cast (157,542 samples, 0.02%)</title><rect x="735.1" y="517" width="0.1" height="15.0" fill="rgb(227,102,24)" rx="2" ry="2" />
+<text  x="738.07" y="527.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__enable_if&lt;std::__is_scalar&lt;double&gt;::__value, void&gt;::__type std::__fill_a1&lt;double*, double&gt; (229,101 samples, 0.02%)</title><rect x="301.6" y="325" width="0.1" height="15.0" fill="rgb(237,149,35)" rx="2" ry="2" />
+<text  x="304.55" y="335.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::splice (416,066 samples, 0.04%)</title><rect x="346.6" y="469" width="0.4" height="15.0" fill="rgb(220,70,16)" rx="2" ry="2" />
+<text  x="349.64" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::LogComponent::IsEnabled (147,616 samples, 0.02%)</title><rect x="34.3" y="389" width="0.1" height="15.0" fill="rgb(214,43,10)" rx="2" ry="2" />
+<text  x="37.30" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::HarqStatus_e* std::copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::DlInfoListElement_s::HarqStatus_e const*, std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt; &gt;, ns3::DlInfoListElement_s::HarqStatus_e*&gt; (234,294 samples, 0.02%)</title><rect x="510.0" y="453" width="0.2" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="512.98" y="463.5" ></text>
+</g>
+<g >
+<title>std::__detail::_List_node_header::_List_node_header (627,016 samples, 0.06%)</title><rect x="539.6" y="229" width="0.5" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="542.55" y="239.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt;::_M_allocate (311,673 samples, 0.03%)</title><rect x="210.8" y="453" width="0.3" height="15.0" fill="rgb(215,47,11)" rx="2" ry="2" />
+<text  x="213.83" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::operator= (872,797 samples, 0.09%)</title><rect x="482.4" y="325" width="0.7" height="15.0" fill="rgb(243,177,42)" rx="2" ry="2" />
+<text  x="485.35" y="335.5" ></text>
+</g>
+<g >
+<title>double* std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, double*&gt; (433,103 samples, 0.04%)</title><rect x="325.0" y="389" width="0.3" height="15.0" fill="rgb(210,23,5)" rx="2" ry="2" />
+<text  x="327.97" y="399.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::Callback&lt;void, ns3::SpectrumValue const&amp;&gt;*, std::vector&lt;ns3::Callback&lt;void, ns3::SpectrumValue const&amp;&gt;, std::allocator&lt;ns3::Callback&lt;void, ns3::SpectrumValue const&amp;&gt; &gt; &gt; &gt;::operator* (125,378 samples, 0.01%)</title><rect x="576.9" y="517" width="0.1" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="579.86" y="527.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_S_max_size (166,200 samples, 0.02%)</title><rect x="597.5" y="213" width="0.1" height="15.0" fill="rgb(219,65,15)" rx="2" ry="2" />
+<text  x="600.46" y="223.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_M_check_len (802,727 samples, 0.08%)</title><rect x="693.4" y="453" width="0.6" height="15.0" fill="rgb(220,70,16)" rx="2" ry="2" />
+<text  x="696.39" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultSimulatorImpl::Now (234,121 samples, 0.02%)</title><rect x="408.6" y="501" width="0.2" height="15.0" fill="rgb(213,40,9)" rx="2" ry="2" />
+<text  x="411.63" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::~_Vector_base (233,971 samples, 0.02%)</title><rect x="483.9" y="485" width="0.2" height="15.0" fill="rgb(223,86,20)" rx="2" ry="2" />
+<text  x="486.91" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt;::_Vector_impl::_Vector_impl (396,334 samples, 0.04%)</title><rect x="261.2" y="357" width="0.3" height="15.0" fill="rgb(229,112,26)" rx="2" ry="2" />
+<text  x="264.17" y="367.5" ></text>
+</g>
+<g >
+<title>std::_Bind&lt;void  (495,402 samples, 0.05%)</title><rect x="340.8" y="405" width="0.4" height="15.0" fill="rgb(253,221,52)" rx="2" ry="2" />
+<text  x="343.78" y="415.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;std::_List_node&lt;ns3::UlDciLteControlMessage&gt; &gt; &gt;::deallocate (278,972 samples, 0.03%)</title><rect x="291.0" y="341" width="0.2" height="15.0" fill="rgb(221,74,17)" rx="2" ry="2" />
+<text  x="293.95" y="351.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::Ptr&lt;ns3::UeManager&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::Ptr&lt;ns3::UeManager&gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::Ptr&lt;ns3::UeManager&gt; &gt; &gt; &gt;::_M_end (344,004 samples, 0.04%)</title><rect x="28.4" y="309" width="0.3" height="15.0" fill="rgb(208,15,3)" rx="2" ry="2" />
+<text  x="31.38" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleUeComponentCarrierManager::DoReceivePdu (2,187,838 samples, 0.23%)</title><rect x="435.7" y="309" width="1.8" height="15.0" fill="rgb(213,40,9)" rx="2" ry="2" />
+<text  x="438.71" y="319.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Buffer::Data*, std::allocator&lt;ns3::Buffer::Data*&gt; &gt;::push_back (465,302 samples, 0.05%)</title><rect x="546.0" y="85" width="0.4" height="15.0" fill="rgb(234,137,32)" rx="2" ry="2" />
+<text  x="549.01" y="95.5" ></text>
+</g>
+<g >
+<title>ns3::Packet::Copy (174,202 samples, 0.02%)</title><rect x="644.7" y="453" width="0.1" height="15.0" fill="rgb(250,211,50)" rx="2" ry="2" />
+<text  x="647.66" y="463.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt;::construct&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; const&amp;&gt; (2,568,842 samples, 0.26%)</title><rect x="352.4" y="517" width="2.0" height="15.0" fill="rgb(221,77,18)" rx="2" ry="2" />
+<text  x="355.36" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Head_base&lt;1ul, ns3::Ptr&lt;ns3::PacketBurst&gt;, false&gt;::~_Head_base (267,500 samples, 0.03%)</title><rect x="281.4" y="437" width="0.2" height="15.0" fill="rgb(207,9,2)" rx="2" ry="2" />
+<text  x="284.38" y="447.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, unsigned char*, unsigned char&gt; (662,282 samples, 0.07%)</title><rect x="126.8" y="373" width="0.5" height="15.0" fill="rgb(226,96,23)" rx="2" ry="2" />
+<text  x="129.80" y="383.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_put_node (124,394 samples, 0.01%)</title><rect x="776.2" y="341" width="0.1" height="15.0" fill="rgb(235,141,33)" rx="2" ry="2" />
+<text  x="779.16" y="351.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;is_invocable_r_v&lt;void, void  (1,098,325 samples, 0.11%)</title><rect x="440.1" y="405" width="0.8" height="15.0" fill="rgb(243,178,42)" rx="2" ry="2" />
+<text  x="443.05" y="415.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned short const, unsigned char&gt; &gt;::_M_ptr (154,865 samples, 0.02%)</title><rect x="245.0" y="405" width="0.2" height="15.0" fill="rgb(219,68,16)" rx="2" ry="2" />
+<text  x="248.03" y="415.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::operator= (879,906 samples, 0.09%)</title><rect x="621.8" y="421" width="0.7" height="15.0" fill="rgb(251,215,51)" rx="2" ry="2" />
+<text  x="624.76" y="431.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::FfMacSchedSapProvider::SchedUlCqiInfoReqParameters*, ns3::FfMacSchedSapProvider::SchedUlCqiInfoReqParameters&gt; (1,058,935 samples, 0.11%)</title><rect x="263.2" y="485" width="0.9" height="15.0" fill="rgb(217,59,14)" rx="2" ry="2" />
+<text  x="266.21" y="495.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt;::construct&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, ns3::Ptr&lt;ns3::LteControlMessage&gt; const&amp;&gt; (603,034 samples, 0.06%)</title><rect x="499.6" y="469" width="0.5" height="15.0" fill="rgb(231,120,28)" rx="2" ry="2" />
+<text  x="502.64" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;* std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_M_create_node&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; const&amp;&gt; (310,137 samples, 0.03%)</title><rect x="104.5" y="357" width="0.3" height="15.0" fill="rgb(235,139,33)" rx="2" ry="2" />
+<text  x="107.52" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::PhichListElement_s* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;ns3::PhichListElement_s const*, std::vector&lt;ns3::PhichListElement_s, std::allocator&lt;ns3::PhichListElement_s&gt; &gt; &gt;, ns3::PhichListElement_s*, ns3::PhichListElement_s&gt; (202,017 samples, 0.02%)</title><rect x="227.5" y="437" width="0.2" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="230.50" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumSignalParametersDlCtrlFrame::LteSpectrumSignalParametersDlCtrlFrame (729,950 samples, 0.08%)</title><rect x="113.8" y="453" width="0.6" height="15.0" fill="rgb(234,133,32)" rx="2" ry="2" />
+<text  x="116.83" y="463.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::AttributeConstructionList::Item, std::allocator&lt;ns3::AttributeConstructionList::Item&gt; &gt;::~_List_base (194,036 samples, 0.02%)</title><rect x="372.1" y="469" width="0.1" height="15.0" fill="rgb(237,148,35)" rx="2" ry="2" />
+<text  x="375.07" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::end (233,069 samples, 0.02%)</title><rect x="218.1" y="453" width="0.2" height="15.0" fill="rgb(218,63,15)" rx="2" ry="2" />
+<text  x="221.06" y="463.5" ></text>
+</g>
+<g >
+<title>std::tuple&lt;ns3::LteEnbPhy*, ns3::Ptr&lt;ns3::PacketBurst&gt; &gt;::~tuple (384,441 samples, 0.04%)</title><rect x="281.3" y="485" width="0.3" height="15.0" fill="rgb(221,75,18)" rx="2" ry="2" />
+<text  x="284.29" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt; &gt;::_M_lower_bound (741,372 samples, 0.08%)</title><rect x="566.0" y="197" width="0.6" height="15.0" fill="rgb(245,188,44)" rx="2" ry="2" />
+<text  x="568.96" y="207.5" ></text>
+</g>
+<g >
+<title>ns3::LteUeMac::DoReceiveLteControlMessage (45,310,234 samples, 4.67%)</title><rect x="535.5" y="341" width="36.4" height="15.0" fill="rgb(216,54,13)" rx="2" ry="2" />
+<text  x="538.47" y="351.5" >ns3..</text>
+</g>
+<g >
+<title>std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::map (155,456 samples, 0.02%)</title><rect x="341.2" y="469" width="0.2" height="15.0" fill="rgb(242,171,40)" rx="2" ry="2" />
+<text  x="344.24" y="479.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::~list (757,885 samples, 0.08%)</title><rect x="391.9" y="549" width="0.6" height="15.0" fill="rgb(222,80,19)" rx="2" ry="2" />
+<text  x="394.90" y="559.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt;::_S_right (160,926 samples, 0.02%)</title><rect x="169.0" y="405" width="0.1" height="15.0" fill="rgb(248,201,48)" rx="2" ry="2" />
+<text  x="171.96" y="415.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::_M_put_node (503,112 samples, 0.05%)</title><rect x="378.0" y="309" width="0.4" height="15.0" fill="rgb(251,213,51)" rx="2" ry="2" />
+<text  x="381.00" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumPhy::StartTxDlCtrlFrame (5,343,400 samples, 0.55%)</title><rect x="112.5" y="517" width="4.3" height="15.0" fill="rgb(230,118,28)" rx="2" ry="2" />
+<text  x="115.48" y="527.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned int, ns3::RxSpectrumModelInfo, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::RxSpectrumModelInfo&gt; &gt; &gt;::begin (295,643 samples, 0.03%)</title><rect x="329.8" y="501" width="0.2" height="15.0" fill="rgb(238,153,36)" rx="2" ry="2" />
+<text  x="332.77" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::MacCeValue_u::MacCeValue_u (300,339 samples, 0.03%)</title><rect x="688.8" y="453" width="0.2" height="15.0" fill="rgb(219,65,15)" rx="2" ry="2" />
+<text  x="691.79" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::HarqProcessInfoElement_t* std::__copy_move_a1&lt;false, ns3::HarqProcessInfoElement_t const*, ns3::HarqProcessInfoElement_t*&gt; (124,767 samples, 0.01%)</title><rect x="591.7" y="181" width="0.1" height="15.0" fill="rgb(229,112,26)" rx="2" ry="2" />
+<text  x="594.70" y="191.5" ></text>
+</g>
+<g >
+<title>std::_Function_handler&lt;void  (488,113 samples, 0.05%)</title><rect x="640.5" y="405" width="0.4" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="643.55" y="415.5" ></text>
+</g>
+<g >
+<title>unsigned short* std::__miter_base&lt;unsigned short*&gt; (233,316 samples, 0.02%)</title><rect x="253.3" y="357" width="0.1" height="15.0" fill="rgb(249,204,48)" rx="2" ry="2" />
+<text  x="256.26" y="367.5" ></text>
+</g>
+<g >
+<title>double* std::__uninitialized_default_n_a&lt;double*, unsigned long, double&gt; (267,489 samples, 0.03%)</title><rect x="111.9" y="405" width="0.2" height="15.0" fill="rgb(248,199,47)" rx="2" ry="2" />
+<text  x="114.93" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::Simulator::Run (22,443,594 samples, 2.31%)</title><rect x="17.2" y="805" width="18.0" height="15.0" fill="rgb(234,134,32)" rx="2" ry="2" />
+<text  x="20.17" y="815.5" ></text>
+</g>
+<g >
+<title>ns3::LteInterference::EndRx (38,592,765 samples, 3.98%)</title><rect x="576.7" y="549" width="31.0" height="15.0" fill="rgb(208,17,4)" rx="2" ry="2" />
+<text  x="579.70" y="559.5" >ns..</text>
+</g>
+<g >
+<title>std::__is_constant_evaluated (235,304 samples, 0.02%)</title><rect x="270.3" y="357" width="0.2" height="15.0" fill="rgb(234,137,32)" rx="2" ry="2" />
+<text  x="273.32" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::MakeEvent&lt;void  (8,821,901 samples, 0.91%)</title><rect x="770.2" y="693" width="7.1" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="773.19" y="703.5" ></text>
+</g>
+<g >
+<title>ns3::EventId::operator= (817,259 samples, 0.08%)</title><rect x="307.9" y="517" width="0.7" height="15.0" fill="rgb(241,165,39)" rx="2" ry="2" />
+<text  x="310.92" y="527.5" ></text>
+</g>
+<g >
+<title>std::function&lt;void  (563,988 samples, 0.06%)</title><rect x="640.5" y="437" width="0.4" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="643.49" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::BuildRarListElement_s, std::allocator&lt;ns3::BuildRarListElement_s&gt; &gt;::_Vector_base (274,244 samples, 0.03%)</title><rect x="174.5" y="453" width="0.2" height="15.0" fill="rgb(222,81,19)" rx="2" ry="2" />
+<text  x="177.50" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbMac::DoSubframeIndication (20,436,391 samples, 2.11%)</title><rect x="91.8" y="517" width="16.5" height="15.0" fill="rgb(248,200,47)" rx="2" ry="2" />
+<text  x="94.81" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Bit_iterator std::__copy_move_a1&lt;false, std::_Bit_const_iterator, std::_Bit_iterator&gt; (419,348 samples, 0.04%)</title><rect x="199.3" y="389" width="0.3" height="15.0" fill="rgb(207,11,2)" rx="2" ry="2" />
+<text  x="202.27" y="399.5" ></text>
+</g>
+<g >
+<title>void std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_M_construct_node&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; const&amp;&gt; (2,970,837 samples, 0.31%)</title><rect x="237.9" y="357" width="2.4" height="15.0" fill="rgb(231,119,28)" rx="2" ry="2" />
+<text  x="240.93" y="367.5" ></text>
+</g>
+<g >
+<title>std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;* std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_create_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; const&amp;&gt; (186,142 samples, 0.02%)</title><rect x="648.9" y="357" width="0.1" height="15.0" fill="rgb(230,116,27)" rx="2" ry="2" />
+<text  x="651.88" y="367.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_M_drop_node (239,459 samples, 0.02%)</title><rect x="232.9" y="421" width="0.2" height="15.0" fill="rgb(217,55,13)" rx="2" ry="2" />
+<text  x="235.92" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;3ul, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::_Tuple_impl (340,851 samples, 0.04%)</title><rect x="340.9" y="325" width="0.3" height="15.0" fill="rgb(218,59,14)" rx="2" ry="2" />
+<text  x="343.90" y="335.5" ></text>
+</g>
+<g >
+<title>double* std::__fill_n_a&lt;double*, unsigned long, double&gt; (203,543 samples, 0.02%)</title><rect x="730.0" y="357" width="0.2" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="732.99" y="367.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, unsigned short, std::_Identity&lt;unsigned short&gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;unsigned short&gt; &gt;::find (417,874 samples, 0.04%)</title><rect x="245.9" y="469" width="0.4" height="15.0" fill="rgb(238,154,36)" rx="2" ry="2" />
+<text  x="248.94" y="479.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::map (510,421 samples, 0.05%)</title><rect x="329.3" y="501" width="0.4" height="15.0" fill="rgb(242,171,40)" rx="2" ry="2" />
+<text  x="332.33" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Time::GetMilliSeconds (370,485 samples, 0.04%)</title><rect x="493.6" y="549" width="0.3" height="15.0" fill="rgb(250,207,49)" rx="2" ry="2" />
+<text  x="496.61" y="559.5" ></text>
+</g>
+<g >
+<title>void ns3::Simulator::ScheduleWithContext&lt;void  (302,319 samples, 0.03%)</title><rect x="614.1" y="517" width="0.3" height="15.0" fill="rgb(222,78,18)" rx="2" ry="2" />
+<text  x="617.11" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;::operator (158,234 samples, 0.02%)</title><rect x="737.3" y="533" width="0.1" height="15.0" fill="rgb(243,179,42)" rx="2" ry="2" />
+<text  x="740.27" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt;::~Ptr (1,871,525 samples, 0.19%)</title><rect x="501.4" y="485" width="1.5" height="15.0" fill="rgb(205,3,0)" rx="2" ry="2" />
+<text  x="504.42" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Simulator::Now (232,342 samples, 0.02%)</title><rect x="391.0" y="549" width="0.2" height="15.0" fill="rgb(240,164,39)" rx="2" ry="2" />
+<text  x="394.02" y="559.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue const&gt;&amp; std::__get_helper&lt;1ul, ns3::Ptr&lt;ns3::SpectrumValue const&gt;, unsigned int&gt; (437,377 samples, 0.05%)</title><rect x="754.4" y="581" width="0.4" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="757.42" y="591.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue&gt;::Ptr (158,937 samples, 0.02%)</title><rect x="716.4" y="485" width="0.2" height="15.0" fill="rgb(220,73,17)" rx="2" ry="2" />
+<text  x="719.45" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_Auto_node::_Auto_node&lt;std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (461,688 samples, 0.05%)</title><rect x="108.5" y="421" width="0.4" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="111.50" y="431.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::allocate (258,278 samples, 0.03%)</title><rect x="334.5" y="325" width="0.2" height="15.0" fill="rgb(236,145,34)" rx="2" ry="2" />
+<text  x="337.53" y="335.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;bool, std::allocator&lt;bool&gt; &gt;::begin (144,500 samples, 0.01%)</title><rect x="200.0" y="437" width="0.2" height="15.0" fill="rgb(230,118,28)" rx="2" ry="2" />
+<text  x="203.04" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::LteHelper::InstallEnbDevice (397,186 samples, 0.04%)</title><rect x="35.8" y="773" width="0.3" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="38.80" y="783.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt; &gt; &gt;::_M_lower_bound (1,161,944 samples, 0.12%)</title><rect x="235.7" y="453" width="0.9" height="15.0" fill="rgb(243,176,42)" rx="2" ry="2" />
+<text  x="238.67" y="463.5" ></text>
+</g>
+<g >
+<title>signed char&amp; std::vector&lt;signed char, std::allocator&lt;signed char&gt; &gt;::emplace_back&lt;signed char&gt; (645,216 samples, 0.07%)</title><rect x="533.0" y="325" width="0.6" height="15.0" fill="rgb(252,219,52)" rx="2" ry="2" />
+<text  x="536.04" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::MemberSchedSapProvider&lt;ns3::PfFfMacScheduler&gt;::SchedUlMacCtrlInfoReq (867,311 samples, 0.09%)</title><rect x="225.5" y="517" width="0.7" height="15.0" fill="rgb(226,97,23)" rx="2" ry="2" />
+<text  x="228.49" y="527.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, unsigned char*, unsigned char&gt; (190,052 samples, 0.02%)</title><rect x="443.8" y="309" width="0.1" height="15.0" fill="rgb(226,96,23)" rx="2" ry="2" />
+<text  x="446.80" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::EnbMacMemberFfMacSchedSapUser::SchedUlConfigInd (5,236,229 samples, 0.54%)</title><rect x="227.4" y="485" width="4.2" height="15.0" fill="rgb(231,121,29)" rx="2" ry="2" />
+<text  x="230.35" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::BuildBroadcastListElement_s, std::allocator&lt;ns3::BuildBroadcastListElement_s&gt; &gt;::vector (853,778 samples, 0.09%)</title><rect x="140.9" y="453" width="0.6" height="15.0" fill="rgb(237,151,36)" rx="2" ry="2" />
+<text  x="143.86" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;0ul, double const&amp;, double const&amp;, double const&amp;&gt;::_Tuple_impl (1,012,471 samples, 0.10%)</title><rect x="749.2" y="485" width="0.8" height="15.0" fill="rgb(205,1,0)" rx="2" ry="2" />
+<text  x="752.17" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;bool, std::allocator&lt;bool&gt; &gt;::begin (264,203 samples, 0.03%)</title><rect x="195.4" y="437" width="0.2" height="15.0" fill="rgb(230,118,28)" rx="2" ry="2" />
+<text  x="198.39" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::Ptr&lt;ns3::Object&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Object&gt; &gt; &gt;::_Vector_base (386,549 samples, 0.04%)</title><rect x="161.7" y="389" width="0.3" height="15.0" fill="rgb(235,141,33)" rx="2" ry="2" />
+<text  x="164.70" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;* std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_M_clone_node&lt;false, std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_Alloc_node&gt; (3,678,586 samples, 0.38%)</title><rect x="237.4" y="405" width="2.9" height="15.0" fill="rgb(241,167,40)" rx="2" ry="2" />
+<text  x="240.39" y="415.5" ></text>
+</g>
+<g >
+<title>double* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, double*, double&gt; (1,019,777 samples, 0.11%)</title><rect x="412.1" y="485" width="0.9" height="15.0" fill="rgb(222,79,19)" rx="2" ry="2" />
+<text  x="415.13" y="495.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;::~list (1,583,725 samples, 0.16%)</title><rect x="392.5" y="549" width="1.3" height="15.0" fill="rgb(217,57,13)" rx="2" ry="2" />
+<text  x="395.54" y="559.5" ></text>
+</g>
+<g >
+<title>ns3::PfFfMacScheduler::RefreshHarqProcesses (2,902,711 samples, 0.30%)</title><rect x="178.9" y="485" width="2.3" height="15.0" fill="rgb(247,193,46)" rx="2" ry="2" />
+<text  x="181.89" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::LtePhy::SetControlMessages (654,203 samples, 0.07%)</title><rect x="230.2" y="421" width="0.5" height="15.0" fill="rgb(247,193,46)" rx="2" ry="2" />
+<text  x="233.16" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumSignalParametersDlCtrlFrame::LteSpectrumSignalParametersDlCtrlFrame (1,452,066 samples, 0.15%)</title><rect x="342.7" y="501" width="1.2" height="15.0" fill="rgb(234,133,32)" rx="2" ry="2" />
+<text  x="345.69" y="511.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;std::is_constructible&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt;::value, std::pair&lt;std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, bool&gt; &gt;::type std::map&lt;ns3::Scheduler::EventKey, ns3::EventImpl*, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::insert&lt;std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (153,997 samples, 0.02%)</title><rect x="637.7" y="469" width="0.1" height="15.0" fill="rgb(211,29,7)" rx="2" ry="2" />
+<text  x="640.66" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Object::Check (252,008 samples, 0.03%)</title><rect x="543.1" y="277" width="0.2" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="546.14" y="287.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt; &gt; &gt;::_M_begin (466,586 samples, 0.05%)</title><rect x="169.6" y="421" width="0.4" height="15.0" fill="rgb(217,58,13)" rx="2" ry="2" />
+<text  x="172.58" y="431.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::deallocate (229,384 samples, 0.02%)</title><rect x="392.3" y="469" width="0.1" height="15.0" fill="rgb(232,125,29)" rx="2" ry="2" />
+<text  x="395.26" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::TypeId::GetAttributeN (1,401,356 samples, 0.14%)</title><rect x="540.9" y="261" width="1.1" height="15.0" fill="rgb(225,95,22)" rx="2" ry="2" />
+<text  x="543.86" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::BuildDataListElement_s* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::BuildDataListElement_s const*, std::vector&lt;ns3::BuildDataListElement_s, std::allocator&lt;ns3::BuildDataListElement_s&gt; &gt; &gt;, ns3::BuildDataListElement_s*&gt; (515,194 samples, 0.05%)</title><rect x="141.9" y="421" width="0.4" height="15.0" fill="rgb(249,206,49)" rx="2" ry="2" />
+<text  x="144.92" y="431.5" ></text>
+</g>
+<g >
+<title>void ns3::Callback&lt;void, unsigned short, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;::Callback&lt;void  (1,074,961 samples, 0.11%)</title><rect x="725.7" y="421" width="0.9" height="15.0" fill="rgb(226,97,23)" rx="2" ry="2" />
+<text  x="728.72" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::HarqStatus_e* std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;ns3::DlInfoListElement_s::HarqStatus_e const*, std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt; &gt;, ns3::DlInfoListElement_s::HarqStatus_e*&gt; (1,354,907 samples, 0.14%)</title><rect x="259.5" y="309" width="1.1" height="15.0" fill="rgb(212,36,8)" rx="2" ry="2" />
+<text  x="262.52" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::LteControlMessage::LteControlMessage (383,602 samples, 0.04%)</title><rect x="159.8" y="421" width="0.3" height="15.0" fill="rgb(214,43,10)" rx="2" ry="2" />
+<text  x="162.75" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Packet&gt; ns3::Create&lt;ns3::Packet, unsigned int&amp;&gt; (1,604,788 samples, 0.17%)</title><rect x="14.1" y="405" width="1.3" height="15.0" fill="rgb(253,223,53)" rx="2" ry="2" />
+<text  x="17.13" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_Vector_impl::_Vector_impl (157,826 samples, 0.02%)</title><rect x="126.6" y="357" width="0.1" height="15.0" fill="rgb(226,98,23)" rx="2" ry="2" />
+<text  x="129.55" y="367.5" ></text>
+</g>
+<g >
+<title>unsigned short const* std::__niter_base&lt;unsigned short const*, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; (245,405 samples, 0.03%)</title><rect x="475.0" y="197" width="0.2" height="15.0" fill="rgb(226,99,23)" rx="2" ry="2" />
+<text  x="478.00" y="207.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;is_member_pointer_v&lt;void  (1,068,378 samples, 0.11%)</title><rect x="87.2" y="501" width="0.9" height="15.0" fill="rgb(241,170,40)" rx="2" ry="2" />
+<text  x="90.23" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Function_base::~_Function_base (183,222 samples, 0.02%)</title><rect x="308.4" y="405" width="0.2" height="15.0" fill="rgb(221,74,17)" rx="2" ry="2" />
+<text  x="311.43" y="415.5" ></text>
+</g>
+<g >
+<title>__dynamic_cast (871,347 samples, 0.09%)</title><rect x="344.9" y="501" width="0.7" height="15.0" fill="rgb(227,102,24)" rx="2" ry="2" />
+<text  x="347.86" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultDeleter&lt;ns3::SpectrumValue&gt;::Delete (896,241 samples, 0.09%)</title><rect x="772.8" y="469" width="0.8" height="15.0" fill="rgb(222,79,19)" rx="2" ry="2" />
+<text  x="775.83" y="479.5" ></text>
+</g>
+<g >
+<title>void std::_Bind&lt;void  (885,817,061 samples, 91.34%)</title><rect x="45.7" y="629" width="712.5" height="15.0" fill="rgb(242,174,41)" rx="2" ry="2" />
+<text  x="48.74" y="639.5" >void std::_Bind&lt;void </text>
+</g>
+<g >
+<title>ns3::HigherLayerSelected_s* std::__uninitialized_copy&lt;false&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::HigherLayerSelected_s const*, std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt; &gt;, ns3::HigherLayerSelected_s*&gt; (749,843 samples, 0.08%)</title><rect x="125.0" y="325" width="0.6" height="15.0" fill="rgb(251,215,51)" rx="2" ry="2" />
+<text  x="127.95" y="335.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt;::_M_range_check (201,283 samples, 0.02%)</title><rect x="205.8" y="469" width="0.2" height="15.0" fill="rgb(210,24,5)" rx="2" ry="2" />
+<text  x="208.81" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Packet::GetSize (289,398 samples, 0.03%)</title><rect x="555.4" y="261" width="0.2" height="15.0" fill="rgb(240,163,39)" rx="2" ry="2" />
+<text  x="558.37" y="271.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;*, std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt; &gt;::base (188,865 samples, 0.02%)</title><rect x="354.5" y="517" width="0.2" height="15.0" fill="rgb(211,29,6)" rx="2" ry="2" />
+<text  x="357.52" y="527.5" ></text>
+</g>
+<g >
+<title>std::tuple_element&lt;0ul, std::tuple&lt;ns3::LteUePhy*, unsigned int, unsigned int&gt; &gt;::type&amp; std::get&lt;0ul, ns3::LteUePhy*, unsigned int, unsigned int&gt; (225,116 samples, 0.02%)</title><rect x="753.8" y="597" width="0.2" height="15.0" fill="rgb(227,101,24)" rx="2" ry="2" />
+<text  x="756.78" y="607.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::operator= (725,734 samples, 0.07%)</title><rect x="531.1" y="341" width="0.6" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="534.09" y="351.5" ></text>
+</g>
+<g >
+<title>operator new (195,774 samples, 0.02%)</title><rect x="210.9" y="389" width="0.2" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="213.92" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::_M_begin (157,856 samples, 0.02%)</title><rect x="189.4" y="453" width="0.1" height="15.0" fill="rgb(234,137,32)" rx="2" ry="2" />
+<text  x="192.39" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteUePhy&gt; ns3::CreateObject&lt;ns3::LteUePhy, ns3::Ptr&lt;ns3::LteSpectrumPhy&gt;&amp;, ns3::Ptr&lt;ns3::LteSpectrumPhy&gt;&amp;&gt; (126,589 samples, 0.01%)</title><rect x="36.4" y="741" width="0.1" height="15.0" fill="rgb(246,189,45)" rx="2" ry="2" />
+<text  x="39.40" y="751.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::LteSpectrumModelId, std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt;, std::_Select1st&lt;std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt; &gt;, std::less&lt;ns3::LteSpectrumModelId&gt;, std::allocator&lt;std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt; &gt; &gt;::_M_lower_bound (729,846 samples, 0.08%)</title><rect x="298.1" y="437" width="0.6" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="301.10" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::Copy (1,952,922 samples, 0.20%)</title><rect x="71.2" y="453" width="1.6" height="15.0" fill="rgb(241,167,40)" rx="2" ry="2" />
+<text  x="74.21" y="463.5" ></text>
+</g>
+<g >
+<title>std::move_iterator&lt;ns3::MacCeListElement_s*&gt;::move_iterator (159,225 samples, 0.02%)</title><rect x="129.9" y="453" width="0.2" height="15.0" fill="rgb(214,44,10)" rx="2" ry="2" />
+<text  x="132.93" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteSpectrumSignalParametersUlSrsFrame&gt;::~Ptr (198,752 samples, 0.02%)</title><rect x="737.1" y="533" width="0.2" height="15.0" fill="rgb(209,20,4)" rx="2" ry="2" />
+<text  x="740.11" y="543.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::allocate (380,371 samples, 0.04%)</title><rect x="363.3" y="405" width="0.3" height="15.0" fill="rgb(215,48,11)" rx="2" ry="2" />
+<text  x="366.34" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumModel const&gt;::Ptr (356,299 samples, 0.04%)</title><rect x="405.2" y="501" width="0.3" height="15.0" fill="rgb(232,125,30)" rx="2" ry="2" />
+<text  x="408.18" y="511.5" ></text>
+</g>
+<g >
+<title>double* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, double*&gt; (583,431 samples, 0.06%)</title><rect x="324.9" y="437" width="0.4" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="327.85" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::LogComponent::IsEnabled (323,506 samples, 0.03%)</title><rect x="759.1" y="709" width="0.2" height="15.0" fill="rgb(214,43,10)" rx="2" ry="2" />
+<text  x="762.06" y="719.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;double&gt;::allocate (187,232 samples, 0.02%)</title><rect x="300.7" y="373" width="0.1" height="15.0" fill="rgb(221,76,18)" rx="2" ry="2" />
+<text  x="303.67" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Packet const&gt;::Acquire (156,632 samples, 0.02%)</title><rect x="492.5" y="533" width="0.2" height="15.0" fill="rgb(254,228,54)" rx="2" ry="2" />
+<text  x="495.53" y="543.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;double&gt; &gt;::deallocate (164,716 samples, 0.02%)</title><rect x="728.4" y="373" width="0.2" height="15.0" fill="rgb(236,143,34)" rx="2" ry="2" />
+<text  x="731.43" y="383.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;std::is_constructible&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt;, std::pair&lt;unsigned short, ns3::DlInfoListElement_s&gt; &gt;::value, std::pair&lt;std::_Rb_tree_iterator&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt;, bool&gt; &gt;::type std::map&lt;unsigned short, ns3::DlInfoListElement_s, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt; &gt;::insert&lt;std::pair&lt;unsigned short, ns3::DlInfoListElement_s&gt; &gt; (2,356,316 samples, 0.24%)</title><rect x="503.0" y="549" width="1.9" height="15.0" fill="rgb(248,202,48)" rx="2" ry="2" />
+<text  x="506.02" y="559.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt; &gt; &gt;::_M_lower_bound (159,330 samples, 0.02%)</title><rect x="104.3" y="437" width="0.2" height="15.0" fill="rgb(243,176,42)" rx="2" ry="2" />
+<text  x="107.33" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Seconds (322,115 samples, 0.03%)</title><rect x="427.6" y="245" width="0.3" height="15.0" fill="rgb(236,145,34)" rx="2" ry="2" />
+<text  x="430.65" y="255.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_List_impl::_List_impl (313,999 samples, 0.03%)</title><rect x="354.7" y="501" width="0.3" height="15.0" fill="rgb(244,183,43)" rx="2" ry="2" />
+<text  x="357.73" y="511.5" ></text>
+</g>
+<g >
+<title>double* std::__uninitialized_copy&lt;true&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, double*&gt; (156,421 samples, 0.02%)</title><rect x="484.8" y="437" width="0.2" height="15.0" fill="rgb(238,153,36)" rx="2" ry="2" />
+<text  x="487.85" y="447.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;::vector (3,232,067 samples, 0.33%)</title><rect x="512.3" y="549" width="2.6" height="15.0" fill="rgb(249,203,48)" rx="2" ry="2" />
+<text  x="515.30" y="559.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteChunkProcessor&gt;::operator (151,530 samples, 0.02%)</title><rect x="717.1" y="501" width="0.1" height="15.0" fill="rgb(243,177,42)" rx="2" ry="2" />
+<text  x="720.11" y="511.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::max_size (408,133 samples, 0.04%)</title><rect x="480.5" y="245" width="0.3" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="483.49" y="255.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt;::construct&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, ns3::Ptr&lt;ns3::LteControlMessage&gt;&amp;&gt; (232,855 samples, 0.02%)</title><rect x="722.0" y="421" width="0.1" height="15.0" fill="rgb(247,194,46)" rx="2" ry="2" />
+<text  x="724.96" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt; &gt;::_M_lower_bound (592,305 samples, 0.06%)</title><rect x="11.8" y="341" width="0.4" height="15.0" fill="rgb(245,188,44)" rx="2" ry="2" />
+<text  x="14.77" y="351.5" ></text>
+</g>
+<g >
+<title>int* std::__uninitialized_copy&lt;true&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;int const*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt;, int*&gt; (711,242 samples, 0.07%)</title><rect x="573.7" y="309" width="0.6" height="15.0" fill="rgb(207,11,2)" rx="2" ry="2" />
+<text  x="576.75" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::Callback&lt;void, ns3::SpectrumValue const&amp;&gt;::operator (324,769 samples, 0.03%)</title><rect x="611.9" y="517" width="0.3" height="15.0" fill="rgb(215,50,12)" rx="2" ry="2" />
+<text  x="614.94" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::RlcTag::Deserialize (396,822 samples, 0.04%)</title><rect x="424.7" y="229" width="0.3" height="15.0" fill="rgb(235,140,33)" rx="2" ry="2" />
+<text  x="427.68" y="239.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::find (727,246 samples, 0.07%)</title><rect x="223.2" y="469" width="0.6" height="15.0" fill="rgb(205,3,0)" rx="2" ry="2" />
+<text  x="226.17" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::NoOpComponentCarrierManager::DoTransmitPdu (1,327,529 samples, 0.14%)</title><rect x="11.4" y="389" width="1.1" height="15.0" fill="rgb(228,110,26)" rx="2" ry="2" />
+<text  x="14.43" y="399.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;is_invocable_r_v&lt;void, void  (15,223,770 samples, 1.57%)</title><rect x="471.5" y="373" width="12.3" height="15.0" fill="rgb(243,178,42)" rx="2" ry="2" />
+<text  x="474.54" y="383.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Ptr&lt;ns3::Object&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Object&gt; &gt; &gt;::~vector (146,330 samples, 0.02%)</title><rect x="653.8" y="325" width="0.1" height="15.0" fill="rgb(223,83,19)" rx="2" ry="2" />
+<text  x="656.75" y="335.5" ></text>
+</g>
+<g >
+<title>malloc (598,171 samples, 0.06%)</title><rect x="655.0" y="357" width="0.5" height="15.0" fill="rgb(230,119,28)" rx="2" ry="2" />
+<text  x="658.04" y="367.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt;::_S_max_size (312,752 samples, 0.03%)</title><rect x="211.2" y="421" width="0.3" height="15.0" fill="rgb(227,104,25)" rx="2" ry="2" />
+<text  x="214.23" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_S_key (126,450 samples, 0.01%)</title><rect x="83.9" y="389" width="0.1" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="86.90" y="399.5" ></text>
+</g>
+<g >
+<title>std::_List_node&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt;* std::__cxx11::list&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;::_M_create_node&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; const&amp;&gt; (2,282,165 samples, 0.24%)</title><rect x="723.3" y="485" width="1.8" height="15.0" fill="rgb(218,61,14)" rx="2" ry="2" />
+<text  x="726.27" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumModel const&gt;::Acquire (219,194 samples, 0.02%)</title><rect x="705.1" y="517" width="0.1" height="15.0" fill="rgb(222,80,19)" rx="2" ry="2" />
+<text  x="708.06" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::_Auto_node::_M_insert (235,870 samples, 0.02%)</title><rect x="192.0" y="453" width="0.2" height="15.0" fill="rgb(209,22,5)" rx="2" ry="2" />
+<text  x="195.04" y="463.5" ></text>
+</g>
+<g >
+<title>decltype  (620,289 samples, 0.06%)</title><rect x="384.8" y="421" width="0.5" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="387.82" y="431.5" ></text>
+</g>
+<g >
+<title>void std::destroy_at&lt;ns3::MacCeListElement_s&gt; (679,734 samples, 0.07%)</title><rect x="264.9" y="405" width="0.5" height="15.0" fill="rgb(250,209,50)" rx="2" ry="2" />
+<text  x="267.90" y="415.5" ></text>
+</g>
+<g >
+<title>std::set&lt;unsigned short, std::less&lt;unsigned short&gt;, std::allocator&lt;unsigned short&gt; &gt;::end (241,739 samples, 0.02%)</title><rect x="462.6" y="357" width="0.2" height="15.0" fill="rgb(242,171,41)" rx="2" ry="2" />
+<text  x="465.62" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::PacketMetadata::PacketMetadata (1,833,242 samples, 0.19%)</title><rect x="557.4" y="229" width="1.4" height="15.0" fill="rgb(231,121,28)" rx="2" ry="2" />
+<text  x="560.37" y="239.5" ></text>
+</g>
+<g >
+<title>ns3::Object::~Object (1,513,714 samples, 0.16%)</title><rect x="549.2" y="229" width="1.2" height="15.0" fill="rgb(229,110,26)" rx="2" ry="2" />
+<text  x="552.20" y="239.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultDeleter&lt;ns3::SpectrumValue&gt;::Delete (127,422 samples, 0.01%)</title><rect x="61.4" y="485" width="0.1" height="15.0" fill="rgb(222,79,19)" rx="2" ry="2" />
+<text  x="64.37" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Bvector_base&lt;std::allocator&lt;bool&gt; &gt;::_M_deallocate (464,044 samples, 0.05%)</title><rect x="201.9" y="453" width="0.4" height="15.0" fill="rgb(237,149,35)" rx="2" ry="2" />
+<text  x="204.95" y="463.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::Ptr&lt;ns3::Object&gt;*, ns3::Ptr&lt;ns3::Object&gt; &gt; (194,998 samples, 0.02%)</title><rect x="165.3" y="325" width="0.1" height="15.0" fill="rgb(226,98,23)" rx="2" ry="2" />
+<text  x="168.29" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt; ns3::CreateObject&lt;ns3::PacketBurst&gt; (375,534 samples, 0.04%)</title><rect x="119.3" y="517" width="0.3" height="15.0" fill="rgb(205,4,0)" rx="2" ry="2" />
+<text  x="122.32" y="527.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt;::construct&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; const&amp;&gt; (228,459 samples, 0.02%)</title><rect x="358.5" y="517" width="0.2" height="15.0" fill="rgb(217,55,13)" rx="2" ry="2" />
+<text  x="361.53" y="527.5" ></text>
+</g>
+<g >
+<title> (316,802 samples, 0.03%)</title><rect x="675.1" y="469" width="0.3" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="678.11" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::MakeEvent&lt;void  (597,366 samples, 0.06%)</title><rect x="726.8" y="485" width="0.5" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="729.78" y="495.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::__uninitialized_default_n_1&lt;true&gt;::__uninit_default_n&lt;unsigned char*, unsigned long&gt; (918,885 samples, 0.09%)</title><rect x="460.3" y="213" width="0.7" height="15.0" fill="rgb(252,220,52)" rx="2" ry="2" />
+<text  x="463.26" y="223.5" ></text>
+</g>
+<g >
+<title>void std::__fill_a&lt;unsigned char*, unsigned char&gt; (539,616 samples, 0.06%)</title><rect x="460.5" y="165" width="0.4" height="15.0" fill="rgb(228,110,26)" rx="2" ry="2" />
+<text  x="463.50" y="175.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Scheduler&gt;::operator (200,105 samples, 0.02%)</title><rect x="778.3" y="741" width="0.2" height="15.0" fill="rgb(211,31,7)" rx="2" ry="2" />
+<text  x="781.35" y="751.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, unsigned char, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, unsigned char&gt; &gt; &gt;::find (1,200,654 samples, 0.12%)</title><rect x="244.5" y="485" width="0.9" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="247.47" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::FfMacSchedSapProvider::SchedUlTriggerReqParameters::~SchedUlTriggerReqParameters (511,776 samples, 0.05%)</title><rect x="133.9" y="517" width="0.4" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="136.87" y="527.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::VendorSpecificListElement_s*, ns3::VendorSpecificListElement_s&gt; (198,417 samples, 0.02%)</title><rect x="25.2" y="309" width="0.2" height="15.0" fill="rgb(207,12,3)" rx="2" ry="2" />
+<text  x="28.20" y="319.5" ></text>
+</g>
+<g >
+<title>void std::_Construct&lt;ns3::MacCeListElement_s, ns3::MacCeListElement_s&amp;&gt; (432,867 samples, 0.04%)</title><rect x="129.2" y="421" width="0.3" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="132.18" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_S_maximum (155,370 samples, 0.02%)</title><rect x="236.9" y="421" width="0.2" height="15.0" fill="rgb(242,174,41)" rx="2" ry="2" />
+<text  x="239.94" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::PfFfMacScheduler::DoSchedUlCqiInfoReq (6,622,886 samples, 0.68%)</title><rect x="220.2" y="501" width="5.3" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="223.16" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_Vector_base (495,697 samples, 0.05%)</title><rect x="686.9" y="453" width="0.4" height="15.0" fill="rgb(205,2,0)" rx="2" ry="2" />
+<text  x="689.93" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::NoOpComponentCarrierManager::DoTransmitPdu (5,821,892 samples, 0.60%)</title><rect x="19.6" y="405" width="4.7" height="15.0" fill="rgb(228,110,26)" rx="2" ry="2" />
+<text  x="22.60" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::EventImpl*&amp;&amp; std::forward&lt;ns3::EventImpl*&gt; (126,251 samples, 0.01%)</title><rect x="661.5" y="309" width="0.1" height="15.0" fill="rgb(208,15,3)" rx="2" ry="2" />
+<text  x="664.49" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy::StartFrame (2,983,151 samples, 0.31%)</title><rect x="17.2" y="597" width="2.4" height="15.0" fill="rgb(209,22,5)" rx="2" ry="2" />
+<text  x="20.17" y="607.5" ></text>
+</g>
+<g >
+<title>std::_Bind&lt;void  (825,096 samples, 0.09%)</title><rect x="306.2" y="453" width="0.7" height="15.0" fill="rgb(253,221,52)" rx="2" ry="2" />
+<text  x="309.19" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumConverter::Convert (1,680,933 samples, 0.17%)</title><rect x="326.2" y="501" width="1.3" height="15.0" fill="rgb(223,86,20)" rx="2" ry="2" />
+<text  x="329.17" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Function_handler&lt;void  (3,263,000 samples, 0.34%)</title><rect x="418.8" y="421" width="2.6" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="421.77" y="431.5" ></text>
+</g>
+<g >
+<title>int* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;int const*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt;, int*, int&gt; (831,586 samples, 0.09%)</title><rect x="573.6" y="341" width="0.7" height="15.0" fill="rgb(205,0,0)" rx="2" ry="2" />
+<text  x="576.65" y="351.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_M_create_storage (768,784 samples, 0.08%)</title><rect x="239.2" y="261" width="0.6" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="242.19" y="271.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;bool, std::allocator&lt;bool&gt; &gt;::resize (276,956 samples, 0.03%)</title><rect x="105.6" y="469" width="0.2" height="15.0" fill="rgb(219,68,16)" rx="2" ry="2" />
+<text  x="108.60" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::GetSize (4,408,653 samples, 0.45%)</title><rect x="367.2" y="533" width="3.5" height="15.0" fill="rgb(229,113,27)" rx="2" ry="2" />
+<text  x="370.18" y="543.5" ></text>
+</g>
+<g >
+<title>void std::destroy_at&lt;ns3::CqiListElement_s&gt; (416,767 samples, 0.04%)</title><rect x="106.8" y="389" width="0.3" height="15.0" fill="rgb(208,15,3)" rx="2" ry="2" />
+<text  x="109.77" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteSpectrumPhy&gt;::Ptr (660,447 samples, 0.07%)</title><rect x="578.4" y="405" width="0.5" height="15.0" fill="rgb(246,188,45)" rx="2" ry="2" />
+<text  x="581.35" y="415.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;unsigned char&gt;::allocate (352,577 samples, 0.04%)</title><rect x="692.8" y="421" width="0.3" height="15.0" fill="rgb(230,117,28)" rx="2" ry="2" />
+<text  x="695.85" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;0ul, ns3::LteEnbPhy*&gt;::_M_head (231,471 samples, 0.02%)</title><rect x="752.5" y="565" width="0.1" height="15.0" fill="rgb(253,222,53)" rx="2" ry="2" />
+<text  x="755.46" y="575.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::allocate (185,442 samples, 0.02%)</title><rect x="318.9" y="277" width="0.2" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="321.91" y="287.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Buffer::Data*, std::allocator&lt;ns3::Buffer::Data*&gt; &gt;::end (310,746 samples, 0.03%)</title><rect x="32.3" y="325" width="0.3" height="15.0" fill="rgb(223,86,20)" rx="2" ry="2" />
+<text  x="35.32" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::DlHarqFeedbackLteControlMessage&gt; ns3::DynamicCast&lt;ns3::DlHarqFeedbackLteControlMessage, ns3::LteControlMessage&gt; (124,981 samples, 0.01%)</title><rect x="462.3" y="357" width="0.1" height="15.0" fill="rgb(215,49,11)" rx="2" ry="2" />
+<text  x="465.26" y="367.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_S_key (153,333 samples, 0.02%)</title><rect x="616.0" y="421" width="0.1" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="618.99" y="431.5" ></text>
+</g>
+<g >
+<title>int* std::__copy_move_a2&lt;false, int const*, int*&gt; (275,574 samples, 0.03%)</title><rect x="698.9" y="437" width="0.3" height="15.0" fill="rgb(224,87,20)" rx="2" ry="2" />
+<text  x="701.93" y="447.5" ></text>
+</g>
+<g >
+<title>int* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;int const*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt;, int*&gt; (909,481 samples, 0.09%)</title><rect x="698.4" y="517" width="0.8" height="15.0" fill="rgb(251,216,51)" rx="2" ry="2" />
+<text  x="701.42" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::TimeStep (193,847 samples, 0.02%)</title><rect x="155.6" y="357" width="0.1" height="15.0" fill="rgb(242,171,41)" rx="2" ry="2" />
+<text  x="158.59" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::MultiModelSpectrumChannel::StartTx (4,243,524 samples, 0.44%)</title><rect x="113.1" y="501" width="3.4" height="15.0" fill="rgb(227,102,24)" rx="2" ry="2" />
+<text  x="116.09" y="511.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::__uninitialized_copy&lt;true&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, unsigned char*&gt; (459,117 samples, 0.05%)</title><rect x="214.2" y="421" width="0.4" height="15.0" fill="rgb(233,129,30)" rx="2" ry="2" />
+<text  x="217.24" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::Simulator::DoScheduleNow (382,100 samples, 0.04%)</title><rect x="53.0" y="533" width="0.3" height="15.0" fill="rgb(232,126,30)" rx="2" ry="2" />
+<text  x="55.95" y="543.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt; &gt;::destroy&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; (2,881,652 samples, 0.30%)</title><rect x="451.6" y="197" width="2.3" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="454.58" y="207.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned int, std::allocator&lt;unsigned int&gt; &gt;::~vector (686,206 samples, 0.07%)</title><rect x="696.9" y="501" width="0.5" height="15.0" fill="rgb(215,47,11)" rx="2" ry="2" />
+<text  x="699.90" y="511.5" ></text>
+</g>
+<g >
+<title>malloc (158,423 samples, 0.02%)</title><rect x="537.1" y="277" width="0.1" height="15.0" fill="rgb(230,119,28)" rx="2" ry="2" />
+<text  x="540.08" y="287.5" ></text>
+</g>
+<g >
+<title>std::tuple_element&lt;4ul, std::tuple&lt;ns3::MultiModelSpectrumChannel*, ns3::Ptr&lt;ns3::SpectrumValue&gt;, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt; &gt;::type&amp; std::get&lt;4ul, ns3::MultiModelSpectrumChannel*, ns3::Ptr&lt;ns3::SpectrumValue&gt;, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt; (350,980 samples, 0.04%)</title><rect x="757.1" y="597" width="0.3" height="15.0" fill="rgb(205,3,0)" rx="2" ry="2" />
+<text  x="760.12" y="607.5" ></text>
+</g>
+<g >
+<title>std::tuple_element&lt;0ul, std::tuple&lt;double const&amp;, double const&amp;, double const&amp;&gt; &gt;::type const&amp; std::get&lt;0ul, double const&amp;, double const&amp;, double const&amp;&gt; (744,395 samples, 0.08%)</title><rect x="748.4" y="485" width="0.6" height="15.0" fill="rgb(243,175,42)" rx="2" ry="2" />
+<text  x="751.44" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultDeleter&lt;ns3::EventImpl&gt;::Delete (489,663 samples, 0.05%)</title><rect x="308.2" y="469" width="0.4" height="15.0" fill="rgb(240,163,39)" rx="2" ry="2" />
+<text  x="311.19" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt;::vector (1,538,877 samples, 0.16%)</title><rect x="124.9" y="373" width="1.2" height="15.0" fill="rgb(248,198,47)" rx="2" ry="2" />
+<text  x="127.86" y="383.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt;::lower_bound (305,767 samples, 0.03%)</title><rect x="156.5" y="405" width="0.3" height="15.0" fill="rgb(223,85,20)" rx="2" ry="2" />
+<text  x="159.53" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbMac::DoSubframeIndication (2,983,151 samples, 0.31%)</title><rect x="17.2" y="549" width="2.4" height="15.0" fill="rgb(248,200,47)" rx="2" ry="2" />
+<text  x="20.17" y="559.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt;::_M_create_storage (156,029 samples, 0.02%)</title><rect x="228.9" y="421" width="0.1" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="231.92" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::LteChunkProcessor::End (324,769 samples, 0.03%)</title><rect x="611.9" y="533" width="0.3" height="15.0" fill="rgb(223,83,19)" rx="2" ry="2" />
+<text  x="614.94" y="543.5" ></text>
+</g>
+<g >
+<title>unsigned short* std::__uninitialized_copy_a&lt;std::move_iterator&lt;unsigned short*&gt;, unsigned short*, unsigned short&gt; (154,651 samples, 0.02%)</title><rect x="106.3" y="421" width="0.1" height="15.0" fill="rgb(225,96,22)" rx="2" ry="2" />
+<text  x="109.25" y="431.5" ></text>
+</g>
+<g >
+<title>std::function&lt;void  (1,212,692 samples, 0.13%)</title><rect x="306.9" y="469" width="1.0" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="309.95" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultDeleter&lt;ns3::Packet&gt;::Delete (4,346,874 samples, 0.45%)</title><rect x="545.6" y="149" width="3.5" height="15.0" fill="rgb(231,123,29)" rx="2" ry="2" />
+<text  x="548.61" y="159.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;::operator* (162,772 samples, 0.02%)</title><rect x="477.3" y="309" width="0.1" height="15.0" fill="rgb(249,203,48)" rx="2" ry="2" />
+<text  x="480.27" y="319.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;ns3::CqiListElement_s&gt; &gt;::construct&lt;ns3::CqiListElement_s, ns3::CqiListElement_s const&amp;&gt; (234,240 samples, 0.02%)</title><rect x="461.6" y="293" width="0.1" height="15.0" fill="rgb(240,165,39)" rx="2" ry="2" />
+<text  x="464.55" y="303.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_initialize_dispatch&lt;std::_List_const_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; (798,843 samples, 0.08%)</title><rect x="620.3" y="517" width="0.6" height="15.0" fill="rgb(215,50,12)" rx="2" ry="2" />
+<text  x="623.30" y="527.5" ></text>
+</g>
+<g >
+<title>std::tuple&lt;ns3::MultiModelSpectrumChannel*, ns3::Ptr&lt;ns3::SpectrumValue&gt;, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::tuple&lt;ns3::MultiModelSpectrumChannel*&amp;, ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp;, double&amp;, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;&amp;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;&amp;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;&amp;, true, true&gt; (245,362 samples, 0.03%)</title><rect x="87.4" y="437" width="0.2" height="15.0" fill="rgb(209,20,4)" rx="2" ry="2" />
+<text  x="90.39" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::operator+ (598,044 samples, 0.06%)</title><rect x="409.6" y="533" width="0.4" height="15.0" fill="rgb(244,182,43)" rx="2" ry="2" />
+<text  x="412.56" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt; &gt;::find (323,190 samples, 0.03%)</title><rect x="552.4" y="197" width="0.3" height="15.0" fill="rgb(225,93,22)" rx="2" ry="2" />
+<text  x="555.39" y="207.5" ></text>
+</g>
+<g >
+<title>ns3::PacketMetadata::Recycle (849,631 samples, 0.09%)</title><rect x="548.2" y="101" width="0.6" height="15.0" fill="rgb(238,154,37)" rx="2" ry="2" />
+<text  x="551.16" y="111.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::_M_insert_node (154,048 samples, 0.02%)</title><rect x="192.1" y="437" width="0.1" height="15.0" fill="rgb(215,46,11)" rx="2" ry="2" />
+<text  x="195.10" y="447.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Callback&lt;void, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt; &gt;, std::allocator&lt;ns3::Callback&lt;void, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt; &gt; &gt; &gt;::end (163,732 samples, 0.02%)</title><rect x="80.1" y="501" width="0.1" height="15.0" fill="rgb(217,56,13)" rx="2" ry="2" />
+<text  x="83.11" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt;::_Vector_base (341,838 samples, 0.04%)</title><rect x="503.7" y="373" width="0.3" height="15.0" fill="rgb(208,17,4)" rx="2" ry="2" />
+<text  x="506.72" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::UlDciListElement_s* std::__uninitialized_copy&lt;false&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::UlDciListElement_s const*, std::vector&lt;ns3::UlDciListElement_s, std::allocator&lt;ns3::UlDciListElement_s&gt; &gt; &gt;, ns3::UlDciListElement_s*&gt; (160,843 samples, 0.02%)</title><rect x="228.2" y="405" width="0.1" height="15.0" fill="rgb(231,121,29)" rx="2" ry="2" />
+<text  x="231.19" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt;* std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt; &gt;::_M_create_node&lt;std::pair&lt;unsigned short, ns3::DlInfoListElement_s&gt; &gt; (1,129,994 samples, 0.12%)</title><rect x="503.1" y="485" width="0.9" height="15.0" fill="rgb(241,168,40)" rx="2" ry="2" />
+<text  x="506.11" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::LogComponent::IsEnabled (201,088 samples, 0.02%)</title><rect x="343.0" y="469" width="0.2" height="15.0" fill="rgb(214,43,10)" rx="2" ry="2" />
+<text  x="346.04" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::ObjectBase::~ObjectBase (422,911 samples, 0.04%)</title><rect x="379.0" y="293" width="0.3" height="15.0" fill="rgb(232,126,30)" rx="2" ry="2" />
+<text  x="381.98" y="303.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;4ul, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::~_Tuple_impl (1,013,985 samples, 0.10%)</title><rect x="776.4" y="485" width="0.8" height="15.0" fill="rgb(249,206,49)" rx="2" ry="2" />
+<text  x="779.41" y="495.5" ></text>
+</g>
+<g >
+<title>int* std::copy&lt;__gnu_cxx::__normal_iterator&lt;int const*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt;, int*&gt; (730,011 samples, 0.08%)</title><rect x="398.8" y="485" width="0.6" height="15.0" fill="rgb(215,50,12)" rx="2" ry="2" />
+<text  x="401.81" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::vector (2,271,955 samples, 0.23%)</title><rect x="412.1" y="501" width="1.8" height="15.0" fill="rgb(239,156,37)" rx="2" ry="2" />
+<text  x="415.05" y="511.5" ></text>
+</g>
+<g >
+<title>std::_List_node&lt;ns3::UlDciLteControlMessage&gt;* std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;::_M_create_node&lt;ns3::UlDciLteControlMessage const&amp;&gt; (1,556,182 samples, 0.16%)</title><rect x="287.2" y="469" width="1.3" height="15.0" fill="rgb(220,70,16)" rx="2" ry="2" />
+<text  x="290.21" y="479.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::__niter_base&lt;unsigned char*&gt; (154,843 samples, 0.02%)</title><rect x="694.2" y="421" width="0.1" height="15.0" fill="rgb(229,111,26)" rx="2" ry="2" />
+<text  x="697.21" y="431.5" ></text>
+</g>
+<g >
+<title>void std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_construct_node&lt;std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (695,882 samples, 0.07%)</title><rect x="334.7" y="357" width="0.6" height="15.0" fill="rgb(231,122,29)" rx="2" ry="2" />
+<text  x="337.73" y="367.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::_M_allocate (417,726 samples, 0.04%)</title><rect x="520.1" y="293" width="0.3" height="15.0" fill="rgb(220,70,16)" rx="2" ry="2" />
+<text  x="523.09" y="303.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::LteFlowId_t, std::pair&lt;ns3::LteFlowId_t const, ns3::FfMacSchedSapProvider::SchedDlRlcBufferReqParameters&gt;, std::_Select1st&lt;std::pair&lt;ns3::LteFlowId_t const, ns3::FfMacSchedSapProvider::SchedDlRlcBufferReqParameters&gt; &gt;, std::less&lt;ns3::LteFlowId_t&gt;, std::allocator&lt;std::pair&lt;ns3::LteFlowId_t const, ns3::FfMacSchedSapProvider::SchedDlRlcBufferReqParameters&gt; &gt; &gt;::_M_lower_bound (856,900 samples, 0.09%)</title><rect x="181.8" y="437" width="0.6" height="15.0" fill="rgb(243,175,42)" rx="2" ry="2" />
+<text  x="184.76" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::HigherLayerSelected_s::~HigherLayerSelected_s (200,884 samples, 0.02%)</title><rect x="586.5" y="293" width="0.2" height="15.0" fill="rgb(237,150,35)" rx="2" ry="2" />
+<text  x="589.54" y="303.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::~vector (460,931 samples, 0.05%)</title><rect x="472.9" y="277" width="0.4" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="475.88" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbMac::DoSubframeIndication (178,609,510 samples, 18.42%)</title><rect x="123.4" y="533" width="143.7" height="15.0" fill="rgb(248,200,47)" rx="2" ry="2" />
+<text  x="126.39" y="543.5" >ns3::LteEnbMac::Do..</text>
+</g>
+<g >
+<title>ns3::LteRadioBearerTag::~LteRadioBearerTag (271,006 samples, 0.03%)</title><rect x="20.5" y="357" width="0.2" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="23.52" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy::DoSendMacPdu (663,786 samples, 0.07%)</title><rect x="19.8" y="341" width="0.5" height="15.0" fill="rgb(245,188,44)" rx="2" ry="2" />
+<text  x="22.79" y="351.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::~vector (127,422 samples, 0.01%)</title><rect x="61.4" y="453" width="0.1" height="15.0" fill="rgb(225,92,22)" rx="2" ry="2" />
+<text  x="64.37" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::EventId ns3::Simulator::Schedule&lt;void  (2,769,515 samples, 0.29%)</title><rect x="62.2" y="533" width="2.2" height="15.0" fill="rgb(253,224,53)" rx="2" ry="2" />
+<text  x="65.17" y="543.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt; &gt;::destroy&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; (827,732 samples, 0.09%)</title><rect x="774.0" y="277" width="0.7" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="777.05" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumModel const&gt;::Ptr (155,450 samples, 0.02%)</title><rect x="677.0" y="469" width="0.1" height="15.0" fill="rgb(232,125,30)" rx="2" ry="2" />
+<text  x="680.02" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::CqiListElement_s, std::allocator&lt;ns3::CqiListElement_s&gt; &gt;::_M_erase_at_end (1,008,706 samples, 0.10%)</title><rect x="254.9" y="485" width="0.8" height="15.0" fill="rgb(244,182,43)" rx="2" ry="2" />
+<text  x="257.91" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt;::~vector (264,265 samples, 0.03%)</title><rect x="461.2" y="277" width="0.3" height="15.0" fill="rgb(234,134,32)" rx="2" ry="2" />
+<text  x="464.25" y="287.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, unsigned char&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, unsigned char&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, unsigned char&gt; &gt; &gt;::_M_lower_bound (577,659 samples, 0.06%)</title><rect x="176.9" y="437" width="0.5" height="15.0" fill="rgb(226,99,23)" rx="2" ry="2" />
+<text  x="179.91" y="447.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::DlInfoListElement_s*&gt; (886,663 samples, 0.09%)</title><rect x="132.4" y="469" width="0.7" height="15.0" fill="rgb(215,49,11)" rx="2" ry="2" />
+<text  x="135.37" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::TypeId::GetAttributeN (231,508 samples, 0.02%)</title><rect x="19.4" y="405" width="0.1" height="15.0" fill="rgb(225,95,22)" rx="2" ry="2" />
+<text  x="22.36" y="415.5" ></text>
+</g>
+<g >
+<title>void std::_Bind&lt;void  (22,443,594 samples, 2.31%)</title><rect x="17.2" y="645" width="18.0" height="15.0" fill="rgb(242,174,41)" rx="2" ry="2" />
+<text  x="20.17" y="655.5" ></text>
+</g>
+<g >
+<title>decltype  (241,010 samples, 0.02%)</title><rect x="452.8" y="37" width="0.2" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="455.83" y="47.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;ns3::Buffer::Data*&gt; &gt;::construct&lt;ns3::Buffer::Data*, ns3::Buffer::Data* const&amp;&gt; (315,007 samples, 0.03%)</title><rect x="452.2" y="53" width="0.3" height="15.0" fill="rgb(251,213,50)" rx="2" ry="2" />
+<text  x="455.23" y="63.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::~_Rb_tree (231,712 samples, 0.02%)</title><rect x="103.9" y="437" width="0.2" height="15.0" fill="rgb(209,22,5)" rx="2" ry="2" />
+<text  x="106.93" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt; &gt;::_M_lower_bound (280,068 samples, 0.03%)</title><rect x="552.4" y="181" width="0.2" height="15.0" fill="rgb(245,188,44)" rx="2" ry="2" />
+<text  x="555.39" y="191.5" ></text>
+</g>
+<g >
+<title>[libc.so.6] (161,543 samples, 0.02%)</title><rect x="671.5" y="501" width="0.1" height="15.0" fill="rgb(223,84,20)" rx="2" ry="2" />
+<text  x="674.52" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned char const, ns3::LteUeMac::LcInfo&gt; &gt;::_M_valptr (240,927 samples, 0.02%)</title><rect x="691.4" y="437" width="0.2" height="15.0" fill="rgb(221,77,18)" rx="2" ry="2" />
+<text  x="694.43" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::PfFfMacScheduler::DoSchedUlTriggerReq (34,427,946 samples, 3.55%)</title><rect x="226.2" y="501" width="27.7" height="15.0" fill="rgb(205,0,0)" rx="2" ry="2" />
+<text  x="229.21" y="511.5" >n..</text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt; &gt;::find (1,004,495 samples, 0.10%)</title><rect x="241.7" y="469" width="0.8" height="15.0" fill="rgb(214,44,10)" rx="2" ry="2" />
+<text  x="244.69" y="479.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::~map (916,115 samples, 0.09%)</title><rect x="193.1" y="485" width="0.7" height="15.0" fill="rgb(248,201,48)" rx="2" ry="2" />
+<text  x="196.09" y="495.5" ></text>
+</g>
+<g >
+<title>std::isnan (190,930 samples, 0.02%)</title><rect x="703.1" y="501" width="0.1" height="15.0" fill="rgb(207,9,2)" rx="2" ry="2" />
+<text  x="706.08" y="511.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::operator= (904,852 samples, 0.09%)</title><rect x="594.3" y="293" width="0.7" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="597.30" y="303.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt;::construct&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, ns3::Ptr&lt;ns3::LteControlMessage&gt; const&amp;&gt; (240,418 samples, 0.02%)</title><rect x="611.3" y="469" width="0.2" height="15.0" fill="rgb(231,120,28)" rx="2" ry="2" />
+<text  x="614.35" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::MemberLteCcmMacSapUser&lt;ns3::NoOpComponentCarrierManager&gt;::UlReceiveMacCe (4,588,238 samples, 0.47%)</title><rect x="457.3" y="309" width="3.7" height="15.0" fill="rgb(235,141,33)" rx="2" ry="2" />
+<text  x="460.31" y="319.5" ></text>
+</g>
+<g >
+<title>std::map&lt;ns3::LteSpectrumModelId, ns3::Ptr&lt;ns3::SpectrumModel&gt;, std::less&lt;ns3::LteSpectrumModelId&gt;, std::allocator&lt;std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt; &gt; &gt;::find (1,471,073 samples, 0.15%)</title><rect x="675.4" y="485" width="1.2" height="15.0" fill="rgb(226,100,24)" rx="2" ry="2" />
+<text  x="678.40" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt; std::map&lt;unsigned short, ns3::DlInfoListElement_s, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt; &gt;::emplace_hint&lt;std::pair&lt;unsigned short, ns3::DlInfoListElement_s&gt; &gt; (2,130,125 samples, 0.22%)</title><rect x="503.1" y="533" width="1.7" height="15.0" fill="rgb(219,67,16)" rx="2" ry="2" />
+<text  x="506.08" y="543.5" ></text>
+</g>
+<g >
+<title>int* std::copy&lt;__gnu_cxx::__normal_iterator&lt;int const*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt;, int*&gt; (798,977 samples, 0.08%)</title><rect x="698.5" y="485" width="0.7" height="15.0" fill="rgb(215,50,12)" rx="2" ry="2" />
+<text  x="701.51" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::LteSpectrumModelId, std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt;, std::_Select1st&lt;std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt; &gt;, std::less&lt;ns3::LteSpectrumModelId&gt;, std::allocator&lt;std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt; &gt; &gt;::_M_mbegin (165,062 samples, 0.02%)</title><rect x="55.1" y="437" width="0.1" height="15.0" fill="rgb(229,111,26)" rx="2" ry="2" />
+<text  x="58.06" y="447.5" ></text>
+</g>
+<g >
+<title>std::_List_node&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt;* std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::_M_create_node&lt;ns3::Ptr&lt;ns3::Packet&gt; const&amp;&gt; (191,353 samples, 0.02%)</title><rect x="118.5" y="453" width="0.2" height="15.0" fill="rgb(211,30,7)" rx="2" ry="2" />
+<text  x="121.50" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;::vector (710,293 samples, 0.07%)</title><rect x="591.5" y="277" width="0.6" height="15.0" fill="rgb(249,203,48)" rx="2" ry="2" />
+<text  x="594.49" y="287.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt;::vector (4,008,340 samples, 0.41%)</title><rect x="258.7" y="389" width="3.2" height="15.0" fill="rgb(210,23,5)" rx="2" ry="2" />
+<text  x="261.70" y="399.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::CeBitmap_e, std::allocator&lt;ns3::CeBitmap_e&gt; &gt;::vector (1,179,363 samples, 0.12%)</title><rect x="203.7" y="405" width="1.0" height="15.0" fill="rgb(209,19,4)" rx="2" ry="2" />
+<text  x="206.72" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::CalculateDistance (630,060 samples, 0.06%)</title><rect x="739.8" y="501" width="0.5" height="15.0" fill="rgb(213,40,9)" rx="2" ry="2" />
+<text  x="742.81" y="511.5" ></text>
+</g>
+<g >
+<title>[libm.so.6] (270,399 samples, 0.03%)</title><rect x="227.1" y="453" width="0.2" height="15.0" fill="rgb(208,16,4)" rx="2" ry="2" />
+<text  x="230.10" y="463.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt; &gt;::_M_ptr (317,676 samples, 0.03%)</title><rect x="183.7" y="453" width="0.2" height="15.0" fill="rgb(242,170,40)" rx="2" ry="2" />
+<text  x="186.67" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Function_handler&lt;void  (4,103,031 samples, 0.42%)</title><rect x="418.1" y="501" width="3.3" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="421.09" y="511.5" ></text>
+</g>
+<g >
+<title>decltype  (426,539 samples, 0.04%)</title><rect x="335.0" y="325" width="0.3" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="337.95" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue&gt;::Ptr (205,997 samples, 0.02%)</title><rect x="61.5" y="533" width="0.1" height="15.0" fill="rgb(220,73,17)" rx="2" ry="2" />
+<text  x="64.47" y="543.5" ></text>
+</g>
+<g >
+<title>double* std::__uninitialized_default_n_a&lt;double*, unsigned long, double&gt; (363,863 samples, 0.04%)</title><rect x="718.5" y="421" width="0.3" height="15.0" fill="rgb(248,199,47)" rx="2" ry="2" />
+<text  x="721.54" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt; &gt; &gt;::_M_mbegin (279,426 samples, 0.03%)</title><rect x="433.2" y="277" width="0.3" height="15.0" fill="rgb(213,39,9)" rx="2" ry="2" />
+<text  x="436.23" y="287.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_M_deallocate (163,066 samples, 0.02%)</title><rect x="773.3" y="405" width="0.2" height="15.0" fill="rgb(240,162,38)" rx="2" ry="2" />
+<text  x="776.33" y="415.5" ></text>
+</g>
+<g >
+<title>decltype  (523,193 samples, 0.05%)</title><rect x="547.1" y="53" width="0.5" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="550.15" y="63.5" ></text>
+</g>
+<g >
+<title>std::tuple_element&lt;0ul, std::pair&lt;unsigned int const&amp;, ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp;&gt; &gt;::type&amp;&amp; std::get&lt;0ul, unsigned int const&amp;, ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp;&gt; (187,049 samples, 0.02%)</title><rect x="333.0" y="485" width="0.1" height="15.0" fill="rgb(232,124,29)" rx="2" ry="2" />
+<text  x="335.99" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::ByteTagList::Add (192,525 samples, 0.02%)</title><rect x="18.7" y="389" width="0.2" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="21.70" y="399.5" ></text>
+</g>
+<g >
+<title>malloc (195,119 samples, 0.02%)</title><rect x="284.6" y="501" width="0.2" height="15.0" fill="rgb(230,119,28)" rx="2" ry="2" />
+<text  x="287.60" y="511.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;::__normal_iterator (221,184 samples, 0.02%)</title><rect x="714.7" y="453" width="0.2" height="15.0" fill="rgb(215,50,12)" rx="2" ry="2" />
+<text  x="717.68" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::PhichListElement_s, std::allocator&lt;ns3::PhichListElement_s&gt; &gt;::_M_create_storage (228,237 samples, 0.02%)</title><rect x="227.7" y="421" width="0.2" height="15.0" fill="rgb(207,10,2)" rx="2" ry="2" />
+<text  x="230.69" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::RlcTag::RlcTag (497,992 samples, 0.05%)</title><rect x="560.2" y="261" width="0.4" height="15.0" fill="rgb(228,109,26)" rx="2" ry="2" />
+<text  x="563.19" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumModel const&gt;::Ptr (510,728 samples, 0.05%)</title><rect x="411.5" y="501" width="0.4" height="15.0" fill="rgb(232,125,30)" rx="2" ry="2" />
+<text  x="414.48" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::PfFfMacScheduler::UpdateUlRlcBufferInfo (315,273 samples, 0.03%)</title><rect x="234.3" y="485" width="0.2" height="15.0" fill="rgb(235,140,33)" rx="2" ry="2" />
+<text  x="237.25" y="495.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::construct&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, unsigned int const&amp;, ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp;&gt; (466,275 samples, 0.05%)</title><rect x="658.8" y="421" width="0.4" height="15.0" fill="rgb(254,229,54)" rx="2" ry="2" />
+<text  x="661.79" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter&gt;::GetReferenceCount (169,090 samples, 0.02%)</title><rect x="543.2" y="261" width="0.1" height="15.0" fill="rgb(218,61,14)" rx="2" ry="2" />
+<text  x="546.21" y="271.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;0ul, ns3::LteInterference*, ns3::Ptr&lt;ns3::SpectrumValue const&gt;, unsigned int&gt;::_Tuple_impl (927,227 samples, 0.10%)</title><rect x="711.8" y="389" width="0.7" height="15.0" fill="rgb(212,36,8)" rx="2" ry="2" />
+<text  x="714.80" y="399.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_List_base (611,762 samples, 0.06%)</title><rect x="619.7" y="517" width="0.5" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="622.69" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::Divide (328,607 samples, 0.03%)</title><rect x="606.1" y="501" width="0.3" height="15.0" fill="rgb(239,160,38)" rx="2" ry="2" />
+<text  x="609.12" y="511.5" ></text>
+</g>
+<g >
+<title>std::less&lt;unsigned int&gt;::operator (139,969 samples, 0.01%)</title><rect x="650.9" y="453" width="0.1" height="15.0" fill="rgb(236,146,35)" rx="2" ry="2" />
+<text  x="653.91" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Angles::Angles (1,300,079 samples, 0.13%)</title><rect x="65.5" y="517" width="1.0" height="15.0" fill="rgb(254,226,54)" rx="2" ry="2" />
+<text  x="68.48" y="527.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;::_List_impl::_List_impl (264,942 samples, 0.03%)</title><rect x="110.0" y="485" width="0.2" height="15.0" fill="rgb(239,159,38)" rx="2" ry="2" />
+<text  x="113.00" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumSignalParameters::~SpectrumSignalParameters (209,441 samples, 0.02%)</title><rect x="775.5" y="389" width="0.1" height="15.0" fill="rgb(205,2,0)" rx="2" ry="2" />
+<text  x="778.46" y="399.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::~_List_base (199,131 samples, 0.02%)</title><rect x="381.0" y="309" width="0.2" height="15.0" fill="rgb(236,146,35)" rx="2" ry="2" />
+<text  x="384.03" y="319.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_clear (277,280 samples, 0.03%)</title><rect x="463.7" y="341" width="0.2" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="466.71" y="351.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;* std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_create_node&lt;std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (403,625 samples, 0.04%)</title><rect x="706.4" y="389" width="0.4" height="15.0" fill="rgb(217,56,13)" rx="2" ry="2" />
+<text  x="709.45" y="399.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt;::_M_range_check (157,947 samples, 0.02%)</title><rect x="420.3" y="325" width="0.1" height="15.0" fill="rgb(250,207,49)" rx="2" ry="2" />
+<text  x="423.31" y="335.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt;::_M_range_check (125,858 samples, 0.01%)</title><rect x="457.0" y="293" width="0.1" height="15.0" fill="rgb(209,21,5)" rx="2" ry="2" />
+<text  x="459.99" y="303.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::SbMeasResult_s&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::SbMeasResult_s&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::SbMeasResult_s&gt; &gt; &gt;::_M_begin (155,977 samples, 0.02%)</title><rect x="185.4" y="453" width="0.2" height="15.0" fill="rgb(248,200,47)" rx="2" ry="2" />
+<text  x="188.43" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_S_key (198,414 samples, 0.02%)</title><rect x="332.3" y="437" width="0.2" height="15.0" fill="rgb(244,182,43)" rx="2" ry="2" />
+<text  x="335.33" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Packet::Packet (229,600 samples, 0.02%)</title><rect x="15.5" y="357" width="0.2" height="15.0" fill="rgb(230,115,27)" rx="2" ry="2" />
+<text  x="18.49" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue const&gt;::Ptr (156,961 samples, 0.02%)</title><rect x="706.0" y="501" width="0.1" height="15.0" fill="rgb(254,229,54)" rx="2" ry="2" />
+<text  x="708.97" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::CqiListElement_s* std::__do_uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::CqiListElement_s*, std::vector&lt;ns3::CqiListElement_s, std::allocator&lt;ns3::CqiListElement_s&gt; &gt; &gt;, ns3::CqiListElement_s*&gt; (3,635,299 samples, 0.37%)</title><rect x="124.4" y="437" width="3.0" height="15.0" fill="rgb(253,224,53)" rx="2" ry="2" />
+<text  x="127.44" y="447.5" ></text>
+</g>
+<g >
+<title>double* std::__copy_move_a2&lt;false, double const*, double*&gt; (193,414 samples, 0.02%)</title><rect x="719.4" y="405" width="0.2" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="722.44" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt;::operator= (707,699 samples, 0.07%)</title><rect x="612.8" y="549" width="0.5" height="15.0" fill="rgb(219,65,15)" rx="2" ry="2" />
+<text  x="615.78" y="559.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultDeleter&lt;ns3::LteControlMessage&gt;::Delete (269,841 samples, 0.03%)</title><rect x="497.4" y="453" width="0.2" height="15.0" fill="rgb(224,87,20)" rx="2" ry="2" />
+<text  x="500.37" y="463.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, bool&gt;::pair (270,035 samples, 0.03%)</title><rect x="338.4" y="437" width="0.2" height="15.0" fill="rgb(252,220,52)" rx="2" ry="2" />
+<text  x="341.42" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::HarqProcessInfoElement_t* std::copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::HarqProcessInfoElement_t const*, std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt;, ns3::HarqProcessInfoElement_t*&gt; (1,442,310 samples, 0.15%)</title><rect x="512.5" y="485" width="1.2" height="15.0" fill="rgb(247,195,46)" rx="2" ry="2" />
+<text  x="515.50" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;::_M_erase (576,036 samples, 0.06%)</title><rect x="119.7" y="501" width="0.5" height="15.0" fill="rgb(223,86,20)" rx="2" ry="2" />
+<text  x="122.74" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;5ul, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::_M_head (542,473 samples, 0.06%)</title><rect x="757.6" y="565" width="0.4" height="15.0" fill="rgb(252,219,52)" rx="2" ry="2" />
+<text  x="760.56" y="575.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::DlDciLteControlMessage&gt; ns3::Create&lt;ns3::DlDciLteControlMessage&gt; (1,498,907 samples, 0.15%)</title><rect x="158.9" y="453" width="1.3" height="15.0" fill="rgb(243,176,42)" rx="2" ry="2" />
+<text  x="161.95" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::~_Vector_base (195,505 samples, 0.02%)</title><rect x="409.4" y="501" width="0.1" height="15.0" fill="rgb(223,86,20)" rx="2" ry="2" />
+<text  x="412.36" y="511.5" ></text>
+</g>
+<g >
+<title>decltype  (460,852 samples, 0.05%)</title><rect x="595.7" y="181" width="0.4" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="598.69" y="191.5" ></text>
+</g>
+<g >
+<title>ns3::FfMacSchedSapProvider::SchedDlRlcBufferReqParameters::~SchedDlRlcBufferReqParameters (747,290 samples, 0.08%)</title><rect x="24.8" y="341" width="0.6" height="15.0" fill="rgb(226,97,23)" rx="2" ry="2" />
+<text  x="27.76" y="351.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_lower_bound (446,361 samples, 0.05%)</title><rect x="707.3" y="405" width="0.4" height="15.0" fill="rgb(229,113,27)" rx="2" ry="2" />
+<text  x="710.31" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultSimulatorImpl::Run (5,321,712 samples, 0.55%)</title><rect x="11.2" y="773" width="4.3" height="15.0" fill="rgb(207,11,2)" rx="2" ry="2" />
+<text  x="14.17" y="783.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, ns3::SbMeasResult_s, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::SbMeasResult_s&gt; &gt; &gt;::find (231,252 samples, 0.02%)</title><rect x="94.1" y="469" width="0.2" height="15.0" fill="rgb(242,171,40)" rx="2" ry="2" />
+<text  x="97.09" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::ByteTagList::Iterator::HasNext (195,833 samples, 0.02%)</title><rect x="424.5" y="229" width="0.1" height="15.0" fill="rgb(222,78,18)" rx="2" ry="2" />
+<text  x="427.46" y="239.5" ></text>
+</g>
+<g >
+<title>ns3::EventImpl* ns3::PeekPointer&lt;ns3::EventImpl&gt; (342,386 samples, 0.04%)</title><rect x="38.9" y="693" width="0.2" height="15.0" fill="rgb(242,171,40)" rx="2" ry="2" />
+<text  x="41.86" y="703.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::map (196,880 samples, 0.02%)</title><rect x="668.1" y="485" width="0.2" height="15.0" fill="rgb(242,171,40)" rx="2" ry="2" />
+<text  x="671.10" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt; &gt;::_S_key (490,279 samples, 0.05%)</title><rect x="566.0" y="181" width="0.4" height="15.0" fill="rgb(230,116,27)" rx="2" ry="2" />
+<text  x="569.02" y="191.5" ></text>
+</g>
+<g >
+<title>ns3::UlCqi_s::UlCqi_s (409,983 samples, 0.04%)</title><rect x="477.9" y="293" width="0.3" height="15.0" fill="rgb(243,175,41)" rx="2" ry="2" />
+<text  x="480.85" y="303.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt; &gt;::_M_end (160,556 samples, 0.02%)</title><rect x="650.2" y="469" width="0.1" height="15.0" fill="rgb(243,176,42)" rx="2" ry="2" />
+<text  x="653.18" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt; &gt;::_M_begin (529,260 samples, 0.05%)</title><rect x="320.4" y="453" width="0.5" height="15.0" fill="rgb(212,35,8)" rx="2" ry="2" />
+<text  x="323.44" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt;::Acquire (155,703 samples, 0.02%)</title><rect x="164.1" y="437" width="0.2" height="15.0" fill="rgb(209,22,5)" rx="2" ry="2" />
+<text  x="167.13" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::RlcPduListElement_s* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::RlcPduListElement_s const*, std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt;, ns3::RlcPduListElement_s*&gt; (214,687 samples, 0.02%)</title><rect x="101.6" y="373" width="0.2" height="15.0" fill="rgb(252,217,51)" rx="2" ry="2" />
+<text  x="104.59" y="383.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt; &gt;::allocate (270,834 samples, 0.03%)</title><rect x="108.6" y="373" width="0.2" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="111.56" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::HarqProcessInfoElement_t* std::__copy_move&lt;false, true, std::random_access_iterator_tag&gt;::__copy_m&lt;ns3::HarqProcessInfoElement_t const, ns3::HarqProcessInfoElement_t&gt; (219,081 samples, 0.02%)</title><rect x="353.6" y="357" width="0.1" height="15.0" fill="rgb(248,202,48)" rx="2" ry="2" />
+<text  x="356.57" y="367.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt; &gt;::_S_key (234,707 samples, 0.02%)</title><rect x="29.3" y="325" width="0.2" height="15.0" fill="rgb(230,116,27)" rx="2" ry="2" />
+<text  x="32.28" y="335.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned int const, ns3::RxSpectrumModelInfo&gt; &gt;::_M_ptr (218,859 samples, 0.02%)</title><rect x="657.0" y="469" width="0.1" height="15.0" fill="rgb(239,156,37)" rx="2" ry="2" />
+<text  x="659.95" y="479.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_get_Node_allocator (129,372 samples, 0.01%)</title><rect x="576.3" y="325" width="0.1" height="15.0" fill="rgb(232,126,30)" rx="2" ry="2" />
+<text  x="579.26" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultSimulatorImpl::ProcessOneEvent (2,105,662 samples, 0.22%)</title><rect x="15.5" y="741" width="1.6" height="15.0" fill="rgb(211,30,7)" rx="2" ry="2" />
+<text  x="18.45" y="751.5" ></text>
+</g>
+<g >
+<title>std::__detail::_List_node_header::_List_node_header (266,882 samples, 0.03%)</title><rect x="619.9" y="485" width="0.3" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="622.94" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;unsigned short&gt;::_M_valptr (317,657 samples, 0.03%)</title><rect x="395.6" y="485" width="0.2" height="15.0" fill="rgb(211,28,6)" rx="2" ry="2" />
+<text  x="398.56" y="495.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;unsigned long&gt;::allocate (271,783 samples, 0.03%)</title><rect x="198.0" y="389" width="0.3" height="15.0" fill="rgb(241,167,40)" rx="2" ry="2" />
+<text  x="201.04" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::MakeEvent&lt;void  (2,347,913 samples, 0.24%)</title><rect x="306.0" y="485" width="1.9" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="309.03" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::TagBuffer::Write (152,668 samples, 0.02%)</title><rect x="13.9" y="373" width="0.1" height="15.0" fill="rgb(229,114,27)" rx="2" ry="2" />
+<text  x="16.86" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt; ns3::CompleteConstruct&lt;ns3::PacketBurst&gt; (4,272,760 samples, 0.44%)</title><rect x="629.9" y="517" width="3.4" height="15.0" fill="rgb(212,33,7)" rx="2" ry="2" />
+<text  x="632.88" y="527.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, unsigned char*&gt; (500,842 samples, 0.05%)</title><rect x="214.2" y="437" width="0.4" height="15.0" fill="rgb(227,104,25)" rx="2" ry="2" />
+<text  x="217.21" y="447.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy_aux&lt;true&gt;::__destroy&lt;int*&gt; (161,562 samples, 0.02%)</title><rect x="575.3" y="309" width="0.1" height="15.0" fill="rgb(229,111,26)" rx="2" ry="2" />
+<text  x="578.30" y="319.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;bool, std::allocator&lt;bool&gt; &gt;::size (396,527 samples, 0.04%)</title><rect x="198.8" y="421" width="0.3" height="15.0" fill="rgb(208,17,4)" rx="2" ry="2" />
+<text  x="201.76" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::UlCqi_s::UlCqi_s (234,034 samples, 0.02%)</title><rect x="474.0" y="229" width="0.2" height="15.0" fill="rgb(243,175,41)" rx="2" ry="2" />
+<text  x="476.98" y="239.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::DlInfoListElement_s (285,025 samples, 0.03%)</title><rect x="420.8" y="325" width="0.2" height="15.0" fill="rgb(231,119,28)" rx="2" ry="2" />
+<text  x="423.77" y="335.5" ></text>
+</g>
+<g >
+<title>void std::__fill_a&lt;unsigned short*, unsigned short&gt; (375,815 samples, 0.04%)</title><rect x="252.4" y="373" width="0.3" height="15.0" fill="rgb(242,173,41)" rx="2" ry="2" />
+<text  x="255.44" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Packet&gt;::Ptr (235,499 samples, 0.02%)</title><rect x="551.8" y="245" width="0.1" height="15.0" fill="rgb(230,117,28)" rx="2" ry="2" />
+<text  x="554.75" y="255.5" ></text>
+</g>
+<g >
+<title>std::_Bind&lt;void  (411,266 samples, 0.04%)</title><rect x="87.6" y="421" width="0.4" height="15.0" fill="rgb(253,221,52)" rx="2" ry="2" />
+<text  x="90.62" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, double&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, double&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, double&gt; &gt; &gt;::_M_lower_bound (1,329,957 samples, 0.14%)</title><rect x="295.0" y="501" width="1.0" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="297.97" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::HarqProcessInfoElement_t* std::__uninitialized_copy&lt;true&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::HarqProcessInfoElement_t const*, std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt;, ns3::HarqProcessInfoElement_t*&gt; (489,523 samples, 0.05%)</title><rect x="524.9" y="293" width="0.4" height="15.0" fill="rgb(238,156,37)" rx="2" ry="2" />
+<text  x="527.94" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::Packet::RemovePacketTag (390,797 samples, 0.04%)</title><rect x="435.2" y="325" width="0.3" height="15.0" fill="rgb(227,103,24)" rx="2" ry="2" />
+<text  x="438.22" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::operator/ (819,512 samples, 0.08%)</title><rect x="413.9" y="533" width="0.7" height="15.0" fill="rgb(218,63,15)" rx="2" ry="2" />
+<text  x="416.91" y="543.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;::_M_clear (151,843 samples, 0.02%)</title><rect x="121.4" y="501" width="0.1" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="124.39" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::DoDispose (1,317,063 samples, 0.14%)</title><rect x="75.6" y="373" width="1.1" height="15.0" fill="rgb(242,172,41)" rx="2" ry="2" />
+<text  x="78.64" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::EventImpl&gt;::~Ptr (234,471 samples, 0.02%)</title><rect x="637.9" y="485" width="0.2" height="15.0" fill="rgb(225,92,22)" rx="2" ry="2" />
+<text  x="640.87" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::_M_check_len (230,064 samples, 0.02%)</title><rect x="102.2" y="421" width="0.2" height="15.0" fill="rgb(234,133,31)" rx="2" ry="2" />
+<text  x="105.23" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::_M_get_Tp_allocator (246,077 samples, 0.03%)</title><rect x="480.6" y="229" width="0.2" height="15.0" fill="rgb(208,16,4)" rx="2" ry="2" />
+<text  x="483.59" y="239.5" ></text>
+</g>
+<g >
+<title>[libc.so.6] (278,891 samples, 0.03%)</title><rect x="325.5" y="325" width="0.3" height="15.0" fill="rgb(223,84,20)" rx="2" ry="2" />
+<text  x="328.54" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::HarqProcessInfoElement_t* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;ns3::HarqProcessInfoElement_t const*, std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt;, ns3::HarqProcessInfoElement_t*, ns3::HarqProcessInfoElement_t&gt; (185,369 samples, 0.02%)</title><rect x="117.4" y="453" width="0.1" height="15.0" fill="rgb(252,220,52)" rx="2" ry="2" />
+<text  x="120.37" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;bool, std::allocator&lt;bool&gt; &gt;::_M_range_check (163,820 samples, 0.02%)</title><rect x="246.5" y="469" width="0.2" height="15.0" fill="rgb(246,188,45)" rx="2" ry="2" />
+<text  x="249.52" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::_S_check_init_len (173,024 samples, 0.02%)</title><rect x="57.5" y="453" width="0.1" height="15.0" fill="rgb(233,130,31)" rx="2" ry="2" />
+<text  x="60.46" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Packet&gt;::~Ptr (1,114,557 samples, 0.11%)</title><rect x="652.8" y="293" width="0.9" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="655.79" y="303.5" ></text>
+</g>
+<g >
+<title>cfree (311,874 samples, 0.03%)</title><rect x="770.2" y="677" width="0.3" height="15.0" fill="rgb(223,86,20)" rx="2" ry="2" />
+<text  x="773.23" y="687.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;::_M_ptr (164,853 samples, 0.02%)</title><rect x="507.9" y="469" width="0.1" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="510.87" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::PfFfMacScheduler::DoSchedDlTriggerReq (9,997,060 samples, 1.03%)</title><rect x="94.5" y="485" width="8.1" height="15.0" fill="rgb(214,45,10)" rx="2" ry="2" />
+<text  x="97.52" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Simulator::GetSystemId (350,974 samples, 0.04%)</title><rect x="154.3" y="357" width="0.2" height="15.0" fill="rgb(235,141,33)" rx="2" ry="2" />
+<text  x="157.26" y="367.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::at (220,871 samples, 0.02%)</title><rect x="216.7" y="485" width="0.2" height="15.0" fill="rgb(251,215,51)" rx="2" ry="2" />
+<text  x="219.75" y="495.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::DlInfoListElement_s&gt; (734,784 samples, 0.08%)</title><rect x="132.5" y="437" width="0.6" height="15.0" fill="rgb(237,147,35)" rx="2" ry="2" />
+<text  x="135.49" y="447.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::~list (200,616 samples, 0.02%)</title><rect x="77.9" y="437" width="0.2" height="15.0" fill="rgb(222,80,19)" rx="2" ry="2" />
+<text  x="80.92" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_M_erase (474,320 samples, 0.05%)</title><rect x="394.3" y="437" width="0.4" height="15.0" fill="rgb(227,102,24)" rx="2" ry="2" />
+<text  x="397.32" y="447.5" ></text>
+</g>
+<g >
+<title>decltype  (292,988 samples, 0.03%)</title><rect x="582.4" y="277" width="0.2" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="585.41" y="287.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;* std::__copy_move_a2&lt;true, std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;*, std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;*&gt; (148,381 samples, 0.02%)</title><rect x="117.1" y="437" width="0.1" height="15.0" fill="rgb(215,49,11)" rx="2" ry="2" />
+<text  x="120.11" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;0ul, ns3::LteEnbPhy*, ns3::Ptr&lt;ns3::PacketBurst&gt; &gt;::_Tuple_impl&lt;ns3::LteEnbPhy*&amp;, ns3::Ptr&lt;ns3::PacketBurst&gt;&amp;, void&gt; (814,172 samples, 0.08%)</title><rect x="282.1" y="453" width="0.7" height="15.0" fill="rgb(219,68,16)" rx="2" ry="2" />
+<text  x="285.10" y="463.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;std::__strip_reference_wrapper&lt;std::decay&lt;ns3::Scheduler::EventKey const&amp;&gt;::type&gt;::__type, std::__strip_reference_wrapper&lt;std::decay&lt;ns3::EventImpl* const&amp;&gt;::type&gt;::__type&gt; std::make_pair&lt;ns3::Scheduler::EventKey const&amp;, ns3::EventImpl* const&amp;&gt; (240,322 samples, 0.02%)</title><rect x="338.6" y="437" width="0.2" height="15.0" fill="rgb(235,141,33)" rx="2" ry="2" />
+<text  x="341.64" y="447.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::push_back (696,056 samples, 0.07%)</title><rect x="598.2" y="277" width="0.6" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="601.21" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::LteUePhy::SetSubChannelsForReception (725,734 samples, 0.07%)</title><rect x="531.1" y="357" width="0.6" height="15.0" fill="rgb(250,208,49)" rx="2" ry="2" />
+<text  x="534.09" y="367.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::_M_default_initialize (267,489 samples, 0.03%)</title><rect x="111.9" y="421" width="0.2" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="114.93" y="431.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::push_back (1,055,032 samples, 0.11%)</title><rect x="572.4" y="357" width="0.9" height="15.0" fill="rgb(225,94,22)" rx="2" ry="2" />
+<text  x="575.43" y="367.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::TbId_t, std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::_Select1st&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::_S_right (157,484 samples, 0.02%)</title><rect x="506.6" y="501" width="0.1" height="15.0" fill="rgb(244,183,43)" rx="2" ry="2" />
+<text  x="509.56" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Simulator::Now (240,092 samples, 0.02%)</title><rect x="485.3" y="501" width="0.2" height="15.0" fill="rgb(240,164,39)" rx="2" ry="2" />
+<text  x="488.33" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::HarqProcessInfoElement_t* std::__uninitialized_copy&lt;true&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::HarqProcessInfoElement_t const*, std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt;, ns3::HarqProcessInfoElement_t*&gt; (1,522,938 samples, 0.16%)</title><rect x="512.4" y="501" width="1.3" height="15.0" fill="rgb(238,156,37)" rx="2" ry="2" />
+<text  x="515.43" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;* std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_copy&lt;false, std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_Alloc_node&gt; (458,139 samples, 0.05%)</title><rect x="668.5" y="437" width="0.3" height="15.0" fill="rgb(251,212,50)" rx="2" ry="2" />
+<text  x="671.47" y="447.5" ></text>
+</g>
+<g >
+<title>std::_List_node&lt;ns3::UlDciLteControlMessage&gt;::_M_valptr (437,168 samples, 0.05%)</title><rect x="392.9" y="501" width="0.4" height="15.0" fill="rgb(233,129,30)" rx="2" ry="2" />
+<text  x="395.93" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Simulator::ScheduleWithContext (475,136 samples, 0.05%)</title><rect x="115.9" y="469" width="0.4" height="15.0" fill="rgb(230,116,27)" rx="2" ry="2" />
+<text  x="118.94" y="479.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned int, ns3::RxSpectrumModelInfo, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::RxSpectrumModelInfo&gt; &gt; &gt;::begin (243,486 samples, 0.03%)</title><rect x="80.7" y="517" width="0.2" height="15.0" fill="rgb(238,153,36)" rx="2" ry="2" />
+<text  x="83.70" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::NoOpComponentCarrierManager::DoNotifyTxOpportunity (2,715,978 samples, 0.28%)</title><rect x="17.2" y="453" width="2.2" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="20.17" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::LteRlcSm::DoNotifyTxOpportunity (192,143 samples, 0.02%)</title><rect x="96.2" y="389" width="0.2" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="99.20" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::Object::SetTypeId (397,305 samples, 0.04%)</title><rect x="632.7" y="501" width="0.3" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="635.68" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::HigherLayerSelected_s* std::__relocate_a_1&lt;ns3::HigherLayerSelected_s*, ns3::HigherLayerSelected_s*, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt; (1,090,256 samples, 0.11%)</title><rect x="595.3" y="229" width="0.9" height="15.0" fill="rgb(235,141,33)" rx="2" ry="2" />
+<text  x="598.35" y="239.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::SpectrumValue (3,551,632 samples, 0.37%)</title><rect x="299.4" y="469" width="2.9" height="15.0" fill="rgb(211,27,6)" rx="2" ry="2" />
+<text  x="302.45" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;ns3::UlDciListElement_s, std::allocator&lt;ns3::UlDciListElement_s&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;ns3::UlDciListElement_s, std::allocator&lt;ns3::UlDciListElement_s&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;ns3::UlDciListElement_s, std::allocator&lt;ns3::UlDciListElement_s&gt; &gt; &gt; &gt; &gt;::_M_begin (429,634 samples, 0.04%)</title><rect x="240.8" y="453" width="0.4" height="15.0" fill="rgb(253,221,52)" rx="2" ry="2" />
+<text  x="243.81" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt;::size (195,796 samples, 0.02%)</title><rect x="144.9" y="437" width="0.2" height="15.0" fill="rgb(213,39,9)" rx="2" ry="2" />
+<text  x="147.94" y="447.5" ></text>
+</g>
+<g >
+<title>unsigned short&amp; std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::emplace_back&lt;unsigned short&gt; (3,153,700 samples, 0.33%)</title><rect x="478.9" y="293" width="2.5" height="15.0" fill="rgb(214,44,10)" rx="2" ry="2" />
+<text  x="481.89" y="303.5" ></text>
+</g>
+<g >
+<title>std::_Function_base::~_Function_base (194,457 samples, 0.02%)</title><rect x="727.7" y="405" width="0.1" height="15.0" fill="rgb(221,74,17)" rx="2" ry="2" />
+<text  x="730.69" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::EnbMemberLteEnbPhySapProvider::SendLteControlMessage (851,386 samples, 0.09%)</title><rect x="230.2" y="453" width="0.6" height="15.0" fill="rgb(253,222,53)" rx="2" ry="2" />
+<text  x="233.16" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteSpectrumSignalParametersDlCtrlFrame&gt; ns3::Create&lt;ns3::LteSpectrumSignalParametersDlCtrlFrame, ns3::LteSpectrumSignalParametersDlCtrlFrame const&amp;&gt; (729,950 samples, 0.08%)</title><rect x="113.8" y="469" width="0.6" height="15.0" fill="rgb(242,171,41)" rx="2" ry="2" />
+<text  x="116.83" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::LteRadioBearerTag::~LteRadioBearerTag (181,554 samples, 0.02%)</title><rect x="561.2" y="197" width="0.2" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="564.24" y="207.5" ></text>
+</g>
+<g >
+<title>ns3::DlDciListElement_s::DlDciListElement_s (964,763 samples, 0.10%)</title><rect x="159.0" y="421" width="0.8" height="15.0" fill="rgb(233,129,30)" rx="2" ry="2" />
+<text  x="161.98" y="431.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;signed char, std::allocator&lt;signed char&gt; &gt;::push_back (934,973 samples, 0.10%)</title><rect x="532.8" y="341" width="0.8" height="15.0" fill="rgb(248,200,48)" rx="2" ry="2" />
+<text  x="535.84" y="351.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt; &gt;::find (270,008 samples, 0.03%)</title><rect x="17.7" y="357" width="0.2" height="15.0" fill="rgb(225,93,22)" rx="2" ry="2" />
+<text  x="20.67" y="367.5" ></text>
+</g>
+<g >
+<title>modff64x (194,496 samples, 0.02%)</title><rect x="684.1" y="469" width="0.1" height="15.0" fill="rgb(218,62,14)" rx="2" ry="2" />
+<text  x="687.05" y="479.5" ></text>
+</g>
+<g >
+<title>pthread_self (192,757 samples, 0.02%)</title><rect x="280.0" y="485" width="0.2" height="15.0" fill="rgb(241,169,40)" rx="2" ry="2" />
+<text  x="283.00" y="495.5" ></text>
+</g>
+<g >
+<title>std::map&lt;ns3::Scheduler::EventKey, ns3::EventImpl*, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::lower_bound (152,705 samples, 0.02%)</title><rect x="116.1" y="405" width="0.1" height="15.0" fill="rgb(238,153,36)" rx="2" ry="2" />
+<text  x="119.06" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumSignalParametersDataFrame::LteSpectrumSignalParametersDataFrame (1,650,971 samples, 0.17%)</title><rect x="669.3" y="517" width="1.3" height="15.0" fill="rgb(206,8,1)" rx="2" ry="2" />
+<text  x="672.26" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::Object::~Object (853,448 samples, 0.09%)</title><rect x="164.8" y="357" width="0.6" height="15.0" fill="rgb(229,110,26)" rx="2" ry="2" />
+<text  x="167.76" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::NoOpComponentCarrierManager::DoTransmitPdu (549,181 samples, 0.06%)</title><rect x="15.9" y="373" width="0.4" height="15.0" fill="rgb(228,110,26)" rx="2" ry="2" />
+<text  x="18.88" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::_Rb_tree_impl&lt;std::less&lt;unsigned short&gt;, true&gt;::_Rb_tree_impl (893,299 samples, 0.09%)</title><rect x="189.9" y="453" width="0.7" height="15.0" fill="rgb(233,129,30)" rx="2" ry="2" />
+<text  x="192.92" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbMac::DoDlInfoListElementHarqFeedback (13,820,039 samples, 1.43%)</title><rect x="446.0" y="325" width="11.1" height="15.0" fill="rgb(209,20,4)" rx="2" ry="2" />
+<text  x="448.97" y="335.5" ></text>
+</g>
+<g >
+<title>int* std::__uninitialized_copy&lt;true&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;int const*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt;, int*&gt; (268,424 samples, 0.03%)</title><rect x="91.1" y="501" width="0.2" height="15.0" fill="rgb(207,11,2)" rx="2" ry="2" />
+<text  x="94.12" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::MobilityModel&gt;::Acquire (151,917 samples, 0.02%)</title><rect x="643.9" y="485" width="0.1" height="15.0" fill="rgb(253,222,53)" rx="2" ry="2" />
+<text  x="646.92" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::vector (2,848,710 samples, 0.29%)</title><rect x="238.0" y="293" width="2.3" height="15.0" fill="rgb(239,156,37)" rx="2" ry="2" />
+<text  x="241.03" y="303.5" ></text>
+</g>
+<g >
+<title>unsigned long* std::__copy_move_a1&lt;false, unsigned long*, unsigned long*&gt; (267,936 samples, 0.03%)</title><rect x="199.7" y="389" width="0.2" height="15.0" fill="rgb(233,129,31)" rx="2" ry="2" />
+<text  x="202.67" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Head_base&lt;0ul, ns3::LteEnbPhy*, false&gt;::_M_head (157,244 samples, 0.02%)</title><rect x="752.5" y="549" width="0.1" height="15.0" fill="rgb(214,43,10)" rx="2" ry="2" />
+<text  x="755.52" y="559.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;* std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_M_clone_node&lt;false, std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_Alloc_node&gt; (282,988 samples, 0.03%)</title><rect x="232.5" y="389" width="0.3" height="15.0" fill="rgb(241,167,40)" rx="2" ry="2" />
+<text  x="235.54" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::CqiListElement_s::CqiListElement_s (874,922 samples, 0.09%)</title><rect x="592.3" y="261" width="0.7" height="15.0" fill="rgb(238,156,37)" rx="2" ry="2" />
+<text  x="595.33" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;::Ptr (148,039 samples, 0.02%)</title><rect x="323.6" y="501" width="0.2" height="15.0" fill="rgb(250,208,49)" rx="2" ry="2" />
+<text  x="326.64" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;* std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_copy&lt;false, std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_Alloc_node&gt; (155,456 samples, 0.02%)</title><rect x="341.2" y="405" width="0.2" height="15.0" fill="rgb(251,212,50)" rx="2" ry="2" />
+<text  x="344.24" y="415.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_clear (429,433 samples, 0.04%)</title><rect x="776.1" y="357" width="0.3" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="779.06" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::EventImpl, ns3::Empty, ns3::DefaultDeleter&lt;ns3::EventImpl&gt; &gt;::Unref (572,810 samples, 0.06%)</title><rect x="64.5" y="501" width="0.4" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="67.47" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;::_M_valptr (148,167 samples, 0.02%)</title><rect x="184.4" y="469" width="0.2" height="15.0" fill="rgb(213,39,9)" rx="2" ry="2" />
+<text  x="187.45" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::LteControlMessage, ns3::Empty, ns3::DefaultDeleter&lt;ns3::LteControlMessage&gt; &gt;::Unref (611,218 samples, 0.06%)</title><rect x="609.8" y="469" width="0.5" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="612.77" y="479.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt;::find (1,045,530 samples, 0.11%)</title><rect x="431.9" y="325" width="0.9" height="15.0" fill="rgb(228,106,25)" rx="2" ry="2" />
+<text  x="434.95" y="335.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::MacCeListElement_s, std::allocator&lt;ns3::MacCeListElement_s&gt; &gt;::begin (193,759 samples, 0.02%)</title><rect x="264.2" y="517" width="0.1" height="15.0" fill="rgb(237,149,35)" rx="2" ry="2" />
+<text  x="267.19" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::MacCeListElement_s* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;ns3::MacCeListElement_s*, std::vector&lt;ns3::MacCeListElement_s, std::allocator&lt;ns3::MacCeListElement_s&gt; &gt; &gt;, ns3::MacCeListElement_s*, ns3::MacCeListElement_s&gt; (996,997 samples, 0.10%)</title><rect x="128.7" y="485" width="0.8" height="15.0" fill="rgb(231,122,29)" rx="2" ry="2" />
+<text  x="131.72" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::find (1,211,425 samples, 0.12%)</title><rect x="221.3" y="469" width="1.0" height="15.0" fill="rgb(210,27,6)" rx="2" ry="2" />
+<text  x="224.31" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp; std::__pair_get&lt;1ul&gt;::__move_get&lt;unsigned int const&amp;, ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp;&gt; (152,590 samples, 0.02%)</title><rect x="660.1" y="485" width="0.1" height="15.0" fill="rgb(224,91,21)" rx="2" ry="2" />
+<text  x="663.11" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;bool, std::allocator&lt;bool&gt; &gt;::~vector (827,864 samples, 0.09%)</title><rect x="201.7" y="485" width="0.6" height="15.0" fill="rgb(249,204,48)" rx="2" ry="2" />
+<text  x="204.65" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteControlMessage&gt;&amp; std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::emplace_back&lt;ns3::Ptr&lt;ns3::Sib1LteControlMessage&gt;&amp;&gt; (149,493 samples, 0.02%)</title><rect x="388.6" y="549" width="0.1" height="15.0" fill="rgb(226,98,23)" rx="2" ry="2" />
+<text  x="391.57" y="559.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_M_allocate (707,146 samples, 0.07%)</title><rect x="655.0" y="437" width="0.5" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="657.96" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::MemberSchedSapProvider&lt;ns3::PfFfMacScheduler&gt;::SchedUlCqiInfoReq (821,265 samples, 0.08%)</title><rect x="102.6" y="501" width="0.6" height="15.0" fill="rgb(214,45,10)" rx="2" ry="2" />
+<text  x="105.56" y="511.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::allocate (393,182 samples, 0.04%)</title><rect x="237.6" y="309" width="0.3" height="15.0" fill="rgb(232,126,30)" rx="2" ry="2" />
+<text  x="240.61" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::MemberSchedSapProvider&lt;ns3::PfFfMacScheduler&gt;::SchedUlTriggerReq (3,881,896 samples, 0.40%)</title><rect x="103.3" y="501" width="3.1" height="15.0" fill="rgb(237,148,35)" rx="2" ry="2" />
+<text  x="106.25" y="511.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt; &gt;::deallocate (887,233 samples, 0.09%)</title><rect x="764.3" y="629" width="0.7" height="15.0" fill="rgb(251,212,50)" rx="2" ry="2" />
+<text  x="767.33" y="639.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::operator= (345,577 samples, 0.04%)</title><rect x="114.0" y="405" width="0.3" height="15.0" fill="rgb(243,177,42)" rx="2" ry="2" />
+<text  x="117.02" y="415.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::HigherLayerSelected_s*, ns3::HigherLayerSelected_s&gt; (151,525 samples, 0.02%)</title><rect x="255.6" y="341" width="0.1" height="15.0" fill="rgb(237,150,35)" rx="2" ry="2" />
+<text  x="258.57" y="351.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt;::construct&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; const&amp;&gt; (1,840,875 samples, 0.19%)</title><rect x="211.7" y="453" width="1.5" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="214.74" y="463.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt;::construct&lt;ns3::HigherLayerSelected_s, ns3::HigherLayerSelected_s const&amp;&gt; (366,550 samples, 0.04%)</title><rect x="596.3" y="261" width="0.3" height="15.0" fill="rgb(234,137,32)" rx="2" ry="2" />
+<text  x="599.30" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::MakeEvent&lt;void  (2,859,606 samples, 0.29%)</title><rect x="616.7" y="517" width="2.3" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="619.73" y="527.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;*, std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt; &gt; std::move&lt;__gnu_cxx::__normal_iterator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;*, std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;*, std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt; &gt; &gt; (1,552,993 samples, 0.16%)</title><rect x="621.5" y="501" width="1.2" height="15.0" fill="rgb(254,225,54)" rx="2" ry="2" />
+<text  x="624.49" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Time::GetNanoSeconds (204,211 samples, 0.02%)</title><rect x="555.2" y="229" width="0.2" height="15.0" fill="rgb(241,166,39)" rx="2" ry="2" />
+<text  x="558.21" y="239.5" ></text>
+</g>
+<g >
+<title>ns3::VendorSpecificListElement_s* std::__uninitialized_copy&lt;false&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::VendorSpecificListElement_s const*, std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt; &gt;, ns3::VendorSpecificListElement_s*&gt; (386,345 samples, 0.04%)</title><rect x="144.0" y="405" width="0.4" height="15.0" fill="rgb(227,101,24)" rx="2" ry="2" />
+<text  x="147.04" y="415.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::ByteTagListData*, std::allocator&lt;ns3::ByteTagListData*&gt; &gt;::begin (200,950 samples, 0.02%)</title><rect x="30.4" y="357" width="0.2" height="15.0" fill="rgb(207,12,3)" rx="2" ry="2" />
+<text  x="33.44" y="367.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt;::vector (183,894 samples, 0.02%)</title><rect x="95.3" y="437" width="0.1" height="15.0" fill="rgb(218,61,14)" rx="2" ry="2" />
+<text  x="98.28" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy::ReportInterference (992,797 samples, 0.10%)</title><rect x="481.4" y="341" width="0.8" height="15.0" fill="rgb(247,197,47)" rx="2" ry="2" />
+<text  x="484.43" y="351.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;ns3::DlDciListElement_s, std::allocator&lt;ns3::DlDciListElement_s&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;ns3::DlDciListElement_s, std::allocator&lt;ns3::DlDciListElement_s&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;ns3::DlDciListElement_s, std::allocator&lt;ns3::DlDciListElement_s&gt; &gt; &gt; &gt; &gt;::find (966,324 samples, 0.10%)</title><rect x="187.1" y="469" width="0.7" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="190.07" y="479.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;double&gt;::allocate (150,187 samples, 0.02%)</title><rect x="718.4" y="373" width="0.1" height="15.0" fill="rgb(221,76,18)" rx="2" ry="2" />
+<text  x="721.35" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::Angles::NormalizeAngles (468,955 samples, 0.05%)</title><rect x="311.0" y="469" width="0.4" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="314.04" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::LteUePhy::SendSrs (1,152,023 samples, 0.12%)</title><rect x="613.7" y="565" width="0.9" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="616.70" y="575.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::find (186,790 samples, 0.02%)</title><rect x="102.7" y="453" width="0.2" height="15.0" fill="rgb(210,27,6)" rx="2" ry="2" />
+<text  x="105.72" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;bool, std::allocator&lt;bool&gt; &gt;::capacity (268,073 samples, 0.03%)</title><rect x="200.2" y="437" width="0.2" height="15.0" fill="rgb(205,2,0)" rx="2" ry="2" />
+<text  x="203.16" y="447.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;int*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt; std::copy&lt;__gnu_cxx::__normal_iterator&lt;int const*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;int*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt; &gt; (330,607 samples, 0.03%)</title><rect x="531.2" y="325" width="0.3" height="15.0" fill="rgb(223,85,20)" rx="2" ry="2" />
+<text  x="534.19" y="335.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;::_M_insert&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; const&amp;&gt; (2,723,348 samples, 0.28%)</title><rect x="723.0" y="501" width="2.2" height="15.0" fill="rgb(251,215,51)" rx="2" ry="2" />
+<text  x="726.05" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::CallbackImplBase* ns3::PeekPointer&lt;ns3::CallbackImplBase&gt; (161,766 samples, 0.02%)</title><rect x="467.5" y="485" width="0.2" height="15.0" fill="rgb(246,188,45)" rx="2" ry="2" />
+<text  x="470.54" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Time::ToInteger (200,806 samples, 0.02%)</title><rect x="391.2" y="533" width="0.2" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="394.24" y="543.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;double&gt;::allocate (168,940 samples, 0.02%)</title><rect x="78.5" y="405" width="0.2" height="15.0" fill="rgb(221,76,18)" rx="2" ry="2" />
+<text  x="81.52" y="415.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_List_base (354,467 samples, 0.04%)</title><rect x="354.7" y="517" width="0.3" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="357.73" y="527.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt;::vector (1,942,143 samples, 0.20%)</title><rect x="475.4" y="309" width="1.6" height="15.0" fill="rgb(218,61,14)" rx="2" ry="2" />
+<text  x="478.39" y="319.5" ></text>
+</g>
+<g >
+<title>std::tuple&lt;ns3::LteSpectrumPhy*&gt;::tuple&lt;ns3::LteSpectrumPhy*&amp;, true, true&gt; (328,207 samples, 0.03%)</title><rect x="63.3" y="453" width="0.2" height="15.0" fill="rgb(249,204,48)" rx="2" ry="2" />
+<text  x="66.25" y="463.5" ></text>
+</g>
+<g >
+<title>int* std::copy&lt;int*, int*&gt; (218,802 samples, 0.02%)</title><rect x="530.6" y="325" width="0.2" height="15.0" fill="rgb(249,206,49)" rx="2" ry="2" />
+<text  x="533.58" y="335.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;2ul, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::~_Tuple_impl (297,048 samples, 0.03%)</title><rect x="666.3" y="405" width="0.2" height="15.0" fill="rgb(217,57,13)" rx="2" ry="2" />
+<text  x="669.27" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;::_M_create_storage (392,586 samples, 0.04%)</title><rect x="212.7" y="389" width="0.3" height="15.0" fill="rgb(242,173,41)" rx="2" ry="2" />
+<text  x="215.69" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::DlDciListElement_s::DlDciListElement_s (1,019,581 samples, 0.11%)</title><rect x="147.0" y="453" width="0.8" height="15.0" fill="rgb(233,129,30)" rx="2" ry="2" />
+<text  x="150.03" y="463.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; (351,126 samples, 0.04%)</title><rect x="335.0" y="309" width="0.3" height="15.0" fill="rgb(213,37,9)" rx="2" ry="2" />
+<text  x="338.01" y="319.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt; &gt; &gt;::at (603,079 samples, 0.06%)</title><rect x="288.9" y="533" width="0.5" height="15.0" fill="rgb(238,153,36)" rx="2" ry="2" />
+<text  x="291.91" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::EventId::EventId (1,141,333 samples, 0.12%)</title><rect x="268.2" y="501" width="1.0" height="15.0" fill="rgb(206,4,1)" rx="2" ry="2" />
+<text  x="271.24" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::NoOpComponentCarrierManager::DoNotifyTxOpportunity (538,351 samples, 0.06%)</title><rect x="96.2" y="421" width="0.4" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="99.20" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumSignalParameters::SpectrumSignalParameters (2,427,360 samples, 0.25%)</title><rect x="70.9" y="469" width="1.9" height="15.0" fill="rgb(219,67,16)" rx="2" ry="2" />
+<text  x="73.86" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Object::GetTypeId (154,300 samples, 0.02%)</title><rect x="161.1" y="405" width="0.1" height="15.0" fill="rgb(234,134,32)" rx="2" ry="2" />
+<text  x="164.09" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::Callback&lt;void, ns3::UlInfoListElement_s&gt;::operator (2,617,045 samples, 0.27%)</title><rect x="438.9" y="549" width="2.1" height="15.0" fill="rgb(227,104,24)" rx="2" ry="2" />
+<text  x="441.90" y="559.5" ></text>
+</g>
+<g >
+<title>ns3::LteRlcSm::DoNotifyTxOpportunity (4,972,136 samples, 0.51%)</title><rect x="11.4" y="421" width="4.0" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="14.43" y="431.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt; &gt; &gt;::find (155,011 samples, 0.02%)</title><rect x="97.5" y="437" width="0.2" height="15.0" fill="rgb(211,30,7)" rx="2" ry="2" />
+<text  x="100.53" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Head_base&lt;5ul, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;, false&gt;::_Head_base (152,827 samples, 0.02%)</title><rect x="667.8" y="293" width="0.2" height="15.0" fill="rgb(219,66,15)" rx="2" ry="2" />
+<text  x="670.83" y="303.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned int, std::allocator&lt;unsigned int&gt; &gt;::_S_max_size (385,945 samples, 0.04%)</title><rect x="696.6" y="469" width="0.3" height="15.0" fill="rgb(241,167,40)" rx="2" ry="2" />
+<text  x="699.59" y="479.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::push_back (1,437,463 samples, 0.15%)</title><rect x="625.7" y="501" width="1.2" height="15.0" fill="rgb(222,79,18)" rx="2" ry="2" />
+<text  x="628.71" y="511.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::list&lt;std::_List_const_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;, void&gt; (296,881 samples, 0.03%)</title><rect x="648.8" y="421" width="0.2" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="651.79" y="431.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::begin (458,783 samples, 0.05%)</title><rect x="369.8" y="517" width="0.4" height="15.0" fill="rgb(230,117,28)" rx="2" ry="2" />
+<text  x="372.81" y="527.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Callback&lt;void, ns3::SpectrumValue const&amp;&gt;, std::allocator&lt;ns3::Callback&lt;void, ns3::SpectrumValue const&amp;&gt; &gt; &gt;::begin (165,292 samples, 0.02%)</title><rect x="607.1" y="517" width="0.1" height="15.0" fill="rgb(224,91,21)" rx="2" ry="2" />
+<text  x="610.09" y="527.5" ></text>
+</g>
+<g >
+<title>[libc.so.6] (197,502 samples, 0.02%)</title><rect x="345.1" y="485" width="0.1" height="15.0" fill="rgb(223,84,20)" rx="2" ry="2" />
+<text  x="348.09" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::LteRlcSpecificLteMacSapUser::NotifyTxOpportunity (2,715,978 samples, 0.28%)</title><rect x="17.2" y="437" width="2.2" height="15.0" fill="rgb(249,204,48)" rx="2" ry="2" />
+<text  x="20.17" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Object::Object (2,382,251 samples, 0.25%)</title><rect x="364.4" y="485" width="2.0" height="15.0" fill="rgb(242,174,41)" rx="2" ry="2" />
+<text  x="367.44" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::_Vector_impl_data::_Vector_impl_data (208,562 samples, 0.02%)</title><rect x="520.5" y="293" width="0.2" height="15.0" fill="rgb(215,48,11)" rx="2" ry="2" />
+<text  x="523.53" y="303.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_M_deallocate (164,716 samples, 0.02%)</title><rect x="728.4" y="389" width="0.2" height="15.0" fill="rgb(240,162,38)" rx="2" ry="2" />
+<text  x="731.43" y="399.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::~_List_base (148,437 samples, 0.02%)</title><rect x="698.0" y="533" width="0.1" height="15.0" fill="rgb(221,74,17)" rx="2" ry="2" />
+<text  x="700.96" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;* std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_copy&lt;false, std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_Alloc_node&gt; (158,119 samples, 0.02%)</title><rect x="340.6" y="229" width="0.2" height="15.0" fill="rgb(251,212,50)" rx="2" ry="2" />
+<text  x="343.65" y="239.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt; &gt;::find (1,168,142 samples, 0.12%)</title><rect x="11.6" y="357" width="0.9" height="15.0" fill="rgb(225,93,22)" rx="2" ry="2" />
+<text  x="14.55" y="367.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned char, ns3::LteMacSapProvider*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt; &gt;::find (366,125 samples, 0.04%)</title><rect x="552.4" y="213" width="0.3" height="15.0" fill="rgb(248,200,47)" rx="2" ry="2" />
+<text  x="555.36" y="223.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumSignalParametersDataFrame::~LteSpectrumSignalParametersDataFrame (2,588,254 samples, 0.27%)</title><rect x="773.8" y="405" width="2.1" height="15.0" fill="rgb(242,174,41)" rx="2" ry="2" />
+<text  x="776.80" y="415.5" ></text>
+</g>
+<g >
+<title>decltype  (427,457 samples, 0.04%)</title><rect x="288.1" y="437" width="0.3" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="291.08" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::SbMeasResult_s::SbMeasResult_s (1,121,514 samples, 0.12%)</title><rect x="583.6" y="277" width="0.9" height="15.0" fill="rgb(235,141,33)" rx="2" ry="2" />
+<text  x="586.59" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::UeMemberLteUePhySapProvider::SendLteControlMessage (565,879 samples, 0.06%)</title><rect x="689.2" y="501" width="0.5" height="15.0" fill="rgb(228,110,26)" rx="2" ry="2" />
+<text  x="692.24" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, unsigned int&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt; &gt;::_S_key (328,502 samples, 0.03%)</title><rect x="137.2" y="437" width="0.3" height="15.0" fill="rgb(219,66,15)" rx="2" ry="2" />
+<text  x="140.21" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteHarqPhy&gt;::operator (155,643 samples, 0.02%)</title><rect x="388.9" y="549" width="0.2" height="15.0" fill="rgb(228,110,26)" rx="2" ry="2" />
+<text  x="391.94" y="559.5" ></text>
+</g>
+<g >
+<title>ns3::CallbackImpl&lt;void, ns3::SpectrumValue const&amp;&gt;::operator (34,942,247 samples, 3.60%)</title><rect x="577.3" y="501" width="28.1" height="15.0" fill="rgb(219,64,15)" rx="2" ry="2" />
+<text  x="580.26" y="511.5" >n..</text>
+</g>
+<g >
+<title>ns3::DefaultSimulatorImpl::Now (163,019 samples, 0.02%)</title><rect x="600.0" y="293" width="0.1" height="15.0" fill="rgb(213,40,9)" rx="2" ry="2" />
+<text  x="603.02" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::Packet::AddByteTag (2,931,180 samples, 0.30%)</title><rect x="553.0" y="261" width="2.4" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="556.01" y="271.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::TbId_t, std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::_Select1st&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::_M_begin (495,256 samples, 0.05%)</title><rect x="529.0" y="309" width="0.4" height="15.0" fill="rgb(245,184,44)" rx="2" ry="2" />
+<text  x="532.02" y="319.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteUeMac::LcInfo&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteUeMac::LcInfo&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteUeMac::LcInfo&gt; &gt; &gt;::_M_mbegin (150,034 samples, 0.02%)</title><rect x="691.1" y="453" width="0.1" height="15.0" fill="rgb(241,169,40)" rx="2" ry="2" />
+<text  x="694.09" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Bit_iterator std::__copy_move_a&lt;false, std::_Bit_iterator, std::_Bit_iterator&gt; (219,696 samples, 0.02%)</title><rect x="247.1" y="421" width="0.2" height="15.0" fill="rgb(247,193,46)" rx="2" ry="2" />
+<text  x="250.08" y="431.5" ></text>
+</g>
+<g >
+<title>unsigned char&amp; std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::emplace_back&lt;unsigned char&gt; (2,914,632 samples, 0.30%)</title><rect x="692.1" y="485" width="2.4" height="15.0" fill="rgb(237,147,35)" rx="2" ry="2" />
+<text  x="695.14" y="495.5" ></text>
+</g>
+<g >
+<title>void ns3::Simulator::ScheduleWithContext&lt;void  (7,199,277 samples, 0.74%)</title><rect x="82.7" y="517" width="5.8" height="15.0" fill="rgb(222,78,18)" rx="2" ry="2" />
+<text  x="85.69" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, unsigned char&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, unsigned char&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, unsigned char&gt; &gt; &gt;::begin (395,869 samples, 0.04%)</title><rect x="193.9" y="469" width="0.3" height="15.0" fill="rgb(210,23,5)" rx="2" ry="2" />
+<text  x="196.86" y="479.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::Buffer::Data* const*, std::vector&lt;ns3::Buffer::Data*, std::allocator&lt;ns3::Buffer::Data*&gt; &gt; &gt;::__normal_iterator (372,628 samples, 0.04%)</title><rect x="556.8" y="149" width="0.3" height="15.0" fill="rgb(205,0,0)" rx="2" ry="2" />
+<text  x="559.81" y="159.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::Packet, ns3::Empty, ns3::DefaultDeleter&lt;ns3::Packet&gt; &gt;::Ref (149,428 samples, 0.02%)</title><rect x="368.4" y="485" width="0.1" height="15.0" fill="rgb(231,122,29)" rx="2" ry="2" />
+<text  x="371.36" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy::ReceiveLteControlMessageList (27,232,853 samples, 2.81%)</title><rect x="441.7" y="373" width="21.9" height="15.0" fill="rgb(217,55,13)" rx="2" ry="2" />
+<text  x="444.71" y="383.5" >n..</text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::vector (380,581 samples, 0.04%)</title><rect x="595.8" y="149" width="0.3" height="15.0" fill="rgb(206,9,2)" rx="2" ry="2" />
+<text  x="598.76" y="159.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;bool, std::allocator&lt;bool&gt; &gt;::insert (2,500,355 samples, 0.26%)</title><rect x="246.8" y="469" width="2.0" height="15.0" fill="rgb(250,209,50)" rx="2" ry="2" />
+<text  x="249.83" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy::SendDataChannels (46,991,739 samples, 4.85%)</title><rect x="53.9" y="565" width="37.8" height="15.0" fill="rgb(247,193,46)" rx="2" ry="2" />
+<text  x="56.87" y="575.5" >ns3..</text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::_M_erase_aux (671,551 samples, 0.07%)</title><rect x="222.3" y="453" width="0.6" height="15.0" fill="rgb(242,173,41)" rx="2" ry="2" />
+<text  x="225.32" y="463.5" ></text>
+</g>
+<g >
+<title>std::function&lt;void  (2,105,662 samples, 0.22%)</title><rect x="15.5" y="693" width="1.6" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="18.45" y="703.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt; &gt;::_S_key (162,159 samples, 0.02%)</title><rect x="504.2" y="485" width="0.1" height="15.0" fill="rgb(216,55,13)" rx="2" ry="2" />
+<text  x="507.20" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;::operator (151,635 samples, 0.02%)</title><rect x="274.5" y="405" width="0.1" height="15.0" fill="rgb(245,186,44)" rx="2" ry="2" />
+<text  x="277.50" y="415.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::UlDciListElement_s, std::allocator&lt;ns3::UlDciListElement_s&gt; &gt;::at (232,176 samples, 0.02%)</title><rect x="249.1" y="485" width="0.2" height="15.0" fill="rgb(241,166,39)" rx="2" ry="2" />
+<text  x="252.09" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::IidManager::GetParent (228,334 samples, 0.02%)</title><rect x="374.2" y="453" width="0.2" height="15.0" fill="rgb(217,59,14)" rx="2" ry="2" />
+<text  x="377.23" y="463.5" ></text>
+</g>
+<g >
+<title>std::map&lt;ns3::Scheduler::EventKey, ns3::EventImpl*, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::lower_bound (294,424 samples, 0.03%)</title><rect x="615.9" y="469" width="0.3" height="15.0" fill="rgb(238,153,36)" rx="2" ry="2" />
+<text  x="618.93" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::BuildRarListElement_s, std::allocator&lt;ns3::BuildRarListElement_s&gt; &gt;::_M_get_Tp_allocator (191,995 samples, 0.02%)</title><rect x="143.3" y="437" width="0.2" height="15.0" fill="rgb(212,32,7)" rx="2" ry="2" />
+<text  x="146.32" y="447.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::~vector (149,670 samples, 0.02%)</title><rect x="347.6" y="533" width="0.1" height="15.0" fill="rgb(252,219,52)" rx="2" ry="2" />
+<text  x="350.56" y="543.5" ></text>
+</g>
+<g >
+<title>double* std::__uninitialized_default_n&lt;double*, unsigned long&gt; (153,593 samples, 0.02%)</title><rect x="316.3" y="341" width="0.1" height="15.0" fill="rgb(231,123,29)" rx="2" ry="2" />
+<text  x="319.25" y="351.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;2ul, unsigned int&gt;::_Tuple_impl&lt;unsigned int&amp;&gt; (359,595 samples, 0.04%)</title><rect x="709.9" y="389" width="0.3" height="15.0" fill="rgb(217,58,13)" rx="2" ry="2" />
+<text  x="712.89" y="399.5" ></text>
+</g>
+<g >
+<title>std::__detail::_List_node_header::_List_node_header (128,185 samples, 0.01%)</title><rect x="517.2" y="389" width="0.1" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="520.19" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::RlcPduListElement_s* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::RlcPduListElement_s const*, std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt;, ns3::RlcPduListElement_s*&gt; (980,187 samples, 0.10%)</title><rect x="211.8" y="389" width="0.8" height="15.0" fill="rgb(252,217,51)" rx="2" ry="2" />
+<text  x="214.84" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Bit_iterator std::copy&lt;std::_Bit_iterator, std::_Bit_iterator&gt; (219,696 samples, 0.02%)</title><rect x="247.1" y="437" width="0.2" height="15.0" fill="rgb(233,132,31)" rx="2" ry="2" />
+<text  x="250.08" y="447.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::BuildDataListElement_s&gt; (677,511 samples, 0.07%)</title><rect x="145.7" y="389" width="0.6" height="15.0" fill="rgb(236,143,34)" rx="2" ry="2" />
+<text  x="148.73" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::SpectrumValue, ns3::Empty, ns3::DefaultDeleter&lt;ns3::SpectrumValue&gt; &gt;::Unref (896,241 samples, 0.09%)</title><rect x="772.8" y="485" width="0.8" height="15.0" fill="rgb(246,189,45)" rx="2" ry="2" />
+<text  x="775.83" y="495.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt; &gt;::deallocate (181,716 samples, 0.02%)</title><rect x="378.3" y="293" width="0.1" height="15.0" fill="rgb(253,221,52)" rx="2" ry="2" />
+<text  x="381.26" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::UlDciLteControlMessage&amp; std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;::emplace_back&lt;ns3::UlDciLteControlMessage const&amp;&gt; (2,541,961 samples, 0.26%)</title><rect x="286.5" y="501" width="2.0" height="15.0" fill="rgb(207,11,2)" rx="2" ry="2" />
+<text  x="289.48" y="511.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::__uninitialized_fill_n&lt;true&gt;::__uninit_fill_n&lt;unsigned char*, unsigned long, unsigned char&gt; (378,589 samples, 0.04%)</title><rect x="216.0" y="421" width="0.3" height="15.0" fill="rgb(207,12,2)" rx="2" ry="2" />
+<text  x="218.97" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultSimulatorImpl::ScheduleNow (347,373 samples, 0.04%)</title><rect x="53.0" y="517" width="0.3" height="15.0" fill="rgb(211,32,7)" rx="2" ry="2" />
+<text  x="55.98" y="527.5" ></text>
+</g>
+<g >
+<title>operator new (404,041 samples, 0.04%)</title><rect x="32.7" y="341" width="0.4" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="35.73" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::LteHarqPhy::SubframeIndication (8,381,908 samples, 0.86%)</title><rect x="347.7" y="549" width="6.7" height="15.0" fill="rgb(229,112,26)" rx="2" ry="2" />
+<text  x="350.68" y="559.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned short const, std::vector&lt;ns3::DlDciListElement_s, std::allocator&lt;ns3::DlDciListElement_s&gt; &gt; &gt; &gt;::operator* (194,523 samples, 0.02%)</title><rect x="184.0" y="485" width="0.1" height="15.0" fill="rgb(243,175,42)" rx="2" ry="2" />
+<text  x="186.98" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::begin (161,967 samples, 0.02%)</title><rect x="600.2" y="293" width="0.1" height="15.0" fill="rgb(206,6,1)" rx="2" ry="2" />
+<text  x="603.21" y="303.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;int&gt;::deallocate (169,673 samples, 0.02%)</title><rect x="575.2" y="293" width="0.1" height="15.0" fill="rgb(236,147,35)" rx="2" ry="2" />
+<text  x="578.16" y="303.5" ></text>
+</g>
+<g >
+<title>void std::vector&lt;ns3::UlDciListElement_s, std::allocator&lt;ns3::UlDciListElement_s&gt; &gt;::_M_realloc_insert&lt;ns3::UlDciListElement_s const&amp;&gt; (193,533 samples, 0.02%)</title><rect x="105.9" y="453" width="0.1" height="15.0" fill="rgb(214,44,10)" rx="2" ry="2" />
+<text  x="108.88" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt;&amp; std::forward&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;&amp;&gt; (194,813 samples, 0.02%)</title><rect x="267.3" y="533" width="0.2" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="270.30" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::~SpectrumValue (209,498 samples, 0.02%)</title><rect x="605.4" y="517" width="0.2" height="15.0" fill="rgb(247,193,46)" rx="2" ry="2" />
+<text  x="608.40" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::MapScheduler::Insert (1,105,472 samples, 0.11%)</title><rect x="108.4" y="485" width="0.9" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="111.44" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::max_size (476,394 samples, 0.05%)</title><rect x="397.7" y="501" width="0.4" height="15.0" fill="rgb(242,171,41)" rx="2" ry="2" />
+<text  x="400.74" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_Rb_tree (164,996 samples, 0.02%)</title><rect x="88.0" y="469" width="0.1" height="15.0" fill="rgb(252,219,52)" rx="2" ry="2" />
+<text  x="90.95" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::~PacketBurst (1,309,427 samples, 0.14%)</title><rect x="76.8" y="357" width="1.1" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="79.80" y="367.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt;::allocate (283,919 samples, 0.03%)</title><rect x="444.9" y="261" width="0.2" height="15.0" fill="rgb(245,184,44)" rx="2" ry="2" />
+<text  x="447.88" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::ByteTagList::Iterator::Iterator (944,025 samples, 0.10%)</title><rect x="426.4" y="213" width="0.7" height="15.0" fill="rgb(248,198,47)" rx="2" ry="2" />
+<text  x="429.39" y="223.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__enable_if&lt;std::__is_scalar&lt;double&gt;::__value, void&gt;::__type std::__fill_a1&lt;double*, double&gt; (163,001 samples, 0.02%)</title><rect x="730.0" y="325" width="0.2" height="15.0" fill="rgb(237,149,35)" rx="2" ry="2" />
+<text  x="733.02" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::MapScheduler::Insert (6,361,819 samples, 0.66%)</title><rect x="333.7" y="453" width="5.1" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="336.71" y="463.5" ></text>
+</g>
+<g >
+<title>int* std::copy&lt;__gnu_cxx::__normal_iterator&lt;int const*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt;, int*&gt; (268,424 samples, 0.03%)</title><rect x="91.1" y="485" width="0.2" height="15.0" fill="rgb(215,50,12)" rx="2" ry="2" />
+<text  x="94.12" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy::StartSubFrame (345,416,065 samples, 35.62%)</title><rect x="122.5" y="565" width="277.8" height="15.0" fill="rgb(234,136,32)" rx="2" ry="2" />
+<text  x="125.51" y="575.5" >ns3::LteEnbPhy::StartSubFrame</text>
+</g>
+<g >
+<title>ns3::NodeListPriv::Delete (238,924 samples, 0.02%)</title><rect x="36.6" y="629" width="0.2" height="15.0" fill="rgb(213,39,9)" rx="2" ry="2" />
+<text  x="39.64" y="639.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;int&gt;::deallocate (169,673 samples, 0.02%)</title><rect x="575.2" y="277" width="0.1" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="578.16" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::ObjectDeleter::Delete (384,276 samples, 0.04%)</title><rect x="119.9" y="373" width="0.3" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="122.86" y="383.5" ></text>
+</g>
+<g >
+<title>std::function&lt;void  (416,320 samples, 0.04%)</title><rect x="53.5" y="501" width="0.4" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="56.54" y="511.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::BuildDataListElement_s, std::allocator&lt;ns3::BuildDataListElement_s&gt; &gt;::at (572,518 samples, 0.06%)</title><rect x="172.6" y="453" width="0.4" height="15.0" fill="rgb(206,9,2)" rx="2" ry="2" />
+<text  x="175.57" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::BuildDataListElement_s* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;ns3::BuildDataListElement_s const*, std::vector&lt;ns3::BuildDataListElement_s, std::allocator&lt;ns3::BuildDataListElement_s&gt; &gt; &gt;, ns3::BuildDataListElement_s*, ns3::BuildDataListElement_s&gt; (143,073 samples, 0.01%)</title><rect x="95.0" y="421" width="0.1" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="97.98" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt;::_M_valptr (165,214 samples, 0.02%)</title><rect x="567.5" y="277" width="0.2" height="15.0" fill="rgb(222,82,19)" rx="2" ry="2" />
+<text  x="570.52" y="287.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;::_M_ptr (163,699 samples, 0.02%)</title><rect x="497.0" y="517" width="0.1" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="500.01" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::PacketMetadata::PacketMetadata (473,227 samples, 0.05%)</title><rect x="153.5" y="357" width="0.4" height="15.0" fill="rgb(231,121,28)" rx="2" ry="2" />
+<text  x="156.48" y="367.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;0ul, ns3::LteInterference*, ns3::Ptr&lt;ns3::SpectrumValue const&gt;, unsigned int&gt;::_Tuple_impl&lt;ns3::LteInterference*&amp;, ns3::Ptr&lt;ns3::SpectrumValue const&gt;&amp;, unsigned int&amp;, void&gt; (1,419,200 samples, 0.15%)</title><rect x="709.1" y="421" width="1.1" height="15.0" fill="rgb(228,109,26)" rx="2" ry="2" />
+<text  x="712.10" y="431.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::_M_get_node (163,447 samples, 0.02%)</title><rect x="69.1" y="389" width="0.1" height="15.0" fill="rgb(212,36,8)" rx="2" ry="2" />
+<text  x="72.06" y="399.5" ></text>
+</g>
+<g >
+<title> (126,576 samples, 0.01%)</title><rect x="552.3" y="197" width="0.1" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="555.26" y="207.5" ></text>
+</g>
+<g >
+<title>void ns3::Callback&lt;void, ns3::SpectrumValue const&amp;&gt;::Callback&lt;void  (33,827,307 samples, 3.49%)</title><rect x="578.2" y="421" width="27.2" height="15.0" fill="rgb(221,75,18)" rx="2" ry="2" />
+<text  x="581.16" y="431.5" >v..</text>
+</g>
+<g >
+<title>std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt;::erase (213,559 samples, 0.02%)</title><rect x="117.1" y="517" width="0.2" height="15.0" fill="rgb(216,54,13)" rx="2" ry="2" />
+<text  x="120.11" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::ByteTagList::Allocate (1,324,752 samples, 0.14%)</title><rect x="553.4" y="229" width="1.0" height="15.0" fill="rgb(225,95,22)" rx="2" ry="2" />
+<text  x="556.35" y="239.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::_S_relocate (163,713 samples, 0.02%)</title><rect x="573.1" y="309" width="0.1" height="15.0" fill="rgb(238,154,37)" rx="2" ry="2" />
+<text  x="576.08" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::LteUePowerControl::CalculatePuschTxPower (1,080,040 samples, 0.11%)</title><rect x="681.2" y="533" width="0.9" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="684.20" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::PacketMetadata::DoAddHeader (167,176 samples, 0.02%)</title><rect x="558.7" y="213" width="0.1" height="15.0" fill="rgb(234,135,32)" rx="2" ry="2" />
+<text  x="561.71" y="223.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::begin (444,735 samples, 0.05%)</title><rect x="416.6" y="517" width="0.3" height="15.0" fill="rgb(206,6,1)" rx="2" ry="2" />
+<text  x="419.56" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::LteFlowId_t, std::pair&lt;ns3::LteFlowId_t const, ns3::FfMacSchedSapProvider::SchedDlRlcBufferReqParameters&gt;, std::_Select1st&lt;std::pair&lt;ns3::LteFlowId_t const, ns3::FfMacSchedSapProvider::SchedDlRlcBufferReqParameters&gt; &gt;, std::less&lt;ns3::LteFlowId_t&gt;, std::allocator&lt;std::pair&lt;ns3::LteFlowId_t const, ns3::FfMacSchedSapProvider::SchedDlRlcBufferReqParameters&gt; &gt; &gt;::find (652,951 samples, 0.07%)</title><rect x="26.9" y="293" width="0.5" height="15.0" fill="rgb(222,81,19)" rx="2" ry="2" />
+<text  x="29.92" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbMac::DoSchedDlConfigInd (4,972,136 samples, 0.51%)</title><rect x="11.4" y="485" width="4.0" height="15.0" fill="rgb(205,3,0)" rx="2" ry="2" />
+<text  x="14.43" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::lower_bound (1,730,701 samples, 0.18%)</title><rect x="336.7" y="405" width="1.4" height="15.0" fill="rgb(254,228,54)" rx="2" ry="2" />
+<text  x="339.70" y="415.5" ></text>
+</g>
+<g >
+<title>void std::destroy_at&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; (652,707 samples, 0.07%)</title><rect x="609.7" y="501" width="0.6" height="15.0" fill="rgb(216,52,12)" rx="2" ry="2" />
+<text  x="612.73" y="511.5" ></text>
+</g>
+<g >
+<title>std::_List_iterator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt;::_List_iterator (150,899 samples, 0.02%)</title><rect x="635.6" y="309" width="0.1" height="15.0" fill="rgb(231,119,28)" rx="2" ry="2" />
+<text  x="638.62" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::Packet::AddByteTag (557,108 samples, 0.06%)</title><rect x="152.1" y="389" width="0.5" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="155.12" y="399.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::vector (382,560 samples, 0.04%)</title><rect x="111.8" y="437" width="0.3" height="15.0" fill="rgb(239,156,37)" rx="2" ry="2" />
+<text  x="114.84" y="447.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;double&gt; &gt;::allocate (187,232 samples, 0.02%)</title><rect x="300.7" y="389" width="0.1" height="15.0" fill="rgb(234,136,32)" rx="2" ry="2" />
+<text  x="303.67" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::TypeId::GetParent (669,393 samples, 0.07%)</title><rect x="449.6" y="245" width="0.6" height="15.0" fill="rgb(211,29,7)" rx="2" ry="2" />
+<text  x="452.64" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::SpectrumValue, ns3::Empty, ns3::DefaultDeleter&lt;ns3::SpectrumValue&gt; &gt;::Unref (401,883 samples, 0.04%)</title><rect x="728.2" y="469" width="0.4" height="15.0" fill="rgb(246,189,45)" rx="2" ry="2" />
+<text  x="731.24" y="479.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_initialize_dispatch&lt;std::_List_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; (1,008,998 samples, 0.10%)</title><rect x="721.5" y="485" width="0.8" height="15.0" fill="rgb(239,156,37)" rx="2" ry="2" />
+<text  x="724.52" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt;::_Vector_base (272,688 samples, 0.03%)</title><rect x="130.8" y="485" width="0.2" height="15.0" fill="rgb(216,55,13)" rx="2" ry="2" />
+<text  x="133.81" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::back (228,016 samples, 0.02%)</title><rect x="692.2" y="469" width="0.2" height="15.0" fill="rgb(223,85,20)" rx="2" ry="2" />
+<text  x="695.21" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Packet::AddByteTag (356,272 samples, 0.04%)</title><rect x="16.4" y="389" width="0.3" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="19.41" y="399.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::Ptr&lt;ns3::Object&gt;*, ns3::Ptr&lt;ns3::Object&gt; &gt; (283,533 samples, 0.03%)</title><rect x="550.2" y="197" width="0.2" height="15.0" fill="rgb(226,98,23)" rx="2" ry="2" />
+<text  x="553.19" y="207.5" ></text>
+</g>
+<g >
+<title>std::_Head_base&lt;0ul, ns3::LteEnbPhy*, false&gt;::_M_head (165,500 samples, 0.02%)</title><rect x="752.1" y="549" width="0.1" height="15.0" fill="rgb(214,43,10)" rx="2" ry="2" />
+<text  x="755.11" y="559.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::_Auto_node::_Auto_node&lt;std::piecewise_construct_t const&amp;, std::tuple&lt;unsigned short const&amp;&gt;, std::tuple&lt;&gt; &gt; (264,662 samples, 0.03%)</title><rect x="99.5" y="437" width="0.2" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="102.47" y="447.5" ></text>
+</g>
+<g >
+<title>void std::_Function_base::_Base_manager&lt;std::_Bind&lt;void  (819,716 samples, 0.08%)</title><rect x="667.3" y="453" width="0.7" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="670.29" y="463.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::clear (391,980 samples, 0.04%)</title><rect x="497.3" y="549" width="0.3" height="15.0" fill="rgb(252,216,51)" rx="2" ry="2" />
+<text  x="500.30" y="559.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt; &gt; &gt;::lower_bound (1,723,216 samples, 0.18%)</title><rect x="157.5" y="389" width="1.4" height="15.0" fill="rgb(213,37,8)" rx="2" ry="2" />
+<text  x="160.50" y="399.5" ></text>
+</g>
+<g >
+<title>void std::__fill_a&lt;unsigned int*, unsigned int&gt; (567,534 samples, 0.06%)</title><rect x="696.0" y="389" width="0.4" height="15.0" fill="rgb(251,212,50)" rx="2" ry="2" />
+<text  x="698.98" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::PacketTagList::RemoveAll (244,626 samples, 0.03%)</title><rect x="548.9" y="101" width="0.2" height="15.0" fill="rgb(226,99,23)" rx="2" ry="2" />
+<text  x="551.87" y="111.5" ></text>
+</g>
+<g >
+<title>ns3::CqiListElement_s::CqiListElement_s (2,022,367 samples, 0.21%)</title><rect x="583.5" y="293" width="1.6" height="15.0" fill="rgb(238,156,37)" rx="2" ry="2" />
+<text  x="586.49" y="303.5" ></text>
+</g>
+<g >
+<title>double* std::__fill_n_a&lt;double*, unsigned long, double&gt; (423,425 samples, 0.04%)</title><rect x="301.4" y="357" width="0.3" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="304.40" y="367.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; &gt;::_M_valptr (532,897 samples, 0.05%)</title><rect x="348.1" y="517" width="0.5" height="15.0" fill="rgb(213,39,9)" rx="2" ry="2" />
+<text  x="351.13" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::PacketBurst (1,593,239 samples, 0.16%)</title><rect x="446.2" y="293" width="1.3" height="15.0" fill="rgb(208,15,3)" rx="2" ry="2" />
+<text  x="449.20" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::ConstValuesEnd (157,751 samples, 0.02%)</title><rect x="583.0" y="293" width="0.2" height="15.0" fill="rgb(210,25,6)" rx="2" ry="2" />
+<text  x="586.03" y="303.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt; &gt;::construct&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (482,063 samples, 0.05%)</title><rect x="661.3" y="357" width="0.4" height="15.0" fill="rgb(231,122,29)" rx="2" ry="2" />
+<text  x="664.26" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::PacketMetadata::Allocate (495,360 samples, 0.05%)</title><rect x="557.9" y="197" width="0.4" height="15.0" fill="rgb(231,121,29)" rx="2" ry="2" />
+<text  x="560.86" y="207.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, unsigned char&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, unsigned char&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, unsigned char&gt; &gt; &gt;::_M_lower_bound (722,107 samples, 0.07%)</title><rect x="136.1" y="453" width="0.6" height="15.0" fill="rgb(226,99,23)" rx="2" ry="2" />
+<text  x="139.11" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::RlcTag::RlcTag (277,392 samples, 0.03%)</title><rect x="155.2" y="389" width="0.2" height="15.0" fill="rgb(228,109,26)" rx="2" ry="2" />
+<text  x="158.19" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::LteInterference::ConditionallyEvaluateChunk (281,840 samples, 0.03%)</title><rect x="485.3" y="533" width="0.2" height="15.0" fill="rgb(243,177,42)" rx="2" ry="2" />
+<text  x="488.29" y="543.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_move_assign (879,906 samples, 0.09%)</title><rect x="621.8" y="405" width="0.7" height="15.0" fill="rgb(213,40,9)" rx="2" ry="2" />
+<text  x="624.76" y="415.5" ></text>
+</g>
+<g >
+<title> (155,643 samples, 0.02%)</title><rect x="388.9" y="533" width="0.2" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="391.94" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Function_base::_Base_manager&lt;void  (242,907 samples, 0.03%)</title><rect x="418.8" y="405" width="0.2" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="421.83" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::Object::~Object (423,388 samples, 0.04%)</title><rect x="774.8" y="293" width="0.3" height="15.0" fill="rgb(229,110,26)" rx="2" ry="2" />
+<text  x="777.81" y="303.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned char const, ns3::LteUeMac::LcInfo&gt; &gt;::_M_valptr (354,247 samples, 0.04%)</title><rect x="438.1" y="261" width="0.2" height="15.0" fill="rgb(221,77,18)" rx="2" ry="2" />
+<text  x="441.05" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::Object::~Object (190,190 samples, 0.02%)</title><rect x="166.4" y="357" width="0.2" height="15.0" fill="rgb(229,110,26)" rx="2" ry="2" />
+<text  x="169.42" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::EnbMacMemberFfMacSchedSapUser::SchedDlConfigInd (4,972,136 samples, 0.51%)</title><rect x="11.4" y="501" width="4.0" height="15.0" fill="rgb(241,166,39)" rx="2" ry="2" />
+<text  x="14.43" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt; ns3::CompleteConstruct&lt;ns3::PacketBurst&gt; (2,205,090 samples, 0.23%)</title><rect x="33.3" y="469" width="1.8" height="15.0" fill="rgb(212,33,7)" rx="2" ry="2" />
+<text  x="36.34" y="479.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;double&gt;::allocate (525,645 samples, 0.05%)</title><rect x="407.7" y="389" width="0.4" height="15.0" fill="rgb(248,201,48)" rx="2" ry="2" />
+<text  x="410.65" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;* std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_create_node&lt;std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (382,281 samples, 0.04%)</title><rect x="108.6" y="405" width="0.3" height="15.0" fill="rgb(217,56,13)" rx="2" ry="2" />
+<text  x="111.56" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::Simulator::Now (287,971 samples, 0.03%)</title><rect x="600.0" y="309" width="0.2" height="15.0" fill="rgb(240,164,39)" rx="2" ry="2" />
+<text  x="602.95" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::MemberLteCcmMacSapUser&lt;ns3::NoOpComponentCarrierManager&gt;::NotifyTxOpportunity (4,972,136 samples, 0.51%)</title><rect x="11.4" y="469" width="4.0" height="15.0" fill="rgb(205,3,0)" rx="2" ry="2" />
+<text  x="14.43" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;::~Ptr (3,402,650 samples, 0.35%)</title><rect x="773.7" y="469" width="2.7" height="15.0" fill="rgb(236,143,34)" rx="2" ry="2" />
+<text  x="776.67" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::AddPacket (1,515,978 samples, 0.16%)</title><rect x="625.7" y="517" width="1.2" height="15.0" fill="rgb(207,10,2)" rx="2" ry="2" />
+<text  x="628.65" y="527.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;std::_Rb_tree_node_base*, std::_Rb_tree_node_base*&gt;::pair&lt;std::_Rb_tree_node&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;*&amp;, std::_Rb_tree_node_base*&amp;&gt; (199,710 samples, 0.02%)</title><rect x="386.0" y="453" width="0.2" height="15.0" fill="rgb(207,9,2)" rx="2" ry="2" />
+<text  x="389.02" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;::~vector (196,954 samples, 0.02%)</title><rect x="575.4" y="357" width="0.2" height="15.0" fill="rgb(235,139,33)" rx="2" ry="2" />
+<text  x="578.43" y="367.5" ></text>
+</g>
+<g >
+<title>std::_Bit_iterator_base::_Bit_iterator_base (157,638 samples, 0.02%)</title><rect x="201.4" y="421" width="0.1" height="15.0" fill="rgb(234,136,32)" rx="2" ry="2" />
+<text  x="204.37" y="431.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::ByteTagListData*, std::allocator&lt;ns3::ByteTagListData*&gt; &gt;::end (256,004 samples, 0.03%)</title><rect x="553.8" y="197" width="0.2" height="15.0" fill="rgb(238,154,36)" rx="2" ry="2" />
+<text  x="556.78" y="207.5" ></text>
+</g>
+<g >
+<title>ns3::LteHarqPhy::ResetDlHarqProcessStatus (597,412 samples, 0.06%)</title><rect x="464.5" y="549" width="0.5" height="15.0" fill="rgb(230,118,28)" rx="2" ry="2" />
+<text  x="467.50" y="559.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::_S_max_size (204,572 samples, 0.02%)</title><rect x="404.6" y="453" width="0.1" height="15.0" fill="rgb(251,212,50)" rx="2" ry="2" />
+<text  x="407.57" y="463.5" ></text>
+</g>
+<g >
+<title>unsigned short* std::__fill_n_a&lt;unsigned short*, unsigned long, unsigned short&gt; (459,034 samples, 0.05%)</title><rect x="252.4" y="389" width="0.3" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="255.37" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;int, std::allocator&lt;int&gt; &gt;::_Vector_impl::_Vector_impl (166,957 samples, 0.02%)</title><rect x="385.2" y="341" width="0.1" height="15.0" fill="rgb(236,142,34)" rx="2" ry="2" />
+<text  x="388.18" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::LtePhy::GetDevice (325,125 samples, 0.03%)</title><rect x="582.6" y="309" width="0.3" height="15.0" fill="rgb(234,134,32)" rx="2" ry="2" />
+<text  x="585.65" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::~PacketBurst (650,228 samples, 0.07%)</title><rect x="502.4" y="421" width="0.5" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="505.40" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::MobilityModel&gt;::Acquire (190,764 samples, 0.02%)</title><rect x="704.7" y="517" width="0.1" height="15.0" fill="rgb(253,222,53)" rx="2" ry="2" />
+<text  x="707.65" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::HarqStatus_e* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::DlInfoListElement_s::HarqStatus_e const*, std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt; &gt;, ns3::DlInfoListElement_s::HarqStatus_e*&gt; (234,294 samples, 0.02%)</title><rect x="510.0" y="485" width="0.2" height="15.0" fill="rgb(235,140,33)" rx="2" ry="2" />
+<text  x="512.98" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt;::_Vector_impl::_Vector_impl (431,145 samples, 0.04%)</title><rect x="131.7" y="469" width="0.3" height="15.0" fill="rgb(247,193,46)" rx="2" ry="2" />
+<text  x="134.68" y="479.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt;::construct&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; const&amp;&gt; (338,177 samples, 0.03%)</title><rect x="117.3" y="501" width="0.3" height="15.0" fill="rgb(221,77,18)" rx="2" ry="2" />
+<text  x="120.31" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Packet&gt;::~Ptr (439,896 samples, 0.05%)</title><rect x="502.0" y="341" width="0.3" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="504.99" y="351.5" ></text>
+</g>
+<g >
+<title>std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;* std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_create_node&lt;ns3::Ptr&lt;ns3::MibLteControlMessage&gt;&amp;&gt; (190,229 samples, 0.02%)</title><rect x="122.3" y="517" width="0.2" height="15.0" fill="rgb(237,150,36)" rx="2" ry="2" />
+<text  x="125.33" y="527.5" ></text>
+</g>
+<g >
+<title>std::function&lt;void  (1,320,674 samples, 0.14%)</title><rect x="725.6" y="485" width="1.1" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="728.60" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::operator+= (1,512,778 samples, 0.16%)</title><rect x="713.7" y="501" width="1.2" height="15.0" fill="rgb(215,49,11)" rx="2" ry="2" />
+<text  x="716.72" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::~_Rb_tree (1,100,157 samples, 0.11%)</title><rect x="232.9" y="453" width="0.8" height="15.0" fill="rgb(209,22,5)" rx="2" ry="2" />
+<text  x="235.86" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::~_Vector_base (206,667 samples, 0.02%)</title><rect x="728.4" y="405" width="0.2" height="15.0" fill="rgb(223,86,20)" rx="2" ry="2" />
+<text  x="731.39" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy::EndSubFrame (1,332,546 samples, 0.14%)</title><rect x="52.8" y="565" width="1.1" height="15.0" fill="rgb(230,116,27)" rx="2" ry="2" />
+<text  x="55.80" y="575.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumModel const&gt;::operator (311,768 samples, 0.03%)</title><rect x="299.7" y="453" width="0.3" height="15.0" fill="rgb(226,96,23)" rx="2" ry="2" />
+<text  x="302.70" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt; &gt;::_M_mbegin (153,550 samples, 0.02%)</title><rect x="508.9" y="501" width="0.1" height="15.0" fill="rgb(237,147,35)" rx="2" ry="2" />
+<text  x="511.90" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt; &gt;::_M_begin (556,533 samples, 0.06%)</title><rect x="179.8" y="437" width="0.5" height="15.0" fill="rgb(243,178,42)" rx="2" ry="2" />
+<text  x="182.83" y="447.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider::ReportBufferStatusParameters&gt; &gt;::_M_ptr (148,477 samples, 0.02%)</title><rect x="689.9" y="453" width="0.2" height="15.0" fill="rgb(234,136,32)" rx="2" ry="2" />
+<text  x="692.94" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;* std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_M_copy&lt;false, std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_Alloc_node&gt; (361,417 samples, 0.04%)</title><rect x="232.5" y="405" width="0.3" height="15.0" fill="rgb(236,146,34)" rx="2" ry="2" />
+<text  x="235.54" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::AddPacket (729,577 samples, 0.08%)</title><rect x="68.8" y="453" width="0.5" height="15.0" fill="rgb(207,10,2)" rx="2" ry="2" />
+<text  x="71.76" y="463.5" ></text>
+</g>
+<g >
+<title>std::operator== (159,203 samples, 0.02%)</title><rect x="746.8" y="533" width="0.2" height="15.0" fill="rgb(229,110,26)" rx="2" ry="2" />
+<text  x="749.83" y="543.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt;::construct&lt;ns3::DlInfoListElement_s, ns3::DlInfoListElement_s const&amp;&gt; (233,530 samples, 0.02%)</title><rect x="456.6" y="293" width="0.2" height="15.0" fill="rgb(228,110,26)" rx="2" ry="2" />
+<text  x="459.59" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue const&gt;::operator (353,348 samples, 0.04%)</title><rect x="717.2" y="501" width="0.3" height="15.0" fill="rgb(248,200,47)" rx="2" ry="2" />
+<text  x="720.23" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::~_Rb_tree (148,912 samples, 0.02%)</title><rect x="99.7" y="453" width="0.2" height="15.0" fill="rgb(254,228,54)" rx="2" ry="2" />
+<text  x="102.75" y="463.5" ></text>
+</g>
+<g >
+<title>double* std::__copy_move_a2&lt;false, double const*, double*&gt; (158,087 samples, 0.02%)</title><rect x="238.9" y="181" width="0.1" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="241.87" y="191.5" ></text>
+</g>
+<g >
+<title>ns3::MultiModelSpectrumChannel::FindAndEventuallyAddTxSpectrumModel (3,241,661 samples, 0.33%)</title><rect x="320.0" y="501" width="2.6" height="15.0" fill="rgb(212,32,7)" rx="2" ry="2" />
+<text  x="323.01" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt;::~_Vector_base (187,024 samples, 0.02%)</title><rect x="132.8" y="373" width="0.2" height="15.0" fill="rgb(244,183,43)" rx="2" ry="2" />
+<text  x="135.84" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s* std::__do_uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::DlInfoListElement_s const*, std::vector&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt; &gt;, ns3::DlInfoListElement_s*&gt; (4,706,249 samples, 0.49%)</title><rect x="258.1" y="437" width="3.8" height="15.0" fill="rgb(217,58,13)" rx="2" ry="2" />
+<text  x="261.14" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s* std::__uninitialized_copy_a&lt;ns3::DlInfoListElement_s*, ns3::DlInfoListElement_s*, ns3::DlInfoListElement_s&gt; (632,143 samples, 0.07%)</title><rect x="206.4" y="469" width="0.5" height="15.0" fill="rgb(210,27,6)" rx="2" ry="2" />
+<text  x="209.43" y="479.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned int, ns3::TxSpectrumModelInfo, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt; &gt;::find (188,402 samples, 0.02%)</title><rect x="114.5" y="469" width="0.2" height="15.0" fill="rgb(208,16,3)" rx="2" ry="2" />
+<text  x="117.51" y="479.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;int*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt; std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;int const*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;int*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt; &gt; (489,292 samples, 0.05%)</title><rect x="680.1" y="501" width="0.4" height="15.0" fill="rgb(236,146,35)" rx="2" ry="2" />
+<text  x="683.09" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;* std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_copy&lt;false, std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_Alloc_node&gt; (156,128 samples, 0.02%)</title><rect x="667.1" y="245" width="0.1" height="15.0" fill="rgb(251,212,50)" rx="2" ry="2" />
+<text  x="670.07" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::Time::FromInteger (159,767 samples, 0.02%)</title><rect x="424.8" y="197" width="0.1" height="15.0" fill="rgb(206,6,1)" rx="2" ry="2" />
+<text  x="427.78" y="207.5" ></text>
+</g>
+<g >
+<title>ns3::LteNetDevice::GetNode (153,775 samples, 0.02%)</title><rect x="113.5" y="485" width="0.1" height="15.0" fill="rgb(229,112,26)" rx="2" ry="2" />
+<text  x="116.52" y="495.5" ></text>
+</g>
+<g >
+<title>double* std::__uninitialized_default_n_1&lt;true&gt;::__uninit_default_n&lt;double*, unsigned long&gt; (455,698 samples, 0.05%)</title><rect x="677.6" y="405" width="0.4" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="680.60" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Bind&lt;void  (624,065 samples, 0.06%)</title><rect x="340.3" y="437" width="0.5" height="15.0" fill="rgb(253,221,52)" rx="2" ry="2" />
+<text  x="343.27" y="447.5" ></text>
+</g>
+<g >
+<title>operator new (169,720 samples, 0.02%)</title><rect x="70.0" y="437" width="0.1" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="73.01" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, unsigned char&gt; &gt;::_M_valptr (226,643 samples, 0.02%)</title><rect x="136.2" y="421" width="0.1" height="15.0" fill="rgb(213,40,9)" rx="2" ry="2" />
+<text  x="139.17" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;::_M_valptr (320,775 samples, 0.03%)</title><rect x="663.5" y="373" width="0.2" height="15.0" fill="rgb(213,38,9)" rx="2" ry="2" />
+<text  x="666.47" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::MemberLteCcmMacSapUser&lt;ns3::NoOpComponentCarrierManager&gt;::NotifyTxOpportunity (17,080,246 samples, 1.76%)</title><rect x="19.6" y="485" width="13.7" height="15.0" fill="rgb(205,3,0)" rx="2" ry="2" />
+<text  x="22.60" y="495.5" ></text>
+</g>
+<g >
+<title>std::map&lt;int, double, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::clear (1,170,710 samples, 0.12%)</title><rect x="393.8" y="549" width="1.0" height="15.0" fill="rgb(233,132,31)" rx="2" ry="2" />
+<text  x="396.82" y="559.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;int const, double&gt; &gt; &gt; &gt;::construct&lt;std::pair&lt;int const, double&gt;, std::pair&lt;int, double&gt; &gt; (184,474 samples, 0.02%)</title><rect x="293.3" y="437" width="0.2" height="15.0" fill="rgb(250,207,49)" rx="2" ry="2" />
+<text  x="296.35" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteUePhy&gt;::Acquire (125,424 samples, 0.01%)</title><rect x="516.6" y="421" width="0.1" height="15.0" fill="rgb(232,124,29)" rx="2" ry="2" />
+<text  x="519.65" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::UeMemberLteUePhySapUser::SubframeIndication (16,576,198 samples, 1.71%)</title><rect x="684.3" y="549" width="13.4" height="15.0" fill="rgb(241,167,39)" rx="2" ry="2" />
+<text  x="687.33" y="559.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_Rb_tree_impl&lt;std::less&lt;unsigned short&gt;, true&gt;::_Rb_tree_impl (160,812 samples, 0.02%)</title><rect x="240.5" y="453" width="0.1" height="15.0" fill="rgb(238,152,36)" rx="2" ry="2" />
+<text  x="243.47" y="463.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned char const, ns3::LteUeMac::LcInfo&gt; &gt;::_M_ptr (158,124 samples, 0.02%)</title><rect x="691.5" y="421" width="0.1" height="15.0" fill="rgb(228,105,25)" rx="2" ry="2" />
+<text  x="694.50" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbRrc::DoAllocateTemporaryCellRnti (285,958 samples, 0.03%)</title><rect x="130.4" y="501" width="0.2" height="15.0" fill="rgb(218,60,14)" rx="2" ry="2" />
+<text  x="133.38" y="511.5" ></text>
+</g>
+<g >
+<title>bool std::operator==&lt;ns3::MacCeListElement_s*&gt; (157,395 samples, 0.02%)</title><rect x="129.7" y="405" width="0.2" height="15.0" fill="rgb(236,145,34)" rx="2" ry="2" />
+<text  x="132.74" y="415.5" ></text>
+</g>
+<g >
+<title> (368,315 samples, 0.04%)</title><rect x="656.8" y="501" width="0.3" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="659.83" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;1ul, ns3::Ptr&lt;ns3::SpectrumValue&gt;, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::_Tuple_impl&lt;ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp;, double&amp;, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;&amp;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;&amp;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;&amp;, void&gt; (433,048 samples, 0.04%)</title><rect x="340.4" y="389" width="0.4" height="15.0" fill="rgb(237,151,36)" rx="2" ry="2" />
+<text  x="343.43" y="399.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;is_invocable_r_v&lt;void, ns3::Callback&lt;void, ns3::SpectrumValue const&amp;&gt;::Callback&lt;void  (19,222,845 samples, 1.98%)</title><rect x="468.3" y="453" width="15.5" height="15.0" fill="rgb(222,79,18)" rx="2" ry="2" />
+<text  x="471.32" y="463.5" ></text>
+</g>
+<g >
+<title>double* std::__uninitialized_copy&lt;true&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, double*&gt; (381,898 samples, 0.04%)</title><rect x="654.6" y="437" width="0.3" height="15.0" fill="rgb(238,153,36)" rx="2" ry="2" />
+<text  x="657.62" y="447.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;double&gt;::allocate (168,940 samples, 0.02%)</title><rect x="78.5" y="389" width="0.2" height="15.0" fill="rgb(248,201,48)" rx="2" ry="2" />
+<text  x="81.52" y="399.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::Ptr&lt;ns3::Object&gt;*, ns3::Ptr&lt;ns3::Object&gt; &gt; (209,811 samples, 0.02%)</title><rect x="77.5" y="309" width="0.2" height="15.0" fill="rgb(226,98,23)" rx="2" ry="2" />
+<text  x="80.53" y="319.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt;::_M_create_storage (226,584 samples, 0.02%)</title><rect x="125.6" y="341" width="0.2" height="15.0" fill="rgb(244,180,43)" rx="2" ry="2" />
+<text  x="128.61" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::DlDciLteControlMessage&gt;::Acquire (148,949 samples, 0.02%)</title><rect x="388.4" y="517" width="0.1" height="15.0" fill="rgb(218,63,15)" rx="2" ry="2" />
+<text  x="391.36" y="527.5" ></text>
+</g>
+<g >
+<title>void std::_Function_base::_Base_manager&lt;std::_Bind&lt;void  (635,851 samples, 0.07%)</title><rect x="307.4" y="437" width="0.5" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="310.41" y="447.5" ></text>
+</g>
+<g >
+<title>void std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt;::_M_realloc_insert&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; const&amp;&gt; (290,247 samples, 0.03%)</title><rect x="101.6" y="453" width="0.2" height="15.0" fill="rgb(226,98,23)" rx="2" ry="2" />
+<text  x="104.56" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_S_max_size (200,229 samples, 0.02%)</title><rect x="215.2" y="405" width="0.2" height="15.0" fill="rgb(219,65,15)" rx="2" ry="2" />
+<text  x="218.23" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt;, std::allocator&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt;::operator* (194,762 samples, 0.02%)</title><rect x="184.1" y="485" width="0.2" height="15.0" fill="rgb(216,54,13)" rx="2" ry="2" />
+<text  x="187.14" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::DlInfoListElement_s (158,074 samples, 0.02%)</title><rect x="206.8" y="389" width="0.1" height="15.0" fill="rgb(231,119,28)" rx="2" ry="2" />
+<text  x="209.81" y="399.5" ></text>
+</g>
+<g >
+<title>std::__detail::_List_node_header::_M_move_nodes (255,202 samples, 0.03%)</title><rect x="290.6" y="373" width="0.2" height="15.0" fill="rgb(241,169,40)" rx="2" ry="2" />
+<text  x="293.62" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt; &gt;::_M_insert_node (177,353 samples, 0.02%)</title><rect x="504.1" y="485" width="0.1" height="15.0" fill="rgb(221,75,17)" rx="2" ry="2" />
+<text  x="507.06" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;::_M_create_storage (390,330 samples, 0.04%)</title><rect x="513.9" y="517" width="0.4" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="516.95" y="527.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt;::_M_range_check (238,739 samples, 0.02%)</title><rect x="208.4" y="469" width="0.2" height="15.0" fill="rgb(230,118,28)" rx="2" ry="2" />
+<text  x="211.45" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_M_allocate (525,645 samples, 0.05%)</title><rect x="407.7" y="437" width="0.4" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="410.65" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::HigherLayerSelected_s* std::__relocate_a&lt;ns3::HigherLayerSelected_s*, ns3::HigherLayerSelected_s*, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt; (1,169,244 samples, 0.12%)</title><rect x="595.3" y="245" width="0.9" height="15.0" fill="rgb(215,50,12)" rx="2" ry="2" />
+<text  x="598.29" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::MakeEvent&lt;void  (1,764,218 samples, 0.18%)</title><rect x="62.9" y="501" width="1.4" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="65.92" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::PfFfMacScheduler::UpdateHarqProcessId (239,156 samples, 0.02%)</title><rect x="182.5" y="485" width="0.2" height="15.0" fill="rgb(222,80,19)" rx="2" ry="2" />
+<text  x="185.50" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, unsigned short, std::_Identity&lt;unsigned short&gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;unsigned short&gt; &gt;::_S_key (358,882 samples, 0.04%)</title><rect x="463.0" y="309" width="0.3" height="15.0" fill="rgb(243,177,42)" rx="2" ry="2" />
+<text  x="466.00" y="319.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt;::~vector (374,665 samples, 0.04%)</title><rect x="255.4" y="357" width="0.3" height="15.0" fill="rgb(234,134,32)" rx="2" ry="2" />
+<text  x="258.39" y="367.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt; &gt;::destroy&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; (4,680,368 samples, 0.48%)</title><rect x="545.3" y="213" width="3.8" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="548.34" y="223.5" ></text>
+</g>
+<g >
+<title>ns3::CeBitmap_e* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;ns3::CeBitmap_e const*, std::vector&lt;ns3::CeBitmap_e, std::allocator&lt;ns3::CeBitmap_e&gt; &gt; &gt;, ns3::CeBitmap_e*, ns3::CeBitmap_e&gt; (492,021 samples, 0.05%)</title><rect x="203.8" y="389" width="0.4" height="15.0" fill="rgb(233,128,30)" rx="2" ry="2" />
+<text  x="206.84" y="399.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::vector (2,627,460 samples, 0.27%)</title><rect x="300.2" y="453" width="2.1" height="15.0" fill="rgb(239,156,37)" rx="2" ry="2" />
+<text  x="303.19" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Node&gt;::operator (199,807 samples, 0.02%)</title><rect x="322.9" y="501" width="0.2" height="15.0" fill="rgb(230,118,28)" rx="2" ry="2" />
+<text  x="325.91" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::CallbackImpl&lt;void, std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt;::operator (28,473,128 samples, 2.94%)</title><rect x="441.0" y="533" width="22.9" height="15.0" fill="rgb(232,124,29)" rx="2" ry="2" />
+<text  x="444.04" y="543.5" >n..</text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteSpectrumSignalParametersDlCtrlFrame&gt;::operator (233,577 samples, 0.02%)</title><rect x="344.0" y="517" width="0.2" height="15.0" fill="rgb(226,97,23)" rx="2" ry="2" />
+<text  x="347.01" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteUeMac::LcInfo&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteUeMac::LcInfo&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteUeMac::LcInfo&gt; &gt; &gt;::find (1,422,685 samples, 0.15%)</title><rect x="690.8" y="485" width="1.2" height="15.0" fill="rgb(216,54,13)" rx="2" ry="2" />
+<text  x="693.84" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultSimulatorImpl::Schedule (273,170 samples, 0.03%)</title><rect x="53.0" y="501" width="0.2" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="56.01" y="511.5" ></text>
+</g>
+<g >
+<title>unsigned short* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;unsigned short const*, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, unsigned short*&gt; (584,765 samples, 0.06%)</title><rect x="217.4" y="437" width="0.5" height="15.0" fill="rgb(212,32,7)" rx="2" ry="2" />
+<text  x="220.44" y="447.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;int&gt; &gt;::allocate (127,251 samples, 0.01%)</title><rect x="573.4" y="325" width="0.1" height="15.0" fill="rgb(248,200,47)" rx="2" ry="2" />
+<text  x="576.38" y="335.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::FfMacSchedSapProvider::SchedUlCqiInfoReqParameters, std::allocator&lt;ns3::FfMacSchedSapProvider::SchedUlCqiInfoReqParameters&gt; &gt;::size (152,504 samples, 0.02%)</title><rect x="264.1" y="517" width="0.1" height="15.0" fill="rgb(223,86,20)" rx="2" ry="2" />
+<text  x="267.06" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::BuildDataListElement_s::~BuildDataListElement_s (871,986 samples, 0.09%)</title><rect x="139.3" y="485" width="0.7" height="15.0" fill="rgb(215,47,11)" rx="2" ry="2" />
+<text  x="142.26" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::DoDispose (1,332,739 samples, 0.14%)</title><rect x="652.6" y="373" width="1.1" height="15.0" fill="rgb(242,172,41)" rx="2" ry="2" />
+<text  x="655.61" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::Object::GetTypeId (626,440 samples, 0.06%)</title><rect x="364.8" y="469" width="0.5" height="15.0" fill="rgb(234,134,32)" rx="2" ry="2" />
+<text  x="367.76" y="479.5" ></text>
+</g>
+<g >
+<title>double* std::__uninitialized_default_n_1&lt;true&gt;::__uninit_default_n&lt;double*, unsigned long&gt; (854,790 samples, 0.09%)</title><rect x="301.2" y="389" width="0.7" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="304.24" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::Seconds (1,997,083 samples, 0.21%)</title><rect x="389.4" y="549" width="1.6" height="15.0" fill="rgb(236,145,34)" rx="2" ry="2" />
+<text  x="392.41" y="559.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;::at (190,464 samples, 0.02%)</title><rect x="23.8" y="357" width="0.1" height="15.0" fill="rgb(233,131,31)" rx="2" ry="2" />
+<text  x="26.75" y="367.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt; &gt;::end (163,346 samples, 0.02%)</title><rect x="242.4" y="453" width="0.1" height="15.0" fill="rgb(249,204,48)" rx="2" ry="2" />
+<text  x="245.36" y="463.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_move_nodes (220,549 samples, 0.02%)</title><rect x="357.3" y="389" width="0.1" height="15.0" fill="rgb(235,141,33)" rx="2" ry="2" />
+<text  x="360.25" y="399.5" ></text>
+</g>
+<g >
+<title>std::operator== (384,996 samples, 0.04%)</title><rect x="370.4" y="517" width="0.3" height="15.0" fill="rgb(229,110,26)" rx="2" ry="2" />
+<text  x="373.42" y="527.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::Callback&lt;void, ns3::SpectrumValue const&amp;&gt;*, std::vector&lt;ns3::Callback&lt;void, ns3::SpectrumValue const&amp;&gt;, std::allocator&lt;ns3::Callback&lt;void, ns3::SpectrumValue const&amp;&gt; &gt; &gt; &gt;::operator* (196,136 samples, 0.02%)</title><rect x="467.2" y="517" width="0.2" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="470.25" y="527.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::CqiListElement_s*&gt; (183,284 samples, 0.02%)</title><rect x="128.1" y="469" width="0.2" height="15.0" fill="rgb(219,67,16)" rx="2" ry="2" />
+<text  x="131.14" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::LteUePhy::GetSubChannelsForTransmission (198,351 samples, 0.02%)</title><rect x="679.1" y="517" width="0.2" height="15.0" fill="rgb(247,195,46)" rx="2" ry="2" />
+<text  x="682.10" y="527.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::~vector (190,332 samples, 0.02%)</title><rect x="674.2" y="453" width="0.1" height="15.0" fill="rgb(225,92,22)" rx="2" ry="2" />
+<text  x="677.16" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::_M_allocate (565,924 samples, 0.06%)</title><rect x="218.6" y="437" width="0.5" height="15.0" fill="rgb(220,70,16)" rx="2" ry="2" />
+<text  x="221.62" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;::_Vector_impl_data::_Vector_impl_data (274,833 samples, 0.03%)</title><rect x="351.0" y="341" width="0.2" height="15.0" fill="rgb(244,180,43)" rx="2" ry="2" />
+<text  x="353.96" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::MemberSchedSapProvider&lt;ns3::PfFfMacScheduler&gt;::SchedDlCqiInfoReq (4,461,995 samples, 0.46%)</title><rect x="134.3" y="517" width="3.6" height="15.0" fill="rgb(224,91,21)" rx="2" ry="2" />
+<text  x="137.31" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::TagBuffer::WriteU32 (368,447 samples, 0.04%)</title><rect x="554.5" y="229" width="0.3" height="15.0" fill="rgb(228,107,25)" rx="2" ry="2" />
+<text  x="557.52" y="239.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt; &gt;::_M_get_node (205,320 samples, 0.02%)</title><rect x="503.1" y="469" width="0.2" height="15.0" fill="rgb(224,87,21)" rx="2" ry="2" />
+<text  x="506.15" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;int const, double&gt; &gt;* std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_M_copy&lt;false, std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_Alloc_node&gt; (254,628 samples, 0.03%)</title><rect x="60.2" y="405" width="0.2" height="15.0" fill="rgb(224,87,21)" rx="2" ry="2" />
+<text  x="63.18" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;int, std::allocator&lt;int&gt; &gt;::_M_create_storage (336,936 samples, 0.03%)</title><rect x="574.4" y="325" width="0.3" height="15.0" fill="rgb(212,35,8)" rx="2" ry="2" />
+<text  x="577.42" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::PacketBurst (3,093,540 samples, 0.32%)</title><rect x="364.4" y="501" width="2.5" height="15.0" fill="rgb(208,15,3)" rx="2" ry="2" />
+<text  x="367.38" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_Vector_base (448,289 samples, 0.05%)</title><rect x="126.3" y="373" width="0.4" height="15.0" fill="rgb(205,2,0)" rx="2" ry="2" />
+<text  x="129.32" y="383.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::deallocate (181,716 samples, 0.02%)</title><rect x="378.3" y="277" width="0.1" height="15.0" fill="rgb(240,161,38)" rx="2" ry="2" />
+<text  x="381.26" y="287.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;double&gt;::allocate (126,483 samples, 0.01%)</title><rect x="606.9" y="405" width="0.1" height="15.0" fill="rgb(221,76,18)" rx="2" ry="2" />
+<text  x="609.92" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::NixVector&gt;::Acquire (185,459 samples, 0.02%)</title><rect x="118.2" y="453" width="0.1" height="15.0" fill="rgb(238,156,37)" rx="2" ry="2" />
+<text  x="121.20" y="463.5" ></text>
+</g>
+<g >
+<title>double* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, double*, double&gt; (1,091,128 samples, 0.11%)</title><rect x="238.1" y="277" width="0.9" height="15.0" fill="rgb(222,79,19)" rx="2" ry="2" />
+<text  x="241.15" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumModel&gt;::Ptr (197,437 samples, 0.02%)</title><rect x="54.6" y="485" width="0.2" height="15.0" fill="rgb(248,200,47)" rx="2" ry="2" />
+<text  x="57.64" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;bool, std::allocator&lt;bool&gt; &gt;::end (200,433 samples, 0.02%)</title><rect x="201.5" y="453" width="0.2" height="15.0" fill="rgb(211,29,7)" rx="2" ry="2" />
+<text  x="204.49" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::DlInfoListElement_s (485,819 samples, 0.05%)</title><rect x="510.0" y="533" width="0.4" height="15.0" fill="rgb(231,119,28)" rx="2" ry="2" />
+<text  x="512.98" y="543.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::~vector (190,389 samples, 0.02%)</title><rect x="461.1" y="261" width="0.1" height="15.0" fill="rgb(243,174,41)" rx="2" ry="2" />
+<text  x="464.10" y="271.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;unsigned int&gt;::deallocate (227,074 samples, 0.02%)</title><rect x="697.2" y="421" width="0.2" height="15.0" fill="rgb(245,186,44)" rx="2" ry="2" />
+<text  x="700.18" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::LogComponent::IsEnabled (145,431 samples, 0.01%)</title><rect x="490.0" y="517" width="0.1" height="15.0" fill="rgb(214,43,10)" rx="2" ry="2" />
+<text  x="492.98" y="527.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::clear (5,452,785 samples, 0.56%)</title><rect x="544.8" y="245" width="4.3" height="15.0" fill="rgb(217,58,13)" rx="2" ry="2" />
+<text  x="547.75" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::Packet::FindFirstMatchingByteTag (3,774,692 samples, 0.39%)</title><rect x="424.4" y="261" width="3.0" height="15.0" fill="rgb(226,98,23)" rx="2" ry="2" />
+<text  x="427.40" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::Time::~Time (269,324 samples, 0.03%)</title><rect x="665.0" y="469" width="0.2" height="15.0" fill="rgb(212,36,8)" rx="2" ry="2" />
+<text  x="667.98" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::PacketMetadata::Create (987,265 samples, 0.10%)</title><rect x="14.6" y="357" width="0.8" height="15.0" fill="rgb(231,122,29)" rx="2" ry="2" />
+<text  x="17.57" y="367.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;ns3::RlcPduListElement_s&gt;::allocate (190,161 samples, 0.02%)</title><rect x="212.9" y="325" width="0.1" height="15.0" fill="rgb(252,219,52)" rx="2" ry="2" />
+<text  x="215.85" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::HarqProcessInfoElement_t* std::__niter_wrap&lt;ns3::HarqProcessInfoElement_t*&gt; (124,684 samples, 0.01%)</title><rect x="525.2" y="245" width="0.1" height="15.0" fill="rgb(221,74,17)" rx="2" ry="2" />
+<text  x="528.24" y="255.5" ></text>
+</g>
+<g >
+<title>double* std::__fill_n_a&lt;double*, unsigned long, double&gt; (248,267 samples, 0.03%)</title><rect x="718.6" y="357" width="0.2" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="721.60" y="367.5" ></text>
+</g>
+<g >
+<title>void std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_M_construct_node&lt;std::pair&lt;int, double&gt; &gt; (224,432 samples, 0.02%)</title><rect x="293.3" y="453" width="0.2" height="15.0" fill="rgb(231,119,28)" rx="2" ry="2" />
+<text  x="296.32" y="463.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, std::vector&lt;double, std::allocator&lt;double&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::map (400,356 samples, 0.04%)</title><rect x="232.5" y="469" width="0.3" height="15.0" fill="rgb(249,204,48)" rx="2" ry="2" />
+<text  x="235.50" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue const&gt;::operator (124,716 samples, 0.01%)</title><rect x="728.6" y="501" width="0.1" height="15.0" fill="rgb(248,200,47)" rx="2" ry="2" />
+<text  x="731.63" y="511.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::list (214,722 samples, 0.02%)</title><rect x="623.7" y="485" width="0.1" height="15.0" fill="rgb(236,145,34)" rx="2" ry="2" />
+<text  x="626.67" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;0ul, ns3::LteEnbPhy*, ns3::Ptr&lt;ns3::PacketBurst&gt; &gt;::~_Tuple_impl (343,746 samples, 0.04%)</title><rect x="281.3" y="469" width="0.3" height="15.0" fill="rgb(218,61,14)" rx="2" ry="2" />
+<text  x="284.32" y="479.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::__uninitialized_fill_n_a&lt;unsigned char*, unsigned long, unsigned char, unsigned char&gt; (189,712 samples, 0.02%)</title><rect x="102.0" y="437" width="0.1" height="15.0" fill="rgb(245,186,44)" rx="2" ry="2" />
+<text  x="104.98" y="447.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt; const*, std::vector&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt; &gt; &gt; &gt;::difference_type __gnu_cxx::operator-&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt; const*, std::vector&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt; &gt; &gt; &gt; (232,766 samples, 0.02%)</title><rect x="289.6" y="517" width="0.1" height="15.0" fill="rgb(222,79,19)" rx="2" ry="2" />
+<text  x="292.56" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_lower_bound (257,394 samples, 0.03%)</title><rect x="616.0" y="437" width="0.2" height="15.0" fill="rgb(229,113,27)" rx="2" ry="2" />
+<text  x="618.96" y="447.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;unsigned char*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; std::copy&lt;__gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;unsigned char*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt; (155,513 samples, 0.02%)</title><rect x="134.6" y="437" width="0.1" height="15.0" fill="rgb(230,115,27)" rx="2" ry="2" />
+<text  x="137.58" y="447.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::push_back (2,004,725 samples, 0.21%)</title><rect x="589.8" y="277" width="1.7" height="15.0" fill="rgb(225,94,22)" rx="2" ry="2" />
+<text  x="592.85" y="287.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_insert&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; const&amp;&gt; (1,464,277 samples, 0.15%)</title><rect x="148.7" y="389" width="1.1" height="15.0" fill="rgb(210,27,6)" rx="2" ry="2" />
+<text  x="151.66" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::operator- (384,216 samples, 0.04%)</title><rect x="311.9" y="485" width="0.3" height="15.0" fill="rgb(231,122,29)" rx="2" ry="2" />
+<text  x="314.86" y="495.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; const*, std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt; &gt;::__normal_iterator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;*, void&gt; (177,392 samples, 0.02%)</title><rect x="619.2" y="533" width="0.2" height="15.0" fill="rgb(207,10,2)" rx="2" ry="2" />
+<text  x="622.24" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::Buffer::Buffer (424,494 samples, 0.04%)</title><rect x="624.2" y="485" width="0.3" height="15.0" fill="rgb(254,226,54)" rx="2" ry="2" />
+<text  x="627.19" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::_M_default_initialize (197,197 samples, 0.02%)</title><rect x="646.6" y="389" width="0.2" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="649.59" y="399.5" ></text>
+</g>
+<g >
+<title>void std::_Function_base::_Base_manager&lt;std::_Bind&lt;void  (494,131 samples, 0.05%)</title><rect x="618.6" y="469" width="0.4" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="621.63" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue const&gt;::~Ptr (896,241 samples, 0.09%)</title><rect x="772.8" y="501" width="0.8" height="15.0" fill="rgb(240,165,39)" rx="2" ry="2" />
+<text  x="775.83" y="511.5" ></text>
+</g>
+<g >
+<title>double* std::__uninitialized_default_n_a&lt;double*, unsigned long, double&gt; (396,416 samples, 0.04%)</title><rect x="57.0" y="437" width="0.3" height="15.0" fill="rgb(248,199,47)" rx="2" ry="2" />
+<text  x="60.01" y="447.5" ></text>
+</g>
+<g >
+<title>std::less&lt;unsigned char&gt;::operator (261,389 samples, 0.03%)</title><rect x="169.1" y="405" width="0.2" height="15.0" fill="rgb(250,210,50)" rx="2" ry="2" />
+<text  x="172.09" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy::StartSubFrame (1,650,854 samples, 0.17%)</title><rect x="15.8" y="565" width="1.3" height="15.0" fill="rgb(234,136,32)" rx="2" ry="2" />
+<text  x="18.79" y="575.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapProvider::ReportBufferStatusParameters&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider::ReportBufferStatusParameters&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider::ReportBufferStatusParameters&gt; &gt; &gt;::_S_left (126,198 samples, 0.01%)</title><rect x="570.7" y="277" width="0.1" height="15.0" fill="rgb(208,15,3)" rx="2" ry="2" />
+<text  x="573.73" y="287.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt;::vector (247,613 samples, 0.03%)</title><rect x="420.8" y="309" width="0.2" height="15.0" fill="rgb(210,23,5)" rx="2" ry="2" />
+<text  x="423.80" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy*&amp; std::__get_helper&lt;0ul, ns3::LteEnbPhy*, ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; (368,229 samples, 0.04%)</title><rect x="752.0" y="581" width="0.2" height="15.0" fill="rgb(237,147,35)" rx="2" ry="2" />
+<text  x="754.95" y="591.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;::push_back (279,441 samples, 0.03%)</title><rect x="296.4" y="533" width="0.3" height="15.0" fill="rgb(251,213,51)" rx="2" ry="2" />
+<text  x="299.44" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::DlDciLteControlMessage&gt;::Acquire (124,599 samples, 0.01%)</title><rect x="534.0" y="325" width="0.1" height="15.0" fill="rgb(218,63,15)" rx="2" ry="2" />
+<text  x="537.04" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::MakeEvent&lt;&gt; (238,924 samples, 0.02%)</title><rect x="36.6" y="725" width="0.2" height="15.0" fill="rgb(205,0,0)" rx="2" ry="2" />
+<text  x="39.64" y="735.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;int const, double&gt; &gt;* std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_M_copy&lt;false, std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_Alloc_node&gt; (1,456,622 samples, 0.15%)</title><rect x="59.2" y="453" width="1.2" height="15.0" fill="rgb(224,87,21)" rx="2" ry="2" />
+<text  x="62.21" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::HarqProcessInfoElement_t* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;ns3::HarqProcessInfoElement_t const*, std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt;, ns3::HarqProcessInfoElement_t*, ns3::HarqProcessInfoElement_t&gt; (1,606,901 samples, 0.17%)</title><rect x="352.7" y="469" width="1.3" height="15.0" fill="rgb(252,220,52)" rx="2" ry="2" />
+<text  x="355.70" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::HarqProcessInfoElement_t* std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;ns3::HarqProcessInfoElement_t const*, std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt;, ns3::HarqProcessInfoElement_t*&gt; (368,668 samples, 0.04%)</title><rect x="525.0" y="261" width="0.3" height="15.0" fill="rgb(210,26,6)" rx="2" ry="2" />
+<text  x="528.04" y="271.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::vector (1,820,097 samples, 0.19%)</title><rect x="686.8" y="469" width="1.4" height="15.0" fill="rgb(206,9,2)" rx="2" ry="2" />
+<text  x="689.78" y="479.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::DlInfoListElement_s::HarqStatus_e*&gt; (305,928 samples, 0.03%)</title><rect x="256.7" y="357" width="0.2" height="15.0" fill="rgb(231,124,29)" rx="2" ry="2" />
+<text  x="259.69" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::End (439,641 samples, 0.05%)</title><rect x="491.8" y="549" width="0.3" height="15.0" fill="rgb(242,174,41)" rx="2" ry="2" />
+<text  x="494.79" y="559.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, unsigned int, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt; &gt;::find (147,114 samples, 0.02%)</title><rect x="94.4" y="469" width="0.1" height="15.0" fill="rgb(239,156,37)" rx="2" ry="2" />
+<text  x="97.40" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt;::size (156,294 samples, 0.02%)</title><rect x="262.6" y="501" width="0.1" height="15.0" fill="rgb(222,82,19)" rx="2" ry="2" />
+<text  x="265.61" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_Auto_node::_M_key (314,000 samples, 0.03%)</title><rect x="332.2" y="453" width="0.3" height="15.0" fill="rgb(238,154,36)" rx="2" ry="2" />
+<text  x="335.23" y="463.5" ></text>
+</g>
+<g >
+<title>void std::_Construct&lt;ns3::UlInfoListElement_s, ns3::UlInfoListElement_s const&amp;&gt; (496,472 samples, 0.05%)</title><rect x="266.5" y="421" width="0.4" height="15.0" fill="rgb(242,172,41)" rx="2" ry="2" />
+<text  x="269.47" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::Multiply (372,175 samples, 0.04%)</title><rect x="493.3" y="533" width="0.3" height="15.0" fill="rgb(215,46,11)" rx="2" ry="2" />
+<text  x="496.27" y="543.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;::_M_get_node (539,388 samples, 0.06%)</title><rect x="287.6" y="453" width="0.5" height="15.0" fill="rgb(242,171,40)" rx="2" ry="2" />
+<text  x="290.65" y="463.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::Buffer::Data**, std::vector&lt;ns3::Buffer::Data*, std::allocator&lt;ns3::Buffer::Data*&gt; &gt; &gt;::operator- (234,189 samples, 0.02%)</title><rect x="31.5" y="325" width="0.2" height="15.0" fill="rgb(251,212,50)" rx="2" ry="2" />
+<text  x="34.55" y="335.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt;::_M_valptr (407,755 samples, 0.04%)</title><rect x="321.5" y="421" width="0.3" height="15.0" fill="rgb(220,69,16)" rx="2" ry="2" />
+<text  x="324.47" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumPhy&gt;::Ptr (158,076 samples, 0.02%)</title><rect x="671.9" y="517" width="0.1" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="674.91" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::Singleton&lt;ns3::IidManager&gt;::Get (156,696 samples, 0.02%)</title><rect x="34.5" y="405" width="0.1" height="15.0" fill="rgb(222,79,19)" rx="2" ry="2" />
+<text  x="37.48" y="415.5" ></text>
+</g>
+<g >
+<title>atan2f32x (411,872 samples, 0.04%)</title><rect x="702.6" y="517" width="0.3" height="15.0" fill="rgb(240,164,39)" rx="2" ry="2" />
+<text  x="705.62" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::EnbMacMemberLteMacSapProvider&lt;ns3::NoOpComponentCarrierManager&gt;::TransmitPdu (886,429 samples, 0.09%)</title><rect x="17.2" y="405" width="0.7" height="15.0" fill="rgb(247,196,47)" rx="2" ry="2" />
+<text  x="20.17" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::SbMeasResult_s::SbMeasResult_s (321,656 samples, 0.03%)</title><rect x="592.5" y="245" width="0.3" height="15.0" fill="rgb(235,141,33)" rx="2" ry="2" />
+<text  x="595.50" y="255.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::vector (1,066,574 samples, 0.11%)</title><rect x="56.7" y="469" width="0.9" height="15.0" fill="rgb(239,156,37)" rx="2" ry="2" />
+<text  x="59.74" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Bind_helper&lt;std::__or_&lt;std::is_integral&lt;std::decay&lt;void  (1,915,952 samples, 0.20%)</title><rect x="708.8" y="469" width="1.5" height="15.0" fill="rgb(237,148,35)" rx="2" ry="2" />
+<text  x="711.79" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;2ul, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::_M_head (241,699 samples, 0.02%)</title><rect x="756.7" y="565" width="0.2" height="15.0" fill="rgb(212,36,8)" rx="2" ry="2" />
+<text  x="759.73" y="575.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::_M_fill_insert (3,063,118 samples, 0.32%)</title><rect x="251.3" y="469" width="2.5" height="15.0" fill="rgb(236,146,34)" rx="2" ry="2" />
+<text  x="254.31" y="479.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;is_invocable_r_v&lt;void, ns3::Callback&lt;void, std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt;::Callback&lt;void  (75,064,377 samples, 7.74%)</title><rect x="516.2" y="485" width="60.4" height="15.0" fill="rgb(235,139,33)" rx="2" ry="2" />
+<text  x="519.22" y="495.5" >std::e..</text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;1ul, unsigned int, unsigned int&gt;::_M_head (151,872 samples, 0.02%)</title><rect x="754.9" y="565" width="0.2" height="15.0" fill="rgb(248,198,47)" rx="2" ry="2" />
+<text  x="757.93" y="575.5" ></text>
+</g>
+<g >
+<title>void std::_Function_base::_Base_manager&lt;std::_Bind&lt;void  (411,266 samples, 0.04%)</title><rect x="87.6" y="437" width="0.4" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="90.62" y="447.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::list&lt;std::_List_const_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;, void&gt; (214,595 samples, 0.02%)</title><rect x="346.5" y="469" width="0.1" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="349.47" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy::QueueUlDci (398,861 samples, 0.04%)</title><rect x="296.4" y="549" width="0.3" height="15.0" fill="rgb(235,142,34)" rx="2" ry="2" />
+<text  x="299.41" y="559.5" ></text>
+</g>
+<g >
+<title>int&amp; std::vector&lt;int, std::allocator&lt;int&gt; &gt;::emplace_back&lt;int&gt; (463,033 samples, 0.05%)</title><rect x="396.5" y="533" width="0.4" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="399.55" y="543.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::vector (234,309 samples, 0.02%)</title><rect x="385.1" y="373" width="0.2" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="388.13" y="383.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;int&gt; &gt;::allocate (152,677 samples, 0.02%)</title><rect x="397.5" y="501" width="0.1" height="15.0" fill="rgb(248,200,47)" rx="2" ry="2" />
+<text  x="400.46" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteSpectrumSignalParametersDataFrame&gt; ns3::Create&lt;ns3::LteSpectrumSignalParametersDataFrame&gt; (1,650,971 samples, 0.17%)</title><rect x="669.3" y="533" width="1.3" height="15.0" fill="rgb(223,86,20)" rx="2" ry="2" />
+<text  x="672.26" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::LteInterference::EndRx (324,769 samples, 0.03%)</title><rect x="611.9" y="549" width="0.3" height="15.0" fill="rgb(208,17,4)" rx="2" ry="2" />
+<text  x="614.94" y="559.5" ></text>
+</g>
+<g >
+<title>double* std::__copy_move&lt;false, true, std::random_access_iterator_tag&gt;::__copy_m&lt;double const, double&gt; (242,020 samples, 0.02%)</title><rect x="412.7" y="373" width="0.2" height="15.0" fill="rgb(208,16,3)" rx="2" ry="2" />
+<text  x="415.73" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::ObjectDeleter::Delete (191,238 samples, 0.02%)</title><rect x="97.0" y="405" width="0.1" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="99.98" y="415.5" ></text>
+</g>
+<g >
+<title>double* std::__copy_move_a2&lt;false, double const*, double*&gt; (326,485 samples, 0.03%)</title><rect x="412.7" y="389" width="0.2" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="415.66" y="399.5" ></text>
+</g>
+<g >
+<title>operator new (249,753 samples, 0.03%)</title><rect x="72.8" y="485" width="0.2" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="75.85" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::Copy (3,250,861 samples, 0.34%)</title><rect x="645.9" y="453" width="2.6" height="15.0" fill="rgb(241,167,40)" rx="2" ry="2" />
+<text  x="648.86" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;int const, double&gt; &gt; std::map&lt;int, double, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::emplace_hint&lt;std::pair&lt;int, double&gt; &gt; (385,367 samples, 0.04%)</title><rect x="110.9" y="501" width="0.3" height="15.0" fill="rgb(232,126,30)" rx="2" ry="2" />
+<text  x="113.86" y="511.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::FfMacSchedSapProvider::SchedUlCqiInfoReqParameters&gt; (745,848 samples, 0.08%)</title><rect x="263.5" y="437" width="0.6" height="15.0" fill="rgb(212,34,8)" rx="2" ry="2" />
+<text  x="266.46" y="447.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, ns3::LteUePhy::UeMeasurementsElement, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::LteUePhy::UeMeasurementsElement&gt; &gt; &gt;::find (162,761 samples, 0.02%)</title><rect x="601.2" y="309" width="0.1" height="15.0" fill="rgb(235,141,33)" rx="2" ry="2" />
+<text  x="604.21" y="319.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt;::_M_deallocate (157,246 samples, 0.02%)</title><rect x="25.0" y="293" width="0.1" height="15.0" fill="rgb(219,66,16)" rx="2" ry="2" />
+<text  x="28.01" y="303.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;::_M_ptr (158,716 samples, 0.02%)</title><rect x="274.4" y="389" width="0.1" height="15.0" fill="rgb(219,66,15)" rx="2" ry="2" />
+<text  x="277.37" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::operator= (248,954 samples, 0.03%)</title><rect x="581.6" y="325" width="0.2" height="15.0" fill="rgb(243,177,42)" rx="2" ry="2" />
+<text  x="584.63" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::~PacketBurst (776,679 samples, 0.08%)</title><rect x="774.8" y="309" width="0.6" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="777.81" y="319.5" ></text>
+</g>
+<g >
+<title>decltype  (564,633 samples, 0.06%)</title><rect x="499.7" y="453" width="0.4" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="502.67" y="463.5" ></text>
+</g>
+<g >
+<title>int* std::copy&lt;__gnu_cxx::__normal_iterator&lt;int const*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt;, int*&gt; (627,364 samples, 0.06%)</title><rect x="573.8" y="293" width="0.5" height="15.0" fill="rgb(215,50,12)" rx="2" ry="2" />
+<text  x="576.81" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::HarqProcessInfoElement_t* std::__copy_move_a2&lt;false, ns3::HarqProcessInfoElement_t const*, ns3::HarqProcessInfoElement_t*&gt; (437,467 samples, 0.05%)</title><rect x="513.1" y="437" width="0.4" height="15.0" fill="rgb(222,82,19)" rx="2" ry="2" />
+<text  x="516.12" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::operator[] (524,698 samples, 0.05%)</title><rect x="678.2" y="501" width="0.4" height="15.0" fill="rgb(248,202,48)" rx="2" ry="2" />
+<text  x="681.19" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::TracedCallback&lt;ns3::Ptr&lt;ns3::PacketBurst const&gt; &gt;::operator (283,255 samples, 0.03%)</title><rect x="613.3" y="549" width="0.3" height="15.0" fill="rgb(231,121,28)" rx="2" ry="2" />
+<text  x="616.35" y="559.5" ></text>
+</g>
+<g >
+<title>ns3::DlDciListElement_s::operator= (501,657 samples, 0.05%)</title><rect x="147.9" y="437" width="0.4" height="15.0" fill="rgb(254,228,54)" rx="2" ry="2" />
+<text  x="150.88" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Vector3D::Vector3D (126,463 samples, 0.01%)</title><rect x="740.2" y="469" width="0.1" height="15.0" fill="rgb(243,178,42)" rx="2" ry="2" />
+<text  x="743.21" y="479.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::Ptr&lt;ns3::Object&gt;*&gt; (158,025 samples, 0.02%)</title><rect x="502.6" y="341" width="0.1" height="15.0" fill="rgb(248,201,48)" rx="2" ry="2" />
+<text  x="505.61" y="351.5" ></text>
+</g>
+<g >
+<title>std::map&lt;ns3::TbId_t, ns3::tbInfo_t, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::find (930,818 samples, 0.10%)</title><rect x="386.5" y="533" width="0.7" height="15.0" fill="rgb(224,87,20)" rx="2" ry="2" />
+<text  x="389.49" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteHarqPhy&gt;::operator (199,830 samples, 0.02%)</title><rect x="492.1" y="549" width="0.2" height="15.0" fill="rgb(228,110,26)" rx="2" ry="2" />
+<text  x="495.14" y="559.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;::_M_ptr (164,453 samples, 0.02%)</title><rect x="222.0" y="405" width="0.1" height="15.0" fill="rgb(238,152,36)" rx="2" ry="2" />
+<text  x="224.96" y="415.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::vector (1,886,775 samples, 0.19%)</title><rect x="573.6" y="357" width="1.5" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="576.55" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter&gt;::~SimpleRefCount (491,149 samples, 0.05%)</title><rect x="378.9" y="309" width="0.4" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="381.93" y="319.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::PacketMetadata::Data*, std::allocator&lt;ns3::PacketMetadata::Data*&gt; &gt;::empty (561,769 samples, 0.06%)</title><rect x="558.3" y="197" width="0.4" height="15.0" fill="rgb(248,202,48)" rx="2" ry="2" />
+<text  x="561.26" y="207.5" ></text>
+</g>
+<g >
+<title>[libc.so.6] (2,105,662 samples, 0.22%)</title><rect x="15.5" y="805" width="1.6" height="15.0" fill="rgb(223,84,20)" rx="2" ry="2" />
+<text  x="18.45" y="815.5" ></text>
+</g>
+<g >
+<title>void  (160,326 samples, 0.02%)</title><rect x="418.9" y="389" width="0.1" height="15.0" fill="rgb(253,221,53)" rx="2" ry="2" />
+<text  x="421.90" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::_M_end (236,415 samples, 0.02%)</title><rect x="189.5" y="453" width="0.2" height="15.0" fill="rgb(215,49,11)" rx="2" ry="2" />
+<text  x="192.51" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;::operator (230,158 samples, 0.02%)</title><rect x="323.8" y="501" width="0.1" height="15.0" fill="rgb(243,179,42)" rx="2" ry="2" />
+<text  x="326.75" y="511.5" ></text>
+</g>
+<g >
+<title> (200,105 samples, 0.02%)</title><rect x="778.3" y="725" width="0.2" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="781.35" y="735.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, unsigned int&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt; &gt;::find (1,368,772 samples, 0.14%)</title><rect x="223.8" y="469" width="1.1" height="15.0" fill="rgb(214,44,10)" rx="2" ry="2" />
+<text  x="226.75" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::vector (1,044,098 samples, 0.11%)</title><rect x="677.3" y="469" width="0.8" height="15.0" fill="rgb(239,156,37)" rx="2" ry="2" />
+<text  x="680.26" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::BuildDataListElement_s* std::__do_uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::BuildDataListElement_s const*, std::vector&lt;ns3::BuildDataListElement_s, std::allocator&lt;ns3::BuildDataListElement_s&gt; &gt; &gt;, ns3::BuildDataListElement_s*&gt; (515,194 samples, 0.05%)</title><rect x="141.9" y="389" width="0.4" height="15.0" fill="rgb(213,38,9)" rx="2" ry="2" />
+<text  x="144.92" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt; &gt;::_S_key (411,593 samples, 0.04%)</title><rect x="241.9" y="437" width="0.3" height="15.0" fill="rgb(219,66,15)" rx="2" ry="2" />
+<text  x="244.91" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::HarqStatus_e const* std::__niter_base&lt;ns3::DlInfoListElement_s::HarqStatus_e const*, std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt; &gt; (383,145 samples, 0.04%)</title><rect x="259.6" y="293" width="0.3" height="15.0" fill="rgb(205,1,0)" rx="2" ry="2" />
+<text  x="262.60" y="303.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::_Vector_base (204,699 samples, 0.02%)</title><rect x="478.0" y="261" width="0.2" height="15.0" fill="rgb(219,65,15)" rx="2" ry="2" />
+<text  x="481.02" y="271.5" ></text>
+</g>
+<g >
+<title>std::less&lt;unsigned short&gt;::operator (441,975 samples, 0.05%)</title><rect x="434.3" y="277" width="0.4" height="15.0" fill="rgb(207,11,2)" rx="2" ry="2" />
+<text  x="437.30" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumModel const&gt;::Ptr (161,203 samples, 0.02%)</title><rect x="327.0" y="469" width="0.2" height="15.0" fill="rgb(232,125,30)" rx="2" ry="2" />
+<text  x="330.02" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt; &gt;::_M_erase (234,910 samples, 0.02%)</title><rect x="509.5" y="517" width="0.2" height="15.0" fill="rgb(220,70,16)" rx="2" ry="2" />
+<text  x="512.50" y="527.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt; &gt;::construct&lt;ns3::Ptr&lt;ns3::Packet&gt;, ns3::Ptr&lt;ns3::Packet&gt; const&amp;&gt; (274,733 samples, 0.03%)</title><rect x="23.2" y="293" width="0.3" height="15.0" fill="rgb(254,228,54)" rx="2" ry="2" />
+<text  x="26.25" y="303.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::VendorSpecificListElement_s*, std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt; &gt; std::__niter_wrap&lt;__gnu_cxx::__normal_iterator&lt;ns3::VendorSpecificListElement_s*, std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt; &gt;, ns3::VendorSpecificListElement_s*&gt; (150,740 samples, 0.02%)</title><rect x="25.8" y="245" width="0.1" height="15.0" fill="rgb(208,15,3)" rx="2" ry="2" />
+<text  x="28.78" y="255.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt; &gt; &gt;::erase (483,013 samples, 0.05%)</title><rect x="110.4" y="517" width="0.4" height="15.0" fill="rgb(253,223,53)" rx="2" ry="2" />
+<text  x="113.44" y="527.5" ></text>
+</g>
+<g >
+<title>void std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;::_M_realloc_insert&lt;ns3::RlcPduListElement_s const&amp;&gt; (943,698 samples, 0.10%)</title><rect x="209.4" y="469" width="0.8" height="15.0" fill="rgb(219,68,16)" rx="2" ry="2" />
+<text  x="212.41" y="479.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_assign_dispatch&lt;std::_List_const_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; (804,377 samples, 0.08%)</title><rect x="318.7" y="437" width="0.7" height="15.0" fill="rgb(237,148,35)" rx="2" ry="2" />
+<text  x="321.72" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::SpectrumValue, ns3::Empty, ns3::DefaultDeleter&lt;ns3::SpectrumValue&gt; &gt;::Ref (201,883 samples, 0.02%)</title><rect x="751.4" y="533" width="0.2" height="15.0" fill="rgb(212,35,8)" rx="2" ry="2" />
+<text  x="754.40" y="543.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::~list (221,766 samples, 0.02%)</title><rect x="324.3" y="421" width="0.2" height="15.0" fill="rgb(222,80,19)" rx="2" ry="2" />
+<text  x="327.31" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::MakeEvent&lt;void  (8,388,558 samples, 0.87%)</title><rect x="770.5" y="677" width="6.7" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="773.48" y="687.5" ></text>
+</g>
+<g >
+<title>malloc (195,774 samples, 0.02%)</title><rect x="210.9" y="373" width="0.2" height="15.0" fill="rgb(230,119,28)" rx="2" ry="2" />
+<text  x="213.92" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::EventImpl::EventImpl (513,449 samples, 0.05%)</title><rect x="280.8" y="501" width="0.5" height="15.0" fill="rgb(247,195,46)" rx="2" ry="2" />
+<text  x="283.84" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Packet&gt;::Ptr (267,680 samples, 0.03%)</title><rect x="628.1" y="517" width="0.2" height="15.0" fill="rgb(230,117,28)" rx="2" ry="2" />
+<text  x="631.07" y="527.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; &gt; &gt;::end (265,362 samples, 0.03%)</title><rect x="349.0" y="533" width="0.2" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="352.01" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultDeleter&lt;ns3::SpectrumSignalParameters&gt;::Delete (601,254 samples, 0.06%)</title><rect x="324.0" y="469" width="0.5" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="327.00" y="479.5" ></text>
+</g>
+<g >
+<title>std::_List_node&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt;* std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::_M_create_node&lt;ns3::Ptr&lt;ns3::Packet&gt; const&amp;&gt; (1,367,896 samples, 0.14%)</title><rect x="563.3" y="149" width="1.1" height="15.0" fill="rgb(211,30,7)" rx="2" ry="2" />
+<text  x="566.30" y="159.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;bool, std::allocator&lt;bool&gt; &gt;::_M_fill_insert (533,523 samples, 0.06%)</title><rect x="100.2" y="437" width="0.4" height="15.0" fill="rgb(229,112,26)" rx="2" ry="2" />
+<text  x="103.19" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_copy (158,119 samples, 0.02%)</title><rect x="340.6" y="261" width="0.2" height="15.0" fill="rgb(246,192,46)" rx="2" ry="2" />
+<text  x="343.65" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumSignalParameters::SpectrumSignalParameters (821,477 samples, 0.08%)</title><rect x="88.8" y="501" width="0.6" height="15.0" fill="rgb(219,67,16)" rx="2" ry="2" />
+<text  x="91.76" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::AntennaModel&gt; ns3::DynamicCast&lt;ns3::AntennaModel, ns3::Object&gt; (814,268 samples, 0.08%)</title><rect x="741.5" y="549" width="0.7" height="15.0" fill="rgb(243,176,42)" rx="2" ry="2" />
+<text  x="744.53" y="559.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::Packet, ns3::Empty, ns3::DefaultDeleter&lt;ns3::Packet&gt; &gt;::Unref (4,472,125 samples, 0.46%)</title><rect x="545.5" y="165" width="3.6" height="15.0" fill="rgb(215,47,11)" rx="2" ry="2" />
+<text  x="548.51" y="175.5" ></text>
+</g>
+<g >
+<title>ns3::LteInterference*&amp; std::__get_helper&lt;0ul, ns3::LteInterference*, ns3::Ptr&lt;ns3::SpectrumValue const&gt;, unsigned int&gt; (491,189 samples, 0.05%)</title><rect x="752.8" y="581" width="0.4" height="15.0" fill="rgb(254,225,53)" rx="2" ry="2" />
+<text  x="755.81" y="591.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Packet&gt; ns3::Create&lt;ns3::Packet, unsigned int&amp;&gt; (229,600 samples, 0.02%)</title><rect x="15.5" y="373" width="0.2" height="15.0" fill="rgb(253,223,53)" rx="2" ry="2" />
+<text  x="18.49" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_insert_and_rebalance (153,387 samples, 0.02%)</title><rect x="527.8" y="261" width="0.2" height="15.0" fill="rgb(225,94,22)" rx="2" ry="2" />
+<text  x="530.84" y="271.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;4ul, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::~_Tuple_impl (258,906 samples, 0.03%)</title><rect x="666.3" y="373" width="0.2" height="15.0" fill="rgb(249,206,49)" rx="2" ry="2" />
+<text  x="669.30" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt;::_Vector_impl::_Vector_impl (227,726 samples, 0.02%)</title><rect x="125.8" y="341" width="0.2" height="15.0" fill="rgb(217,58,13)" rx="2" ry="2" />
+<text  x="128.80" y="351.5" ></text>
+</g>
+<g >
+<title>decltype  (194,069 samples, 0.02%)</title><rect x="104.6" y="309" width="0.2" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="107.61" y="319.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::at (127,693 samples, 0.01%)</title><rect x="575.9" y="357" width="0.1" height="15.0" fill="rgb(251,215,51)" rx="2" ry="2" />
+<text  x="578.89" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::LteUePhy* ns3::PeekPointer&lt;ns3::LteUePhy&gt; (477,176 samples, 0.05%)</title><rect x="579.0" y="389" width="0.4" height="15.0" fill="rgb(247,196,46)" rx="2" ry="2" />
+<text  x="582.01" y="399.5" ></text>
+</g>
+<g >
+<title>decltype  (323,441 samples, 0.03%)</title><rect x="596.3" y="245" width="0.3" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="599.30" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Packet&gt;::operator (367,419 samples, 0.04%)</title><rect x="492.8" y="549" width="0.3" height="15.0" fill="rgb(224,88,21)" rx="2" ry="2" />
+<text  x="495.78" y="559.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt;::construct&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, ns3::Ptr&lt;ns3::LteControlMessage&gt; const&amp;&gt; (266,180 samples, 0.03%)</title><rect x="319.1" y="325" width="0.2" height="15.0" fill="rgb(231,120,28)" rx="2" ry="2" />
+<text  x="322.05" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::Add (367,754 samples, 0.04%)</title><rect x="410.2" y="517" width="0.3" height="15.0" fill="rgb(234,136,32)" rx="2" ry="2" />
+<text  x="413.16" y="527.5" ></text>
+</g>
+<g >
+<title>[ld-linux-x86-64.so.2] (147,352 samples, 0.02%)</title><rect x="10.1" y="741" width="0.1" height="15.0" fill="rgb(243,178,42)" rx="2" ry="2" />
+<text  x="13.10" y="751.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;std::is_constructible&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt;::value, std::pair&lt;std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, bool&gt; &gt;::type std::map&lt;ns3::Scheduler::EventKey, ns3::EventImpl*, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::insert&lt;std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (4,750,006 samples, 0.49%)</title><rect x="660.7" y="453" width="3.8" height="15.0" fill="rgb(211,29,7)" rx="2" ry="2" />
+<text  x="663.71" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::tbInfo_t::~tbInfo_t (865,871 samples, 0.09%)</title><rect x="505.6" y="421" width="0.7" height="15.0" fill="rgb(210,26,6)" rx="2" ry="2" />
+<text  x="508.58" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteUeMac::LcInfo&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteUeMac::LcInfo&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteUeMac::LcInfo&gt; &gt; &gt;::end (200,190 samples, 0.02%)</title><rect x="571.6" y="309" width="0.1" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="574.58" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumChannel&gt;::operator (153,603 samples, 0.02%)</title><rect x="671.1" y="533" width="0.1" height="15.0" fill="rgb(250,207,49)" rx="2" ry="2" />
+<text  x="674.08" y="543.5" ></text>
+</g>
+<g >
+<title>bool __gnu_cxx::operator==&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; (361,717 samples, 0.04%)</title><rect x="416.0" y="517" width="0.3" height="15.0" fill="rgb(205,3,0)" rx="2" ry="2" />
+<text  x="419.03" y="527.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Ptr&lt;ns3::Object&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Object&gt; &gt; &gt;::~vector (893,699 samples, 0.09%)</title><rect x="549.7" y="213" width="0.7" height="15.0" fill="rgb(223,83,19)" rx="2" ry="2" />
+<text  x="552.70" y="223.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::FfMacSchedSapProvider::SchedUlCqiInfoReqParameters, std::allocator&lt;ns3::FfMacSchedSapProvider::SchedUlCqiInfoReqParameters&gt; &gt;::at (476,232 samples, 0.05%)</title><rect x="262.7" y="517" width="0.4" height="15.0" fill="rgb(209,20,4)" rx="2" ry="2" />
+<text  x="265.73" y="527.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::end (165,055 samples, 0.02%)</title><rect x="493.4" y="517" width="0.2" height="15.0" fill="rgb(237,147,35)" rx="2" ry="2" />
+<text  x="496.44" y="527.5" ></text>
+</g>
+<g >
+<title>malloc (165,510 samples, 0.02%)</title><rect x="562.3" y="149" width="0.1" height="15.0" fill="rgb(230,119,28)" rx="2" ry="2" />
+<text  x="565.26" y="159.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt;::operator (167,770 samples, 0.02%)</title><rect x="565.2" y="229" width="0.2" height="15.0" fill="rgb(249,206,49)" rx="2" ry="2" />
+<text  x="568.23" y="239.5" ></text>
+</g>
+<g >
+<title>std::_List_const_iterator&lt;ns3::Callback&lt;void, unsigned short, unsigned char, unsigned int&gt; &gt;::_List_const_iterator (127,995 samples, 0.01%)</title><rect x="567.2" y="229" width="0.1" height="15.0" fill="rgb(237,151,36)" rx="2" ry="2" />
+<text  x="570.15" y="239.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;::pair&lt;unsigned int const&amp;, ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp;&gt; (151,208 samples, 0.02%)</title><rect x="658.9" y="389" width="0.2" height="15.0" fill="rgb(213,40,9)" rx="2" ry="2" />
+<text  x="661.95" y="399.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;unsigned char*&gt; (237,950 samples, 0.02%)</title><rect x="686.4" y="421" width="0.1" height="15.0" fill="rgb(230,116,27)" rx="2" ry="2" />
+<text  x="689.35" y="431.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_move_nodes (452,596 samples, 0.05%)</title><rect x="621.9" y="389" width="0.3" height="15.0" fill="rgb(235,141,33)" rx="2" ry="2" />
+<text  x="624.86" y="399.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::operator= (528,635 samples, 0.05%)</title><rect x="140.3" y="469" width="0.4" height="15.0" fill="rgb(224,91,21)" rx="2" ry="2" />
+<text  x="143.28" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::MemberSchedSapProvider&lt;ns3::PfFfMacScheduler&gt;::SchedDlTriggerReq (415,834 samples, 0.04%)</title><rect x="15.5" y="501" width="0.3" height="15.0" fill="rgb(247,193,46)" rx="2" ry="2" />
+<text  x="18.45" y="511.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;signed char, std::allocator&lt;signed char&gt; &gt;::at (282,384 samples, 0.03%)</title><rect x="532.0" y="341" width="0.3" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="535.05" y="351.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;::_M_clear (1,220,101 samples, 0.13%)</title><rect x="392.8" y="517" width="1.0" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="395.84" y="527.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;unsigned char&gt; &gt;::allocate (157,055 samples, 0.02%)</title><rect x="214.0" y="437" width="0.2" height="15.0" fill="rgb(243,177,42)" rx="2" ry="2" />
+<text  x="217.05" y="447.5" ></text>
+</g>
+<g >
+<title>void std::destroy_at&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt; &gt; (234,294 samples, 0.02%)</title><rect x="291.8" y="485" width="0.2" height="15.0" fill="rgb(240,164,39)" rx="2" ry="2" />
+<text  x="294.83" y="495.5" ></text>
+</g>
+<g >
+<title>void std::__invoke_impl&lt;void, ns3::Callback&lt;void, std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt;::Callback&lt;void  (74,776,631 samples, 7.71%)</title><rect x="516.5" y="469" width="60.1" height="15.0" fill="rgb(208,15,3)" rx="2" ry="2" />
+<text  x="519.45" y="479.5" >void s..</text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt;::_M_ptr (229,970 samples, 0.02%)</title><rect x="451.4" y="181" width="0.2" height="15.0" fill="rgb(215,48,11)" rx="2" ry="2" />
+<text  x="454.39" y="191.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;bool, std::allocator&lt;bool&gt; &gt;::operator= (188,428 samples, 0.02%)</title><rect x="246.7" y="485" width="0.1" height="15.0" fill="rgb(217,57,13)" rx="2" ry="2" />
+<text  x="249.68" y="495.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_insert&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; const&amp;&gt; (271,484 samples, 0.03%)</title><rect x="96.0" y="373" width="0.2" height="15.0" fill="rgb(210,27,6)" rx="2" ry="2" />
+<text  x="98.95" y="383.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::RachListElement_s, std::allocator&lt;ns3::RachListElement_s&gt; &gt;::clear (195,412 samples, 0.02%)</title><rect x="208.8" y="485" width="0.1" height="15.0" fill="rgb(236,146,34)" rx="2" ry="2" />
+<text  x="211.78" y="495.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; (474,207 samples, 0.05%)</title><rect x="730.6" y="437" width="0.4" height="15.0" fill="rgb(212,35,8)" rx="2" ry="2" />
+<text  x="733.60" y="447.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt;::~vector (456,474 samples, 0.05%)</title><rect x="139.6" y="469" width="0.4" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="142.60" y="479.5" ></text>
+</g>
+<g >
+<title>std::__detail::_List_node_header::_List_node_header (190,276 samples, 0.02%)</title><rect x="110.1" y="469" width="0.1" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="113.06" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, unsigned int&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt; &gt;::find (201,734 samples, 0.02%)</title><rect x="234.3" y="453" width="0.2" height="15.0" fill="rgb(214,44,10)" rx="2" ry="2" />
+<text  x="237.34" y="463.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, std::vector&lt;ns3::UlDciListElement_s, std::allocator&lt;ns3::UlDciListElement_s&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;ns3::UlDciListElement_s, std::allocator&lt;ns3::UlDciListElement_s&gt; &gt; &gt; &gt; &gt;::find (1,193,975 samples, 0.12%)</title><rect x="240.6" y="485" width="1.0" height="15.0" fill="rgb(251,215,51)" rx="2" ry="2" />
+<text  x="243.60" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;0ul, ns3::MultiModelSpectrumChannel*, ns3::Ptr&lt;ns3::SpectrumValue&gt;, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::~_Tuple_impl (361,973 samples, 0.04%)</title><rect x="666.2" y="437" width="0.3" height="15.0" fill="rgb(215,47,11)" rx="2" ry="2" />
+<text  x="669.22" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::MemberLteFfrSapProvider&lt;ns3::LteFrNoOpAlgorithm&gt;::GetAvailableUlRbg (157,176 samples, 0.02%)</title><rect x="176.2" y="485" width="0.1" height="15.0" fill="rgb(207,10,2)" rx="2" ry="2" />
+<text  x="179.22" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_S_relocate (197,721 samples, 0.02%)</title><rect x="215.5" y="437" width="0.2" height="15.0" fill="rgb(228,110,26)" rx="2" ry="2" />
+<text  x="218.54" y="447.5" ></text>
+</g>
+<g >
+<title>[libm.so.6] (198,109 samples, 0.02%)</title><rect x="226.9" y="485" width="0.2" height="15.0" fill="rgb(208,16,4)" rx="2" ry="2" />
+<text  x="229.94" y="495.5" ></text>
+</g>
+<g >
+<title>[libc.so.6] (276,224 samples, 0.03%)</title><rect x="153.6" y="341" width="0.2" height="15.0" fill="rgb(223,84,20)" rx="2" ry="2" />
+<text  x="156.58" y="351.5" ></text>
+</g>
+<g >
+<title>std::less&lt;unsigned short&gt;::operator (274,669 samples, 0.03%)</title><rect x="224.6" y="437" width="0.2" height="15.0" fill="rgb(207,11,2)" rx="2" ry="2" />
+<text  x="227.60" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::MacCeValue_u::~MacCeValue_u (162,616 samples, 0.02%)</title><rect x="457.7" y="245" width="0.2" height="15.0" fill="rgb(205,0,0)" rx="2" ry="2" />
+<text  x="460.72" y="255.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::_Auto_node::_Auto_node&lt;std::piecewise_construct_t const&amp;, std::tuple&lt;unsigned short const&amp;&gt;, std::tuple&lt;&gt; &gt; (993,807 samples, 0.10%)</title><rect x="242.6" y="453" width="0.8" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="245.62" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumPhy&gt;::operator bool (176,535 samples, 0.02%)</title><rect x="74.7" y="517" width="0.2" height="15.0" fill="rgb(210,27,6)" rx="2" ry="2" />
+<text  x="77.71" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::RxSpectrumModelInfo&gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::RxSpectrumModelInfo&gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::RxSpectrumModelInfo&gt; &gt; &gt;::begin (243,486 samples, 0.03%)</title><rect x="80.7" y="501" width="0.2" height="15.0" fill="rgb(226,97,23)" rx="2" ry="2" />
+<text  x="83.70" y="511.5" ></text>
+</g>
+<g >
+<title>std::function&lt;void  (796,462 samples, 0.08%)</title><rect x="618.4" y="501" width="0.6" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="621.39" y="511.5" ></text>
+</g>
+<g >
+<title>int* std::__relocate_a&lt;int*, int*, std::allocator&lt;int&gt; &gt; (192,628 samples, 0.02%)</title><rect x="398.4" y="501" width="0.2" height="15.0" fill="rgb(252,220,52)" rx="2" ry="2" />
+<text  x="401.44" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Bvector_base&lt;std::allocator&lt;bool&gt; &gt;::_Bvector_impl_data::_Bvector_impl_data (154,936 samples, 0.02%)</title><rect x="195.9" y="437" width="0.1" height="15.0" fill="rgb(214,45,10)" rx="2" ry="2" />
+<text  x="198.89" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::~PacketBurst (815,660 samples, 0.08%)</title><rect x="774.8" y="325" width="0.7" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="777.81" y="335.5" ></text>
+</g>
+<g >
+<title>std::function&lt;void  (22,443,594 samples, 2.31%)</title><rect x="17.2" y="725" width="18.0" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="20.17" y="735.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; const*, std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt; &gt;::difference_type __gnu_cxx::operator-&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; const*, std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt; &gt; (150,492 samples, 0.02%)</title><rect x="621.2" y="517" width="0.1" height="15.0" fill="rgb(252,220,52)" rx="2" ry="2" />
+<text  x="624.23" y="527.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt;::vector (1,764,689 samples, 0.18%)</title><rect x="444.0" y="325" width="1.5" height="15.0" fill="rgb(210,23,5)" rx="2" ry="2" />
+<text  x="447.04" y="335.5" ></text>
+</g>
+<g >
+<title>void std::destroy_at&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; (2,842,730 samples, 0.29%)</title><rect x="451.6" y="181" width="2.3" height="15.0" fill="rgb(224,88,21)" rx="2" ry="2" />
+<text  x="454.61" y="191.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue&gt; ns3::Copy&lt;ns3::SpectrumValue&gt; (1,504,235 samples, 0.16%)</title><rect x="324.7" y="501" width="1.2" height="15.0" fill="rgb(223,83,19)" rx="2" ry="2" />
+<text  x="327.70" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::TracedCallback&lt;unsigned short, unsigned short, double, double, unsigned char&gt;::operator (698,650 samples, 0.07%)</title><rect x="600.5" y="309" width="0.5" height="15.0" fill="rgb(212,35,8)" rx="2" ry="2" />
+<text  x="603.48" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;::Acquire (357,119 samples, 0.04%)</title><rect x="750.8" y="549" width="0.3" height="15.0" fill="rgb(240,163,38)" rx="2" ry="2" />
+<text  x="753.79" y="559.5" ></text>
+</g>
+<g >
+<title>std::this_thread::get_id (258,683 samples, 0.03%)</title><rect x="339.7" y="453" width="0.3" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="342.75" y="463.5" ></text>
+</g>
+<g >
+<title>std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;* std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_create_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; const&amp;&gt; (441,158 samples, 0.05%)</title><rect x="733.3" y="405" width="0.4" height="15.0" fill="rgb(230,116,27)" rx="2" ry="2" />
+<text  x="736.30" y="415.5" ></text>
+</g>
+<g >
+<title>unsigned int const&amp; std::max&lt;unsigned int&gt; (164,916 samples, 0.02%)</title><rect x="76.3" y="197" width="0.2" height="15.0" fill="rgb(249,206,49)" rx="2" ry="2" />
+<text  x="79.34" y="207.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_drop_node (2,330,463 samples, 0.24%)</title><rect x="763.2" y="661" width="1.8" height="15.0" fill="rgb(215,48,11)" rx="2" ry="2" />
+<text  x="766.17" y="671.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_Auto_node::_M_insert (278,782 samples, 0.03%)</title><rect x="706.8" y="405" width="0.2" height="15.0" fill="rgb(213,38,9)" rx="2" ry="2" />
+<text  x="709.77" y="415.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::vector&lt;int, std::allocator&lt;int&gt; &gt;, std::allocator&lt;std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt; &gt;::operator[] (205,431 samples, 0.02%)</title><rect x="530.9" y="325" width="0.2" height="15.0" fill="rgb(215,46,11)" rx="2" ry="2" />
+<text  x="533.93" y="335.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt;::end (204,400 samples, 0.02%)</title><rect x="584.3" y="245" width="0.1" height="15.0" fill="rgb(246,189,45)" rx="2" ry="2" />
+<text  x="587.26" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::UlInfoListElement_s* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;ns3::UlInfoListElement_s const*, std::vector&lt;ns3::UlInfoListElement_s, std::allocator&lt;ns3::UlInfoListElement_s&gt; &gt; &gt;, ns3::UlInfoListElement_s*, ns3::UlInfoListElement_s&gt; (872,914 samples, 0.09%)</title><rect x="266.2" y="485" width="0.7" height="15.0" fill="rgb(229,111,26)" rx="2" ry="2" />
+<text  x="269.17" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt; &gt;::_S_left (226,586 samples, 0.02%)</title><rect x="322.1" y="437" width="0.2" height="15.0" fill="rgb(205,1,0)" rx="2" ry="2" />
+<text  x="325.08" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Angles::Angles (1,751,854 samples, 0.18%)</title><rect x="702.2" y="549" width="1.4" height="15.0" fill="rgb(254,226,54)" rx="2" ry="2" />
+<text  x="705.18" y="559.5" ></text>
+</g>
+<g >
+<title>ns3::EnbMacMemberLteMacSapProvider&lt;ns3::NoOpComponentCarrierManager&gt;::TransmitPdu (549,181 samples, 0.06%)</title><rect x="15.9" y="389" width="0.4" height="15.0" fill="rgb(247,196,47)" rx="2" ry="2" />
+<text  x="18.88" y="399.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::~_List_base (221,766 samples, 0.02%)</title><rect x="324.3" y="405" width="0.2" height="15.0" fill="rgb(221,74,17)" rx="2" ry="2" />
+<text  x="327.31" y="415.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;unsigned char*&gt; (220,248 samples, 0.02%)</title><rect x="255.2" y="309" width="0.2" height="15.0" fill="rgb(230,116,27)" rx="2" ry="2" />
+<text  x="258.22" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::UeSelected_s::~UeSelected_s (190,389 samples, 0.02%)</title><rect x="461.1" y="277" width="0.1" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="464.10" y="287.5" ></text>
+</g>
+<g >
+<title>int* std::copy&lt;int*, int*&gt; (195,561 samples, 0.02%)</title><rect x="304.3" y="501" width="0.1" height="15.0" fill="rgb(249,206,49)" rx="2" ry="2" />
+<text  x="307.29" y="511.5" ></text>
+</g>
+<g >
+<title>double* std::__copy_move_a1&lt;false, double const*, double*&gt; (447,358 samples, 0.05%)</title><rect x="647.6" y="373" width="0.3" height="15.0" fill="rgb(239,156,37)" rx="2" ry="2" />
+<text  x="650.56" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::LteUePhy::ReportDataInterference (740,140 samples, 0.08%)</title><rect x="483.1" y="341" width="0.6" height="15.0" fill="rgb(243,178,42)" rx="2" ry="2" />
+<text  x="486.06" y="351.5" ></text>
+</g>
+<g >
+<title>std::_Bit_iterator std::__copy_move_a&lt;false, std::_Bit_const_iterator, std::_Bit_iterator&gt; (454,947 samples, 0.05%)</title><rect x="199.2" y="405" width="0.4" height="15.0" fill="rgb(224,87,20)" rx="2" ry="2" />
+<text  x="202.24" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::DlCqiLteControlMessage::~DlCqiLteControlMessage (159,078 samples, 0.02%)</title><rect x="497.5" y="421" width="0.1" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="500.46" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::Packet::Packet (5,056,417 samples, 0.52%)</title><rect x="555.6" y="245" width="4.1" height="15.0" fill="rgb(230,115,27)" rx="2" ry="2" />
+<text  x="558.60" y="255.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;::at (156,958 samples, 0.02%)</title><rect x="173.4" y="453" width="0.2" height="15.0" fill="rgb(227,105,25)" rx="2" ry="2" />
+<text  x="176.43" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Now (627,315 samples, 0.06%)</title><rect x="408.3" y="533" width="0.5" height="15.0" fill="rgb(241,168,40)" rx="2" ry="2" />
+<text  x="411.34" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;::_Rb_tree_iterator (125,563 samples, 0.01%)</title><rect x="86.3" y="437" width="0.1" height="15.0" fill="rgb(223,85,20)" rx="2" ry="2" />
+<text  x="89.31" y="447.5" ></text>
+</g>
+<g >
+<title>operator new (277,002 samples, 0.03%)</title><rect x="649.1" y="485" width="0.2" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="652.06" y="495.5" ></text>
+</g>
+<g >
+<title>unsigned short&amp; std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::emplace_back&lt;unsigned short&gt; (2,449,232 samples, 0.25%)</title><rect x="218.0" y="469" width="2.0" height="15.0" fill="rgb(214,44,10)" rx="2" ry="2" />
+<text  x="221.00" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Ptr&lt;ns3::Object&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Object&gt; &gt; &gt;::~vector (234,790 samples, 0.02%)</title><rect x="775.0" y="277" width="0.1" height="15.0" fill="rgb(223,83,19)" rx="2" ry="2" />
+<text  x="777.96" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::PacketTagList::~PacketTagList (155,483 samples, 0.02%)</title><rect x="774.6" y="181" width="0.1" height="15.0" fill="rgb(223,87,20)" rx="2" ry="2" />
+<text  x="777.56" y="191.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::_M_get_node (475,198 samples, 0.05%)</title><rect x="626.5" y="453" width="0.3" height="15.0" fill="rgb(212,36,8)" rx="2" ry="2" />
+<text  x="629.46" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt;::_M_range_check (156,928 samples, 0.02%)</title><rect x="510.8" y="533" width="0.1" height="15.0" fill="rgb(242,173,41)" rx="2" ry="2" />
+<text  x="513.78" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::Add (1,307,991 samples, 0.13%)</title><rect x="713.9" y="485" width="1.0" height="15.0" fill="rgb(234,136,32)" rx="2" ry="2" />
+<text  x="716.88" y="495.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;::__normal_iterator (160,055 samples, 0.02%)</title><rect x="416.8" y="501" width="0.1" height="15.0" fill="rgb(215,50,12)" rx="2" ry="2" />
+<text  x="419.79" y="511.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::begin (339,771 samples, 0.04%)</title><rect x="317.6" y="389" width="0.3" height="15.0" fill="rgb(206,6,1)" rx="2" ry="2" />
+<text  x="320.63" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;2ul, unsigned int&gt;::_M_head (356,195 samples, 0.04%)</title><rect x="756.0" y="565" width="0.3" height="15.0" fill="rgb(239,158,37)" rx="2" ry="2" />
+<text  x="758.98" y="575.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteControlMessage&gt;&amp; std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::emplace_back&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; const&amp;&gt; (154,939 samples, 0.02%)</title><rect x="464.2" y="501" width="0.1" height="15.0" fill="rgb(224,89,21)" rx="2" ry="2" />
+<text  x="467.16" y="511.5" ></text>
+</g>
+<g >
+<title> (356,060 samples, 0.04%)</title><rect x="75.0" y="501" width="0.3" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="78.03" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_M_allocate (158,373 samples, 0.02%)</title><rect x="203.4" y="341" width="0.1" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="206.35" y="351.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt;::at (386,249 samples, 0.04%)</title><rect x="205.7" y="485" width="0.3" height="15.0" fill="rgb(208,17,4)" rx="2" ry="2" />
+<text  x="208.73" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumModel const&gt;::Ptr&lt;ns3::SpectrumModel&gt; (168,069 samples, 0.02%)</title><rect x="56.1" y="485" width="0.2" height="15.0" fill="rgb(254,225,53)" rx="2" ry="2" />
+<text  x="59.14" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node_base::_S_minimum (352,600 samples, 0.04%)</title><rect x="237.1" y="405" width="0.3" height="15.0" fill="rgb(238,153,36)" rx="2" ry="2" />
+<text  x="240.07" y="415.5" ></text>
+</g>
+<g >
+<title>double* std::__copy_move_a1&lt;false, double const*, double*&gt; (238,145 samples, 0.02%)</title><rect x="325.0" y="373" width="0.2" height="15.0" fill="rgb(239,156,37)" rx="2" ry="2" />
+<text  x="328.04" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_Rb_tree (326,142 samples, 0.03%)</title><rect x="88.2" y="485" width="0.2" height="15.0" fill="rgb(252,219,52)" rx="2" ry="2" />
+<text  x="91.19" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_erase_aux (5,384,995 samples, 0.56%)</title><rect x="762.5" y="677" width="4.4" height="15.0" fill="rgb(246,189,45)" rx="2" ry="2" />
+<text  x="765.53" y="687.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::NodeListPriv&gt;::operator= (238,924 samples, 0.02%)</title><rect x="36.6" y="613" width="0.2" height="15.0" fill="rgb(231,121,29)" rx="2" ry="2" />
+<text  x="39.64" y="623.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt;::vector (237,492 samples, 0.02%)</title><rect x="24.6" y="325" width="0.2" height="15.0" fill="rgb(218,61,14)" rx="2" ry="2" />
+<text  x="27.56" y="335.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::TbId_t, std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::_Select1st&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::_M_lower_bound (314,909 samples, 0.03%)</title><rect x="529.6" y="309" width="0.2" height="15.0" fill="rgb(236,144,34)" rx="2" ry="2" />
+<text  x="532.58" y="319.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, double&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, double&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, double&gt; &gt; &gt;::_M_begin (263,024 samples, 0.03%)</title><rect x="294.6" y="501" width="0.2" height="15.0" fill="rgb(208,15,3)" rx="2" ry="2" />
+<text  x="297.63" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultSimulatorImpl::Schedule (1,350,821 samples, 0.14%)</title><rect x="304.9" y="485" width="1.1" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="307.95" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::CqiListElement_s, std::allocator&lt;ns3::CqiListElement_s&gt; &gt;::end (162,948 samples, 0.02%)</title><rect x="254.7" y="517" width="0.2" height="15.0" fill="rgb(233,131,31)" rx="2" ry="2" />
+<text  x="257.75" y="527.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt; &gt;::destroy&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; (266,588 samples, 0.03%)</title><rect x="193.3" y="405" width="0.3" height="15.0" fill="rgb(249,202,48)" rx="2" ry="2" />
+<text  x="196.34" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, unsigned short, std::_Identity&lt;unsigned short&gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;unsigned short&gt; &gt;::find (148,308 samples, 0.02%)</title><rect x="121.8" y="517" width="0.1" height="15.0" fill="rgb(238,154,36)" rx="2" ry="2" />
+<text  x="124.79" y="527.5" ></text>
+</g>
+<g >
+<title>std::_List_node&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt;::_M_valptr (431,355 samples, 0.04%)</title><rect x="22.4" y="293" width="0.4" height="15.0" fill="rgb(215,46,11)" rx="2" ry="2" />
+<text  x="25.41" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::MobilityModel&gt;::Ptr (284,534 samples, 0.03%)</title><rect x="67.0" y="501" width="0.3" height="15.0" fill="rgb(213,37,8)" rx="2" ry="2" />
+<text  x="70.04" y="511.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::end (161,021 samples, 0.02%)</title><rect x="454.7" y="213" width="0.1" height="15.0" fill="rgb(211,29,6)" rx="2" ry="2" />
+<text  x="457.70" y="223.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;unsigned int&gt; &gt;::deallocate (227,074 samples, 0.02%)</title><rect x="697.2" y="453" width="0.2" height="15.0" fill="rgb(231,121,29)" rx="2" ry="2" />
+<text  x="700.18" y="463.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_M_allocate_and_copy&lt;__gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt; (698,551 samples, 0.07%)</title><rect x="214.0" y="469" width="0.6" height="15.0" fill="rgb(236,143,34)" rx="2" ry="2" />
+<text  x="217.05" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;2ul, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::_Tuple_impl (326,828 samples, 0.03%)</title><rect x="87.7" y="357" width="0.3" height="15.0" fill="rgb(231,121,29)" rx="2" ry="2" />
+<text  x="90.69" y="367.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_drop_node (197,031 samples, 0.02%)</title><rect x="776.6" y="389" width="0.2" height="15.0" fill="rgb(245,188,45)" rx="2" ry="2" />
+<text  x="779.63" y="399.5" ></text>
+</g>
+<g >
+<title>void std::_Function_base::_Base_manager&lt;std::_Bind&lt;void  (489,748 samples, 0.05%)</title><rect x="639.6" y="453" width="0.4" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="642.61" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Packet::AddByteTag (307,844 samples, 0.03%)</title><rect x="18.7" y="405" width="0.3" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="21.70" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::SpectrumSignalParameters, ns3::Empty, ns3::DefaultDeleter&lt;ns3::SpectrumSignalParameters&gt; &gt;::Unref (155,066 samples, 0.02%)</title><rect x="670.6" y="517" width="0.1" height="15.0" fill="rgb(254,229,54)" rx="2" ry="2" />
+<text  x="673.62" y="527.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;std::_Rb_tree_iterator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, bool&gt; std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::emplace&lt;unsigned int const&amp;, ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp;&gt; (157,520 samples, 0.02%)</title><rect x="115.8" y="485" width="0.1" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="118.82" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::SbMeasResult_s&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::SbMeasResult_s&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::SbMeasResult_s&gt; &gt; &gt;::find (452,741 samples, 0.05%)</title><rect x="135.5" y="469" width="0.3" height="15.0" fill="rgb(219,65,15)" rx="2" ry="2" />
+<text  x="138.48" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue&gt; ns3::Copy&lt;ns3::SpectrumValue&gt; (759,296 samples, 0.08%)</title><rect x="78.2" y="517" width="0.6" height="15.0" fill="rgb(223,83,19)" rx="2" ry="2" />
+<text  x="81.15" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt;::_Vector_base (571,217 samples, 0.06%)</title><rect x="144.4" y="437" width="0.4" height="15.0" fill="rgb(216,55,13)" rx="2" ry="2" />
+<text  x="147.38" y="447.5" ></text>
+</g>
+<g >
+<title>std::_List_const_iterator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt;::operator* (243,270 samples, 0.03%)</title><rect x="70.2" y="453" width="0.2" height="15.0" fill="rgb(212,34,8)" rx="2" ry="2" />
+<text  x="73.18" y="463.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;int*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt; std::copy&lt;__gnu_cxx::__normal_iterator&lt;int const*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;int*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt; &gt; (248,988 samples, 0.03%)</title><rect x="61.7" y="517" width="0.2" height="15.0" fill="rgb(223,85,20)" rx="2" ry="2" />
+<text  x="64.70" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;int, std::allocator&lt;int&gt; &gt;::_Vector_base (330,983 samples, 0.03%)</title><rect x="527.3" y="165" width="0.3" height="15.0" fill="rgb(215,47,11)" rx="2" ry="2" />
+<text  x="530.34" y="175.5" ></text>
+</g>
+<g >
+<title>ns3::EventImpl::Invoke (238,924 samples, 0.02%)</title><rect x="36.6" y="741" width="0.2" height="15.0" fill="rgb(209,20,4)" rx="2" ry="2" />
+<text  x="39.64" y="751.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;* std::__uninitialized_copy&lt;false&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; const*, std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt; &gt;, std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;*&gt; (338,383 samples, 0.03%)</title><rect x="204.9" y="357" width="0.2" height="15.0" fill="rgb(205,1,0)" rx="2" ry="2" />
+<text  x="207.86" y="367.5" ></text>
+</g>
+<g >
+<title>[libm.so.6] (158,134 samples, 0.02%)</title><rect x="702.3" y="517" width="0.2" height="15.0" fill="rgb(208,16,4)" rx="2" ry="2" />
+<text  x="705.33" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::BuildDataListElement_s* std::__uninitialized_copy&lt;false&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::BuildDataListElement_s const*, std::vector&lt;ns3::BuildDataListElement_s, std::allocator&lt;ns3::BuildDataListElement_s&gt; &gt; &gt;, ns3::BuildDataListElement_s*&gt; (515,194 samples, 0.05%)</title><rect x="141.9" y="405" width="0.4" height="15.0" fill="rgb(220,73,17)" rx="2" ry="2" />
+<text  x="144.92" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_M_drop_node (669,961 samples, 0.07%)</title><rect x="233.1" y="405" width="0.6" height="15.0" fill="rgb(217,55,13)" rx="2" ry="2" />
+<text  x="236.11" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::ObjectDeleter::Delete (4,998,634 samples, 0.52%)</title><rect x="377.4" y="389" width="4.0" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="380.39" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::MacCeListElement_s::operator= (1,023,273 samples, 0.11%)</title><rect x="685.7" y="485" width="0.8" height="15.0" fill="rgb(249,206,49)" rx="2" ry="2" />
+<text  x="688.72" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::BuildBroadcastListElement_s, std::allocator&lt;ns3::BuildBroadcastListElement_s&gt; &gt;::~_Vector_base (193,710 samples, 0.02%)</title><rect x="145.1" y="437" width="0.2" height="15.0" fill="rgb(222,81,19)" rx="2" ry="2" />
+<text  x="148.13" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_S_maximum (160,901 samples, 0.02%)</title><rect x="59.1" y="453" width="0.1" height="15.0" fill="rgb(251,212,50)" rx="2" ry="2" />
+<text  x="62.08" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt; &gt; &gt;::_M_end (157,738 samples, 0.02%)</title><rect x="433.5" y="293" width="0.1" height="15.0" fill="rgb(248,199,47)" rx="2" ry="2" />
+<text  x="436.45" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::NoOpComponentCarrierManager::DoNotifyTxOpportunity (10,110,654 samples, 1.04%)</title><rect x="150.8" y="437" width="8.1" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="153.82" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::TracedCallback&lt;unsigned short, unsigned short, double&gt;::operator (430,115 samples, 0.04%)</title><rect x="682.1" y="533" width="0.3" height="15.0" fill="rgb(239,160,38)" rx="2" ry="2" />
+<text  x="685.07" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue&gt; ns3::Create&lt;ns3::SpectrumValue, ns3::Ptr&lt;ns3::SpectrumModel const&gt; &gt; (3,855,019 samples, 0.40%)</title><rect x="401.7" y="517" width="3.1" height="15.0" fill="rgb(251,211,50)" rx="2" ry="2" />
+<text  x="404.67" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbMac::DoSchedDlConfigInd (2,983,151 samples, 0.31%)</title><rect x="17.2" y="485" width="2.4" height="15.0" fill="rgb(205,3,0)" rx="2" ry="2" />
+<text  x="20.17" y="495.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;std::is_constructible&lt;std::pair&lt;int const, double&gt;, std::pair&lt;int, double&gt; &gt;::value, std::pair&lt;std::_Rb_tree_iterator&lt;std::pair&lt;int const, double&gt; &gt;, bool&gt; &gt;::type std::map&lt;int, double, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::insert&lt;std::pair&lt;int, double&gt; &gt; (574,148 samples, 0.06%)</title><rect x="110.8" y="517" width="0.5" height="15.0" fill="rgb(219,65,15)" rx="2" ry="2" />
+<text  x="113.83" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::LtePhy::SetControlMessages (378,472 samples, 0.04%)</title><rect x="689.3" y="469" width="0.3" height="15.0" fill="rgb(247,193,46)" rx="2" ry="2" />
+<text  x="692.30" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt;::Ptr (157,831 samples, 0.02%)</title><rect x="383.3" y="469" width="0.1" height="15.0" fill="rgb(219,67,16)" rx="2" ry="2" />
+<text  x="386.26" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::SbMeasResult_s::~SbMeasResult_s (859,795 samples, 0.09%)</title><rect x="255.0" y="373" width="0.7" height="15.0" fill="rgb(221,77,18)" rx="2" ry="2" />
+<text  x="258.00" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::EnbMacMemberLteMacSapProvider&lt;ns3::NoOpComponentCarrierManager&gt;::TransmitPdu (1,327,529 samples, 0.14%)</title><rect x="11.4" y="405" width="1.1" height="15.0" fill="rgb(247,196,47)" rx="2" ry="2" />
+<text  x="14.43" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Bind_helper&lt;std::__or_&lt;std::is_integral&lt;std::decay&lt;void  (661,742 samples, 0.07%)</title><rect x="63.1" y="485" width="0.5" height="15.0" fill="rgb(237,148,35)" rx="2" ry="2" />
+<text  x="66.05" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Bind_helper&lt;std::__or_&lt;std::is_integral&lt;std::decay&lt;void  (1,023,427 samples, 0.11%)</title><rect x="306.1" y="469" width="0.8" height="15.0" fill="rgb(237,148,35)" rx="2" ry="2" />
+<text  x="309.12" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::SbMeasResult_s&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::SbMeasResult_s&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::SbMeasResult_s&gt; &gt; &gt;::_M_lower_bound (559,810 samples, 0.06%)</title><rect x="185.6" y="453" width="0.4" height="15.0" fill="rgb(239,160,38)" rx="2" ry="2" />
+<text  x="188.58" y="463.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;::deallocate (158,232 samples, 0.02%)</title><rect x="501.2" y="469" width="0.1" height="15.0" fill="rgb(206,6,1)" rx="2" ry="2" />
+<text  x="504.20" y="479.5" ></text>
+</g>
+<g >
+<title>int const* std::__niter_base&lt;int const*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt; (127,383 samples, 0.01%)</title><rect x="574.0" y="261" width="0.1" height="15.0" fill="rgb(218,62,14)" rx="2" ry="2" />
+<text  x="577.04" y="271.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_S_key (163,045 samples, 0.02%)</title><rect x="707.3" y="389" width="0.2" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="710.34" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::Callback&lt;void, ns3::SpectrumValue const&amp;&gt;::DoPeekImpl (161,766 samples, 0.02%)</title><rect x="467.5" y="501" width="0.2" height="15.0" fill="rgb(208,17,4)" rx="2" ry="2" />
+<text  x="470.54" y="511.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt;::empty (825,740 samples, 0.09%)</title><rect x="256.9" y="517" width="0.7" height="15.0" fill="rgb(223,85,20)" rx="2" ry="2" />
+<text  x="259.94" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::Object::Object (305,763 samples, 0.03%)</title><rect x="370.8" y="501" width="0.2" height="15.0" fill="rgb(242,174,41)" rx="2" ry="2" />
+<text  x="373.79" y="511.5" ></text>
+</g>
+<g >
+<title>__log10_finite (314,933 samples, 0.03%)</title><rect x="681.4" y="517" width="0.3" height="15.0" fill="rgb(237,151,36)" rx="2" ry="2" />
+<text  x="684.42" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::IsotropicAntennaModel::GetGainDb (306,931 samples, 0.03%)</title><rect x="642.8" y="517" width="0.2" height="15.0" fill="rgb(208,17,4)" rx="2" ry="2" />
+<text  x="645.78" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::CqiListElement_s* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;ns3::CqiListElement_s*, std::vector&lt;ns3::CqiListElement_s, std::allocator&lt;ns3::CqiListElement_s&gt; &gt; &gt;, ns3::CqiListElement_s*, ns3::CqiListElement_s&gt; (3,635,299 samples, 0.37%)</title><rect x="124.4" y="485" width="3.0" height="15.0" fill="rgb(228,106,25)" rx="2" ry="2" />
+<text  x="127.44" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::SpectrumValue (1,413,703 samples, 0.15%)</title><rect x="677.0" y="485" width="1.1" height="15.0" fill="rgb(211,27,6)" rx="2" ry="2" />
+<text  x="679.96" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::PacketMetadata::PacketMetadata (584,751 samples, 0.06%)</title><rect x="360.1" y="485" width="0.5" height="15.0" fill="rgb(231,121,28)" rx="2" ry="2" />
+<text  x="363.08" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumModel const&gt;::operator (160,403 samples, 0.02%)</title><rect x="744.9" y="533" width="0.2" height="15.0" fill="rgb(226,96,23)" rx="2" ry="2" />
+<text  x="747.94" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::AttributeConstructionList::AttributeConstructionList (757,136 samples, 0.08%)</title><rect x="630.0" y="501" width="0.6" height="15.0" fill="rgb(231,122,29)" rx="2" ry="2" />
+<text  x="633.00" y="511.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt;::at (156,928 samples, 0.02%)</title><rect x="510.8" y="549" width="0.1" height="15.0" fill="rgb(241,166,39)" rx="2" ry="2" />
+<text  x="513.78" y="559.5" ></text>
+</g>
+<g >
+<title>void std::_Function_base::_Base_manager&lt;std::_Bind&lt;void  (414,048 samples, 0.04%)</title><rect x="64.0" y="453" width="0.3" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="67.01" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_Auto_node::_Auto_node&lt;unsigned int const&amp;, ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp;&gt; (420,658 samples, 0.04%)</title><rect x="81.8" y="469" width="0.4" height="15.0" fill="rgb(209,20,4)" rx="2" ry="2" />
+<text  x="84.81" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Time::~Time (269,802 samples, 0.03%)</title><rect x="278.6" y="501" width="0.2" height="15.0" fill="rgb(212,36,8)" rx="2" ry="2" />
+<text  x="281.58" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::EventImpl, ns3::Empty, ns3::DefaultDeleter&lt;ns3::EventImpl&gt; &gt;::Unref (240,387 samples, 0.02%)</title><rect x="39.9" y="693" width="0.2" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="42.86" y="703.5" ></text>
+</g>
+<g >
+<title>decltype  (252,039 samples, 0.03%)</title><rect x="101.6" y="421" width="0.2" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="104.59" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy::GenerateDataCqiReport (10,863,791 samples, 1.12%)</title><rect x="472.7" y="341" width="8.7" height="15.0" fill="rgb(249,203,48)" rx="2" ry="2" />
+<text  x="475.69" y="351.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt;::pair (349,723 samples, 0.04%)</title><rect x="277.3" y="469" width="0.3" height="15.0" fill="rgb(238,152,36)" rx="2" ry="2" />
+<text  x="280.30" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt;::find (1,293,049 samples, 0.13%)</title><rect x="567.7" y="277" width="1.1" height="15.0" fill="rgb(219,68,16)" rx="2" ry="2" />
+<text  x="570.72" y="287.5" ></text>
+</g>
+<g >
+<title>double* std::copy&lt;__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, double*&gt; (303,198 samples, 0.03%)</title><rect x="654.7" y="421" width="0.2" height="15.0" fill="rgb(246,192,46)" rx="2" ry="2" />
+<text  x="657.68" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_S_key (154,486 samples, 0.02%)</title><rect x="659.3" y="453" width="0.1" height="15.0" fill="rgb(244,182,43)" rx="2" ry="2" />
+<text  x="662.28" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::~SpectrumValue (447,563 samples, 0.05%)</title><rect x="303.6" y="453" width="0.3" height="15.0" fill="rgb(247,193,46)" rx="2" ry="2" />
+<text  x="306.56" y="463.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; const*, std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt; &gt;::base (148,134 samples, 0.02%)</title><rect x="356.7" y="501" width="0.1" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="359.69" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_erase (270,414 samples, 0.03%)</title><rect x="341.4" y="437" width="0.2" height="15.0" fill="rgb(247,197,47)" rx="2" ry="2" />
+<text  x="344.36" y="447.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; const*, std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt; &gt;::__normal_iterator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;*, void&gt; (228,797 samples, 0.02%)</title><rect x="354.5" y="533" width="0.2" height="15.0" fill="rgb(207,10,2)" rx="2" ry="2" />
+<text  x="357.49" y="543.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::lower_bound (238,325 samples, 0.02%)</title><rect x="332.8" y="485" width="0.2" height="15.0" fill="rgb(247,197,47)" rx="2" ry="2" />
+<text  x="335.80" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Function_handler&lt;void  (891,010,862 samples, 91.88%)</title><rect x="41.6" y="677" width="716.6" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="44.56" y="687.5" >std::_Function_handler&lt;void </text>
+</g>
+<g >
+<title>std::_Function_handler&lt;void  (194,457 samples, 0.02%)</title><rect x="727.7" y="389" width="0.1" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="730.69" y="399.5" ></text>
+</g>
+<g >
+<title>std::tuple&lt;ns3::LteSpectrumPhy*&gt;::tuple&lt;ns3::LteSpectrumPhy*&amp;, true, true&gt; (451,930 samples, 0.05%)</title><rect x="638.6" y="453" width="0.4" height="15.0" fill="rgb(249,204,48)" rx="2" ry="2" />
+<text  x="641.63" y="463.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt;::allocate (124,601 samples, 0.01%)</title><rect x="611.2" y="453" width="0.1" height="15.0" fill="rgb(243,178,42)" rx="2" ry="2" />
+<text  x="614.25" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt;::~vector (447,401 samples, 0.05%)</title><rect x="473.3" y="293" width="0.3" height="15.0" fill="rgb(254,227,54)" rx="2" ry="2" />
+<text  x="476.25" y="303.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::ByteTagListData*, std::allocator&lt;ns3::ByteTagListData*&gt; &gt;::back (538,428 samples, 0.06%)</title><rect x="553.6" y="213" width="0.4" height="15.0" fill="rgb(207,9,2)" rx="2" ry="2" />
+<text  x="556.55" y="223.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::EventImpl&gt;::Acquire (243,600 samples, 0.03%)</title><rect x="277.9" y="485" width="0.2" height="15.0" fill="rgb(229,112,26)" rx="2" ry="2" />
+<text  x="280.86" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumSignalParametersDlCtrlFrame::~LteSpectrumSignalParametersDlCtrlFrame (493,631 samples, 0.05%)</title><rect x="324.1" y="453" width="0.4" height="15.0" fill="rgb(220,69,16)" rx="2" ry="2" />
+<text  x="327.09" y="463.5" ></text>
+</g>
+<g >
+<title>double* std::__copy_move&lt;false, true, std::random_access_iterator_tag&gt;::__copy_m&lt;double const, double&gt; (157,987 samples, 0.02%)</title><rect x="325.1" y="341" width="0.1" height="15.0" fill="rgb(208,16,3)" rx="2" ry="2" />
+<text  x="328.10" y="351.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt;::push_back (266,576 samples, 0.03%)</title><rect x="358.5" y="533" width="0.2" height="15.0" fill="rgb(226,98,23)" rx="2" ry="2" />
+<text  x="361.50" y="543.5" ></text>
+</g>
+<g >
+<title>std::_List_node&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt;::_M_valptr (268,362 samples, 0.03%)</title><rect x="451.4" y="197" width="0.2" height="15.0" fill="rgb(215,46,11)" rx="2" ry="2" />
+<text  x="454.36" y="207.5" ></text>
+</g>
+<g >
+<title>void std::__invoke_impl&lt;void, ns3::Callback&lt;void, ns3::UlInfoListElement_s&gt;::Callback&lt;void  (2,014,597 samples, 0.21%)</title><rect x="439.3" y="469" width="1.6" height="15.0" fill="rgb(206,9,2)" rx="2" ry="2" />
+<text  x="442.32" y="479.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::_M_insert&lt;ns3::Ptr&lt;ns3::Packet&gt; const&amp;&gt; (1,698,937 samples, 0.18%)</title><rect x="563.1" y="165" width="1.4" height="15.0" fill="rgb(234,135,32)" rx="2" ry="2" />
+<text  x="566.13" y="175.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::DlInfoListElement_s*, ns3::DlInfoListElement_s&gt; (886,663 samples, 0.09%)</title><rect x="132.4" y="485" width="0.7" height="15.0" fill="rgb(217,55,13)" rx="2" ry="2" />
+<text  x="135.37" y="495.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;::_M_ptr (239,221 samples, 0.02%)</title><rect x="663.5" y="357" width="0.2" height="15.0" fill="rgb(219,66,15)" rx="2" ry="2" />
+<text  x="666.54" y="367.5" ></text>
+</g>
+<g >
+<title>std::function&lt;void  (261,260 samples, 0.03%)</title><rect x="308.4" y="421" width="0.2" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="311.37" y="431.5" ></text>
+</g>
+<g >
+<title>std::operator== (197,446 samples, 0.02%)</title><rect x="509.7" y="549" width="0.1" height="15.0" fill="rgb(229,110,26)" rx="2" ry="2" />
+<text  x="512.69" y="559.5" ></text>
+</g>
+<g >
+<title>std::map&lt;int, double, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::lower_bound (147,572 samples, 0.02%)</title><rect x="294.2" y="517" width="0.1" height="15.0" fill="rgb(238,151,36)" rx="2" ry="2" />
+<text  x="297.21" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::UlCqi_s::~UlCqi_s (502,449 samples, 0.05%)</title><rect x="472.9" y="293" width="0.4" height="15.0" fill="rgb(229,111,26)" rx="2" ry="2" />
+<text  x="475.85" y="303.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::PacketMetadata::Data*, std::allocator&lt;ns3::PacketMetadata::Data*&gt; &gt;::empty (674,989 samples, 0.07%)</title><rect x="14.8" y="341" width="0.6" height="15.0" fill="rgb(248,202,48)" rx="2" ry="2" />
+<text  x="17.82" y="351.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_M_deallocate (199,701 samples, 0.02%)</title><rect x="716.8" y="389" width="0.2" height="15.0" fill="rgb(240,162,38)" rx="2" ry="2" />
+<text  x="719.83" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbMac::DoSchedDlConfigInd (19,285,336 samples, 1.99%)</title><rect x="19.6" y="501" width="15.5" height="15.0" fill="rgb(205,3,0)" rx="2" ry="2" />
+<text  x="22.60" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;* std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_copy&lt;false, std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_Alloc_node&gt; (158,119 samples, 0.02%)</title><rect x="340.6" y="245" width="0.2" height="15.0" fill="rgb(251,212,50)" rx="2" ry="2" />
+<text  x="343.65" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter&gt;::Unref (707,699 samples, 0.07%)</title><rect x="612.8" y="533" width="0.5" height="15.0" fill="rgb(221,78,18)" rx="2" ry="2" />
+<text  x="615.78" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::FfMacSchedSapProvider::SchedUlCqiInfoReqParameters::~SchedUlCqiInfoReqParameters (949,850 samples, 0.10%)</title><rect x="472.9" y="309" width="0.7" height="15.0" fill="rgb(219,67,16)" rx="2" ry="2" />
+<text  x="475.85" y="319.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::RarLteControlMessage::Rar, std::allocator&lt;ns3::RarLteControlMessage::Rar&gt; &gt;::~list (430,365 samples, 0.04%)</title><rect x="167.1" y="373" width="0.4" height="15.0" fill="rgb(205,2,0)" rx="2" ry="2" />
+<text  x="170.12" y="383.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::MacCeListElement_s*, std::vector&lt;ns3::MacCeListElement_s, std::allocator&lt;ns3::MacCeListElement_s&gt; &gt; &gt;::operator+ (159,119 samples, 0.02%)</title><rect x="128.5" y="501" width="0.1" height="15.0" fill="rgb(230,116,27)" rx="2" ry="2" />
+<text  x="131.47" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::EventId ns3::Simulator::Schedule&lt;void  (3,688,502 samples, 0.38%)</title><rect x="637.1" y="533" width="2.9" height="15.0" fill="rgb(253,224,53)" rx="2" ry="2" />
+<text  x="640.07" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::HarqProcessInfoElement_t* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;ns3::HarqProcessInfoElement_t const*, std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt;, ns3::HarqProcessInfoElement_t*, ns3::HarqProcessInfoElement_t&gt; (1,566,463 samples, 0.16%)</title><rect x="512.4" y="533" width="1.3" height="15.0" fill="rgb(252,220,52)" rx="2" ry="2" />
+<text  x="515.43" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Function_handler&lt;void  (5,321,712 samples, 0.55%)</title><rect x="11.2" y="693" width="4.3" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="14.17" y="703.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::~_Vector_base (168,609 samples, 0.02%)</title><rect x="521.7" y="325" width="0.2" height="15.0" fill="rgb(205,1,0)" rx="2" ry="2" />
+<text  x="524.72" y="335.5" ></text>
+</g>
+<g >
+<title>std::_List_node&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt;* std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::_M_create_node&lt;ns3::Ptr&lt;ns3::Packet&gt; const&amp;&gt; (443,816 samples, 0.05%)</title><rect x="68.9" y="405" width="0.4" height="15.0" fill="rgb(211,30,7)" rx="2" ry="2" />
+<text  x="71.93" y="415.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::BuildRarListElement_s, std::allocator&lt;ns3::BuildRarListElement_s&gt; &gt;::size (155,525 samples, 0.02%)</title><rect x="143.8" y="437" width="0.1" height="15.0" fill="rgb(219,66,15)" rx="2" ry="2" />
+<text  x="146.76" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_M_get_Tp_allocator (386,559 samples, 0.04%)</title><rect x="693.7" y="421" width="0.3" height="15.0" fill="rgb(244,183,43)" rx="2" ry="2" />
+<text  x="696.69" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::HigherLayerSelected_s* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;ns3::HigherLayerSelected_s const*, std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt; &gt;, ns3::HigherLayerSelected_s*, ns3::HigherLayerSelected_s&gt; (151,182 samples, 0.02%)</title><rect x="92.3" y="341" width="0.1" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="95.31" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::LteRadioBearerTag::GetInstanceTypeId (266,218 samples, 0.03%)</title><rect x="21.1" y="325" width="0.2" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="24.08" y="335.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::vector (333,368 samples, 0.03%)</title><rect x="125.3" y="261" width="0.3" height="15.0" fill="rgb(206,9,2)" rx="2" ry="2" />
+<text  x="128.29" y="271.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::DlInfoListElement_s*&gt; (1,227,211 samples, 0.13%)</title><rect x="256.0" y="469" width="0.9" height="15.0" fill="rgb(215,49,11)" rx="2" ry="2" />
+<text  x="258.95" y="479.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::RlcPduListElement_s const*, std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt;::base (155,263 samples, 0.02%)</title><rect x="212.4" y="325" width="0.1" height="15.0" fill="rgb(235,142,33)" rx="2" ry="2" />
+<text  x="215.41" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::EnbMacMemberLteMacSapProvider&lt;ns3::LteEnbMac&gt;::TransmitPdu (579,238 samples, 0.06%)</title><rect x="17.2" y="373" width="0.4" height="15.0" fill="rgb(239,157,37)" rx="2" ry="2" />
+<text  x="20.17" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::Divide (438,578 samples, 0.05%)</title><rect x="484.5" y="501" width="0.3" height="15.0" fill="rgb(239,160,38)" rx="2" ry="2" />
+<text  x="487.49" y="511.5" ></text>
+</g>
+<g >
+<title>double* std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, double*&gt; (700,030 samples, 0.07%)</title><rect x="412.4" y="421" width="0.6" height="15.0" fill="rgb(210,23,5)" rx="2" ry="2" />
+<text  x="415.39" y="431.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;::__normal_iterator (202,662 samples, 0.02%)</title><rect x="416.6" y="501" width="0.2" height="15.0" fill="rgb(249,206,49)" rx="2" ry="2" />
+<text  x="419.62" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;* std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_Alloc_node::operator (156,128 samples, 0.02%)</title><rect x="667.1" y="213" width="0.1" height="15.0" fill="rgb(217,55,13)" rx="2" ry="2" />
+<text  x="670.07" y="223.5" ></text>
+</g>
+<g >
+<title>ns3::EnbMacMemberLteEnbPhySapUser::ReceiveLteControlMessage (20,400,169 samples, 2.10%)</title><rect x="445.5" y="357" width="16.4" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="448.46" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::SpectrumValue (361,724 samples, 0.04%)</title><rect x="71.6" y="421" width="0.3" height="15.0" fill="rgb(211,27,6)" rx="2" ry="2" />
+<text  x="74.62" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Function_base::~_Function_base (7,196,969 samples, 0.74%)</title><rect x="771.4" y="645" width="5.8" height="15.0" fill="rgb(221,74,17)" rx="2" ry="2" />
+<text  x="774.44" y="655.5" ></text>
+</g>
+<g >
+<title>double&amp; std::forward&lt;double&amp;&gt; (151,412 samples, 0.02%)</title><rect x="666.5" y="453" width="0.1" height="15.0" fill="rgb(246,188,45)" rx="2" ry="2" />
+<text  x="669.51" y="463.5" ></text>
+</g>
+<g >
+<title>int* std::__copy_move_a1&lt;false, int const*, int*&gt; (394,757 samples, 0.04%)</title><rect x="698.8" y="453" width="0.4" height="15.0" fill="rgb(230,117,28)" rx="2" ry="2" />
+<text  x="701.83" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteControlMessage&gt;&amp; std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::emplace_back&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;&amp;&gt; (731,821 samples, 0.08%)</title><rect x="721.6" y="469" width="0.6" height="15.0" fill="rgb(240,163,39)" rx="2" ry="2" />
+<text  x="724.59" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;::_M_valptr (153,808 samples, 0.02%)</title><rect x="336.4" y="405" width="0.1" height="15.0" fill="rgb(213,38,9)" rx="2" ry="2" />
+<text  x="339.39" y="415.5" ></text>
+</g>
+<g >
+<title>std::operator== (310,383 samples, 0.03%)</title><rect x="194.4" y="485" width="0.2" height="15.0" fill="rgb(229,110,26)" rx="2" ry="2" />
+<text  x="197.40" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Function_handler&lt;void  (19,577,698 samples, 2.02%)</title><rect x="423.0" y="421" width="15.7" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="425.96" y="431.5" ></text>
+</g>
+<g >
+<title> (275,175 samples, 0.03%)</title><rect x="292.6" y="517" width="0.2" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="295.56" y="527.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::clear (977,631 samples, 0.10%)</title><rect x="774.0" y="309" width="0.8" height="15.0" fill="rgb(217,58,13)" rx="2" ry="2" />
+<text  x="777.02" y="319.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt; const*, std::vector&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt; &gt; &gt; &gt;::__normal_iterator (156,097 samples, 0.02%)</title><rect x="292.1" y="501" width="0.2" height="15.0" fill="rgb(205,2,0)" rx="2" ry="2" />
+<text  x="295.14" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Bind&lt;void  (191,013 samples, 0.02%)</title><rect x="53.4" y="485" width="0.1" height="15.0" fill="rgb(253,221,52)" rx="2" ry="2" />
+<text  x="56.38" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_emplace_hint_unique&lt;std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (1,422,790 samples, 0.15%)</title><rect x="83.0" y="421" width="1.2" height="15.0" fill="rgb(248,201,48)" rx="2" ry="2" />
+<text  x="86.02" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy::CreateTxPowerSpectralDensityWithPowerAllocation (9,112,338 samples, 0.94%)</title><rect x="53.9" y="533" width="7.4" height="15.0" fill="rgb(247,195,46)" rx="2" ry="2" />
+<text  x="56.94" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::BsrLteControlMessage::SetBsr (1,023,273 samples, 0.11%)</title><rect x="685.7" y="501" width="0.8" height="15.0" fill="rgb(248,201,48)" rx="2" ry="2" />
+<text  x="688.72" y="511.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt;::operator= (234,084 samples, 0.02%)</title><rect x="419.3" y="325" width="0.2" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="422.30" y="335.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt; &gt;::_M_get_insert_unique_pos (344,616 samples, 0.04%)</title><rect x="504.5" y="485" width="0.2" height="15.0" fill="rgb(236,144,34)" rx="2" ry="2" />
+<text  x="507.45" y="495.5" ></text>
+</g>
+<g >
+<title> (311,768 samples, 0.03%)</title><rect x="299.7" y="437" width="0.3" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="302.70" y="447.5" ></text>
+</g>
+<g >
+<title>int* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;int const*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt;, int*, int&gt; (310,256 samples, 0.03%)</title><rect x="91.1" y="533" width="0.2" height="15.0" fill="rgb(205,0,0)" rx="2" ry="2" />
+<text  x="94.09" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;* std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_clone_node&lt;false, std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_Alloc_node&gt; (421,993 samples, 0.04%)</title><rect x="668.5" y="421" width="0.3" height="15.0" fill="rgb(205,4,0)" rx="2" ry="2" />
+<text  x="671.50" y="431.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;::empty (163,295 samples, 0.02%)</title><rect x="589.4" y="261" width="0.1" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="592.42" y="271.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::BuildDataListElement_s, std::allocator&lt;ns3::BuildDataListElement_s&gt; &gt;::~_Vector_base (195,366 samples, 0.02%)</title><rect x="145.5" y="437" width="0.1" height="15.0" fill="rgb(210,25,6)" rx="2" ry="2" />
+<text  x="148.48" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::DlCqiLteControlMessage&gt; ns3::DynamicCast&lt;ns3::DlCqiLteControlMessage, ns3::LteControlMessage&gt; (201,818 samples, 0.02%)</title><rect x="462.1" y="357" width="0.2" height="15.0" fill="rgb(236,146,34)" rx="2" ry="2" />
+<text  x="465.10" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultSimulatorImpl::ProcessOneEvent (920,121,348 samples, 94.88%)</title><rect x="37.2" y="741" width="740.1" height="15.0" fill="rgb(211,30,7)" rx="2" ry="2" />
+<text  x="40.22" y="751.5" >ns3::DefaultSimulatorImpl::ProcessOneEvent</text>
+</g>
+<g >
+<title>std::_Function_base::_Base_manager&lt;std::_Bind&lt;void  (200,664 samples, 0.02%)</title><rect x="64.8" y="389" width="0.1" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="67.77" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::TbId_t, std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::_Select1st&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::_S_key (325,721 samples, 0.03%)</title><rect x="507.7" y="501" width="0.3" height="15.0" fill="rgb(220,73,17)" rx="2" ry="2" />
+<text  x="510.74" y="511.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;::base (220,377 samples, 0.02%)</title><rect x="127.0" y="277" width="0.2" height="15.0" fill="rgb(251,212,50)" rx="2" ry="2" />
+<text  x="129.97" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumSignalParametersDlCtrlFrame::~LteSpectrumSignalParametersDlCtrlFrame (656,172 samples, 0.07%)</title><rect x="775.9" y="421" width="0.5" height="15.0" fill="rgb(220,69,16)" rx="2" ry="2" />
+<text  x="778.88" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_M_deallocate (190,332 samples, 0.02%)</title><rect x="674.2" y="421" width="0.1" height="15.0" fill="rgb(240,162,38)" rx="2" ry="2" />
+<text  x="677.16" y="431.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::at (243,145 samples, 0.03%)</title><rect x="594.1" y="293" width="0.2" height="15.0" fill="rgb(247,196,47)" rx="2" ry="2" />
+<text  x="597.10" y="303.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_Vector_base (1,030,409 samples, 0.11%)</title><rect x="239.2" y="277" width="0.8" height="15.0" fill="rgb(237,150,35)" rx="2" ry="2" />
+<text  x="242.15" y="287.5" ></text>
+</g>
+<g >
+<title>std::map&lt;int, double, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::find (922,442 samples, 0.10%)</title><rect x="57.8" y="501" width="0.7" height="15.0" fill="rgb(242,173,41)" rx="2" ry="2" />
+<text  x="60.77" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumPhy&gt;::operator bool (183,160 samples, 0.02%)</title><rect x="651.8" y="517" width="0.2" height="15.0" fill="rgb(210,27,6)" rx="2" ry="2" />
+<text  x="654.84" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::Seconds (2,151,776 samples, 0.22%)</title><rect x="682.5" y="549" width="1.7" height="15.0" fill="rgb(236,145,34)" rx="2" ry="2" />
+<text  x="685.48" y="559.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::EventImpl&gt;::Ptr (165,554 samples, 0.02%)</title><rect x="62.3" y="469" width="0.1" height="15.0" fill="rgb(239,157,37)" rx="2" ry="2" />
+<text  x="65.27" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::LteSpectrumModelId, std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt;, std::_Select1st&lt;std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt; &gt;, std::less&lt;ns3::LteSpectrumModelId&gt;, std::allocator&lt;std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt; &gt; &gt;::find (1,347,788 samples, 0.14%)</title><rect x="55.0" y="469" width="1.1" height="15.0" fill="rgb(254,226,54)" rx="2" ry="2" />
+<text  x="57.99" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Function_base::_Base_manager&lt;void  (601,990 samples, 0.06%)</title><rect x="471.1" y="373" width="0.4" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="474.05" y="383.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned int, ns3::SpectrumConverter, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::SpectrumConverter&gt; &gt; &gt;::find (738,382 samples, 0.08%)</title><rect x="81.1" y="517" width="0.6" height="15.0" fill="rgb(231,123,29)" rx="2" ry="2" />
+<text  x="84.12" y="527.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_initialize_dispatch&lt;std::_List_const_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; (267,551 samples, 0.03%)</title><rect x="464.2" y="517" width="0.2" height="15.0" fill="rgb(215,50,12)" rx="2" ry="2" />
+<text  x="467.16" y="527.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, ns3::Ptr&lt;ns3::UeManager&gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::Ptr&lt;ns3::UeManager&gt; &gt; &gt; &gt;::find (225,392 samples, 0.02%)</title><rect x="18.5" y="325" width="0.2" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="21.49" y="335.5" ></text>
+</g>
+<g >
+<title>std::_Bvector_base&lt;std::allocator&lt;bool&gt; &gt;::_M_allocate (308,272 samples, 0.03%)</title><rect x="198.0" y="437" width="0.3" height="15.0" fill="rgb(235,141,33)" rx="2" ry="2" />
+<text  x="201.01" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;1ul, unsigned int, unsigned int&gt;::_Tuple_impl&lt;unsigned int&amp;, unsigned int&amp;, void&gt; (825,750 samples, 0.09%)</title><rect x="617.5" y="437" width="0.7" height="15.0" fill="rgb(238,153,36)" rx="2" ry="2" />
+<text  x="620.51" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Packet::AddPacketTag (190,338 samples, 0.02%)</title><rect x="17.2" y="341" width="0.2" height="15.0" fill="rgb(233,131,31)" rx="2" ry="2" />
+<text  x="20.23" y="351.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;unsigned short&gt;::allocate (163,524 samples, 0.02%)</title><rect x="474.0" y="133" width="0.2" height="15.0" fill="rgb(237,149,35)" rx="2" ry="2" />
+<text  x="477.03" y="143.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;::pair&lt;unsigned short const&amp;&gt; (483,178 samples, 0.05%)</title><rect x="242.9" y="373" width="0.4" height="15.0" fill="rgb(236,144,34)" rx="2" ry="2" />
+<text  x="245.87" y="383.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, ns3::DlInfoListElement_s, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt; &gt;::find (353,675 samples, 0.04%)</title><rect x="508.8" y="549" width="0.3" height="15.0" fill="rgb(237,148,35)" rx="2" ry="2" />
+<text  x="511.84" y="559.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt;::_Vector_base (165,586 samples, 0.02%)</title><rect x="420.9" y="293" width="0.1" height="15.0" fill="rgb(208,17,4)" rx="2" ry="2" />
+<text  x="423.86" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::MemberLteCcmRrcSapUser&lt;ns3::LteEnbRrc&gt;::GetUeManager (2,186,317 samples, 0.23%)</title><rect x="27.4" y="373" width="1.8" height="15.0" fill="rgb(228,107,25)" rx="2" ry="2" />
+<text  x="30.44" y="383.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::deallocate (731,414 samples, 0.08%)</title><rect x="764.5" y="597" width="0.5" height="15.0" fill="rgb(215,47,11)" rx="2" ry="2" />
+<text  x="767.45" y="607.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::_Rb_tree (934,328 samples, 0.10%)</title><rect x="189.9" y="469" width="0.7" height="15.0" fill="rgb(218,63,15)" rx="2" ry="2" />
+<text  x="192.89" y="479.5" ></text>
+</g>
+<g >
+<title>std::__detail::_List_node_base::_M_hook (128,267 samples, 0.01%)</title><rect x="564.4" y="149" width="0.1" height="15.0" fill="rgb(244,179,42)" rx="2" ry="2" />
+<text  x="567.40" y="159.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_increment (502,296 samples, 0.05%)</title><rect x="767.6" y="661" width="0.4" height="15.0" fill="rgb(247,196,46)" rx="2" ry="2" />
+<text  x="770.55" y="671.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::vector (1,986,872 samples, 0.20%)</title><rect x="403.1" y="485" width="1.6" height="15.0" fill="rgb(239,156,37)" rx="2" ry="2" />
+<text  x="406.14" y="495.5" ></text>
+</g>
+<g >
+<title>std::map&lt;ns3::Scheduler::EventKey, ns3::EventImpl*, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::end (1,104,797 samples, 0.11%)</title><rect x="761.4" y="709" width="0.9" height="15.0" fill="rgb(227,104,25)" rx="2" ry="2" />
+<text  x="764.38" y="719.5" ></text>
+</g>
+<g >
+<title>void std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_M_realloc_insert&lt;unsigned char&gt; (975,393 samples, 0.10%)</title><rect x="214.9" y="453" width="0.8" height="15.0" fill="rgb(246,191,45)" rx="2" ry="2" />
+<text  x="217.95" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::RlcPduListElement_s* std::__relocate_a&lt;ns3::RlcPduListElement_s*, ns3::RlcPduListElement_s*, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; (319,205 samples, 0.03%)</title><rect x="209.9" y="437" width="0.3" height="15.0" fill="rgb(213,37,8)" rx="2" ry="2" />
+<text  x="212.91" y="447.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::allocate (155,343 samples, 0.02%)</title><rect x="331.7" y="389" width="0.1" height="15.0" fill="rgb(212,32,7)" rx="2" ry="2" />
+<text  x="334.66" y="399.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; std::copy&lt;__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; (665,489 samples, 0.07%)</title><rect x="719.1" y="453" width="0.5" height="15.0" fill="rgb(249,204,48)" rx="2" ry="2" />
+<text  x="722.09" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;4ul, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::_Tuple_impl (263,591 samples, 0.03%)</title><rect x="667.7" y="325" width="0.3" height="15.0" fill="rgb(213,41,9)" rx="2" ry="2" />
+<text  x="670.74" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::TracedCallback&lt;ns3::Ptr&lt;ns3::Packet const&gt; &gt;::operator (797,898 samples, 0.08%)</title><rect x="494.1" y="549" width="0.7" height="15.0" fill="rgb(242,171,40)" rx="2" ry="2" />
+<text  x="497.13" y="559.5" ></text>
+</g>
+<g >
+<title>std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt; &gt;::operator (148,217 samples, 0.02%)</title><rect x="186.9" y="421" width="0.1" height="15.0" fill="rgb(218,61,14)" rx="2" ry="2" />
+<text  x="189.92" y="431.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::vector&lt;int, std::allocator&lt;int&gt; &gt;, std::allocator&lt;std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt; &gt;::size (234,068 samples, 0.02%)</title><rect x="701.2" y="517" width="0.2" height="15.0" fill="rgb(250,210,50)" rx="2" ry="2" />
+<text  x="704.18" y="527.5" ></text>
+</g>
+<g >
+<title>void std::vector&lt;int, std::allocator&lt;int&gt; &gt;::_M_realloc_insert&lt;int&gt; (738,134 samples, 0.08%)</title><rect x="572.7" y="325" width="0.5" height="15.0" fill="rgb(211,28,6)" rx="2" ry="2" />
+<text  x="575.66" y="335.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::_Vector_impl::_Vector_impl (204,699 samples, 0.02%)</title><rect x="478.0" y="245" width="0.2" height="15.0" fill="rgb(240,161,38)" rx="2" ry="2" />
+<text  x="481.02" y="255.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::~_Vector_base (199,701 samples, 0.02%)</title><rect x="716.8" y="405" width="0.2" height="15.0" fill="rgb(223,86,20)" rx="2" ry="2" />
+<text  x="719.83" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::_Vector_base (1,034,686 samples, 0.11%)</title><rect x="519.9" y="325" width="0.8" height="15.0" fill="rgb(219,65,15)" rx="2" ry="2" />
+<text  x="522.86" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::Buffer::Initialize (1,901,878 samples, 0.20%)</title><rect x="31.2" y="373" width="1.5" height="15.0" fill="rgb(211,31,7)" rx="2" ry="2" />
+<text  x="34.17" y="383.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::~vector (231,358 samples, 0.02%)</title><rect x="530.3" y="309" width="0.2" height="15.0" fill="rgb(252,219,52)" rx="2" ry="2" />
+<text  x="533.27" y="319.5" ></text>
+</g>
+<g >
+<title>std::tuple&lt;unsigned short const&amp;&gt;::tuple&lt;true, true&gt; (148,271 samples, 0.02%)</title><rect x="244.4" y="469" width="0.1" height="15.0" fill="rgb(216,50,12)" rx="2" ry="2" />
+<text  x="247.35" y="479.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::list (367,412 samples, 0.04%)</title><rect x="697.7" y="549" width="0.3" height="15.0" fill="rgb(236,145,34)" rx="2" ry="2" />
+<text  x="700.67" y="559.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt;::_M_addr (199,850 samples, 0.02%)</title><rect x="179.2" y="421" width="0.1" height="15.0" fill="rgb(210,24,5)" rx="2" ry="2" />
+<text  x="182.17" y="431.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, ns3::DlInfoListElement_s, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt; &gt;::~map (349,670 samples, 0.04%)</title><rect x="509.4" y="549" width="0.3" height="15.0" fill="rgb(212,36,8)" rx="2" ry="2" />
+<text  x="512.41" y="559.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbMac::DoSchedDlConfigInd (3,017,978 samples, 0.31%)</title><rect x="95.6" y="453" width="2.4" height="15.0" fill="rgb(205,3,0)" rx="2" ry="2" />
+<text  x="98.59" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::CqiListElement_s* std::uninitialized_copy&lt;std::move_iterator&lt;ns3::CqiListElement_s*&gt;, ns3::CqiListElement_s*&gt; (176,077 samples, 0.02%)</title><rect x="127.5" y="453" width="0.2" height="15.0" fill="rgb(218,60,14)" rx="2" ry="2" />
+<text  x="130.51" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;::operator* (194,601 samples, 0.02%)</title><rect x="336.4" y="421" width="0.1" height="15.0" fill="rgb(233,132,31)" rx="2" ry="2" />
+<text  x="339.36" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;::_M_allocate (190,161 samples, 0.02%)</title><rect x="212.9" y="373" width="0.1" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="215.85" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::TracedCallback&lt;unsigned short, unsigned short, double&gt;::operator (259,684 samples, 0.03%)</title><rect x="680.9" y="533" width="0.2" height="15.0" fill="rgb(239,160,38)" rx="2" ry="2" />
+<text  x="683.91" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::TbId_t, std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::_Select1st&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::_Auto_node::_M_key (394,901 samples, 0.04%)</title><rect x="528.0" y="293" width="0.3" height="15.0" fill="rgb(214,44,10)" rx="2" ry="2" />
+<text  x="530.96" y="303.5" ></text>
+</g>
+<g >
+<title>unsigned short&amp; std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::emplace_back&lt;unsigned short&gt; (376,292 samples, 0.04%)</title><rect x="102.2" y="453" width="0.3" height="15.0" fill="rgb(214,44,10)" rx="2" ry="2" />
+<text  x="105.17" y="463.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt;::_M_ptr (313,712 samples, 0.03%)</title><rect x="24.0" y="309" width="0.3" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="27.00" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::Object::Object (225,956 samples, 0.02%)</title><rect x="118.8" y="469" width="0.2" height="15.0" fill="rgb(242,174,41)" rx="2" ry="2" />
+<text  x="121.84" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::TypeId::TypeId (145,703 samples, 0.02%)</title><rect x="632.4" y="453" width="0.2" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="635.44" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Object::~Object (1,068,725 samples, 0.11%)</title><rect x="76.8" y="341" width="0.9" height="15.0" fill="rgb(229,110,26)" rx="2" ry="2" />
+<text  x="79.84" y="351.5" ></text>
+</g>
+<g >
+<title>decltype  (443,190 samples, 0.05%)</title><rect x="661.3" y="341" width="0.3" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="664.26" y="351.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;is_member_pointer_v&lt;void  (5,295,295 samples, 0.55%)</title><rect x="280.5" y="533" width="4.3" height="15.0" fill="rgb(241,170,40)" rx="2" ry="2" />
+<text  x="283.50" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::EventImpl&gt;::Acquire (159,184 samples, 0.02%)</title><rect x="269.0" y="469" width="0.2" height="15.0" fill="rgb(229,112,26)" rx="2" ry="2" />
+<text  x="272.03" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::UlInfoListElement_s, std::allocator&lt;ns3::UlInfoListElement_s&gt; &gt;::~vector (390,357 samples, 0.04%)</title><rect x="133.9" y="501" width="0.3" height="15.0" fill="rgb(244,179,42)" rx="2" ry="2" />
+<text  x="136.93" y="511.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, double, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, double&gt; &gt; &gt;::find (2,045,789 samples, 0.21%)</title><rect x="294.5" y="533" width="1.7" height="15.0" fill="rgb(248,201,48)" rx="2" ry="2" />
+<text  x="297.51" y="543.5" ></text>
+</g>
+<g >
+<title>all (969,771,633 samples, 100%)</title><rect x="10.0" y="869" width="780.0" height="15.0" fill="rgb(213,39,9)" rx="2" ry="2" />
+<text  x="13.00" y="879.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;signed char, std::allocator&lt;signed char&gt; &gt;::erase (696,549 samples, 0.07%)</title><rect x="532.3" y="341" width="0.5" height="15.0" fill="rgb(235,142,34)" rx="2" ry="2" />
+<text  x="535.28" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue&gt;::operator= (196,986 samples, 0.02%)</title><rect x="326.0" y="501" width="0.1" height="15.0" fill="rgb(220,71,17)" rx="2" ry="2" />
+<text  x="328.98" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::SpectrumConverter&gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::SpectrumConverter&gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::SpectrumConverter&gt; &gt; &gt;::_S_key (330,075 samples, 0.03%)</title><rect x="81.3" y="469" width="0.3" height="15.0" fill="rgb(248,199,47)" rx="2" ry="2" />
+<text  x="84.29" y="479.5" ></text>
+</g>
+<g >
+<title>signed char&amp;&amp; std::forward&lt;signed char&gt; (164,128 samples, 0.02%)</title><rect x="533.0" y="309" width="0.2" height="15.0" fill="rgb(246,191,45)" rx="2" ry="2" />
+<text  x="536.04" y="319.5" ></text>
+</g>
+<g >
+<title>int* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;int const*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt;, int*&gt; (730,011 samples, 0.08%)</title><rect x="398.8" y="517" width="0.6" height="15.0" fill="rgb(251,216,51)" rx="2" ry="2" />
+<text  x="401.81" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue&gt;::operator* (201,247 samples, 0.02%)</title><rect x="409.0" y="533" width="0.2" height="15.0" fill="rgb(243,176,42)" rx="2" ry="2" />
+<text  x="412.01" y="543.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Callback&lt;void, unsigned short, unsigned char, unsigned int, unsigned long&gt;, std::allocator&lt;ns3::Callback&lt;void, unsigned short, unsigned char, unsigned int, unsigned long&gt; &gt; &gt;::end (200,942 samples, 0.02%)</title><rect x="428.5" y="245" width="0.2" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="431.53" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::Time::IsPositive (216,700 samples, 0.02%)</title><rect x="278.4" y="501" width="0.2" height="15.0" fill="rgb(242,172,41)" rx="2" ry="2" />
+<text  x="281.40" y="511.5" ></text>
+</g>
+<g >
+<title>decltype  (266,180 samples, 0.03%)</title><rect x="319.1" y="309" width="0.2" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="322.05" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::Time::GetTimeStep (201,200 samples, 0.02%)</title><rect x="278.2" y="501" width="0.2" height="15.0" fill="rgb(205,0,0)" rx="2" ry="2" />
+<text  x="281.24" y="511.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::~map (220,721 samples, 0.02%)</title><rect x="666.3" y="325" width="0.2" height="15.0" fill="rgb(228,107,25)" rx="2" ry="2" />
+<text  x="669.34" y="335.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::DlInfoListElement_s*, std::vector&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt; &gt;::base (193,728 samples, 0.02%)</title><rect x="207.6" y="405" width="0.2" height="15.0" fill="rgb(223,84,20)" rx="2" ry="2" />
+<text  x="210.63" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, unsigned short, std::_Identity&lt;unsigned short&gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;unsigned short&gt; &gt;::_S_key (668,940 samples, 0.07%)</title><rect x="395.3" y="501" width="0.5" height="15.0" fill="rgb(243,177,42)" rx="2" ry="2" />
+<text  x="398.28" y="511.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::vector (246,976 samples, 0.03%)</title><rect x="593.8" y="277" width="0.2" height="15.0" fill="rgb(239,156,37)" rx="2" ry="2" />
+<text  x="596.77" y="287.5" ></text>
+</g>
+<g >
+<title>[libc.so.6] (498,884 samples, 0.05%)</title><rect x="655.1" y="341" width="0.4" height="15.0" fill="rgb(223,84,20)" rx="2" ry="2" />
+<text  x="658.12" y="351.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;is_member_pointer_v&lt;void  (2,337,187 samples, 0.24%)</title><rect x="638.2" y="517" width="1.8" height="15.0" fill="rgb(241,170,40)" rx="2" ry="2" />
+<text  x="641.15" y="527.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;is_invocable_r_v&lt;void, ns3::Callback&lt;void, unsigned short, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;::Callback&lt;void  (1,199,098 samples, 0.12%)</title><rect x="725.6" y="453" width="1.0" height="15.0" fill="rgb(227,101,24)" rx="2" ry="2" />
+<text  x="728.62" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::CqiListElement_s, std::allocator&lt;ns3::CqiListElement_s&gt; &gt;::_M_check_len (453,445 samples, 0.05%)</title><rect x="127.8" y="485" width="0.3" height="15.0" fill="rgb(248,202,48)" rx="2" ry="2" />
+<text  x="130.77" y="495.5" ></text>
+</g>
+<g >
+<title>void std::_Construct&lt;ns3::HigherLayerSelected_s, ns3::HigherLayerSelected_s const&amp;&gt; (151,182 samples, 0.02%)</title><rect x="92.3" y="277" width="0.1" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="95.31" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::PacketTagList::RemoveWriter (241,075 samples, 0.02%)</title><rect x="431.0" y="277" width="0.2" height="15.0" fill="rgb(226,100,24)" rx="2" ry="2" />
+<text  x="434.05" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::Callback&lt;void, ns3::DlInfoListElement_s&gt;::operator (4,295,691 samples, 0.44%)</title><rect x="418.0" y="549" width="3.5" height="15.0" fill="rgb(237,149,35)" rx="2" ry="2" />
+<text  x="421.00" y="559.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::size (188,602 samples, 0.02%)</title><rect x="700.4" y="533" width="0.2" height="15.0" fill="rgb(211,32,7)" rx="2" ry="2" />
+<text  x="703.45" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::SbMeasResult_s::~SbMeasResult_s (209,574 samples, 0.02%)</title><rect x="585.1" y="277" width="0.2" height="15.0" fill="rgb(221,77,18)" rx="2" ry="2" />
+<text  x="588.12" y="287.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt;::end (189,409 samples, 0.02%)</title><rect x="476.7" y="293" width="0.2" height="15.0" fill="rgb(216,52,12)" rx="2" ry="2" />
+<text  x="479.70" y="303.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;bool, std::allocator&lt;bool&gt; &gt;::size (163,820 samples, 0.02%)</title><rect x="246.5" y="453" width="0.2" height="15.0" fill="rgb(208,17,4)" rx="2" ry="2" />
+<text  x="249.52" y="463.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; const*, std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt;::__normal_iterator (146,918 samples, 0.02%)</title><rect x="636.0" y="501" width="0.1" height="15.0" fill="rgb(223,84,20)" rx="2" ry="2" />
+<text  x="639.01" y="511.5" ></text>
+</g>
+<g >
+<title>decltype  (395,364 samples, 0.04%)</title><rect x="253.1" y="373" width="0.3" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="256.13" y="383.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::~list (354,715 samples, 0.04%)</title><rect x="380.9" y="325" width="0.3" height="15.0" fill="rgb(238,152,36)" rx="2" ry="2" />
+<text  x="383.91" y="335.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_begin (190,458 samples, 0.02%)</title><rect x="663.1" y="405" width="0.1" height="15.0" fill="rgb(238,154,36)" rx="2" ry="2" />
+<text  x="666.06" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;::_M_valptr (152,053 samples, 0.02%)</title><rect x="337.1" y="357" width="0.2" height="15.0" fill="rgb(213,38,9)" rx="2" ry="2" />
+<text  x="340.14" y="367.5" ></text>
+</g>
+<g >
+<title>double* std::__uninitialized_copy&lt;true&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, double*&gt; (542,531 samples, 0.06%)</title><rect x="324.9" y="421" width="0.4" height="15.0" fill="rgb(238,153,36)" rx="2" ry="2" />
+<text  x="327.89" y="431.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; (327,851 samples, 0.03%)</title><rect x="604.6" y="277" width="0.3" height="15.0" fill="rgb(212,35,8)" rx="2" ry="2" />
+<text  x="607.65" y="287.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt;::_M_lower_bound (446,182 samples, 0.05%)</title><rect x="432.3" y="293" width="0.3" height="15.0" fill="rgb(240,162,38)" rx="2" ry="2" />
+<text  x="435.28" y="303.5" ></text>
+</g>
+<g >
+<title> (206,181 samples, 0.02%)</title><rect x="69.4" y="437" width="0.2" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="72.45" y="447.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, ns3::SbMeasResult_s, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::SbMeasResult_s&gt; &gt; &gt;::find (452,741 samples, 0.05%)</title><rect x="135.5" y="485" width="0.3" height="15.0" fill="rgb(242,171,40)" rx="2" ry="2" />
+<text  x="138.48" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Simulator::ScheduleWithContext (8,077,942 samples, 0.83%)</title><rect x="333.5" y="485" width="6.5" height="15.0" fill="rgb(230,116,27)" rx="2" ry="2" />
+<text  x="336.46" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::PfFfMacScheduler::UpdateDlRlcBufferInfo (1,587,094 samples, 0.16%)</title><rect x="181.2" y="485" width="1.3" height="15.0" fill="rgb(245,186,44)" rx="2" ry="2" />
+<text  x="184.23" y="495.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::list (158,346 samples, 0.02%)</title><rect x="347.0" y="533" width="0.2" height="15.0" fill="rgb(236,145,34)" rx="2" ry="2" />
+<text  x="350.03" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, unsigned short, std::_Identity&lt;unsigned short&gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;unsigned short&gt; &gt;::end (201,544 samples, 0.02%)</title><rect x="245.7" y="469" width="0.2" height="15.0" fill="rgb(223,84,20)" rx="2" ry="2" />
+<text  x="248.72" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::EventId ns3::Simulator::Schedule&lt;void  (22,013,376 samples, 2.27%)</title><rect x="267.1" y="549" width="17.7" height="15.0" fill="rgb(253,224,53)" rx="2" ry="2" />
+<text  x="270.05" y="559.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, unsigned short, std::_Identity&lt;unsigned short&gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;unsigned short&gt; &gt;::_M_lower_bound (1,198,361 samples, 0.12%)</title><rect x="395.2" y="517" width="1.0" height="15.0" fill="rgb(209,18,4)" rx="2" ry="2" />
+<text  x="398.24" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Head_base&lt;5ul, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;, false&gt;::_Head_base&lt;std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;&amp;&gt; (236,989 samples, 0.02%)</title><rect x="340.6" y="309" width="0.2" height="15.0" fill="rgb(218,60,14)" rx="2" ry="2" />
+<text  x="343.59" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::MemberLteCcmMacSapUser&lt;ns3::NoOpComponentCarrierManager&gt;::NotifyTxOpportunity (538,351 samples, 0.06%)</title><rect x="96.2" y="437" width="0.4" height="15.0" fill="rgb(205,3,0)" rx="2" ry="2" />
+<text  x="99.20" y="447.5" ></text>
+</g>
+<g >
+<title>std::_List_const_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;::operator* (232,619 samples, 0.02%)</title><rect x="356.0" y="501" width="0.2" height="15.0" fill="rgb(254,229,54)" rx="2" ry="2" />
+<text  x="359.01" y="511.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::end (195,672 samples, 0.02%)</title><rect x="380.8" y="325" width="0.1" height="15.0" fill="rgb(211,29,6)" rx="2" ry="2" />
+<text  x="383.75" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::Copy (2,719,189 samples, 0.28%)</title><rect x="729.0" y="501" width="2.2" height="15.0" fill="rgb(241,167,40)" rx="2" ry="2" />
+<text  x="732.05" y="511.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;ns3::BuildDataListElement_s&gt;::allocate (158,386 samples, 0.02%)</title><rect x="202.5" y="421" width="0.1" height="15.0" fill="rgb(215,46,11)" rx="2" ry="2" />
+<text  x="205.48" y="431.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::vector (489,793 samples, 0.05%)</title><rect x="92.5" y="373" width="0.4" height="15.0" fill="rgb(206,9,2)" rx="2" ry="2" />
+<text  x="95.54" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;int, std::allocator&lt;int&gt; &gt;::~_Vector_base (281,814 samples, 0.03%)</title><rect x="700.7" y="533" width="0.2" height="15.0" fill="rgb(251,213,51)" rx="2" ry="2" />
+<text  x="703.65" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_destroy_node (1,051,072 samples, 0.11%)</title><rect x="763.3" y="645" width="0.8" height="15.0" fill="rgb(212,35,8)" rx="2" ry="2" />
+<text  x="766.26" y="655.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::end (162,051 samples, 0.02%)</title><rect x="574.9" y="341" width="0.1" height="15.0" fill="rgb(214,44,10)" rx="2" ry="2" />
+<text  x="577.92" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt;::Ptr (314,646 samples, 0.03%)</title><rect x="543.8" y="293" width="0.2" height="15.0" fill="rgb(219,67,16)" rx="2" ry="2" />
+<text  x="546.78" y="303.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;::back (217,631 samples, 0.02%)</title><rect x="636.3" y="501" width="0.1" height="15.0" fill="rgb(219,64,15)" rx="2" ry="2" />
+<text  x="639.25" y="511.5" ></text>
+</g>
+<g >
+<title> (158,925 samples, 0.02%)</title><rect x="744.7" y="533" width="0.2" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="747.75" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::Packet::AddPacketTag (1,751,354 samples, 0.18%)</title><rect x="561.4" y="197" width="1.4" height="15.0" fill="rgb(233,131,31)" rx="2" ry="2" />
+<text  x="564.38" y="207.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; std::map&lt;ns3::Scheduler::EventKey, ns3::EventImpl*, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::emplace_hint&lt;std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (2,897,473 samples, 0.30%)</title><rect x="334.0" y="421" width="2.4" height="15.0" fill="rgb(253,224,53)" rx="2" ry="2" />
+<text  x="337.03" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::EventImpl* ns3::PeekPointer&lt;ns3::EventImpl&gt; (357,408 samples, 0.04%)</title><rect x="268.7" y="469" width="0.3" height="15.0" fill="rgb(242,171,40)" rx="2" ry="2" />
+<text  x="271.75" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::FfMacSchedSapUser::SchedUlConfigIndParameters::SchedUlConfigIndParameters (2,391,271 samples, 0.25%)</title><rect x="227.4" y="469" width="1.9" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="230.38" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp; std::__pair_get&lt;1ul&gt;::__move_get&lt;unsigned int const&amp;, ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp;&gt; (161,945 samples, 0.02%)</title><rect x="333.1" y="469" width="0.2" height="15.0" fill="rgb(224,91,21)" rx="2" ry="2" />
+<text  x="336.14" y="479.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;int const*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt; std::__miter_base&lt;__gnu_cxx::__normal_iterator&lt;int const*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt; &gt; (158,922 samples, 0.02%)</title><rect x="573.8" y="277" width="0.1" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="576.81" y="287.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt; &gt; &gt;::_S_right (196,109 samples, 0.02%)</title><rect x="236.2" y="437" width="0.2" height="15.0" fill="rgb(251,215,51)" rx="2" ry="2" />
+<text  x="239.20" y="447.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; std::copy&lt;__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; (410,799 samples, 0.04%)</title><rect x="604.6" y="293" width="0.3" height="15.0" fill="rgb(249,204,48)" rx="2" ry="2" />
+<text  x="607.58" y="303.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::_M_erase (690,702 samples, 0.07%)</title><rect x="193.1" y="453" width="0.6" height="15.0" fill="rgb(213,41,9)" rx="2" ry="2" />
+<text  x="196.12" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::at (487,190 samples, 0.05%)</title><rect x="678.2" y="485" width="0.4" height="15.0" fill="rgb(220,69,16)" rx="2" ry="2" />
+<text  x="681.22" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::vector (1,402,431 samples, 0.14%)</title><rect x="474.3" y="293" width="1.1" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="477.26" y="303.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;* std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::_M_create_node&lt;std::piecewise_construct_t const&amp;, std::tuple&lt;unsigned short const&amp;&gt;, std::tuple&lt;&gt; &gt; (229,116 samples, 0.02%)</title><rect x="99.5" y="421" width="0.2" height="15.0" fill="rgb(231,123,29)" rx="2" ry="2" />
+<text  x="102.47" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;::operator-- (356,677 samples, 0.04%)</title><rect x="272.5" y="421" width="0.3" height="15.0" fill="rgb(223,86,20)" rx="2" ry="2" />
+<text  x="275.48" y="431.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;double&gt;::allocate (156,472 samples, 0.02%)</title><rect x="413.2" y="421" width="0.2" height="15.0" fill="rgb(221,76,18)" rx="2" ry="2" />
+<text  x="416.23" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::AntennaModel&gt;::Ptr (200,719 samples, 0.02%)</title><rect x="669.8" y="485" width="0.2" height="15.0" fill="rgb(215,49,11)" rx="2" ry="2" />
+<text  x="672.81" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::RngStream::RandU01 (646,005 samples, 0.07%)</title><rect x="495.4" y="517" width="0.5" height="15.0" fill="rgb(232,126,30)" rx="2" ry="2" />
+<text  x="498.41" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultDeleter&lt;ns3::EventImpl&gt;::Delete (9,050,608 samples, 0.93%)</title><rect x="770.0" y="709" width="7.3" height="15.0" fill="rgb(240,163,39)" rx="2" ry="2" />
+<text  x="773.01" y="719.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt;::_M_valptr (354,218 samples, 0.04%)</title><rect x="180.6" y="405" width="0.3" height="15.0" fill="rgb(249,206,49)" rx="2" ry="2" />
+<text  x="183.62" y="415.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt;::end (190,162 samples, 0.02%)</title><rect x="261.6" y="373" width="0.1" height="15.0" fill="rgb(208,14,3)" rx="2" ry="2" />
+<text  x="264.58" y="383.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;* std::__do_uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; const*, std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt; &gt;, std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;*&gt; (262,535 samples, 0.03%)</title><rect x="204.9" y="341" width="0.2" height="15.0" fill="rgb(247,196,47)" rx="2" ry="2" />
+<text  x="207.92" y="351.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned short const, std::vector&lt;ns3::DlDciListElement_s, std::allocator&lt;ns3::DlDciListElement_s&gt; &gt; &gt; &gt;::_M_ptr (194,523 samples, 0.02%)</title><rect x="184.0" y="453" width="0.1" height="15.0" fill="rgb(228,109,26)" rx="2" ry="2" />
+<text  x="186.98" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt; &gt;::find (1,655,067 samples, 0.17%)</title><rect x="565.5" y="213" width="1.3" height="15.0" fill="rgb(225,93,22)" rx="2" ry="2" />
+<text  x="568.49" y="223.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, unsigned char, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, unsigned char&gt; &gt; &gt;::find (152,374 samples, 0.02%)</title><rect x="94.3" y="469" width="0.1" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="97.28" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::LteUePowerControl::GetPuschTxPower (1,618,983 samples, 0.17%)</title><rect x="681.1" y="549" width="1.3" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="684.12" y="559.5" ></text>
+</g>
+<g >
+<title>std::function&lt;void  (4,103,031 samples, 0.42%)</title><rect x="418.1" y="517" width="3.3" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="421.09" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::MobilityModel::GetPosition (262,140 samples, 0.03%)</title><rect x="649.3" y="517" width="0.2" height="15.0" fill="rgb(217,59,14)" rx="2" ry="2" />
+<text  x="652.28" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultSimulatorImpl::Now (240,092 samples, 0.02%)</title><rect x="485.3" y="485" width="0.2" height="15.0" fill="rgb(213,40,9)" rx="2" ry="2" />
+<text  x="488.33" y="495.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::MacCeListElement_s*, std::vector&lt;ns3::MacCeListElement_s, std::allocator&lt;ns3::MacCeListElement_s&gt; &gt; &gt; std::vector&lt;ns3::MacCeListElement_s, std::allocator&lt;ns3::MacCeListElement_s&gt; &gt;::insert&lt;__gnu_cxx::__normal_iterator&lt;ns3::MacCeListElement_s*, std::vector&lt;ns3::MacCeListElement_s, std::allocator&lt;ns3::MacCeListElement_s&gt; &gt; &gt;, void&gt; (271,036 samples, 0.03%)</title><rect x="93.2" y="501" width="0.2" height="15.0" fill="rgb(223,85,20)" rx="2" ry="2" />
+<text  x="96.17" y="511.5" ></text>
+</g>
+<g >
+<title>[libm.so.6] (281,723 samples, 0.03%)</title><rect x="477.0" y="309" width="0.3" height="15.0" fill="rgb(208,16,4)" rx="2" ry="2" />
+<text  x="480.05" y="319.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::_Temporary_value::_M_ptr (155,817 samples, 0.02%)</title><rect x="251.5" y="437" width="0.1" height="15.0" fill="rgb(251,212,50)" rx="2" ry="2" />
+<text  x="254.52" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumModel const&gt;::Ptr (138,401 samples, 0.01%)</title><rect x="315.4" y="405" width="0.2" height="15.0" fill="rgb(232,125,30)" rx="2" ry="2" />
+<text  x="318.45" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::LteAmc::GetMcsFromCqi (160,208 samples, 0.02%)</title><rect x="232.0" y="485" width="0.1" height="15.0" fill="rgb(234,135,32)" rx="2" ry="2" />
+<text  x="234.97" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_S_right (316,628 samples, 0.03%)</title><rect x="274.7" y="421" width="0.2" height="15.0" fill="rgb(238,153,36)" rx="2" ry="2" />
+<text  x="277.65" y="431.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::end (197,575 samples, 0.02%)</title><rect x="419.7" y="325" width="0.1" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="422.68" y="335.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::_M_insert&lt;ns3::Ptr&lt;ns3::Packet&gt; const&amp;&gt; (1,745,012 samples, 0.18%)</title><rect x="22.2" y="325" width="1.4" height="15.0" fill="rgb(234,135,32)" rx="2" ry="2" />
+<text  x="25.19" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::LogComponent::IsEnabled (301,297 samples, 0.03%)</title><rect x="643.0" y="517" width="0.3" height="15.0" fill="rgb(214,43,10)" rx="2" ry="2" />
+<text  x="646.03" y="527.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::end (245,937 samples, 0.03%)</title><rect x="479.2" y="277" width="0.2" height="15.0" fill="rgb(218,63,15)" rx="2" ry="2" />
+<text  x="482.24" y="287.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::allocate (264,767 samples, 0.03%)</title><rect x="384.5" y="405" width="0.2" height="15.0" fill="rgb(219,65,15)" rx="2" ry="2" />
+<text  x="387.48" y="415.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::vector (1,527,153 samples, 0.16%)</title><rect x="126.1" y="389" width="1.2" height="15.0" fill="rgb(206,9,2)" rx="2" ry="2" />
+<text  x="129.10" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::BuildDataListElement_s::~BuildDataListElement_s (596,141 samples, 0.06%)</title><rect x="145.8" y="357" width="0.5" height="15.0" fill="rgb(215,47,11)" rx="2" ry="2" />
+<text  x="148.79" y="367.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::vector (270,534 samples, 0.03%)</title><rect x="646.5" y="405" width="0.3" height="15.0" fill="rgb(239,156,37)" rx="2" ry="2" />
+<text  x="649.53" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp; std::_Mu&lt;ns3::Ptr&lt;ns3::SpectrumValue&gt;, false, false&gt;::operator (158,589 samples, 0.02%)</title><rect x="50.1" y="597" width="0.1" height="15.0" fill="rgb(240,162,38)" rx="2" ry="2" />
+<text  x="53.11" y="607.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue&gt;::Acquire (152,792 samples, 0.02%)</title><rect x="304.0" y="501" width="0.2" height="15.0" fill="rgb(211,28,6)" rx="2" ry="2" />
+<text  x="307.04" y="511.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider::ReportBufferStatusParameters&gt; &gt;::_M_ptr (164,987 samples, 0.02%)</title><rect x="568.9" y="293" width="0.1" height="15.0" fill="rgb(234,136,32)" rx="2" ry="2" />
+<text  x="571.88" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;::operator (309,905 samples, 0.03%)</title><rect x="652.2" y="517" width="0.2" height="15.0" fill="rgb(243,179,42)" rx="2" ry="2" />
+<text  x="655.18" y="527.5" ></text>
+</g>
+<g >
+<title>std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;* std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_create_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; const&amp;&gt; (271,484 samples, 0.03%)</title><rect x="96.0" y="357" width="0.2" height="15.0" fill="rgb(230,116,27)" rx="2" ry="2" />
+<text  x="98.95" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::MemberSchedSapProvider&lt;ns3::PfFfMacScheduler&gt;::SchedDlTriggerReq (19,285,336 samples, 1.99%)</title><rect x="19.6" y="549" width="15.5" height="15.0" fill="rgb(247,193,46)" rx="2" ry="2" />
+<text  x="22.60" y="559.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt; &gt;::find (2,702,236 samples, 0.28%)</title><rect x="320.4" y="469" width="2.2" height="15.0" fill="rgb(233,130,31)" rx="2" ry="2" />
+<text  x="323.44" y="479.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::list&lt;std::_List_const_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;, void&gt; (222,211 samples, 0.02%)</title><rect x="673.0" y="485" width="0.2" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="676.00" y="495.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;::_M_get_node (504,501 samples, 0.05%)</title><rect x="724.4" y="469" width="0.4" height="15.0" fill="rgb(241,167,39)" rx="2" ry="2" />
+<text  x="727.39" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::LteAmc::GetDlTbSizeFromMcs (517,023 samples, 0.05%)</title><rect x="174.9" y="485" width="0.4" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="177.88" y="495.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, std::vector&lt;double, std::allocator&lt;double&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::find (186,790 samples, 0.02%)</title><rect x="102.7" y="469" width="0.2" height="15.0" fill="rgb(209,22,5)" rx="2" ry="2" />
+<text  x="105.72" y="479.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt; &gt;::destroy&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; (198,551 samples, 0.02%)</title><rect x="233.0" y="389" width="0.1" height="15.0" fill="rgb(235,141,33)" rx="2" ry="2" />
+<text  x="235.95" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;::operator (1,100,918 samples, 0.11%)</title><rect x="759.3" y="709" width="0.9" height="15.0" fill="rgb(205,0,0)" rx="2" ry="2" />
+<text  x="762.32" y="719.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_lower_bound (1,305,876 samples, 0.13%)</title><rect x="337.0" y="389" width="1.1" height="15.0" fill="rgb(229,113,27)" rx="2" ry="2" />
+<text  x="340.04" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::_M_allocate (192,396 samples, 0.02%)</title><rect x="474.0" y="165" width="0.2" height="15.0" fill="rgb(220,70,16)" rx="2" ry="2" />
+<text  x="477.01" y="175.5" ></text>
+</g>
+<g >
+<title>ns3::TracedCallback&lt;ns3::PhyTransmissionStatParameters&gt;::operator (297,993 samples, 0.03%)</title><rect x="535.2" y="357" width="0.2" height="15.0" fill="rgb(254,228,54)" rx="2" ry="2" />
+<text  x="538.16" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::MobilityModel const&gt;::Acquire (155,636 samples, 0.02%)</title><rect x="742.6" y="533" width="0.2" height="15.0" fill="rgb(237,148,35)" rx="2" ry="2" />
+<text  x="745.64" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s* std::vector&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt;::_M_allocate_and_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::DlInfoListElement_s const*, std::vector&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt; &gt; &gt; (488,321 samples, 0.05%)</title><rect x="107.3" y="485" width="0.4" height="15.0" fill="rgb(248,198,47)" rx="2" ry="2" />
+<text  x="110.26" y="495.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::~_List_base (191,802 samples, 0.02%)</title><rect x="344.3" y="421" width="0.1" height="15.0" fill="rgb(221,74,17)" rx="2" ry="2" />
+<text  x="347.27" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::~_Vector_base (149,822 samples, 0.02%)</title><rect x="139.4" y="437" width="0.1" height="15.0" fill="rgb(241,168,40)" rx="2" ry="2" />
+<text  x="142.35" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_M_create_storage (423,769 samples, 0.04%)</title><rect x="300.5" y="421" width="0.3" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="303.48" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;int, std::allocator&lt;int&gt; &gt;::_M_allocate (251,714 samples, 0.03%)</title><rect x="574.5" y="309" width="0.2" height="15.0" fill="rgb(216,52,12)" rx="2" ry="2" />
+<text  x="577.48" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::operator/ (1,197,630 samples, 0.12%)</title><rect x="606.1" y="517" width="1.0" height="15.0" fill="rgb(218,63,15)" rx="2" ry="2" />
+<text  x="609.12" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapProvider::ReportBufferStatusParameters&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider::ReportBufferStatusParameters&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider::ReportBufferStatusParameters&gt; &gt; &gt;::empty (151,905 samples, 0.02%)</title><rect x="690.3" y="485" width="0.2" height="15.0" fill="rgb(219,65,15)" rx="2" ry="2" />
+<text  x="693.34" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumValueHelper::GetSpectrumModel (2,046,878 samples, 0.21%)</title><rect x="297.1" y="485" width="1.6" height="15.0" fill="rgb(207,12,3)" rx="2" ry="2" />
+<text  x="300.07" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, unsigned char&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, unsigned char&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, unsigned char&gt; &gt; &gt;::find (848,294 samples, 0.09%)</title><rect x="176.7" y="453" width="0.7" height="15.0" fill="rgb(206,4,1)" rx="2" ry="2" />
+<text  x="179.75" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::NanoSeconds (241,154 samples, 0.02%)</title><rect x="424.7" y="213" width="0.2" height="15.0" fill="rgb(228,108,25)" rx="2" ry="2" />
+<text  x="427.72" y="223.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::clear (940,478 samples, 0.10%)</title><rect x="609.5" y="549" width="0.8" height="15.0" fill="rgb(252,216,51)" rx="2" ry="2" />
+<text  x="612.50" y="559.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::end (285,022 samples, 0.03%)</title><rect x="411.2" y="501" width="0.2" height="15.0" fill="rgb(237,147,35)" rx="2" ry="2" />
+<text  x="414.19" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;ns3::DlDciListElement_s, std::allocator&lt;ns3::DlDciListElement_s&gt; &gt; &gt; &gt;::_M_valptr (194,523 samples, 0.02%)</title><rect x="184.0" y="469" width="0.1" height="15.0" fill="rgb(222,81,19)" rx="2" ry="2" />
+<text  x="186.98" y="479.5" ></text>
+</g>
+<g >
+<title>operator new (168,940 samples, 0.02%)</title><rect x="78.5" y="373" width="0.2" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="81.52" y="383.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_clear (154,447 samples, 0.02%)</title><rect x="622.3" y="373" width="0.1" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="625.28" y="383.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::fill_n&lt;unsigned char*, unsigned long, unsigned char&gt; (149,553 samples, 0.02%)</title><rect x="102.0" y="389" width="0.1" height="15.0" fill="rgb(211,28,6)" rx="2" ry="2" />
+<text  x="105.01" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt;::_M_begin (307,839 samples, 0.03%)</title><rect x="168.1" y="421" width="0.2" height="15.0" fill="rgb(249,203,48)" rx="2" ry="2" />
+<text  x="171.10" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::TypeId::GetParent (912,142 samples, 0.09%)</title><rect x="542.0" y="261" width="0.7" height="15.0" fill="rgb(211,29,7)" rx="2" ry="2" />
+<text  x="544.99" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::HigherLayerSelected_s* std::__do_uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::HigherLayerSelected_s const*, std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt; &gt;, ns3::HigherLayerSelected_s*&gt; (128,621 samples, 0.01%)</title><rect x="583.8" y="197" width="0.1" height="15.0" fill="rgb(244,179,43)" rx="2" ry="2" />
+<text  x="586.76" y="207.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;bool, std::allocator&lt;bool&gt; &gt;::_M_fill_insert (2,342,912 samples, 0.24%)</title><rect x="246.9" y="453" width="1.8" height="15.0" fill="rgb(229,112,26)" rx="2" ry="2" />
+<text  x="249.86" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::LteMacSapProvider::TransmitPduParameters::TransmitPduParameters (537,941 samples, 0.06%)</title><rect x="151.6" y="389" width="0.4" height="15.0" fill="rgb(237,147,35)" rx="2" ry="2" />
+<text  x="154.59" y="399.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::splice (536,019 samples, 0.06%)</title><rect x="673.2" y="469" width="0.4" height="15.0" fill="rgb(220,70,16)" rx="2" ry="2" />
+<text  x="676.20" y="479.5" ></text>
+</g>
+<g >
+<title>decltype  (273,321 samples, 0.03%)</title><rect x="331.9" y="389" width="0.2" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="334.88" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::EnbMacMemberLteMacSapProvider&lt;ns3::LteEnbMac&gt;::TransmitPdu (5,428,262 samples, 0.56%)</title><rect x="19.6" y="389" width="4.4" height="15.0" fill="rgb(239,157,37)" rx="2" ry="2" />
+<text  x="22.60" y="399.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;*, std::vector&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt; &gt; &gt; &gt; std::__copy_move_a&lt;true, __gnu_cxx::__normal_iterator&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;*, std::vector&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt; &gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;*, std::vector&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt; &gt; &gt; &gt; &gt; (253,831 samples, 0.03%)</title><rect x="110.5" y="469" width="0.2" height="15.0" fill="rgb(230,116,27)" rx="2" ry="2" />
+<text  x="113.50" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::IidManager::GetParent (351,090 samples, 0.04%)</title><rect x="632.1" y="453" width="0.3" height="15.0" fill="rgb(217,59,14)" rx="2" ry="2" />
+<text  x="635.09" y="463.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Callback&lt;void, unsigned short, unsigned char, unsigned int&gt;, std::allocator&lt;ns3::Callback&lt;void, unsigned short, unsigned char, unsigned int&gt; &gt; &gt;::end (164,697 samples, 0.02%)</title><rect x="567.3" y="245" width="0.1" height="15.0" fill="rgb(217,56,13)" rx="2" ry="2" />
+<text  x="570.26" y="255.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Buffer::Data*, std::allocator&lt;ns3::Buffer::Data*&gt; &gt;::end (540,003 samples, 0.06%)</title><rect x="556.7" y="165" width="0.4" height="15.0" fill="rgb(223,86,20)" rx="2" ry="2" />
+<text  x="559.68" y="175.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_get_node (270,834 samples, 0.03%)</title><rect x="108.6" y="389" width="0.2" height="15.0" fill="rgb(221,75,17)" rx="2" ry="2" />
+<text  x="111.56" y="399.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::__copy_move&lt;false, true, std::random_access_iterator_tag&gt;::__copy_m&lt;unsigned char const, unsigned char&gt; (185,914 samples, 0.02%)</title><rect x="688.0" y="341" width="0.2" height="15.0" fill="rgb(235,140,33)" rx="2" ry="2" />
+<text  x="691.03" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy::SendControlChannels (6,963,923 samples, 0.72%)</title><rect x="111.4" y="533" width="5.6" height="15.0" fill="rgb(227,105,25)" rx="2" ry="2" />
+<text  x="114.35" y="543.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::clear (1,317,063 samples, 0.14%)</title><rect x="75.6" y="357" width="1.1" height="15.0" fill="rgb(217,58,13)" rx="2" ry="2" />
+<text  x="78.64" y="367.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy_aux&lt;true&gt;::__destroy&lt;ns3::DlInfoListElement_s::HarqStatus_e*&gt; (190,409 samples, 0.02%)</title><rect x="256.8" y="341" width="0.1" height="15.0" fill="rgb(226,96,23)" rx="2" ry="2" />
+<text  x="259.78" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::operator= (140,552 samples, 0.01%)</title><rect x="601.4" y="325" width="0.2" height="15.0" fill="rgb(243,177,42)" rx="2" ry="2" />
+<text  x="604.44" y="335.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;::allocate (190,161 samples, 0.02%)</title><rect x="212.9" y="357" width="0.1" height="15.0" fill="rgb(238,154,36)" rx="2" ry="2" />
+<text  x="215.85" y="367.5" ></text>
+</g>
+<g >
+<title>std::_List_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::insert&lt;std::_List_const_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;, void&gt; (704,280 samples, 0.07%)</title><rect x="346.4" y="485" width="0.6" height="15.0" fill="rgb(210,23,5)" rx="2" ry="2" />
+<text  x="349.44" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_S_key (161,364 samples, 0.02%)</title><rect x="271.6" y="405" width="0.1" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="274.61" y="415.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;::_M_put_node (158,232 samples, 0.02%)</title><rect x="501.2" y="517" width="0.1" height="15.0" fill="rgb(229,114,27)" rx="2" ry="2" />
+<text  x="504.20" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_M_erase (598,182 samples, 0.06%)</title><rect x="60.6" y="437" width="0.5" height="15.0" fill="rgb(227,102,24)" rx="2" ry="2" />
+<text  x="63.62" y="447.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::Ptr&lt;ns3::Object&gt;*, ns3::Ptr&lt;ns3::Object&gt; &gt; (154,688 samples, 0.02%)</title><rect x="635.4" y="293" width="0.1" height="15.0" fill="rgb(226,98,23)" rx="2" ry="2" />
+<text  x="638.37" y="303.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;::operator= (2,176,138 samples, 0.22%)</title><rect x="349.9" y="421" width="1.8" height="15.0" fill="rgb(253,222,53)" rx="2" ry="2" />
+<text  x="352.92" y="431.5" ></text>
+</g>
+</g>
+</svg>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/doc/manual/Makefile ns-3.45/doc/manual/Makefile
--- ns-3.44/doc/manual/Makefile	2025-03-09 16:55:49.235370600 -0700
+++ ns-3.45/doc/manual/Makefile	2025-06-01 20:34:45.185700700 -0700
@@ -92,6 +92,10 @@
 	figures/vtune-uarch-core-stats.png \
 	figures/vtune-uarch-profiling-summary.png \
 	figures/vtune-uarch-wifi-stats.png \
+	figures/perf.svg \
+	figures/perf-lte-frequency-reuse.png \
+	figures/perf-chunk-processor.png \
+	figures/perf-detail.png \
 	${SRC}/stats/doc/Stat-framework-arch.png \
 	${SRC}/stats/doc/Wifi-default.png \
 	${SRC}/stats/doc/dcf-overview.dia \
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/doc/manual/source/attributes.rst ns-3.45/doc/manual/source/attributes.rst
--- ns-3.44/doc/manual/source/attributes.rst	2025-03-09 16:55:49.267370700 -0700
+++ ns-3.45/doc/manual/source/attributes.rst	2025-06-01 20:34:45.235700800 -0700
@@ -801,10 +801,13 @@
       // continue on with constructor.
     }
 
-Beware that the object and all its derived classes must also implement
-a :cpp:func:`GetInstanceTypeId()` method. Otherwise
-the :cpp:func:`ObjectBase::ConstructSelf()` will not be able to read
-the attributes.
+Classes that derive from :cpp:class:`Object` can not implement (i.e., specialize)
+a :cpp:func:`GetInstanceTypeId()` method; this method is marked `final`
+in :cpp:class:`Object`.  However, classes that instead derive from
+:cpp:class:`ObjectBase` directly (in ns-3, this is usually packet headers and tags),
+must implement :cpp:func:`GetInstanceTypeId()`.  It is recommended that this
+method simply return the value provided by :cpp:func:`GetTypeId()`; see the class
+:cpp:class:`EthernetHeader` in `src/network/utils` directory as an example.
 
 Adding Attributes
 +++++++++++++++++
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/doc/manual/source/conf.py ns-3.45/doc/manual/source/conf.py
--- ns-3.44/doc/manual/source/conf.py	2025-03-09 16:56:09.315445400 -0700
+++ ns-3.45/doc/manual/source/conf.py	2025-06-01 20:35:04.008764000 -0700
@@ -74,9 +74,9 @@
 # built documents.
 #
 # The short X.Y version.
-version = "ns-3.44"
+version = "ns-3.45"
 # The full version, including alpha/beta/rc tags.
-release = "ns-3.44"
+release = "ns-3.45"
 
 # The language for content autogenerated by Sphinx. Refer to documentation
 # for a list of supported languages.
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/doc/manual/source/figures/perf.svg ns-3.45/doc/manual/source/figures/perf.svg
--- ns-3.44/doc/manual/source/figures/perf.svg	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.45/doc/manual/source/figures/perf.svg	2025-06-01 20:34:45.218701000 -0700
@@ -0,0 +1,26426 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" width="800" height="918" onload="init(evt)" viewBox="0 0 800 918" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<!-- Flame graph stack visualization. See https://github.com/brendangregg/FlameGraph for latest version, and http://www.brendangregg.com/flamegraphs.html for examples. -->
+<!-- NOTES:  -->
+<defs>
+	<linearGradient id="background" y1="0" y2="1" x1="0" x2="0" >
+		<stop stop-color="#eeeeee" offset="5%" />
+		<stop stop-color="#eeeeb0" offset="95%" />
+	</linearGradient>
+</defs>
+<style type="text/css">
+	text { font-family:Verdana; font-size:12px; fill:rgb(0,0,0); }
+	#search, #ignorecase { opacity:0.1; cursor:pointer; }
+	#search:hover, #search.show, #ignorecase:hover, #ignorecase.show { opacity:1; }
+	#subtitle { text-anchor:middle; font-color:rgb(160,160,160); }
+	#title { text-anchor:middle; font-size:17px}
+	#unzoom { cursor:pointer; }
+	#frames > *:hover { stroke:black; stroke-width:0.5; cursor:pointer; }
+	.hide { display:none; }
+	.parent { opacity:0.5; }
+</style>
+<script type="text/ecmascript">
+<![CDATA[
+	"use strict";
+	var details, searchbtn, unzoombtn, matchedtxt, svg, searching, currentSearchTerm, ignorecase, ignorecaseBtn;
+	function init(evt) {
+		details = document.getElementById("details").firstChild;
+		searchbtn = document.getElementById("search");
+		ignorecaseBtn = document.getElementById("ignorecase");
+		unzoombtn = document.getElementById("unzoom");
+		matchedtxt = document.getElementById("matched");
+		svg = document.getElementsByTagName("svg")[0];
+		searching = 0;
+		currentSearchTerm = null;
+
+		// use GET parameters to restore a flamegraphs state.
+		var params = get_params();
+		if (params.x && params.y)
+			zoom(find_group(document.querySelector('[x="' + params.x + '"][y="' + params.y + '"]')));
+                if (params.s) search(params.s);
+	}
+
+	// event listeners
+	window.addEventListener("click", function(e) {
+		var target = find_group(e.target);
+		if (target) {
+			if (target.nodeName == "a") {
+				if (e.ctrlKey === false) return;
+				e.preventDefault();
+			}
+			if (target.classList.contains("parent")) unzoom(true);
+			zoom(target);
+			if (!document.querySelector('.parent')) {
+				// we have basically done a clearzoom so clear the url
+				var params = get_params();
+				if (params.x) delete params.x;
+				if (params.y) delete params.y;
+				history.replaceState(null, null, parse_params(params));
+				unzoombtn.classList.add("hide");
+				return;
+			}
+
+			// set parameters for zoom state
+			var el = target.querySelector("rect");
+			if (el && el.attributes && el.attributes.y && el.attributes._orig_x) {
+				var params = get_params()
+				params.x = el.attributes._orig_x.value;
+				params.y = el.attributes.y.value;
+				history.replaceState(null, null, parse_params(params));
+			}
+		}
+		else if (e.target.id == "unzoom") clearzoom();
+		else if (e.target.id == "search") search_prompt();
+		else if (e.target.id == "ignorecase") toggle_ignorecase();
+	}, false)
+
+	// mouse-over for info
+	// show
+	window.addEventListener("mouseover", function(e) {
+		var target = find_group(e.target);
+		if (target) details.nodeValue = "Function: " + g_to_text(target);
+	}, false)
+
+	// clear
+	window.addEventListener("mouseout", function(e) {
+		var target = find_group(e.target);
+		if (target) details.nodeValue = ' ';
+	}, false)
+
+	// ctrl-F for search
+	// ctrl-I to toggle case-sensitive search
+	window.addEventListener("keydown",function (e) {
+		if (e.keyCode === 114 || (e.ctrlKey && e.keyCode === 70)) {
+			e.preventDefault();
+			search_prompt();
+		}
+		else if (e.ctrlKey && e.keyCode === 73) {
+			e.preventDefault();
+			toggle_ignorecase();
+		}
+	}, false)
+
+	// functions
+	function get_params() {
+		var params = {};
+		var paramsarr = window.location.search.substr(1).split('&');
+		for (var i = 0; i < paramsarr.length; ++i) {
+			var tmp = paramsarr[i].split("=");
+			if (!tmp[0] || !tmp[1]) continue;
+			params[tmp[0]]  = decodeURIComponent(tmp[1]);
+		}
+		return params;
+	}
+	function parse_params(params) {
+		var uri = "?";
+		for (var key in params) {
+			uri += key + '=' + encodeURIComponent(params[key]) + '&';
+		}
+		if (uri.slice(-1) == "&")
+			uri = uri.substring(0, uri.length - 1);
+		if (uri == '?')
+			uri = window.location.href.split('?')[0];
+		return uri;
+	}
+	function find_child(node, selector) {
+		var children = node.querySelectorAll(selector);
+		if (children.length) return children[0];
+	}
+	function find_group(node) {
+		var parent = node.parentElement;
+		if (!parent) return;
+		if (parent.id == "frames") return node;
+		return find_group(parent);
+	}
+	function orig_save(e, attr, val) {
+		if (e.attributes["_orig_" + attr] != undefined) return;
+		if (e.attributes[attr] == undefined) return;
+		if (val == undefined) val = e.attributes[attr].value;
+		e.setAttribute("_orig_" + attr, val);
+	}
+	function orig_load(e, attr) {
+		if (e.attributes["_orig_"+attr] == undefined) return;
+		e.attributes[attr].value = e.attributes["_orig_" + attr].value;
+		e.removeAttribute("_orig_"+attr);
+	}
+	function g_to_text(e) {
+		var text = find_child(e, "title").firstChild.nodeValue;
+		return (text)
+	}
+	function g_to_func(e) {
+		var func = g_to_text(e);
+		// if there's any manipulation we want to do to the function
+		// name before it's searched, do it here before returning.
+		return (func);
+	}
+	function update_text(e) {
+		var r = find_child(e, "rect");
+		var t = find_child(e, "text");
+		var w = parseFloat(r.attributes.width.value) -3;
+		var txt = find_child(e, "title").textContent.replace(/\([^(]*\)$/,"");
+		t.attributes.x.value = parseFloat(r.attributes.x.value) + 3;
+
+		// Smaller than this size won't fit anything
+		if (w < 2 * 12 * 0.59) {
+			t.textContent = "";
+			return;
+		}
+
+		t.textContent = txt;
+		var sl = t.getSubStringLength(0, txt.length);
+		// check if only whitespace or if we can fit the entire string into width w
+		if (/^ *$/.test(txt) || sl < w)
+			return;
+
+		// this isn't perfect, but gives a good starting point
+		// and avoids calling getSubStringLength too often
+		var start = Math.floor((w/sl) * txt.length);
+		for (var x = start; x > 0; x = x-2) {
+			if (t.getSubStringLength(0, x + 2) <= w) {
+				t.textContent = txt.substring(0, x) + "..";
+				return;
+			}
+		}
+		t.textContent = "";
+	}
+
+	// zoom
+	function zoom_reset(e) {
+		if (e.attributes != undefined) {
+			orig_load(e, "x");
+			orig_load(e, "width");
+		}
+		if (e.childNodes == undefined) return;
+		for (var i = 0, c = e.childNodes; i < c.length; i++) {
+			zoom_reset(c[i]);
+		}
+	}
+	function zoom_child(e, x, ratio) {
+		if (e.attributes != undefined) {
+			if (e.attributes.x != undefined) {
+				orig_save(e, "x");
+				e.attributes.x.value = (parseFloat(e.attributes.x.value) - x - 10) * ratio + 10;
+				if (e.tagName == "text")
+					e.attributes.x.value = find_child(e.parentNode, "rect[x]").attributes.x.value + 3;
+			}
+			if (e.attributes.width != undefined) {
+				orig_save(e, "width");
+				e.attributes.width.value = parseFloat(e.attributes.width.value) * ratio;
+			}
+		}
+
+		if (e.childNodes == undefined) return;
+		for (var i = 0, c = e.childNodes; i < c.length; i++) {
+			zoom_child(c[i], x - 10, ratio);
+		}
+	}
+	function zoom_parent(e) {
+		if (e.attributes) {
+			if (e.attributes.x != undefined) {
+				orig_save(e, "x");
+				e.attributes.x.value = 10;
+			}
+			if (e.attributes.width != undefined) {
+				orig_save(e, "width");
+				e.attributes.width.value = parseInt(svg.width.baseVal.value) - (10 * 2);
+			}
+		}
+		if (e.childNodes == undefined) return;
+		for (var i = 0, c = e.childNodes; i < c.length; i++) {
+			zoom_parent(c[i]);
+		}
+	}
+	function zoom(node) {
+		var attr = find_child(node, "rect").attributes;
+		var width = parseFloat(attr.width.value);
+		var xmin = parseFloat(attr.x.value);
+		var xmax = parseFloat(xmin + width);
+		var ymin = parseFloat(attr.y.value);
+		var ratio = (svg.width.baseVal.value - 2 * 10) / width;
+
+		// XXX: Workaround for JavaScript float issues (fix me)
+		var fudge = 0.0001;
+
+		unzoombtn.classList.remove("hide");
+
+		var el = document.getElementById("frames").children;
+		for (var i = 0; i < el.length; i++) {
+			var e = el[i];
+			var a = find_child(e, "rect").attributes;
+			var ex = parseFloat(a.x.value);
+			var ew = parseFloat(a.width.value);
+			var upstack;
+			// Is it an ancestor
+			if (0 == 0) {
+				upstack = parseFloat(a.y.value) > ymin;
+			} else {
+				upstack = parseFloat(a.y.value) < ymin;
+			}
+			if (upstack) {
+				// Direct ancestor
+				if (ex <= xmin && (ex+ew+fudge) >= xmax) {
+					e.classList.add("parent");
+					zoom_parent(e);
+					update_text(e);
+				}
+				// not in current path
+				else
+					e.classList.add("hide");
+			}
+			// Children maybe
+			else {
+				// no common path
+				if (ex < xmin || ex + fudge >= xmax) {
+					e.classList.add("hide");
+				}
+				else {
+					zoom_child(e, xmin, ratio);
+					update_text(e);
+				}
+			}
+		}
+		search();
+	}
+	function unzoom(dont_update_text) {
+		unzoombtn.classList.add("hide");
+		var el = document.getElementById("frames").children;
+		for(var i = 0; i < el.length; i++) {
+			el[i].classList.remove("parent");
+			el[i].classList.remove("hide");
+			zoom_reset(el[i]);
+			if(!dont_update_text) update_text(el[i]);
+		}
+		search();
+	}
+	function clearzoom() {
+		unzoom();
+
+		// remove zoom state
+		var params = get_params();
+		if (params.x) delete params.x;
+		if (params.y) delete params.y;
+		history.replaceState(null, null, parse_params(params));
+	}
+
+	// search
+	function toggle_ignorecase() {
+		ignorecase = !ignorecase;
+		if (ignorecase) {
+			ignorecaseBtn.classList.add("show");
+		} else {
+			ignorecaseBtn.classList.remove("show");
+		}
+		reset_search();
+		search();
+	}
+	function reset_search() {
+		var el = document.querySelectorAll("#frames rect");
+		for (var i = 0; i < el.length; i++) {
+			orig_load(el[i], "fill")
+		}
+		var params = get_params();
+		delete params.s;
+		history.replaceState(null, null, parse_params(params));
+	}
+	function search_prompt() {
+		if (!searching) {
+			var term = prompt("Enter a search term (regexp " +
+			    "allowed, eg: ^ext4_)"
+			    + (ignorecase ? ", ignoring case" : "")
+			    + "\nPress Ctrl-i to toggle case sensitivity", "");
+			if (term != null) search(term);
+		} else {
+			reset_search();
+			searching = 0;
+			currentSearchTerm = null;
+			searchbtn.classList.remove("show");
+			searchbtn.firstChild.nodeValue = "Search"
+			matchedtxt.classList.add("hide");
+			matchedtxt.firstChild.nodeValue = ""
+		}
+	}
+	function search(term) {
+		if (term) currentSearchTerm = term;
+		if (currentSearchTerm === null) return;
+
+		var re = new RegExp(currentSearchTerm, ignorecase ? 'i' : '');
+		var el = document.getElementById("frames").children;
+		var matches = new Object();
+		var maxwidth = 0;
+		for (var i = 0; i < el.length; i++) {
+			var e = el[i];
+			var func = g_to_func(e);
+			var rect = find_child(e, "rect");
+			if (func == null || rect == null)
+				continue;
+
+			// Save max width. Only works as we have a root frame
+			var w = parseFloat(rect.attributes.width.value);
+			if (w > maxwidth)
+				maxwidth = w;
+
+			if (func.match(re)) {
+				// highlight
+				var x = parseFloat(rect.attributes.x.value);
+				orig_save(rect, "fill");
+				rect.attributes.fill.value = "rgb(230,0,230)";
+
+				// remember matches
+				if (matches[x] == undefined) {
+					matches[x] = w;
+				} else {
+					if (w > matches[x]) {
+						// overwrite with parent
+						matches[x] = w;
+					}
+				}
+				searching = 1;
+			}
+		}
+		if (!searching)
+			return;
+		var params = get_params();
+		params.s = currentSearchTerm;
+		history.replaceState(null, null, parse_params(params));
+
+		searchbtn.classList.add("show");
+		searchbtn.firstChild.nodeValue = "Reset Search";
+
+		// calculate percent matched, excluding vertical overlap
+		var count = 0;
+		var lastx = -1;
+		var lastw = 0;
+		var keys = Array();
+		for (k in matches) {
+			if (matches.hasOwnProperty(k))
+				keys.push(k);
+		}
+		// sort the matched frames by their x location
+		// ascending, then width descending
+		keys.sort(function(a, b){
+			return a - b;
+		});
+		// Step through frames saving only the biggest bottom-up frames
+		// thanks to the sort order. This relies on the tree property
+		// where children are always smaller than their parents.
+		var fudge = 0.0001;	// JavaScript floating point
+		for (var k in keys) {
+			var x = parseFloat(keys[k]);
+			var w = matches[keys[k]];
+			if (x >= lastx + lastw - fudge) {
+				count += w;
+				lastx = x;
+				lastw = w;
+			}
+		}
+		// display matched percent
+		matchedtxt.classList.remove("hide");
+		var pct = 100 * count / maxwidth;
+		if (pct != 100) pct = pct.toFixed(1)
+		matchedtxt.firstChild.nodeValue = "Matched: " + pct + "%";
+	}
+]]>
+</script>
+<rect x="0.0" y="0" width="800.0" height="918.0" fill="url(#background)"  />
+<text id="title" x="400.00" y="24" >Flame Graph</text>
+<text id="details" x="10.00" y="901" > </text>
+<text id="unzoom" x="10.00" y="24" class="hide">Reset Zoom</text>
+<text id="search" x="690.00" y="24" >Search</text>
+<text id="ignorecase" x="774.00" y="24" >ic</text>
+<text id="matched" x="690.00" y="901" > </text>
+<g id="frames">
+<g >
+<title>std::map&lt;unsigned short, ns3::pfsFlowPerf_t, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt; &gt; &gt;::find (198,041 samples, 0.02%)</title><rect x="104.3" y="469" width="0.2" height="15.0" fill="rgb(211,28,6)" rx="2" ry="2" />
+<text  x="107.29" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::LteSpectrumModelId, std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt;, std::_Select1st&lt;std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt; &gt;, std::less&lt;ns3::LteSpectrumModelId&gt;, std::allocator&lt;std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt; &gt; &gt;::_M_begin (165,062 samples, 0.02%)</title><rect x="55.1" y="453" width="0.1" height="15.0" fill="rgb(233,130,31)" rx="2" ry="2" />
+<text  x="58.06" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt; &gt; &gt;::_M_mbegin (190,024 samples, 0.02%)</title><rect x="186.4" y="437" width="0.2" height="15.0" fill="rgb(247,197,47)" rx="2" ry="2" />
+<text  x="189.45" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt; &gt;::_M_valptr (198,501 samples, 0.02%)</title><rect x="675.2" y="453" width="0.2" height="15.0" fill="rgb(222,81,19)" rx="2" ry="2" />
+<text  x="678.20" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::operator= (550,220 samples, 0.06%)</title><rect x="483.2" y="325" width="0.5" height="15.0" fill="rgb(243,177,42)" rx="2" ry="2" />
+<text  x="486.21" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt; ns3::CreateObject&lt;ns3::PacketBurst&gt; (5,659,329 samples, 0.58%)</title><rect x="370.7" y="533" width="4.6" height="15.0" fill="rgb(205,4,0)" rx="2" ry="2" />
+<text  x="373.73" y="543.5" ></text>
+</g>
+<g >
+<title>[libc.so.6] (128,671 samples, 0.01%)</title><rect x="78.6" y="341" width="0.1" height="15.0" fill="rgb(223,84,20)" rx="2" ry="2" />
+<text  x="81.56" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Packet&gt;::Ptr (155,467 samples, 0.02%)</title><rect x="361.5" y="501" width="0.1" height="15.0" fill="rgb(230,117,28)" rx="2" ry="2" />
+<text  x="364.46" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Function_base::_Base_manager&lt;ns3::Callback&lt;void, ns3::SpectrumValue const&amp;&gt;::Callback&lt;void  (206,217 samples, 0.02%)</title><rect x="577.5" y="453" width="0.2" height="15.0" fill="rgb(213,39,9)" rx="2" ry="2" />
+<text  x="580.52" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt;::_Vector_base (487,446 samples, 0.05%)</title><rect x="125.6" y="357" width="0.4" height="15.0" fill="rgb(246,192,46)" rx="2" ry="2" />
+<text  x="128.59" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::MapScheduler::Insert (5,134,622 samples, 0.53%)</title><rect x="660.7" y="469" width="4.1" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="663.67" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;::operator (356,060 samples, 0.04%)</title><rect x="75.0" y="517" width="0.3" height="15.0" fill="rgb(243,179,42)" rx="2" ry="2" />
+<text  x="78.03" y="527.5" ></text>
+</g>
+<g >
+<title>decltype  (247,590 samples, 0.03%)</title><rect x="564.2" y="117" width="0.2" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="567.20" y="127.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::vector (188,646 samples, 0.02%)</title><rect x="122.1" y="533" width="0.2" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="125.12" y="543.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_insert&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; const&amp;&gt; (529,781 samples, 0.05%)</title><rect x="598.3" y="261" width="0.5" height="15.0" fill="rgb(210,27,6)" rx="2" ry="2" />
+<text  x="601.34" y="271.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::deallocate (124,394 samples, 0.01%)</title><rect x="776.2" y="293" width="0.1" height="15.0" fill="rgb(209,20,4)" rx="2" ry="2" />
+<text  x="779.16" y="303.5" ></text>
+</g>
+<g >
+<title>std::map&lt;ns3::LteFlowId_t, ns3::FfMacSchedSapProvider::SchedDlRlcBufferReqParameters, std::less&lt;ns3::LteFlowId_t&gt;, std::allocator&lt;std::pair&lt;ns3::LteFlowId_t const, ns3::FfMacSchedSapProvider::SchedDlRlcBufferReqParameters&gt; &gt; &gt;::find (150,793 samples, 0.02%)</title><rect x="18.3" y="293" width="0.1" height="15.0" fill="rgb(229,112,26)" rx="2" ry="2" />
+<text  x="21.31" y="303.5" ></text>
+</g>
+<g >
+<title>pow (195,678 samples, 0.02%)</title><rect x="603.6" y="309" width="0.1" height="15.0" fill="rgb(254,226,54)" rx="2" ry="2" />
+<text  x="606.59" y="319.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::MacCeListElement_s, std::allocator&lt;ns3::MacCeListElement_s&gt; &gt;::~_Vector_base (162,749 samples, 0.02%)</title><rect x="133.3" y="485" width="0.1" height="15.0" fill="rgb(254,229,54)" rx="2" ry="2" />
+<text  x="136.29" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultDeleter&lt;ns3::Packet&gt;::Delete (900,924 samples, 0.09%)</title><rect x="76.0" y="261" width="0.7" height="15.0" fill="rgb(231,123,29)" rx="2" ry="2" />
+<text  x="78.98" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::LteNetDevice::GetNode (287,608 samples, 0.03%)</title><rect x="66.7" y="517" width="0.3" height="15.0" fill="rgb(229,112,26)" rx="2" ry="2" />
+<text  x="69.74" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Bind&lt;void  (421,730 samples, 0.04%)</title><rect x="281.3" y="501" width="0.3" height="15.0" fill="rgb(253,221,52)" rx="2" ry="2" />
+<text  x="284.26" y="511.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::VendorSpecificListElement_s*, std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt; &gt; std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;ns3::VendorSpecificListElement_s const*, std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;ns3::VendorSpecificListElement_s*, std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt; &gt; &gt; (183,538 samples, 0.02%)</title><rect x="18.0" y="245" width="0.2" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="21.01" y="255.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::at (475,937 samples, 0.05%)</title><rect x="224.9" y="485" width="0.3" height="15.0" fill="rgb(220,69,16)" rx="2" ry="2" />
+<text  x="227.85" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::LteRlcSm::DoNotifyTxOpportunity (304,289 samples, 0.03%)</title><rect x="15.5" y="389" width="0.2" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="18.45" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt;::_M_valptr (126,936 samples, 0.01%)</title><rect x="565.3" y="197" width="0.1" height="15.0" fill="rgb(208,14,3)" rx="2" ry="2" />
+<text  x="568.26" y="207.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::_S_relocate (236,704 samples, 0.02%)</title><rect x="219.7" y="437" width="0.2" height="15.0" fill="rgb(242,173,41)" rx="2" ry="2" />
+<text  x="222.66" y="447.5" ></text>
+</g>
+<g >
+<title>void ns3::Simulator::ScheduleWithContext&lt;void  (11,324,289 samples, 1.17%)</title><rect x="333.3" y="501" width="9.1" height="15.0" fill="rgb(222,78,18)" rx="2" ry="2" />
+<text  x="336.30" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::Ptr&lt;ns3::Object&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Object&gt; &gt; &gt;::~_Vector_base (279,523 samples, 0.03%)</title><rect x="379.9" y="293" width="0.3" height="15.0" fill="rgb(221,76,18)" rx="2" ry="2" />
+<text  x="382.94" y="303.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::HigherLayerSelected_s*&gt; (151,525 samples, 0.02%)</title><rect x="255.6" y="325" width="0.1" height="15.0" fill="rgb(251,211,50)" rx="2" ry="2" />
+<text  x="258.57" y="335.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;unsigned short&gt;::allocate (378,466 samples, 0.04%)</title><rect x="218.8" y="389" width="0.3" height="15.0" fill="rgb(214,44,10)" rx="2" ry="2" />
+<text  x="221.77" y="399.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;*, std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt; &gt;::operator+ (275,310 samples, 0.03%)</title><rect x="622.7" y="501" width="0.3" height="15.0" fill="rgb(229,113,27)" rx="2" ry="2" />
+<text  x="625.74" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::MobilityModel::GetPosition (488,812 samples, 0.05%)</title><rect x="738.2" y="549" width="0.4" height="15.0" fill="rgb(217,59,14)" rx="2" ry="2" />
+<text  x="741.18" y="559.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::_M_lower_bound (350,404 samples, 0.04%)</title><rect x="223.4" y="453" width="0.3" height="15.0" fill="rgb(226,97,23)" rx="2" ry="2" />
+<text  x="226.42" y="463.5" ></text>
+</g>
+<g >
+<title>double std::reduce&lt;__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, double&gt; (204,657 samples, 0.02%)</title><rect x="725.9" y="325" width="0.2" height="15.0" fill="rgb(218,62,15)" rx="2" ry="2" />
+<text  x="728.92" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::MemberSchedSapProvider&lt;ns3::PfFfMacScheduler&gt;::SchedDlTriggerReq (314,249 samples, 0.03%)</title><rect x="11.2" y="517" width="0.2" height="15.0" fill="rgb(247,193,46)" rx="2" ry="2" />
+<text  x="14.17" y="527.5" ></text>
+</g>
+<g >
+<title>unsigned int* std::__fill_n_a&lt;unsigned int*, unsigned long, unsigned int&gt; (643,609 samples, 0.07%)</title><rect x="695.9" y="405" width="0.5" height="15.0" fill="rgb(252,216,51)" rx="2" ry="2" />
+<text  x="698.92" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, unsigned int&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt; &gt;::_M_lower_bound (1,092,232 samples, 0.11%)</title><rect x="223.9" y="453" width="0.9" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="226.94" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::IsotropicAntennaModel::GetGainDb (146,639 samples, 0.02%)</title><rect x="66.5" y="517" width="0.1" height="15.0" fill="rgb(208,17,4)" rx="2" ry="2" />
+<text  x="69.53" y="527.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::CqiListElement_s&gt; (416,767 samples, 0.04%)</title><rect x="106.8" y="405" width="0.3" height="15.0" fill="rgb(241,165,39)" rx="2" ry="2" />
+<text  x="109.77" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::MacCeListElement_s::~MacCeListElement_s (204,134 samples, 0.02%)</title><rect x="457.7" y="261" width="0.2" height="15.0" fill="rgb(209,20,4)" rx="2" ry="2" />
+<text  x="460.69" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::EventId::EventId (124,898 samples, 0.01%)</title><rect x="706.2" y="469" width="0.1" height="15.0" fill="rgb(206,4,1)" rx="2" ry="2" />
+<text  x="709.19" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::TagBuffer::ReadU32 (411,294 samples, 0.04%)</title><rect x="426.8" y="181" width="0.3" height="15.0" fill="rgb(252,216,51)" rx="2" ry="2" />
+<text  x="429.81" y="191.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; &gt;::_M_ptr (532,897 samples, 0.05%)</title><rect x="348.1" y="501" width="0.5" height="15.0" fill="rgb(219,67,16)" rx="2" ry="2" />
+<text  x="351.13" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt; &gt;::_M_valptr (427,542 samples, 0.04%)</title><rect x="158.3" y="341" width="0.3" height="15.0" fill="rgb(251,211,50)" rx="2" ry="2" />
+<text  x="161.27" y="351.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::~vector (148,894 samples, 0.02%)</title><rect x="303.0" y="501" width="0.1" height="15.0" fill="rgb(252,219,52)" rx="2" ry="2" />
+<text  x="305.97" y="511.5" ></text>
+</g>
+<g >
+<title>double* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, double*, double&gt; (583,431 samples, 0.06%)</title><rect x="324.9" y="453" width="0.4" height="15.0" fill="rgb(222,79,19)" rx="2" ry="2" />
+<text  x="327.85" y="463.5" ></text>
+</g>
+<g >
+<title>double* std::fill_n&lt;double*, unsigned long, double&gt; (461,600 samples, 0.05%)</title><rect x="301.4" y="373" width="0.4" height="15.0" fill="rgb(234,135,32)" rx="2" ry="2" />
+<text  x="304.40" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Packet&gt;::~Ptr (4,598,067 samples, 0.47%)</title><rect x="545.4" y="181" width="3.7" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="548.41" y="191.5" ></text>
+</g>
+<g >
+<title>std::_Function_base::_Base_manager&lt;ns3::Callback&lt;void, ns3::SpectrumValue const&amp;&gt;::Callback&lt;void  (394,803 samples, 0.04%)</title><rect x="468.0" y="453" width="0.3" height="15.0" fill="rgb(213,39,9)" rx="2" ry="2" />
+<text  x="471.00" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumSignalParametersDataFrame::~LteSpectrumSignalParametersDataFrame (2,421,676 samples, 0.25%)</title><rect x="652.5" y="453" width="1.9" height="15.0" fill="rgb(242,174,41)" rx="2" ry="2" />
+<text  x="655.49" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;int, std::allocator&lt;int&gt; &gt;::_Vector_base (208,316 samples, 0.02%)</title><rect x="91.4" y="533" width="0.1" height="15.0" fill="rgb(215,47,11)" rx="2" ry="2" />
+<text  x="94.37" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt; &gt;::operator* (332,309 samples, 0.03%)</title><rect x="428.9" y="277" width="0.3" height="15.0" fill="rgb(221,76,18)" rx="2" ry="2" />
+<text  x="431.92" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::MatrixArray&lt;std::complex&lt;double&gt; &gt; const&gt;::Acquire (149,159 samples, 0.02%)</title><rect x="645.4" y="437" width="0.1" height="15.0" fill="rgb(234,134,32)" rx="2" ry="2" />
+<text  x="648.40" y="447.5" ></text>
+</g>
+<g >
+<title>unsigned short* std::uninitialized_fill_n&lt;unsigned short*, unsigned long, unsigned short&gt; (858,492 samples, 0.09%)</title><rect x="252.1" y="437" width="0.6" height="15.0" fill="rgb(217,59,14)" rx="2" ry="2" />
+<text  x="255.05" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue&gt; ns3::Copy&lt;ns3::SpectrumValue&gt; (148,581 samples, 0.02%)</title><rect x="114.8" y="485" width="0.2" height="15.0" fill="rgb(223,83,19)" rx="2" ry="2" />
+<text  x="117.85" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::MobilityModel const&gt;::operator (353,481 samples, 0.04%)</title><rect x="740.4" y="501" width="0.3" height="15.0" fill="rgb(240,164,39)" rx="2" ry="2" />
+<text  x="743.37" y="511.5" ></text>
+</g>
+<g >
+<title>[libc.so.6] (487,893 samples, 0.05%)</title><rect x="407.7" y="341" width="0.4" height="15.0" fill="rgb(223,84,20)" rx="2" ry="2" />
+<text  x="410.68" y="351.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::find (146,964 samples, 0.02%)</title><rect x="99.3" y="469" width="0.1" height="15.0" fill="rgb(223,83,20)" rx="2" ry="2" />
+<text  x="102.32" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt;::_M_lower_bound (310,068 samples, 0.03%)</title><rect x="437.2" y="261" width="0.2" height="15.0" fill="rgb(240,162,38)" rx="2" ry="2" />
+<text  x="440.20" y="271.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt;::_Vector_impl::_Vector_impl (201,403 samples, 0.02%)</title><rect x="445.1" y="293" width="0.2" height="15.0" fill="rgb(229,112,26)" rx="2" ry="2" />
+<text  x="448.11" y="303.5" ></text>
+</g>
+<g >
+<title>decltype  (197,496 samples, 0.02%)</title><rect x="342.1" y="325" width="0.2" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="345.10" y="335.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned int, std::allocator&lt;unsigned int&gt; &gt;::operator[] (232,400 samples, 0.02%)</title><rect x="694.6" y="485" width="0.2" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="697.64" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt;::push_back (329,003 samples, 0.03%)</title><rect x="101.5" y="469" width="0.3" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="104.53" y="479.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::UlInfoListElement_s*, ns3::UlInfoListElement_s&gt; (271,620 samples, 0.03%)</title><rect x="265.5" y="485" width="0.2" height="15.0" fill="rgb(247,195,46)" rx="2" ry="2" />
+<text  x="268.48" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultDeleter&lt;ns3::SpectrumValue&gt;::Delete (207,577 samples, 0.02%)</title><rect x="78.9" y="485" width="0.2" height="15.0" fill="rgb(222,79,19)" rx="2" ry="2" />
+<text  x="81.90" y="495.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt; &gt; &gt;::find (1,864,747 samples, 0.19%)</title><rect x="169.5" y="453" width="1.5" height="15.0" fill="rgb(211,30,7)" rx="2" ry="2" />
+<text  x="172.46" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::UlDciListElement_s, std::allocator&lt;ns3::UlDciListElement_s&gt; &gt;::size (319,528 samples, 0.03%)</title><rect x="250.4" y="437" width="0.2" height="15.0" fill="rgb(205,1,0)" rx="2" ry="2" />
+<text  x="253.39" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Callback&lt;void, std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt;::operator (29,097,935 samples, 3.00%)</title><rect x="441.0" y="549" width="23.4" height="15.0" fill="rgb(229,110,26)" rx="2" ry="2" />
+<text  x="444.04" y="559.5" >n..</text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt;::allocate (267,808 samples, 0.03%)</title><rect x="499.4" y="453" width="0.2" height="15.0" fill="rgb(243,178,42)" rx="2" ry="2" />
+<text  x="502.42" y="463.5" ></text>
+</g>
+<g >
+<title>[unknown] (29,966,440 samples, 3.09%)</title><rect x="11.2" y="837" width="24.1" height="15.0" fill="rgb(210,24,5)" rx="2" ry="2" />
+<text  x="14.15" y="847.5" >[..</text>
+</g>
+<g >
+<title>ns3::MakeEvent&lt;void  (22,443,594 samples, 2.31%)</title><rect x="17.2" y="741" width="18.0" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="20.17" y="751.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, unsigned int&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt; &gt;::_S_key (509,708 samples, 0.05%)</title><rect x="224.1" y="437" width="0.4" height="15.0" fill="rgb(219,66,15)" rx="2" ry="2" />
+<text  x="227.07" y="447.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::operator= (231,116 samples, 0.02%)</title><rect x="148.1" y="421" width="0.2" height="15.0" fill="rgb(224,91,21)" rx="2" ry="2" />
+<text  x="151.10" y="431.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt;::~vector (296,190 samples, 0.03%)</title><rect x="131.2" y="501" width="0.3" height="15.0" fill="rgb(254,227,54)" rx="2" ry="2" />
+<text  x="134.25" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::MemberSchedSapProvider&lt;ns3::PfFfMacScheduler&gt;::SchedDlRlcBufferReq (2,595,942 samples, 0.27%)</title><rect x="25.4" y="341" width="2.0" height="15.0" fill="rgb(218,60,14)" rx="2" ry="2" />
+<text  x="28.36" y="351.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;int const, double&gt; &gt;::_M_valptr (197,171 samples, 0.02%)</title><rect x="58.1" y="437" width="0.1" height="15.0" fill="rgb(252,219,52)" rx="2" ry="2" />
+<text  x="61.09" y="447.5" ></text>
+</g>
+<g >
+<title>std::remove_reference&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;&amp;&gt;::type&amp;&amp; std::move&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;&amp;&gt; (190,575 samples, 0.02%)</title><rect x="381.4" y="421" width="0.2" height="15.0" fill="rgb(217,56,13)" rx="2" ry="2" />
+<text  x="384.41" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapProvider::ReportBufferStatusParameters&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider::ReportBufferStatusParameters&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider::ReportBufferStatusParameters&gt; &gt; &gt;::end (236,767 samples, 0.02%)</title><rect x="690.6" y="485" width="0.2" height="15.0" fill="rgb(221,74,17)" rx="2" ry="2" />
+<text  x="693.59" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt;::_M_deallocate (378,541 samples, 0.04%)</title><rect x="256.4" y="357" width="0.3" height="15.0" fill="rgb(211,29,6)" rx="2" ry="2" />
+<text  x="259.39" y="367.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::DlInfoListElement_s const*, std::vector&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt; &gt;::base (239,920 samples, 0.02%)</title><rect x="257.1" y="485" width="0.2" height="15.0" fill="rgb(207,10,2)" rx="2" ry="2" />
+<text  x="260.13" y="495.5" ></text>
+</g>
+<g >
+<title>__pow_finite@plt (150,295 samples, 0.02%)</title><rect x="678.9" y="485" width="0.1" height="15.0" fill="rgb(251,213,51)" rx="2" ry="2" />
+<text  x="681.89" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumPhy::UpdateSinrPerceived (1,031,003 samples, 0.11%)</title><rect x="482.2" y="341" width="0.9" height="15.0" fill="rgb(226,98,23)" rx="2" ry="2" />
+<text  x="485.23" y="351.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_M_create_storage (168,940 samples, 0.02%)</title><rect x="78.5" y="453" width="0.2" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="81.52" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::TbId_t, std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::_Select1st&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::_M_begin (366,917 samples, 0.04%)</title><rect x="507.3" y="517" width="0.3" height="15.0" fill="rgb(245,184,44)" rx="2" ry="2" />
+<text  x="510.28" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;::_M_valptr (244,479 samples, 0.03%)</title><rect x="507.8" y="485" width="0.2" height="15.0" fill="rgb(218,62,14)" rx="2" ry="2" />
+<text  x="510.80" y="495.5" ></text>
+</g>
+<g >
+<title>bool __gnu_cxx::operator==&lt;ns3::DlInfoListElement_s const*, std::vector&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt; &gt; (155,906 samples, 0.02%)</title><rect x="258.3" y="421" width="0.2" height="15.0" fill="rgb(222,80,19)" rx="2" ry="2" />
+<text  x="261.33" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::IidManager::GetParent (124,384 samples, 0.01%)</title><rect x="542.4" y="245" width="0.1" height="15.0" fill="rgb(217,59,14)" rx="2" ry="2" />
+<text  x="545.42" y="255.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;double&gt;::deallocate (199,701 samples, 0.02%)</title><rect x="716.8" y="357" width="0.2" height="15.0" fill="rgb(223,83,20)" rx="2" ry="2" />
+<text  x="719.83" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::LteUePhy::CreateTxPowerSpectralDensity (6,920,606 samples, 0.71%)</title><rect x="674.3" y="533" width="5.6" height="15.0" fill="rgb(241,169,40)" rx="2" ry="2" />
+<text  x="677.32" y="543.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;* std::__copy_move_a2&lt;true, std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;*, std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;*&gt; (145,758 samples, 0.02%)</title><rect x="110.6" y="437" width="0.1" height="15.0" fill="rgb(245,186,44)" rx="2" ry="2" />
+<text  x="113.56" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_M_copy (400,356 samples, 0.04%)</title><rect x="232.5" y="437" width="0.3" height="15.0" fill="rgb(218,60,14)" rx="2" ry="2" />
+<text  x="235.50" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_Vector_base (163,185 samples, 0.02%)</title><rect x="56.8" y="453" width="0.1" height="15.0" fill="rgb(237,150,35)" rx="2" ry="2" />
+<text  x="59.81" y="463.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_insert&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; const&amp;&gt; (186,142 samples, 0.02%)</title><rect x="648.9" y="373" width="0.1" height="15.0" fill="rgb(210,27,6)" rx="2" ry="2" />
+<text  x="651.88" y="383.5" ></text>
+</g>
+<g >
+<title>void ns3::Simulator::ScheduleWithContext&lt;void  (10,844,170 samples, 1.12%)</title><rect x="660.2" y="517" width="8.8" height="15.0" fill="rgb(222,78,18)" rx="2" ry="2" />
+<text  x="663.24" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::TracedCallback&lt;ns3::PhyTransmissionStatParameters&gt;::operator (148,768 samples, 0.02%)</title><rect x="391.4" y="549" width="0.1" height="15.0" fill="rgb(254,228,54)" rx="2" ry="2" />
+<text  x="394.40" y="559.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteSpectrumSignalParametersDataFrame&gt;::~Ptr (192,141 samples, 0.02%)</title><rect x="670.6" y="533" width="0.1" height="15.0" fill="rgb(229,114,27)" rx="2" ry="2" />
+<text  x="673.59" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt; &gt;::_M_valptr (167,523 samples, 0.02%)</title><rect x="429.8" y="213" width="0.1" height="15.0" fill="rgb(251,211,50)" rx="2" ry="2" />
+<text  x="432.77" y="223.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumModel::GetNumBands (198,424 samples, 0.02%)</title><rect x="402.9" y="485" width="0.2" height="15.0" fill="rgb(247,194,46)" rx="2" ry="2" />
+<text  x="405.95" y="495.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;::pair&lt;unsigned short const&amp;&gt; (614,403 samples, 0.06%)</title><rect x="191.3" y="373" width="0.5" height="15.0" fill="rgb(236,144,34)" rx="2" ry="2" />
+<text  x="194.33" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteUeMac::LcInfo&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteUeMac::LcInfo&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteUeMac::LcInfo&gt; &gt; &gt;::_M_begin (344,173 samples, 0.04%)</title><rect x="690.9" y="469" width="0.3" height="15.0" fill="rgb(246,188,45)" rx="2" ry="2" />
+<text  x="693.94" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_Vector_impl::_Vector_impl (304,552 samples, 0.03%)</title><rect x="687.1" y="437" width="0.2" height="15.0" fill="rgb(226,98,23)" rx="2" ry="2" />
+<text  x="690.08" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::HigherLayerSelected_s::operator= (193,644 samples, 0.02%)</title><rect x="134.9" y="373" width="0.1" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="137.86" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::operator&lt; (470,743 samples, 0.05%)</title><rect x="275.1" y="405" width="0.4" height="15.0" fill="rgb(234,137,32)" rx="2" ry="2" />
+<text  x="278.07" y="415.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::BuildRarListElement_s*&gt; (157,406 samples, 0.02%)</title><rect x="146.4" y="421" width="0.2" height="15.0" fill="rgb(213,41,9)" rx="2" ry="2" />
+<text  x="149.43" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteControlMessage&gt;::Acquire (405,134 samples, 0.04%)</title><rect x="499.8" y="421" width="0.3" height="15.0" fill="rgb(212,36,8)" rx="2" ry="2" />
+<text  x="502.80" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;2ul, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::~_Tuple_impl (4,416,635 samples, 0.46%)</title><rect x="773.7" y="517" width="3.5" height="15.0" fill="rgb(217,57,13)" rx="2" ry="2" />
+<text  x="776.67" y="527.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::fill_n&lt;unsigned char*, unsigned long, unsigned char&gt; (339,561 samples, 0.04%)</title><rect x="216.0" y="405" width="0.3" height="15.0" fill="rgb(211,28,6)" rx="2" ry="2" />
+<text  x="219.00" y="415.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::vector (190,302 samples, 0.02%)</title><rect x="387.9" y="533" width="0.2" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="390.94" y="543.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_get_node (388,525 samples, 0.04%)</title><rect x="499.3" y="469" width="0.3" height="15.0" fill="rgb(247,194,46)" rx="2" ry="2" />
+<text  x="502.33" y="479.5" ></text>
+</g>
+<g >
+<title>malloc (205,465 samples, 0.02%)</title><rect x="558.0" y="165" width="0.2" height="15.0" fill="rgb(230,119,28)" rx="2" ry="2" />
+<text  x="561.03" y="175.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::Ptr&lt;ns3::Object&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Object&gt; &gt; &gt;::~_Vector_base (293,725 samples, 0.03%)</title><rect x="550.0" y="197" width="0.2" height="15.0" fill="rgb(221,76,18)" rx="2" ry="2" />
+<text  x="552.96" y="207.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumSignalParametersDlCtrlFrame::LteSpectrumSignalParametersDlCtrlFrame (6,566,512 samples, 0.68%)</title><rect x="314.1" y="469" width="5.3" height="15.0" fill="rgb(234,133,32)" rx="2" ry="2" />
+<text  x="317.09" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt; &gt;::operator* (187,135 samples, 0.02%)</title><rect x="234.7" y="485" width="0.2" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="237.73" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;::at (420,921 samples, 0.04%)</title><rect x="375.5" y="533" width="0.4" height="15.0" fill="rgb(233,131,31)" rx="2" ry="2" />
+<text  x="378.53" y="543.5" ></text>
+</g>
+<g >
+<title>operator new (217,527 samples, 0.02%)</title><rect x="319.4" y="469" width="0.1" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="322.37" y="479.5" ></text>
+</g>
+<g >
+<title>std::__detail::_List_node_header::_M_base (142,742 samples, 0.01%)</title><rect x="290.7" y="357" width="0.1" height="15.0" fill="rgb(205,1,0)" rx="2" ry="2" />
+<text  x="293.71" y="367.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_clear (148,437 samples, 0.02%)</title><rect x="698.0" y="517" width="0.1" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="700.96" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_M_get_node (128,987 samples, 0.01%)</title><rect x="59.6" y="389" width="0.1" height="15.0" fill="rgb(231,120,28)" rx="2" ry="2" />
+<text  x="62.58" y="399.5" ></text>
+</g>
+<g >
+<title>std::map&lt;ns3::Scheduler::EventKey, ns3::EventImpl*, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::begin (1,458,842 samples, 0.15%)</title><rect x="760.2" y="709" width="1.2" height="15.0" fill="rgb(247,193,46)" rx="2" ry="2" />
+<text  x="763.21" y="719.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::~_Vector_base (285,804 samples, 0.03%)</title><rect x="773.3" y="421" width="0.2" height="15.0" fill="rgb(223,86,20)" rx="2" ry="2" />
+<text  x="776.26" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::MakeEvent&lt;void  (200,168 samples, 0.02%)</title><rect x="715.5" y="485" width="0.2" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="718.50" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::operator= (234,084 samples, 0.02%)</title><rect x="419.3" y="341" width="0.2" height="15.0" fill="rgb(253,223,53)" rx="2" ry="2" />
+<text  x="422.30" y="351.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt;::~_Vector_base (271,191 samples, 0.03%)</title><rect x="445.7" y="293" width="0.2" height="15.0" fill="rgb(244,183,43)" rx="2" ry="2" />
+<text  x="448.72" y="303.5" ></text>
+</g>
+<g >
+<title>std::operator== (126,322 samples, 0.01%)</title><rect x="74.2" y="469" width="0.1" height="15.0" fill="rgb(229,110,26)" rx="2" ry="2" />
+<text  x="77.15" y="479.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::VendorSpecificListElement_s*, std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt; &gt; std::copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::VendorSpecificListElement_s const*, std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;ns3::VendorSpecificListElement_s*, std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt; &gt; &gt; (603,286 samples, 0.06%)</title><rect x="25.7" y="277" width="0.5" height="15.0" fill="rgb(231,119,28)" rx="2" ry="2" />
+<text  x="28.74" y="287.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;3ul, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::_Tuple_impl&lt;ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;&amp;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;&amp;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;&amp;, void&gt; (395,163 samples, 0.04%)</title><rect x="666.9" y="373" width="0.4" height="15.0" fill="rgb(215,46,11)" rx="2" ry="2" />
+<text  x="669.95" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::MacCeValue_u::MacCeValue_u (1,932,297 samples, 0.20%)</title><rect x="686.7" y="485" width="1.5" height="15.0" fill="rgb(219,65,15)" rx="2" ry="2" />
+<text  x="689.69" y="495.5" ></text>
+</g>
+<g >
+<title>std::_List_node&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt;::_M_valptr (161,864 samples, 0.02%)</title><rect x="70.2" y="437" width="0.2" height="15.0" fill="rgb(215,46,11)" rx="2" ry="2" />
+<text  x="73.24" y="447.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::CqiListElement_s, std::allocator&lt;ns3::CqiListElement_s&gt; &gt;::empty (704,819 samples, 0.07%)</title><rect x="254.2" y="517" width="0.5" height="15.0" fill="rgb(231,122,29)" rx="2" ry="2" />
+<text  x="257.18" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::operator-= (2,676,966 samples, 0.28%)</title><rect x="415.0" y="549" width="2.2" height="15.0" fill="rgb(252,220,52)" rx="2" ry="2" />
+<text  x="418.02" y="559.5" ></text>
+</g>
+<g >
+<title>bool __gnu_cxx::operator==&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; (358,959 samples, 0.04%)</title><rect x="745.7" y="517" width="0.3" height="15.0" fill="rgb(205,3,0)" rx="2" ry="2" />
+<text  x="748.72" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbMac::DoUlInfoListElementHarqFeedback (373,450 samples, 0.04%)</title><rect x="440.4" y="341" width="0.3" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="443.41" y="351.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_M_erase (518,709 samples, 0.05%)</title><rect x="60.7" y="421" width="0.4" height="15.0" fill="rgb(227,102,24)" rx="2" ry="2" />
+<text  x="63.68" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::HarqStatus_e* std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;ns3::DlInfoListElement_s::HarqStatus_e const*, std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt; &gt;, ns3::DlInfoListElement_s::HarqStatus_e*&gt; (147,743 samples, 0.02%)</title><rect x="107.3" y="293" width="0.1" height="15.0" fill="rgb(212,36,8)" rx="2" ry="2" />
+<text  x="110.33" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::DlDciLteControlMessage&gt;::operator (240,645 samples, 0.02%)</title><rect x="160.2" y="453" width="0.1" height="15.0" fill="rgb(222,79,19)" rx="2" ry="2" />
+<text  x="163.15" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::size (208,545 samples, 0.02%)</title><rect x="520.8" y="325" width="0.2" height="15.0" fill="rgb(216,50,12)" rx="2" ry="2" />
+<text  x="523.79" y="335.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_begin (234,091 samples, 0.02%)</title><rect x="336.8" y="389" width="0.1" height="15.0" fill="rgb(238,154,36)" rx="2" ry="2" />
+<text  x="339.76" y="399.5" ></text>
+</g>
+<g >
+<title>__log10_finite (150,649 samples, 0.02%)</title><rect x="582.3" y="309" width="0.1" height="15.0" fill="rgb(237,151,36)" rx="2" ry="2" />
+<text  x="585.25" y="319.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt;::clear (1,509,367 samples, 0.16%)</title><rect x="255.7" y="517" width="1.2" height="15.0" fill="rgb(232,124,29)" rx="2" ry="2" />
+<text  x="258.72" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::Time::From (518,604 samples, 0.05%)</title><rect x="389.5" y="517" width="0.4" height="15.0" fill="rgb(244,182,43)" rx="2" ry="2" />
+<text  x="392.50" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::SpectrumValue (242,130 samples, 0.02%)</title><rect x="409.8" y="517" width="0.2" height="15.0" fill="rgb(211,27,6)" rx="2" ry="2" />
+<text  x="412.84" y="527.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::~vector (390,089 samples, 0.04%)</title><rect x="483.8" y="501" width="0.3" height="15.0" fill="rgb(225,92,22)" rx="2" ry="2" />
+<text  x="486.78" y="511.5" ></text>
+</g>
+<g >
+<title>void std::destroy_at&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; (266,588 samples, 0.03%)</title><rect x="193.3" y="389" width="0.3" height="15.0" fill="rgb(228,107,25)" rx="2" ry="2" />
+<text  x="196.34" y="399.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;::_M_ptr (153,808 samples, 0.02%)</title><rect x="336.4" y="389" width="0.1" height="15.0" fill="rgb(219,66,15)" rx="2" ry="2" />
+<text  x="339.39" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, unsigned int&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt; &gt;::find (178,285 samples, 0.02%)</title><rect x="103.0" y="453" width="0.2" height="15.0" fill="rgb(214,44,10)" rx="2" ry="2" />
+<text  x="106.02" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::GetSpectrumModelUid (275,599 samples, 0.03%)</title><rect x="327.8" y="501" width="0.2" height="15.0" fill="rgb(254,228,54)" rx="2" ry="2" />
+<text  x="330.77" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::HarqStatus_e* std::copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::DlInfoListElement_s::HarqStatus_e const*, std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt; &gt;, ns3::DlInfoListElement_s::HarqStatus_e*&gt; (147,743 samples, 0.02%)</title><rect x="107.3" y="309" width="0.1" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="110.33" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::LteUePowerControl::GetPucchTxPower (379,341 samples, 0.04%)</title><rect x="680.8" y="549" width="0.3" height="15.0" fill="rgb(242,170,40)" rx="2" ry="2" />
+<text  x="683.81" y="559.5" ></text>
+</g>
+<g >
+<title>ns3::PfFfMacScheduler::DoSchedUlMacCtrlInfoReq (867,311 samples, 0.09%)</title><rect x="225.5" y="501" width="0.7" height="15.0" fill="rgb(244,180,43)" rx="2" ry="2" />
+<text  x="228.49" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_M_get_Tp_allocator (158,214 samples, 0.02%)</title><rect x="302.0" y="421" width="0.1" height="15.0" fill="rgb(227,101,24)" rx="2" ry="2" />
+<text  x="304.96" y="431.5" ></text>
+</g>
+<g >
+<title>double std::reduce&lt;__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, double, std::plus&lt;void&gt; &gt; (335,268 samples, 0.03%)</title><rect x="582.4" y="293" width="0.2" height="15.0" fill="rgb(221,77,18)" rx="2" ry="2" />
+<text  x="585.38" y="303.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;* std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_clone_node&lt;false, std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_Alloc_node&gt; (156,128 samples, 0.02%)</title><rect x="667.1" y="229" width="0.1" height="15.0" fill="rgb(205,4,0)" rx="2" ry="2" />
+<text  x="670.07" y="239.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_erase (821,493 samples, 0.08%)</title><rect x="776.6" y="405" width="0.6" height="15.0" fill="rgb(247,197,47)" rx="2" ry="2" />
+<text  x="779.56" y="415.5" ></text>
+</g>
+<g >
+<title>int* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;int const*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt;, int*&gt; (831,586 samples, 0.09%)</title><rect x="573.6" y="325" width="0.7" height="15.0" fill="rgb(251,216,51)" rx="2" ry="2" />
+<text  x="576.65" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::Object::~Object (158,753 samples, 0.02%)</title><rect x="17.0" y="357" width="0.1" height="15.0" fill="rgb(229,110,26)" rx="2" ry="2" />
+<text  x="19.99" y="367.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt;::max_size (243,139 samples, 0.03%)</title><rect x="511.9" y="501" width="0.2" height="15.0" fill="rgb(235,141,33)" rx="2" ry="2" />
+<text  x="514.89" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_Auto_node::_Auto_node&lt;std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (297,286 samples, 0.03%)</title><rect x="615.5" y="437" width="0.2" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="618.51" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::DlDciLteControlMessage::~DlDciLteControlMessage (361,458 samples, 0.04%)</title><rect x="609.9" y="437" width="0.3" height="15.0" fill="rgb(212,34,8)" rx="2" ry="2" />
+<text  x="612.94" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::MemberLteCcmRrcSapUser&lt;ns3::LteEnbRrc&gt;::GetUeManager (297,730 samples, 0.03%)</title><rect x="18.4" y="357" width="0.3" height="15.0" fill="rgb(228,107,25)" rx="2" ry="2" />
+<text  x="21.43" y="367.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;is_member_pointer_v&lt;void  (3,010,892 samples, 0.31%)</title><rect x="616.6" y="533" width="2.5" height="15.0" fill="rgb(241,170,40)" rx="2" ry="2" />
+<text  x="619.64" y="543.5" ></text>
+</g>
+<g >
+<title>std::move_iterator&lt;ns3::DlInfoListElement_s::HarqStatus_e*&gt; std::__make_move_if_noexcept_iterator&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::move_iterator&lt;ns3::DlInfoListElement_s::HarqStatus_e*&gt; &gt; (147,819 samples, 0.02%)</title><rect x="511.6" y="501" width="0.1" height="15.0" fill="rgb(228,107,25)" rx="2" ry="2" />
+<text  x="514.61" y="511.5" ></text>
+</g>
+<g >
+<title>std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;* std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_create_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; const&amp;&gt; (1,304,199 samples, 0.13%)</title><rect x="148.8" y="373" width="1.0" height="15.0" fill="rgb(230,116,27)" rx="2" ry="2" />
+<text  x="151.79" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumPhy* ns3::PeekPointer&lt;ns3::LteSpectrumPhy&gt; (451,162 samples, 0.05%)</title><rect x="578.5" y="389" width="0.3" height="15.0" fill="rgb(206,4,1)" rx="2" ry="2" />
+<text  x="581.45" y="399.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::VendorSpecificListElement_s*&gt; (162,953 samples, 0.02%)</title><rect x="473.5" y="261" width="0.1" height="15.0" fill="rgb(236,143,34)" rx="2" ry="2" />
+<text  x="476.48" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::MultiModelSpectrumChannel::StartTx (774,582 samples, 0.08%)</title><rect x="613.7" y="533" width="0.7" height="15.0" fill="rgb(227,102,24)" rx="2" ry="2" />
+<text  x="616.73" y="543.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;std::__strip_reference_wrapper&lt;std::decay&lt;ns3::Scheduler::EventKey const&amp;&gt;::type&gt;::__type, std::__strip_reference_wrapper&lt;std::decay&lt;ns3::EventImpl* const&amp;&gt;::type&gt;::__type&gt; std::make_pair&lt;ns3::Scheduler::EventKey const&amp;, ns3::EventImpl* const&amp;&gt; (831,665 samples, 0.09%)</title><rect x="276.9" y="485" width="0.7" height="15.0" fill="rgb(235,141,33)" rx="2" ry="2" />
+<text  x="279.91" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::SpectrumSignalParameters, ns3::Empty, ns3::DefaultDeleter&lt;ns3::SpectrumSignalParameters&gt; &gt;::Unref (3,444,708 samples, 0.36%)</title><rect x="75.3" y="501" width="2.8" height="15.0" fill="rgb(254,229,54)" rx="2" ry="2" />
+<text  x="78.31" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteControlMessage&gt;::Ptr (405,134 samples, 0.04%)</title><rect x="499.8" y="437" width="0.3" height="15.0" fill="rgb(222,81,19)" rx="2" ry="2" />
+<text  x="502.80" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::CqiListElement_s* std::__uninitialized_move_if_noexcept_a&lt;ns3::CqiListElement_s*, ns3::CqiListElement_s*, std::allocator&lt;ns3::CqiListElement_s&gt; &gt; (437,706 samples, 0.05%)</title><rect x="127.4" y="485" width="0.3" height="15.0" fill="rgb(227,104,25)" rx="2" ry="2" />
+<text  x="130.36" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt;::_Vector_impl_data::_Vector_impl_data (236,955 samples, 0.02%)</title><rect x="261.3" y="341" width="0.2" height="15.0" fill="rgb(205,0,0)" rx="2" ry="2" />
+<text  x="264.30" y="351.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;ns3::UlDciListElement_s, std::allocator&lt;ns3::UlDciListElement_s&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;ns3::UlDciListElement_s, std::allocator&lt;ns3::UlDciListElement_s&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;ns3::UlDciListElement_s, std::allocator&lt;ns3::UlDciListElement_s&gt; &gt; &gt; &gt; &gt;::find (1,009,230 samples, 0.10%)</title><rect x="240.7" y="469" width="0.9" height="15.0" fill="rgb(223,86,20)" rx="2" ry="2" />
+<text  x="243.75" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::TypeId::TypeId (242,821 samples, 0.03%)</title><rect x="431.2" y="277" width="0.2" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="434.24" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::IidManager::LookupInformation (451,443 samples, 0.05%)</title><rect x="33.9" y="389" width="0.4" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="36.94" y="399.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; (201,303 samples, 0.02%)</title><rect x="83.3" y="325" width="0.2" height="15.0" fill="rgb(213,37,9)" rx="2" ry="2" />
+<text  x="86.35" y="335.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_initialize_dispatch&lt;std::_List_const_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; (143,971 samples, 0.01%)</title><rect x="391.8" y="533" width="0.1" height="15.0" fill="rgb(215,50,12)" rx="2" ry="2" />
+<text  x="394.79" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_header::_Rb_tree_header (152,827 samples, 0.02%)</title><rect x="667.8" y="229" width="0.2" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="670.83" y="239.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned char const, ns3::LteUeMac::LcInfo&gt; &gt;::operator* (213,471 samples, 0.02%)</title><rect x="569.1" y="325" width="0.1" height="15.0" fill="rgb(242,172,41)" rx="2" ry="2" />
+<text  x="572.05" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::Object::SetTypeId (468,464 samples, 0.05%)</title><rect x="374.6" y="501" width="0.3" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="377.57" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::MultiModelSpectrumChannel::FindAndEventuallyAddTxSpectrumModel (301,073 samples, 0.03%)</title><rect x="114.4" y="485" width="0.3" height="15.0" fill="rgb(212,32,7)" rx="2" ry="2" />
+<text  x="117.42" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt; &gt; &gt;::_S_key (304,080 samples, 0.03%)</title><rect x="186.8" y="437" width="0.2" height="15.0" fill="rgb(227,104,25)" rx="2" ry="2" />
+<text  x="189.79" y="447.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt;::push_back (1,945,265 samples, 0.20%)</title><rect x="595.0" y="293" width="1.6" height="15.0" fill="rgb(207,9,2)" rx="2" ry="2" />
+<text  x="598.03" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::ByteTagList::ByteTagList (163,282 samples, 0.02%)</title><rect x="557.2" y="229" width="0.2" height="15.0" fill="rgb(220,69,16)" rx="2" ry="2" />
+<text  x="560.24" y="239.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;is_member_pointer_v&lt;void  (605,810 samples, 0.06%)</title><rect x="109.5" y="517" width="0.5" height="15.0" fill="rgb(241,170,40)" rx="2" ry="2" />
+<text  x="112.51" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::LteUeRrc::DoRecvRrcConnectionReconfiguration (156,981 samples, 0.02%)</title><rect x="701.4" y="565" width="0.1" height="15.0" fill="rgb(241,169,40)" rx="2" ry="2" />
+<text  x="704.42" y="575.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;signed char, std::allocator&lt;signed char&gt; &gt;::back (312,069 samples, 0.03%)</title><rect x="533.2" y="309" width="0.2" height="15.0" fill="rgb(206,6,1)" rx="2" ry="2" />
+<text  x="536.17" y="319.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt; &gt;::destroy&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; (274,123 samples, 0.03%)</title><rect x="378.4" y="309" width="0.2" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="381.40" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Packet&gt; ns3::Create&lt;ns3::Packet, unsigned int&amp;&gt; (2,698,693 samples, 0.28%)</title><rect x="31.2" y="421" width="2.1" height="15.0" fill="rgb(253,223,53)" rx="2" ry="2" />
+<text  x="34.17" y="431.5" ></text>
+</g>
+<g >
+<title> (237,842 samples, 0.02%)</title><rect x="741.1" y="501" width="0.1" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="744.05" y="511.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned short const, unsigned char&gt; &gt;::_M_ptr (151,024 samples, 0.02%)</title><rect x="177.0" y="389" width="0.2" height="15.0" fill="rgb(219,68,16)" rx="2" ry="2" />
+<text  x="180.04" y="399.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::~list (318,396 samples, 0.03%)</title><rect x="463.7" y="373" width="0.2" height="15.0" fill="rgb(222,80,19)" rx="2" ry="2" />
+<text  x="466.68" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::MakeEvent&lt;void  (566,805 samples, 0.06%)</title><rect x="109.5" y="501" width="0.5" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="112.54" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::MultiModelSpectrumChannel::StartTx (34,755,711 samples, 3.58%)</title><rect x="641.0" y="533" width="28.0" height="15.0" fill="rgb(227,102,24)" rx="2" ry="2" />
+<text  x="644.00" y="543.5" >n..</text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::HigherLayerSelected_s*, std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt; &gt; std::copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::HigherLayerSelected_s const*, std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;ns3::HigherLayerSelected_s*, std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt; &gt; &gt; (231,948 samples, 0.02%)</title><rect x="134.8" y="453" width="0.2" height="15.0" fill="rgb(215,48,11)" rx="2" ry="2" />
+<text  x="137.83" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::_M_range_check (157,629 samples, 0.02%)</title><rect x="594.1" y="277" width="0.2" height="15.0" fill="rgb(249,203,48)" rx="2" ry="2" />
+<text  x="597.14" y="287.5" ></text>
+</g>
+<g >
+<title>std::map&lt;int, double, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::map (2,417,353 samples, 0.25%)</title><rect x="58.6" y="517" width="1.9" height="15.0" fill="rgb(232,125,30)" rx="2" ry="2" />
+<text  x="61.58" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_Auto_node::_Auto_node&lt;std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (1,948,514 samples, 0.20%)</title><rect x="270.0" y="437" width="1.5" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="272.98" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::MemberSchedSapProvider&lt;ns3::PfFfMacScheduler&gt;::SchedDlCqiInfoReq (1,099,949 samples, 0.11%)</title><rect x="93.6" y="501" width="0.9" height="15.0" fill="rgb(224,91,21)" rx="2" ry="2" />
+<text  x="96.64" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt; ns3::Create&lt;ns3::PacketBurst&gt; (619,901 samples, 0.06%)</title><rect x="69.6" y="453" width="0.5" height="15.0" fill="rgb(225,93,22)" rx="2" ry="2" />
+<text  x="72.64" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; &gt;::_M_valptr (246,841 samples, 0.03%)</title><rect x="522.2" y="325" width="0.2" height="15.0" fill="rgb(213,39,9)" rx="2" ry="2" />
+<text  x="525.21" y="335.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;bool, std::allocator&lt;bool&gt; &gt;::_M_range_check (423,259 samples, 0.04%)</title><rect x="195.4" y="469" width="0.3" height="15.0" fill="rgb(246,188,45)" rx="2" ry="2" />
+<text  x="198.36" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::~PacketBurst (650,228 samples, 0.07%)</title><rect x="502.4" y="405" width="0.5" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="505.40" y="415.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::splice (569,667 samples, 0.06%)</title><rect x="673.2" y="485" width="0.4" height="15.0" fill="rgb(220,70,16)" rx="2" ry="2" />
+<text  x="676.17" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Identity&lt;unsigned short&gt;::operator (157,285 samples, 0.02%)</title><rect x="395.4" y="485" width="0.2" height="15.0" fill="rgb(240,163,39)" rx="2" ry="2" />
+<text  x="398.43" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Angles::Angles (2,693,187 samples, 0.28%)</title><rect x="309.7" y="485" width="2.2" height="15.0" fill="rgb(254,226,54)" rx="2" ry="2" />
+<text  x="312.69" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::UlInfoListElement_s, std::allocator&lt;ns3::UlInfoListElement_s&gt; &gt;::_Vector_base (164,622 samples, 0.02%)</title><rect x="133.7" y="485" width="0.1" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="136.71" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt; &gt;::_M_begin (168,913 samples, 0.02%)</title><rect x="565.7" y="197" width="0.1" height="15.0" fill="rgb(254,228,54)" rx="2" ry="2" />
+<text  x="568.65" y="207.5" ></text>
+</g>
+<g >
+<title>std::set&lt;unsigned short, std::less&lt;unsigned short&gt;, std::allocator&lt;unsigned short&gt; &gt;::find (313,960 samples, 0.03%)</title><rect x="194.6" y="485" width="0.3" height="15.0" fill="rgb(207,12,2)" rx="2" ry="2" />
+<text  x="197.65" y="495.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;::construct&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; (181,678 samples, 0.02%)</title><rect x="636.4" y="501" width="0.2" height="15.0" fill="rgb(224,89,21)" rx="2" ry="2" />
+<text  x="639.43" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter&gt;::Ref (125,424 samples, 0.01%)</title><rect x="516.6" y="405" width="0.1" height="15.0" fill="rgb(238,153,36)" rx="2" ry="2" />
+<text  x="519.65" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::EventImpl&gt;::operator= (648,075 samples, 0.07%)</title><rect x="727.3" y="501" width="0.5" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="730.33" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Buffer::Create (159,596 samples, 0.02%)</title><rect x="19.0" y="341" width="0.1" height="15.0" fill="rgb(242,174,41)" rx="2" ry="2" />
+<text  x="21.95" y="351.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned int, ns3::RxSpectrumModelInfo, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::RxSpectrumModelInfo&gt; &gt; &gt;::end (198,183 samples, 0.02%)</title><rect x="330.0" y="501" width="0.2" height="15.0" fill="rgb(219,64,15)" rx="2" ry="2" />
+<text  x="333.00" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_Vector_impl::_Vector_impl (259,221 samples, 0.03%)</title><rect x="592.8" y="213" width="0.2" height="15.0" fill="rgb(226,98,23)" rx="2" ry="2" />
+<text  x="595.83" y="223.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::DlInfoListElement_s&gt; (1,227,211 samples, 0.13%)</title><rect x="256.0" y="437" width="0.9" height="15.0" fill="rgb(237,147,35)" rx="2" ry="2" />
+<text  x="258.95" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::MakeEvent&lt;void  (405,218 samples, 0.04%)</title><rect x="64.6" y="453" width="0.3" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="67.60" y="463.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::_List_impl::_List_impl (197,757 samples, 0.02%)</title><rect x="162.1" y="389" width="0.1" height="15.0" fill="rgb(210,24,5)" rx="2" ry="2" />
+<text  x="165.08" y="399.5" ></text>
+</g>
+<g >
+<title>std::tuple_element&lt;1ul, std::pair&lt;unsigned int const&amp;, ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp;&gt; &gt;::type&amp;&amp; std::get&lt;1ul, unsigned int const&amp;, ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp;&gt; (152,590 samples, 0.02%)</title><rect x="660.1" y="501" width="0.1" height="15.0" fill="rgb(219,65,15)" rx="2" ry="2" />
+<text  x="663.11" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::~SpectrumValue (189,290 samples, 0.02%)</title><rect x="112.2" y="437" width="0.2" height="15.0" fill="rgb(247,193,46)" rx="2" ry="2" />
+<text  x="115.24" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteControlMessage&gt;&amp; std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::emplace_back&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; const&amp;&gt; (225,934 samples, 0.02%)</title><rect x="648.8" y="389" width="0.2" height="15.0" fill="rgb(224,89,21)" rx="2" ry="2" />
+<text  x="651.85" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_M_lower_bound (639,648 samples, 0.07%)</title><rect x="57.8" y="469" width="0.5" height="15.0" fill="rgb(239,159,38)" rx="2" ry="2" />
+<text  x="60.83" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::PhichListElement_s* std::__uninitialized_copy&lt;false&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::PhichListElement_s const*, std::vector&lt;ns3::PhichListElement_s, std::allocator&lt;ns3::PhichListElement_s&gt; &gt; &gt;, ns3::PhichListElement_s*&gt; (202,017 samples, 0.02%)</title><rect x="227.5" y="405" width="0.2" height="15.0" fill="rgb(209,19,4)" rx="2" ry="2" />
+<text  x="230.50" y="415.5" ></text>
+</g>
+<g >
+<title>unsigned short* std::__relocate_a&lt;unsigned short*, unsigned short*, std::allocator&lt;unsigned short&gt; &gt; (305,556 samples, 0.03%)</title><rect x="481.1" y="245" width="0.3" height="15.0" fill="rgb(210,27,6)" rx="2" ry="2" />
+<text  x="484.12" y="255.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt;::_Vector_base (159,454 samples, 0.02%)</title><rect x="24.6" y="309" width="0.2" height="15.0" fill="rgb(216,55,13)" rx="2" ry="2" />
+<text  x="27.63" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::Packet::Packet (409,200 samples, 0.04%)</title><rect x="118.0" y="485" width="0.4" height="15.0" fill="rgb(230,115,27)" rx="2" ry="2" />
+<text  x="121.05" y="495.5" ></text>
+</g>
+<g >
+<title>std::function&lt;void  (16,491,026 samples, 1.70%)</title><rect x="470.5" y="405" width="13.3" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="473.52" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_M_create_storage (747,048 samples, 0.08%)</title><rect x="654.9" y="453" width="0.6" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="657.92" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::vector (745,343 samples, 0.08%)</title><rect x="606.5" y="485" width="0.6" height="15.0" fill="rgb(239,156,37)" rx="2" ry="2" />
+<text  x="609.49" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Object::Object (146,079 samples, 0.02%)</title><rect x="96.7" y="405" width="0.2" height="15.0" fill="rgb(242,174,41)" rx="2" ry="2" />
+<text  x="99.74" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::EventId ns3::Simulator::Schedule&lt;void  (3,817,837 samples, 0.39%)</title><rect x="304.9" y="517" width="3.0" height="15.0" fill="rgb(253,224,53)" rx="2" ry="2" />
+<text  x="307.85" y="527.5" ></text>
+</g>
+<g >
+<title>std::_List_node&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt;* std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::_M_create_node&lt;ns3::Ptr&lt;ns3::Packet&gt; const&amp;&gt; (1,799,993 samples, 0.19%)</title><rect x="362.5" y="469" width="1.5" height="15.0" fill="rgb(211,30,7)" rx="2" ry="2" />
+<text  x="365.52" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::~_Vector_base (162,616 samples, 0.02%)</title><rect x="457.7" y="213" width="0.2" height="15.0" fill="rgb(241,168,40)" rx="2" ry="2" />
+<text  x="460.72" y="223.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;* std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_clone_node&lt;false, std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_Alloc_node&gt; (578,209 samples, 0.06%)</title><rect x="341.9" y="405" width="0.4" height="15.0" fill="rgb(205,4,0)" rx="2" ry="2" />
+<text  x="344.85" y="415.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;short, std::allocator&lt;short&gt; &gt;::operator[] (262,863 samples, 0.03%)</title><rect x="681.9" y="517" width="0.2" height="15.0" fill="rgb(217,58,13)" rx="2" ry="2" />
+<text  x="684.86" y="527.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::~vector (426,273 samples, 0.04%)</title><rect x="700.6" y="549" width="0.3" height="15.0" fill="rgb(252,219,52)" rx="2" ry="2" />
+<text  x="703.60" y="559.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;__gnu_cxx::__normal_iterator&lt;ns3::DlInfoListElement_s*, std::vector&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt; &gt; &gt; (300,135 samples, 0.03%)</title><rect x="207.5" y="453" width="0.3" height="15.0" fill="rgb(252,217,51)" rx="2" ry="2" />
+<text  x="210.54" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Simulator::ScheduleWithContext (5,518,602 samples, 0.57%)</title><rect x="82.8" y="501" width="4.4" height="15.0" fill="rgb(230,116,27)" rx="2" ry="2" />
+<text  x="85.79" y="511.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;is_member_pointer_v&lt;void  (2,862,534 samples, 0.30%)</title><rect x="666.0" y="501" width="2.3" height="15.0" fill="rgb(241,170,40)" rx="2" ry="2" />
+<text  x="669.02" y="511.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::BuildBroadcastListElement_s, std::allocator&lt;ns3::BuildBroadcastListElement_s&gt; &gt;::vector (318,568 samples, 0.03%)</title><rect x="173.9" y="469" width="0.3" height="15.0" fill="rgb(237,151,36)" rx="2" ry="2" />
+<text  x="176.91" y="479.5" ></text>
+</g>
+<g >
+<title>operator new (275,672 samples, 0.03%)</title><rect x="284.5" y="517" width="0.3" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="287.54" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::HarqStatus_e const* std::__niter_base&lt;ns3::DlInfoListElement_s::HarqStatus_e const*, std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt; &gt; (201,685 samples, 0.02%)</title><rect x="444.2" y="229" width="0.1" height="15.0" fill="rgb(205,1,0)" rx="2" ry="2" />
+<text  x="447.18" y="239.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::_M_emplace_hint_unique&lt;std::piecewise_construct_t const&amp;, std::tuple&lt;unsigned short const&amp;&gt;, std::tuple&lt;&gt; &gt; (2,400,209 samples, 0.25%)</title><rect x="190.7" y="469" width="1.9" height="15.0" fill="rgb(213,37,8)" rx="2" ry="2" />
+<text  x="193.70" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue&gt;::operator= (266,358 samples, 0.03%)</title><rect x="112.2" y="485" width="0.2" height="15.0" fill="rgb(220,71,17)" rx="2" ry="2" />
+<text  x="115.18" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;4ul, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::_M_head (235,982 samples, 0.02%)</title><rect x="757.2" y="565" width="0.2" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="760.21" y="575.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt;::size (236,264 samples, 0.02%)</title><rect x="261.7" y="373" width="0.2" height="15.0" fill="rgb(205,2,0)" rx="2" ry="2" />
+<text  x="264.74" y="383.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; const*, std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt; &gt;, std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;*&gt; (338,383 samples, 0.03%)</title><rect x="204.9" y="373" width="0.2" height="15.0" fill="rgb(234,135,32)" rx="2" ry="2" />
+<text  x="207.86" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::LteHelper::InstallSingleUeDevice (533,991 samples, 0.06%)</title><rect x="36.1" y="757" width="0.5" height="15.0" fill="rgb(248,201,48)" rx="2" ry="2" />
+<text  x="39.12" y="767.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;int, std::allocator&lt;int&gt; &gt;::_Vector_base (1,201,262 samples, 0.12%)</title><rect x="699.3" y="533" width="1.0" height="15.0" fill="rgb(215,47,11)" rx="2" ry="2" />
+<text  x="702.30" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue&gt;::operator= (508,044 samples, 0.05%)</title><rect x="716.6" y="485" width="0.4" height="15.0" fill="rgb(220,71,17)" rx="2" ry="2" />
+<text  x="719.58" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteInterference&gt;::operator (201,121 samples, 0.02%)</title><rect x="492.3" y="549" width="0.2" height="15.0" fill="rgb(234,134,32)" rx="2" ry="2" />
+<text  x="495.30" y="559.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; (1,070,364 samples, 0.11%)</title><rect x="647.2" y="389" width="0.9" height="15.0" fill="rgb(212,35,8)" rx="2" ry="2" />
+<text  x="650.25" y="399.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;unsigned char&gt;::deallocate (197,176 samples, 0.02%)</title><rect x="693.2" y="405" width="0.2" height="15.0" fill="rgb(209,19,4)" rx="2" ry="2" />
+<text  x="696.23" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;&amp;&amp; std::forward&lt;std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt; (194,342 samples, 0.02%)</title><rect x="275.8" y="469" width="0.2" height="15.0" fill="rgb(243,174,41)" rx="2" ry="2" />
+<text  x="278.84" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Tag::Tag (159,113 samples, 0.02%)</title><rect x="155.3" y="373" width="0.1" height="15.0" fill="rgb(212,35,8)" rx="2" ry="2" />
+<text  x="158.25" y="383.5" ></text>
+</g>
+<g >
+<title>void std::_Function_base::_Base_manager&lt;std::_Bind&lt;void  (945,769 samples, 0.10%)</title><rect x="283.7" y="469" width="0.8" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="286.74" y="479.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;::pair&lt;ns3::TbId_t, ns3::tbInfo_t&gt; (979,889 samples, 0.10%)</title><rect x="526.8" y="213" width="0.8" height="15.0" fill="rgb(223,87,20)" rx="2" ry="2" />
+<text  x="529.82" y="223.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::allocate (366,512 samples, 0.04%)</title><rect x="563.9" y="85" width="0.3" height="15.0" fill="rgb(215,48,11)" rx="2" ry="2" />
+<text  x="566.90" y="95.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::vector (546,034 samples, 0.06%)</title><rect x="147.4" y="437" width="0.4" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="150.41" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteInterference&gt;::operator (124,598 samples, 0.01%)</title><rect x="608.6" y="549" width="0.1" height="15.0" fill="rgb(234,134,32)" rx="2" ry="2" />
+<text  x="611.56" y="559.5" ></text>
+</g>
+<g >
+<title>ns3::EnbMacMemberFfMacSchedSapUser::SchedDlConfigInd (2,983,151 samples, 0.31%)</title><rect x="17.2" y="501" width="2.4" height="15.0" fill="rgb(241,166,39)" rx="2" ry="2" />
+<text  x="20.17" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_Rb_tree (160,265 samples, 0.02%)</title><rect x="668.1" y="469" width="0.2" height="15.0" fill="rgb(252,219,52)" rx="2" ry="2" />
+<text  x="671.13" y="479.5" ></text>
+</g>
+<g >
+<title>unsigned short* std::copy&lt;__gnu_cxx::__normal_iterator&lt;unsigned short const*, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, unsigned short*&gt; (545,960 samples, 0.06%)</title><rect x="217.5" y="405" width="0.4" height="15.0" fill="rgb(226,96,23)" rx="2" ry="2" />
+<text  x="220.47" y="415.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::~vector (195,505 samples, 0.02%)</title><rect x="409.4" y="517" width="0.1" height="15.0" fill="rgb(225,92,22)" rx="2" ry="2" />
+<text  x="412.36" y="527.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt;, std::allocator&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt;::_M_ptr (160,795 samples, 0.02%)</title><rect x="184.2" y="453" width="0.1" height="15.0" fill="rgb(252,218,52)" rx="2" ry="2" />
+<text  x="187.16" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumModel const&gt;::Ptr (152,357 samples, 0.02%)</title><rect x="327.7" y="485" width="0.1" height="15.0" fill="rgb(232,125,30)" rx="2" ry="2" />
+<text  x="330.65" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Function_base::_Base_manager&lt;std::_Bind&lt;void  (169,831 samples, 0.02%)</title><rect x="64.8" y="373" width="0.1" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="67.79" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Bind&lt;void  (522,269 samples, 0.05%)</title><rect x="307.5" y="421" width="0.4" height="15.0" fill="rgb(253,221,52)" rx="2" ry="2" />
+<text  x="310.50" y="431.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;::~pair (514,929 samples, 0.05%)</title><rect x="233.2" y="341" width="0.4" height="15.0" fill="rgb(226,100,24)" rx="2" ry="2" />
+<text  x="236.21" y="351.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::_M_clear (1,296,666 samples, 0.13%)</title><rect x="652.6" y="341" width="1.1" height="15.0" fill="rgb(217,56,13)" rx="2" ry="2" />
+<text  x="655.64" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::HigherLayerSelected_s* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::HigherLayerSelected_s const*, std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt; &gt;, ns3::HigherLayerSelected_s*&gt; (213,295 samples, 0.02%)</title><rect x="583.7" y="229" width="0.2" height="15.0" fill="rgb(230,118,28)" rx="2" ry="2" />
+<text  x="586.69" y="239.5" ></text>
+</g>
+<g >
+<title>ns3::LteRlcSm::DoNotifyTxOpportunity (6,454,365 samples, 0.67%)</title><rect x="151.2" y="405" width="5.2" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="154.19" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::Copy (4,171,628 samples, 0.43%)</title><rect x="315.1" y="437" width="3.3" height="15.0" fill="rgb(241,167,40)" rx="2" ry="2" />
+<text  x="318.07" y="447.5" ></text>
+</g>
+<g >
+<title>void std::__invoke_impl&lt;void, void  (22,443,594 samples, 2.31%)</title><rect x="17.2" y="613" width="18.0" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="20.17" y="623.5" ></text>
+</g>
+<g >
+<title>std::function&lt;void  (411,411 samples, 0.04%)</title><rect x="87.6" y="469" width="0.4" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="90.62" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; &gt;::_M_valptr (433,714 samples, 0.04%)</title><rect x="465.7" y="469" width="0.4" height="15.0" fill="rgb(213,39,9)" rx="2" ry="2" />
+<text  x="468.74" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::HarqProcessInfoElement_t* std::__copy_move_a1&lt;false, ns3::HarqProcessInfoElement_t const*, ns3::HarqProcessInfoElement_t*&gt; (363,923 samples, 0.04%)</title><rect x="353.4" y="389" width="0.3" height="15.0" fill="rgb(229,112,26)" rx="2" ry="2" />
+<text  x="356.45" y="399.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::vector (234,034 samples, 0.02%)</title><rect x="474.0" y="213" width="0.2" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="476.98" y="223.5" ></text>
+</g>
+<g >
+<title>ns3::MakeEvent&lt;void  (746,893 samples, 0.08%)</title><rect x="640.3" y="469" width="0.6" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="643.34" y="479.5" ></text>
+</g>
+<g >
+<title>double* std::__fill_n_a&lt;double*, unsigned long, double&gt; (387,157 samples, 0.04%)</title><rect x="403.7" y="389" width="0.4" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="406.74" y="399.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned short const, unsigned char&gt; &gt;::_M_ptr (152,886 samples, 0.02%)</title><rect x="136.2" y="405" width="0.1" height="15.0" fill="rgb(219,68,16)" rx="2" ry="2" />
+<text  x="139.22" y="415.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, ns3::LteEnbComponentCarrierManager::UeInfo, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt; &gt; &gt;::key_comp (161,213 samples, 0.02%)</title><rect x="157.3" y="405" width="0.1" height="15.0" fill="rgb(211,31,7)" rx="2" ry="2" />
+<text  x="160.31" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue&gt; ns3::Create&lt;ns3::SpectrumValue, ns3::Ptr&lt;ns3::SpectrumModel const&gt; const&amp;&gt; (1,570,376 samples, 0.16%)</title><rect x="729.1" y="485" width="1.2" height="15.0" fill="rgb(246,189,45)" rx="2" ry="2" />
+<text  x="732.08" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt;::size (333,221 samples, 0.03%)</title><rect x="420.5" y="341" width="0.2" height="15.0" fill="rgb(212,35,8)" rx="2" ry="2" />
+<text  x="423.46" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleUeCcmMacSapProvider::TransmitPdu (7,708,007 samples, 0.79%)</title><rect x="560.6" y="261" width="6.2" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="563.62" y="271.5" ></text>
+</g>
+<g >
+<title>int* std::__copy_move_a2&lt;false, int const*, int*&gt; (197,211 samples, 0.02%)</title><rect x="399.2" y="437" width="0.2" height="15.0" fill="rgb(224,87,20)" rx="2" ry="2" />
+<text  x="402.21" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;ns3::DlDciListElement_s, std::allocator&lt;ns3::DlDciListElement_s&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;ns3::DlDciListElement_s, std::allocator&lt;ns3::DlDciListElement_s&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;ns3::DlDciListElement_s, std::allocator&lt;ns3::DlDciListElement_s&gt; &gt; &gt; &gt; &gt;::_M_lower_bound (576,429 samples, 0.06%)</title><rect x="187.3" y="453" width="0.4" height="15.0" fill="rgb(253,222,53)" rx="2" ry="2" />
+<text  x="190.29" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::LteMiErrorModel::GetTbDecodificationStats (2,544,923 samples, 0.26%)</title><rect x="587.5" y="277" width="2.0" height="15.0" fill="rgb(209,19,4)" rx="2" ry="2" />
+<text  x="590.50" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::EventImpl, ns3::Empty, ns3::DefaultDeleter&lt;ns3::EventImpl&gt; &gt;::Ref (587,755 samples, 0.06%)</title><rect x="768.9" y="693" width="0.4" height="15.0" fill="rgb(249,202,48)" rx="2" ry="2" />
+<text  x="771.85" y="703.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;int const, double&gt; &gt;* std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_M_copy&lt;false, std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_Alloc_node&gt; (167,564 samples, 0.02%)</title><rect x="60.2" y="389" width="0.2" height="15.0" fill="rgb(224,87,21)" rx="2" ry="2" />
+<text  x="63.25" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::operator- (4,813,626 samples, 0.50%)</title><rect x="410.0" y="533" width="3.9" height="15.0" fill="rgb(231,122,29)" rx="2" ry="2" />
+<text  x="413.04" y="543.5" ></text>
+</g>
+<g >
+<title>std::_List_const_iterator&lt;ns3::UlDciLteControlMessage&gt;::operator* (302,866 samples, 0.03%)</title><rect x="288.5" y="501" width="0.3" height="15.0" fill="rgb(230,117,28)" rx="2" ry="2" />
+<text  x="291.52" y="511.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;::destroy&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; (359,626 samples, 0.04%)</title><rect x="382.0" y="501" width="0.3" height="15.0" fill="rgb(222,78,18)" rx="2" ry="2" />
+<text  x="385.02" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::TypeId::TypeId (279,495 samples, 0.03%)</title><rect x="629.2" y="469" width="0.2" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="632.22" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue&gt;::operator= (483,084 samples, 0.05%)</title><rect x="728.2" y="485" width="0.4" height="15.0" fill="rgb(220,71,17)" rx="2" ry="2" />
+<text  x="731.17" y="495.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;::operator++ (206,864 samples, 0.02%)</title><rect x="477.4" y="309" width="0.2" height="15.0" fill="rgb(214,45,10)" rx="2" ry="2" />
+<text  x="480.40" y="319.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;* std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_M_copy&lt;false, std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_Alloc_node&gt; (4,497,480 samples, 0.46%)</title><rect x="236.8" y="437" width="3.6" height="15.0" fill="rgb(236,146,34)" rx="2" ry="2" />
+<text  x="239.79" y="447.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::MacCeListElement_s, std::allocator&lt;ns3::MacCeListElement_s&gt; &gt;::_M_range_check (199,808 samples, 0.02%)</title><rect x="225.8" y="469" width="0.2" height="15.0" fill="rgb(252,219,52)" rx="2" ry="2" />
+<text  x="228.83" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::int64x64_t::Mul (321,020 samples, 0.03%)</title><rect x="389.7" y="485" width="0.2" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="392.66" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::at (161,842 samples, 0.02%)</title><rect x="226.1" y="485" width="0.1" height="15.0" fill="rgb(238,152,36)" rx="2" ry="2" />
+<text  x="229.05" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::LteFlowId_t, std::pair&lt;ns3::LteFlowId_t const, ns3::FfMacSchedSapProvider::SchedDlRlcBufferReqParameters&gt;, std::_Select1st&lt;std::pair&lt;ns3::LteFlowId_t const, ns3::FfMacSchedSapProvider::SchedDlRlcBufferReqParameters&gt; &gt;, std::less&lt;ns3::LteFlowId_t&gt;, std::allocator&lt;std::pair&lt;ns3::LteFlowId_t const, ns3::FfMacSchedSapProvider::SchedDlRlcBufferReqParameters&gt; &gt; &gt;::_M_begin (226,804 samples, 0.02%)</title><rect x="181.5" y="437" width="0.2" height="15.0" fill="rgb(251,216,51)" rx="2" ry="2" />
+<text  x="184.54" y="447.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::BuildDataListElement_s, std::allocator&lt;ns3::BuildDataListElement_s&gt; &gt;::~vector (1,027,011 samples, 0.11%)</title><rect x="145.4" y="453" width="0.9" height="15.0" fill="rgb(211,31,7)" rx="2" ry="2" />
+<text  x="148.45" y="463.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;*, std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; std::__copy_move_a&lt;true, __gnu_cxx::__normal_iterator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;*, std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;*, std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; (6,281,286 samples, 0.65%)</title><rect x="376.7" y="485" width="5.0" height="15.0" fill="rgb(233,131,31)" rx="2" ry="2" />
+<text  x="379.66" y="495.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;*, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; std::__copy_move_a&lt;true, __gnu_cxx::__normal_iterator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;*, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;*, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; &gt; (2,950,423 samples, 0.30%)</title><rect x="349.6" y="485" width="2.4" height="15.0" fill="rgb(240,164,39)" rx="2" ry="2" />
+<text  x="352.62" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::reserve (275,928 samples, 0.03%)</title><rect x="347.3" y="533" width="0.2" height="15.0" fill="rgb(238,153,36)" rx="2" ry="2" />
+<text  x="350.31" y="543.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::BuildRarListElement_s, std::allocator&lt;ns3::BuildRarListElement_s&gt; &gt;::~vector (359,781 samples, 0.04%)</title><rect x="146.3" y="453" width="0.3" height="15.0" fill="rgb(210,23,5)" rx="2" ry="2" />
+<text  x="149.27" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteUePhy&gt;::Ptr (241,564 samples, 0.02%)</title><rect x="470.2" y="405" width="0.2" height="15.0" fill="rgb(241,169,40)" rx="2" ry="2" />
+<text  x="473.19" y="415.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::list (143,971 samples, 0.01%)</title><rect x="391.8" y="549" width="0.1" height="15.0" fill="rgb(236,145,34)" rx="2" ry="2" />
+<text  x="394.79" y="559.5" ></text>
+</g>
+<g >
+<title>ns3::MultiModelSpectrumChannel::StartTx (41,833,100 samples, 4.31%)</title><rect x="308.8" y="517" width="33.6" height="15.0" fill="rgb(227,102,24)" rx="2" ry="2" />
+<text  x="311.76" y="527.5" >ns..</text>
+</g>
+<g >
+<title>ns3::SpectrumValue::GetSpectrumModelUid (187,543 samples, 0.02%)</title><rect x="656.4" y="517" width="0.1" height="15.0" fill="rgb(254,228,54)" rx="2" ry="2" />
+<text  x="659.37" y="527.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::push_back (2,043,826 samples, 0.21%)</title><rect x="562.9" y="181" width="1.6" height="15.0" fill="rgb(222,79,18)" rx="2" ry="2" />
+<text  x="565.86" y="191.5" ></text>
+</g>
+<g >
+<title>std::operator== (317,205 samples, 0.03%)</title><rect x="275.5" y="469" width="0.2" height="15.0" fill="rgb(229,110,26)" rx="2" ry="2" />
+<text  x="278.45" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbMac::DoReceivePhyPdu (13,857,739 samples, 1.43%)</title><rect x="423.7" y="341" width="11.1" height="15.0" fill="rgb(223,87,20)" rx="2" ry="2" />
+<text  x="426.67" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbMac::DoReportBufferStatus (3,928,142 samples, 0.41%)</title><rect x="24.3" y="357" width="3.1" height="15.0" fill="rgb(222,80,19)" rx="2" ry="2" />
+<text  x="27.28" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::UeManager::GetComponentCarrierId (352,536 samples, 0.04%)</title><rect x="12.8" y="357" width="0.3" height="15.0" fill="rgb(219,68,16)" rx="2" ry="2" />
+<text  x="15.81" y="367.5" ></text>
+</g>
+<g >
+<title>bool __gnu_cxx::operator==&lt;ns3::DlInfoListElement_s const*, std::vector&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt; &gt; (279,570 samples, 0.03%)</title><rect x="257.1" y="501" width="0.2" height="15.0" fill="rgb(222,80,19)" rx="2" ry="2" />
+<text  x="260.10" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Scheduler::EventKey const&amp; std::forward&lt;ns3::Scheduler::EventKey const&amp;&gt; (206,377 samples, 0.02%)</title><rect x="277.1" y="469" width="0.2" height="15.0" fill="rgb(250,207,49)" rx="2" ry="2" />
+<text  x="280.13" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::LogComponent::IsEnabled (129,958 samples, 0.01%)</title><rect x="536.2" y="325" width="0.1" height="15.0" fill="rgb(214,43,10)" rx="2" ry="2" />
+<text  x="539.22" y="335.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;* std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_Alloc_node::operator (500,996 samples, 0.05%)</title><rect x="341.9" y="389" width="0.4" height="15.0" fill="rgb(217,55,13)" rx="2" ry="2" />
+<text  x="344.88" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Head_base&lt;5ul, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;, false&gt;::_M_head (220,389 samples, 0.02%)</title><rect x="757.8" y="549" width="0.2" height="15.0" fill="rgb(220,70,16)" rx="2" ry="2" />
+<text  x="760.82" y="559.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteSpectrumSignalParametersDlCtrlFrame&gt;::~Ptr (273,890 samples, 0.03%)</title><rect x="344.2" y="517" width="0.2" height="15.0" fill="rgb(218,62,14)" rx="2" ry="2" />
+<text  x="347.20" y="527.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::CqiListElement_s, std::allocator&lt;ns3::CqiListElement_s&gt; &gt;::empty (335,401 samples, 0.03%)</title><rect x="106.4" y="501" width="0.3" height="15.0" fill="rgb(231,122,29)" rx="2" ry="2" />
+<text  x="109.44" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_Auto_node::_M_insert (362,836 samples, 0.04%)</title><rect x="83.5" y="405" width="0.3" height="15.0" fill="rgb(213,38,9)" rx="2" ry="2" />
+<text  x="86.54" y="415.5" ></text>
+</g>
+<g >
+<title>double std::reduce&lt;__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, double&gt; (335,268 samples, 0.03%)</title><rect x="582.4" y="309" width="0.2" height="15.0" fill="rgb(218,62,15)" rx="2" ry="2" />
+<text  x="585.38" y="319.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt;::~vector (126,894 samples, 0.01%)</title><rect x="585.2" y="261" width="0.1" height="15.0" fill="rgb(234,134,32)" rx="2" ry="2" />
+<text  x="588.18" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::LteControlMessage, ns3::Empty, ns3::DefaultDeleter&lt;ns3::LteControlMessage&gt; &gt;::Unref (269,841 samples, 0.03%)</title><rect x="497.4" y="469" width="0.2" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="500.37" y="479.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, unsigned char*&gt; (407,753 samples, 0.04%)</title><rect x="584.8" y="245" width="0.3" height="15.0" fill="rgb(227,104,25)" rx="2" ry="2" />
+<text  x="587.79" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::HarqStatus_e* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::DlInfoListElement_s::HarqStatus_e const*, std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt; &gt;, ns3::DlInfoListElement_s::HarqStatus_e*&gt; (2,097,386 samples, 0.22%)</title><rect x="258.9" y="357" width="1.7" height="15.0" fill="rgb(235,140,33)" rx="2" ry="2" />
+<text  x="261.92" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::EnbMacMemberLteMacSapProvider&lt;ns3::NoOpComponentCarrierManager&gt;::TransmitPdu (5,821,892 samples, 0.60%)</title><rect x="19.6" y="421" width="4.7" height="15.0" fill="rgb(247,196,47)" rx="2" ry="2" />
+<text  x="22.60" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::Add (355,914 samples, 0.04%)</title><rect x="409.6" y="517" width="0.2" height="15.0" fill="rgb(234,136,32)" rx="2" ry="2" />
+<text  x="412.56" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::MakeEvent&lt;void  (2,295,946 samples, 0.24%)</title><rect x="638.2" y="501" width="1.8" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="641.15" y="511.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::BandInfo, std::allocator&lt;ns3::BandInfo&gt; &gt;::size (125,001 samples, 0.01%)</title><rect x="403.0" y="469" width="0.1" height="15.0" fill="rgb(238,154,36)" rx="2" ry="2" />
+<text  x="406.01" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::LteSpectrumModelId, std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt;, std::_Select1st&lt;std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt; &gt;, std::less&lt;ns3::LteSpectrumModelId&gt;, std::allocator&lt;std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt; &gt; &gt;::_M_lower_bound (860,518 samples, 0.09%)</title><rect x="55.3" y="453" width="0.6" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="58.26" y="463.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;* std::__copy_move_a2&lt;true, std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;*, std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;*&gt; (802,162 samples, 0.08%)</title><rect x="357.1" y="453" width="0.7" height="15.0" fill="rgb(210,26,6)" rx="2" ry="2" />
+<text  x="360.13" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::LteRadioBearerTag::GetInstanceTypeId (294,229 samples, 0.03%)</title><rect x="561.8" y="165" width="0.3" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="564.82" y="175.5" ></text>
+</g>
+<g >
+<title>ns3::tbInfo_t::tbInfo_t (180,616 samples, 0.02%)</title><rect x="387.3" y="517" width="0.1" height="15.0" fill="rgb(224,91,21)" rx="2" ry="2" />
+<text  x="390.27" y="527.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; const*, std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt; &gt;, std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;*, std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; (379,647 samples, 0.04%)</title><rect x="204.8" y="389" width="0.3" height="15.0" fill="rgb(208,17,4)" rx="2" ry="2" />
+<text  x="207.83" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt;::lower_bound (305,767 samples, 0.03%)</title><rect x="156.5" y="389" width="0.3" height="15.0" fill="rgb(215,46,11)" rx="2" ry="2" />
+<text  x="159.53" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::Buffer::~Buffer (935,423 samples, 0.10%)</title><rect x="451.8" y="101" width="0.7" height="15.0" fill="rgb(240,162,38)" rx="2" ry="2" />
+<text  x="454.80" y="111.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::TbId_t, std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::_Select1st&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::_M_begin (195,833 samples, 0.02%)</title><rect x="386.6" y="501" width="0.2" height="15.0" fill="rgb(245,184,44)" rx="2" ry="2" />
+<text  x="389.65" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_Vector_base (158,373 samples, 0.02%)</title><rect x="203.4" y="373" width="0.1" height="15.0" fill="rgb(205,2,0)" rx="2" ry="2" />
+<text  x="206.35" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumPhy::GetMobility (675,169 samples, 0.07%)</title><rect x="704.3" y="549" width="0.5" height="15.0" fill="rgb(228,107,25)" rx="2" ry="2" />
+<text  x="707.27" y="559.5" ></text>
+</g>
+<g >
+<title>double* std::__copy_move_a1&lt;false, double const*, double*&gt; (148,743 samples, 0.02%)</title><rect x="317.4" y="357" width="0.1" height="15.0" fill="rgb(239,156,37)" rx="2" ry="2" />
+<text  x="320.42" y="367.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;::_M_valptr (272,221 samples, 0.03%)</title><rect x="274.3" y="405" width="0.2" height="15.0" fill="rgb(213,38,9)" rx="2" ry="2" />
+<text  x="277.28" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::MobilityModel const&gt;::Ptr&lt;ns3::MobilityModel&gt; (371,286 samples, 0.04%)</title><rect x="740.7" y="517" width="0.3" height="15.0" fill="rgb(233,130,31)" rx="2" ry="2" />
+<text  x="743.66" y="527.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;::size (156,363 samples, 0.02%)</title><rect x="514.8" y="533" width="0.1" height="15.0" fill="rgb(244,182,43)" rx="2" ry="2" />
+<text  x="517.78" y="543.5" ></text>
+</g>
+<g >
+<title>std::function&lt;void  (358,805 samples, 0.04%)</title><rect x="727.0" y="469" width="0.3" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="729.97" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_Auto_node::_Auto_node&lt;std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (1,386,008 samples, 0.14%)</title><rect x="334.2" y="389" width="1.1" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="337.18" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt; ns3::CompleteConstruct&lt;ns3::PacketBurst&gt; (267,173 samples, 0.03%)</title><rect x="19.4" y="453" width="0.2" height="15.0" fill="rgb(212,33,7)" rx="2" ry="2" />
+<text  x="22.36" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Ptr&lt;ns3::Object&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Object&gt; &gt; &gt;::~vector (272,555 samples, 0.03%)</title><rect x="454.4" y="197" width="0.2" height="15.0" fill="rgb(223,83,19)" rx="2" ry="2" />
+<text  x="457.39" y="207.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt;::allocate (160,414 samples, 0.02%)</title><rect x="445.0" y="229" width="0.1" height="15.0" fill="rgb(209,19,4)" rx="2" ry="2" />
+<text  x="447.98" y="239.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbMac::DoUlCqiReport (763,690 samples, 0.08%)</title><rect x="473.6" y="309" width="0.6" height="15.0" fill="rgb(233,131,31)" rx="2" ry="2" />
+<text  x="476.61" y="319.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::erase[abi:cxx11] (940,554 samples, 0.10%)</title><rect x="222.3" y="469" width="0.8" height="15.0" fill="rgb(214,43,10)" rx="2" ry="2" />
+<text  x="225.32" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::EnbMacMemberLteMacSapProvider&lt;ns3::NoOpComponentCarrierManager&gt;::ReportBufferStatus (6,485,597 samples, 0.67%)</title><rect x="24.3" y="405" width="5.2" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="27.28" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt;::~_Vector_base (496,198 samples, 0.05%)</title><rect x="256.3" y="373" width="0.4" height="15.0" fill="rgb(244,183,43)" rx="2" ry="2" />
+<text  x="259.29" y="383.5" ></text>
+</g>
+<g >
+<title>unsigned char&amp; std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::emplace_back&lt;unsigned char&gt; (1,247,040 samples, 0.13%)</title><rect x="214.7" y="469" width="1.0" height="15.0" fill="rgb(237,147,35)" rx="2" ry="2" />
+<text  x="217.73" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::FfMacSchedSapProvider::SchedDlCqiInfoReqParameters::~SchedDlCqiInfoReqParameters (153,009 samples, 0.02%)</title><rect x="93.4" y="501" width="0.1" height="15.0" fill="rgb(239,158,37)" rx="2" ry="2" />
+<text  x="96.42" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;::_M_valptr (512,316 samples, 0.05%)</title><rect x="85.2" y="373" width="0.4" height="15.0" fill="rgb(213,38,9)" rx="2" ry="2" />
+<text  x="88.17" y="383.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_S_relocate (191,891 samples, 0.02%)</title><rect x="459.9" y="245" width="0.1" height="15.0" fill="rgb(228,110,26)" rx="2" ry="2" />
+<text  x="462.88" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::HarqProcessInfoElement_t* std::copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::HarqProcessInfoElement_t const*, std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt;, ns3::HarqProcessInfoElement_t*&gt; (1,453,727 samples, 0.15%)</title><rect x="352.8" y="421" width="1.2" height="15.0" fill="rgb(247,195,46)" rx="2" ry="2" />
+<text  x="355.82" y="431.5" ></text>
+</g>
+<g >
+<title>std::_List_iterator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt;::_List_iterator (173,879 samples, 0.02%)</title><rect x="563.0" y="149" width="0.1" height="15.0" fill="rgb(231,119,28)" rx="2" ry="2" />
+<text  x="566.00" y="159.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;bool, std::allocator&lt;bool&gt; &gt;::end (277,788 samples, 0.03%)</title><rect x="198.9" y="405" width="0.2" height="15.0" fill="rgb(211,29,7)" rx="2" ry="2" />
+<text  x="201.86" y="415.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__enable_if&lt;std::__is_scalar&lt;unsigned short&gt;::__value, void&gt;::__type std::__fill_a1&lt;unsigned short*, unsigned short&gt; (151,573 samples, 0.02%)</title><rect x="252.6" y="357" width="0.1" height="15.0" fill="rgb(234,137,32)" rx="2" ry="2" />
+<text  x="255.62" y="367.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned int const, ns3::RxSpectrumModelInfo&gt; &gt;::operator (451,603 samples, 0.05%)</title><rect x="328.8" y="501" width="0.3" height="15.0" fill="rgb(224,91,21)" rx="2" ry="2" />
+<text  x="331.75" y="511.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt;::find (1,845,503 samples, 0.19%)</title><rect x="168.0" y="453" width="1.5" height="15.0" fill="rgb(228,106,25)" rx="2" ry="2" />
+<text  x="170.97" y="463.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::list&lt;std::_List_const_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;, void&gt; (724,578 samples, 0.07%)</title><rect x="318.8" y="405" width="0.5" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="321.75" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::FfMacSchedSapUser::SchedDlConfigIndParameters::SchedDlConfigIndParameters (703,718 samples, 0.07%)</title><rect x="94.9" y="453" width="0.5" height="15.0" fill="rgb(208,15,3)" rx="2" ry="2" />
+<text  x="97.86" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::TbId_t, std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::_Select1st&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::_S_key (335,546 samples, 0.03%)</title><rect x="385.5" y="469" width="0.3" height="15.0" fill="rgb(220,73,17)" rx="2" ry="2" />
+<text  x="388.53" y="479.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_clear (343,413 samples, 0.04%)</title><rect x="654.2" y="405" width="0.2" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="657.16" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; &gt; &gt;::_M_lower_bound (1,211,299 samples, 0.12%)</title><rect x="523.4" y="309" width="1.0" height="15.0" fill="rgb(226,97,23)" rx="2" ry="2" />
+<text  x="526.38" y="319.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, ns3::pfsFlowPerf_t, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt; &gt; &gt;::find (767,082 samples, 0.08%)</title><rect x="186.4" y="485" width="0.6" height="15.0" fill="rgb(211,28,6)" rx="2" ry="2" />
+<text  x="189.42" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::SbMeasResult_s&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::SbMeasResult_s&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::SbMeasResult_s&gt; &gt; &gt;::find (873,028 samples, 0.09%)</title><rect x="185.4" y="469" width="0.7" height="15.0" fill="rgb(219,65,15)" rx="2" ry="2" />
+<text  x="188.39" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_M_create_storage (275,818 samples, 0.03%)</title><rect x="413.1" y="469" width="0.3" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="416.14" y="479.5" ></text>
+</g>
+<g >
+<title>std::tuple_element&lt;0ul, std::tuple&lt;ns3::LteInterference*, ns3::Ptr&lt;ns3::SpectrumValue const&gt;, unsigned int&gt; &gt;::type&amp; std::get&lt;0ul, ns3::LteInterference*, ns3::Ptr&lt;ns3::SpectrumValue const&gt;, unsigned int&gt; (694,870 samples, 0.07%)</title><rect x="752.6" y="597" width="0.6" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="755.64" y="607.5" ></text>
+</g>
+<g >
+<title>ns3::HigherLayerSelected_s* std::__uninitialized_copy&lt;false&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::HigherLayerSelected_s const*, std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt; &gt;, ns3::HigherLayerSelected_s*&gt; (151,182 samples, 0.02%)</title><rect x="92.3" y="309" width="0.1" height="15.0" fill="rgb(251,215,51)" rx="2" ry="2" />
+<text  x="95.31" y="319.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::size (251,934 samples, 0.03%)</title><rect x="413.7" y="485" width="0.2" height="15.0" fill="rgb(234,135,32)" rx="2" ry="2" />
+<text  x="416.68" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Packet::FindFirstMatchingByteTag (1,329,273 samples, 0.14%)</title><rect x="435.8" y="261" width="1.1" height="15.0" fill="rgb(226,98,23)" rx="2" ry="2" />
+<text  x="438.80" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::MakeEvent&lt;void  (444,360 samples, 0.05%)</title><rect x="64.6" y="469" width="0.3" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="67.57" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::BuildDataListElement_s::BuildDataListElement_s (2,525,517 samples, 0.26%)</title><rect x="203.3" y="421" width="2.0" height="15.0" fill="rgb(229,111,26)" rx="2" ry="2" />
+<text  x="206.25" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::EventImpl&gt;::~Ptr (159,762 samples, 0.02%)</title><rect x="62.6" y="485" width="0.2" height="15.0" fill="rgb(225,92,22)" rx="2" ry="2" />
+<text  x="65.63" y="495.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::DlInfoListElement_s const*, std::vector&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt; &gt;::__normal_iterator (193,090 samples, 0.02%)</title><rect x="257.4" y="485" width="0.2" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="260.45" y="495.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::Ptr&lt;ns3::Object&gt;*&gt; (209,811 samples, 0.02%)</title><rect x="77.5" y="293" width="0.2" height="15.0" fill="rgb(248,201,48)" rx="2" ry="2" />
+<text  x="80.53" y="303.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::push_back (1,837,360 samples, 0.19%)</title><rect x="596.6" y="293" width="1.5" height="15.0" fill="rgb(215,50,11)" rx="2" ry="2" />
+<text  x="599.59" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::EventImpl&gt;::operator= (1,128,226 samples, 0.12%)</title><rect x="640.0" y="517" width="0.9" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="643.03" y="527.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; std::copy&lt;__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; (474,207 samples, 0.05%)</title><rect x="730.6" y="453" width="0.4" height="15.0" fill="rgb(249,204,48)" rx="2" ry="2" />
+<text  x="733.60" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::MemberLteCcmMacSapUser&lt;ns3::NoOpComponentCarrierManager&gt;::NotifyTxOpportunity (2,715,978 samples, 0.28%)</title><rect x="17.2" y="469" width="2.2" height="15.0" fill="rgb(205,3,0)" rx="2" ry="2" />
+<text  x="20.17" y="479.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::~_List_base (166,752 samples, 0.02%)</title><rect x="77.9" y="421" width="0.2" height="15.0" fill="rgb(221,74,17)" rx="2" ry="2" />
+<text  x="80.95" y="431.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::ByteTagListData*, std::allocator&lt;ns3::ByteTagListData*&gt; &gt;::end (274,095 samples, 0.03%)</title><rect x="29.8" y="357" width="0.2" height="15.0" fill="rgb(238,154,36)" rx="2" ry="2" />
+<text  x="32.78" y="367.5" ></text>
+</g>
+<g >
+<title>[ld-linux-x86-64.so.2] (155,299 samples, 0.02%)</title><rect x="35.5" y="741" width="0.2" height="15.0" fill="rgb(243,178,42)" rx="2" ry="2" />
+<text  x="38.54" y="751.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt; &gt;::_Auto_node::_M_insert (220,367 samples, 0.02%)</title><rect x="504.0" y="501" width="0.2" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="507.02" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteUeMac::LcInfo&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteUeMac::LcInfo&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteUeMac::LcInfo&gt; &gt; &gt;::_S_key (545,949 samples, 0.06%)</title><rect x="691.3" y="453" width="0.4" height="15.0" fill="rgb(221,77,18)" rx="2" ry="2" />
+<text  x="694.31" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::UeMemberLteUePhySapProvider::SendMacPdu (702,652 samples, 0.07%)</title><rect x="564.6" y="197" width="0.6" height="15.0" fill="rgb(230,117,28)" rx="2" ry="2" />
+<text  x="567.63" y="207.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::_M_default_initialize (525,076 samples, 0.05%)</title><rect x="718.5" y="437" width="0.4" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="721.50" y="447.5" ></text>
+</g>
+<g >
+<title> (151,109 samples, 0.02%)</title><rect x="388.8" y="533" width="0.1" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="391.82" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::MobilityModel&gt;::Ptr (340,915 samples, 0.04%)</title><rect x="313.4" y="485" width="0.3" height="15.0" fill="rgb(213,37,8)" rx="2" ry="2" />
+<text  x="316.44" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Ptr&lt;ns3::Object&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Object&gt; &gt; &gt;::clear (375,571 samples, 0.04%)</title><rect x="549.4" y="213" width="0.3" height="15.0" fill="rgb(241,167,40)" rx="2" ry="2" />
+<text  x="552.40" y="223.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::EventImpl&gt;::Ptr (255,646 samples, 0.03%)</title><rect x="305.3" y="453" width="0.2" height="15.0" fill="rgb(239,157,37)" rx="2" ry="2" />
+<text  x="308.29" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::HarqStatus_e* std::__copy_move_a2&lt;false, ns3::DlInfoListElement_s::HarqStatus_e const*, ns3::DlInfoListElement_s::HarqStatus_e*&gt; (670,916 samples, 0.07%)</title><rect x="260.0" y="277" width="0.5" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="262.98" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbMac::ReceiveDlCqiLteControlMessage (923,023 samples, 0.10%)</title><rect x="461.0" y="325" width="0.7" height="15.0" fill="rgb(207,10,2)" rx="2" ry="2" />
+<text  x="464.00" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt;::operator= (5,294,156 samples, 0.55%)</title><rect x="377.1" y="421" width="4.3" height="15.0" fill="rgb(219,65,15)" rx="2" ry="2" />
+<text  x="380.15" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::TagBuffer::Write (162,161 samples, 0.02%)</title><rect x="555.1" y="229" width="0.1" height="15.0" fill="rgb(229,114,27)" rx="2" ry="2" />
+<text  x="558.07" y="239.5" ></text>
+</g>
+<g >
+<title>erff32x (379,457 samples, 0.04%)</title><rect x="588.3" y="245" width="0.3" height="15.0" fill="rgb(229,111,26)" rx="2" ry="2" />
+<text  x="591.32" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::Scheduler::EventKey&amp;&amp; std::forward&lt;ns3::Scheduler::EventKey&gt; (155,928 samples, 0.02%)</title><rect x="335.2" y="293" width="0.1" height="15.0" fill="rgb(232,125,29)" rx="2" ry="2" />
+<text  x="338.17" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::Object::DoDelete (1,777,558 samples, 0.18%)</title><rect x="652.6" y="389" width="1.4" height="15.0" fill="rgb(212,34,8)" rx="2" ry="2" />
+<text  x="655.59" y="399.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;::__normal_iterator (196,324 samples, 0.02%)</title><rect x="714.5" y="453" width="0.1" height="15.0" fill="rgb(215,50,12)" rx="2" ry="2" />
+<text  x="717.49" y="463.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned short const, unsigned char&gt; &gt;::_M_ptr (324,216 samples, 0.03%)</title><rect x="184.9" y="453" width="0.3" height="15.0" fill="rgb(219,68,16)" rx="2" ry="2" />
+<text  x="187.92" y="463.5" ></text>
+</g>
+<g >
+<title>std::function&lt;void  (73,736,893 samples, 7.60%)</title><rect x="517.3" y="437" width="59.3" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="520.29" y="447.5" >std::f..</text>
+</g>
+<g >
+<title>ns3::TracedCallback&lt;ns3::Ptr&lt;ns3::PacketBurst const&gt; &gt;::operator (308,568 samples, 0.03%)</title><rect x="672.6" y="533" width="0.2" height="15.0" fill="rgb(231,121,28)" rx="2" ry="2" />
+<text  x="675.60" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::PacketMetadata::Create (1,337,353 samples, 0.14%)</title><rect x="557.6" y="213" width="1.1" height="15.0" fill="rgb(231,122,29)" rx="2" ry="2" />
+<text  x="560.64" y="223.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::MatrixArray&lt;std::complex&lt;double&gt; &gt; const&gt;::operator= (192,272 samples, 0.02%)</title><rect x="314.6" y="437" width="0.2" height="15.0" fill="rgb(243,177,42)" rx="2" ry="2" />
+<text  x="317.64" y="447.5" ></text>
+</g>
+<g >
+<title>acosf32x (225,910 samples, 0.02%)</title><rect x="310.0" y="469" width="0.2" height="15.0" fill="rgb(250,211,50)" rx="2" ry="2" />
+<text  x="313.01" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;ns3::DlDciListElement_s, std::allocator&lt;ns3::DlDciListElement_s&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;ns3::DlDciListElement_s, std::allocator&lt;ns3::DlDciListElement_s&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;ns3::DlDciListElement_s, std::allocator&lt;ns3::DlDciListElement_s&gt; &gt; &gt; &gt; &gt;::find (184,813 samples, 0.02%)</title><rect x="99.1" y="453" width="0.1" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="102.05" y="463.5" ></text>
+</g>
+<g >
+<title>void std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt; &gt;::_M_construct_node&lt;std::pair&lt;unsigned short, ns3::DlInfoListElement_s&gt; &gt; (882,128 samples, 0.09%)</title><rect x="503.3" y="469" width="0.7" height="15.0" fill="rgb(220,70,16)" rx="2" ry="2" />
+<text  x="506.31" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::_Vector_impl::_Vector_impl (165,262 samples, 0.02%)</title><rect x="439.7" y="389" width="0.1" height="15.0" fill="rgb(240,161,38)" rx="2" ry="2" />
+<text  x="442.70" y="399.5" ></text>
+</g>
+<g >
+<title>std::less&lt;unsigned short&gt;::operator (125,937 samples, 0.01%)</title><rect x="463.4" y="309" width="0.1" height="15.0" fill="rgb(207,11,2)" rx="2" ry="2" />
+<text  x="466.38" y="319.5" ></text>
+</g>
+<g >
+<title>std::_Function_handler&lt;void  (22,443,594 samples, 2.31%)</title><rect x="17.2" y="709" width="18.0" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="20.17" y="719.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::operator[] (167,625 samples, 0.02%)</title><rect x="575.8" y="341" width="0.1" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="578.76" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue&gt;::operator= (313,424 samples, 0.03%)</title><rect x="656.0" y="517" width="0.2" height="15.0" fill="rgb(220,71,17)" rx="2" ry="2" />
+<text  x="658.96" y="527.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;unsigned char&gt; &gt;::deallocate (194,524 samples, 0.02%)</title><rect x="216.5" y="437" width="0.1" height="15.0" fill="rgb(245,184,44)" rx="2" ry="2" />
+<text  x="219.49" y="447.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::end (127,798 samples, 0.01%)</title><rect x="72.7" y="405" width="0.1" height="15.0" fill="rgb(237,147,35)" rx="2" ry="2" />
+<text  x="75.68" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_M_erase (477,626 samples, 0.05%)</title><rect x="60.7" y="405" width="0.4" height="15.0" fill="rgb(227,102,24)" rx="2" ry="2" />
+<text  x="63.71" y="415.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::UlInfoListElement_s, std::allocator&lt;ns3::UlInfoListElement_s&gt; &gt;::push_back (373,450 samples, 0.04%)</title><rect x="440.4" y="325" width="0.3" height="15.0" fill="rgb(216,54,13)" rx="2" ry="2" />
+<text  x="443.41" y="335.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_get_node (235,059 samples, 0.02%)</title><rect x="331.6" y="421" width="0.2" height="15.0" fill="rgb(251,215,51)" rx="2" ry="2" />
+<text  x="334.60" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy::GenerateCtrlCqiReport (284,425 samples, 0.03%)</title><rect x="612.0" y="341" width="0.2" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="614.97" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Packet&gt; ns3::Create&lt;ns3::Packet, unsigned int&amp;&gt; (2,446,167 samples, 0.25%)</title><rect x="152.8" y="389" width="1.9" height="15.0" fill="rgb(253,223,53)" rx="2" ry="2" />
+<text  x="155.76" y="399.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Ptr&lt;ns3::Object&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Object&gt; &gt; &gt;::vector (158,991 samples, 0.02%)</title><rect x="627.3" y="469" width="0.1" height="15.0" fill="rgb(237,147,35)" rx="2" ry="2" />
+<text  x="630.31" y="479.5" ></text>
+</g>
+<g >
+<title>ns3-dev-lena-fr (969,771,633 samples, 100.00%)</title><rect x="10.0" y="853" width="780.0" height="15.0" fill="rgb(215,46,11)" rx="2" ry="2" />
+<text  x="13.00" y="863.5" >ns3-dev-lena-fr</text>
+</g>
+<g >
+<title>std::_Head_base&lt;0ul, ns3::LteSpectrumPhy*, false&gt;::_Head_base&lt;ns3::LteSpectrumPhy*&amp;&gt; (197,669 samples, 0.02%)</title><rect x="638.8" y="421" width="0.2" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="641.83" y="431.5" ></text>
+</g>
+<g >
+<title>decltype  (762,055 samples, 0.08%)</title><rect x="242.8" y="389" width="0.6" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="245.80" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::PacketBurst (409,656 samples, 0.04%)</title><rect x="69.7" y="437" width="0.3" height="15.0" fill="rgb(208,15,3)" rx="2" ry="2" />
+<text  x="72.68" y="447.5" ></text>
+</g>
+<g >
+<title>std::operator+ (509,535 samples, 0.05%)</title><rect x="247.4" y="437" width="0.4" height="15.0" fill="rgb(239,157,37)" rx="2" ry="2" />
+<text  x="250.38" y="447.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::vector (202,066 samples, 0.02%)</title><rect x="414.4" y="501" width="0.2" height="15.0" fill="rgb(239,156,37)" rx="2" ry="2" />
+<text  x="417.41" y="511.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;double&gt;::deallocate (276,642 samples, 0.03%)</title><rect x="233.3" y="261" width="0.2" height="15.0" fill="rgb(223,83,20)" rx="2" ry="2" />
+<text  x="236.27" y="271.5" ></text>
+</g>
+<g >
+<title>std::__invoke_result&lt;void  (2,105,662 samples, 0.22%)</title><rect x="15.5" y="597" width="1.6" height="15.0" fill="rgb(240,163,39)" rx="2" ry="2" />
+<text  x="18.45" y="607.5" ></text>
+</g>
+<g >
+<title>malloc (191,680 samples, 0.02%)</title><rect x="649.1" y="469" width="0.2" height="15.0" fill="rgb(230,119,28)" rx="2" ry="2" />
+<text  x="652.13" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;signed char, std::allocator&lt;signed char&gt; &gt;::cbegin (165,764 samples, 0.02%)</title><rect x="532.7" y="325" width="0.1" height="15.0" fill="rgb(217,57,13)" rx="2" ry="2" />
+<text  x="535.70" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::IidManager::GetAttributeN (430,734 samples, 0.04%)</title><rect x="449.1" y="229" width="0.4" height="15.0" fill="rgb(232,125,30)" rx="2" ry="2" />
+<text  x="452.10" y="239.5" ></text>
+</g>
+<g >
+<title>std::_Bind&lt;void  (237,306 samples, 0.02%)</title><rect x="710.8" y="453" width="0.1" height="15.0" fill="rgb(253,221,52)" rx="2" ry="2" />
+<text  x="713.75" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Ptr&lt;ns3::Object&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Object&gt; &gt; &gt;::vector (659,463 samples, 0.07%)</title><rect x="161.5" y="405" width="0.5" height="15.0" fill="rgb(237,147,35)" rx="2" ry="2" />
+<text  x="164.48" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::Ptr&lt;ns3::UeManager&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::Ptr&lt;ns3::UeManager&gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::Ptr&lt;ns3::UeManager&gt; &gt; &gt; &gt;::_M_begin (151,422 samples, 0.02%)</title><rect x="28.3" y="309" width="0.1" height="15.0" fill="rgb(227,104,24)" rx="2" ry="2" />
+<text  x="31.26" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue&gt; ns3::Create&lt;ns3::SpectrumValue, ns3::Ptr&lt;ns3::SpectrumModel&gt;&amp;&gt; (1,879,121 samples, 0.19%)</title><rect x="676.6" y="501" width="1.5" height="15.0" fill="rgb(228,107,25)" rx="2" ry="2" />
+<text  x="679.61" y="511.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;::back (265,587 samples, 0.03%)</title><rect x="286.7" y="485" width="0.2" height="15.0" fill="rgb(209,19,4)" rx="2" ry="2" />
+<text  x="289.72" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::PfFfMacScheduler::DoSchedUlTriggerReq (3,881,896 samples, 0.40%)</title><rect x="103.3" y="485" width="3.1" height="15.0" fill="rgb(205,0,0)" rx="2" ry="2" />
+<text  x="106.25" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumModel const&gt;::operator (126,110 samples, 0.01%)</title><rect x="402.8" y="485" width="0.1" height="15.0" fill="rgb(226,96,23)" rx="2" ry="2" />
+<text  x="405.85" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt;::find (1,277,007 samples, 0.13%)</title><rect x="455.5" y="293" width="1.0" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="458.50" y="303.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider::ReportBufferStatusParameters&gt; &gt;::operator (303,690 samples, 0.03%)</title><rect x="689.8" y="501" width="0.3" height="15.0" fill="rgb(220,70,16)" rx="2" ry="2" />
+<text  x="692.82" y="511.5" ></text>
+</g>
+<g >
+<title>std::_List_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;::_List_iterator (153,672 samples, 0.02%)</title><rect x="355.5" y="469" width="0.1" height="15.0" fill="rgb(223,84,20)" rx="2" ry="2" />
+<text  x="358.45" y="479.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::list (148,291 samples, 0.02%)</title><rect x="318.6" y="453" width="0.1" height="15.0" fill="rgb(236,145,34)" rx="2" ry="2" />
+<text  x="321.57" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::UlInfoListElement_s, std::allocator&lt;ns3::UlInfoListElement_s&gt; &gt;::_M_erase_at_end (312,181 samples, 0.03%)</title><rect x="265.4" y="501" width="0.3" height="15.0" fill="rgb(217,55,13)" rx="2" ry="2" />
+<text  x="268.44" y="511.5" ></text>
+</g>
+<g >
+<title>void std::_Construct&lt;double&gt; (155,953 samples, 0.02%)</title><rect x="677.8" y="389" width="0.2" height="15.0" fill="rgb(228,106,25)" rx="2" ry="2" />
+<text  x="680.84" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt;::_M_allocate (152,912 samples, 0.02%)</title><rect x="144.5" y="405" width="0.2" height="15.0" fill="rgb(217,59,14)" rx="2" ry="2" />
+<text  x="147.54" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::LteSpectrumModelId, std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt;, std::_Select1st&lt;std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt; &gt;, std::less&lt;ns3::LteSpectrumModelId&gt;, std::allocator&lt;std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt; &gt; &gt;::_M_begin (159,151 samples, 0.02%)</title><rect x="675.6" y="453" width="0.1" height="15.0" fill="rgb(233,130,31)" rx="2" ry="2" />
+<text  x="678.61" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::LteUePhy::DoSendLteControlMessage (416,875 samples, 0.04%)</title><rect x="689.3" y="485" width="0.3" height="15.0" fill="rgb(232,124,29)" rx="2" ry="2" />
+<text  x="692.30" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Packet::~Packet (4,222,593 samples, 0.44%)</title><rect x="545.7" y="133" width="3.4" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="548.67" y="143.5" ></text>
+</g>
+<g >
+<title>ns3::EventId::EventId (335,084 samples, 0.03%)</title><rect x="637.4" y="485" width="0.3" height="15.0" fill="rgb(206,4,1)" rx="2" ry="2" />
+<text  x="640.39" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Bvector_base&lt;std::allocator&lt;bool&gt; &gt;::_Bvector_impl::_M_end_addr (154,284 samples, 0.02%)</title><rect x="200.2" y="421" width="0.1" height="15.0" fill="rgb(251,212,50)" rx="2" ry="2" />
+<text  x="203.22" y="431.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;unsigned long&gt; &gt;::allocate (271,783 samples, 0.03%)</title><rect x="198.0" y="421" width="0.3" height="15.0" fill="rgb(227,102,24)" rx="2" ry="2" />
+<text  x="201.04" y="431.5" ></text>
+</g>
+<g >
+<title>std::less&lt;unsigned short&gt;::operator (224,387 samples, 0.02%)</title><rect x="430.1" y="229" width="0.2" height="15.0" fill="rgb(207,11,2)" rx="2" ry="2" />
+<text  x="433.07" y="239.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::vector&lt;int, std::allocator&lt;int&gt; &gt;, std::allocator&lt;std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt; &gt;::_M_range_check (265,329 samples, 0.03%)</title><rect x="701.2" y="533" width="0.2" height="15.0" fill="rgb(238,152,36)" rx="2" ry="2" />
+<text  x="704.15" y="543.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::resize (3,219,505 samples, 0.33%)</title><rect x="251.3" y="485" width="2.6" height="15.0" fill="rgb(227,101,24)" rx="2" ry="2" />
+<text  x="254.28" y="495.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;double&gt; &gt;::allocate (126,483 samples, 0.01%)</title><rect x="606.9" y="421" width="0.1" height="15.0" fill="rgb(234,136,32)" rx="2" ry="2" />
+<text  x="609.92" y="431.5" ></text>
+</g>
+<g >
+<title>std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;* std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_create_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; const&amp;&gt; (413,599 samples, 0.04%)</title><rect x="230.2" y="373" width="0.3" height="15.0" fill="rgb(230,116,27)" rx="2" ry="2" />
+<text  x="233.19" y="383.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_assign_dispatch&lt;std::_List_const_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; (411,083 samples, 0.04%)</title><rect x="648.7" y="453" width="0.4" height="15.0" fill="rgb(237,148,35)" rx="2" ry="2" />
+<text  x="651.73" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt;::_Vector_base (199,135 samples, 0.02%)</title><rect x="443.1" y="293" width="0.2" height="15.0" fill="rgb(246,192,46)" rx="2" ry="2" />
+<text  x="446.10" y="303.5" ></text>
+</g>
+<g >
+<title>std::_List_iterator&lt;ns3::Ptr&lt;ns3::LteChunkProcessor&gt; &gt;::operator++ (161,286 samples, 0.02%)</title><rect x="719.9" y="501" width="0.1" height="15.0" fill="rgb(220,73,17)" rx="2" ry="2" />
+<text  x="722.91" y="511.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt; &gt; &gt;::push_back (202,678 samples, 0.02%)</title><rect x="292.3" y="533" width="0.1" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="295.27" y="543.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt;::size (188,805 samples, 0.02%)</title><rect x="210.3" y="453" width="0.1" height="15.0" fill="rgb(210,27,6)" rx="2" ry="2" />
+<text  x="213.29" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::operator= (821,681 samples, 0.08%)</title><rect x="719.1" y="469" width="0.6" height="15.0" fill="rgb(243,175,42)" rx="2" ry="2" />
+<text  x="722.05" y="479.5" ></text>
+</g>
+<g >
+<title>std::__detail::_List_node_header::_List_node_header (148,982 samples, 0.02%)</title><rect x="371.9" y="437" width="0.1" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="374.85" y="447.5" ></text>
+</g>
+<g >
+<title>operator new (487,893 samples, 0.05%)</title><rect x="407.7" y="373" width="0.4" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="410.68" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_M_destroy_node (198,551 samples, 0.02%)</title><rect x="233.0" y="405" width="0.1" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="235.95" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::ObjectBase::ObjectBase (412,873 samples, 0.04%)</title><rect x="537.8" y="261" width="0.4" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="540.84" y="271.5" ></text>
+</g>
+<g >
+<title>double* std::fill_n&lt;double*, unsigned long, double&gt; (248,267 samples, 0.03%)</title><rect x="718.6" y="373" width="0.2" height="15.0" fill="rgb(234,135,32)" rx="2" ry="2" />
+<text  x="721.60" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::IidManager::LookupInformation (308,302 samples, 0.03%)</title><rect x="631.3" y="437" width="0.3" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="634.34" y="447.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;double&gt; &gt;::allocate (156,472 samples, 0.02%)</title><rect x="413.2" y="437" width="0.2" height="15.0" fill="rgb(234,136,32)" rx="2" ry="2" />
+<text  x="416.23" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::end (714,185 samples, 0.07%)</title><rect x="761.7" y="693" width="0.6" height="15.0" fill="rgb(244,179,42)" rx="2" ry="2" />
+<text  x="764.69" y="703.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::_M_get_node (272,817 samples, 0.03%)</title><rect x="23.0" y="293" width="0.2" height="15.0" fill="rgb(212,36,8)" rx="2" ry="2" />
+<text  x="26.03" y="303.5" ></text>
+</g>
+<g >
+<title>void std::_Construct&lt;ns3::BuildDataListElement_s, ns3::BuildDataListElement_s const&amp;&gt; (154,123 samples, 0.02%)</title><rect x="142.2" y="373" width="0.1" height="15.0" fill="rgb(210,24,5)" rx="2" ry="2" />
+<text  x="145.21" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::Packet, ns3::Empty, ns3::DefaultDeleter&lt;ns3::Packet&gt; &gt;::SimpleRefCount (194,468 samples, 0.02%)</title><rect x="154.1" y="357" width="0.2" height="15.0" fill="rgb(223,86,20)" rx="2" ry="2" />
+<text  x="157.10" y="367.5" ></text>
+</g>
+<g >
+<title>__fixunsxfti (459,077 samples, 0.05%)</title><rect x="390.3" y="485" width="0.4" height="15.0" fill="rgb(252,219,52)" rx="2" ry="2" />
+<text  x="393.33" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Bind&lt;void  (196,912 samples, 0.02%)</title><rect x="726.8" y="453" width="0.2" height="15.0" fill="rgb(253,221,52)" rx="2" ry="2" />
+<text  x="729.82" y="463.5" ></text>
+</g>
+<g >
+<title>double* std::__uninitialized_default_n&lt;double*, unsigned long&gt; (1,351,343 samples, 0.14%)</title><rect x="403.4" y="437" width="1.1" height="15.0" fill="rgb(231,123,29)" rx="2" ry="2" />
+<text  x="406.43" y="447.5" ></text>
+</g>
+<g >
+<title>void ns3::Simulator::ScheduleWithContext&lt;void  (696,602 samples, 0.07%)</title><rect x="115.9" y="485" width="0.6" height="15.0" fill="rgb(222,78,18)" rx="2" ry="2" />
+<text  x="118.94" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::at (274,992 samples, 0.03%)</title><rect x="225.2" y="485" width="0.3" height="15.0" fill="rgb(251,215,51)" rx="2" ry="2" />
+<text  x="228.24" y="495.5" ></text>
+</g>
+<g >
+<title>std::_List_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;::operator* (197,417 samples, 0.02%)</title><rect x="610.9" y="485" width="0.1" height="15.0" fill="rgb(227,105,25)" rx="2" ry="2" />
+<text  x="613.89" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::AddPacket (193,356 samples, 0.02%)</title><rect x="19.9" y="309" width="0.2" height="15.0" fill="rgb(207,10,2)" rx="2" ry="2" />
+<text  x="22.95" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::HigherLayerSelected_s::HigherLayerSelected_s (333,368 samples, 0.03%)</title><rect x="125.3" y="277" width="0.3" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="128.29" y="287.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; &gt; &gt;::operator* (234,968 samples, 0.02%)</title><rect x="167.7" y="453" width="0.2" height="15.0" fill="rgb(240,163,39)" rx="2" ry="2" />
+<text  x="170.72" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt; &gt; &gt;::find (1,823,746 samples, 0.19%)</title><rect x="169.5" y="437" width="1.5" height="15.0" fill="rgb(238,154,36)" rx="2" ry="2" />
+<text  x="172.49" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::ByteTagList::~ByteTagList (239,815 samples, 0.02%)</title><rect x="774.3" y="181" width="0.2" height="15.0" fill="rgb(206,5,1)" rx="2" ry="2" />
+<text  x="777.31" y="191.5" ></text>
+</g>
+<g >
+<title>ns3::Time::To (417,636 samples, 0.04%)</title><rect x="484.1" y="485" width="0.4" height="15.0" fill="rgb(244,182,43)" rx="2" ry="2" />
+<text  x="487.13" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Packet::PeekPacketTag (2,187,603 samples, 0.23%)</title><rect x="489.5" y="549" width="1.8" height="15.0" fill="rgb(232,126,30)" rx="2" ry="2" />
+<text  x="492.51" y="559.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumModel const&gt;::Acquire (235,730 samples, 0.02%)</title><rect x="676.6" y="469" width="0.2" height="15.0" fill="rgb(222,80,19)" rx="2" ry="2" />
+<text  x="679.64" y="479.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned char, ns3::LteMacSapProvider*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt; &gt;::find (1,809,407 samples, 0.19%)</title><rect x="565.4" y="229" width="1.4" height="15.0" fill="rgb(248,200,47)" rx="2" ry="2" />
+<text  x="568.37" y="239.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;* std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_create_node&lt;unsigned int const&amp;, ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp;&gt; (420,658 samples, 0.04%)</title><rect x="81.8" y="453" width="0.4" height="15.0" fill="rgb(245,186,44)" rx="2" ry="2" />
+<text  x="84.81" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumPhy::StartTxDataFrame (35,782,100 samples, 3.69%)</title><rect x="62.0" y="549" width="28.8" height="15.0" fill="rgb(242,171,40)" rx="2" ry="2" />
+<text  x="65.00" y="559.5" >ns..</text>
+</g>
+<g >
+<title>ns3::LogComponent::IsEnabled (153,177 samples, 0.02%)</title><rect x="305.2" y="453" width="0.1" height="15.0" fill="rgb(214,43,10)" rx="2" ry="2" />
+<text  x="308.17" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumValueHelper::CreateTxPowerSpectralDensity (7,568,442 samples, 0.78%)</title><rect x="296.9" y="501" width="6.1" height="15.0" fill="rgb(250,209,50)" rx="2" ry="2" />
+<text  x="299.89" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::LteRlcSm::ReportBufferStatus (1,019,985 samples, 0.11%)</title><rect x="17.9" y="405" width="0.8" height="15.0" fill="rgb(224,89,21)" rx="2" ry="2" />
+<text  x="20.88" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::EnbMemberLteEnbPhySapProvider::SendLteControlMessage (197,391 samples, 0.02%)</title><rect x="103.7" y="437" width="0.1" height="15.0" fill="rgb(253,222,53)" rx="2" ry="2" />
+<text  x="106.68" y="447.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;*, std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt; &gt; std::move&lt;__gnu_cxx::__normal_iterator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;*, std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;*, std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt; &gt; &gt; (264,157 samples, 0.03%)</title><rect x="117.8" y="485" width="0.2" height="15.0" fill="rgb(254,225,54)" rx="2" ry="2" />
+<text  x="120.75" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::MacCeListElement_s::MacCeListElement_s (1,017,736 samples, 0.10%)</title><rect x="441.8" y="341" width="0.8" height="15.0" fill="rgb(223,85,20)" rx="2" ry="2" />
+<text  x="444.78" y="351.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::_M_get_node (491,620 samples, 0.05%)</title><rect x="363.2" y="453" width="0.4" height="15.0" fill="rgb(212,36,8)" rx="2" ry="2" />
+<text  x="366.25" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::ByteTagList::Deallocate (244,736 samples, 0.03%)</title><rect x="76.3" y="213" width="0.2" height="15.0" fill="rgb(227,103,24)" rx="2" ry="2" />
+<text  x="79.28" y="223.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt;::_S_relocate (1,209,596 samples, 0.12%)</title><rect x="595.3" y="261" width="0.9" height="15.0" fill="rgb(220,69,16)" rx="2" ry="2" />
+<text  x="598.25" y="271.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, unsigned short, std::_Identity&lt;unsigned short&gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;unsigned short&gt; &gt;::_M_begin (261,904 samples, 0.03%)</title><rect x="395.0" y="517" width="0.2" height="15.0" fill="rgb(217,58,14)" rx="2" ry="2" />
+<text  x="397.97" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::HigherLayerSelected_s::HigherLayerSelected_s (418,936 samples, 0.04%)</title><rect x="595.7" y="165" width="0.4" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="598.73" y="175.5" ></text>
+</g>
+<g >
+<title>ns3::MobilityModel::GetDistanceFrom (1,223,688 samples, 0.13%)</title><rect x="739.7" y="517" width="1.0" height="15.0" fill="rgb(229,112,26)" rx="2" ry="2" />
+<text  x="742.67" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::BuildBroadcastListElement_s* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;ns3::BuildBroadcastListElement_s const*, std::vector&lt;ns3::BuildBroadcastListElement_s, std::allocator&lt;ns3::BuildBroadcastListElement_s&gt; &gt; &gt;, ns3::BuildBroadcastListElement_s*, ns3::BuildBroadcastListElement_s&gt; (150,405 samples, 0.02%)</title><rect x="140.9" y="437" width="0.1" height="15.0" fill="rgb(218,64,15)" rx="2" ry="2" />
+<text  x="143.86" y="447.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;is_member_pointer_v&lt;void  (379,721 samples, 0.04%)</title><rect x="112.7" y="485" width="0.3" height="15.0" fill="rgb(241,170,40)" rx="2" ry="2" />
+<text  x="115.67" y="495.5" ></text>
+</g>
+<g >
+<title>std::function&lt;void  (5,321,712 samples, 0.55%)</title><rect x="11.2" y="709" width="4.3" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="14.17" y="719.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt;::_M_get_Tp_allocator (160,864 samples, 0.02%)</title><rect x="262.2" y="485" width="0.2" height="15.0" fill="rgb(215,48,11)" rx="2" ry="2" />
+<text  x="265.23" y="495.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;unsigned short*, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;::difference_type __gnu_cxx::operator-&lt;unsigned short*, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; (158,533 samples, 0.02%)</title><rect x="218.5" y="437" width="0.1" height="15.0" fill="rgb(238,152,36)" rx="2" ry="2" />
+<text  x="221.50" y="447.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, unsigned int, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt; &gt;::find (178,285 samples, 0.02%)</title><rect x="103.0" y="469" width="0.2" height="15.0" fill="rgb(239,156,37)" rx="2" ry="2" />
+<text  x="106.02" y="479.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::__uninitialized_copy&lt;true&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, unsigned char*&gt; (592,631 samples, 0.06%)</title><rect x="126.9" y="341" width="0.4" height="15.0" fill="rgb(233,129,30)" rx="2" ry="2" />
+<text  x="129.85" y="351.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::UlInfoListElement_s*&gt; (228,697 samples, 0.02%)</title><rect x="265.5" y="469" width="0.2" height="15.0" fill="rgb(205,4,1)" rx="2" ry="2" />
+<text  x="268.51" y="479.5" ></text>
+</g>
+<g >
+<title>operator new (629,966 samples, 0.06%)</title><rect x="655.0" y="373" width="0.5" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="658.02" y="383.5" ></text>
+</g>
+<g >
+<title>std::tuple&lt;ns3::MultiModelSpectrumChannel*, ns3::Ptr&lt;ns3::SpectrumValue&gt;, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::tuple (495,402 samples, 0.05%)</title><rect x="340.8" y="389" width="0.4" height="15.0" fill="rgb(232,125,30)" rx="2" ry="2" />
+<text  x="343.78" y="399.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::~vector (445,109 samples, 0.05%)</title><rect x="255.0" y="341" width="0.4" height="15.0" fill="rgb(243,174,41)" rx="2" ry="2" />
+<text  x="258.04" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::MacCeListElement_s* std::__uninitialized_copy_a&lt;std::move_iterator&lt;ns3::MacCeListElement_s*&gt;, ns3::MacCeListElement_s*, ns3::MacCeListElement_s&gt; (462,292 samples, 0.05%)</title><rect x="129.5" y="469" width="0.4" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="132.52" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::ByteTagList::Iterator::Next (984,877 samples, 0.10%)</title><rect x="425.3" y="229" width="0.8" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="428.32" y="239.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::Ptr&lt;ns3::Object&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Object&gt; &gt; &gt;::~_Vector_base (152,155 samples, 0.02%)</title><rect x="165.2" y="325" width="0.1" height="15.0" fill="rgb(221,76,18)" rx="2" ry="2" />
+<text  x="168.17" y="335.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; &gt; &gt;::begin (303,510 samples, 0.03%)</title><rect x="348.8" y="517" width="0.2" height="15.0" fill="rgb(209,21,5)" rx="2" ry="2" />
+<text  x="351.77" y="527.5" ></text>
+</g>
+<g >
+<title>bool __gnu_cxx::operator==&lt;ns3::Buffer::Data* const*, std::vector&lt;ns3::Buffer::Data*, std::allocator&lt;ns3::Buffer::Data*&gt; &gt; &gt; (150,431 samples, 0.02%)</title><rect x="31.9" y="325" width="0.1" height="15.0" fill="rgb(244,183,43)" rx="2" ry="2" />
+<text  x="34.92" y="335.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt;::_Vector_impl_data::_Vector_impl_data (146,682 samples, 0.02%)</title><rect x="144.7" y="405" width="0.1" height="15.0" fill="rgb(213,37,9)" rx="2" ry="2" />
+<text  x="147.73" y="415.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;::begin (155,092 samples, 0.02%)</title><rect x="375.9" y="533" width="0.1" height="15.0" fill="rgb(219,67,16)" rx="2" ry="2" />
+<text  x="378.87" y="543.5" ></text>
+</g>
+<g >
+<title>double* std::__uninitialized_default_n_a&lt;double*, unsigned long, double&gt; (1,306,729 samples, 0.13%)</title><rect x="300.9" y="421" width="1.1" height="15.0" fill="rgb(248,199,47)" rx="2" ry="2" />
+<text  x="303.91" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::SpectrumValue (1,521,016 samples, 0.16%)</title><rect x="56.4" y="485" width="1.2" height="15.0" fill="rgb(211,27,6)" rx="2" ry="2" />
+<text  x="59.38" y="495.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::operator= (211,914 samples, 0.02%)</title><rect x="90.6" y="533" width="0.2" height="15.0" fill="rgb(251,215,51)" rx="2" ry="2" />
+<text  x="93.61" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::LogComponent::IsEnabled (154,612 samples, 0.02%)</title><rect x="773.9" y="309" width="0.1" height="15.0" fill="rgb(214,43,10)" rx="2" ry="2" />
+<text  x="776.90" y="319.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;::_M_move_nodes (377,447 samples, 0.04%)</title><rect x="290.5" y="389" width="0.3" height="15.0" fill="rgb(230,117,28)" rx="2" ry="2" />
+<text  x="293.52" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::Time::FromDouble (1,884,228 samples, 0.19%)</title><rect x="389.5" y="533" width="1.5" height="15.0" fill="rgb(249,203,48)" rx="2" ry="2" />
+<text  x="392.50" y="543.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt; &gt;::find (1,373,897 samples, 0.14%)</title><rect x="179.8" y="469" width="1.1" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="182.83" y="479.5" ></text>
+</g>
+<g >
+<title>std::tuple&lt;ns3::LteInterference*, ns3::Ptr&lt;ns3::SpectrumValue const&gt;, unsigned int&gt;::tuple (1,080,236 samples, 0.11%)</title><rect x="711.7" y="405" width="0.8" height="15.0" fill="rgb(215,50,11)" rx="2" ry="2" />
+<text  x="714.68" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::FfMacSchedSapProvider::SchedUlMacCtrlInfoReqParameters::SchedUlMacCtrlInfoReqParameters (182,245 samples, 0.02%)</title><rect x="133.1" y="517" width="0.2" height="15.0" fill="rgb(206,5,1)" rx="2" ry="2" />
+<text  x="136.15" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt;::_M_allocate (264,699 samples, 0.03%)</title><rect x="261.0" y="341" width="0.2" height="15.0" fill="rgb(209,21,5)" rx="2" ry="2" />
+<text  x="263.95" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::LteMiErrorModel::MappingMiBler (872,634 samples, 0.09%)</title><rect x="588.0" y="261" width="0.7" height="15.0" fill="rgb(216,55,13)" rx="2" ry="2" />
+<text  x="590.95" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::LteRlcSm::ReportBufferStatus (747,299 samples, 0.08%)</title><rect x="12.5" y="405" width="0.6" height="15.0" fill="rgb(224,89,21)" rx="2" ry="2" />
+<text  x="15.49" y="415.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::vector (189,712 samples, 0.02%)</title><rect x="102.0" y="469" width="0.1" height="15.0" fill="rgb(206,9,2)" rx="2" ry="2" />
+<text  x="104.98" y="479.5" ></text>
+</g>
+<g >
+<title>std::function&lt;void  (937,122 samples, 0.10%)</title><rect x="63.6" y="485" width="0.7" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="66.59" y="495.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::RarLteControlMessage::Rar, std::allocator&lt;ns3::RarLteControlMessage::Rar&gt; &gt;::~_List_base (234,533 samples, 0.02%)</title><rect x="167.3" y="357" width="0.2" height="15.0" fill="rgb(254,226,54)" rx="2" ry="2" />
+<text  x="170.28" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::tbInfo_t::tbInfo_t (126,859 samples, 0.01%)</title><rect x="530.1" y="325" width="0.1" height="15.0" fill="rgb(224,91,21)" rx="2" ry="2" />
+<text  x="533.10" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::Packet::Packet (358,332 samples, 0.04%)</title><rect x="16.7" y="373" width="0.3" height="15.0" fill="rgb(230,115,27)" rx="2" ry="2" />
+<text  x="19.70" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbMac::DoSubframeIndication (1,650,854 samples, 0.17%)</title><rect x="15.8" y="533" width="1.3" height="15.0" fill="rgb(248,200,47)" rx="2" ry="2" />
+<text  x="18.79" y="543.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::~vector (189,290 samples, 0.02%)</title><rect x="112.2" y="421" width="0.2" height="15.0" fill="rgb(225,92,22)" rx="2" ry="2" />
+<text  x="115.24" y="431.5" ></text>
+</g>
+<g >
+<title>std::modf (284,529 samples, 0.03%)</title><rect x="390.8" y="485" width="0.2" height="15.0" fill="rgb(249,206,49)" rx="2" ry="2" />
+<text  x="393.79" y="495.5" ></text>
+</g>
+<g >
+<title> (124,598 samples, 0.01%)</title><rect x="608.6" y="533" width="0.1" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="611.56" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::EnbMacMemberLteEnbPhySapUser::SubframeIndication (178,646,468 samples, 18.42%)</title><rect x="123.4" y="549" width="143.7" height="15.0" fill="rgb(252,216,51)" rx="2" ry="2" />
+<text  x="126.36" y="559.5" >ns3::EnbMacMemberL..</text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;*, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; std::__copy_move_a&lt;true, __gnu_cxx::__normal_iterator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;*, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;*, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; &gt; (148,381 samples, 0.02%)</title><rect x="117.1" y="469" width="0.1" height="15.0" fill="rgb(240,164,39)" rx="2" ry="2" />
+<text  x="120.11" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::DoDispose (1,132,243 samples, 0.12%)</title><rect x="773.9" y="325" width="0.9" height="15.0" fill="rgb(242,172,41)" rx="2" ry="2" />
+<text  x="776.90" y="335.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy_aux&lt;false&gt;::__destroy&lt;ns3::CqiListElement_s*&gt; (143,980 samples, 0.01%)</title><rect x="128.2" y="453" width="0.1" height="15.0" fill="rgb(229,111,26)" rx="2" ry="2" />
+<text  x="131.17" y="463.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;is_invocable_r_v&lt;void, std::_Bind&lt;void  (2,105,662 samples, 0.22%)</title><rect x="15.5" y="661" width="1.6" height="15.0" fill="rgb(243,178,42)" rx="2" ry="2" />
+<text  x="18.45" y="671.5" ></text>
+</g>
+<g >
+<title>ns3::TagBuffer::TrimAtEnd (161,048 samples, 0.02%)</title><rect x="425.9" y="213" width="0.1" height="15.0" fill="rgb(225,94,22)" rx="2" ry="2" />
+<text  x="428.92" y="223.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::RxSpectrumModelInfo&gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::RxSpectrumModelInfo&gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::RxSpectrumModelInfo&gt; &gt; &gt;::end (128,201 samples, 0.01%)</title><rect x="80.9" y="501" width="0.1" height="15.0" fill="rgb(206,9,2)" rx="2" ry="2" />
+<text  x="83.93" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Vector3D::Vector3D (192,806 samples, 0.02%)</title><rect x="642.6" y="485" width="0.2" height="15.0" fill="rgb(243,178,42)" rx="2" ry="2" />
+<text  x="645.63" y="495.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::clear (224,512 samples, 0.02%)</title><rect x="634.7" y="341" width="0.2" height="15.0" fill="rgb(217,58,13)" rx="2" ry="2" />
+<text  x="637.70" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::~DlInfoListElement_s (1,109,198 samples, 0.11%)</title><rect x="256.0" y="405" width="0.9" height="15.0" fill="rgb(217,55,13)" rx="2" ry="2" />
+<text  x="259.05" y="415.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;*, std::vector&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt; &gt; &gt; &gt; std::move&lt;__gnu_cxx::__normal_iterator&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;*, std::vector&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt; &gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;*, std::vector&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt; &gt; &gt; &gt; &gt; (1,862,892 samples, 0.19%)</title><rect x="290.0" y="501" width="1.5" height="15.0" fill="rgb(208,15,3)" rx="2" ry="2" />
+<text  x="292.99" y="511.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;double&gt; &gt;::allocate (150,187 samples, 0.02%)</title><rect x="718.4" y="389" width="0.1" height="15.0" fill="rgb(234,136,32)" rx="2" ry="2" />
+<text  x="721.35" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::PfFfMacScheduler::GetRbgSize (153,442 samples, 0.02%)</title><rect x="176.4" y="485" width="0.2" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="179.44" y="495.5" ></text>
+</g>
+<g >
+<title>unsigned short* std::fill_n&lt;unsigned short*, unsigned long, unsigned short&gt; (700,494 samples, 0.07%)</title><rect x="252.2" y="405" width="0.5" height="15.0" fill="rgb(231,123,29)" rx="2" ry="2" />
+<text  x="255.18" y="415.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::IidManager::IidInformation, std::allocator&lt;ns3::IidManager::IidInformation&gt; &gt;::size (188,549 samples, 0.02%)</title><rect x="34.2" y="373" width="0.1" height="15.0" fill="rgb(249,206,49)" rx="2" ry="2" />
+<text  x="37.15" y="383.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_List_base (459,736 samples, 0.05%)</title><rect x="516.9" y="421" width="0.4" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="519.92" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::TypeId::operator= (127,390 samples, 0.01%)</title><rect x="562.7" y="165" width="0.1" height="15.0" fill="rgb(211,28,6)" rx="2" ry="2" />
+<text  x="565.69" y="175.5" ></text>
+</g>
+<g >
+<title>std::map&lt;ns3::LteFlowId_t, ns3::FfMacSchedSapProvider::SchedDlRlcBufferReqParameters, std::less&lt;ns3::LteFlowId_t&gt;, std::allocator&lt;std::pair&lt;ns3::LteFlowId_t const, ns3::FfMacSchedSapProvider::SchedDlRlcBufferReqParameters&gt; &gt; &gt;::find (1,508,586 samples, 0.16%)</title><rect x="181.3" y="469" width="1.2" height="15.0" fill="rgb(229,112,26)" rx="2" ry="2" />
+<text  x="184.29" y="479.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::list (1,664,663 samples, 0.17%)</title><rect x="619.6" y="533" width="1.3" height="15.0" fill="rgb(236,145,34)" rx="2" ry="2" />
+<text  x="622.60" y="543.5" ></text>
+</g>
+<g >
+<title>operator new (158,241 samples, 0.02%)</title><rect x="480.1" y="197" width="0.1" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="483.12" y="207.5" ></text>
+</g>
+<g >
+<title>operator new (429,586 samples, 0.04%)</title><rect x="325.4" y="357" width="0.4" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="328.42" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumPhy const&gt;::Ptr&lt;ns3::SpectrumPhy&gt; (154,425 samples, 0.02%)</title><rect x="744.1" y="549" width="0.2" height="15.0" fill="rgb(234,136,32)" rx="2" ry="2" />
+<text  x="747.15" y="559.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Node&gt;::Ptr (417,289 samples, 0.04%)</title><rect x="312.7" y="485" width="0.3" height="15.0" fill="rgb(237,147,35)" rx="2" ry="2" />
+<text  x="315.67" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::UlInfoListElement_s, std::allocator&lt;ns3::UlInfoListElement_s&gt; &gt;::operator= (153,511 samples, 0.02%)</title><rect x="108.1" y="501" width="0.2" height="15.0" fill="rgb(212,32,7)" rx="2" ry="2" />
+<text  x="111.13" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy::GetDownlinkSubChannels (240,017 samples, 0.02%)</title><rect x="54.0" y="517" width="0.2" height="15.0" fill="rgb(235,139,33)" rx="2" ry="2" />
+<text  x="56.97" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;::~Ptr (2,493,989 samples, 0.26%)</title><rect x="652.4" y="517" width="2.0" height="15.0" fill="rgb(236,143,34)" rx="2" ry="2" />
+<text  x="655.43" y="527.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::_S_check_init_len (126,790 samples, 0.01%)</title><rect x="678.0" y="453" width="0.1" height="15.0" fill="rgb(233,130,31)" rx="2" ry="2" />
+<text  x="680.99" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::MemberSchedSapProvider&lt;ns3::PfFfMacScheduler&gt;::SchedDlTriggerReq (2,983,151 samples, 0.31%)</title><rect x="17.2" y="533" width="2.4" height="15.0" fill="rgb(247,193,46)" rx="2" ry="2" />
+<text  x="20.17" y="543.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; (160,870 samples, 0.02%)</title><rect x="482.6" y="277" width="0.2" height="15.0" fill="rgb(212,35,8)" rx="2" ry="2" />
+<text  x="485.63" y="287.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;int, std::allocator&lt;int&gt; &gt;::_Vector_impl_data::_Vector_impl_data (138,078 samples, 0.01%)</title><rect x="385.2" y="325" width="0.1" height="15.0" fill="rgb(211,30,7)" rx="2" ry="2" />
+<text  x="388.21" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::MobilityModel&gt;::~Ptr (160,100 samples, 0.02%)</title><rect x="743.1" y="549" width="0.2" height="15.0" fill="rgb(249,203,48)" rx="2" ry="2" />
+<text  x="746.13" y="559.5" ></text>
+</g>
+<g >
+<title>ns3::ObjectDeleter::Delete (158,753 samples, 0.02%)</title><rect x="17.0" y="421" width="0.1" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="19.99" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::TracedCallback&lt;ns3::PhyReceptionStatParameters&gt;::operator (278,616 samples, 0.03%)</title><rect x="493.9" y="549" width="0.2" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="496.90" y="559.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;std::is_constructible&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt;::value, std::pair&lt;std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, bool&gt; &gt;::type std::map&lt;ns3::Scheduler::EventKey, ns3::EventImpl*, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::insert&lt;std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (1,644,033 samples, 0.17%)</title><rect x="706.4" y="453" width="1.3" height="15.0" fill="rgb(211,29,7)" rx="2" ry="2" />
+<text  x="709.38" y="463.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned char, ns3::LteMacSapProvider::ReportBufferStatusParameters, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider::ReportBufferStatusParameters&gt; &gt; &gt;::begin (422,977 samples, 0.04%)</title><rect x="569.3" y="325" width="0.4" height="15.0" fill="rgb(243,175,42)" rx="2" ry="2" />
+<text  x="572.32" y="335.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt;::_M_valptr (242,288 samples, 0.02%)</title><rect x="179.1" y="453" width="0.2" height="15.0" fill="rgb(249,206,49)" rx="2" ry="2" />
+<text  x="182.14" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue&gt;::operator* (163,458 samples, 0.02%)</title><rect x="744.6" y="549" width="0.1" height="15.0" fill="rgb(243,176,42)" rx="2" ry="2" />
+<text  x="747.62" y="559.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::_Vector_base (192,396 samples, 0.02%)</title><rect x="474.0" y="197" width="0.2" height="15.0" fill="rgb(219,65,15)" rx="2" ry="2" />
+<text  x="477.01" y="207.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Callback&lt;void, unsigned short, unsigned char, unsigned int&gt;, std::allocator&lt;ns3::Callback&lt;void, unsigned short, unsigned char, unsigned int&gt; &gt; &gt;::begin (281,211 samples, 0.03%)</title><rect x="156.1" y="373" width="0.2" height="15.0" fill="rgb(236,144,34)" rx="2" ry="2" />
+<text  x="159.09" y="383.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::at (263,150 samples, 0.03%)</title><rect x="329.1" y="501" width="0.2" height="15.0" fill="rgb(220,71,17)" rx="2" ry="2" />
+<text  x="332.11" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;1ul, ns3::Ptr&lt;ns3::PacketBurst&gt; &gt;::_Tuple_impl (360,730 samples, 0.04%)</title><rect x="284.1" y="405" width="0.3" height="15.0" fill="rgb(222,81,19)" rx="2" ry="2" />
+<text  x="287.12" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;::_Rb_tree_iterator (202,210 samples, 0.02%)</title><rect x="762.1" y="677" width="0.2" height="15.0" fill="rgb(223,85,20)" rx="2" ry="2" />
+<text  x="765.11" y="687.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;*, std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; std::move&lt;__gnu_cxx::__normal_iterator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;*, std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;*, std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; (536,978 samples, 0.06%)</title><rect x="119.7" y="485" width="0.5" height="15.0" fill="rgb(211,30,7)" rx="2" ry="2" />
+<text  x="122.74" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; &gt; &gt;::_M_valptr (232,843 samples, 0.02%)</title><rect x="171.7" y="389" width="0.2" height="15.0" fill="rgb(219,68,16)" rx="2" ry="2" />
+<text  x="174.71" y="399.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::list&lt;std::_List_const_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;, void&gt; (1,560,416 samples, 0.16%)</title><rect x="732.8" y="469" width="1.2" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="735.79" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::MultiModelSpectrumChannel::StartRx (60,346,707 samples, 6.22%)</title><rect x="701.7" y="565" width="48.6" height="15.0" fill="rgb(240,161,38)" rx="2" ry="2" />
+<text  x="704.73" y="575.5" >ns3:..</text>
+</g>
+<g >
+<title>std::_Bit_iterator_base::_M_incr (153,737 samples, 0.02%)</title><rect x="198.6" y="405" width="0.1" height="15.0" fill="rgb(241,165,39)" rx="2" ry="2" />
+<text  x="201.61" y="415.5" ></text>
+</g>
+<g >
+<title>unsigned int&amp; std::__get_helper&lt;1ul, unsigned int, unsigned int&gt; (270,195 samples, 0.03%)</title><rect x="754.8" y="581" width="0.3" height="15.0" fill="rgb(220,71,17)" rx="2" ry="2" />
+<text  x="757.84" y="591.5" ></text>
+</g>
+<g >
+<title>ns3::SbMeasResult_s::SbMeasResult_s (1,067,175 samples, 0.11%)</title><rect x="442.6" y="325" width="0.9" height="15.0" fill="rgb(235,141,33)" rx="2" ry="2" />
+<text  x="445.63" y="335.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt;::_M_range_check (195,616 samples, 0.02%)</title><rect x="208.2" y="469" width="0.1" height="15.0" fill="rgb(242,173,41)" rx="2" ry="2" />
+<text  x="211.16" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt;::operator= (190,707 samples, 0.02%)</title><rect x="93.9" y="453" width="0.1" height="15.0" fill="rgb(252,217,52)" rx="2" ry="2" />
+<text  x="96.88" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumPhy::StartTxUlSrsFrame (887,136 samples, 0.09%)</title><rect x="613.7" y="549" width="0.7" height="15.0" fill="rgb(221,77,18)" rx="2" ry="2" />
+<text  x="616.70" y="559.5" ></text>
+</g>
+<g >
+<title>ns3::PfFfMacScheduler::DoSchedDlTriggerReq (1,650,854 samples, 0.17%)</title><rect x="15.8" y="501" width="1.3" height="15.0" fill="rgb(214,45,10)" rx="2" ry="2" />
+<text  x="18.79" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::PacketTagList::COWTraverse (191,197 samples, 0.02%)</title><rect x="435.4" y="293" width="0.1" height="15.0" fill="rgb(252,219,52)" rx="2" ry="2" />
+<text  x="438.38" y="303.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::~_Vector_base (204,384 samples, 0.02%)</title><rect x="521.5" y="325" width="0.2" height="15.0" fill="rgb(241,168,40)" rx="2" ry="2" />
+<text  x="524.49" y="335.5" ></text>
+</g>
+<g >
+<title>std::tuple&lt;ns3::LteEnbPhy*&gt;::tuple&lt;ns3::LteEnbPhy*&amp;, true, true&gt; (191,013 samples, 0.02%)</title><rect x="53.4" y="469" width="0.1" height="15.0" fill="rgb(215,48,11)" rx="2" ry="2" />
+<text  x="56.38" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Time::ToInteger (236,828 samples, 0.02%)</title><rect x="16.5" y="341" width="0.2" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="19.51" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::PacketBurst (381,561 samples, 0.04%)</title><rect x="370.7" y="517" width="0.3" height="15.0" fill="rgb(208,15,3)" rx="2" ry="2" />
+<text  x="373.73" y="527.5" ></text>
+</g>
+<g >
+<title>double* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, double*&gt; (1,019,777 samples, 0.11%)</title><rect x="412.1" y="469" width="0.9" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="415.13" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::UlInfoListElement_s, std::allocator&lt;ns3::UlInfoListElement_s&gt; &gt;::vector (366,390 samples, 0.04%)</title><rect x="133.5" y="501" width="0.3" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="136.54" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Callback&lt;void, ns3::SpectrumValue const&amp;&gt;::Callback&lt;void  (282,374 samples, 0.03%)</title><rect x="468.4" y="437" width="0.2" height="15.0" fill="rgb(231,122,29)" rx="2" ry="2" />
+<text  x="471.39" y="447.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::allocate (380,371 samples, 0.04%)</title><rect x="363.3" y="421" width="0.3" height="15.0" fill="rgb(238,153,36)" rx="2" ry="2" />
+<text  x="366.34" y="431.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;unsigned char*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;unsigned char*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt; (125,103 samples, 0.01%)</title><rect x="585.5" y="197" width="0.1" height="15.0" fill="rgb(243,176,42)" rx="2" ry="2" />
+<text  x="588.46" y="207.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned int, ns3::RxSpectrumModelInfo, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::RxSpectrumModelInfo&gt; &gt; &gt;::end (128,149 samples, 0.01%)</title><rect x="657.9" y="517" width="0.1" height="15.0" fill="rgb(219,64,15)" rx="2" ry="2" />
+<text  x="660.95" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Function_base::_Base_manager&lt;void  (823,342 samples, 0.08%)</title><rect x="580.2" y="373" width="0.6" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="583.16" y="383.5" ></text>
+</g>
+<g >
+<title>pow (356,086 samples, 0.04%)</title><rect x="486.2" y="517" width="0.3" height="15.0" fill="rgb(254,226,54)" rx="2" ry="2" />
+<text  x="489.19" y="527.5" ></text>
+</g>
+<g >
+<title>decltype  (688,656 samples, 0.07%)</title><rect x="503.4" y="437" width="0.6" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="506.44" y="447.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt;::push_back (445,330 samples, 0.05%)</title><rect x="623.6" y="533" width="0.3" height="15.0" fill="rgb(226,98,23)" rx="2" ry="2" />
+<text  x="626.58" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::EventImpl&gt;::Ptr (787,839 samples, 0.08%)</title><rect x="268.5" y="485" width="0.7" height="15.0" fill="rgb(239,157,37)" rx="2" ry="2" />
+<text  x="271.53" y="495.5" ></text>
+</g>
+<g >
+<title>bool __gnu_cxx::operator==&lt;ns3::HarqProcessInfoElement_t const*, std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; (159,664 samples, 0.02%)</title><rect x="488.9" y="517" width="0.1" height="15.0" fill="rgb(229,114,27)" rx="2" ry="2" />
+<text  x="491.92" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt;::_M_lower_bound (816,432 samples, 0.08%)</title><rect x="171.4" y="421" width="0.7" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="174.43" y="431.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::vector (533,840 samples, 0.06%)</title><rect x="159.1" y="405" width="0.5" height="15.0" fill="rgb(206,9,2)" rx="2" ry="2" />
+<text  x="162.14" y="415.5" ></text>
+</g>
+<g >
+<title>std::remove_reference&lt;double&amp;&gt;::type&amp;&amp; std::move&lt;double&amp;&gt; (160,528 samples, 0.02%)</title><rect x="602.8" y="309" width="0.2" height="15.0" fill="rgb(247,194,46)" rx="2" ry="2" />
+<text  x="605.83" y="319.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned int, std::allocator&lt;unsigned int&gt; &gt;::~_Vector_base (574,638 samples, 0.06%)</title><rect x="697.0" y="485" width="0.4" height="15.0" fill="rgb(214,41,9)" rx="2" ry="2" />
+<text  x="699.96" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultDeleter&lt;ns3::SpectrumValue&gt;::Delete (190,332 samples, 0.02%)</title><rect x="674.2" y="485" width="0.1" height="15.0" fill="rgb(222,79,19)" rx="2" ry="2" />
+<text  x="677.16" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;bool, std::allocator&lt;bool&gt; &gt;::operator[] (162,486 samples, 0.02%)</title><rect x="195.7" y="469" width="0.1" height="15.0" fill="rgb(223,82,19)" rx="2" ry="2" />
+<text  x="198.70" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::GetSize (1,573,815 samples, 0.16%)</title><rect x="627.7" y="533" width="1.2" height="15.0" fill="rgb(229,113,27)" rx="2" ry="2" />
+<text  x="630.67" y="543.5" ></text>
+</g>
+<g >
+<title>void std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::_M_construct_node&lt;std::piecewise_construct_t const&amp;, std::tuple&lt;unsigned short const&amp;&gt;, std::tuple&lt;&gt; &gt; (803,124 samples, 0.08%)</title><rect x="242.8" y="421" width="0.6" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="245.77" y="431.5" ></text>
+</g>
+<g >
+<title>double* std::__uninitialized_default_n_a&lt;double*, unsigned long, double&gt; (1,391,465 samples, 0.14%)</title><rect x="403.4" y="453" width="1.1" height="15.0" fill="rgb(248,199,47)" rx="2" ry="2" />
+<text  x="406.39" y="463.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::deallocate (164,554 samples, 0.02%)</title><rect x="777.0" y="341" width="0.1" height="15.0" fill="rgb(226,99,23)" rx="2" ry="2" />
+<text  x="779.97" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy*&amp; std::forward&lt;ns3::LteEnbPhy*&amp;&gt; (184,660 samples, 0.02%)</title><rect x="49.0" y="581" width="0.2" height="15.0" fill="rgb(238,152,36)" rx="2" ry="2" />
+<text  x="52.01" y="591.5" ></text>
+</g>
+<g >
+<title>ns3::MakeEvent&lt;void  (682,798 samples, 0.07%)</title><rect x="53.3" y="517" width="0.6" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="56.32" y="527.5" ></text>
+</g>
+<g >
+<title>void  (163,364 samples, 0.02%)</title><rect x="423.3" y="389" width="0.1" height="15.0" fill="rgb(253,221,53)" rx="2" ry="2" />
+<text  x="426.31" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::Object::Object (314,930 samples, 0.03%)</title><rect x="627.2" y="485" width="0.2" height="15.0" fill="rgb(242,174,41)" rx="2" ry="2" />
+<text  x="630.18" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::_M_get_Node_allocator (152,998 samples, 0.02%)</title><rect x="193.2" y="405" width="0.1" height="15.0" fill="rgb(252,220,52)" rx="2" ry="2" />
+<text  x="196.21" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::HarqProcessInfoElement_t* std::__copy_move_a1&lt;false, ns3::HarqProcessInfoElement_t const*, ns3::HarqProcessInfoElement_t*&gt; (437,467 samples, 0.05%)</title><rect x="513.1" y="453" width="0.4" height="15.0" fill="rgb(229,112,26)" rx="2" ry="2" />
+<text  x="516.12" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::NetDevice&gt;::Ptr (273,026 samples, 0.03%)</title><rect x="313.1" y="485" width="0.2" height="15.0" fill="rgb(226,98,23)" rx="2" ry="2" />
+<text  x="316.10" y="495.5" ></text>
+</g>
+<g >
+<title>void std::destroy_at&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; (1,143,303 samples, 0.12%)</title><rect x="652.8" y="309" width="0.9" height="15.0" fill="rgb(224,88,21)" rx="2" ry="2" />
+<text  x="655.77" y="319.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::splice (371,326 samples, 0.04%)</title><rect x="734.0" y="453" width="0.3" height="15.0" fill="rgb(220,70,16)" rx="2" ry="2" />
+<text  x="737.04" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt;::~vector (154,796 samples, 0.02%)</title><rect x="131.1" y="373" width="0.1" height="15.0" fill="rgb(234,134,32)" rx="2" ry="2" />
+<text  x="134.12" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::LteInterference::ConditionallyEvaluateChunk (447,530 samples, 0.05%)</title><rect x="607.3" y="533" width="0.3" height="15.0" fill="rgb(243,177,42)" rx="2" ry="2" />
+<text  x="610.25" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter&gt;::~SimpleRefCount (225,570 samples, 0.02%)</title><rect x="454.0" y="197" width="0.2" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="457.05" y="207.5" ></text>
+</g>
+<g >
+<title>ns3::RlcTag::GetTypeId (274,825 samples, 0.03%)</title><rect x="427.2" y="229" width="0.2" height="15.0" fill="rgb(252,216,51)" rx="2" ry="2" />
+<text  x="430.21" y="239.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::SpectrumValue, ns3::Empty, ns3::DefaultDeleter&lt;ns3::SpectrumValue&gt; &gt;::SimpleRefCount (199,860 samples, 0.02%)</title><rect x="411.9" y="501" width="0.2" height="15.0" fill="rgb(254,229,54)" rx="2" ry="2" />
+<text  x="414.89" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;* std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_create_node&lt;std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (1,347,530 samples, 0.14%)</title><rect x="334.2" y="373" width="1.1" height="15.0" fill="rgb(217,56,13)" rx="2" ry="2" />
+<text  x="337.21" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::HigherLayerSelected_s* std::__do_uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::HigherLayerSelected_s const*, std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt; &gt;, ns3::HigherLayerSelected_s*&gt; (151,182 samples, 0.02%)</title><rect x="92.3" y="293" width="0.1" height="15.0" fill="rgb(244,179,43)" rx="2" ry="2" />
+<text  x="95.31" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteControlMessage&gt;&amp; std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::emplace_back&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; const&amp;&gt; (912,598 samples, 0.09%)</title><rect x="355.3" y="501" width="0.7" height="15.0" fill="rgb(224,89,21)" rx="2" ry="2" />
+<text  x="358.27" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt; &gt;::_M_lower_bound (188,402 samples, 0.02%)</title><rect x="114.5" y="437" width="0.2" height="15.0" fill="rgb(253,225,53)" rx="2" ry="2" />
+<text  x="117.51" y="447.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;bool, std::allocator&lt;bool&gt; &gt;::at (666,536 samples, 0.07%)</title><rect x="195.3" y="485" width="0.5" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="198.29" y="495.5" ></text>
+</g>
+<g >
+<title>bool __gnu_cxx::operator==&lt;ns3::BuildRarListElement_s const*, std::vector&lt;ns3::BuildRarListElement_s, std::allocator&lt;ns3::BuildRarListElement_s&gt; &gt; &gt; (158,059 samples, 0.02%)</title><rect x="143.2" y="373" width="0.1" height="15.0" fill="rgb(217,55,13)" rx="2" ry="2" />
+<text  x="146.16" y="383.5" ></text>
+</g>
+<g >
+<title>void std::_Construct&lt;ns3::HigherLayerSelected_s, ns3::HigherLayerSelected_s const&amp;&gt; (371,159 samples, 0.04%)</title><rect x="125.3" y="293" width="0.3" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="128.26" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::MemberLteFfrSapProvider&lt;ns3::LteFrNoOpAlgorithm&gt;::ReportUlCqiInfo (1,540,622 samples, 0.16%)</title><rect x="232.5" y="485" width="1.2" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="235.50" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt;::operator= (153,607 samples, 0.02%)</title><rect x="101.1" y="469" width="0.1" height="15.0" fill="rgb(231,123,29)" rx="2" ry="2" />
+<text  x="104.08" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_get_node (203,653 samples, 0.02%)</title><rect x="706.4" y="373" width="0.2" height="15.0" fill="rgb(221,75,17)" rx="2" ry="2" />
+<text  x="709.45" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;int, std::allocator&lt;int&gt; &gt;::_M_allocate (450,221 samples, 0.05%)</title><rect x="699.6" y="501" width="0.4" height="15.0" fill="rgb(216,52,12)" rx="2" ry="2" />
+<text  x="702.59" y="511.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt;::operator= (6,381,662 samples, 0.66%)</title><rect x="257.6" y="517" width="5.1" height="15.0" fill="rgb(231,123,29)" rx="2" ry="2" />
+<text  x="260.60" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::UeManager::DoInitialize (214,377 samples, 0.02%)</title><rect x="130.4" y="453" width="0.2" height="15.0" fill="rgb(227,103,24)" rx="2" ry="2" />
+<text  x="133.38" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned short const, ns3::SbMeasResult_s&gt; &gt;::operator* (303,780 samples, 0.03%)</title><rect x="183.2" y="485" width="0.2" height="15.0" fill="rgb(222,78,18)" rx="2" ry="2" />
+<text  x="186.21" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::FfMacSchedSapProvider::SchedUlTriggerReqParameters::SchedUlTriggerReqParameters (437,313 samples, 0.05%)</title><rect x="133.5" y="517" width="0.4" height="15.0" fill="rgb(228,106,25)" rx="2" ry="2" />
+<text  x="136.51" y="527.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;bool, std::allocator&lt;bool&gt; &gt;::_M_fill_insert (276,956 samples, 0.03%)</title><rect x="105.6" y="437" width="0.2" height="15.0" fill="rgb(229,112,26)" rx="2" ry="2" />
+<text  x="108.60" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt;::_S_key (486,894 samples, 0.05%)</title><rect x="168.5" y="405" width="0.4" height="15.0" fill="rgb(224,91,21)" rx="2" ry="2" />
+<text  x="171.53" y="415.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::AttributeConstructionList::Item, std::allocator&lt;ns3::AttributeConstructionList::Item&gt; &gt;::_List_base (187,407 samples, 0.02%)</title><rect x="447.9" y="245" width="0.2" height="15.0" fill="rgb(251,212,50)" rx="2" ry="2" />
+<text  x="450.94" y="255.5" ></text>
+</g>
+<g >
+<title>double* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, double*, double&gt; (500,128 samples, 0.05%)</title><rect x="606.5" y="469" width="0.4" height="15.0" fill="rgb(222,79,19)" rx="2" ry="2" />
+<text  x="609.49" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::LteUePhy::CreateTxPowerSpectralDensity (151,318 samples, 0.02%)</title><rect x="614.4" y="533" width="0.1" height="15.0" fill="rgb(241,169,40)" rx="2" ry="2" />
+<text  x="617.41" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumSignalParametersDlCtrlFrame::~LteSpectrumSignalParametersDlCtrlFrame (452,654 samples, 0.05%)</title><rect x="324.1" y="437" width="0.4" height="15.0" fill="rgb(220,69,16)" rx="2" ry="2" />
+<text  x="327.12" y="447.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::~list (309,041 samples, 0.03%)</title><rect x="775.6" y="389" width="0.3" height="15.0" fill="rgb(222,80,19)" rx="2" ry="2" />
+<text  x="778.63" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Bind_helper&lt;std::__or_&lt;std::is_integral&lt;std::decay&lt;void  (662,137 samples, 0.07%)</title><rect x="340.2" y="453" width="0.6" height="15.0" fill="rgb(237,148,35)" rx="2" ry="2" />
+<text  x="343.24" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt;, std::allocator&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt;::_M_valptr (160,795 samples, 0.02%)</title><rect x="184.2" y="469" width="0.1" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="187.16" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt;::erase (3,046,130 samples, 0.31%)</title><rect x="621.1" y="533" width="2.5" height="15.0" fill="rgb(213,39,9)" rx="2" ry="2" />
+<text  x="624.13" y="543.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::PhichListElement_s, std::allocator&lt;ns3::PhichListElement_s&gt; &gt;::~vector (308,027 samples, 0.03%)</title><rect x="229.3" y="453" width="0.2" height="15.0" fill="rgb(247,194,46)" rx="2" ry="2" />
+<text  x="232.30" y="463.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_List_base (164,136 samples, 0.02%)</title><rect x="343.7" y="469" width="0.2" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="346.73" y="479.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::AttributeConstructionList::Item, std::allocator&lt;ns3::AttributeConstructionList::Item&gt; &gt;::_List_impl::_List_impl (147,640 samples, 0.02%)</title><rect x="448.0" y="229" width="0.1" height="15.0" fill="rgb(210,27,6)" rx="2" ry="2" />
+<text  x="450.97" y="239.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt; &gt;::allocate (474,197 samples, 0.05%)</title><rect x="237.5" y="341" width="0.4" height="15.0" fill="rgb(218,61,14)" rx="2" ry="2" />
+<text  x="240.55" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::AntennaModel* ns3::PeekPointer&lt;ns3::AntennaModel&gt; (215,390 samples, 0.02%)</title><rect x="703.9" y="517" width="0.1" height="15.0" fill="rgb(245,186,44)" rx="2" ry="2" />
+<text  x="706.87" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;int, std::allocator&lt;int&gt; &gt;::_Vector_base (166,957 samples, 0.02%)</title><rect x="385.2" y="357" width="0.1" height="15.0" fill="rgb(215,47,11)" rx="2" ry="2" />
+<text  x="388.18" y="367.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::allocate (267,808 samples, 0.03%)</title><rect x="499.4" y="437" width="0.2" height="15.0" fill="rgb(230,118,28)" rx="2" ry="2" />
+<text  x="502.42" y="447.5" ></text>
+</g>
+<g >
+<title>void std::destroy_at&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; (210,243 samples, 0.02%)</title><rect x="576.4" y="309" width="0.2" height="15.0" fill="rgb(216,52,12)" rx="2" ry="2" />
+<text  x="579.43" y="319.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt;::_M_begin (165,524 samples, 0.02%)</title><rect x="432.1" y="293" width="0.1" height="15.0" fill="rgb(249,203,48)" rx="2" ry="2" />
+<text  x="435.11" y="303.5" ></text>
+</g>
+<g >
+<title>void std::destroy_at&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; (682,837 samples, 0.07%)</title><rect x="763.6" y="613" width="0.5" height="15.0" fill="rgb(228,106,25)" rx="2" ry="2" />
+<text  x="766.56" y="623.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_Vector_base (306,796 samples, 0.03%)</title><rect x="677.3" y="453" width="0.2" height="15.0" fill="rgb(237,150,35)" rx="2" ry="2" />
+<text  x="680.28" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::~vector (143,941 samples, 0.01%)</title><rect x="265.3" y="357" width="0.1" height="15.0" fill="rgb(243,174,41)" rx="2" ry="2" />
+<text  x="268.33" y="367.5" ></text>
+</g>
+<g >
+<title>std::function&lt;void  (32,042,329 samples, 3.30%)</title><rect x="579.6" y="405" width="25.8" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="582.59" y="415.5" >s..</text>
+</g>
+<g >
+<title>void std::_Function_base::_Base_manager&lt;std::_Bind&lt;void  (495,402 samples, 0.05%)</title><rect x="340.8" y="421" width="0.4" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="343.78" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::Packet::Copy (449,334 samples, 0.05%)</title><rect x="118.0" y="501" width="0.4" height="15.0" fill="rgb(250,211,50)" rx="2" ry="2" />
+<text  x="121.05" y="511.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, bool&gt;::operator= (194,342 samples, 0.02%)</title><rect x="275.8" y="485" width="0.2" height="15.0" fill="rgb(214,45,10)" rx="2" ry="2" />
+<text  x="278.84" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Function_base::_Base_manager&lt;ns3::Callback&lt;void, std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt;::Callback&lt;void  (334,381 samples, 0.03%)</title><rect x="516.0" y="485" width="0.2" height="15.0" fill="rgb(226,99,23)" rx="2" ry="2" />
+<text  x="518.95" y="495.5" ></text>
+</g>
+<g >
+<title>std::_List_node&lt;ns3::UlDciLteControlMessage&gt;::_M_valptr (143,958 samples, 0.01%)</title><rect x="287.3" y="453" width="0.1" height="15.0" fill="rgb(233,129,30)" rx="2" ry="2" />
+<text  x="290.30" y="463.5" ></text>
+</g>
+<g >
+<title>double* std::__uninitialized_default_n_1&lt;true&gt;::__uninit_default_n&lt;double*, unsigned long&gt; (1,142,786 samples, 0.12%)</title><rect x="403.6" y="421" width="0.9" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="406.56" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::MacCeValue_u::operator= (1,023,273 samples, 0.11%)</title><rect x="685.7" y="469" width="0.8" height="15.0" fill="rgb(222,81,19)" rx="2" ry="2" />
+<text  x="688.72" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Object::DoDelete (3,074,446 samples, 0.32%)</title><rect x="75.4" y="389" width="2.5" height="15.0" fill="rgb(212,34,8)" rx="2" ry="2" />
+<text  x="78.42" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;int, std::allocator&lt;int&gt; &gt;::_Vector_impl_data::_Vector_impl_data (124,596 samples, 0.01%)</title><rect x="594.9" y="213" width="0.1" height="15.0" fill="rgb(211,30,7)" rx="2" ry="2" />
+<text  x="597.90" y="223.5" ></text>
+</g>
+<g >
+<title>std::__allocated_ptr&lt;std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt; &gt;::operator= (187,028 samples, 0.02%)</title><rect x="22.8" y="293" width="0.1" height="15.0" fill="rgb(206,8,2)" rx="2" ry="2" />
+<text  x="25.75" y="303.5" ></text>
+</g>
+<g >
+<title>std::_Bit_iterator std::copy&lt;std::_Bit_const_iterator, std::_Bit_iterator&gt; (308,999 samples, 0.03%)</title><rect x="248.0" y="421" width="0.3" height="15.0" fill="rgb(210,26,6)" rx="2" ry="2" />
+<text  x="251.01" y="431.5" ></text>
+</g>
+<g >
+<title>operator delete (159,299 samples, 0.02%)</title><rect x="454.9" y="229" width="0.1" height="15.0" fill="rgb(247,196,46)" rx="2" ry="2" />
+<text  x="457.92" y="239.5" ></text>
+</g>
+<g >
+<title>ns3::EventImpl*&amp;&amp; std::forward&lt;ns3::EventImpl*&gt; (154,501 samples, 0.02%)</title><rect x="335.0" y="293" width="0.2" height="15.0" fill="rgb(208,15,3)" rx="2" ry="2" />
+<text  x="338.04" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::MacCeListElement_s::MacCeListElement_s (314,209 samples, 0.03%)</title><rect x="129.3" y="405" width="0.2" height="15.0" fill="rgb(223,85,20)" rx="2" ry="2" />
+<text  x="132.27" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::ByteTagIterator::Next (1,253,201 samples, 0.13%)</title><rect x="425.1" y="245" width="1.0" height="15.0" fill="rgb(217,57,13)" rx="2" ry="2" />
+<text  x="428.13" y="255.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::find (741,040 samples, 0.08%)</title><rect x="189.3" y="469" width="0.6" height="15.0" fill="rgb(205,3,0)" rx="2" ry="2" />
+<text  x="192.29" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::SpectrumValue (2,710,426 samples, 0.28%)</title><rect x="402.6" y="501" width="2.1" height="15.0" fill="rgb(211,27,6)" rx="2" ry="2" />
+<text  x="405.56" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::Packet, ns3::Empty, ns3::DefaultDeleter&lt;ns3::Packet&gt; &gt;::Unref (439,896 samples, 0.05%)</title><rect x="502.0" y="325" width="0.3" height="15.0" fill="rgb(215,47,11)" rx="2" ry="2" />
+<text  x="504.99" y="335.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;4ul, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::_Tuple_impl (185,055 samples, 0.02%)</title><rect x="341.0" y="309" width="0.2" height="15.0" fill="rgb(213,41,9)" rx="2" ry="2" />
+<text  x="344.03" y="319.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::operator[] (127,693 samples, 0.01%)</title><rect x="575.9" y="341" width="0.1" height="15.0" fill="rgb(230,116,27)" rx="2" ry="2" />
+<text  x="578.89" y="351.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;::_Rb_tree_iterator (701,037 samples, 0.07%)</title><rect x="760.8" y="677" width="0.6" height="15.0" fill="rgb(223,85,20)" rx="2" ry="2" />
+<text  x="763.82" y="687.5" ></text>
+</g>
+<g >
+<title>std::operator== (157,371 samples, 0.02%)</title><rect x="12.4" y="341" width="0.1" height="15.0" fill="rgb(229,110,26)" rx="2" ry="2" />
+<text  x="15.37" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::HarqStatus_e* std::__uninitialized_move_if_noexcept_a&lt;ns3::DlInfoListElement_s::HarqStatus_e*, ns3::DlInfoListElement_s::HarqStatus_e*, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt; (535,507 samples, 0.06%)</title><rect x="511.3" y="517" width="0.4" height="15.0" fill="rgb(226,100,23)" rx="2" ry="2" />
+<text  x="514.30" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;3ul, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::~_Tuple_impl (4,416,635 samples, 0.46%)</title><rect x="773.7" y="501" width="3.5" height="15.0" fill="rgb(254,225,53)" rx="2" ry="2" />
+<text  x="776.67" y="511.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt; &gt;::destroy&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; (682,837 samples, 0.07%)</title><rect x="763.6" y="629" width="0.5" height="15.0" fill="rgb(248,199,47)" rx="2" ry="2" />
+<text  x="766.56" y="639.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_M_erase (193,911 samples, 0.02%)</title><rect x="104.0" y="405" width="0.1" height="15.0" fill="rgb(219,64,15)" rx="2" ry="2" />
+<text  x="106.96" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_header::_M_reset (155,888 samples, 0.02%)</title><rect x="506.7" y="517" width="0.1" height="15.0" fill="rgb(238,151,36)" rx="2" ry="2" />
+<text  x="509.69" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_begin (350,813 samples, 0.04%)</title><rect x="273.4" y="437" width="0.3" height="15.0" fill="rgb(238,154,36)" rx="2" ry="2" />
+<text  x="276.40" y="447.5" ></text>
+</g>
+<g >
+<title>std::tuple&lt;ns3::LteEnbPhy*&gt;::tuple&lt;ns3::LteEnbPhy*&amp;, true, true&gt; (308,535 samples, 0.03%)</title><rect x="282.8" y="469" width="0.2" height="15.0" fill="rgb(215,48,11)" rx="2" ry="2" />
+<text  x="285.75" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Packet&gt;::Acquire (125,666 samples, 0.01%)</title><rect x="560.0" y="245" width="0.1" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="563.02" y="255.5" ></text>
+</g>
+<g >
+<title> (367,419 samples, 0.04%)</title><rect x="492.8" y="533" width="0.3" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="495.78" y="543.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::end (160,898 samples, 0.02%)</title><rect x="590.2" y="245" width="0.1" height="15.0" fill="rgb(214,44,10)" rx="2" ry="2" />
+<text  x="593.18" y="255.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::vector&lt;int, std::allocator&lt;int&gt; &gt;, std::allocator&lt;std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt; &gt;::at (596,297 samples, 0.06%)</title><rect x="700.9" y="549" width="0.5" height="15.0" fill="rgb(236,145,34)" rx="2" ry="2" />
+<text  x="703.94" y="559.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::allocate (185,306 samples, 0.02%)</title><rect x="661.1" y="341" width="0.1" height="15.0" fill="rgb(236,145,34)" rx="2" ry="2" />
+<text  x="664.08" y="351.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;* std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_create_node&lt;std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (1,753,857 samples, 0.18%)</title><rect x="270.1" y="421" width="1.4" height="15.0" fill="rgb(217,56,13)" rx="2" ry="2" />
+<text  x="273.14" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::MakeEvent&lt;void  (892,230,301 samples, 92.00%)</title><rect x="40.6" y="709" width="717.6" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="43.58" y="719.5" >ns3::MakeEvent&lt;void </text>
+</g>
+<g >
+<title>std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;* std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_create_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; const&amp;&gt; (1,255,265 samples, 0.13%)</title><rect x="499.1" y="485" width="1.0" height="15.0" fill="rgb(230,116,27)" rx="2" ry="2" />
+<text  x="502.11" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::ObjectDeleter::Delete (1,777,558 samples, 0.18%)</title><rect x="652.6" y="405" width="1.4" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="655.59" y="415.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;bool, std::allocator&lt;bool&gt; &gt;::_M_check_len (436,269 samples, 0.04%)</title><rect x="198.7" y="437" width="0.4" height="15.0" fill="rgb(226,100,23)" rx="2" ry="2" />
+<text  x="201.73" y="447.5" ></text>
+</g>
+<g >
+<title>malloc (487,893 samples, 0.05%)</title><rect x="407.7" y="357" width="0.4" height="15.0" fill="rgb(230,119,28)" rx="2" ry="2" />
+<text  x="410.68" y="367.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_List_impl::_List_impl (336,148 samples, 0.03%)</title><rect x="517.0" y="405" width="0.3" height="15.0" fill="rgb(244,183,43)" rx="2" ry="2" />
+<text  x="520.02" y="415.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned char, std::map&lt;unsigned char, ns3::LteMacSapProvider*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, std::map&lt;unsigned char, ns3::LteMacSapProvider*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt; &gt; &gt; &gt; &gt;::end (242,528 samples, 0.03%)</title><rect x="552.8" y="213" width="0.2" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="555.82" y="223.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt; &gt; &gt;::find (767,082 samples, 0.08%)</title><rect x="186.4" y="469" width="0.6" height="15.0" fill="rgb(222,81,19)" rx="2" ry="2" />
+<text  x="189.42" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbMac::DoSchedUlConfigInd (308,659 samples, 0.03%)</title><rect x="103.6" y="453" width="0.3" height="15.0" fill="rgb(246,188,45)" rx="2" ry="2" />
+<text  x="106.62" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::GetSize (264,448 samples, 0.03%)</title><rect x="684.7" y="501" width="0.2" height="15.0" fill="rgb(229,113,27)" rx="2" ry="2" />
+<text  x="687.68" y="511.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Callback&lt;void, ns3::Ptr&lt;ns3::MobilityModel const&gt;, ns3::Ptr&lt;ns3::MobilityModel const&gt;, double, double, double, double&gt;, std::allocator&lt;ns3::Callback&lt;void, ns3::Ptr&lt;ns3::MobilityModel const&gt;, ns3::Ptr&lt;ns3::MobilityModel const&gt;, double, double, double, double&gt; &gt; &gt;::begin (239,520 samples, 0.02%)</title><rect x="746.4" y="533" width="0.2" height="15.0" fill="rgb(238,153,36)" rx="2" ry="2" />
+<text  x="749.37" y="543.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Buffer::Data*, std::allocator&lt;ns3::Buffer::Data*&gt; &gt;::back (335,354 samples, 0.03%)</title><rect x="556.0" y="181" width="0.2" height="15.0" fill="rgb(242,172,41)" rx="2" ry="2" />
+<text  x="558.96" y="191.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumModel const&gt;::~Ptr (199,027 samples, 0.02%)</title><rect x="773.0" y="437" width="0.1" height="15.0" fill="rgb(218,61,14)" rx="2" ry="2" />
+<text  x="775.97" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Object::DoDelete (4,924,388 samples, 0.51%)</title><rect x="451.1" y="261" width="4.0" height="15.0" fill="rgb(212,34,8)" rx="2" ry="2" />
+<text  x="454.12" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::HarqStatus_e* std::__uninitialized_copy_a&lt;std::move_iterator&lt;ns3::DlInfoListElement_s::HarqStatus_e*&gt;, ns3::DlInfoListElement_s::HarqStatus_e*, ns3::DlInfoListElement_s::HarqStatus_e&gt; (347,263 samples, 0.04%)</title><rect x="511.3" y="501" width="0.3" height="15.0" fill="rgb(254,228,54)" rx="2" ry="2" />
+<text  x="514.33" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::HarqStatus_e* std::__uninitialized_copy&lt;true&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::DlInfoListElement_s::HarqStatus_e const*, std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt; &gt;, ns3::DlInfoListElement_s::HarqStatus_e*&gt; (683,830 samples, 0.07%)</title><rect x="444.1" y="277" width="0.6" height="15.0" fill="rgb(241,165,39)" rx="2" ry="2" />
+<text  x="447.11" y="287.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_Rb_tree (459,078 samples, 0.05%)</title><rect x="104.5" y="453" width="0.3" height="15.0" fill="rgb(223,86,20)" rx="2" ry="2" />
+<text  x="107.45" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::LogComponent::IsEnabled (288,439 samples, 0.03%)</title><rect x="548.4" y="85" width="0.2" height="15.0" fill="rgb(214,43,10)" rx="2" ry="2" />
+<text  x="551.35" y="95.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteSpectrumSignalParametersDlCtrlFrame&gt; ns3::DynamicCast&lt;ns3::LteSpectrumSignalParametersDlCtrlFrame, ns3::SpectrumSignalParameters&gt; (649,747 samples, 0.07%)</title><rect x="735.6" y="533" width="0.6" height="15.0" fill="rgb(240,161,38)" rx="2" ry="2" />
+<text  x="738.65" y="543.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;bool, std::allocator&lt;bool&gt; &gt;::resize (2,656,618 samples, 0.27%)</title><rect x="246.8" y="485" width="2.2" height="15.0" fill="rgb(219,68,16)" rx="2" ry="2" />
+<text  x="249.83" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::_M_check_len (294,493 samples, 0.03%)</title><rect x="590.6" y="229" width="0.3" height="15.0" fill="rgb(229,114,27)" rx="2" ry="2" />
+<text  x="593.61" y="239.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::_M_destroy_node (419,586 samples, 0.04%)</title><rect x="193.2" y="421" width="0.4" height="15.0" fill="rgb(209,19,4)" rx="2" ry="2" />
+<text  x="196.21" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Any_data::_M_access (156,527 samples, 0.02%)</title><rect x="283.9" y="437" width="0.1" height="15.0" fill="rgb(219,68,16)" rx="2" ry="2" />
+<text  x="286.90" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_Vector_impl::_Vector_impl (221,723 samples, 0.02%)</title><rect x="239.8" y="261" width="0.2" height="15.0" fill="rgb(208,15,3)" rx="2" ry="2" />
+<text  x="242.80" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::HigherLayerSelected_s* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::HigherLayerSelected_s const*, std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt; &gt;, ns3::HigherLayerSelected_s*&gt; (324,739 samples, 0.03%)</title><rect x="593.3" y="229" width="0.3" height="15.0" fill="rgb(230,118,28)" rx="2" ry="2" />
+<text  x="596.31" y="239.5" ></text>
+</g>
+<g >
+<title>void std::__relocate_object_a&lt;ns3::HigherLayerSelected_s, ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt; (878,397 samples, 0.09%)</title><rect x="595.5" y="213" width="0.7" height="15.0" fill="rgb(208,17,4)" rx="2" ry="2" />
+<text  x="598.52" y="223.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_List_impl::_List_impl (210,164 samples, 0.02%)</title><rect x="610.4" y="517" width="0.2" height="15.0" fill="rgb(244,183,43)" rx="2" ry="2" />
+<text  x="613.39" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Bvector_base&lt;std::allocator&lt;bool&gt; &gt;::_Bvector_impl_data::_M_reset (230,239 samples, 0.02%)</title><rect x="195.8" y="453" width="0.2" height="15.0" fill="rgb(233,129,31)" rx="2" ry="2" />
+<text  x="198.83" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_M_deallocate (276,642 samples, 0.03%)</title><rect x="233.3" y="293" width="0.2" height="15.0" fill="rgb(240,162,38)" rx="2" ry="2" />
+<text  x="236.27" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::LteInterference::StartRx (5,493,483 samples, 0.57%)</title><rect x="715.9" y="517" width="4.4" height="15.0" fill="rgb(213,37,9)" rx="2" ry="2" />
+<text  x="718.88" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Function_handler&lt;void  (16,143,749 samples, 1.66%)</title><rect x="470.8" y="389" width="13.0" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="473.80" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::Object::~Object (187,951 samples, 0.02%)</title><rect x="653.7" y="341" width="0.2" height="15.0" fill="rgb(229,110,26)" rx="2" ry="2" />
+<text  x="656.72" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::EnbMacMemberFfMacSchedSapUser::SchedUlConfigInd (577,569 samples, 0.06%)</title><rect x="103.4" y="469" width="0.5" height="15.0" fill="rgb(231,121,29)" rx="2" ry="2" />
+<text  x="106.41" y="479.5" ></text>
+</g>
+<g >
+<title>std::tuple&lt;ns3::MultiModelSpectrumChannel*, ns3::Ptr&lt;ns3::SpectrumValue&gt;, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::tuple (411,266 samples, 0.04%)</title><rect x="87.6" y="405" width="0.4" height="15.0" fill="rgb(232,125,30)" rx="2" ry="2" />
+<text  x="90.62" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::TagBuffer::WriteU8 (158,006 samples, 0.02%)</title><rect x="554.7" y="213" width="0.1" height="15.0" fill="rgb(219,64,15)" rx="2" ry="2" />
+<text  x="557.69" y="223.5" ></text>
+</g>
+<g >
+<title>ns3::RlcTag::RlcTag (398,815 samples, 0.04%)</title><rect x="427.6" y="261" width="0.3" height="15.0" fill="rgb(228,109,26)" rx="2" ry="2" />
+<text  x="430.59" y="271.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::operator= (476,320 samples, 0.05%)</title><rect x="483.3" y="309" width="0.4" height="15.0" fill="rgb(243,175,42)" rx="2" ry="2" />
+<text  x="486.27" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::operator[] (159,219 samples, 0.02%)</title><rect x="601.6" y="325" width="0.1" height="15.0" fill="rgb(248,202,48)" rx="2" ry="2" />
+<text  x="604.56" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::HarqStatus_e* std::__copy_move_a1&lt;true, ns3::DlInfoListElement_s::HarqStatus_e*, ns3::DlInfoListElement_s::HarqStatus_e*&gt; (155,079 samples, 0.02%)</title><rect x="511.4" y="421" width="0.1" height="15.0" fill="rgb(221,74,17)" rx="2" ry="2" />
+<text  x="514.40" y="431.5" ></text>
+</g>
+<g >
+<title>[libm.so.6] (156,224 samples, 0.02%)</title><rect x="681.5" y="501" width="0.2" height="15.0" fill="rgb(208,16,4)" rx="2" ry="2" />
+<text  x="684.55" y="511.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_List_impl::_List_impl (241,099 samples, 0.02%)</title><rect x="497.8" y="517" width="0.2" height="15.0" fill="rgb(244,183,43)" rx="2" ry="2" />
+<text  x="500.82" y="527.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;*, std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; std::__copy_move_a&lt;true, __gnu_cxx::__normal_iterator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;*, std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;*, std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; (536,978 samples, 0.06%)</title><rect x="119.7" y="469" width="0.5" height="15.0" fill="rgb(233,131,31)" rx="2" ry="2" />
+<text  x="122.74" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::EventImpl, ns3::Empty, ns3::DefaultDeleter&lt;ns3::EventImpl&gt; &gt;::Unref (977,824 samples, 0.10%)</title><rect x="640.2" y="501" width="0.7" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="643.15" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::IidManager::GetAttributeN (954,513 samples, 0.10%)</title><rect x="541.0" y="245" width="0.8" height="15.0" fill="rgb(232,125,30)" rx="2" ry="2" />
+<text  x="544.03" y="255.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; &gt; &gt;::_M_valptr (275,542 samples, 0.03%)</title><rect x="455.9" y="245" width="0.2" height="15.0" fill="rgb(219,68,16)" rx="2" ry="2" />
+<text  x="458.92" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt;* std::__copy_move_a1&lt;true, ns3::Ptr&lt;ns3::PacketBurst&gt;*, ns3::Ptr&lt;ns3::PacketBurst&gt;*&gt; (497,602 samples, 0.05%)</title><rect x="119.8" y="453" width="0.4" height="15.0" fill="rgb(219,68,16)" rx="2" ry="2" />
+<text  x="122.77" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::LteRadioBearerTag::LteRadioBearerTag (284,170 samples, 0.03%)</title><rect x="561.0" y="197" width="0.2" height="15.0" fill="rgb(220,71,17)" rx="2" ry="2" />
+<text  x="564.01" y="207.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::GetTypeId (206,883 samples, 0.02%)</title><rect x="543.6" y="293" width="0.2" height="15.0" fill="rgb(216,54,13)" rx="2" ry="2" />
+<text  x="546.61" y="303.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;::push_back (3,021,585 samples, 0.31%)</title><rect x="722.8" y="517" width="2.4" height="15.0" fill="rgb(250,209,50)" rx="2" ry="2" />
+<text  x="725.81" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::Time::ToInteger (261,832 samples, 0.03%)</title><rect x="493.7" y="533" width="0.2" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="496.69" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::SpectrumValue (1,206,985 samples, 0.12%)</title><rect x="729.4" y="469" width="0.9" height="15.0" fill="rgb(211,27,6)" rx="2" ry="2" />
+<text  x="732.37" y="479.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;unsigned short&gt;::allocate (337,690 samples, 0.03%)</title><rect x="520.2" y="245" width="0.2" height="15.0" fill="rgb(214,44,10)" rx="2" ry="2" />
+<text  x="523.16" y="255.5" ></text>
+</g>
+<g >
+<title>void std::destroy_at&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; (142,224 samples, 0.01%)</title><rect x="634.7" y="293" width="0.1" height="15.0" fill="rgb(224,88,21)" rx="2" ry="2" />
+<text  x="637.73" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::Angles::CheckIfValid (194,633 samples, 0.02%)</title><rect x="311.0" y="453" width="0.2" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="314.04" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::PfFfMacScheduler::RefreshUlCqiMaps (631,523 samples, 0.07%)</title><rect x="233.7" y="485" width="0.6" height="15.0" fill="rgb(220,70,16)" rx="2" ry="2" />
+<text  x="236.74" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::_M_get_Tp_allocator (239,915 samples, 0.02%)</title><rect x="480.2" y="261" width="0.2" height="15.0" fill="rgb(208,16,4)" rx="2" ry="2" />
+<text  x="483.24" y="271.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::_Vector_impl_data::_Vector_impl_data (204,699 samples, 0.02%)</title><rect x="478.0" y="229" width="0.2" height="15.0" fill="rgb(215,48,11)" rx="2" ry="2" />
+<text  x="481.02" y="239.5" ></text>
+</g>
+<g >
+<title>ns3::Callback&lt;void, unsigned short, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;::operator (1,399,576 samples, 0.14%)</title><rect x="725.5" y="517" width="1.2" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="728.53" y="527.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::_M_insert&lt;ns3::Ptr&lt;ns3::Packet&gt; const&amp;&gt; (645,709 samples, 0.07%)</title><rect x="68.8" y="421" width="0.5" height="15.0" fill="rgb(234,135,32)" rx="2" ry="2" />
+<text  x="71.83" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::AddPacket (307,397 samples, 0.03%)</title><rect x="118.4" y="501" width="0.3" height="15.0" fill="rgb(207,10,2)" rx="2" ry="2" />
+<text  x="121.41" y="511.5" ></text>
+</g>
+<g >
+<title>operator new[] (234,036 samples, 0.02%)</title><rect x="33.1" y="341" width="0.1" height="15.0" fill="rgb(227,103,24)" rx="2" ry="2" />
+<text  x="36.06" y="351.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::HigherLayerSelected_s*, std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt; &gt; std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;ns3::HigherLayerSelected_s const*, std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;ns3::HigherLayerSelected_s*, std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt; &gt; &gt; (337,592 samples, 0.03%)</title><rect x="585.7" y="213" width="0.3" height="15.0" fill="rgb(228,109,26)" rx="2" ry="2" />
+<text  x="588.68" y="223.5" ></text>
+</g>
+<g >
+<title>std::_Function_base::_Base_manager&lt;std::_Bind&lt;void  (151,215 samples, 0.02%)</title><rect x="640.8" y="373" width="0.1" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="643.82" y="383.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::operator= (865,226 samples, 0.09%)</title><rect x="730.5" y="469" width="0.7" height="15.0" fill="rgb(243,175,42)" rx="2" ry="2" />
+<text  x="733.54" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt; &gt; &gt;::_M_erase (330,114 samples, 0.03%)</title><rect x="110.5" y="501" width="0.2" height="15.0" fill="rgb(228,109,26)" rx="2" ry="2" />
+<text  x="113.47" y="511.5" ></text>
+</g>
+<g >
+<title>double* std::__uninitialized_default_n&lt;double*, unsigned long&gt; (355,888 samples, 0.04%)</title><rect x="57.0" y="421" width="0.3" height="15.0" fill="rgb(231,123,29)" rx="2" ry="2" />
+<text  x="60.04" y="431.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, unsigned char, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, unsigned char&gt; &gt; &gt;::find (1,128,415 samples, 0.12%)</title><rect x="135.9" y="485" width="0.9" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="138.87" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_get_node (153,956 samples, 0.02%)</title><rect x="658.6" y="437" width="0.1" height="15.0" fill="rgb(251,215,51)" rx="2" ry="2" />
+<text  x="661.57" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt;::_M_allocate (160,120 samples, 0.02%)</title><rect x="443.1" y="261" width="0.1" height="15.0" fill="rgb(247,197,47)" rx="2" ry="2" />
+<text  x="446.10" y="271.5" ></text>
+</g>
+<g >
+<title>std::less&lt;unsigned char&gt;::operator (167,620 samples, 0.02%)</title><rect x="568.5" y="245" width="0.1" height="15.0" fill="rgb(250,210,50)" rx="2" ry="2" />
+<text  x="571.46" y="255.5" ></text>
+</g>
+<g >
+<title> (199,807 samples, 0.02%)</title><rect x="322.9" y="485" width="0.2" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="325.91" y="495.5" ></text>
+</g>
+<g >
+<title>std::this_thread::get_id (811,600 samples, 0.08%)</title><rect x="279.7" y="501" width="0.7" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="282.72" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::PacketTagList::~PacketTagList (284,832 samples, 0.03%)</title><rect x="548.8" y="117" width="0.3" height="15.0" fill="rgb(223,87,20)" rx="2" ry="2" />
+<text  x="551.84" y="127.5" ></text>
+</g>
+<g >
+<title>std::_Bind&lt;void  (1,517,738 samples, 0.16%)</title><rect x="281.8" y="485" width="1.2" height="15.0" fill="rgb(253,221,52)" rx="2" ry="2" />
+<text  x="284.78" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumPhy::StartTxDataFrame (46,273,897 samples, 4.77%)</title><rect x="636.6" y="549" width="37.2" height="15.0" fill="rgb(242,171,40)" rx="2" ry="2" />
+<text  x="639.57" y="559.5" >ns3..</text>
+</g>
+<g >
+<title>ns3::LteSpectrumPhy::StartRxDlCtrl (11,425,137 samples, 1.18%)</title><rect x="725.2" y="533" width="9.2" height="15.0" fill="rgb(215,48,11)" rx="2" ry="2" />
+<text  x="728.24" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::MemberLteFfrSapProvider&lt;ns3::LteFrNoOpAlgorithm&gt;::GetAvailableDlRbg (918,216 samples, 0.09%)</title><rect x="175.5" y="485" width="0.7" height="15.0" fill="rgb(217,56,13)" rx="2" ry="2" />
+<text  x="178.48" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::MacCeListElement_s::MacCeListElement_s (1,971,723 samples, 0.20%)</title><rect x="686.7" y="501" width="1.5" height="15.0" fill="rgb(223,85,20)" rx="2" ry="2" />
+<text  x="689.66" y="511.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_List_base (195,602 samples, 0.02%)</title><rect x="721.4" y="485" width="0.1" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="724.37" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::CqiListElement_s, std::allocator&lt;ns3::CqiListElement_s&gt; &gt;::max_size (266,439 samples, 0.03%)</title><rect x="127.9" y="469" width="0.2" height="15.0" fill="rgb(211,29,6)" rx="2" ry="2" />
+<text  x="130.86" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; const&amp; std::forward&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; const&amp;&gt; (158,064 samples, 0.02%)</title><rect x="354.3" y="501" width="0.1" height="15.0" fill="rgb(252,216,51)" rx="2" ry="2" />
+<text  x="357.30" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Object::~Object (194,631 samples, 0.02%)</title><rect x="120.0" y="309" width="0.2" height="15.0" fill="rgb(229,110,26)" rx="2" ry="2" />
+<text  x="123.02" y="319.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;signed char const*, std::vector&lt;signed char, std::allocator&lt;signed char&gt; &gt; &gt;::difference_type __gnu_cxx::operator-&lt;signed char const*, std::vector&lt;signed char, std::allocator&lt;signed char&gt; &gt; &gt; (153,078 samples, 0.02%)</title><rect x="532.3" y="325" width="0.1" height="15.0" fill="rgb(213,37,8)" rx="2" ry="2" />
+<text  x="535.28" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy::GeneratePowerAllocationMap (4,944,219 samples, 0.51%)</title><rect x="292.4" y="549" width="4.0" height="15.0" fill="rgb(247,197,47)" rx="2" ry="2" />
+<text  x="295.43" y="559.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;::push_back (875,814 samples, 0.09%)</title><rect x="382.7" y="533" width="0.7" height="15.0" fill="rgb(211,29,7)" rx="2" ry="2" />
+<text  x="385.68" y="543.5" ></text>
+</g>
+<g >
+<title>std::__fill_a1 (312,132 samples, 0.03%)</title><rect x="200.7" y="405" width="0.2" height="15.0" fill="rgb(209,19,4)" rx="2" ry="2" />
+<text  x="203.66" y="415.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;bool, std::allocator&lt;bool&gt; &gt;::cbegin (159,970 samples, 0.02%)</title><rect x="200.9" y="453" width="0.1" height="15.0" fill="rgb(241,166,39)" rx="2" ry="2" />
+<text  x="203.91" y="463.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;int const, double&gt; &gt; &gt; &gt;::construct&lt;std::pair&lt;int const, double&gt;, std::pair&lt;int const, double&gt; const&amp;&gt; (164,321 samples, 0.02%)</title><rect x="59.7" y="373" width="0.1" height="15.0" fill="rgb(229,110,26)" rx="2" ry="2" />
+<text  x="62.71" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumPhy*&amp; std::forward&lt;ns3::LteSpectrumPhy*&amp;&gt; (158,008 samples, 0.02%)</title><rect x="306.5" y="405" width="0.1" height="15.0" fill="rgb(222,78,18)" rx="2" ry="2" />
+<text  x="309.51" y="415.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_clear (414,587 samples, 0.04%)</title><rect x="576.3" y="341" width="0.3" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="579.26" y="351.5" ></text>
+</g>
+<g >
+<title>[libc.so.6] (158,177 samples, 0.02%)</title><rect x="460.7" y="133" width="0.1" height="15.0" fill="rgb(223,84,20)" rx="2" ry="2" />
+<text  x="463.72" y="143.5" ></text>
+</g>
+<g >
+<title>ns3::IidManager::GetAttributeN (771,224 samples, 0.08%)</title><rect x="373.1" y="453" width="0.6" height="15.0" fill="rgb(232,125,30)" rx="2" ry="2" />
+<text  x="376.09" y="463.5" ></text>
+</g>
+<g >
+<title>void std::_Function_base::_Base_manager&lt;std::_Bind&lt;void  (151,076 samples, 0.02%)</title><rect x="109.9" y="453" width="0.1" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="112.87" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::LteUePhy*&amp; std::__get_helper&lt;0ul, ns3::LteUePhy*, unsigned int, unsigned int&gt; (184,584 samples, 0.02%)</title><rect x="753.8" y="581" width="0.2" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="756.82" y="591.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;* std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::_M_create_node&lt;std::piecewise_construct_t const&amp;, std::tuple&lt;unsigned short const&amp;&gt;, std::tuple&lt;&gt; &gt; (1,505,468 samples, 0.16%)</title><rect x="190.8" y="437" width="1.2" height="15.0" fill="rgb(231,123,29)" rx="2" ry="2" />
+<text  x="193.82" y="447.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::at (320,661 samples, 0.03%)</title><rect x="589.2" y="245" width="0.2" height="15.0" fill="rgb(247,196,47)" rx="2" ry="2" />
+<text  x="592.16" y="255.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Ptr&lt;ns3::Object&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Object&gt; &gt; &gt;::clear (202,759 samples, 0.02%)</title><rect x="77.3" y="325" width="0.1" height="15.0" fill="rgb(241,167,40)" rx="2" ry="2" />
+<text  x="80.27" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::Object::~Object (611,395 samples, 0.06%)</title><rect x="635.0" y="325" width="0.5" height="15.0" fill="rgb(229,110,26)" rx="2" ry="2" />
+<text  x="638.01" y="335.5" ></text>
+</g>
+<g >
+<title>[libm.so.6] (230,207 samples, 0.02%)</title><rect x="702.7" y="501" width="0.2" height="15.0" fill="rgb(208,16,4)" rx="2" ry="2" />
+<text  x="705.73" y="511.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::begin (158,175 samples, 0.02%)</title><rect x="648.1" y="405" width="0.2" height="15.0" fill="rgb(206,6,1)" rx="2" ry="2" />
+<text  x="651.14" y="415.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt;::construct&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, ns3::Ptr&lt;ns3::LteControlMessage&gt; const&amp;&gt; (153,618 samples, 0.02%)</title><rect x="689.5" y="405" width="0.1" height="15.0" fill="rgb(231,120,28)" rx="2" ry="2" />
+<text  x="692.48" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter&gt;::~SimpleRefCount (245,743 samples, 0.03%)</title><rect x="77.0" y="325" width="0.2" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="80.04" y="335.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt;::_M_allocate (201,689 samples, 0.02%)</title><rect x="584.0" y="213" width="0.1" height="15.0" fill="rgb(247,197,47)" rx="2" ry="2" />
+<text  x="586.96" y="223.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt;::at (497,296 samples, 0.05%)</title><rect x="156.4" y="421" width="0.4" height="15.0" fill="rgb(246,188,45)" rx="2" ry="2" />
+<text  x="159.38" y="431.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::operator= (149,250 samples, 0.02%)</title><rect x="114.3" y="437" width="0.1" height="15.0" fill="rgb(251,215,51)" rx="2" ry="2" />
+<text  x="117.30" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::EnbMacMemberLteEnbPhySapUser::ReceivePhyPdu (14,054,177 samples, 1.45%)</title><rect x="423.6" y="357" width="11.3" height="15.0" fill="rgb(227,103,24)" rx="2" ry="2" />
+<text  x="426.61" y="367.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt;::_M_addr (270,625 samples, 0.03%)</title><rect x="369.4" y="469" width="0.2" height="15.0" fill="rgb(219,68,16)" rx="2" ry="2" />
+<text  x="372.41" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::SpectrumValue (323,152 samples, 0.03%)</title><rect x="414.3" y="517" width="0.3" height="15.0" fill="rgb(211,27,6)" rx="2" ry="2" />
+<text  x="417.31" y="527.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::AttributeConstructionList::Item, std::allocator&lt;ns3::AttributeConstructionList::Item&gt; &gt;::_List_impl::_List_impl (461,286 samples, 0.05%)</title><rect x="371.6" y="453" width="0.4" height="15.0" fill="rgb(210,27,6)" rx="2" ry="2" />
+<text  x="374.60" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Bind&lt;void  (151,076 samples, 0.02%)</title><rect x="109.9" y="437" width="0.1" height="15.0" fill="rgb(253,221,52)" rx="2" ry="2" />
+<text  x="112.87" y="447.5" ></text>
+</g>
+<g >
+<title>std::operator+ (162,486 samples, 0.02%)</title><rect x="195.7" y="437" width="0.1" height="15.0" fill="rgb(239,157,37)" rx="2" ry="2" />
+<text  x="198.70" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_Rb_tree (158,119 samples, 0.02%)</title><rect x="340.6" y="277" width="0.2" height="15.0" fill="rgb(252,219,52)" rx="2" ry="2" />
+<text  x="343.65" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::PacketBurst (1,087,646 samples, 0.11%)</title><rect x="629.0" y="517" width="0.9" height="15.0" fill="rgb(208,15,3)" rx="2" ry="2" />
+<text  x="632.00" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::operator&lt; (412,114 samples, 0.04%)</title><rect x="664.0" y="373" width="0.3" height="15.0" fill="rgb(234,137,32)" rx="2" ry="2" />
+<text  x="667.01" y="383.5" ></text>
+</g>
+<g >
+<title>unsigned int* std::__uninitialized_fill_n&lt;true&gt;::__uninit_fill_n&lt;unsigned int*, unsigned long, unsigned int&gt; (908,274 samples, 0.09%)</title><rect x="695.7" y="437" width="0.7" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="698.71" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst const&gt;::Ptr&lt;ns3::PacketBurst&gt; (233,298 samples, 0.02%)</title><rect x="670.7" y="533" width="0.2" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="673.74" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::MacCeListElement_s* std::__uninitialized_copy&lt;false&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::MacCeListElement_s*, std::vector&lt;ns3::MacCeListElement_s, std::allocator&lt;ns3::MacCeListElement_s&gt; &gt; &gt;, ns3::MacCeListElement_s*&gt; (921,768 samples, 0.10%)</title><rect x="128.8" y="453" width="0.7" height="15.0" fill="rgb(222,81,19)" rx="2" ry="2" />
+<text  x="131.78" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::vector (485,304 samples, 0.05%)</title><rect x="439.4" y="421" width="0.4" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="442.45" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Bind_helper&lt;std::__or_&lt;std::is_integral&lt;std::decay&lt;void  (266,478 samples, 0.03%)</title><rect x="53.3" y="501" width="0.2" height="15.0" fill="rgb(237,148,35)" rx="2" ry="2" />
+<text  x="56.32" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt;, std::allocator&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt; &gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt;, std::allocator&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt;, std::allocator&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt;::_S_key (686,320 samples, 0.07%)</title><rect x="188.3" y="437" width="0.5" height="15.0" fill="rgb(208,17,4)" rx="2" ry="2" />
+<text  x="191.26" y="447.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;int&gt;::allocate (152,677 samples, 0.02%)</title><rect x="397.5" y="469" width="0.1" height="15.0" fill="rgb(212,34,8)" rx="2" ry="2" />
+<text  x="400.46" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;* std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_copy&lt;false, std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_Alloc_node&gt; (155,456 samples, 0.02%)</title><rect x="341.2" y="421" width="0.2" height="15.0" fill="rgb(251,212,50)" rx="2" ry="2" />
+<text  x="344.24" y="431.5" ></text>
+</g>
+<g >
+<title>std::_List_node&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt;::_M_valptr (361,692 samples, 0.04%)</title><rect x="496.0" y="533" width="0.3" height="15.0" fill="rgb(215,46,11)" rx="2" ry="2" />
+<text  x="498.99" y="543.5" ></text>
+</g>
+<g >
+<title>decltype  (194,571 samples, 0.02%)</title><rect x="461.6" y="277" width="0.1" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="464.55" y="287.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteUeMac::LcInfo&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteUeMac::LcInfo&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteUeMac::LcInfo&gt; &gt; &gt;::find (1,135,998 samples, 0.12%)</title><rect x="437.6" y="309" width="0.9" height="15.0" fill="rgb(216,54,13)" rx="2" ry="2" />
+<text  x="440.60" y="319.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; &gt; &gt;::_M_mbegin (309,940 samples, 0.03%)</title><rect x="523.0" y="293" width="0.3" height="15.0" fill="rgb(230,118,28)" rx="2" ry="2" />
+<text  x="526.00" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::Singleton&lt;ns3::IidManager&gt;::Get (195,646 samples, 0.02%)</title><rect x="541.8" y="245" width="0.2" height="15.0" fill="rgb(222,79,19)" rx="2" ry="2" />
+<text  x="544.83" y="255.5" ></text>
+</g>
+<g >
+<title>void std::destroy_at&lt;ns3::CqiListElement_s&gt; (933,761 samples, 0.10%)</title><rect x="255.0" y="405" width="0.7" height="15.0" fill="rgb(208,15,3)" rx="2" ry="2" />
+<text  x="257.97" y="415.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::__uninitialized_fill_n_a&lt;unsigned char*, unsigned long, unsigned char, unsigned char&gt; (492,278 samples, 0.05%)</title><rect x="215.9" y="453" width="0.4" height="15.0" fill="rgb(245,186,44)" rx="2" ry="2" />
+<text  x="218.88" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt; &gt;::_M_valptr (433,705 samples, 0.04%)</title><rect x="183.6" y="469" width="0.3" height="15.0" fill="rgb(236,142,34)" rx="2" ry="2" />
+<text  x="186.57" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Object::SetTypeId (871,023 samples, 0.09%)</title><rect x="542.9" y="293" width="0.7" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="545.91" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::PacketMetadata::~PacketMetadata (1,016,942 samples, 0.10%)</title><rect x="548.0" y="117" width="0.8" height="15.0" fill="rgb(217,56,13)" rx="2" ry="2" />
+<text  x="551.02" y="127.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt;::_M_addr (218,793 samples, 0.02%)</title><rect x="137.3" y="389" width="0.2" height="15.0" fill="rgb(210,24,5)" rx="2" ry="2" />
+<text  x="140.30" y="399.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::Ptr&lt;ns3::Object&gt;*&gt; (283,533 samples, 0.03%)</title><rect x="550.2" y="181" width="0.2" height="15.0" fill="rgb(248,201,48)" rx="2" ry="2" />
+<text  x="553.19" y="191.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_M_allocate (198,702 samples, 0.02%)</title><rect x="413.2" y="453" width="0.2" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="416.20" y="463.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::~_List_base (241,713 samples, 0.02%)</title><rect x="550.8" y="213" width="0.1" height="15.0" fill="rgb(236,146,35)" rx="2" ry="2" />
+<text  x="553.75" y="223.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::MacCeListElement_s, std::allocator&lt;ns3::MacCeListElement_s&gt; &gt;::max_size (163,785 samples, 0.02%)</title><rect x="130.1" y="469" width="0.1" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="133.12" y="479.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; std::__miter_base&lt;__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; (194,496 samples, 0.02%)</title><rect x="238.5" y="213" width="0.2" height="15.0" fill="rgb(238,151,36)" rx="2" ry="2" />
+<text  x="241.50" y="223.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteSpectrumSignalParametersDlCtrlFrame&gt;::Ptr (189,795 samples, 0.02%)</title><rect x="343.9" y="501" width="0.1" height="15.0" fill="rgb(232,126,30)" rx="2" ry="2" />
+<text  x="346.86" y="511.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;::operator= (148,381 samples, 0.02%)</title><rect x="117.1" y="405" width="0.1" height="15.0" fill="rgb(253,222,53)" rx="2" ry="2" />
+<text  x="120.11" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::_Auto_node::_Auto_node&lt;std::piecewise_construct_t const&amp;, std::tuple&lt;unsigned short const&amp;&gt;, std::tuple&lt;&gt; &gt; (151,184 samples, 0.02%)</title><rect x="105.1" y="437" width="0.1" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="108.07" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Function_handler&lt;void  (1,235,121 samples, 0.13%)</title><rect x="725.6" y="469" width="1.0" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="728.60" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Bind&lt;void  (613,231 samples, 0.06%)</title><rect x="708.3" y="469" width="0.5" height="15.0" fill="rgb(253,221,52)" rx="2" ry="2" />
+<text  x="711.30" y="479.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;int&gt; &gt;::allocate (169,207 samples, 0.02%)</title><rect x="574.6" y="293" width="0.1" height="15.0" fill="rgb(248,200,47)" rx="2" ry="2" />
+<text  x="577.55" y="303.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::_List_impl::_List_impl (394,429 samples, 0.04%)</title><rect x="366.6" y="453" width="0.3" height="15.0" fill="rgb(210,24,5)" rx="2" ry="2" />
+<text  x="369.55" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Object::SetTypeId (654,252 samples, 0.07%)</title><rect x="163.1" y="421" width="0.5" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="166.06" y="431.5" ></text>
+</g>
+<g >
+<title>std::map&lt;ns3::TbId_t, ns3::tbInfo_t, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::find (1,512,230 samples, 0.16%)</title><rect x="528.9" y="341" width="1.2" height="15.0" fill="rgb(224,87,20)" rx="2" ry="2" />
+<text  x="531.89" y="351.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt; &gt;::find (1,760,133 samples, 0.18%)</title><rect x="649.9" y="485" width="1.4" height="15.0" fill="rgb(233,130,31)" rx="2" ry="2" />
+<text  x="652.88" y="495.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt;::destroy&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; (152,858 samples, 0.02%)</title><rect x="654.3" y="389" width="0.1" height="15.0" fill="rgb(230,118,28)" rx="2" ry="2" />
+<text  x="657.32" y="399.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::list (3,992,341 samples, 0.41%)</title><rect x="497.7" y="549" width="3.2" height="15.0" fill="rgb(236,145,34)" rx="2" ry="2" />
+<text  x="500.68" y="559.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, unsigned char*&gt; (592,631 samples, 0.06%)</title><rect x="126.9" y="357" width="0.4" height="15.0" fill="rgb(227,104,25)" rx="2" ry="2" />
+<text  x="129.85" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::SbMeasResult_s::operator= (850,226 samples, 0.09%)</title><rect x="134.5" y="485" width="0.7" height="15.0" fill="rgb(205,4,1)" rx="2" ry="2" />
+<text  x="137.49" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::DlHarqFeedbackLteControlMessage::DlHarqFeedbackLteControlMessage (507,137 samples, 0.05%)</title><rect x="420.8" y="341" width="0.4" height="15.0" fill="rgb(237,148,35)" rx="2" ry="2" />
+<text  x="423.77" y="351.5" ></text>
+</g>
+<g >
+<title>[libc.so.6] (159,006 samples, 0.02%)</title><rect x="211.0" y="357" width="0.1" height="15.0" fill="rgb(223,84,20)" rx="2" ry="2" />
+<text  x="213.95" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::SpectrumValue (1,462,868 samples, 0.15%)</title><rect x="324.7" y="485" width="1.2" height="15.0" fill="rgb(211,27,6)" rx="2" ry="2" />
+<text  x="327.70" y="495.5" ></text>
+</g>
+<g >
+<title>std::_List_const_iterator&lt;ns3::Callback&lt;void, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt; &gt; &gt;::_List_const_iterator (197,677 samples, 0.02%)</title><rect x="328.2" y="469" width="0.1" height="15.0" fill="rgb(237,151,36)" rx="2" ry="2" />
+<text  x="331.15" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::~SpectrumValue (190,332 samples, 0.02%)</title><rect x="674.2" y="469" width="0.1" height="15.0" fill="rgb(247,193,46)" rx="2" ry="2" />
+<text  x="677.16" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;::_M_valptr (199,039 samples, 0.02%)</title><rect x="272.9" y="453" width="0.2" height="15.0" fill="rgb(213,38,9)" rx="2" ry="2" />
+<text  x="275.92" y="463.5" ></text>
+</g>
+<g >
+<title>int* std::__copy_move_a1&lt;false, int const*, int*&gt; (162,673 samples, 0.02%)</title><rect x="531.3" y="293" width="0.1" height="15.0" fill="rgb(230,117,28)" rx="2" ry="2" />
+<text  x="534.29" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Packet&gt;::Ptr (124,350 samples, 0.01%)</title><rect x="69.3" y="453" width="0.1" height="15.0" fill="rgb(230,117,28)" rx="2" ry="2" />
+<text  x="72.35" y="463.5" ></text>
+</g>
+<g >
+<title>std::_List_const_iterator&lt;ns3::Callback&lt;void, ns3::Ptr&lt;ns3::Packet const&gt; &gt; &gt;::_List_const_iterator (161,515 samples, 0.02%)</title><rect x="494.4" y="517" width="0.2" height="15.0" fill="rgb(251,216,51)" rx="2" ry="2" />
+<text  x="497.44" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;int, std::allocator&lt;int&gt; &gt;::_Vector_base (198,351 samples, 0.02%)</title><rect x="679.1" y="485" width="0.2" height="15.0" fill="rgb(215,47,11)" rx="2" ry="2" />
+<text  x="682.10" y="495.5" ></text>
+</g>
+<g >
+<title>void std::_Construct&lt;ns3::DlInfoListElement_s, ns3::DlInfoListElement_s const&amp;&gt; (411,592 samples, 0.04%)</title><rect x="107.3" y="405" width="0.3" height="15.0" fill="rgb(212,32,7)" rx="2" ry="2" />
+<text  x="110.29" y="415.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt; &gt; &gt;::cbegin (266,872 samples, 0.03%)</title><rect x="292.1" y="517" width="0.2" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="295.06" y="527.5" ></text>
+</g>
+<g >
+<title>double const* std::__niter_base&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; (274,054 samples, 0.03%)</title><rect x="647.3" y="373" width="0.3" height="15.0" fill="rgb(213,38,9)" rx="2" ry="2" />
+<text  x="650.34" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::PacketBurst (146,079 samples, 0.02%)</title><rect x="96.7" y="421" width="0.2" height="15.0" fill="rgb(208,15,3)" rx="2" ry="2" />
+<text  x="99.74" y="431.5" ></text>
+</g>
+<g >
+<title>std::_List_const_iterator&lt;ns3::Callback&lt;void, unsigned short, unsigned char, unsigned int&gt; &gt;::_List_const_iterator (240,206 samples, 0.02%)</title><rect x="156.1" y="357" width="0.2" height="15.0" fill="rgb(237,151,36)" rx="2" ry="2" />
+<text  x="159.12" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::LteUePhy::ReportRsReceivedPower (3,913,990 samples, 0.40%)</title><rect x="601.9" y="341" width="3.2" height="15.0" fill="rgb(231,122,29)" rx="2" ry="2" />
+<text  x="604.95" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::UlDciLteControlMessage&gt; ns3::Create&lt;ns3::UlDciLteControlMessage&gt; (305,849 samples, 0.03%)</title><rect x="230.9" y="453" width="0.3" height="15.0" fill="rgb(223,85,20)" rx="2" ry="2" />
+<text  x="233.91" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::vector (2,378,553 samples, 0.25%)</title><rect x="519.6" y="341" width="1.9" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="522.57" y="351.5" ></text>
+</g>
+<g >
+<title>unsigned short* std::copy&lt;std::move_iterator&lt;unsigned short*&gt;, unsigned short*&gt; (154,651 samples, 0.02%)</title><rect x="106.3" y="373" width="0.1" height="15.0" fill="rgb(234,136,32)" rx="2" ry="2" />
+<text  x="109.25" y="383.5" ></text>
+</g>
+<g >
+<title>std::_List_node&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt;::_M_valptr (444,952 samples, 0.05%)</title><rect x="544.9" y="213" width="0.3" height="15.0" fill="rgb(215,46,11)" rx="2" ry="2" />
+<text  x="547.85" y="223.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::CqiListElement_s, std::allocator&lt;ns3::CqiListElement_s&gt; &gt;::vector (187,210 samples, 0.02%)</title><rect x="130.6" y="501" width="0.2" height="15.0" fill="rgb(235,140,33)" rx="2" ry="2" />
+<text  x="133.64" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::_Vector_base (159,388 samples, 0.02%)</title><rect x="147.5" y="421" width="0.1" height="15.0" fill="rgb(219,65,15)" rx="2" ry="2" />
+<text  x="150.50" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::MobilityModel::GetPosition (542,316 samples, 0.06%)</title><rect x="319.6" y="501" width="0.4" height="15.0" fill="rgb(217,59,14)" rx="2" ry="2" />
+<text  x="322.57" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Packet&gt;::~Ptr (2,803,402 samples, 0.29%)</title><rect x="451.6" y="165" width="2.3" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="454.64" y="175.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::AttributeConstructionList::Item, std::allocator&lt;ns3::AttributeConstructionList::Item&gt; &gt;::~list (194,036 samples, 0.02%)</title><rect x="372.1" y="485" width="0.1" height="15.0" fill="rgb(238,154,37)" rx="2" ry="2" />
+<text  x="375.07" y="495.5" ></text>
+</g>
+<g >
+<title>bool ns3::operator==&lt;ns3::SpectrumModel const, ns3::SpectrumModel const&gt; (290,035 samples, 0.03%)</title><rect x="416.3" y="517" width="0.3" height="15.0" fill="rgb(221,73,17)" rx="2" ry="2" />
+<text  x="419.32" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt; ns3::Create&lt;ns3::PacketBurst&gt; (409,956 samples, 0.04%)</title><rect x="118.7" y="501" width="0.3" height="15.0" fill="rgb(225,93,22)" rx="2" ry="2" />
+<text  x="121.69" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::PfFfMacScheduler::HarqProcessAvailability (1,102,343 samples, 0.11%)</title><rect x="176.6" y="485" width="0.9" height="15.0" fill="rgb(207,11,2)" rx="2" ry="2" />
+<text  x="179.56" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Head_base&lt;2ul, double, false&gt;::_M_head (124,767 samples, 0.01%)</title><rect x="756.8" y="549" width="0.1" height="15.0" fill="rgb(205,1,0)" rx="2" ry="2" />
+<text  x="759.83" y="559.5" ></text>
+</g>
+<g >
+<title>double const&amp; std::max&lt;double&gt; (155,216 samples, 0.02%)</title><rect x="739.5" y="517" width="0.1" height="15.0" fill="rgb(209,21,5)" rx="2" ry="2" />
+<text  x="742.45" y="527.5" ></text>
+</g>
+<g >
+<title>void std::_Construct&lt;double&gt; (403,637 samples, 0.04%)</title><rect x="404.2" y="405" width="0.3" height="15.0" fill="rgb(228,106,25)" rx="2" ry="2" />
+<text  x="407.15" y="415.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt;::allocate (185,442 samples, 0.02%)</title><rect x="318.9" y="309" width="0.2" height="15.0" fill="rgb(243,178,42)" rx="2" ry="2" />
+<text  x="321.91" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy::StartSubFrame (4,972,136 samples, 0.51%)</title><rect x="11.4" y="581" width="4.0" height="15.0" fill="rgb(234,136,32)" rx="2" ry="2" />
+<text  x="14.43" y="591.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_lower_bound (193,630 samples, 0.02%)</title><rect x="659.7" y="469" width="0.2" height="15.0" fill="rgb(210,23,5)" rx="2" ry="2" />
+<text  x="662.71" y="479.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::DlInfoListElement_s*, ns3::DlInfoListElement_s&gt; (1,227,211 samples, 0.13%)</title><rect x="256.0" y="485" width="0.9" height="15.0" fill="rgb(217,55,13)" rx="2" ry="2" />
+<text  x="258.95" y="495.5" ></text>
+</g>
+<g >
+<title>double* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, double*&gt; (1,091,128 samples, 0.11%)</title><rect x="238.1" y="261" width="0.9" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="241.15" y="271.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::Ptr&lt;ns3::UeManager&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::Ptr&lt;ns3::UeManager&gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::Ptr&lt;ns3::UeManager&gt; &gt; &gt; &gt;::find (186,495 samples, 0.02%)</title><rect x="18.5" y="309" width="0.2" height="15.0" fill="rgb(248,199,47)" rx="2" ry="2" />
+<text  x="21.52" y="319.5" ></text>
+</g>
+<g >
+<title>std::operator== (203,617 samples, 0.02%)</title><rect x="466.5" y="501" width="0.2" height="15.0" fill="rgb(229,110,26)" rx="2" ry="2" />
+<text  x="469.54" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::DlDciListElement_s::~DlDciListElement_s (529,836 samples, 0.05%)</title><rect x="521.5" y="357" width="0.4" height="15.0" fill="rgb(219,64,15)" rx="2" ry="2" />
+<text  x="524.49" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::Callback&lt;void, std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt;::DoPeekImpl (126,102 samples, 0.01%)</title><rect x="515.7" y="533" width="0.1" height="15.0" fill="rgb(221,77,18)" rx="2" ry="2" />
+<text  x="518.73" y="543.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_clear (221,766 samples, 0.02%)</title><rect x="324.3" y="389" width="0.2" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="327.31" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumPhy::StartRxUlSrs (233,781 samples, 0.02%)</title><rect x="734.4" y="533" width="0.2" height="15.0" fill="rgb(206,6,1)" rx="2" ry="2" />
+<text  x="737.43" y="543.5" ></text>
+</g>
+<g >
+<title>std::operator== (148,898 samples, 0.02%)</title><rect x="296.0" y="501" width="0.2" height="15.0" fill="rgb(229,110,26)" rx="2" ry="2" />
+<text  x="299.04" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Bind_helper&lt;std::__or_&lt;std::is_integral&lt;std::decay&lt;void  (1,903,866 samples, 0.20%)</title><rect x="281.6" y="501" width="1.5" height="15.0" fill="rgb(237,148,35)" rx="2" ry="2" />
+<text  x="284.60" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, unsigned int&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt; &gt;::_M_begin (156,571 samples, 0.02%)</title><rect x="137.0" y="453" width="0.1" height="15.0" fill="rgb(243,178,42)" rx="2" ry="2" />
+<text  x="139.99" y="463.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;::_M_put_node (278,972 samples, 0.03%)</title><rect x="291.0" y="357" width="0.2" height="15.0" fill="rgb(230,118,28)" rx="2" ry="2" />
+<text  x="293.95" y="367.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;::~_List_base (1,543,193 samples, 0.16%)</title><rect x="392.6" y="533" width="1.2" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="395.58" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::Callback&lt;void, ns3::SpectrumValue const&amp;&gt;::Callback&lt;void  (167,033 samples, 0.02%)</title><rect x="577.9" y="437" width="0.1" height="15.0" fill="rgb(231,122,29)" rx="2" ry="2" />
+<text  x="580.85" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; &gt;::_M_valptr (404,825 samples, 0.04%)</title><rect x="523.6" y="277" width="0.3" height="15.0" fill="rgb(213,39,9)" rx="2" ry="2" />
+<text  x="526.62" y="287.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::allocate (163,549 samples, 0.02%)</title><rect x="706.5" y="341" width="0.1" height="15.0" fill="rgb(236,145,34)" rx="2" ry="2" />
+<text  x="709.48" y="351.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;ns3::TbId_t, ns3::tbInfo_t&gt;::pair&lt;ns3::TbId_t&amp;, ns3::tbInfo_t&amp;&gt; (126,859 samples, 0.01%)</title><rect x="530.1" y="341" width="0.1" height="15.0" fill="rgb(249,202,48)" rx="2" ry="2" />
+<text  x="533.10" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::ObjectDeleter::Delete (667,572 samples, 0.07%)</title><rect x="612.8" y="517" width="0.5" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="615.81" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_M_erase (702,211 samples, 0.07%)</title><rect x="394.2" y="485" width="0.5" height="15.0" fill="rgb(227,102,24)" rx="2" ry="2" />
+<text  x="397.16" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::ObjectDeleter::Delete (1,796,083 samples, 0.19%)</title><rect x="501.5" y="453" width="1.4" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="504.48" y="463.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::AttributeConstructionList::Item, std::allocator&lt;ns3::AttributeConstructionList::Item&gt; &gt;::~list (290,552 samples, 0.03%)</title><rect x="540.1" y="277" width="0.2" height="15.0" fill="rgb(238,154,37)" rx="2" ry="2" />
+<text  x="543.09" y="287.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt; &gt;::_M_mbegin (127,985 samples, 0.01%)</title><rect x="565.7" y="181" width="0.1" height="15.0" fill="rgb(250,209,50)" rx="2" ry="2" />
+<text  x="568.68" y="191.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultDeleter&lt;ns3::SpectrumValue&gt;::Delete (236,969 samples, 0.02%)</title><rect x="728.9" y="469" width="0.1" height="15.0" fill="rgb(222,79,19)" rx="2" ry="2" />
+<text  x="731.86" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;ns3::DlInfoListElement_s const*, std::vector&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt; &gt;, ns3::DlInfoListElement_s*, ns3::DlInfoListElement_s&gt; (451,449 samples, 0.05%)</title><rect x="107.3" y="469" width="0.3" height="15.0" fill="rgb(238,151,36)" rx="2" ry="2" />
+<text  x="110.26" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Packet&gt; const&amp; std::forward&lt;ns3::Ptr&lt;ns3::Packet&gt; const&amp;&gt; (156,451 samples, 0.02%)</title><rect x="362.4" y="469" width="0.1" height="15.0" fill="rgb(205,2,0)" rx="2" ry="2" />
+<text  x="365.40" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt; &gt;::begin (164,101 samples, 0.02%)</title><rect x="508.4" y="533" width="0.2" height="15.0" fill="rgb(216,50,12)" rx="2" ry="2" />
+<text  x="511.43" y="543.5" ></text>
+</g>
+<g >
+<title>operator new (143,903 samples, 0.01%)</title><rect x="164.0" y="437" width="0.1" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="166.96" y="447.5" ></text>
+</g>
+<g >
+<title>unsigned short* std::__uninitialized_fill_n_a&lt;unsigned short*, unsigned long, unsigned short, unsigned short&gt; (897,210 samples, 0.09%)</title><rect x="252.0" y="453" width="0.7" height="15.0" fill="rgb(222,82,19)" rx="2" ry="2" />
+<text  x="255.02" y="463.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;unsigned short&gt; &gt;::construct&lt;unsigned short, unsigned short const&amp;&gt; (146,680 samples, 0.02%)</title><rect x="251.8" y="437" width="0.1" height="15.0" fill="rgb(243,177,42)" rx="2" ry="2" />
+<text  x="254.81" y="447.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;*, std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt; &gt; std::__copy_move_a&lt;true, __gnu_cxx::__normal_iterator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;*, std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;*, std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt; &gt; &gt; (226,371 samples, 0.02%)</title><rect x="117.8" y="469" width="0.1" height="15.0" fill="rgb(226,96,23)" rx="2" ry="2" />
+<text  x="120.75" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::DlInfoListElement_s const*, std::vector&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt; &gt;, ns3::DlInfoListElement_s*&gt; (4,951,937 samples, 0.51%)</title><rect x="257.9" y="469" width="4.0" height="15.0" fill="rgb(254,227,54)" rx="2" ry="2" />
+<text  x="260.94" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt;::_M_create_storage (308,409 samples, 0.03%)</title><rect x="144.4" y="421" width="0.3" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="147.41" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::TypeId::TypeId (431,756 samples, 0.04%)</title><rect x="364.9" y="453" width="0.4" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="367.91" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_get_insert_unique_pos (157,629 samples, 0.02%)</title><rect x="332.5" y="437" width="0.1" height="15.0" fill="rgb(214,41,10)" rx="2" ry="2" />
+<text  x="335.49" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteSpectrumSignalParametersDlCtrlFrame&gt; ns3::Create&lt;ns3::LteSpectrumSignalParametersDlCtrlFrame, ns3::LteSpectrumSignalParametersDlCtrlFrame const&amp;&gt; (7,022,110 samples, 0.72%)</title><rect x="313.9" y="485" width="5.6" height="15.0" fill="rgb(242,171,41)" rx="2" ry="2" />
+<text  x="316.89" y="495.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, unsigned int, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt; &gt;::clear (355,870 samples, 0.04%)</title><rect x="172.2" y="453" width="0.3" height="15.0" fill="rgb(230,115,27)" rx="2" ry="2" />
+<text  x="175.25" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;int const, double&gt; &gt;::_M_valptr (124,708 samples, 0.01%)</title><rect x="59.9" y="421" width="0.1" height="15.0" fill="rgb(252,219,52)" rx="2" ry="2" />
+<text  x="62.88" y="431.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::BuildRarListElement_s, std::allocator&lt;ns3::BuildRarListElement_s&gt; &gt;::empty (194,427 samples, 0.02%)</title><rect x="173.1" y="453" width="0.1" height="15.0" fill="rgb(220,69,16)" rx="2" ry="2" />
+<text  x="176.09" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::MacCeListElement_s* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::MacCeListElement_s*, std::vector&lt;ns3::MacCeListElement_s, std::allocator&lt;ns3::MacCeListElement_s&gt; &gt; &gt;, ns3::MacCeListElement_s*&gt; (957,513 samples, 0.10%)</title><rect x="128.8" y="469" width="0.7" height="15.0" fill="rgb(251,215,51)" rx="2" ry="2" />
+<text  x="131.75" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy::SetDownlinkSubChannels (1,402,168 samples, 0.14%)</title><rect x="111.4" y="517" width="1.1" height="15.0" fill="rgb(207,12,2)" rx="2" ry="2" />
+<text  x="114.35" y="527.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::erase[abi:cxx11] (940,554 samples, 0.10%)</title><rect x="222.3" y="485" width="0.8" height="15.0" fill="rgb(231,123,29)" rx="2" ry="2" />
+<text  x="225.32" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::FfMacSchedSapProvider::SchedUlCqiInfoReqParameters::SchedUlCqiInfoReqParameters (3,384,993 samples, 0.35%)</title><rect x="474.2" y="325" width="2.8" height="15.0" fill="rgb(233,131,31)" rx="2" ry="2" />
+<text  x="477.23" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt;::Ptr (143,275 samples, 0.01%)</title><rect x="636.5" y="469" width="0.1" height="15.0" fill="rgb(219,67,16)" rx="2" ry="2" />
+<text  x="639.46" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::IidManager::LookupInformation (331,597 samples, 0.03%)</title><rect x="373.3" y="437" width="0.2" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="376.28" y="447.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt; &gt;::construct&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (426,539 samples, 0.04%)</title><rect x="335.0" y="341" width="0.3" height="15.0" fill="rgb(231,122,29)" rx="2" ry="2" />
+<text  x="337.95" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::LteChunkProcessor::End (37,821,975 samples, 3.90%)</title><rect x="576.8" y="533" width="30.5" height="15.0" fill="rgb(223,83,19)" rx="2" ry="2" />
+<text  x="579.83" y="543.5" >ns..</text>
+</g>
+<g >
+<title>ns3::MacCeListElement_s* std::uninitialized_copy&lt;std::move_iterator&lt;ns3::MacCeListElement_s*&gt;, ns3::MacCeListElement_s*&gt; (350,102 samples, 0.04%)</title><rect x="129.6" y="453" width="0.3" height="15.0" fill="rgb(244,183,43)" rx="2" ry="2" />
+<text  x="132.59" y="463.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt; &gt;::_M_addr (233,529 samples, 0.02%)</title><rect x="170.4" y="357" width="0.2" height="15.0" fill="rgb(218,61,14)" rx="2" ry="2" />
+<text  x="173.40" y="367.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;1ul, ns3::Ptr&lt;ns3::PacketBurst&gt; &gt;::~_Tuple_impl (307,442 samples, 0.03%)</title><rect x="281.3" y="453" width="0.3" height="15.0" fill="rgb(208,17,4)" rx="2" ry="2" />
+<text  x="284.35" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;0ul, ns3::MultiModelSpectrumChannel*, ns3::Ptr&lt;ns3::SpectrumValue&gt;, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::_Tuple_impl (589,946 samples, 0.06%)</title><rect x="667.5" y="389" width="0.5" height="15.0" fill="rgb(229,111,26)" rx="2" ry="2" />
+<text  x="670.48" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::LteRlcSm::DoNotifyTxOpportunity (17,080,246 samples, 1.76%)</title><rect x="19.6" y="437" width="13.7" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="22.60" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt;::_Vector_impl::_Vector_impl (231,916 samples, 0.02%)</title><rect x="229.0" y="421" width="0.2" height="15.0" fill="rgb(237,150,35)" rx="2" ry="2" />
+<text  x="232.05" y="431.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt;::_M_ptr (444,952 samples, 0.05%)</title><rect x="544.9" y="197" width="0.3" height="15.0" fill="rgb(215,48,11)" rx="2" ry="2" />
+<text  x="547.85" y="207.5" ></text>
+</g>
+<g >
+<title>ns3::TagBuffer::WriteU32 (388,268 samples, 0.04%)</title><rect x="13.3" y="373" width="0.3" height="15.0" fill="rgb(228,107,25)" rx="2" ry="2" />
+<text  x="16.26" y="383.5" ></text>
+</g>
+<g >
+<title>std::_List_node&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt;* std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::_M_create_node&lt;ns3::Ptr&lt;ns3::Packet&gt; const&amp;&gt; (1,438,749 samples, 0.15%)</title><rect x="22.3" y="309" width="1.2" height="15.0" fill="rgb(211,30,7)" rx="2" ry="2" />
+<text  x="25.31" y="319.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::end (192,716 samples, 0.02%)</title><rect x="498.2" y="533" width="0.2" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="501.20" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::ByteTagList::~ByteTagList (1,622,543 samples, 0.17%)</title><rect x="546.7" y="117" width="1.3" height="15.0" fill="rgb(206,5,1)" rx="2" ry="2" />
+<text  x="549.72" y="127.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_insert_node (362,836 samples, 0.04%)</title><rect x="83.5" y="389" width="0.3" height="15.0" fill="rgb(218,62,14)" rx="2" ry="2" />
+<text  x="86.54" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_rebalance_for_erase (2,258,588 samples, 0.23%)</title><rect x="765.0" y="661" width="1.9" height="15.0" fill="rgb(205,2,0)" rx="2" ry="2" />
+<text  x="768.04" y="671.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt;::vector (1,025,719 samples, 0.11%)</title><rect x="442.7" y="309" width="0.8" height="15.0" fill="rgb(248,198,47)" rx="2" ry="2" />
+<text  x="445.66" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::Buffer::Recycle (836,248 samples, 0.09%)</title><rect x="545.9" y="101" width="0.7" height="15.0" fill="rgb(250,207,49)" rx="2" ry="2" />
+<text  x="548.94" y="111.5" ></text>
+</g>
+<g >
+<title> (201,121 samples, 0.02%)</title><rect x="492.3" y="533" width="0.2" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="495.30" y="543.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::uninitialized_fill_n&lt;unsigned char*, unsigned long, unsigned char&gt; (189,712 samples, 0.02%)</title><rect x="102.0" y="421" width="0.1" height="15.0" fill="rgb(247,194,46)" rx="2" ry="2" />
+<text  x="104.98" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Head_base&lt;3ul, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, false&gt;::~_Head_base (3,402,650 samples, 0.35%)</title><rect x="773.7" y="485" width="2.7" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="776.67" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::UlInfoListElement_s* std::__do_uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::UlInfoListElement_s const*, std::vector&lt;ns3::UlInfoListElement_s, std::allocator&lt;ns3::UlInfoListElement_s&gt; &gt; &gt;, ns3::UlInfoListElement_s*&gt; (794,783 samples, 0.08%)</title><rect x="266.2" y="437" width="0.7" height="15.0" fill="rgb(218,62,14)" rx="2" ry="2" />
+<text  x="269.23" y="447.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;is_invocable_r_v&lt;void, ns3::Callback&lt;void, ns3::DlInfoListElement_s&gt;::Callback&lt;void  (3,763,206 samples, 0.39%)</title><rect x="418.4" y="485" width="3.0" height="15.0" fill="rgb(243,178,42)" rx="2" ry="2" />
+<text  x="421.37" y="495.5" ></text>
+</g>
+<g >
+<title>std::tuple_element&lt;0ul, std::pair&lt;unsigned int const&amp;, ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp;&gt; &gt;::type&amp;&amp; std::get&lt;0ul, unsigned int const&amp;, ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp;&gt; (189,759 samples, 0.02%)</title><rect x="660.0" y="501" width="0.1" height="15.0" fill="rgb(232,124,29)" rx="2" ry="2" />
+<text  x="662.96" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::LteNetDevice::GetNode (377,687 samples, 0.04%)</title><rect x="643.3" y="517" width="0.3" height="15.0" fill="rgb(229,112,26)" rx="2" ry="2" />
+<text  x="646.27" y="527.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::_List_impl::_List_impl (126,871 samples, 0.01%)</title><rect x="538.9" y="261" width="0.1" height="15.0" fill="rgb(210,24,5)" rx="2" ry="2" />
+<text  x="541.85" y="271.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::~_List_base (466,245 samples, 0.05%)</title><rect x="776.0" y="373" width="0.4" height="15.0" fill="rgb(221,74,17)" rx="2" ry="2" />
+<text  x="779.03" y="383.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_M_range_check (144,021 samples, 0.01%)</title><rect x="181.0" y="453" width="0.2" height="15.0" fill="rgb(239,159,38)" rx="2" ry="2" />
+<text  x="184.05" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_M_put_node (203,534 samples, 0.02%)</title><rect x="60.9" y="357" width="0.2" height="15.0" fill="rgb(219,67,16)" rx="2" ry="2" />
+<text  x="63.94" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::Packet::Copy (3,461,375 samples, 0.36%)</title><rect x="358.9" y="517" width="2.7" height="15.0" fill="rgb(250,211,50)" rx="2" ry="2" />
+<text  x="361.86" y="527.5" ></text>
+</g>
+<g >
+<title>std::_List_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::insert&lt;std::_List_const_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;, void&gt; (2,409,911 samples, 0.25%)</title><rect x="732.4" y="485" width="2.0" height="15.0" fill="rgb(210,23,5)" rx="2" ry="2" />
+<text  x="735.44" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::LteUePhy::DoSendMacPdu (539,944 samples, 0.06%)</title><rect x="564.7" y="181" width="0.5" height="15.0" fill="rgb(233,132,31)" rx="2" ry="2" />
+<text  x="567.73" y="191.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt; &gt;::allocate (493,183 samples, 0.05%)</title><rect x="563.8" y="117" width="0.4" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="566.80" y="127.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt;::destroy&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; (652,707 samples, 0.07%)</title><rect x="609.7" y="517" width="0.6" height="15.0" fill="rgb(230,118,28)" rx="2" ry="2" />
+<text  x="612.73" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::UeSelected_s::operator= (148,008 samples, 0.02%)</title><rect x="93.8" y="453" width="0.1" height="15.0" fill="rgb(244,183,43)" rx="2" ry="2" />
+<text  x="96.76" y="463.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::~list (148,437 samples, 0.02%)</title><rect x="698.0" y="549" width="0.1" height="15.0" fill="rgb(222,80,19)" rx="2" ry="2" />
+<text  x="700.96" y="559.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, unsigned int, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt; &gt;::find (241,202 samples, 0.02%)</title><rect x="234.3" y="469" width="0.2" height="15.0" fill="rgb(239,156,37)" rx="2" ry="2" />
+<text  x="237.31" y="479.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, unsigned int, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt; &gt;::find (1,368,772 samples, 0.14%)</title><rect x="223.8" y="485" width="1.1" height="15.0" fill="rgb(239,156,37)" rx="2" ry="2" />
+<text  x="226.75" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::SpectrumSignalParameters, ns3::Empty, ns3::DefaultDeleter&lt;ns3::SpectrumSignalParameters&gt; &gt;::SimpleRefCount (152,528 samples, 0.02%)</title><rect x="670.3" y="485" width="0.1" height="15.0" fill="rgb(213,38,9)" rx="2" ry="2" />
+<text  x="673.25" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned int const, ns3::RxSpectrumModelInfo&gt; &gt;::operator (368,315 samples, 0.04%)</title><rect x="656.8" y="517" width="0.3" height="15.0" fill="rgb(224,91,21)" rx="2" ry="2" />
+<text  x="659.83" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt;::_Vector_impl::_Vector_impl (228,046 samples, 0.02%)</title><rect x="144.7" y="421" width="0.1" height="15.0" fill="rgb(237,150,35)" rx="2" ry="2" />
+<text  x="147.66" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::Packet, ns3::Empty, ns3::DefaultDeleter&lt;ns3::Packet&gt; &gt;::Unref (392,648 samples, 0.04%)</title><rect x="612.9" y="389" width="0.3" height="15.0" fill="rgb(215,47,11)" rx="2" ry="2" />
+<text  x="615.90" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_M_allocate (157,055 samples, 0.02%)</title><rect x="214.0" y="453" width="0.2" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="217.05" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumModel const&gt;::Ptr (236,748 samples, 0.02%)</title><rect x="299.5" y="453" width="0.2" height="15.0" fill="rgb(232,125,30)" rx="2" ry="2" />
+<text  x="302.51" y="463.5" ></text>
+</g>
+<g >
+<title>void ns3::Callback&lt;void, ns3::UlInfoListElement_s&gt;::Callback&lt;void  (2,014,597 samples, 0.21%)</title><rect x="439.3" y="453" width="1.6" height="15.0" fill="rgb(233,129,30)" rx="2" ry="2" />
+<text  x="442.32" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::NoOpComponentCarrierManager::DoNotifyTxOpportunity (17,080,246 samples, 1.76%)</title><rect x="19.6" y="469" width="13.7" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="22.60" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbMac::DoSchedDlConfigInd (415,834 samples, 0.04%)</title><rect x="15.5" y="453" width="0.3" height="15.0" fill="rgb(205,3,0)" rx="2" ry="2" />
+<text  x="18.45" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::_Vector_base (326,261 samples, 0.03%)</title><rect x="439.6" y="405" width="0.2" height="15.0" fill="rgb(219,65,15)" rx="2" ry="2" />
+<text  x="442.57" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt;::_S_key (553,029 samples, 0.06%)</title><rect x="455.9" y="261" width="0.4" height="15.0" fill="rgb(229,113,27)" rx="2" ry="2" />
+<text  x="458.85" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt;::operator (164,113 samples, 0.02%)</title><rect x="70.7" y="469" width="0.1" height="15.0" fill="rgb(213,38,9)" rx="2" ry="2" />
+<text  x="73.69" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt;::Ptr (191,494 samples, 0.02%)</title><rect x="633.1" y="501" width="0.2" height="15.0" fill="rgb(219,67,16)" rx="2" ry="2" />
+<text  x="636.12" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;1ul, ns3::Ptr&lt;ns3::SpectrumValue&gt;, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::_M_head (260,750 samples, 0.03%)</title><rect x="755.3" y="565" width="0.2" height="15.0" fill="rgb(237,150,35)" rx="2" ry="2" />
+<text  x="758.28" y="575.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::SpectrumValue (314,226 samples, 0.03%)</title><rect x="484.8" y="501" width="0.3" height="15.0" fill="rgb(211,27,6)" rx="2" ry="2" />
+<text  x="487.85" y="511.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::MacCeListElement_s, std::allocator&lt;ns3::MacCeListElement_s&gt; &gt;::_M_erase (873,141 samples, 0.09%)</title><rect x="264.7" y="501" width="0.7" height="15.0" fill="rgb(241,168,40)" rx="2" ry="2" />
+<text  x="267.74" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Bind_helper&lt;std::__or_&lt;std::is_integral&lt;std::decay&lt;void  (238,561 samples, 0.02%)</title><rect x="726.8" y="469" width="0.2" height="15.0" fill="rgb(237,148,35)" rx="2" ry="2" />
+<text  x="729.78" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::PfFfMacScheduler::DoSchedDlTriggerReq (4,972,136 samples, 0.51%)</title><rect x="11.4" y="517" width="4.0" height="15.0" fill="rgb(214,45,10)" rx="2" ry="2" />
+<text  x="14.43" y="527.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;bool, std::allocator&lt;bool&gt; &gt;::resize (5,979,917 samples, 0.62%)</title><rect x="196.8" y="485" width="4.9" height="15.0" fill="rgb(219,68,16)" rx="2" ry="2" />
+<text  x="199.84" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Packet::Packet (828,725 samples, 0.09%)</title><rect x="68.0" y="437" width="0.7" height="15.0" fill="rgb(230,115,27)" rx="2" ry="2" />
+<text  x="70.99" y="447.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;__gnu_cxx::__normal_iterator&lt;ns3::DlInfoListElement_s*, std::vector&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt; &gt;, ns3::DlInfoListElement_s&gt; (300,135 samples, 0.03%)</title><rect x="207.5" y="469" width="0.3" height="15.0" fill="rgb(210,24,5)" rx="2" ry="2" />
+<text  x="210.54" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::PhichListElement_s* std::__do_uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::PhichListElement_s const*, std::vector&lt;ns3::PhichListElement_s, std::allocator&lt;ns3::PhichListElement_s&gt; &gt; &gt;, ns3::PhichListElement_s*&gt; (202,017 samples, 0.02%)</title><rect x="227.5" y="389" width="0.2" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="230.50" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumPhy&gt;::~Ptr (195,875 samples, 0.02%)</title><rect x="345.9" y="517" width="0.2" height="15.0" fill="rgb(224,91,21)" rx="2" ry="2" />
+<text  x="348.91" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt;::~_Vector_base (198,549 samples, 0.02%)</title><rect x="207.9" y="469" width="0.2" height="15.0" fill="rgb(212,33,8)" rx="2" ry="2" />
+<text  x="210.91" y="479.5" ></text>
+</g>
+<g >
+<title>void std::__invoke_impl&lt;void, void  (27,633,212 samples, 2.85%)</title><rect x="441.7" y="389" width="22.2" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="444.71" y="399.5" >v..</text>
+</g>
+<g >
+<title>ns3::PacketTagList::TagData::TagData (161,191 samples, 0.02%)</title><rect x="562.4" y="149" width="0.1" height="15.0" fill="rgb(207,12,2)" rx="2" ry="2" />
+<text  x="565.40" y="159.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt;::operator= (640,859 samples, 0.07%)</title><rect x="107.3" y="501" width="0.5" height="15.0" fill="rgb(231,123,29)" rx="2" ry="2" />
+<text  x="110.26" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;2ul, unsigned int&gt;::_M_head (159,042 samples, 0.02%)</title><rect x="756.4" y="565" width="0.1" height="15.0" fill="rgb(239,158,37)" rx="2" ry="2" />
+<text  x="759.42" y="575.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumPhy::EndTxData (1,667,932 samples, 0.17%)</title><rect x="612.2" y="565" width="1.4" height="15.0" fill="rgb(209,21,5)" rx="2" ry="2" />
+<text  x="615.23" y="575.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;int, std::allocator&lt;int&gt; &gt;::_Vector_impl::_Vector_impl (124,596 samples, 0.01%)</title><rect x="594.9" y="229" width="0.1" height="15.0" fill="rgb(236,142,34)" rx="2" ry="2" />
+<text  x="597.90" y="239.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::SpectrumValue (966,311 samples, 0.10%)</title><rect x="407.5" y="501" width="0.8" height="15.0" fill="rgb(211,27,6)" rx="2" ry="2" />
+<text  x="410.53" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;0ul, ns3::MultiModelSpectrumChannel*, ns3::Ptr&lt;ns3::SpectrumValue&gt;, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::_Tuple_impl&lt;ns3::MultiModelSpectrumChannel*&amp;, ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp;, double&amp;, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;&amp;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;&amp;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;&amp;, void&gt; (550,800 samples, 0.06%)</title><rect x="340.3" y="405" width="0.5" height="15.0" fill="rgb(231,123,29)" rx="2" ry="2" />
+<text  x="343.33" y="415.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, ns3::LteEnbComponentCarrierManager::UeInfo, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt; &gt; &gt;::at (305,705 samples, 0.03%)</title><rect x="96.4" y="405" width="0.2" height="15.0" fill="rgb(209,18,4)" rx="2" ry="2" />
+<text  x="99.39" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;1ul, ns3::Ptr&lt;ns3::SpectrumValue&gt;, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::_Tuple_impl (417,132 samples, 0.04%)</title><rect x="340.8" y="357" width="0.4" height="15.0" fill="rgb(206,6,1)" rx="2" ry="2" />
+<text  x="343.84" y="367.5" ></text>
+</g>
+<g >
+<title>[libm.so.6] (165,652 samples, 0.02%)</title><rect x="739.3" y="501" width="0.2" height="15.0" fill="rgb(208,16,4)" rx="2" ry="2" />
+<text  x="742.32" y="511.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::Ptr&lt;ns3::Object&gt;*, ns3::Ptr&lt;ns3::Object&gt; &gt; (158,025 samples, 0.02%)</title><rect x="502.6" y="357" width="0.1" height="15.0" fill="rgb(226,98,23)" rx="2" ry="2" />
+<text  x="505.61" y="367.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::end (314,439 samples, 0.03%)</title><rect x="217.0" y="469" width="0.3" height="15.0" fill="rgb(218,63,15)" rx="2" ry="2" />
+<text  x="220.02" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::LogComponent::IsEnabled (124,630 samples, 0.01%)</title><rect x="608.8" y="517" width="0.1" height="15.0" fill="rgb(214,43,10)" rx="2" ry="2" />
+<text  x="611.82" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::Object::GetTypeId (316,486 samples, 0.03%)</title><rect x="629.2" y="485" width="0.2" height="15.0" fill="rgb(234,134,32)" rx="2" ry="2" />
+<text  x="632.19" y="495.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::begin (448,394 samples, 0.05%)</title><rect x="491.4" y="533" width="0.4" height="15.0" fill="rgb(230,117,28)" rx="2" ry="2" />
+<text  x="494.43" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::LteHelper::InstallSingleEnbDevice (354,479 samples, 0.04%)</title><rect x="35.8" y="757" width="0.3" height="15.0" fill="rgb(211,27,6)" rx="2" ry="2" />
+<text  x="38.80" y="767.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::construct&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; const&amp;&gt; (272,222 samples, 0.03%)</title><rect x="342.1" y="341" width="0.2" height="15.0" fill="rgb(236,146,35)" rx="2" ry="2" />
+<text  x="345.07" y="351.5" ></text>
+</g>
+<g >
+<title>void std::_Rb_tree&lt;ns3::TbId_t, std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::_Select1st&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::_M_construct_node&lt;std::pair&lt;ns3::TbId_t, ns3::tbInfo_t&gt; &gt; (893,221 samples, 0.09%)</title><rect x="384.7" y="453" width="0.7" height="15.0" fill="rgb(243,177,42)" rx="2" ry="2" />
+<text  x="387.69" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultDeleter&lt;ns3::LteControlMessage&gt;::Delete (528,952 samples, 0.05%)</title><rect x="609.8" y="453" width="0.5" height="15.0" fill="rgb(224,87,20)" rx="2" ry="2" />
+<text  x="612.83" y="463.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::end (163,408 samples, 0.02%)</title><rect x="722.6" y="517" width="0.2" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="725.64" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt;::operator= (8,514,539 samples, 0.88%)</title><rect x="544.3" y="325" width="6.8" height="15.0" fill="rgb(219,65,15)" rx="2" ry="2" />
+<text  x="547.27" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::FfMacSchedSapUser::SchedUlConfigIndParameters::SchedUlConfigIndParameters (191,651 samples, 0.02%)</title><rect x="103.4" y="453" width="0.2" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="106.41" y="463.5" ></text>
+</g>
+<g >
+<title>int* std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;int const*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt;, int*&gt; (576,469 samples, 0.06%)</title><rect x="398.9" y="469" width="0.5" height="15.0" fill="rgb(229,111,26)" rx="2" ry="2" />
+<text  x="401.94" y="479.5" ></text>
+</g>
+<g >
+<title>std::__tuple_compare&lt;std::tuple&lt;double const&amp;, double const&amp;, double const&amp;&gt;, std::tuple&lt;double const&amp;, double const&amp;, double const&amp;&gt;, 2ul, 3ul&gt;::__eq (816,676 samples, 0.08%)</title><rect x="747.5" y="469" width="0.6" height="15.0" fill="rgb(222,80,19)" rx="2" ry="2" />
+<text  x="750.46" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_M_lower_bound (671,388 samples, 0.07%)</title><rect x="221.7" y="453" width="0.5" height="15.0" fill="rgb(231,121,28)" rx="2" ry="2" />
+<text  x="224.68" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::_M_lower_bound (189,556 samples, 0.02%)</title><rect x="192.8" y="437" width="0.2" height="15.0" fill="rgb(226,97,23)" rx="2" ry="2" />
+<text  x="195.85" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Buffer::Buffer (724,999 samples, 0.07%)</title><rect x="359.2" y="485" width="0.6" height="15.0" fill="rgb(254,226,54)" rx="2" ry="2" />
+<text  x="362.22" y="495.5" ></text>
+</g>
+<g >
+<title>main (923,574,718 samples, 95.24%)</title><rect x="35.7" y="789" width="742.8" height="15.0" fill="rgb(243,179,42)" rx="2" ry="2" />
+<text  x="38.67" y="799.5" >main</text>
+</g>
+<g >
+<title>std::vector&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt;::vector (511,121 samples, 0.05%)</title><rect x="131.6" y="501" width="0.4" height="15.0" fill="rgb(227,104,24)" rx="2" ry="2" />
+<text  x="134.61" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Object::Construct (267,173 samples, 0.03%)</title><rect x="19.4" y="437" width="0.2" height="15.0" fill="rgb(228,108,26)" rx="2" ry="2" />
+<text  x="22.36" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Head_base&lt;0ul, ns3::LteUePhy*, false&gt;::_Head_base&lt;ns3::LteUePhy*&amp;&gt; (194,018 samples, 0.02%)</title><rect x="617.4" y="437" width="0.1" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="620.36" y="447.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::end (268,850 samples, 0.03%)</title><rect x="362.1" y="485" width="0.2" height="15.0" fill="rgb(211,29,6)" rx="2" ry="2" />
+<text  x="365.09" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Buffer::Buffer (1,901,878 samples, 0.20%)</title><rect x="31.2" y="389" width="1.5" height="15.0" fill="rgb(254,226,54)" rx="2" ry="2" />
+<text  x="34.17" y="399.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::__uninitialized_default_n&lt;unsigned char*, unsigned long&gt; (957,537 samples, 0.10%)</title><rect x="460.2" y="229" width="0.8" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="463.23" y="239.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::Copy (3,716,085 samples, 0.38%)</title><rect x="67.6" y="469" width="3.0" height="15.0" fill="rgb(240,161,38)" rx="2" ry="2" />
+<text  x="70.64" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::_Rb_tree_impl&lt;std::less&lt;unsigned short&gt;, true&gt;::~_Rb_tree_impl (183,623 samples, 0.02%)</title><rect x="193.7" y="453" width="0.1" height="15.0" fill="rgb(219,65,15)" rx="2" ry="2" />
+<text  x="196.68" y="463.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;double&gt; &gt;::allocate (525,645 samples, 0.05%)</title><rect x="407.7" y="421" width="0.4" height="15.0" fill="rgb(234,136,32)" rx="2" ry="2" />
+<text  x="410.65" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::LteFrNoOpAlgorithm::DoGetAvailableUlRbg (159,757 samples, 0.02%)</title><rect x="232.3" y="469" width="0.1" height="15.0" fill="rgb(219,67,16)" rx="2" ry="2" />
+<text  x="235.28" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::UlInfoListElement_s::UlInfoListElement_s (231,995 samples, 0.02%)</title><rect x="266.7" y="405" width="0.2" height="15.0" fill="rgb(211,29,7)" rx="2" ry="2" />
+<text  x="269.68" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::BsrLteControlMessage::BsrLteControlMessage (515,105 samples, 0.05%)</title><rect x="688.6" y="485" width="0.4" height="15.0" fill="rgb(253,221,52)" rx="2" ry="2" />
+<text  x="691.62" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Node&gt;::Acquire (155,344 samples, 0.02%)</title><rect x="312.9" y="469" width="0.1" height="15.0" fill="rgb(227,102,24)" rx="2" ry="2" />
+<text  x="315.88" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::DlHarqFeedbackLteControlMessage&gt; ns3::Create&lt;ns3::DlHarqFeedbackLteControlMessage&gt; (705,727 samples, 0.07%)</title><rect x="420.7" y="357" width="0.6" height="15.0" fill="rgb(254,226,54)" rx="2" ry="2" />
+<text  x="423.73" y="367.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::allocate (126,498 samples, 0.01%)</title><rect x="81.8" y="421" width="0.1" height="15.0" fill="rgb(225,92,22)" rx="2" ry="2" />
+<text  x="84.85" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Function_base::~_Function_base (240,849 samples, 0.02%)</title><rect x="64.7" y="421" width="0.2" height="15.0" fill="rgb(221,74,17)" rx="2" ry="2" />
+<text  x="67.74" y="431.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt;::_M_ptr (351,633 samples, 0.04%)</title><rect x="369.3" y="485" width="0.3" height="15.0" fill="rgb(215,48,11)" rx="2" ry="2" />
+<text  x="372.34" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::AttributeConstructionList::~AttributeConstructionList (204,057 samples, 0.02%)</title><rect x="448.1" y="277" width="0.2" height="15.0" fill="rgb(217,58,13)" rx="2" ry="2" />
+<text  x="451.09" y="287.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::key_comp (197,963 samples, 0.02%)</title><rect x="273.2" y="453" width="0.1" height="15.0" fill="rgb(229,114,27)" rx="2" ry="2" />
+<text  x="276.18" y="463.5" ></text>
+</g>
+<g >
+<title>std::_List_node&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt;::_M_valptr (551,416 samples, 0.06%)</title><rect x="369.2" y="501" width="0.4" height="15.0" fill="rgb(215,46,11)" rx="2" ry="2" />
+<text  x="372.18" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt; ns3::CreateObject&lt;ns3::PacketBurst&gt; (5,473,984 samples, 0.56%)</title><rect x="628.9" y="533" width="4.4" height="15.0" fill="rgb(205,4,0)" rx="2" ry="2" />
+<text  x="631.94" y="543.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt;::resize (1,737,961 samples, 0.18%)</title><rect x="510.9" y="549" width="1.4" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="513.91" y="559.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt; &gt; &gt;::_S_key (613,037 samples, 0.06%)</title><rect x="433.7" y="277" width="0.5" height="15.0" fill="rgb(243,176,42)" rx="2" ry="2" />
+<text  x="436.71" y="287.5" ></text>
+</g>
+<g >
+<title>std::__detail::_List_node_header::_M_init (148,323 samples, 0.02%)</title><rect x="286.0" y="469" width="0.1" height="15.0" fill="rgb(243,178,42)" rx="2" ry="2" />
+<text  x="288.98" y="479.5" ></text>
+</g>
+<g >
+<title>bool __gnu_cxx::operator==&lt;ns3::VendorSpecificListElement_s const*, std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt; &gt; (308,120 samples, 0.03%)</title><rect x="144.1" y="373" width="0.3" height="15.0" fill="rgb(233,131,31)" rx="2" ry="2" />
+<text  x="147.10" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::~PacketBurst (158,753 samples, 0.02%)</title><rect x="17.0" y="373" width="0.1" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="19.99" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;0ul, ns3::MultiModelSpectrumChannel*, ns3::Ptr&lt;ns3::SpectrumValue&gt;, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::_Tuple_impl (417,132 samples, 0.04%)</title><rect x="340.8" y="373" width="0.4" height="15.0" fill="rgb(229,111,26)" rx="2" ry="2" />
+<text  x="343.84" y="383.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_get_node (185,442 samples, 0.02%)</title><rect x="318.9" y="325" width="0.2" height="15.0" fill="rgb(247,194,46)" rx="2" ry="2" />
+<text  x="321.91" y="335.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::UlDciListElement_s, std::allocator&lt;ns3::UlDciListElement_s&gt; &gt;::~vector (568,827 samples, 0.06%)</title><rect x="229.5" y="453" width="0.5" height="15.0" fill="rgb(246,189,45)" rx="2" ry="2" />
+<text  x="232.55" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::HarqProcessInfoElement_t* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;ns3::HarqProcessInfoElement_t const*, std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt;, ns3::HarqProcessInfoElement_t*, ns3::HarqProcessInfoElement_t&gt; (489,523 samples, 0.05%)</title><rect x="524.9" y="325" width="0.4" height="15.0" fill="rgb(252,220,52)" rx="2" ry="2" />
+<text  x="527.94" y="335.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::LteFlowId_t, std::pair&lt;ns3::LteFlowId_t const, ns3::FfMacSchedSapProvider::SchedDlRlcBufferReqParameters&gt;, std::_Select1st&lt;std::pair&lt;ns3::LteFlowId_t const, ns3::FfMacSchedSapProvider::SchedDlRlcBufferReqParameters&gt; &gt;, std::less&lt;ns3::LteFlowId_t&gt;, std::allocator&lt;std::pair&lt;ns3::LteFlowId_t const, ns3::FfMacSchedSapProvider::SchedDlRlcBufferReqParameters&gt; &gt; &gt;::_S_right (147,258 samples, 0.02%)</title><rect x="182.2" y="421" width="0.1" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="185.21" y="431.5" ></text>
+</g>
+<g >
+<title>[libm.so.6] (162,241 samples, 0.02%)</title><rect x="302.7" y="469" width="0.1" height="15.0" fill="rgb(208,16,4)" rx="2" ry="2" />
+<text  x="305.66" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::int64x64_t::int64x64_t (437,040 samples, 0.05%)</title><rect x="406.5" y="469" width="0.3" height="15.0" fill="rgb(240,161,38)" rx="2" ry="2" />
+<text  x="409.48" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::TbId_t, std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::_Select1st&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::find (1,429,194 samples, 0.15%)</title><rect x="529.0" y="325" width="1.1" height="15.0" fill="rgb(215,50,12)" rx="2" ry="2" />
+<text  x="531.95" y="335.5" ></text>
+</g>
+<g >
+<title>void std::__invoke_impl&lt;void, void  (324,769 samples, 0.03%)</title><rect x="611.9" y="357" width="0.3" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="614.94" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt; ns3::Create&lt;ns3::PacketBurst&gt; (262,299 samples, 0.03%)</title><rect x="644.9" y="453" width="0.3" height="15.0" fill="rgb(225,93,22)" rx="2" ry="2" />
+<text  x="647.94" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;::clear (344,275 samples, 0.04%)</title><rect x="209.0" y="485" width="0.3" height="15.0" fill="rgb(251,212,50)" rx="2" ry="2" />
+<text  x="212.00" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumSignalParametersUlSrsFrame::Copy (151,019 samples, 0.02%)</title><rect x="613.9" y="517" width="0.1" height="15.0" fill="rgb(243,179,42)" rx="2" ry="2" />
+<text  x="616.86" y="527.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;double&gt; &gt;::allocate (530,824 samples, 0.05%)</title><rect x="239.4" y="229" width="0.4" height="15.0" fill="rgb(234,136,32)" rx="2" ry="2" />
+<text  x="242.38" y="239.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::operator[] (291,311 samples, 0.03%)</title><rect x="588.9" y="245" width="0.3" height="15.0" fill="rgb(248,202,48)" rx="2" ry="2" />
+<text  x="591.92" y="255.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;is_invocable_r_v&lt;void, std::_Bind&lt;void  (5,321,712 samples, 0.55%)</title><rect x="11.2" y="677" width="4.3" height="15.0" fill="rgb(243,178,42)" rx="2" ry="2" />
+<text  x="14.17" y="687.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, unsigned int, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt; &gt;::begin (224,560 samples, 0.02%)</title><rect x="178.5" y="469" width="0.2" height="15.0" fill="rgb(243,174,41)" rx="2" ry="2" />
+<text  x="181.49" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy::SetDownlinkSubChannelsWithPowerAllocation (10,110,206 samples, 1.04%)</title><rect x="53.9" y="549" width="8.1" height="15.0" fill="rgb(251,212,50)" rx="2" ry="2" />
+<text  x="56.87" y="559.5" ></text>
+</g>
+<g >
+<title>ns3::LteHelper::InstallUeDevice (533,991 samples, 0.06%)</title><rect x="36.1" y="773" width="0.5" height="15.0" fill="rgb(239,158,37)" rx="2" ry="2" />
+<text  x="39.12" y="783.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::vector&lt;int, std::allocator&lt;int&gt; &gt;, std::allocator&lt;std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt; &gt;::at (374,007 samples, 0.04%)</title><rect x="530.8" y="341" width="0.3" height="15.0" fill="rgb(236,145,34)" rx="2" ry="2" />
+<text  x="533.79" y="351.5" ></text>
+</g>
+<g >
+<title>__cxxabiv1::__si_class_type_info::__do_dyncast (332,012 samples, 0.03%)</title><rect x="671.6" y="501" width="0.3" height="15.0" fill="rgb(219,65,15)" rx="2" ry="2" />
+<text  x="674.65" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::_M_lower_bound (274,073 samples, 0.03%)</title><rect x="244.1" y="437" width="0.2" height="15.0" fill="rgb(226,97,23)" rx="2" ry="2" />
+<text  x="247.07" y="447.5" ></text>
+</g>
+<g >
+<title>main (22,443,594 samples, 2.31%)</title><rect x="17.2" y="821" width="18.0" height="15.0" fill="rgb(243,179,42)" rx="2" ry="2" />
+<text  x="20.17" y="831.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt;, std::allocator&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt; &gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt;, std::allocator&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt;, std::allocator&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt;::find (1,282,559 samples, 0.13%)</title><rect x="187.9" y="469" width="1.0" height="15.0" fill="rgb(253,225,53)" rx="2" ry="2" />
+<text  x="190.91" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::TypeId::GetParent (695,948 samples, 0.07%)</title><rect x="632.0" y="469" width="0.6" height="15.0" fill="rgb(211,29,7)" rx="2" ry="2" />
+<text  x="635.00" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::HarqStatus_e* std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;ns3::DlInfoListElement_s::HarqStatus_e const*, std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt; &gt;, ns3::DlInfoListElement_s::HarqStatus_e*&gt; (598,769 samples, 0.06%)</title><rect x="444.2" y="245" width="0.5" height="15.0" fill="rgb(212,36,8)" rx="2" ry="2" />
+<text  x="447.18" y="255.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned int const, ns3::RxSpectrumModelInfo&gt; &gt;::_M_addr (230,074 samples, 0.02%)</title><rect x="328.9" y="437" width="0.2" height="15.0" fill="rgb(243,176,42)" rx="2" ry="2" />
+<text  x="331.93" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Simulator::Now (154,294 samples, 0.02%)</title><rect x="684.2" y="549" width="0.1" height="15.0" fill="rgb(240,164,39)" rx="2" ry="2" />
+<text  x="687.21" y="559.5" ></text>
+</g>
+<g >
+<title>ns3::MakeEvent&lt;void  (361,324 samples, 0.04%)</title><rect x="727.6" y="453" width="0.2" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="730.56" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::ByteTagList::Begin (274,085 samples, 0.03%)</title><rect x="436.6" y="229" width="0.2" height="15.0" fill="rgb(243,174,41)" rx="2" ry="2" />
+<text  x="439.62" y="239.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteUeMac::LcInfo&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteUeMac::LcInfo&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteUeMac::LcInfo&gt; &gt; &gt;::_S_key (624,690 samples, 0.06%)</title><rect x="437.9" y="277" width="0.5" height="15.0" fill="rgb(221,77,18)" rx="2" ry="2" />
+<text  x="440.90" y="287.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::TbId_t, std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::_Select1st&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::find (186,148 samples, 0.02%)</title><rect x="120.4" y="501" width="0.2" height="15.0" fill="rgb(215,50,12)" rx="2" ry="2" />
+<text  x="123.44" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::LogComponent::IsEnabled (203,037 samples, 0.02%)</title><rect x="38.4" y="709" width="0.1" height="15.0" fill="rgb(214,43,10)" rx="2" ry="2" />
+<text  x="41.37" y="719.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultDeleter&lt;ns3::Packet&gt;::Delete (750,603 samples, 0.08%)</title><rect x="774.1" y="213" width="0.6" height="15.0" fill="rgb(231,123,29)" rx="2" ry="2" />
+<text  x="777.11" y="223.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt; &gt; &gt;::_M_begin (334,035 samples, 0.03%)</title><rect x="157.6" y="373" width="0.3" height="15.0" fill="rgb(247,193,46)" rx="2" ry="2" />
+<text  x="160.62" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::HarqProcessInfoElement_t* std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;ns3::HarqProcessInfoElement_t const*, std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt;, ns3::HarqProcessInfoElement_t*&gt; (995,216 samples, 0.10%)</title><rect x="512.9" y="469" width="0.8" height="15.0" fill="rgb(210,26,6)" rx="2" ry="2" />
+<text  x="515.86" y="479.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;::_M_insert&lt;ns3::UlDciLteControlMessage const&amp;&gt; (198,522 samples, 0.02%)</title><rect x="296.5" y="517" width="0.2" height="15.0" fill="rgb(224,91,21)" rx="2" ry="2" />
+<text  x="299.51" y="527.5" ></text>
+</g>
+<g >
+<title>void std::__invoke_impl&lt;void, void  (72,708,735 samples, 7.50%)</title><rect x="518.1" y="389" width="58.5" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="521.12" y="399.5" >void s..</text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt; &gt; &gt;::_M_begin (162,112 samples, 0.02%)</title><rect x="235.4" y="453" width="0.1" height="15.0" fill="rgb(252,216,51)" rx="2" ry="2" />
+<text  x="238.41" y="463.5" ></text>
+</g>
+<g >
+<title>void std::destroy_at&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; (1,991,119 samples, 0.21%)</title><rect x="501.3" y="501" width="1.6" height="15.0" fill="rgb(213,38,9)" rx="2" ry="2" />
+<text  x="504.32" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Bind&lt;void  (265,283 samples, 0.03%)</title><rect x="639.8" y="437" width="0.2" height="15.0" fill="rgb(253,221,52)" rx="2" ry="2" />
+<text  x="642.79" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Bind&lt;void  (372,120 samples, 0.04%)</title><rect x="64.0" y="437" width="0.3" height="15.0" fill="rgb(253,221,52)" rx="2" ry="2" />
+<text  x="67.04" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumModel const&gt;&amp;&amp; std::forward&lt;ns3::Ptr&lt;ns3::SpectrumModel const&gt; &gt; (196,233 samples, 0.02%)</title><rect x="402.0" y="501" width="0.2" height="15.0" fill="rgb(234,137,32)" rx="2" ry="2" />
+<text  x="405.05" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Packet::~Packet (671,079 samples, 0.07%)</title><rect x="774.2" y="197" width="0.5" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="777.17" y="207.5" ></text>
+</g>
+<g >
+<title>std::_List_node&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt;::_M_valptr (276,707 samples, 0.03%)</title><rect x="362.7" y="453" width="0.3" height="15.0" fill="rgb(215,46,11)" rx="2" ry="2" />
+<text  x="365.74" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Simulator::DoSchedule (1,313,182 samples, 0.14%)</title><rect x="637.1" y="517" width="1.1" height="15.0" fill="rgb(222,79,18)" rx="2" ry="2" />
+<text  x="640.10" y="527.5" ></text>
+</g>
+<g >
+<title>std::__detail::_List_node_base::_M_hook (153,104 samples, 0.02%)</title><rect x="23.5" y="309" width="0.1" height="15.0" fill="rgb(244,179,42)" rx="2" ry="2" />
+<text  x="26.47" y="319.5" ></text>
+</g>
+<g >
+<title>std::less&lt;unsigned short&gt;::operator (131,872 samples, 0.01%)</title><rect x="456.4" y="261" width="0.1" height="15.0" fill="rgb(207,11,2)" rx="2" ry="2" />
+<text  x="459.36" y="271.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::lower_bound (147,572 samples, 0.02%)</title><rect x="294.2" y="501" width="0.1" height="15.0" fill="rgb(214,43,10)" rx="2" ry="2" />
+<text  x="297.21" y="511.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;std::__strip_reference_wrapper&lt;std::decay&lt;ns3::Scheduler::EventKey const&amp;&gt;::type&gt;::__type, std::__strip_reference_wrapper&lt;std::decay&lt;ns3::EventImpl* const&amp;&gt;::type&gt;::__type&gt; std::make_pair&lt;ns3::Scheduler::EventKey const&amp;, ns3::EventImpl* const&amp;&gt; (202,068 samples, 0.02%)</title><rect x="86.4" y="453" width="0.2" height="15.0" fill="rgb(235,141,33)" rx="2" ry="2" />
+<text  x="89.41" y="463.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;is_invocable_r_v&lt;void, ns3::Callback&lt;void, ns3::Ptr&lt;ns3::Packet&gt; &gt;::Callback&lt;void  (20,383,935 samples, 2.10%)</title><rect x="422.3" y="485" width="16.4" height="15.0" fill="rgb(213,40,9)" rx="2" ry="2" />
+<text  x="425.31" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Head_base&lt;5ul, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;, false&gt;::_Head_base&lt;std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;&amp;&gt; (318,126 samples, 0.03%)</title><rect x="667.0" y="325" width="0.2" height="15.0" fill="rgb(218,60,14)" rx="2" ry="2" />
+<text  x="669.98" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::DlHarqFeedbackLteControlMessage::GetDlHarqFeedback (1,880,893 samples, 0.19%)</title><rect x="443.9" y="357" width="1.6" height="15.0" fill="rgb(210,25,6)" rx="2" ry="2" />
+<text  x="446.95" y="367.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt; &gt;::_S_key (1,228,544 samples, 0.13%)</title><rect x="321.1" y="437" width="1.0" height="15.0" fill="rgb(238,153,36)" rx="2" ry="2" />
+<text  x="324.09" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_get_insert_hint_unique_pos (375,672 samples, 0.04%)</title><rect x="83.9" y="405" width="0.3" height="15.0" fill="rgb(209,22,5)" rx="2" ry="2" />
+<text  x="86.86" y="415.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt; &gt; &gt;::_M_erase (2,754,625 samples, 0.28%)</title><rect x="289.8" y="517" width="2.2" height="15.0" fill="rgb(228,109,26)" rx="2" ry="2" />
+<text  x="292.81" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::Packet::Packet (2,698,693 samples, 0.28%)</title><rect x="31.2" y="405" width="2.1" height="15.0" fill="rgb(230,115,27)" rx="2" ry="2" />
+<text  x="34.17" y="415.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt;::destroy&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; (186,011 samples, 0.02%)</title><rect x="776.3" y="341" width="0.1" height="15.0" fill="rgb(230,118,28)" rx="2" ry="2" />
+<text  x="779.26" y="351.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned char, ns3::LteUeMac::LcInfo, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteUeMac::LcInfo&gt; &gt; &gt;::end (285,417 samples, 0.03%)</title><rect x="571.5" y="325" width="0.2" height="15.0" fill="rgb(210,27,6)" rx="2" ry="2" />
+<text  x="574.51" y="335.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::__relocate_a&lt;unsigned char*, unsigned char*, std::allocator&lt;unsigned char&gt; &gt; (306,347 samples, 0.03%)</title><rect x="597.8" y="229" width="0.2" height="15.0" fill="rgb(233,131,31)" rx="2" ry="2" />
+<text  x="600.79" y="239.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt;::_M_ptr (290,218 samples, 0.03%)</title><rect x="137.2" y="405" width="0.3" height="15.0" fill="rgb(206,4,1)" rx="2" ry="2" />
+<text  x="140.24" y="415.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;int&gt;::allocate (177,537 samples, 0.02%)</title><rect x="699.8" y="469" width="0.2" height="15.0" fill="rgb(235,139,33)" rx="2" ry="2" />
+<text  x="702.81" y="479.5" ></text>
+</g>
+<g >
+<title>std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;* std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_create_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; const&amp;&gt; (262,916 samples, 0.03%)</title><rect x="620.5" y="469" width="0.3" height="15.0" fill="rgb(230,116,27)" rx="2" ry="2" />
+<text  x="623.55" y="479.5" ></text>
+</g>
+<g >
+<title>std::set&lt;unsigned short, std::less&lt;unsigned short&gt;, std::allocator&lt;unsigned short&gt; &gt;::set (311,875 samples, 0.03%)</title><rect x="194.9" y="485" width="0.3" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="197.93" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::TbId_t, std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::_Select1st&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::_Auto_node::_M_insert (436,204 samples, 0.04%)</title><rect x="527.6" y="293" width="0.4" height="15.0" fill="rgb(220,69,16)" rx="2" ry="2" />
+<text  x="530.61" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::operator+= (189,127 samples, 0.02%)</title><rect x="405.5" y="517" width="0.1" height="15.0" fill="rgb(215,49,11)" rx="2" ry="2" />
+<text  x="408.47" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultDeleter&lt;ns3::SpectrumSignalParameters&gt;::Delete (3,444,708 samples, 0.36%)</title><rect x="75.3" y="485" width="2.8" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="78.31" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::~_Rb_tree (916,115 samples, 0.09%)</title><rect x="193.1" y="469" width="0.7" height="15.0" fill="rgb(254,228,54)" rx="2" ry="2" />
+<text  x="196.09" y="479.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt;::_M_ptr (242,288 samples, 0.02%)</title><rect x="179.1" y="437" width="0.2" height="15.0" fill="rgb(206,4,1)" rx="2" ry="2" />
+<text  x="182.14" y="447.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt;::vector (327,207 samples, 0.03%)</title><rect x="92.3" y="357" width="0.2" height="15.0" fill="rgb(248,198,47)" rx="2" ry="2" />
+<text  x="95.28" y="367.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;3ul, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::_M_head (152,007 samples, 0.02%)</title><rect x="757.0" y="565" width="0.1" height="15.0" fill="rgb(249,204,48)" rx="2" ry="2" />
+<text  x="760.00" y="575.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::ByteTagListData*, std::allocator&lt;ns3::ByteTagListData*&gt; &gt;::push_back (853,471 samples, 0.09%)</title><rect x="547.0" y="85" width="0.7" height="15.0" fill="rgb(249,204,48)" rx="2" ry="2" />
+<text  x="549.98" y="95.5" ></text>
+</g>
+<g >
+<title>std::_List_const_iterator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt;::operator++ (223,776 samples, 0.02%)</title><rect x="369.6" y="517" width="0.2" height="15.0" fill="rgb(228,107,25)" rx="2" ry="2" />
+<text  x="372.63" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::BuildRarListElement_s* std::__do_uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::BuildRarListElement_s const*, std::vector&lt;ns3::BuildRarListElement_s, std::allocator&lt;ns3::BuildRarListElement_s&gt; &gt; &gt;, ns3::BuildRarListElement_s*&gt; (158,059 samples, 0.02%)</title><rect x="143.2" y="389" width="0.1" height="15.0" fill="rgb(208,17,4)" rx="2" ry="2" />
+<text  x="146.16" y="399.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;::__normal_iterator (160,148 samples, 0.02%)</title><rect x="417.0" y="501" width="0.2" height="15.0" fill="rgb(215,50,12)" rx="2" ry="2" />
+<text  x="420.04" y="511.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;is_member_pointer_v&lt;void  (2,347,913 samples, 0.24%)</title><rect x="306.0" y="501" width="1.9" height="15.0" fill="rgb(241,170,40)" rx="2" ry="2" />
+<text  x="309.03" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::ByteTagIterator::Next (735,090 samples, 0.08%)</title><rect x="436.0" y="245" width="0.6" height="15.0" fill="rgb(217,57,13)" rx="2" ry="2" />
+<text  x="439.00" y="255.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;double&gt;::allocate (525,645 samples, 0.05%)</title><rect x="407.7" y="405" width="0.4" height="15.0" fill="rgb(221,76,18)" rx="2" ry="2" />
+<text  x="410.65" y="415.5" ></text>
+</g>
+<g >
+<title>std::_List_node&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt;::_M_valptr (389,923 samples, 0.04%)</title><rect x="723.5" y="469" width="0.3" height="15.0" fill="rgb(254,226,54)" rx="2" ry="2" />
+<text  x="726.50" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Object::DoDelete (384,276 samples, 0.04%)</title><rect x="119.9" y="357" width="0.3" height="15.0" fill="rgb(212,34,8)" rx="2" ry="2" />
+<text  x="122.86" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::PfFfMacScheduler::DoSchedDlRlcBufferReq (2,515,374 samples, 0.26%)</title><rect x="25.4" y="325" width="2.0" height="15.0" fill="rgb(236,143,34)" rx="2" ry="2" />
+<text  x="28.42" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy::CreateTxPowerSpectralDensity (1,022,169 samples, 0.11%)</title><rect x="111.4" y="501" width="0.8" height="15.0" fill="rgb(253,225,53)" rx="2" ry="2" />
+<text  x="114.35" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::find (922,442 samples, 0.10%)</title><rect x="57.8" y="485" width="0.7" height="15.0" fill="rgb(219,65,15)" rx="2" ry="2" />
+<text  x="60.77" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::PfFfMacScheduler::DoSchedDlCqiInfoReq (1,060,666 samples, 0.11%)</title><rect x="93.7" y="485" width="0.8" height="15.0" fill="rgb(242,173,41)" rx="2" ry="2" />
+<text  x="96.67" y="495.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::AttributeConstructionList::Item, std::allocator&lt;ns3::AttributeConstructionList::Item&gt; &gt;::_List_impl::_List_impl (387,766 samples, 0.04%)</title><rect x="630.3" y="453" width="0.3" height="15.0" fill="rgb(210,27,6)" rx="2" ry="2" />
+<text  x="633.30" y="463.5" ></text>
+</g>
+<g >
+<title>double* std::fill_n&lt;double*, unsigned long, double&gt; (362,228 samples, 0.04%)</title><rect x="729.9" y="373" width="0.3" height="15.0" fill="rgb(234,135,32)" rx="2" ry="2" />
+<text  x="732.90" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::MacCeListElement_s* std::__uninitialized_copy&lt;false&gt;::__uninit_copy&lt;std::move_iterator&lt;ns3::MacCeListElement_s*&gt;, ns3::MacCeListElement_s*&gt; (193,178 samples, 0.02%)</title><rect x="129.7" y="437" width="0.2" height="15.0" fill="rgb(215,49,11)" rx="2" ry="2" />
+<text  x="132.71" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::LteChunkProcessor::Start (605,461 samples, 0.06%)</title><rect x="728.1" y="501" width="0.5" height="15.0" fill="rgb(227,103,24)" rx="2" ry="2" />
+<text  x="731.07" y="511.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::~vector (287,229 samples, 0.03%)</title><rect x="521.5" y="341" width="0.2" height="15.0" fill="rgb(243,174,41)" rx="2" ry="2" />
+<text  x="524.49" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteUeNetDevice&gt;::~Ptr (125,167 samples, 0.01%)</title><rect x="599.9" y="309" width="0.1" height="15.0" fill="rgb(218,61,14)" rx="2" ry="2" />
+<text  x="602.85" y="319.5" ></text>
+</g>
+<g >
+<title>std::__detail::_List_node_header::_List_node_header (210,164 samples, 0.02%)</title><rect x="610.4" y="501" width="0.2" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="613.39" y="511.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::end (395,922 samples, 0.04%)</title><rect x="148.3" y="389" width="0.4" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="151.35" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::_M_emplace_hint_unique&lt;std::piecewise_construct_t const&amp;, std::tuple&lt;unsigned short const&amp;&gt;, std::tuple&lt;&gt; &gt; (339,246 samples, 0.03%)</title><rect x="99.5" y="453" width="0.2" height="15.0" fill="rgb(213,37,8)" rx="2" ry="2" />
+<text  x="102.47" y="463.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::BuildBroadcastListElement_s*, ns3::BuildBroadcastListElement_s&gt; (197,106 samples, 0.02%)</title><rect x="145.3" y="437" width="0.1" height="15.0" fill="rgb(227,102,24)" rx="2" ry="2" />
+<text  x="148.29" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteSpectrumSignalParametersDlCtrlFrame&gt; ns3::Create&lt;ns3::LteSpectrumSignalParametersDlCtrlFrame&gt; (1,801,965 samples, 0.19%)</title><rect x="342.6" y="517" width="1.4" height="15.0" fill="rgb(251,211,50)" rx="2" ry="2" />
+<text  x="345.57" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_Rb_tree (2,374,517 samples, 0.24%)</title><rect x="58.6" y="501" width="1.9" height="15.0" fill="rgb(232,124,29)" rx="2" ry="2" />
+<text  x="61.61" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteControlMessage&gt;::operator (151,109 samples, 0.02%)</title><rect x="388.8" y="549" width="0.1" height="15.0" fill="rgb(216,52,12)" rx="2" ry="2" />
+<text  x="391.82" y="559.5" ></text>
+</g>
+<g >
+<title> (451,603 samples, 0.05%)</title><rect x="328.8" y="485" width="0.3" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="331.75" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::LteUeMac::SendReportBufferStatus (15,163,076 samples, 1.56%)</title><rect x="685.3" y="517" width="12.1" height="15.0" fill="rgb(221,75,18)" rx="2" ry="2" />
+<text  x="688.25" y="527.5" ></text>
+</g>
+<g >
+<title>[libc.so.6] (155,299 samples, 0.02%)</title><rect x="35.5" y="773" width="0.2" height="15.0" fill="rgb(223,84,20)" rx="2" ry="2" />
+<text  x="38.54" y="783.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::__copy_move_a1&lt;false, unsigned char const*, unsigned char*&gt; (262,899 samples, 0.03%)</title><rect x="688.0" y="373" width="0.2" height="15.0" fill="rgb(215,50,12)" rx="2" ry="2" />
+<text  x="690.97" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, unsigned short, std::_Identity&lt;unsigned short&gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;unsigned short&gt; &gt;::end (265,370 samples, 0.03%)</title><rect x="246.0" y="453" width="0.2" height="15.0" fill="rgb(223,84,20)" rx="2" ry="2" />
+<text  x="249.04" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter&gt;::GetReferenceCount (270,897 samples, 0.03%)</title><rect x="163.4" y="389" width="0.2" height="15.0" fill="rgb(218,61,14)" rx="2" ry="2" />
+<text  x="166.37" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Bind_helper&lt;std::__or_&lt;std::is_integral&lt;std::decay&lt;void  (935,594 samples, 0.10%)</title><rect x="666.5" y="469" width="0.8" height="15.0" fill="rgb(237,148,35)" rx="2" ry="2" />
+<text  x="669.51" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter&gt;::Unref (699,107 samples, 0.07%)</title><rect x="166.2" y="437" width="0.6" height="15.0" fill="rgb(221,78,18)" rx="2" ry="2" />
+<text  x="169.22" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::HarqStatus_e* std::__uninitialized_fill_n_a&lt;ns3::DlInfoListElement_s::HarqStatus_e*, unsigned long, ns3::DlInfoListElement_s::HarqStatus_e, ns3::DlInfoListElement_s::HarqStatus_e&gt; (295,111 samples, 0.03%)</title><rect x="511.1" y="517" width="0.2" height="15.0" fill="rgb(251,215,51)" rx="2" ry="2" />
+<text  x="514.06" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Packet&gt;::operator (196,328 samples, 0.02%)</title><rect x="154.7" y="389" width="0.2" height="15.0" fill="rgb(224,88,21)" rx="2" ry="2" />
+<text  x="157.73" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultDeleter&lt;ns3::LteControlMessage&gt;::Delete (538,741 samples, 0.06%)</title><rect x="167.0" y="421" width="0.5" height="15.0" fill="rgb(224,87,20)" rx="2" ry="2" />
+<text  x="170.03" y="431.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt;::_M_erase (213,559 samples, 0.02%)</title><rect x="117.1" y="501" width="0.2" height="15.0" fill="rgb(242,170,40)" rx="2" ry="2" />
+<text  x="120.11" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::LteRlcSpecificLteMacSapUser::NotifyTxOpportunity (314,249 samples, 0.03%)</title><rect x="11.2" y="421" width="0.2" height="15.0" fill="rgb(249,204,48)" rx="2" ry="2" />
+<text  x="14.17" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;::~Ptr (676,765 samples, 0.07%)</title><rect x="323.9" y="501" width="0.6" height="15.0" fill="rgb(236,143,34)" rx="2" ry="2" />
+<text  x="326.94" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue const&gt;::Ptr (187,751 samples, 0.02%)</title><rect x="709.7" y="373" width="0.2" height="15.0" fill="rgb(254,229,54)" rx="2" ry="2" />
+<text  x="712.74" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::Packet::GetSize (244,662 samples, 0.03%)</title><rect x="152.6" y="389" width="0.2" height="15.0" fill="rgb(240,163,39)" rx="2" ry="2" />
+<text  x="155.57" y="399.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;unsigned short&gt;::allocate (360,140 samples, 0.04%)</title><rect x="480.0" y="213" width="0.2" height="15.0" fill="rgb(214,44,10)" rx="2" ry="2" />
+<text  x="482.95" y="223.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::HarqStatus_e* std::__uninitialized_copy&lt;true&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::DlInfoListElement_s::HarqStatus_e const*, std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt; &gt;, ns3::DlInfoListElement_s::HarqStatus_e*&gt; (234,294 samples, 0.02%)</title><rect x="510.0" y="469" width="0.2" height="15.0" fill="rgb(241,165,39)" rx="2" ry="2" />
+<text  x="512.98" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned int, std::allocator&lt;unsigned int&gt; &gt;::_M_create_storage (336,354 samples, 0.03%)</title><rect x="695.0" y="469" width="0.3" height="15.0" fill="rgb(225,93,22)" rx="2" ry="2" />
+<text  x="698.04" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Packet::Packet (1,702,514 samples, 0.18%)</title><rect x="624.2" y="501" width="1.4" height="15.0" fill="rgb(230,115,27)" rx="2" ry="2" />
+<text  x="627.19" y="511.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::end (128,840 samples, 0.01%)</title><rect x="591.1" y="261" width="0.1" height="15.0" fill="rgb(214,44,10)" rx="2" ry="2" />
+<text  x="594.05" y="271.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; &gt; &gt;::operator* (400,979 samples, 0.04%)</title><rect x="455.1" y="309" width="0.4" height="15.0" fill="rgb(240,163,39)" rx="2" ry="2" />
+<text  x="458.15" y="319.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, unsigned int, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt; &gt;::end (232,052 samples, 0.02%)</title><rect x="178.7" y="469" width="0.2" height="15.0" fill="rgb(223,86,20)" rx="2" ry="2" />
+<text  x="181.67" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::TagBuffer::Write (197,148 samples, 0.02%)</title><rect x="31.0" y="389" width="0.2" height="15.0" fill="rgb(229,114,27)" rx="2" ry="2" />
+<text  x="34.01" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt;, std::allocator&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt;::_M_valptr (428,286 samples, 0.04%)</title><rect x="188.3" y="421" width="0.4" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="191.32" y="431.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;::end (190,575 samples, 0.02%)</title><rect x="286.9" y="485" width="0.2" height="15.0" fill="rgb(240,163,39)" rx="2" ry="2" />
+<text  x="289.93" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::PacketBurst (2,988,991 samples, 0.31%)</title><rect x="536.6" y="309" width="2.4" height="15.0" fill="rgb(208,15,3)" rx="2" ry="2" />
+<text  x="539.55" y="319.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt;::push_back (3,370,357 samples, 0.35%)</title><rect x="210.5" y="485" width="2.7" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="213.51" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::NoOpComponentCarrierManager::DoReportBufferStatus (6,485,597 samples, 0.67%)</title><rect x="24.3" y="389" width="5.2" height="15.0" fill="rgb(230,119,28)" rx="2" ry="2" />
+<text  x="27.28" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::Object::~Object (420,675 samples, 0.04%)</title><rect x="502.4" y="389" width="0.3" height="15.0" fill="rgb(229,110,26)" rx="2" ry="2" />
+<text  x="505.40" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::EventImpl::Invoke (22,443,594 samples, 2.31%)</title><rect x="17.2" y="757" width="18.0" height="15.0" fill="rgb(209,20,4)" rx="2" ry="2" />
+<text  x="20.17" y="767.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::_M_clear (750,825 samples, 0.08%)</title><rect x="501.7" y="389" width="0.6" height="15.0" fill="rgb(217,56,13)" rx="2" ry="2" />
+<text  x="504.74" y="399.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; const*, std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt; &gt;::__normal_iterator (195,190 samples, 0.02%)</title><rect x="623.4" y="501" width="0.2" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="626.42" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::ObjectBase::~ObjectBase (196,060 samples, 0.02%)</title><rect x="20.6" y="325" width="0.1" height="15.0" fill="rgb(232,126,30)" rx="2" ry="2" />
+<text  x="23.58" y="335.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;* std::__copy_move_a2&lt;true, std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;*, std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;*&gt; (2,402,205 samples, 0.25%)</title><rect x="349.7" y="453" width="2.0" height="15.0" fill="rgb(215,49,11)" rx="2" ry="2" />
+<text  x="352.74" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt;::~_Vector_base (431,058 samples, 0.04%)</title><rect x="24.8" y="309" width="0.4" height="15.0" fill="rgb(253,220,52)" rx="2" ry="2" />
+<text  x="27.85" y="319.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt;::_M_lower_bound (887,310 samples, 0.09%)</title><rect x="455.8" y="277" width="0.7" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="458.75" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::LtePhy::SetControlMessages (2,493,375 samples, 0.26%)</title><rect x="148.3" y="421" width="2.1" height="15.0" fill="rgb(247,193,46)" rx="2" ry="2" />
+<text  x="151.35" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_get_node (126,498 samples, 0.01%)</title><rect x="81.8" y="437" width="0.1" height="15.0" fill="rgb(251,215,51)" rx="2" ry="2" />
+<text  x="84.85" y="447.5" ></text>
+</g>
+<g >
+<title>bool std::operator==&lt;double const&amp;, double const&amp;, double const&amp;, double const&amp;, double const&amp;, double const&amp;&gt; (2,394,490 samples, 0.25%)</title><rect x="747.1" y="517" width="1.9" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="750.12" y="527.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;*, std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt;::__normal_iterator (155,092 samples, 0.02%)</title><rect x="375.9" y="517" width="0.1" height="15.0" fill="rgb(239,158,37)" rx="2" ry="2" />
+<text  x="378.87" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::EventImpl::EventImpl (154,551 samples, 0.02%)</title><rect x="708.2" y="469" width="0.1" height="15.0" fill="rgb(247,195,46)" rx="2" ry="2" />
+<text  x="711.17" y="479.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, bool&gt;::pair (248,699 samples, 0.03%)</title><rect x="86.2" y="453" width="0.2" height="15.0" fill="rgb(252,220,52)" rx="2" ry="2" />
+<text  x="89.21" y="463.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;double&gt;::deallocate (190,332 samples, 0.02%)</title><rect x="674.2" y="389" width="0.1" height="15.0" fill="rgb(223,83,20)" rx="2" ry="2" />
+<text  x="677.16" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::MakeEvent&lt;void  (5,321,712 samples, 0.55%)</title><rect x="11.2" y="725" width="4.3" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="14.17" y="735.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::~list (322,499 samples, 0.03%)</title><rect x="550.7" y="229" width="0.2" height="15.0" fill="rgb(238,152,36)" rx="2" ry="2" />
+<text  x="553.69" y="239.5" ></text>
+</g>
+<g >
+<title>ns3::LteUeMac::DoReceivePhyPdu (4,367,304 samples, 0.45%)</title><rect x="435.0" y="341" width="3.5" height="15.0" fill="rgb(211,31,7)" rx="2" ry="2" />
+<text  x="438.01" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::Tag::Tag (229,496 samples, 0.02%)</title><rect x="489.3" y="533" width="0.2" height="15.0" fill="rgb(212,35,8)" rx="2" ry="2" />
+<text  x="492.30" y="543.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::ByteTagListData* const*, std::vector&lt;ns3::ByteTagListData*, std::allocator&lt;ns3::ByteTagListData*&gt; &gt; &gt;::base (196,916 samples, 0.02%)</title><rect x="30.3" y="341" width="0.1" height="15.0" fill="rgb(226,98,23)" rx="2" ry="2" />
+<text  x="33.28" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::EnbMacMemberLteMacSapProvider&lt;ns3::NoOpComponentCarrierManager&gt;::ReportBufferStatus (1,019,985 samples, 0.11%)</title><rect x="17.9" y="389" width="0.8" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="20.88" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Function_handler&lt;void  (75,398,758 samples, 7.77%)</title><rect x="516.0" y="501" width="60.6" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="518.95" y="511.5" >std::_..</text>
+</g>
+<g >
+<title>unsigned short* std::__copy_move_a1&lt;false, unsigned short const*, unsigned short*&gt; (200,709 samples, 0.02%)</title><rect x="475.2" y="197" width="0.2" height="15.0" fill="rgb(236,144,34)" rx="2" ry="2" />
+<text  x="478.20" y="207.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::Ptr&lt;ns3::UeManager&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::Ptr&lt;ns3::UeManager&gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::Ptr&lt;ns3::UeManager&gt; &gt; &gt; &gt;::_M_lower_bound (556,603 samples, 0.06%)</title><rect x="28.7" y="309" width="0.4" height="15.0" fill="rgb(218,64,15)" rx="2" ry="2" />
+<text  x="31.66" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumPhy&gt;::Ptr (126,253 samples, 0.01%)</title><rect x="90.1" y="517" width="0.1" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="93.12" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt;::operator (168,844 samples, 0.02%)</title><rect x="73.8" y="437" width="0.2" height="15.0" fill="rgb(252,217,52)" rx="2" ry="2" />
+<text  x="76.81" y="447.5" ></text>
+</g>
+<g >
+<title>unsigned short* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;unsigned short const*, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, unsigned short*, unsigned short&gt; (658,154 samples, 0.07%)</title><rect x="521.0" y="325" width="0.5" height="15.0" fill="rgb(217,56,13)" rx="2" ry="2" />
+<text  x="523.96" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt; ns3::CompleteConstruct&lt;ns3::PacketBurst&gt; (299,870 samples, 0.03%)</title><rect x="119.4" y="501" width="0.2" height="15.0" fill="rgb(212,33,7)" rx="2" ry="2" />
+<text  x="122.38" y="511.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;::base (126,294 samples, 0.01%)</title><rect x="719.3" y="405" width="0.1" height="15.0" fill="rgb(224,88,21)" rx="2" ry="2" />
+<text  x="722.31" y="415.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::_List_base (236,451 samples, 0.02%)</title><rect x="162.0" y="405" width="0.2" height="15.0" fill="rgb(250,210,50)" rx="2" ry="2" />
+<text  x="165.05" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::PacketMetadata::Deallocate (318,817 samples, 0.03%)</title><rect x="548.6" y="85" width="0.2" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="551.58" y="95.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt; &gt; &gt;::_M_lower_bound (639,618 samples, 0.07%)</title><rect x="429.7" y="245" width="0.6" height="15.0" fill="rgb(238,153,36)" rx="2" ry="2" />
+<text  x="432.74" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::RlcPduListElement_s* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;ns3::RlcPduListElement_s const*, std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt;, ns3::RlcPduListElement_s*, ns3::RlcPduListElement_s&gt; (214,687 samples, 0.02%)</title><rect x="101.6" y="389" width="0.2" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="104.59" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::LteInterference::ConditionallyEvaluateChunk (575,348 samples, 0.06%)</title><rect x="712.9" y="501" width="0.4" height="15.0" fill="rgb(243,177,42)" rx="2" ry="2" />
+<text  x="715.87" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Buffer::Create (1,593,963 samples, 0.16%)</title><rect x="555.9" y="197" width="1.3" height="15.0" fill="rgb(242,174,41)" rx="2" ry="2" />
+<text  x="558.89" y="207.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;::_M_valptr (328,108 samples, 0.03%)</title><rect x="221.8" y="421" width="0.3" height="15.0" fill="rgb(232,124,29)" rx="2" ry="2" />
+<text  x="224.83" y="431.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;double&gt; &gt;::allocate (670,068 samples, 0.07%)</title><rect x="655.0" y="421" width="0.5" height="15.0" fill="rgb(234,136,32)" rx="2" ry="2" />
+<text  x="657.99" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::CqiListElement_s::CqiListElement_s (194,571 samples, 0.02%)</title><rect x="461.6" y="261" width="0.1" height="15.0" fill="rgb(238,156,37)" rx="2" ry="2" />
+<text  x="464.55" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;ns3::DlInfoListElement_s const*, std::vector&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt; &gt;, ns3::DlInfoListElement_s*, ns3::DlInfoListElement_s&gt; (5,104,143 samples, 0.53%)</title><rect x="257.8" y="485" width="4.1" height="15.0" fill="rgb(238,151,36)" rx="2" ry="2" />
+<text  x="260.82" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::SpectrumModel, ns3::Empty, ns3::DefaultDeleter&lt;ns3::SpectrumModel&gt; &gt;::Unref (233,271 samples, 0.02%)</title><rect x="744.0" y="533" width="0.1" height="15.0" fill="rgb(251,213,50)" rx="2" ry="2" />
+<text  x="746.96" y="543.5" ></text>
+</g>
+<g >
+<title>void std::destroy_at&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; (521,712 samples, 0.05%)</title><rect x="501.9" y="357" width="0.4" height="15.0" fill="rgb(224,88,21)" rx="2" ry="2" />
+<text  x="504.92" y="367.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;int, std::allocator&lt;int&gt; &gt;::_Vector_impl::_Vector_impl (379,832 samples, 0.04%)</title><rect x="700.0" y="517" width="0.3" height="15.0" fill="rgb(236,142,34)" rx="2" ry="2" />
+<text  x="702.96" y="527.5" ></text>
+</g>
+<g >
+<title>__dynamic_cast (333,656 samples, 0.03%)</title><rect x="735.8" y="517" width="0.3" height="15.0" fill="rgb(227,102,24)" rx="2" ry="2" />
+<text  x="738.84" y="527.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt; &gt;::construct&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; const&amp;&gt; (194,069 samples, 0.02%)</title><rect x="104.6" y="325" width="0.2" height="15.0" fill="rgb(216,54,12)" rx="2" ry="2" />
+<text  x="107.61" y="335.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_const_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;::_Rb_tree_const_iterator (508,100 samples, 0.05%)</title><rect x="766.9" y="677" width="0.4" height="15.0" fill="rgb(227,103,24)" rx="2" ry="2" />
+<text  x="769.86" y="687.5" ></text>
+</g>
+<g >
+<title>void ns3::Callback&lt;void, ns3::SpectrumValue const&amp;&gt;::Callback&lt;void  (324,769 samples, 0.03%)</title><rect x="611.9" y="421" width="0.3" height="15.0" fill="rgb(221,75,18)" rx="2" ry="2" />
+<text  x="614.94" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::Simulator::Now (245,134 samples, 0.03%)</title><rect x="428.0" y="261" width="0.2" height="15.0" fill="rgb(240,164,39)" rx="2" ry="2" />
+<text  x="430.97" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::Packet::Packet (501,720 samples, 0.05%)</title><rect x="19.0" y="389" width="0.4" height="15.0" fill="rgb(230,115,27)" rx="2" ry="2" />
+<text  x="21.95" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteControlMessage&gt;::~Ptr (611,218 samples, 0.06%)</title><rect x="609.8" y="485" width="0.5" height="15.0" fill="rgb(208,17,4)" rx="2" ry="2" />
+<text  x="612.77" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::TypeId::TypeId (150,833 samples, 0.02%)</title><rect x="163.7" y="405" width="0.1" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="166.68" y="415.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Buffer::Data*, std::allocator&lt;ns3::Buffer::Data*&gt; &gt;::push_back (392,327 samples, 0.04%)</title><rect x="452.2" y="69" width="0.3" height="15.0" fill="rgb(234,137,32)" rx="2" ry="2" />
+<text  x="455.17" y="79.5" ></text>
+</g>
+<g >
+<title>double* std::__uninitialized_default_n&lt;double*, unsigned long&gt; (363,863 samples, 0.04%)</title><rect x="718.5" y="405" width="0.3" height="15.0" fill="rgb(231,123,29)" rx="2" ry="2" />
+<text  x="721.54" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::MapScheduler::Insert (194,393 samples, 0.02%)</title><rect x="637.7" y="485" width="0.1" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="640.66" y="495.5" ></text>
+</g>
+<g >
+<title>double* std::__niter_base&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; (236,463 samples, 0.02%)</title><rect x="647.9" y="373" width="0.2" height="15.0" fill="rgb(245,186,44)" rx="2" ry="2" />
+<text  x="650.92" y="383.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, ns3::DlInfoListElement_s, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt; &gt;::end (345,899 samples, 0.04%)</title><rect x="508.6" y="549" width="0.2" height="15.0" fill="rgb(222,78,18)" rx="2" ry="2" />
+<text  x="511.56" y="559.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_M_create_storage (158,373 samples, 0.02%)</title><rect x="203.4" y="357" width="0.1" height="15.0" fill="rgb(252,220,52)" rx="2" ry="2" />
+<text  x="206.35" y="367.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_M_get_insert_unique_pos (339,044 samples, 0.03%)</title><rect x="293.7" y="469" width="0.3" height="15.0" fill="rgb(243,177,42)" rx="2" ry="2" />
+<text  x="296.75" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::LteControlMessage, ns3::Empty, ns3::DefaultDeleter&lt;ns3::LteControlMessage&gt; &gt;::Unref (538,741 samples, 0.06%)</title><rect x="167.0" y="437" width="0.5" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="170.03" y="447.5" ></text>
+</g>
+<g >
+<title>std::operator== (152,835 samples, 0.02%)</title><rect x="394.8" y="549" width="0.1" height="15.0" fill="rgb(229,110,26)" rx="2" ry="2" />
+<text  x="397.76" y="559.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_M_destroy_node (595,644 samples, 0.06%)</title><rect x="233.1" y="389" width="0.5" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="236.14" y="399.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt; &gt; &gt;::find (2,516,735 samples, 0.26%)</title><rect x="432.8" y="325" width="2.0" height="15.0" fill="rgb(211,30,7)" rx="2" ry="2" />
+<text  x="435.79" y="335.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;std::_Rb_tree_iterator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, bool&gt; std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::emplace&lt;unsigned int const&amp;, ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp;&gt; (2,393,725 samples, 0.25%)</title><rect x="331.3" y="501" width="2.0" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="334.34" y="511.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::push_back (686,315 samples, 0.07%)</title><rect x="68.8" y="437" width="0.5" height="15.0" fill="rgb(222,79,18)" rx="2" ry="2" />
+<text  x="71.80" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Time::ToInteger (191,170 samples, 0.02%)</title><rect x="14.0" y="357" width="0.1" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="16.98" y="367.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::list (1,969,038 samples, 0.20%)</title><rect x="610.3" y="549" width="1.5" height="15.0" fill="rgb(236,145,34)" rx="2" ry="2" />
+<text  x="613.26" y="559.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::LteFlowId_t, std::pair&lt;ns3::LteFlowId_t const, ns3::FfMacSchedSapProvider::SchedDlRlcBufferReqParameters&gt;, std::_Select1st&lt;std::pair&lt;ns3::LteFlowId_t const, ns3::FfMacSchedSapProvider::SchedDlRlcBufferReqParameters&gt; &gt;, std::less&lt;ns3::LteFlowId_t&gt;, std::allocator&lt;std::pair&lt;ns3::LteFlowId_t const, ns3::FfMacSchedSapProvider::SchedDlRlcBufferReqParameters&gt; &gt; &gt;::find (1,508,586 samples, 0.16%)</title><rect x="181.3" y="453" width="1.2" height="15.0" fill="rgb(222,81,19)" rx="2" ry="2" />
+<text  x="184.29" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_lower_bound (2,003,615 samples, 0.21%)</title><rect x="273.8" y="437" width="1.7" height="15.0" fill="rgb(229,113,27)" rx="2" ry="2" />
+<text  x="276.84" y="447.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;unsigned char&gt;::allocate (352,577 samples, 0.04%)</title><rect x="692.8" y="405" width="0.3" height="15.0" fill="rgb(207,12,3)" rx="2" ry="2" />
+<text  x="695.85" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue&gt;::operator (158,925 samples, 0.02%)</title><rect x="744.7" y="549" width="0.2" height="15.0" fill="rgb(214,44,10)" rx="2" ry="2" />
+<text  x="747.75" y="559.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::Copy (1,306,624 samples, 0.13%)</title><rect x="118.0" y="517" width="1.0" height="15.0" fill="rgb(240,161,38)" rx="2" ry="2" />
+<text  x="121.00" y="527.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;::operator[] (193,866 samples, 0.02%)</title><rect x="173.3" y="437" width="0.1" height="15.0" fill="rgb(212,32,7)" rx="2" ry="2" />
+<text  x="176.28" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt;* std::__copy_move_a2&lt;true, ns3::Ptr&lt;ns3::PacketBurst&gt;*, ns3::Ptr&lt;ns3::PacketBurst&gt;*&gt; (458,200 samples, 0.05%)</title><rect x="119.8" y="437" width="0.4" height="15.0" fill="rgb(213,38,9)" rx="2" ry="2" />
+<text  x="122.80" y="447.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::vector (966,311 samples, 0.10%)</title><rect x="407.5" y="485" width="0.8" height="15.0" fill="rgb(239,156,37)" rx="2" ry="2" />
+<text  x="410.53" y="495.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;::_M_addr (422,566 samples, 0.04%)</title><rect x="759.9" y="645" width="0.3" height="15.0" fill="rgb(223,85,20)" rx="2" ry="2" />
+<text  x="762.87" y="655.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;4ul, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::_Tuple_impl&lt;ns3::Ptr&lt;ns3::SpectrumPhy&gt;&amp;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;&amp;, void&gt; (163,911 samples, 0.02%)</title><rect x="87.5" y="357" width="0.1" height="15.0" fill="rgb(208,17,4)" rx="2" ry="2" />
+<text  x="90.46" y="367.5" ></text>
+</g>
+<g >
+<title>std::__detail::_List_node_header::_List_node_header (159,922 samples, 0.02%)</title><rect x="497.8" y="501" width="0.1" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="500.82" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;2ul, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::_Tuple_impl (380,058 samples, 0.04%)</title><rect x="340.9" y="341" width="0.3" height="15.0" fill="rgb(231,121,29)" rx="2" ry="2" />
+<text  x="343.87" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::AntennaModel&gt;::operator= (192,452 samples, 0.02%)</title><rect x="342.4" y="517" width="0.2" height="15.0" fill="rgb(215,48,11)" rx="2" ry="2" />
+<text  x="345.41" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::FfMacSchedSapUser::SchedDlConfigIndParameters::~SchedDlConfigIndParameters (157,347 samples, 0.02%)</title><rect x="174.8" y="485" width="0.1" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="177.75" y="495.5" ></text>
+</g>
+<g >
+<title>std::_List_iterator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt;::_List_iterator (165,665 samples, 0.02%)</title><rect x="550.5" y="213" width="0.2" height="15.0" fill="rgb(231,119,28)" rx="2" ry="2" />
+<text  x="553.52" y="223.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; &gt;::operator* (614,873 samples, 0.06%)</title><rect x="348.1" y="533" width="0.5" height="15.0" fill="rgb(234,134,32)" rx="2" ry="2" />
+<text  x="351.07" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::~PacketBurst (410,769 samples, 0.04%)</title><rect x="653.7" y="373" width="0.3" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="656.68" y="383.5" ></text>
+</g>
+<g >
+<title>void std::_Function_base::_Base_manager&lt;std::_Bind&lt;void  (1,218,895 samples, 0.13%)</title><rect x="283.5" y="485" width="1.0" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="286.52" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;* std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_copy&lt;false, std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_Alloc_node&gt; (494,088 samples, 0.05%)</title><rect x="668.4" y="453" width="0.4" height="15.0" fill="rgb(251,212,50)" rx="2" ry="2" />
+<text  x="671.44" y="463.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::__niter_base&lt;unsigned char*&gt; (151,102 samples, 0.02%)</title><rect x="597.9" y="213" width="0.1" height="15.0" fill="rgb(229,111,26)" rx="2" ry="2" />
+<text  x="600.91" y="223.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;::_M_check_len (197,154 samples, 0.02%)</title><rect x="209.8" y="453" width="0.1" height="15.0" fill="rgb(210,23,5)" rx="2" ry="2" />
+<text  x="212.75" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::LteMiErrorModel::GetPcfichPdcchError (1,017,990 samples, 0.10%)</title><rect x="607.7" y="549" width="0.9" height="15.0" fill="rgb(229,114,27)" rx="2" ry="2" />
+<text  x="610.74" y="559.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumPhy::GetDevice (278,749 samples, 0.03%)</title><rect x="643.6" y="517" width="0.2" height="15.0" fill="rgb(236,146,35)" rx="2" ry="2" />
+<text  x="646.58" y="527.5" ></text>
+</g>
+<g >
+<title>unsigned char const* std::__niter_base&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; (262,111 samples, 0.03%)</title><rect x="126.9" y="293" width="0.3" height="15.0" fill="rgb(249,203,48)" rx="2" ry="2" />
+<text  x="129.94" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue&gt;::operator= (388,127 samples, 0.04%)</title><rect x="674.0" y="517" width="0.3" height="15.0" fill="rgb(220,71,17)" rx="2" ry="2" />
+<text  x="677.00" y="527.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::max_size (240,471 samples, 0.02%)</title><rect x="460.0" y="245" width="0.2" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="463.04" y="255.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::CqiListElement_s*, std::vector&lt;ns3::CqiListElement_s, std::allocator&lt;ns3::CqiListElement_s&gt; &gt; &gt; std::vector&lt;ns3::CqiListElement_s, std::allocator&lt;ns3::CqiListElement_s&gt; &gt;::insert&lt;__gnu_cxx::__normal_iterator&lt;ns3::CqiListElement_s*, std::vector&lt;ns3::CqiListElement_s, std::allocator&lt;ns3::CqiListElement_s&gt; &gt; &gt;, void&gt; (5,119,434 samples, 0.53%)</title><rect x="124.2" y="517" width="4.1" height="15.0" fill="rgb(235,140,33)" rx="2" ry="2" />
+<text  x="127.17" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::UlInfoListElement_s::UlInfoListElement_s (208,096 samples, 0.02%)</title><rect x="440.5" y="277" width="0.2" height="15.0" fill="rgb(211,29,7)" rx="2" ry="2" />
+<text  x="443.51" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::Callback&lt;void, ns3::SpectrumValue const&amp;&gt;::DoPeekImpl (161,751 samples, 0.02%)</title><rect x="577.1" y="501" width="0.2" height="15.0" fill="rgb(208,17,4)" rx="2" ry="2" />
+<text  x="580.13" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt;::~Ptr (274,415 samples, 0.03%)</title><rect x="389.1" y="549" width="0.2" height="15.0" fill="rgb(205,3,0)" rx="2" ry="2" />
+<text  x="392.07" y="559.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, unsigned short, std::_Identity&lt;unsigned short&gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;unsigned short&gt; &gt;::~_Rb_tree (141,564 samples, 0.01%)</title><rect x="195.2" y="469" width="0.1" height="15.0" fill="rgb(237,149,35)" rx="2" ry="2" />
+<text  x="198.18" y="479.5" ></text>
+</g>
+<g >
+<title>atan2f32x (314,439 samples, 0.03%)</title><rect x="65.7" y="485" width="0.2" height="15.0" fill="rgb(240,164,39)" rx="2" ry="2" />
+<text  x="68.68" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::operator= (148,008 samples, 0.02%)</title><rect x="93.8" y="437" width="0.1" height="15.0" fill="rgb(211,28,6)" rx="2" ry="2" />
+<text  x="96.76" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;int, std::allocator&lt;int&gt; &gt;::_Vector_impl::_Vector_impl (206,232 samples, 0.02%)</title><rect x="527.4" y="149" width="0.2" height="15.0" fill="rgb(236,142,34)" rx="2" ry="2" />
+<text  x="530.44" y="159.5" ></text>
+</g>
+<g >
+<title>double* std::__uninitialized_default_n_1&lt;true&gt;::__uninit_default_n&lt;double*, unsigned long&gt; (281,908 samples, 0.03%)</title><rect x="57.1" y="405" width="0.2" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="60.07" y="415.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::vector (198,351 samples, 0.02%)</title><rect x="679.1" y="501" width="0.2" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="682.10" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::UlDciListElement_s* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::UlDciListElement_s const*, std::vector&lt;ns3::UlDciListElement_s, std::allocator&lt;ns3::UlDciListElement_s&gt; &gt; &gt;, ns3::UlDciListElement_s*&gt; (160,843 samples, 0.02%)</title><rect x="228.2" y="421" width="0.1" height="15.0" fill="rgb(210,25,5)" rx="2" ry="2" />
+<text  x="231.19" y="431.5" ></text>
+</g>
+<g >
+<title>void std::_Function_base::_Base_manager&lt;std::_Bind&lt;void  (1,831,024 samples, 0.19%)</title><rect x="711.1" y="437" width="1.4" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="714.07" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned char const, ns3::LteUeMac::LcInfo&gt; &gt;::operator++ (126,827 samples, 0.01%)</title><rect x="569.2" y="325" width="0.1" height="15.0" fill="rgb(208,14,3)" rx="2" ry="2" />
+<text  x="572.22" y="335.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; const*, std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt;::__normal_iterator (271,510 samples, 0.03%)</title><rect x="382.5" y="501" width="0.2" height="15.0" fill="rgb(223,84,20)" rx="2" ry="2" />
+<text  x="385.47" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::lower_bound (163,786 samples, 0.02%)</title><rect x="82.5" y="485" width="0.1" height="15.0" fill="rgb(234,137,32)" rx="2" ry="2" />
+<text  x="85.49" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Bind&lt;void  (1,570,544 samples, 0.16%)</title><rect x="617.0" y="485" width="1.3" height="15.0" fill="rgb(253,221,52)" rx="2" ry="2" />
+<text  x="620.04" y="495.5" ></text>
+</g>
+<g >
+<title>double* std::__uninitialized_default_n_a&lt;double*, unsigned long, double&gt; (605,341 samples, 0.06%)</title><rect x="729.7" y="421" width="0.5" height="15.0" fill="rgb(248,199,47)" rx="2" ry="2" />
+<text  x="732.73" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::VendorSpecificListElement_s* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;ns3::VendorSpecificListElement_s const*, std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt; &gt;, ns3::VendorSpecificListElement_s*, ns3::VendorSpecificListElement_s&gt; (425,833 samples, 0.04%)</title><rect x="144.0" y="437" width="0.4" height="15.0" fill="rgb(210,23,5)" rx="2" ry="2" />
+<text  x="147.01" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Simulator::Now (316,257 samples, 0.03%)</title><rect x="408.6" y="517" width="0.2" height="15.0" fill="rgb(240,164,39)" rx="2" ry="2" />
+<text  x="411.59" y="527.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;std::is_constructible&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::pair&lt;ns3::TbId_t, ns3::tbInfo_t&gt; &gt;::value, std::pair&lt;std::_Rb_tree_iterator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, bool&gt; &gt;::type std::map&lt;ns3::TbId_t, ns3::tbInfo_t, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::insert&lt;std::pair&lt;ns3::TbId_t, ns3::tbInfo_t&gt; &gt; (3,302,857 samples, 0.34%)</title><rect x="526.2" y="341" width="2.7" height="15.0" fill="rgb(213,40,9)" rx="2" ry="2" />
+<text  x="529.23" y="351.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::size (149,208 samples, 0.02%)</title><rect x="219.5" y="421" width="0.2" height="15.0" fill="rgb(216,50,12)" rx="2" ry="2" />
+<text  x="222.54" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s* std::__do_uninit_copy&lt;ns3::DlInfoListElement_s*, ns3::DlInfoListElement_s*&gt; (508,420 samples, 0.05%)</title><rect x="206.5" y="421" width="0.4" height="15.0" fill="rgb(240,163,39)" rx="2" ry="2" />
+<text  x="209.53" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter&gt;::Unref (1,796,083 samples, 0.19%)</title><rect x="501.5" y="469" width="1.4" height="15.0" fill="rgb(221,78,18)" rx="2" ry="2" />
+<text  x="504.48" y="479.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, std::vector&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt;, std::allocator&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt;, std::allocator&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt;::find (151,942 samples, 0.02%)</title><rect x="99.2" y="469" width="0.1" height="15.0" fill="rgb(238,154,37)" rx="2" ry="2" />
+<text  x="102.20" y="479.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::splice (375,324 samples, 0.04%)</title><rect x="346.6" y="453" width="0.3" height="15.0" fill="rgb(220,70,16)" rx="2" ry="2" />
+<text  x="349.64" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::MakeEvent&lt;void  (331,747 samples, 0.03%)</title><rect x="308.3" y="437" width="0.3" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="311.31" y="447.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;double&gt;::deallocate (124,900 samples, 0.01%)</title><rect x="605.4" y="437" width="0.1" height="15.0" fill="rgb(223,83,20)" rx="2" ry="2" />
+<text  x="608.43" y="447.5" ></text>
+</g>
+<g >
+<title>cfree (218,014 samples, 0.02%)</title><rect x="764.7" y="581" width="0.2" height="15.0" fill="rgb(223,86,20)" rx="2" ry="2" />
+<text  x="767.74" y="591.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;::construct&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; (273,884 samples, 0.03%)</title><rect x="383.2" y="501" width="0.2" height="15.0" fill="rgb(224,89,21)" rx="2" ry="2" />
+<text  x="386.17" y="511.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::VendorSpecificListElement_s*&gt; (198,417 samples, 0.02%)</title><rect x="25.2" y="293" width="0.2" height="15.0" fill="rgb(236,143,34)" rx="2" ry="2" />
+<text  x="28.20" y="303.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::BuildDataListElement_s, std::allocator&lt;ns3::BuildDataListElement_s&gt; &gt;::push_back (306,330 samples, 0.03%)</title><rect x="100.7" y="469" width="0.3" height="15.0" fill="rgb(234,137,32)" rx="2" ry="2" />
+<text  x="103.75" y="479.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::DlInfoListElement_s*, std::vector&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt; &gt; std::copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::DlInfoListElement_s const*, std::vector&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;ns3::DlInfoListElement_s*, std::vector&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt; &gt; &gt; (331,514 samples, 0.03%)</title><rect x="206.2" y="469" width="0.2" height="15.0" fill="rgb(248,197,47)" rx="2" ry="2" />
+<text  x="209.16" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::GetSpectrumModel (154,473 samples, 0.02%)</title><rect x="656.2" y="517" width="0.2" height="15.0" fill="rgb(228,106,25)" rx="2" ry="2" />
+<text  x="659.24" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Packet&gt;::~Ptr (162,262 samples, 0.02%)</title><rect x="378.5" y="277" width="0.1" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="381.49" y="287.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt;::operator= (416,467 samples, 0.04%)</title><rect x="17.9" y="277" width="0.4" height="15.0" fill="rgb(222,80,19)" rx="2" ry="2" />
+<text  x="20.95" y="287.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_emplace_hint_unique&lt;unsigned int const&amp;, ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp;&gt; (1,489,049 samples, 0.15%)</title><rect x="331.5" y="469" width="1.2" height="15.0" fill="rgb(226,100,24)" rx="2" ry="2" />
+<text  x="334.51" y="479.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt; &gt; &gt;::destroy&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt; &gt; (274,522 samples, 0.03%)</title><rect x="291.8" y="501" width="0.2" height="15.0" fill="rgb(226,100,24)" rx="2" ry="2" />
+<text  x="294.80" y="511.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::operator= (485,199 samples, 0.05%)</title><rect x="648.7" y="469" width="0.4" height="15.0" fill="rgb(251,215,51)" rx="2" ry="2" />
+<text  x="651.67" y="479.5" ></text>
+</g>
+<g >
+<title>double* std::__copy_move_a1&lt;false, double const*, double*&gt; (169,338 samples, 0.02%)</title><rect x="72.4" y="373" width="0.1" height="15.0" fill="rgb(239,156,37)" rx="2" ry="2" />
+<text  x="75.41" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::UeSelected_s::operator= (384,654 samples, 0.04%)</title><rect x="134.5" y="469" width="0.3" height="15.0" fill="rgb(244,183,43)" rx="2" ry="2" />
+<text  x="137.52" y="479.5" ></text>
+</g>
+<g >
+<title>std::__detail::_List_node_header::_List_node_header (156,589 samples, 0.02%)</title><rect x="162.1" y="373" width="0.1" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="165.11" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;::_Vector_impl::_Vector_impl (303,807 samples, 0.03%)</title><rect x="514.3" y="517" width="0.2" height="15.0" fill="rgb(218,62,15)" rx="2" ry="2" />
+<text  x="517.26" y="527.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt;::push_back (303,575 samples, 0.03%)</title><rect x="456.5" y="309" width="0.3" height="15.0" fill="rgb(236,145,34)" rx="2" ry="2" />
+<text  x="459.53" y="319.5" ></text>
+</g>
+<g >
+<title>std::_Bit_iterator::operator* (161,884 samples, 0.02%)</title><rect x="182.9" y="485" width="0.1" height="15.0" fill="rgb(219,65,15)" rx="2" ry="2" />
+<text  x="185.88" y="495.5" ></text>
+</g>
+<g >
+<title>std::tuple_element&lt;0ul, std::tuple&lt;unsigned short const&amp;&gt; &gt;::type&amp; std::get&lt;0ul, unsigned short const&amp;&gt; (313,540 samples, 0.03%)</title><rect x="191.4" y="341" width="0.3" height="15.0" fill="rgb(209,19,4)" rx="2" ry="2" />
+<text  x="194.42" y="351.5" ></text>
+</g>
+<g >
+<title>std::tuple&lt;&gt; std::forward_as_tuple&lt;&gt; (471,585 samples, 0.05%)</title><rect x="46.6" y="613" width="0.4" height="15.0" fill="rgb(210,27,6)" rx="2" ry="2" />
+<text  x="49.63" y="623.5" ></text>
+</g>
+<g >
+<title>ns3::Packet::~Packet (351,823 samples, 0.04%)</title><rect x="612.9" y="357" width="0.3" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="615.93" y="367.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteCcmMacSapProvider*&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteCcmMacSapProvider*&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteCcmMacSapProvider*&gt; &gt; &gt;::_M_begin (163,406 samples, 0.02%)</title><rect x="458.1" y="245" width="0.1" height="15.0" fill="rgb(225,93,22)" rx="2" ry="2" />
+<text  x="461.08" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::~DlInfoListElement_s (617,189 samples, 0.06%)</title><rect x="132.6" y="405" width="0.5" height="15.0" fill="rgb(217,55,13)" rx="2" ry="2" />
+<text  x="135.59" y="415.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, ns3::LteEnbComponentCarrierManager::UeInfo, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt; &gt; &gt;::lower_bound (191,851 samples, 0.02%)</title><rect x="96.5" y="389" width="0.1" height="15.0" fill="rgb(236,144,34)" rx="2" ry="2" />
+<text  x="99.48" y="399.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt;::vector (411,592 samples, 0.04%)</title><rect x="107.3" y="373" width="0.3" height="15.0" fill="rgb(210,23,5)" rx="2" ry="2" />
+<text  x="110.29" y="383.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::PacketMetadata::Data*, std::allocator&lt;ns3::PacketMetadata::Data*&gt; &gt;::end (150,854 samples, 0.02%)</title><rect x="15.2" y="325" width="0.2" height="15.0" fill="rgb(250,211,50)" rx="2" ry="2" />
+<text  x="18.24" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultDeleter&lt;ns3::Packet&gt;::Delete (351,823 samples, 0.04%)</title><rect x="612.9" y="373" width="0.3" height="15.0" fill="rgb(231,123,29)" rx="2" ry="2" />
+<text  x="615.93" y="383.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;*, std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; (229,070 samples, 0.02%)</title><rect x="139.8" y="453" width="0.2" height="15.0" fill="rgb(205,0,0)" rx="2" ry="2" />
+<text  x="142.78" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::MacCeListElement_s* std::__do_uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::MacCeListElement_s*, std::vector&lt;ns3::MacCeListElement_s, std::allocator&lt;ns3::MacCeListElement_s&gt; &gt; &gt;, ns3::MacCeListElement_s*&gt; (806,979 samples, 0.08%)</title><rect x="128.9" y="437" width="0.6" height="15.0" fill="rgb(215,46,11)" rx="2" ry="2" />
+<text  x="131.87" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::LogComponent::IsEnabled (242,975 samples, 0.03%)</title><rect x="27.6" y="341" width="0.2" height="15.0" fill="rgb(214,43,10)" rx="2" ry="2" />
+<text  x="30.56" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::LogComponent::IsEnabled (163,744 samples, 0.02%)</title><rect x="453.2" y="69" width="0.2" height="15.0" fill="rgb(214,43,10)" rx="2" ry="2" />
+<text  x="456.25" y="79.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::HarqStatus_e* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::DlInfoListElement_s::HarqStatus_e const*, std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt; &gt;, ns3::DlInfoListElement_s::HarqStatus_e*&gt; (683,830 samples, 0.07%)</title><rect x="444.1" y="293" width="0.6" height="15.0" fill="rgb(235,140,33)" rx="2" ry="2" />
+<text  x="447.11" y="303.5" ></text>
+</g>
+<g >
+<title>std::_Function_base::_M_empty (129,184 samples, 0.01%)</title><rect x="579.8" y="389" width="0.1" height="15.0" fill="rgb(244,183,43)" rx="2" ry="2" />
+<text  x="582.83" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_M_get_insert_hint_unique_pos (534,094 samples, 0.06%)</title><rect x="293.7" y="485" width="0.4" height="15.0" fill="rgb(219,68,16)" rx="2" ry="2" />
+<text  x="296.68" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_Rb_tree (186,374 samples, 0.02%)</title><rect x="657.3" y="501" width="0.2" height="15.0" fill="rgb(252,219,52)" rx="2" ry="2" />
+<text  x="660.34" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::TypeId::TypeId (373,826 samples, 0.04%)</title><rect x="537.4" y="261" width="0.3" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="540.41" y="271.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::size (205,426 samples, 0.02%)</title><rect x="398.1" y="501" width="0.2" height="15.0" fill="rgb(211,32,7)" rx="2" ry="2" />
+<text  x="401.12" y="511.5" ></text>
+</g>
+<g >
+<title>unsigned short* std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;unsigned short const*, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, unsigned short*&gt; (422,036 samples, 0.04%)</title><rect x="217.6" y="389" width="0.3" height="15.0" fill="rgb(239,157,37)" rx="2" ry="2" />
+<text  x="220.57" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::Vector3D::GetLength (155,917 samples, 0.02%)</title><rect x="642.4" y="485" width="0.1" height="15.0" fill="rgb(211,31,7)" rx="2" ry="2" />
+<text  x="645.38" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Callback&lt;void, std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt;::Callback&lt;void  (245,024 samples, 0.03%)</title><rect x="516.3" y="469" width="0.2" height="15.0" fill="rgb(244,183,43)" rx="2" ry="2" />
+<text  x="519.25" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s* std::__uninitialized_copy&lt;false&gt;::__uninit_copy&lt;ns3::DlInfoListElement_s*, ns3::DlInfoListElement_s*&gt; (550,039 samples, 0.06%)</title><rect x="206.5" y="437" width="0.4" height="15.0" fill="rgb(248,199,47)" rx="2" ry="2" />
+<text  x="209.50" y="447.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, unsigned char*&gt; (650,532 samples, 0.07%)</title><rect x="687.7" y="389" width="0.5" height="15.0" fill="rgb(254,229,54)" rx="2" ry="2" />
+<text  x="690.72" y="399.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt; &gt;::find (1,085,935 samples, 0.11%)</title><rect x="241.6" y="485" width="0.9" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="244.62" y="495.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::__relocate_a&lt;unsigned char*, unsigned char*, std::allocator&lt;unsigned char&gt; &gt; (343,086 samples, 0.04%)</title><rect x="694.1" y="437" width="0.2" height="15.0" fill="rgb(233,131,31)" rx="2" ry="2" />
+<text  x="697.06" y="447.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;unsigned char&gt;::deallocate (197,176 samples, 0.02%)</title><rect x="693.2" y="421" width="0.2" height="15.0" fill="rgb(232,124,29)" rx="2" ry="2" />
+<text  x="696.23" y="431.5" ></text>
+</g>
+<g >
+<title>decltype  (292,231 samples, 0.03%)</title><rect x="440.4" y="293" width="0.3" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="443.44" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::Buffer::Data* const&amp; std::forward&lt;ns3::Buffer::Data* const&amp;&gt; (259,311 samples, 0.03%)</title><rect x="546.2" y="53" width="0.2" height="15.0" fill="rgb(250,209,50)" rx="2" ry="2" />
+<text  x="549.17" y="63.5" ></text>
+</g>
+<g >
+<title>ns3::operator+ (628,145 samples, 0.06%)</title><rect x="279.1" y="501" width="0.5" height="15.0" fill="rgb(244,182,43)" rx="2" ry="2" />
+<text  x="282.06" y="511.5" ></text>
+</g>
+<g >
+<title>std::tuple&lt;ns3::LteSpectrumPhy*&gt;::tuple&lt;ns3::LteSpectrumPhy*&amp;, true, true&gt; (668,783 samples, 0.07%)</title><rect x="306.3" y="437" width="0.6" height="15.0" fill="rgb(249,204,48)" rx="2" ry="2" />
+<text  x="309.31" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::PhichListElement_s, std::allocator&lt;ns3::PhichListElement_s&gt; &gt;::_Vector_base (266,878 samples, 0.03%)</title><rect x="227.7" y="437" width="0.2" height="15.0" fill="rgb(209,22,5)" rx="2" ry="2" />
+<text  x="230.69" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;ns3::DlDciListElement_s, std::allocator&lt;ns3::DlDciListElement_s&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;ns3::DlDciListElement_s, std::allocator&lt;ns3::DlDciListElement_s&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;ns3::DlDciListElement_s, std::allocator&lt;ns3::DlDciListElement_s&gt; &gt; &gt; &gt; &gt;::_M_begin (235,637 samples, 0.02%)</title><rect x="187.1" y="453" width="0.2" height="15.0" fill="rgb(212,32,7)" rx="2" ry="2" />
+<text  x="190.07" y="463.5" ></text>
+</g>
+<g >
+<title>void std::_Bind&lt;void  (2,105,662 samples, 0.22%)</title><rect x="15.5" y="613" width="1.6" height="15.0" fill="rgb(242,174,41)" rx="2" ry="2" />
+<text  x="18.45" y="623.5" ></text>
+</g>
+<g >
+<title>ns3::TimeStep (156,551 samples, 0.02%)</title><rect x="408.7" y="485" width="0.1" height="15.0" fill="rgb(242,171,41)" rx="2" ry="2" />
+<text  x="411.69" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s* std::__uninitialized_copy&lt;false&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::DlInfoListElement_s const*, std::vector&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt; &gt;, ns3::DlInfoListElement_s*&gt; (411,592 samples, 0.04%)</title><rect x="107.3" y="437" width="0.3" height="15.0" fill="rgb(225,93,22)" rx="2" ry="2" />
+<text  x="110.29" y="447.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;::empty (264,685 samples, 0.03%)</title><rect x="285.2" y="533" width="0.2" height="15.0" fill="rgb(238,154,36)" rx="2" ry="2" />
+<text  x="288.17" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_insert_node (433,572 samples, 0.04%)</title><rect x="335.3" y="373" width="0.4" height="15.0" fill="rgb(218,62,14)" rx="2" ry="2" />
+<text  x="338.32" y="383.5" ></text>
+</g>
+<g >
+<title>double* std::__uninitialized_default_n_a&lt;double*, unsigned long, double&gt; (197,197 samples, 0.02%)</title><rect x="646.6" y="373" width="0.2" height="15.0" fill="rgb(248,199,47)" rx="2" ry="2" />
+<text  x="649.59" y="383.5" ></text>
+</g>
+<g >
+<title>void  (323,953 samples, 0.03%)</title><rect x="581.2" y="357" width="0.2" height="15.0" fill="rgb(253,221,53)" rx="2" ry="2" />
+<text  x="584.15" y="367.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::CqiListElement_s, std::allocator&lt;ns3::CqiListElement_s&gt; &gt;::~vector (264,107 samples, 0.03%)</title><rect x="131.0" y="501" width="0.2" height="15.0" fill="rgb(221,76,18)" rx="2" ry="2" />
+<text  x="134.03" y="511.5" ></text>
+</g>
+<g >
+<title>std::__detail::_List_node_header::_List_node_header (193,791 samples, 0.02%)</title><rect x="162.6" y="357" width="0.2" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="165.60" y="367.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;0ul, ns3::LteInterference*, ns3::Ptr&lt;ns3::SpectrumValue const&gt;, unsigned int&gt;::_M_head (204,189 samples, 0.02%)</title><rect x="753.0" y="565" width="0.2" height="15.0" fill="rgb(244,180,43)" rx="2" ry="2" />
+<text  x="756.04" y="575.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::BuildDataListElement_s, std::allocator&lt;ns3::BuildDataListElement_s&gt; &gt;::vector (422,512 samples, 0.04%)</title><rect x="174.2" y="469" width="0.3" height="15.0" fill="rgb(225,95,22)" rx="2" ry="2" />
+<text  x="177.16" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt;::vector (159,784 samples, 0.02%)</title><rect x="478.2" y="293" width="0.1" height="15.0" fill="rgb(218,61,14)" rx="2" ry="2" />
+<text  x="481.18" y="303.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;int*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt; std::__niter_wrap&lt;__gnu_cxx::__normal_iterator&lt;int*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt;, int*&gt; (302,486 samples, 0.03%)</title><rect x="680.1" y="485" width="0.2" height="15.0" fill="rgb(252,218,52)" rx="2" ry="2" />
+<text  x="683.09" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::NixVector&gt;::Ptr (640,714 samples, 0.07%)</title><rect x="360.6" y="485" width="0.5" height="15.0" fill="rgb(248,201,48)" rx="2" ry="2" />
+<text  x="363.62" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::TbId_t, std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::_Select1st&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::_M_mbegin (247,566 samples, 0.03%)</title><rect x="529.2" y="293" width="0.2" height="15.0" fill="rgb(241,165,39)" rx="2" ry="2" />
+<text  x="532.22" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::DlCqiLteControlMessage::DlCqiLteControlMessage (999,999 samples, 0.10%)</title><rect x="592.3" y="277" width="0.8" height="15.0" fill="rgb(208,15,3)" rx="2" ry="2" />
+<text  x="595.26" y="287.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;::~_Vector_base (343,953 samples, 0.04%)</title><rect x="351.2" y="373" width="0.3" height="15.0" fill="rgb(233,133,31)" rx="2" ry="2" />
+<text  x="354.24" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt;::_Vector_base (157,554 samples, 0.02%)</title><rect x="132.1" y="485" width="0.1" height="15.0" fill="rgb(216,55,13)" rx="2" ry="2" />
+<text  x="135.12" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Ptr&lt;ns3::Object&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Object&gt; &gt; &gt;::vector (124,541 samples, 0.01%)</title><rect x="69.9" y="405" width="0.1" height="15.0" fill="rgb(237,147,35)" rx="2" ry="2" />
+<text  x="72.91" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::NixVector&gt;::Ptr (185,459 samples, 0.02%)</title><rect x="118.2" y="469" width="0.1" height="15.0" fill="rgb(248,201,48)" rx="2" ry="2" />
+<text  x="121.20" y="479.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;::pair&lt;unsigned short const&amp;, 0ul&gt; (537,895 samples, 0.06%)</title><rect x="191.4" y="357" width="0.4" height="15.0" fill="rgb(232,124,29)" rx="2" ry="2" />
+<text  x="194.39" y="367.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::copy&lt;__gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, unsigned char*&gt; (650,532 samples, 0.07%)</title><rect x="687.7" y="405" width="0.5" height="15.0" fill="rgb(241,168,40)" rx="2" ry="2" />
+<text  x="690.72" y="415.5" ></text>
+</g>
+<g >
+<title>void std::vector&lt;int, std::allocator&lt;int&gt; &gt;::_M_realloc_insert&lt;int const&amp;&gt; (226,433 samples, 0.02%)</title><rect x="121.9" y="517" width="0.2" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="124.94" y="527.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::LteUePhy::PssElement, std::allocator&lt;ns3::LteUePhy::PssElement&gt; &gt;::push_back (194,530 samples, 0.02%)</title><rect x="726.2" y="325" width="0.1" height="15.0" fill="rgb(219,64,15)" rx="2" ry="2" />
+<text  x="729.19" y="335.5" ></text>
+</g>
+<g >
+<title>__dynamic_cast (124,834 samples, 0.01%)</title><rect x="599.7" y="293" width="0.1" height="15.0" fill="rgb(227,102,24)" rx="2" ry="2" />
+<text  x="602.72" y="303.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::begin (899,872 samples, 0.09%)</title><rect x="760.7" y="693" width="0.7" height="15.0" fill="rgb(213,38,9)" rx="2" ry="2" />
+<text  x="763.66" y="703.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;int*&gt; (265,597 samples, 0.03%)</title><rect x="506.1" y="373" width="0.2" height="15.0" fill="rgb(235,139,33)" rx="2" ry="2" />
+<text  x="509.07" y="383.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::vector (240,017 samples, 0.02%)</title><rect x="54.0" y="501" width="0.2" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="56.97" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Function_base::_Base_manager&lt;std::_Bind&lt;void  (1,751,702 samples, 0.18%)</title><rect x="41.9" y="661" width="1.4" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="44.91" y="671.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_M_drop_node (312,339 samples, 0.03%)</title><rect x="394.4" y="405" width="0.2" height="15.0" fill="rgb(225,93,22)" rx="2" ry="2" />
+<text  x="397.38" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::LogComponent::IsEnabled (160,104 samples, 0.02%)</title><rect x="312.5" y="485" width="0.2" height="15.0" fill="rgb(214,43,10)" rx="2" ry="2" />
+<text  x="315.54" y="495.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, unsigned char*, unsigned char&gt; (407,753 samples, 0.04%)</title><rect x="584.8" y="261" width="0.3" height="15.0" fill="rgb(226,96,23)" rx="2" ry="2" />
+<text  x="587.79" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::VendorSpecificListElement_s* std::__copy_move_a2&lt;false, ns3::VendorSpecificListElement_s const*, ns3::VendorSpecificListElement_s*&gt; (143,131 samples, 0.01%)</title><rect x="26.1" y="229" width="0.1" height="15.0" fill="rgb(226,98,23)" rx="2" ry="2" />
+<text  x="29.08" y="239.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_M_destroy_node (269,825 samples, 0.03%)</title><rect x="394.4" y="389" width="0.2" height="15.0" fill="rgb(222,80,19)" rx="2" ry="2" />
+<text  x="397.38" y="399.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;&amp; std::__get_helper&lt;5ul, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;&gt; (584,178 samples, 0.06%)</title><rect x="757.5" y="581" width="0.5" height="15.0" fill="rgb(220,73,17)" rx="2" ry="2" />
+<text  x="760.53" y="591.5" ></text>
+</g>
+<g >
+<title>std::_Head_base&lt;0ul, ns3::LteSpectrumPhy*, false&gt;::_Head_base&lt;ns3::LteSpectrumPhy*&amp;&gt; (270,257 samples, 0.03%)</title><rect x="306.6" y="405" width="0.3" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="309.63" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::DlDciLteControlMessage&gt;::Ptr (124,599 samples, 0.01%)</title><rect x="534.0" y="341" width="0.1" height="15.0" fill="rgb(228,108,26)" rx="2" ry="2" />
+<text  x="537.04" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::Packet::GetSize (227,004 samples, 0.02%)</title><rect x="627.9" y="517" width="0.2" height="15.0" fill="rgb(240,163,39)" rx="2" ry="2" />
+<text  x="630.89" y="527.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::RarLteControlMessage::Rar, std::allocator&lt;ns3::RarLteControlMessage::Rar&gt; &gt;::list (154,430 samples, 0.02%)</title><rect x="166.9" y="421" width="0.1" height="15.0" fill="rgb(219,66,15)" rx="2" ry="2" />
+<text  x="169.88" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy::StartSubFrame (38,051,595 samples, 3.92%)</title><rect x="91.7" y="549" width="30.6" height="15.0" fill="rgb(234,136,32)" rx="2" ry="2" />
+<text  x="94.73" y="559.5" >ns..</text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;::_M_erase (7,179,158 samples, 0.74%)</title><rect x="376.5" y="517" width="5.8" height="15.0" fill="rgb(223,86,20)" rx="2" ry="2" />
+<text  x="379.54" y="527.5" ></text>
+</g>
+<g >
+<title>unsigned short* std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::_M_allocate_and_copy&lt;__gnu_cxx::__normal_iterator&lt;unsigned short const*, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; (142,016 samples, 0.01%)</title><rect x="140.6" y="453" width="0.1" height="15.0" fill="rgb(227,102,24)" rx="2" ry="2" />
+<text  x="143.59" y="463.5" ></text>
+</g>
+<g >
+<title>decltype  (184,474 samples, 0.02%)</title><rect x="293.3" y="421" width="0.2" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="296.35" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt;::_M_valptr (290,218 samples, 0.03%)</title><rect x="137.2" y="421" width="0.3" height="15.0" fill="rgb(249,206,49)" rx="2" ry="2" />
+<text  x="140.24" y="431.5" ></text>
+</g>
+<g >
+<title>std::tuple&lt;ns3::LteEnbPhy*, ns3::Ptr&lt;ns3::PacketBurst&gt; &gt;::~tuple (153,418 samples, 0.02%)</title><rect x="109.5" y="469" width="0.2" height="15.0" fill="rgb(221,75,18)" rx="2" ry="2" />
+<text  x="112.54" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;::operator[] (154,833 samples, 0.02%)</title><rect x="633.6" y="517" width="0.2" height="15.0" fill="rgb(212,32,7)" rx="2" ry="2" />
+<text  x="636.63" y="527.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::end (162,410 samples, 0.02%)</title><rect x="733.2" y="421" width="0.1" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="736.17" y="431.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;::_M_ptr (148,167 samples, 0.02%)</title><rect x="184.4" y="453" width="0.2" height="15.0" fill="rgb(219,67,16)" rx="2" ry="2" />
+<text  x="187.45" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Node::GetId (152,268 samples, 0.02%)</title><rect x="322.6" y="501" width="0.1" height="15.0" fill="rgb(234,135,32)" rx="2" ry="2" />
+<text  x="325.62" y="511.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_get_node (164,168 samples, 0.02%)</title><rect x="611.2" y="469" width="0.1" height="15.0" fill="rgb(247,194,46)" rx="2" ry="2" />
+<text  x="614.22" y="479.5" ></text>
+</g>
+<g >
+<title>void std::vector&lt;ns3::MacCeListElement_s, std::allocator&lt;ns3::MacCeListElement_s&gt; &gt;::_M_range_insert&lt;__gnu_cxx::__normal_iterator&lt;ns3::MacCeListElement_s*, std::vector&lt;ns3::MacCeListElement_s, std::allocator&lt;ns3::MacCeListElement_s&gt; &gt; &gt; &gt; (192,569 samples, 0.02%)</title><rect x="93.2" y="485" width="0.2" height="15.0" fill="rgb(225,92,22)" rx="2" ry="2" />
+<text  x="96.24" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, unsigned short, std::_Identity&lt;unsigned short&gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;unsigned short&gt; &gt;::end (202,904 samples, 0.02%)</title><rect x="462.7" y="341" width="0.1" height="15.0" fill="rgb(223,84,20)" rx="2" ry="2" />
+<text  x="465.65" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::HarqProcessInfoElement_t* std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;ns3::HarqProcessInfoElement_t const*, std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt;, ns3::HarqProcessInfoElement_t*&gt; (249,391 samples, 0.03%)</title><rect x="591.6" y="197" width="0.2" height="15.0" fill="rgb(210,26,6)" rx="2" ry="2" />
+<text  x="594.63" y="207.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;&amp; std::_Mu&lt;std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;, false, false&gt;::operator (246,808 samples, 0.03%)</title><rect x="751.7" y="597" width="0.2" height="15.0" fill="rgb(236,143,34)" rx="2" ry="2" />
+<text  x="754.72" y="607.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumSignalParameters::SpectrumSignalParameters (1,366,858 samples, 0.14%)</title><rect x="669.4" y="501" width="1.1" height="15.0" fill="rgb(219,67,16)" rx="2" ry="2" />
+<text  x="672.44" y="511.5" ></text>
+</g>
+<g >
+<title>unsigned long* std::__copy_move_a&lt;false, unsigned long*, unsigned long*&gt; (459,509 samples, 0.05%)</title><rect x="199.7" y="405" width="0.3" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="202.67" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::int64x64_t::Umul (203,418 samples, 0.02%)</title><rect x="389.8" y="469" width="0.1" height="15.0" fill="rgb(229,111,26)" rx="2" ry="2" />
+<text  x="392.76" y="479.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::allocate (474,197 samples, 0.05%)</title><rect x="237.5" y="325" width="0.4" height="15.0" fill="rgb(205,1,0)" rx="2" ry="2" />
+<text  x="240.55" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::EventImpl&gt;::Ptr (1,193,687 samples, 0.12%)</title><rect x="768.4" y="725" width="0.9" height="15.0" fill="rgb(239,157,37)" rx="2" ry="2" />
+<text  x="771.36" y="735.5" ></text>
+</g>
+<g >
+<title>ns3::TracedCallback&lt;ns3::Ptr&lt;ns3::MobilityModel const&gt;, ns3::Ptr&lt;ns3::MobilityModel const&gt;, double, double, double, double&gt;::operator (360,752 samples, 0.04%)</title><rect x="746.3" y="549" width="0.3" height="15.0" fill="rgb(253,225,53)" rx="2" ry="2" />
+<text  x="749.35" y="559.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_clear (778,661 samples, 0.08%)</title><rect x="609.6" y="533" width="0.7" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="612.63" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, unsigned char&gt; &gt;::_M_valptr (264,202 samples, 0.03%)</title><rect x="135.2" y="469" width="0.2" height="15.0" fill="rgb(213,40,9)" rx="2" ry="2" />
+<text  x="138.23" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::MakeEvent&lt;void  (1,515,135 samples, 0.16%)</title><rect x="340.0" y="469" width="1.2" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="342.96" y="479.5" ></text>
+</g>
+<g >
+<title>int* std::__copy_move_a1&lt;false, int const*, int*&gt; (237,769 samples, 0.02%)</title><rect x="399.2" y="453" width="0.2" height="15.0" fill="rgb(230,117,28)" rx="2" ry="2" />
+<text  x="402.18" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue const&gt;::Ptr (512,963 samples, 0.05%)</title><rect x="751.1" y="565" width="0.5" height="15.0" fill="rgb(254,229,54)" rx="2" ry="2" />
+<text  x="754.14" y="575.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; &gt; &gt;::_M_begin (516,673 samples, 0.05%)</title><rect x="522.8" y="309" width="0.5" height="15.0" fill="rgb(234,137,32)" rx="2" ry="2" />
+<text  x="525.84" y="319.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt;::_S_key (163,137 samples, 0.02%)</title><rect x="432.4" y="277" width="0.1" height="15.0" fill="rgb(224,91,21)" rx="2" ry="2" />
+<text  x="435.41" y="287.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_List_node&lt;ns3::UlDciLteControlMessage&gt; &gt; &gt;::construct&lt;ns3::UlDciLteControlMessage, ns3::UlDciLteControlMessage const&amp;&gt; (468,430 samples, 0.05%)</title><rect x="288.1" y="453" width="0.4" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="291.08" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::vector (284,703 samples, 0.03%)</title><rect x="478.0" y="277" width="0.2" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="480.95" y="287.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;is_member_pointer_v&lt;void  (221,466 samples, 0.02%)</title><rect x="116.3" y="469" width="0.2" height="15.0" fill="rgb(241,170,40)" rx="2" ry="2" />
+<text  x="119.33" y="479.5" ></text>
+</g>
+<g >
+<title>std::set&lt;unsigned short, std::less&lt;unsigned short&gt;, std::allocator&lt;unsigned short&gt; &gt;::~set (141,564 samples, 0.01%)</title><rect x="195.2" y="485" width="0.1" height="15.0" fill="rgb(242,173,41)" rx="2" ry="2" />
+<text  x="198.18" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::UniformRandomVariable::GetValue (968,608 samples, 0.10%)</title><rect x="608.7" y="533" width="0.8" height="15.0" fill="rgb(238,152,36)" rx="2" ry="2" />
+<text  x="611.72" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; &gt; &gt;::_M_end (165,287 samples, 0.02%)</title><rect x="523.3" y="309" width="0.1" height="15.0" fill="rgb(215,49,11)" rx="2" ry="2" />
+<text  x="526.25" y="319.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteCcmMacSapProvider*&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteCcmMacSapProvider*&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteCcmMacSapProvider*&gt; &gt; &gt;::find (1,417,571 samples, 0.15%)</title><rect x="458.0" y="261" width="1.2" height="15.0" fill="rgb(246,188,45)" rx="2" ry="2" />
+<text  x="461.05" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy*&amp; std::_Mu&lt;ns3::LteEnbPhy*, false, false&gt;::operator (495,567 samples, 0.05%)</title><rect x="48.8" y="597" width="0.4" height="15.0" fill="rgb(209,21,5)" rx="2" ry="2" />
+<text  x="51.76" y="607.5" ></text>
+</g>
+<g >
+<title>ns3::NoOpComponentCarrierManager::DoNotifyTxOpportunity (314,249 samples, 0.03%)</title><rect x="11.2" y="437" width="0.2" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="14.17" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; &gt;::operator* (287,801 samples, 0.03%)</title><rect x="522.2" y="341" width="0.2" height="15.0" fill="rgb(234,134,32)" rx="2" ry="2" />
+<text  x="525.17" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::HigherLayerSelected_s* std::__do_uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::HigherLayerSelected_s const*, std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt; &gt;, ns3::HigherLayerSelected_s*&gt; (356,634 samples, 0.04%)</title><rect x="442.7" y="245" width="0.3" height="15.0" fill="rgb(244,179,43)" rx="2" ry="2" />
+<text  x="445.72" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::SpectrumValue, ns3::Empty, ns3::DefaultDeleter&lt;ns3::SpectrumValue&gt; &gt;::Unref (196,986 samples, 0.02%)</title><rect x="326.0" y="485" width="0.1" height="15.0" fill="rgb(246,189,45)" rx="2" ry="2" />
+<text  x="328.98" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_Auto_node::_M_insert (470,384 samples, 0.05%)</title><rect x="335.3" y="389" width="0.4" height="15.0" fill="rgb(213,38,9)" rx="2" ry="2" />
+<text  x="338.29" y="399.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::BuildRarListElement_s, std::allocator&lt;ns3::BuildRarListElement_s&gt; &gt;::vector (274,244 samples, 0.03%)</title><rect x="174.5" y="469" width="0.2" height="15.0" fill="rgb(224,87,20)" rx="2" ry="2" />
+<text  x="177.50" y="479.5" ></text>
+</g>
+<g >
+<title>void std::__invoke_impl&lt;void, void  (894,532 samples, 0.09%)</title><rect x="440.2" y="389" width="0.7" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="443.22" y="399.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, unsigned char*&gt; (685,962 samples, 0.07%)</title><rect x="687.7" y="437" width="0.5" height="15.0" fill="rgb(227,104,25)" rx="2" ry="2" />
+<text  x="690.70" y="447.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;*, std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt; &gt; std::__copy_move_a&lt;true, __gnu_cxx::__normal_iterator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;*, std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;*, std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt; &gt; &gt; (1,411,841 samples, 0.15%)</title><rect x="621.5" y="485" width="1.2" height="15.0" fill="rgb(226,96,23)" rx="2" ry="2" />
+<text  x="624.55" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::operator== (3,609,110 samples, 0.37%)</title><rect x="747.1" y="533" width="2.9" height="15.0" fill="rgb(234,134,32)" rx="2" ry="2" />
+<text  x="750.08" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_M_deallocate (154,926 samples, 0.02%)</title><rect x="484.0" y="469" width="0.1" height="15.0" fill="rgb(240,162,38)" rx="2" ry="2" />
+<text  x="486.97" y="479.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt; &gt;::construct&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::piecewise_construct_t const&amp;, std::tuple&lt;unsigned short const&amp;&gt;, std::tuple&lt;&gt; &gt; (762,055 samples, 0.08%)</title><rect x="242.8" y="405" width="0.6" height="15.0" fill="rgb(249,206,49)" rx="2" ry="2" />
+<text  x="245.80" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_Auto_node::_Auto_node&lt;std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (644,555 samples, 0.07%)</title><rect x="83.0" y="405" width="0.5" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="86.02" y="415.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; std::copy&lt;__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; (160,870 samples, 0.02%)</title><rect x="482.6" y="293" width="0.2" height="15.0" fill="rgb(249,204,48)" rx="2" ry="2" />
+<text  x="485.63" y="303.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; std::copy&lt;__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; (1,146,176 samples, 0.12%)</title><rect x="647.2" y="405" width="0.9" height="15.0" fill="rgb(249,204,48)" rx="2" ry="2" />
+<text  x="650.19" y="415.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;double&gt; &gt;::deallocate (124,900 samples, 0.01%)</title><rect x="605.4" y="453" width="0.1" height="15.0" fill="rgb(236,143,34)" rx="2" ry="2" />
+<text  x="608.43" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::push_back (1,354,090 samples, 0.14%)</title><rect x="214.6" y="485" width="1.1" height="15.0" fill="rgb(215,50,11)" rx="2" ry="2" />
+<text  x="217.64" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;::cbegin (188,357 samples, 0.02%)</title><rect x="636.0" y="517" width="0.1" height="15.0" fill="rgb(230,116,27)" rx="2" ry="2" />
+<text  x="638.98" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::ObjectBase::ConstructSelf (3,133,932 samples, 0.32%)</title><rect x="540.4" y="277" width="2.5" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="543.39" y="287.5" ></text>
+</g>
+<g >
+<title>std::tuple&lt;ns3::LteUePhy*, unsigned int, unsigned int&gt;::tuple&lt;ns3::LteUePhy*&amp;, unsigned int&amp;, unsigned int&amp;, true, true&gt; (1,377,602 samples, 0.14%)</title><rect x="617.1" y="469" width="1.1" height="15.0" fill="rgb(208,17,4)" rx="2" ry="2" />
+<text  x="620.13" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::LteUePhy::SetSubChannelsForTransmission (8,727,549 samples, 0.90%)</title><rect x="673.8" y="549" width="7.0" height="15.0" fill="rgb(220,69,16)" rx="2" ry="2" />
+<text  x="676.79" y="559.5" ></text>
+</g>
+<g >
+<title>std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; &gt;::operator (166,879 samples, 0.02%)</title><rect x="523.9" y="277" width="0.2" height="15.0" fill="rgb(245,188,45)" rx="2" ry="2" />
+<text  x="526.94" y="287.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_destroy_node (192,269 samples, 0.02%)</title><rect x="776.8" y="357" width="0.2" height="15.0" fill="rgb(243,175,41)" rx="2" ry="2" />
+<text  x="779.82" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::LogComponent::IsEnabled (152,933 samples, 0.02%)</title><rect x="178.0" y="469" width="0.2" height="15.0" fill="rgb(214,43,10)" rx="2" ry="2" />
+<text  x="181.04" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::Ptr&lt;ns3::Object&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Object&gt; &gt; &gt;::_Vector_impl::_Vector_impl (302,930 samples, 0.03%)</title><rect x="447.1" y="229" width="0.2" height="15.0" fill="rgb(206,6,1)" rx="2" ry="2" />
+<text  x="450.09" y="239.5" ></text>
+</g>
+<g >
+<title>ns3::Time::GetTimeStep (451,024 samples, 0.05%)</title><rect x="338.8" y="453" width="0.4" height="15.0" fill="rgb(205,0,0)" rx="2" ry="2" />
+<text  x="341.83" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;* std::__copy_move&lt;true, false, std::random_access_iterator_tag&gt;::__copy_m&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;*, std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;*&gt; (2,293,325 samples, 0.24%)</title><rect x="349.8" y="437" width="1.9" height="15.0" fill="rgb(214,44,10)" rx="2" ry="2" />
+<text  x="352.83" y="447.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;unsigned short*, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;::__normal_iterator (164,811 samples, 0.02%)</title><rect x="479.3" y="261" width="0.1" height="15.0" fill="rgb(213,38,9)" rx="2" ry="2" />
+<text  x="482.31" y="271.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, double&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, double&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, double&gt; &gt; &gt;::_S_key (980,363 samples, 0.10%)</title><rect x="295.1" y="485" width="0.8" height="15.0" fill="rgb(234,133,32)" rx="2" ry="2" />
+<text  x="298.13" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, unsigned short, std::_Identity&lt;unsigned short&gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;unsigned short&gt; &gt;::_M_lower_bound (601,582 samples, 0.06%)</title><rect x="463.0" y="325" width="0.5" height="15.0" fill="rgb(209,18,4)" rx="2" ry="2" />
+<text  x="466.00" y="335.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;::_List_base (302,422 samples, 0.03%)</title><rect x="110.0" y="501" width="0.2" height="15.0" fill="rgb(230,115,27)" rx="2" ry="2" />
+<text  x="113.00" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Packet&gt;::operator (206,181 samples, 0.02%)</title><rect x="69.4" y="453" width="0.2" height="15.0" fill="rgb(224,88,21)" rx="2" ry="2" />
+<text  x="72.45" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue&gt; ns3::Copy&lt;ns3::SpectrumValue&gt; (1,772,766 samples, 0.18%)</title><rect x="654.4" y="517" width="1.5" height="15.0" fill="rgb(223,83,19)" rx="2" ry="2" />
+<text  x="657.44" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::LteInterference::StartRx (194,219 samples, 0.02%)</title><rect x="734.4" y="517" width="0.2" height="15.0" fill="rgb(213,37,9)" rx="2" ry="2" />
+<text  x="737.43" y="527.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt; &gt;::construct&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::pair&lt;ns3::TbId_t, ns3::tbInfo_t&gt; &gt; (979,889 samples, 0.10%)</title><rect x="526.8" y="245" width="0.8" height="15.0" fill="rgb(247,195,46)" rx="2" ry="2" />
+<text  x="529.82" y="255.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::TbId_t, std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::_Select1st&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::_M_end (205,386 samples, 0.02%)</title><rect x="529.4" y="309" width="0.2" height="15.0" fill="rgb(225,96,23)" rx="2" ry="2" />
+<text  x="532.42" y="319.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;1ul, ns3::Ptr&lt;ns3::SpectrumValue&gt;, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::~_Tuple_impl (361,973 samples, 0.04%)</title><rect x="666.2" y="421" width="0.3" height="15.0" fill="rgb(242,172,41)" rx="2" ry="2" />
+<text  x="669.22" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::EventImpl&gt;::Acquire (274,749 samples, 0.03%)</title><rect x="39.1" y="693" width="0.3" height="15.0" fill="rgb(229,112,26)" rx="2" ry="2" />
+<text  x="42.14" y="703.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::vector (780,494 samples, 0.08%)</title><rect x="584.5" y="277" width="0.6" height="15.0" fill="rgb(206,9,2)" rx="2" ry="2" />
+<text  x="587.49" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::RarLteControlMessage&gt; ns3::Create&lt;ns3::RarLteControlMessage&gt; (306,535 samples, 0.03%)</title><rect x="166.8" y="453" width="0.2" height="15.0" fill="rgb(245,188,44)" rx="2" ry="2" />
+<text  x="169.79" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Bind&lt;void  (153,418 samples, 0.02%)</title><rect x="109.5" y="485" width="0.2" height="15.0" fill="rgb(253,221,52)" rx="2" ry="2" />
+<text  x="112.54" y="495.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt;::destroy&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; (210,243 samples, 0.02%)</title><rect x="576.4" y="325" width="0.2" height="15.0" fill="rgb(230,118,28)" rx="2" ry="2" />
+<text  x="579.43" y="335.5" ></text>
+</g>
+<g >
+<title>void std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_M_construct_node&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; const&amp;&gt; (194,069 samples, 0.02%)</title><rect x="104.6" y="341" width="0.2" height="15.0" fill="rgb(231,119,28)" rx="2" ry="2" />
+<text  x="107.61" y="351.5" ></text>
+</g>
+<g >
+<title>operator new (161,120 samples, 0.02%)</title><rect x="564.3" y="101" width="0.1" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="567.27" y="111.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::TbId_t, std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::_Select1st&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::_M_lower_bound (669,791 samples, 0.07%)</title><rect x="507.7" y="517" width="0.5" height="15.0" fill="rgb(236,144,34)" rx="2" ry="2" />
+<text  x="510.67" y="527.5" ></text>
+</g>
+<g >
+<title>void std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::_M_realloc_insert&lt;unsigned short&gt; (376,292 samples, 0.04%)</title><rect x="102.2" y="437" width="0.3" height="15.0" fill="rgb(217,56,13)" rx="2" ry="2" />
+<text  x="105.17" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_M_copy (2,075,881 samples, 0.21%)</title><rect x="58.7" y="485" width="1.7" height="15.0" fill="rgb(226,98,23)" rx="2" ry="2" />
+<text  x="61.71" y="495.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::map (152,827 samples, 0.02%)</title><rect x="667.8" y="277" width="0.2" height="15.0" fill="rgb(242,171,40)" rx="2" ry="2" />
+<text  x="670.83" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::HarqProcessInfoElement_t* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::HarqProcessInfoElement_t const*, std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt;, ns3::HarqProcessInfoElement_t*&gt; (489,523 samples, 0.05%)</title><rect x="524.9" y="309" width="0.4" height="15.0" fill="rgb(233,131,31)" rx="2" ry="2" />
+<text  x="527.94" y="319.5" ></text>
+</g>
+<g >
+<title>void std::__invoke_impl&lt;void, ns3::Callback&lt;void, ns3::SpectrumValue const&amp;&gt;::Callback&lt;void  (18,815,322 samples, 1.94%)</title><rect x="468.6" y="437" width="15.2" height="15.0" fill="rgb(245,184,44)" rx="2" ry="2" />
+<text  x="471.65" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;0ul, ns3::LteEnbPhy*&gt;::_Tuple_impl&lt;ns3::LteEnbPhy*&amp;&gt; (267,164 samples, 0.03%)</title><rect x="282.8" y="453" width="0.2" height="15.0" fill="rgb(232,126,30)" rx="2" ry="2" />
+<text  x="285.79" y="463.5" ></text>
+</g>
+<g >
+<title>decltype (238,924 samples, 0.02%)</title><rect x="36.6" y="693" width="0.2" height="15.0" fill="rgb(220,73,17)" rx="2" ry="2" />
+<text  x="39.64" y="703.5" ></text>
+</g>
+<g >
+<title>ns3::LteUePhy::SetSubChannelsForTransmission (151,318 samples, 0.02%)</title><rect x="614.4" y="549" width="0.1" height="15.0" fill="rgb(220,69,16)" rx="2" ry="2" />
+<text  x="617.41" y="559.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;double&gt;::allocate (670,068 samples, 0.07%)</title><rect x="655.0" y="405" width="0.5" height="15.0" fill="rgb(221,76,18)" rx="2" ry="2" />
+<text  x="657.99" y="415.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;ns3::ByteTagListData*&gt; &gt;::construct&lt;ns3::ByteTagListData*, ns3::ByteTagListData* const&amp;&gt; (686,477 samples, 0.07%)</title><rect x="547.1" y="69" width="0.6" height="15.0" fill="rgb(248,199,47)" rx="2" ry="2" />
+<text  x="550.11" y="79.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, ns3::Ptr&lt;ns3::UeManager&gt; &gt; &gt;::_M_valptr (157,811 samples, 0.02%)</title><rect x="28.8" y="277" width="0.1" height="15.0" fill="rgb(227,105,25)" rx="2" ry="2" />
+<text  x="31.75" y="287.5" ></text>
+</g>
+<g >
+<title>unsigned long* std::__copy_move&lt;false, true, std::random_access_iterator_tag&gt;::__copy_m&lt;unsigned long, unsigned long&gt; (151,080 samples, 0.02%)</title><rect x="199.8" y="357" width="0.1" height="15.0" fill="rgb(252,219,52)" rx="2" ry="2" />
+<text  x="202.77" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultDeleter&lt;ns3::SpectrumValue&gt;::Delete (483,075 samples, 0.05%)</title><rect x="303.5" y="469" width="0.4" height="15.0" fill="rgb(222,79,19)" rx="2" ry="2" />
+<text  x="306.53" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::_M_check_len (765,012 samples, 0.08%)</title><rect x="480.4" y="261" width="0.7" height="15.0" fill="rgb(234,133,31)" rx="2" ry="2" />
+<text  x="483.44" y="271.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::SpectrumConverter&gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::SpectrumConverter&gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::SpectrumConverter&gt; &gt; &gt;::_M_lower_bound (497,417 samples, 0.05%)</title><rect x="81.2" y="485" width="0.4" height="15.0" fill="rgb(213,41,9)" rx="2" ry="2" />
+<text  x="84.22" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::lower_bound (233,935 samples, 0.02%)</title><rect x="109.0" y="437" width="0.2" height="15.0" fill="rgb(254,228,54)" rx="2" ry="2" />
+<text  x="111.99" y="447.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;int const, double&gt; &gt; &gt;::allocate (199,176 samples, 0.02%)</title><rect x="293.2" y="405" width="0.1" height="15.0" fill="rgb(253,222,53)" rx="2" ry="2" />
+<text  x="296.16" y="415.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;::deallocate (158,232 samples, 0.02%)</title><rect x="501.2" y="485" width="0.1" height="15.0" fill="rgb(229,111,26)" rx="2" ry="2" />
+<text  x="504.20" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_const_iterator&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt;::operator (160,407 samples, 0.02%)</title><rect x="328.6" y="501" width="0.1" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="331.59" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::CallbackImplBase* ns3::PeekPointer&lt;ns3::CallbackImplBase&gt; (161,751 samples, 0.02%)</title><rect x="577.1" y="485" width="0.2" height="15.0" fill="rgb(246,188,45)" rx="2" ry="2" />
+<text  x="580.13" y="495.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt; &gt;::allocate (380,371 samples, 0.04%)</title><rect x="363.3" y="437" width="0.3" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="366.34" y="447.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::allocate (190,227 samples, 0.02%)</title><rect x="191.1" y="373" width="0.1" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="194.05" y="383.5" ></text>
+</g>
+<g >
+<title>int const&amp; std::max&lt;int&gt; (162,598 samples, 0.02%)</title><rect x="425.5" y="213" width="0.1" height="15.0" fill="rgb(237,148,35)" rx="2" ry="2" />
+<text  x="428.50" y="223.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt; &gt; &gt;::find (2,397,524 samples, 0.25%)</title><rect x="432.9" y="309" width="1.9" height="15.0" fill="rgb(238,154,36)" rx="2" ry="2" />
+<text  x="435.89" y="319.5" ></text>
+</g>
+<g >
+<title>unsigned char const* std::__niter_base&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; (192,782 samples, 0.02%)</title><rect x="687.8" y="373" width="0.2" height="15.0" fill="rgb(249,203,48)" rx="2" ry="2" />
+<text  x="690.82" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Bit_iterator std::__copy_move_a1&lt;false, std::_Bit_iterator, std::_Bit_iterator&gt; (338,164 samples, 0.03%)</title><rect x="197.6" y="405" width="0.3" height="15.0" fill="rgb(230,117,28)" rx="2" ry="2" />
+<text  x="200.59" y="415.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt;::allocate (283,919 samples, 0.03%)</title><rect x="444.9" y="245" width="0.2" height="15.0" fill="rgb(232,124,29)" rx="2" ry="2" />
+<text  x="447.88" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::CqiListElement_s* std::__uninitialized_copy_a&lt;std::move_iterator&lt;ns3::CqiListElement_s*&gt;, ns3::CqiListElement_s*, ns3::CqiListElement_s&gt; (253,339 samples, 0.03%)</title><rect x="127.4" y="469" width="0.3" height="15.0" fill="rgb(205,3,0)" rx="2" ry="2" />
+<text  x="130.45" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::BuildDataListElement_s, std::allocator&lt;ns3::BuildDataListElement_s&gt; &gt;::_Vector_impl::_Vector_impl (312,863 samples, 0.03%)</title><rect x="142.7" y="421" width="0.3" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="145.72" y="431.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::VendorSpecificListElement_s&gt; (234,807 samples, 0.02%)</title><rect x="263.9" y="325" width="0.2" height="15.0" fill="rgb(207,11,2)" rx="2" ry="2" />
+<text  x="266.87" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::Object::Check (344,145 samples, 0.04%)</title><rect x="163.3" y="405" width="0.3" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="166.31" y="415.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::lower_bound (308,342 samples, 0.03%)</title><rect x="659.6" y="501" width="0.3" height="15.0" fill="rgb(247,197,47)" rx="2" ry="2" />
+<text  x="662.62" y="511.5" ></text>
+</g>
+<g >
+<title>void std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt;::_M_realloc_insert&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; const&amp;&gt; (3,097,204 samples, 0.32%)</title><rect x="210.7" y="469" width="2.5" height="15.0" fill="rgb(226,98,23)" rx="2" ry="2" />
+<text  x="213.73" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumSignalParametersDlCtrlFrame::~LteSpectrumSignalParametersDlCtrlFrame (191,802 samples, 0.02%)</title><rect x="344.3" y="453" width="0.1" height="15.0" fill="rgb(220,69,16)" rx="2" ry="2" />
+<text  x="347.27" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_M_create_storage (525,645 samples, 0.05%)</title><rect x="407.7" y="453" width="0.4" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="410.65" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::ByteTagList::Deallocate (1,415,797 samples, 0.15%)</title><rect x="546.8" y="101" width="1.1" height="15.0" fill="rgb(227,103,24)" rx="2" ry="2" />
+<text  x="549.79" y="111.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::~DlInfoListElement_s (429,894 samples, 0.04%)</title><rect x="445.6" y="325" width="0.4" height="15.0" fill="rgb(217,55,13)" rx="2" ry="2" />
+<text  x="448.63" y="335.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::construct&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, unsigned int const&amp;, ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp;&gt; (273,321 samples, 0.03%)</title><rect x="331.9" y="405" width="0.2" height="15.0" fill="rgb(254,229,54)" rx="2" ry="2" />
+<text  x="334.88" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumModel const&gt; const&amp; std::forward&lt;ns3::Ptr&lt;ns3::SpectrumModel const&gt; const&amp;&gt; (200,391 samples, 0.02%)</title><rect x="646.0" y="421" width="0.2" height="15.0" fill="rgb(209,19,4)" rx="2" ry="2" />
+<text  x="649.00" y="431.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::~vector (240,996 samples, 0.02%)</title><rect x="716.8" y="421" width="0.2" height="15.0" fill="rgb(225,92,22)" rx="2" ry="2" />
+<text  x="719.79" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::DoDispose (310,660 samples, 0.03%)</title><rect x="164.4" y="389" width="0.2" height="15.0" fill="rgb(242,172,41)" rx="2" ry="2" />
+<text  x="167.38" y="399.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::__copy_move_a2&lt;false, unsigned char const*, unsigned char*&gt; (149,127 samples, 0.02%)</title><rect x="442.4" y="197" width="0.2" height="15.0" fill="rgb(209,20,4)" rx="2" ry="2" />
+<text  x="445.44" y="207.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::HarqStatus_e* std::uninitialized_fill_n&lt;ns3::DlInfoListElement_s::HarqStatus_e*, unsigned long, ns3::DlInfoListElement_s::HarqStatus_e&gt; (233,279 samples, 0.02%)</title><rect x="511.1" y="501" width="0.2" height="15.0" fill="rgb(251,216,51)" rx="2" ry="2" />
+<text  x="514.11" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumModel const&gt;::~Ptr (200,937 samples, 0.02%)</title><rect x="409.2" y="517" width="0.2" height="15.0" fill="rgb(218,61,14)" rx="2" ry="2" />
+<text  x="412.20" y="527.5" ></text>
+</g>
+<g >
+<title>double* std::__uninitialized_default_n&lt;double*, unsigned long&gt; (1,117,487 samples, 0.12%)</title><rect x="301.1" y="405" width="0.9" height="15.0" fill="rgb(231,123,29)" rx="2" ry="2" />
+<text  x="304.06" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;::operator (125,698 samples, 0.01%)</title><rect x="85.6" y="373" width="0.1" height="15.0" fill="rgb(245,186,44)" rx="2" ry="2" />
+<text  x="88.58" y="383.5" ></text>
+</g>
+<g >
+<title>std::this_thread::get_id (281,874 samples, 0.03%)</title><rect x="87.0" y="469" width="0.2" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="90.00" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::UlCqi_s::UlCqi_s (1,442,850 samples, 0.15%)</title><rect x="474.2" y="309" width="1.2" height="15.0" fill="rgb(243,175,41)" rx="2" ry="2" />
+<text  x="477.23" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;::Ptr (560,187 samples, 0.06%)</title><rect x="750.7" y="565" width="0.4" height="15.0" fill="rgb(250,208,49)" rx="2" ry="2" />
+<text  x="753.69" y="575.5" ></text>
+</g>
+<g >
+<title>std::map&lt;ns3::Scheduler::EventKey, ns3::EventImpl*, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::lower_bound (567,494 samples, 0.06%)</title><rect x="707.2" y="437" width="0.5" height="15.0" fill="rgb(238,153,36)" rx="2" ry="2" />
+<text  x="710.21" y="447.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt; &gt;::construct&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::piecewise_construct_t const&amp;, std::tuple&lt;unsigned short const&amp;&gt;, std::tuple&lt;&gt; &gt; (998,649 samples, 0.10%)</title><rect x="191.2" y="405" width="0.8" height="15.0" fill="rgb(249,206,49)" rx="2" ry="2" />
+<text  x="194.23" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt;::find (187,880 samples, 0.02%)</title><rect x="97.4" y="421" width="0.1" height="15.0" fill="rgb(219,68,16)" rx="2" ry="2" />
+<text  x="100.38" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_get_node (219,715 samples, 0.02%)</title><rect x="661.1" y="373" width="0.1" height="15.0" fill="rgb(221,75,17)" rx="2" ry="2" />
+<text  x="664.05" y="383.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::_S_relocate (387,343 samples, 0.04%)</title><rect x="481.1" y="261" width="0.3" height="15.0" fill="rgb(242,173,41)" rx="2" ry="2" />
+<text  x="484.05" y="271.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_end (202,902 samples, 0.02%)</title><rect x="273.7" y="437" width="0.1" height="15.0" fill="rgb(219,65,15)" rx="2" ry="2" />
+<text  x="276.68" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;::_Vector_base (125,047 samples, 0.01%)</title><rect x="525.3" y="325" width="0.1" height="15.0" fill="rgb(247,197,47)" rx="2" ry="2" />
+<text  x="528.34" y="335.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;::_M_allocate (194,495 samples, 0.02%)</title><rect x="209.6" y="453" width="0.1" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="212.56" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::operator= (403,446 samples, 0.04%)</title><rect x="586.2" y="261" width="0.3" height="15.0" fill="rgb(211,28,6)" rx="2" ry="2" />
+<text  x="589.21" y="271.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;::vector (850,937 samples, 0.09%)</title><rect x="524.9" y="341" width="0.7" height="15.0" fill="rgb(249,203,48)" rx="2" ry="2" />
+<text  x="527.91" y="351.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;std::is_constructible&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt;::value, std::pair&lt;std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, bool&gt; &gt;::type std::map&lt;ns3::Scheduler::EventKey, ns3::EventImpl*, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::insert&lt;std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (4,087,508 samples, 0.42%)</title><rect x="82.9" y="453" width="3.3" height="15.0" fill="rgb(211,29,7)" rx="2" ry="2" />
+<text  x="85.92" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt; &gt;::_Rb_tree (313,901 samples, 0.03%)</title><rect x="509.2" y="533" width="0.2" height="15.0" fill="rgb(225,92,22)" rx="2" ry="2" />
+<text  x="512.15" y="543.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;bool, std::allocator&lt;bool&gt; &gt;::push_back (418,154 samples, 0.04%)</title><rect x="196.5" y="485" width="0.3" height="15.0" fill="rgb(222,79,19)" rx="2" ry="2" />
+<text  x="199.51" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::HarqProcessInfoElement_t const* std::__niter_base&lt;ns3::HarqProcessInfoElement_t const*, std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; (470,519 samples, 0.05%)</title><rect x="353.1" y="389" width="0.3" height="15.0" fill="rgb(233,132,31)" rx="2" ry="2" />
+<text  x="356.07" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteControlMessage&gt;::Ptr (200,534 samples, 0.02%)</title><rect x="611.4" y="437" width="0.1" height="15.0" fill="rgb(222,81,19)" rx="2" ry="2" />
+<text  x="614.38" y="447.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;unsigned short&gt;::allocate (378,466 samples, 0.04%)</title><rect x="218.8" y="405" width="0.3" height="15.0" fill="rgb(237,149,35)" rx="2" ry="2" />
+<text  x="221.77" y="415.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Ptr&lt;ns3::Object&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Object&gt; &gt; &gt;::~vector (1,236,212 samples, 0.13%)</title><rect x="379.6" y="309" width="1.0" height="15.0" fill="rgb(223,83,19)" rx="2" ry="2" />
+<text  x="382.64" y="319.5" ></text>
+</g>
+<g >
+<title>unsigned short* std::__copy_move_a2&lt;false, unsigned short const*, unsigned short*&gt; (205,186 samples, 0.02%)</title><rect x="521.3" y="229" width="0.1" height="15.0" fill="rgb(230,115,27)" rx="2" ry="2" />
+<text  x="524.26" y="239.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::PacketBurst (1,613,776 samples, 0.17%)</title><rect x="160.9" y="437" width="1.3" height="15.0" fill="rgb(208,15,3)" rx="2" ry="2" />
+<text  x="163.94" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::LteMiErrorModel::MappingMiBler (755,586 samples, 0.08%)</title><rect x="486.5" y="533" width="0.6" height="15.0" fill="rgb(216,55,13)" rx="2" ry="2" />
+<text  x="489.53" y="543.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::operator= (845,523 samples, 0.09%)</title><rect x="318.7" y="453" width="0.7" height="15.0" fill="rgb(251,215,51)" rx="2" ry="2" />
+<text  x="321.69" y="463.5" ></text>
+</g>
+<g >
+<title>void std::destroy_at&lt;ns3::DlInfoListElement_s&gt; (1,186,954 samples, 0.12%)</title><rect x="256.0" y="421" width="0.9" height="15.0" fill="rgb(254,227,54)" rx="2" ry="2" />
+<text  x="258.98" y="431.5" ></text>
+</g>
+<g >
+<title>std::function&lt;void  (19,739,449 samples, 2.04%)</title><rect x="422.8" y="437" width="15.9" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="425.83" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::PacketTagList::Add (1,413,859 samples, 0.15%)</title><rect x="20.8" y="341" width="1.2" height="15.0" fill="rgb(248,197,47)" rx="2" ry="2" />
+<text  x="23.83" y="351.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::list (213,081 samples, 0.02%)</title><rect x="90.9" y="549" width="0.2" height="15.0" fill="rgb(236,145,34)" rx="2" ry="2" />
+<text  x="93.92" y="559.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy::CreatePuschCqiReport (5,488,789 samples, 0.57%)</title><rect x="477.0" y="325" width="4.4" height="15.0" fill="rgb(253,220,52)" rx="2" ry="2" />
+<text  x="480.01" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumSignalParameters::SpectrumSignalParameters (4,200,055 samples, 0.43%)</title><rect x="645.2" y="469" width="3.4" height="15.0" fill="rgb(219,67,16)" rx="2" ry="2" />
+<text  x="648.22" y="479.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_insert&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; const&amp;&gt; (413,599 samples, 0.04%)</title><rect x="230.2" y="389" width="0.3" height="15.0" fill="rgb(210,27,6)" rx="2" ry="2" />
+<text  x="233.19" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteUeMac::LcInfo&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteUeMac::LcInfo&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteUeMac::LcInfo&gt; &gt; &gt;::begin (392,398 samples, 0.04%)</title><rect x="571.2" y="309" width="0.3" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="574.20" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::TracedCallback&lt;ns3::Ptr&lt;ns3::SpectrumPhy const&gt;, ns3::Ptr&lt;ns3::SpectrumPhy const&gt;, double&gt;::operator (401,545 samples, 0.04%)</title><rect x="746.6" y="549" width="0.4" height="15.0" fill="rgb(234,134,32)" rx="2" ry="2" />
+<text  x="749.64" y="559.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_insert&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; const&amp;&gt; (154,939 samples, 0.02%)</title><rect x="464.2" y="485" width="0.1" height="15.0" fill="rgb(210,27,6)" rx="2" ry="2" />
+<text  x="467.16" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Angles::NormalizeAngles (351,340 samples, 0.04%)</title><rect x="702.9" y="517" width="0.3" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="705.95" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, unsigned char&gt; &gt;::_M_valptr (154,865 samples, 0.02%)</title><rect x="245.0" y="421" width="0.2" height="15.0" fill="rgb(213,40,9)" rx="2" ry="2" />
+<text  x="248.03" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::Packet::GetSize (399,735 samples, 0.04%)</title><rect x="367.7" y="517" width="0.3" height="15.0" fill="rgb(240,163,39)" rx="2" ry="2" />
+<text  x="370.70" y="527.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt;::end (193,090 samples, 0.02%)</title><rect x="257.4" y="501" width="0.2" height="15.0" fill="rgb(225,95,22)" rx="2" ry="2" />
+<text  x="260.45" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::~SpectrumValue (393,222 samples, 0.04%)</title><rect x="717.6" y="453" width="0.3" height="15.0" fill="rgb(247,193,46)" rx="2" ry="2" />
+<text  x="720.61" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::MobilityModel&gt;::Ptr (160,721 samples, 0.02%)</title><rect x="741.2" y="533" width="0.2" height="15.0" fill="rgb(213,37,8)" rx="2" ry="2" />
+<text  x="744.24" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_decrement (189,133 samples, 0.02%)</title><rect x="336.1" y="357" width="0.1" height="15.0" fill="rgb(238,152,36)" rx="2" ry="2" />
+<text  x="339.08" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::LteInterference::StartRx (4,413,510 samples, 0.46%)</title><rect x="727.9" y="517" width="3.6" height="15.0" fill="rgb(213,37,9)" rx="2" ry="2" />
+<text  x="730.91" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Bit_iterator::operator+= (153,737 samples, 0.02%)</title><rect x="198.6" y="421" width="0.1" height="15.0" fill="rgb(218,62,14)" rx="2" ry="2" />
+<text  x="201.61" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::MakeEvent&lt;void  (372,209 samples, 0.04%)</title><rect x="308.3" y="453" width="0.3" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="311.28" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::ByteTagListData*, std::allocator&lt;ns3::ByteTagListData*&gt; &gt;::empty (831,186 samples, 0.09%)</title><rect x="30.0" y="373" width="0.7" height="15.0" fill="rgb(236,144,34)" rx="2" ry="2" />
+<text  x="33.00" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;* std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_Alloc_node::operator (200,295 samples, 0.02%)</title><rect x="88.2" y="405" width="0.2" height="15.0" fill="rgb(217,55,13)" rx="2" ry="2" />
+<text  x="91.22" y="415.5" ></text>
+</g>
+<g >
+<title>double std::reduce&lt;__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, double&gt; (892,712 samples, 0.09%)</title><rect x="602.2" y="325" width="0.8" height="15.0" fill="rgb(218,62,15)" rx="2" ry="2" />
+<text  x="605.24" y="335.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned short const, double&gt; &gt;::operator (275,175 samples, 0.03%)</title><rect x="292.6" y="533" width="0.2" height="15.0" fill="rgb(246,191,45)" rx="2" ry="2" />
+<text  x="295.56" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; &gt; &gt;::_S_key (741,857 samples, 0.08%)</title><rect x="523.5" y="293" width="0.6" height="15.0" fill="rgb(210,26,6)" rx="2" ry="2" />
+<text  x="526.48" y="303.5" ></text>
+</g>
+<g >
+<title>void std::_Bind&lt;void  (5,321,712 samples, 0.55%)</title><rect x="11.2" y="645" width="4.3" height="15.0" fill="rgb(242,174,41)" rx="2" ry="2" />
+<text  x="14.17" y="655.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, bool&gt;::pair&lt;std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;&amp;, bool&gt; (187,042 samples, 0.02%)</title><rect x="338.1" y="421" width="0.2" height="15.0" fill="rgb(213,38,9)" rx="2" ry="2" />
+<text  x="341.15" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteUePhy&gt;::~Ptr (132,349 samples, 0.01%)</title><rect x="470.4" y="405" width="0.1" height="15.0" fill="rgb(227,105,25)" rx="2" ry="2" />
+<text  x="473.38" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::EnbMacMemberLteEnbPhySapUser::SubframeIndication (2,983,151 samples, 0.31%)</title><rect x="17.2" y="565" width="2.4" height="15.0" fill="rgb(252,216,51)" rx="2" ry="2" />
+<text  x="20.17" y="575.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::allocate (185,442 samples, 0.02%)</title><rect x="318.9" y="293" width="0.2" height="15.0" fill="rgb(230,118,28)" rx="2" ry="2" />
+<text  x="321.91" y="303.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt;::~vector (497,075 samples, 0.05%)</title><rect x="132.7" y="389" width="0.4" height="15.0" fill="rgb(246,189,45)" rx="2" ry="2" />
+<text  x="135.68" y="399.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::AttributeConstructionList::Item, std::allocator&lt;ns3::AttributeConstructionList::Item&gt; &gt;::_List_impl::_List_impl (877,007 samples, 0.09%)</title><rect x="539.4" y="245" width="0.7" height="15.0" fill="rgb(210,27,6)" rx="2" ry="2" />
+<text  x="542.35" y="255.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider::ReportBufferStatusParameters&gt; &gt;::_M_addr (164,024 samples, 0.02%)</title><rect x="570.6" y="229" width="0.1" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="573.60" y="239.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteNetDevice&gt;::Acquire (197,652 samples, 0.02%)</title><rect x="582.7" y="277" width="0.2" height="15.0" fill="rgb(223,87,20)" rx="2" ry="2" />
+<text  x="585.75" y="287.5" ></text>
+</g>
+<g >
+<title>std::set&lt;unsigned short, std::less&lt;unsigned short&gt;, std::allocator&lt;unsigned short&gt; &gt;::end (238,188 samples, 0.02%)</title><rect x="245.7" y="485" width="0.2" height="15.0" fill="rgb(242,171,41)" rx="2" ry="2" />
+<text  x="248.69" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt; &gt; &gt;::find (1,671,204 samples, 0.17%)</title><rect x="235.3" y="469" width="1.4" height="15.0" fill="rgb(222,81,19)" rx="2" ry="2" />
+<text  x="238.32" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_M_allocate (612,796 samples, 0.06%)</title><rect x="239.3" y="245" width="0.5" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="242.31" y="255.5" ></text>
+</g>
+<g >
+<title>unsigned long* std::__niter_base&lt;unsigned long*&gt; (159,817 samples, 0.02%)</title><rect x="248.3" y="389" width="0.2" height="15.0" fill="rgb(246,191,45)" rx="2" ry="2" />
+<text  x="251.33" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::operator!= (3,765,543 samples, 0.39%)</title><rect x="747.0" y="549" width="3.0" height="15.0" fill="rgb(215,46,11)" rx="2" ry="2" />
+<text  x="749.96" y="559.5" ></text>
+</g>
+<g >
+<title>ns3::BuildRarListElement_s* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::BuildRarListElement_s const*, std::vector&lt;ns3::BuildRarListElement_s, std::allocator&lt;ns3::BuildRarListElement_s&gt; &gt; &gt;, ns3::BuildRarListElement_s*&gt; (198,569 samples, 0.02%)</title><rect x="143.1" y="421" width="0.2" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="146.13" y="431.5" ></text>
+</g>
+<g >
+<title> (129,312 samples, 0.01%)</title><rect x="79.2" y="485" width="0.1" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="82.23" y="495.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::AttributeConstructionList::Item, std::allocator&lt;ns3::AttributeConstructionList::Item&gt; &gt;::list (421,055 samples, 0.04%)</title><rect x="447.7" y="261" width="0.4" height="15.0" fill="rgb(252,219,52)" rx="2" ry="2" />
+<text  x="450.75" y="271.5" ></text>
+</g>
+<g >
+<title>unsigned short* std::copy&lt;__gnu_cxx::__normal_iterator&lt;unsigned short const*, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, unsigned short*&gt; (534,449 samples, 0.06%)</title><rect x="521.1" y="277" width="0.4" height="15.0" fill="rgb(226,96,23)" rx="2" ry="2" />
+<text  x="524.06" y="287.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Ptr&lt;ns3::Object&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Object&gt; &gt; &gt;::~vector (328,685 samples, 0.03%)</title><rect x="77.4" y="325" width="0.3" height="15.0" fill="rgb(223,83,19)" rx="2" ry="2" />
+<text  x="80.43" y="335.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::TypeId::AttributeInformation, std::allocator&lt;ns3::TypeId::AttributeInformation&gt; &gt;::size (158,366 samples, 0.02%)</title><rect x="373.6" y="437" width="0.1" height="15.0" fill="rgb(230,117,28)" rx="2" ry="2" />
+<text  x="376.58" y="447.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;std::is_constructible&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt;::value, std::pair&lt;std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, bool&gt; &gt;::type std::map&lt;ns3::Scheduler::EventKey, ns3::EventImpl*, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::insert&lt;std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (5,466,153 samples, 0.56%)</title><rect x="333.9" y="437" width="4.4" height="15.0" fill="rgb(211,29,7)" rx="2" ry="2" />
+<text  x="336.90" y="447.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::end (505,490 samples, 0.05%)</title><rect x="317.9" y="389" width="0.4" height="15.0" fill="rgb(237,147,35)" rx="2" ry="2" />
+<text  x="320.90" y="399.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;*&gt; (229,070 samples, 0.02%)</title><rect x="139.8" y="437" width="0.2" height="15.0" fill="rgb(213,37,8)" rx="2" ry="2" />
+<text  x="142.78" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::TbId_t, std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::_Select1st&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::_M_mbegin (159,237 samples, 0.02%)</title><rect x="507.5" y="501" width="0.1" height="15.0" fill="rgb(241,165,39)" rx="2" ry="2" />
+<text  x="510.45" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Function_handler&lt;void  (31,621,347 samples, 3.26%)</title><rect x="579.9" y="389" width="25.5" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="582.93" y="399.5" >s..</text>
+</g>
+<g >
+<title>ns3::AttributeConstructionList::~AttributeConstructionList (315,373 samples, 0.03%)</title><rect x="372.0" y="501" width="0.2" height="15.0" fill="rgb(217,58,13)" rx="2" ry="2" />
+<text  x="374.97" y="511.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned int, ns3::TxSpectrumModelInfo, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt; &gt;::find (1,921,178 samples, 0.20%)</title><rect x="649.7" y="501" width="1.6" height="15.0" fill="rgb(208,16,3)" rx="2" ry="2" />
+<text  x="652.75" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::EventId::EventId (206,004 samples, 0.02%)</title><rect x="62.2" y="485" width="0.2" height="15.0" fill="rgb(206,4,1)" rx="2" ry="2" />
+<text  x="65.24" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt;::at (396,578 samples, 0.04%)</title><rect x="208.4" y="485" width="0.3" height="15.0" fill="rgb(229,111,26)" rx="2" ry="2" />
+<text  x="211.38" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::LteUePhy::SubframeIndication (107,909,732 samples, 11.13%)</title><rect x="614.6" y="565" width="86.8" height="15.0" fill="rgb(235,142,34)" rx="2" ry="2" />
+<text  x="617.63" y="575.5" >ns3::LteUe..</text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt;::_Vector_base (643,355 samples, 0.07%)</title><rect x="444.8" y="309" width="0.5" height="15.0" fill="rgb(208,17,4)" rx="2" ry="2" />
+<text  x="447.75" y="319.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::empty (157,851 samples, 0.02%)</title><rect x="722.5" y="517" width="0.1" height="15.0" fill="rgb(243,177,42)" rx="2" ry="2" />
+<text  x="725.52" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt;::find (1,524,725 samples, 0.16%)</title><rect x="171.0" y="437" width="1.2" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="174.02" y="447.5" ></text>
+</g>
+<g >
+<title>int&amp; std::vector&lt;int, std::allocator&lt;int&gt; &gt;::emplace_back&lt;int&gt; (148,897 samples, 0.02%)</title><rect x="347.2" y="517" width="0.1" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="350.19" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::LteAmc::GetCqiFromSpectralEfficiency (426,858 samples, 0.04%)</title><rect x="231.6" y="485" width="0.4" height="15.0" fill="rgb(208,17,4)" rx="2" ry="2" />
+<text  x="234.63" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_put_node (164,554 samples, 0.02%)</title><rect x="777.0" y="357" width="0.1" height="15.0" fill="rgb(240,162,38)" rx="2" ry="2" />
+<text  x="779.97" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst const&gt;::Ptr&lt;ns3::PacketBurst&gt; (197,139 samples, 0.02%)</title><rect x="612.5" y="549" width="0.1" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="615.49" y="559.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::operator= (892,964 samples, 0.09%)</title><rect x="604.4" y="309" width="0.7" height="15.0" fill="rgb(243,175,42)" rx="2" ry="2" />
+<text  x="607.38" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::IidManager::GetAttributeN (876,759 samples, 0.09%)</title><rect x="33.7" y="405" width="0.8" height="15.0" fill="rgb(232,125,30)" rx="2" ry="2" />
+<text  x="36.75" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapProvider::ReportBufferStatusParameters&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider::ReportBufferStatusParameters&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider::ReportBufferStatusParameters&gt; &gt; &gt;::_S_key (486,222 samples, 0.05%)</title><rect x="570.3" y="277" width="0.4" height="15.0" fill="rgb(241,167,40)" rx="2" ry="2" />
+<text  x="573.34" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::Now (240,092 samples, 0.02%)</title><rect x="485.3" y="517" width="0.2" height="15.0" fill="rgb(241,168,40)" rx="2" ry="2" />
+<text  x="488.33" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::MemberLteFfrSapProvider&lt;ns3::LteFrNoOpAlgorithm&gt;::GetAvailableUlRbg (191,473 samples, 0.02%)</title><rect x="232.3" y="485" width="0.1" height="15.0" fill="rgb(207,10,2)" rx="2" ry="2" />
+<text  x="235.25" y="495.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_assign_dispatch&lt;std::_List_const_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; (211,914 samples, 0.02%)</title><rect x="90.6" y="517" width="0.2" height="15.0" fill="rgb(237,148,35)" rx="2" ry="2" />
+<text  x="93.61" y="527.5" ></text>
+</g>
+<g >
+<title> (230,158 samples, 0.02%)</title><rect x="323.8" y="485" width="0.1" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="326.75" y="495.5" ></text>
+</g>
+<g >
+<title>unsigned short* std::__copy_move_a1&lt;false, unsigned short const*, unsigned short*&gt; (286,745 samples, 0.03%)</title><rect x="521.2" y="245" width="0.2" height="15.0" fill="rgb(236,144,34)" rx="2" ry="2" />
+<text  x="524.19" y="255.5" ></text>
+</g>
+<g >
+<title>void std::__invoke_impl&lt;void, void  (29,774,663 samples, 3.07%)</title><rect x="581.4" y="357" width="24.0" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="584.42" y="367.5" >v..</text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;* std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_create_node&lt;std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (644,555 samples, 0.07%)</title><rect x="83.0" y="389" width="0.5" height="15.0" fill="rgb(217,56,13)" rx="2" ry="2" />
+<text  x="86.02" y="399.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::_M_insert&lt;ns3::Ptr&lt;ns3::Packet&gt; const&amp;&gt; (228,148 samples, 0.02%)</title><rect x="118.5" y="469" width="0.2" height="15.0" fill="rgb(234,135,32)" rx="2" ry="2" />
+<text  x="121.47" y="479.5" ></text>
+</g>
+<g >
+<title>__log10_finite (323,658 samples, 0.03%)</title><rect x="739.2" y="517" width="0.3" height="15.0" fill="rgb(237,151,36)" rx="2" ry="2" />
+<text  x="742.19" y="527.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, bool&gt;::pair (160,600 samples, 0.02%)</title><rect x="664.6" y="453" width="0.1" height="15.0" fill="rgb(252,220,52)" rx="2" ry="2" />
+<text  x="667.56" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::LteUePhy::UeMeasurementsElement&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::LteUePhy::UeMeasurementsElement&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::LteUePhy::UeMeasurementsElement&gt; &gt; &gt;::find (242,538 samples, 0.03%)</title><rect x="726.4" y="309" width="0.2" height="15.0" fill="rgb(234,136,32)" rx="2" ry="2" />
+<text  x="729.36" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::LteMacSapProvider::TransmitPduParameters::~TransmitPduParameters (199,865 samples, 0.02%)</title><rect x="15.9" y="357" width="0.2" height="15.0" fill="rgb(223,83,19)" rx="2" ry="2" />
+<text  x="18.94" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::LteInterference*&amp; std::_Mu&lt;ns3::LteInterference*, false, false&gt;::operator (286,822 samples, 0.03%)</title><rect x="49.2" y="597" width="0.2" height="15.0" fill="rgb(232,126,30)" rx="2" ry="2" />
+<text  x="52.16" y="607.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt; &gt; &gt;::_M_begin (163,866 samples, 0.02%)</title><rect x="429.6" y="245" width="0.1" height="15.0" fill="rgb(247,193,46)" rx="2" ry="2" />
+<text  x="432.61" y="255.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;1ul, ns3::Ptr&lt;ns3::SpectrumValue const&gt;, unsigned int&gt;::_M_head (396,724 samples, 0.04%)</title><rect x="754.5" y="565" width="0.3" height="15.0" fill="rgb(248,198,47)" rx="2" ry="2" />
+<text  x="757.46" y="575.5" ></text>
+</g>
+<g >
+<title>std::__invoke_result&lt;void  (872,147,551 samples, 89.93%)</title><rect x="50.2" y="597" width="701.5" height="15.0" fill="rgb(240,163,39)" rx="2" ry="2" />
+<text  x="53.24" y="607.5" >std::__invoke_result&lt;void </text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, unsigned int&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt; &gt;::end (158,886 samples, 0.02%)</title><rect x="178.7" y="453" width="0.2" height="15.0" fill="rgb(249,203,48)" rx="2" ry="2" />
+<text  x="181.73" y="463.5" ></text>
+</g>
+<g >
+<title>double* std::__uninitialized_copy&lt;true&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, double*&gt; (335,852 samples, 0.03%)</title><rect x="606.6" y="437" width="0.3" height="15.0" fill="rgb(238,153,36)" rx="2" ry="2" />
+<text  x="609.62" y="447.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Buffer::Data*, std::allocator&lt;ns3::Buffer::Data*&gt; &gt;::empty (925,744 samples, 0.10%)</title><rect x="31.8" y="341" width="0.8" height="15.0" fill="rgb(221,77,18)" rx="2" ry="2" />
+<text  x="34.83" y="351.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::max_size (498,524 samples, 0.05%)</title><rect x="693.6" y="437" width="0.4" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="696.63" y="447.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;is_invocable_r_v&lt;void, void  (30,508,273 samples, 3.15%)</title><rect x="580.8" y="373" width="24.6" height="15.0" fill="rgb(243,178,42)" rx="2" ry="2" />
+<text  x="583.83" y="383.5" >s..</text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter&gt;::Unref (2,326,898 samples, 0.24%)</title><rect x="164.3" y="437" width="1.8" height="15.0" fill="rgb(221,78,18)" rx="2" ry="2" />
+<text  x="167.26" y="447.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; &gt;::_M_addr (126,016 samples, 0.01%)</title><rect x="522.3" y="293" width="0.1" height="15.0" fill="rgb(224,87,20)" rx="2" ry="2" />
+<text  x="525.30" y="303.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;double&gt;::deallocate (164,716 samples, 0.02%)</title><rect x="728.4" y="357" width="0.2" height="15.0" fill="rgb(223,83,20)" rx="2" ry="2" />
+<text  x="731.43" y="367.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt; &gt;::begin (189,215 samples, 0.02%)</title><rect x="179.3" y="453" width="0.2" height="15.0" fill="rgb(218,62,14)" rx="2" ry="2" />
+<text  x="182.33" y="463.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;::operator++ (165,053 samples, 0.02%)</title><rect x="415.9" y="517" width="0.1" height="15.0" fill="rgb(214,45,10)" rx="2" ry="2" />
+<text  x="418.87" y="527.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::MacCeListElement_s&gt; (796,900 samples, 0.08%)</title><rect x="264.8" y="421" width="0.6" height="15.0" fill="rgb(233,130,31)" rx="2" ry="2" />
+<text  x="267.80" y="431.5" ></text>
+</g>
+<g >
+<title>std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;* std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_create_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; const&amp;&gt; (154,939 samples, 0.02%)</title><rect x="464.2" y="469" width="0.1" height="15.0" fill="rgb(230,116,27)" rx="2" ry="2" />
+<text  x="467.16" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;0ul, ns3::LteUePhy*, unsigned int, unsigned int&gt;::_Tuple_impl&lt;ns3::LteUePhy*&amp;, unsigned int&amp;, unsigned int&amp;, void&gt; (1,139,526 samples, 0.12%)</title><rect x="617.3" y="453" width="0.9" height="15.0" fill="rgb(231,120,28)" rx="2" ry="2" />
+<text  x="620.26" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::HarqStatus_e* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;ns3::DlInfoListElement_s::HarqStatus_e const*, std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt; &gt;, ns3::DlInfoListElement_s::HarqStatus_e*, ns3::DlInfoListElement_s::HarqStatus_e&gt; (2,253,213 samples, 0.23%)</title><rect x="258.8" y="373" width="1.8" height="15.0" fill="rgb(235,140,33)" rx="2" ry="2" />
+<text  x="261.83" y="383.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::~_List_base (538,728 samples, 0.06%)</title><rect x="576.2" y="357" width="0.4" height="15.0" fill="rgb(221,74,17)" rx="2" ry="2" />
+<text  x="579.16" y="367.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;unsigned char*, unsigned char&gt; (237,950 samples, 0.02%)</title><rect x="686.4" y="437" width="0.1" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="689.35" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::operator- (347,823 samples, 0.04%)</title><rect x="642.5" y="501" width="0.3" height="15.0" fill="rgb(231,122,29)" rx="2" ry="2" />
+<text  x="645.51" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Bind&lt;void  (751,966 samples, 0.08%)</title><rect x="666.7" y="453" width="0.6" height="15.0" fill="rgb(253,221,52)" rx="2" ry="2" />
+<text  x="669.66" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::VendorSpecificListElement_s* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::VendorSpecificListElement_s const*, std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt; &gt;, ns3::VendorSpecificListElement_s*&gt; (386,345 samples, 0.04%)</title><rect x="144.0" y="421" width="0.4" height="15.0" fill="rgb(206,5,1)" rx="2" ry="2" />
+<text  x="147.04" y="431.5" ></text>
+</g>
+<g >
+<title>std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;::_M_valptr (561,256 samples, 0.06%)</title><rect x="500.2" y="501" width="0.5" height="15.0" fill="rgb(207,10,2)" rx="2" ry="2" />
+<text  x="503.22" y="511.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;unsigned short&gt;::_M_ptr (202,650 samples, 0.02%)</title><rect x="463.1" y="277" width="0.2" height="15.0" fill="rgb(217,56,13)" rx="2" ry="2" />
+<text  x="466.13" y="287.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;unsigned char&gt; &gt;::deallocate (197,176 samples, 0.02%)</title><rect x="693.2" y="437" width="0.2" height="15.0" fill="rgb(245,184,44)" rx="2" ry="2" />
+<text  x="696.23" y="447.5" ></text>
+</g>
+<g >
+<title>std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;* std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_create_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; const&amp;&gt; (564,216 samples, 0.06%)</title><rect x="318.8" y="341" width="0.5" height="15.0" fill="rgb(230,116,27)" rx="2" ry="2" />
+<text  x="321.81" y="351.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy_aux&lt;false&gt;::__destroy&lt;ns3::HigherLayerSelected_s*&gt; (151,525 samples, 0.02%)</title><rect x="255.6" y="309" width="0.1" height="15.0" fill="rgb(210,25,6)" rx="2" ry="2" />
+<text  x="258.57" y="319.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;double&gt; &gt;::deallocate (199,701 samples, 0.02%)</title><rect x="716.8" y="373" width="0.2" height="15.0" fill="rgb(236,143,34)" rx="2" ry="2" />
+<text  x="719.83" y="383.5" ></text>
+</g>
+<g >
+<title>atan2f32x (451,382 samples, 0.05%)</title><rect x="641.8" y="485" width="0.3" height="15.0" fill="rgb(240,164,39)" rx="2" ry="2" />
+<text  x="644.77" y="495.5" ></text>
+</g>
+<g >
+<title>std::operator== (155,056 samples, 0.02%)</title><rect x="294.3" y="517" width="0.2" height="15.0" fill="rgb(229,110,26)" rx="2" ry="2" />
+<text  x="297.33" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumModel const&gt;::Ptr (148,972 samples, 0.02%)</title><rect x="646.3" y="405" width="0.1" height="15.0" fill="rgb(232,125,30)" rx="2" ry="2" />
+<text  x="649.32" y="415.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::__uninitialized_default_n_a&lt;unsigned char*, unsigned long, unsigned char&gt; (957,537 samples, 0.10%)</title><rect x="460.2" y="245" width="0.8" height="15.0" fill="rgb(225,93,22)" rx="2" ry="2" />
+<text  x="463.23" y="255.5" ></text>
+</g>
+<g >
+<title>std::_Head_base&lt;0ul, ns3::LteInterference*, false&gt;::_Head_base&lt;ns3::LteInterference*&amp;&gt; (359,845 samples, 0.04%)</title><rect x="709.2" y="405" width="0.3" height="15.0" fill="rgb(246,192,46)" rx="2" ry="2" />
+<text  x="712.16" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt; &gt;::find (152,754 samples, 0.02%)</title><rect x="104.9" y="453" width="0.1" height="15.0" fill="rgb(214,44,10)" rx="2" ry="2" />
+<text  x="107.92" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; std::map&lt;ns3::TbId_t, ns3::tbInfo_t, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::emplace_hint&lt;std::pair&lt;ns3::TbId_t, ns3::tbInfo_t&gt; &gt; (2,727,119 samples, 0.28%)</title><rect x="384.1" y="517" width="2.2" height="15.0" fill="rgb(245,186,44)" rx="2" ry="2" />
+<text  x="387.08" y="527.5" ></text>
+</g>
+<g >
+<title>int* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;int const*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt;, int*, int&gt; (730,011 samples, 0.08%)</title><rect x="398.8" y="533" width="0.6" height="15.0" fill="rgb(205,0,0)" rx="2" ry="2" />
+<text  x="401.81" y="543.5" ></text>
+</g>
+<g >
+<title>std::function&lt;void  (1,369,617 samples, 0.14%)</title><rect x="439.8" y="437" width="1.1" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="442.84" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Callback&lt;void, ns3::Ptr&lt;ns3::Packet&gt; &gt;::operator (21,452,008 samples, 2.21%)</title><rect x="421.5" y="549" width="17.3" height="15.0" fill="rgb(207,10,2)" rx="2" ry="2" />
+<text  x="424.55" y="559.5" ></text>
+</g>
+<g >
+<title>double* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, double*, double&gt; (156,421 samples, 0.02%)</title><rect x="484.8" y="469" width="0.2" height="15.0" fill="rgb(222,79,19)" rx="2" ry="2" />
+<text  x="487.85" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Packet::Copy (2,016,224 samples, 0.21%)</title><rect x="624.0" y="517" width="1.7" height="15.0" fill="rgb(250,211,50)" rx="2" ry="2" />
+<text  x="627.03" y="527.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;is_member_pointer_v&lt;void  (5,779,283 samples, 0.60%)</title><rect x="708.1" y="501" width="4.6" height="15.0" fill="rgb(241,170,40)" rx="2" ry="2" />
+<text  x="711.05" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::LteNetDevice::GetNode (844,941 samples, 0.09%)</title><rect x="312.3" y="501" width="0.7" height="15.0" fill="rgb(229,112,26)" rx="2" ry="2" />
+<text  x="315.33" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Function_base::_Base_manager&lt;std::_Bind&lt;void  (6,361,481 samples, 0.66%)</title><rect x="772.1" y="597" width="5.1" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="775.11" y="607.5" ></text>
+</g>
+<g >
+<title>ns3::NoOpComponentCarrierManager::DoNotifyTxOpportunity (304,289 samples, 0.03%)</title><rect x="15.5" y="421" width="0.2" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="18.45" y="431.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::vector (190,812 samples, 0.02%)</title><rect x="266.7" y="389" width="0.2" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="269.72" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::LteRlcSpecificLteMacSapUser::NotifyTxOpportunity (304,289 samples, 0.03%)</title><rect x="15.5" y="405" width="0.2" height="15.0" fill="rgb(249,204,48)" rx="2" ry="2" />
+<text  x="18.45" y="415.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt;::~vector (802,126 samples, 0.08%)</title><rect x="256.3" y="389" width="0.6" height="15.0" fill="rgb(246,189,45)" rx="2" ry="2" />
+<text  x="259.29" y="399.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::begin (198,307 samples, 0.02%)</title><rect x="746.0" y="517" width="0.2" height="15.0" fill="rgb(206,6,1)" rx="2" ry="2" />
+<text  x="749.01" y="527.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::UlInfoListElement_s, std::allocator&lt;ns3::UlInfoListElement_s&gt; &gt;::clear (312,181 samples, 0.03%)</title><rect x="265.4" y="517" width="0.3" height="15.0" fill="rgb(212,33,8)" rx="2" ry="2" />
+<text  x="268.44" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy::StartSubFrame (314,249 samples, 0.03%)</title><rect x="11.2" y="565" width="0.2" height="15.0" fill="rgb(234,136,32)" rx="2" ry="2" />
+<text  x="14.17" y="575.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumPhy&gt;::operator bool (277,440 samples, 0.03%)</title><rect x="323.3" y="501" width="0.3" height="15.0" fill="rgb(210,27,6)" rx="2" ry="2" />
+<text  x="326.35" y="511.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::~vector (514,929 samples, 0.05%)</title><rect x="233.2" y="325" width="0.4" height="15.0" fill="rgb(225,92,22)" rx="2" ry="2" />
+<text  x="236.21" y="335.5" ></text>
+</g>
+<g >
+<title>double const&amp; const&amp; std::__get_helper&lt;0ul, double const&amp;, double const&amp;, double const&amp;&gt; (550,022 samples, 0.06%)</title><rect x="748.6" y="469" width="0.4" height="15.0" fill="rgb(236,143,34)" rx="2" ry="2" />
+<text  x="751.60" y="479.5" ></text>
+</g>
+<g >
+<title> (199,830 samples, 0.02%)</title><rect x="492.1" y="533" width="0.2" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="495.14" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt;::end (167,970 samples, 0.02%)</title><rect x="568.6" y="261" width="0.1" height="15.0" fill="rgb(254,228,54)" rx="2" ry="2" />
+<text  x="571.59" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::LteRlcSpecificLteMacSapUser::NotifyTxOpportunity (6,532,753 samples, 0.67%)</title><rect x="151.1" y="421" width="5.3" height="15.0" fill="rgb(249,204,48)" rx="2" ry="2" />
+<text  x="154.13" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::TypeId::GetParent (699,339 samples, 0.07%)</title><rect x="373.9" y="469" width="0.5" height="15.0" fill="rgb(211,29,7)" rx="2" ry="2" />
+<text  x="376.89" y="479.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::end (217,306 samples, 0.02%)</title><rect x="563.0" y="165" width="0.1" height="15.0" fill="rgb(211,29,6)" rx="2" ry="2" />
+<text  x="565.96" y="175.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue&gt;::operator= (399,056 samples, 0.04%)</title><rect x="728.7" y="501" width="0.3" height="15.0" fill="rgb(220,71,17)" rx="2" ry="2" />
+<text  x="731.73" y="511.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;::~pair (189,965 samples, 0.02%)</title><rect x="193.4" y="373" width="0.2" height="15.0" fill="rgb(208,15,3)" rx="2" ry="2" />
+<text  x="196.40" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt; &gt;::_M_valptr (193,132 samples, 0.02%)</title><rect x="676.0" y="421" width="0.1" height="15.0" fill="rgb(222,81,19)" rx="2" ry="2" />
+<text  x="678.99" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::Object::DoDelete (2,326,898 samples, 0.24%)</title><rect x="164.3" y="405" width="1.8" height="15.0" fill="rgb(212,34,8)" rx="2" ry="2" />
+<text  x="167.26" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumValueHelper::CreateTxPowerSpectralDensity (5,482,916 samples, 0.57%)</title><rect x="54.2" y="517" width="4.4" height="15.0" fill="rgb(250,209,50)" rx="2" ry="2" />
+<text  x="57.17" y="527.5" ></text>
+</g>
+<g >
+<title>double* std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, double*&gt; (205,537 samples, 0.02%)</title><rect x="606.7" y="405" width="0.2" height="15.0" fill="rgb(210,23,5)" rx="2" ry="2" />
+<text  x="609.72" y="415.5" ></text>
+</g>
+<g >
+<title> (310,011 samples, 0.03%)</title><rect x="734.6" y="517" width="0.3" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="737.62" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::Packet::Packet (2,947,073 samples, 0.30%)</title><rect x="359.1" y="501" width="2.4" height="15.0" fill="rgb(230,115,27)" rx="2" ry="2" />
+<text  x="362.09" y="511.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy_aux&lt;false&gt;::__destroy&lt;ns3::VendorSpecificListElement_s*&gt; (157,042 samples, 0.02%)</title><rect x="25.2" y="277" width="0.2" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="28.23" y="287.5" ></text>
+</g>
+<g >
+<title>double* std::__uninitialized_default_n_a&lt;double*, unsigned long, double&gt; (153,593 samples, 0.02%)</title><rect x="316.3" y="357" width="0.1" height="15.0" fill="rgb(248,199,47)" rx="2" ry="2" />
+<text  x="319.25" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteSpectrumSignalParametersDataFrame&gt; ns3::DynamicCast&lt;ns3::LteSpectrumSignalParametersDataFrame, ns3::SpectrumSignalParameters&gt; (654,107 samples, 0.07%)</title><rect x="734.9" y="533" width="0.5" height="15.0" fill="rgb(212,35,8)" rx="2" ry="2" />
+<text  x="737.87" y="543.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Callback&lt;void, unsigned short, unsigned char, unsigned int, unsigned long&gt;, std::allocator&lt;ns3::Callback&lt;void, unsigned short, unsigned char, unsigned int, unsigned long&gt; &gt; &gt;::begin (246,319 samples, 0.03%)</title><rect x="428.3" y="245" width="0.2" height="15.0" fill="rgb(235,142,34)" rx="2" ry="2" />
+<text  x="431.34" y="255.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt; &gt;::~_Rb_tree (314,365 samples, 0.03%)</title><rect x="509.4" y="533" width="0.3" height="15.0" fill="rgb(211,27,6)" rx="2" ry="2" />
+<text  x="512.43" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::VendorSpecificListElement_s* std::__uninitialized_copy&lt;false&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::VendorSpecificListElement_s const*, std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt; &gt;, ns3::VendorSpecificListElement_s*&gt; (598,518 samples, 0.06%)</title><rect x="475.6" y="261" width="0.5" height="15.0" fill="rgb(227,101,24)" rx="2" ry="2" />
+<text  x="478.64" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::Vector3D::GetLength (199,594 samples, 0.02%)</title><rect x="740.0" y="485" width="0.2" height="15.0" fill="rgb(211,31,7)" rx="2" ry="2" />
+<text  x="743.02" y="495.5" ></text>
+</g>
+<g >
+<title>std::function&lt;void  (75,554,587 samples, 7.79%)</title><rect x="515.9" y="517" width="60.7" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="518.86" y="527.5" >std::f..</text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; &gt; &gt;::begin (520,365 samples, 0.05%)</title><rect x="348.6" y="533" width="0.4" height="15.0" fill="rgb(227,102,24)" rx="2" ry="2" />
+<text  x="351.60" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::ObjectBase::ConstructSelf (2,631,536 samples, 0.27%)</title><rect x="448.3" y="261" width="2.1" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="451.25" y="271.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::__uninitialized_copy&lt;true&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, unsigned char*&gt; (371,349 samples, 0.04%)</title><rect x="584.8" y="229" width="0.3" height="15.0" fill="rgb(233,129,30)" rx="2" ry="2" />
+<text  x="587.82" y="239.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;::operator++ (269,003 samples, 0.03%)</title><rect x="222.9" y="453" width="0.2" height="15.0" fill="rgb(249,206,49)" rx="2" ry="2" />
+<text  x="225.86" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::LteUeMac::DoTransmitPdu (5,333,252 samples, 0.55%)</title><rect x="560.9" y="213" width="4.3" height="15.0" fill="rgb(208,15,3)" rx="2" ry="2" />
+<text  x="563.94" y="223.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;is_member_pointer_v&lt;void  (676,289 samples, 0.07%)</title><rect x="726.7" y="501" width="0.6" height="15.0" fill="rgb(241,170,40)" rx="2" ry="2" />
+<text  x="729.75" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::LteUePhy::GenerateMixedCqiReport (24,898,652 samples, 2.57%)</title><rect x="581.8" y="341" width="20.1" height="15.0" fill="rgb(229,112,26)" rx="2" ry="2" />
+<text  x="584.83" y="351.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::vector (259,580 samples, 0.03%)</title><rect x="688.8" y="437" width="0.2" height="15.0" fill="rgb(206,9,2)" rx="2" ry="2" />
+<text  x="691.82" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt;::operator= (1,864,456 samples, 0.19%)</title><rect x="634.3" y="421" width="1.5" height="15.0" fill="rgb(219,65,15)" rx="2" ry="2" />
+<text  x="637.32" y="431.5" ></text>
+</g>
+<g >
+<title> (236,363 samples, 0.02%)</title><rect x="375.3" y="517" width="0.2" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="378.34" y="527.5" ></text>
+</g>
+<g >
+<title>void std::__fill_a&lt;double*, double&gt; (356,463 samples, 0.04%)</title><rect x="403.8" y="373" width="0.3" height="15.0" fill="rgb(211,27,6)" rx="2" ry="2" />
+<text  x="406.77" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumSignalParametersDataFrame::Copy (6,331,179 samples, 0.65%)</title><rect x="644.2" y="517" width="5.1" height="15.0" fill="rgb(214,43,10)" rx="2" ry="2" />
+<text  x="647.19" y="527.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt;::size (159,421 samples, 0.02%)</title><rect x="150.2" y="405" width="0.2" height="15.0" fill="rgb(212,35,8)" rx="2" ry="2" />
+<text  x="153.22" y="415.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::end (262,399 samples, 0.03%)</title><rect x="714.6" y="469" width="0.3" height="15.0" fill="rgb(237,147,35)" rx="2" ry="2" />
+<text  x="717.65" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Tag::~Tag (149,528 samples, 0.02%)</title><rect x="561.3" y="181" width="0.1" height="15.0" fill="rgb(248,201,48)" rx="2" ry="2" />
+<text  x="564.26" y="191.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt; &gt;::allocate (313,319 samples, 0.03%)</title><rect x="626.6" y="437" width="0.2" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="629.59" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::LteFlowId_t, std::pair&lt;ns3::LteFlowId_t const, ns3::FfMacSchedSapProvider::SchedDlRlcBufferReqParameters&gt;, std::_Select1st&lt;std::pair&lt;ns3::LteFlowId_t const, ns3::FfMacSchedSapProvider::SchedDlRlcBufferReqParameters&gt; &gt;, std::less&lt;ns3::LteFlowId_t&gt;, std::allocator&lt;std::pair&lt;ns3::LteFlowId_t const, ns3::FfMacSchedSapProvider::SchedDlRlcBufferReqParameters&gt; &gt; &gt;::_S_key (488,547 samples, 0.05%)</title><rect x="181.8" y="421" width="0.4" height="15.0" fill="rgb(227,104,24)" rx="2" ry="2" />
+<text  x="184.81" y="431.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::begin (162,995 samples, 0.02%)</title><rect x="610.6" y="533" width="0.2" height="15.0" fill="rgb(214,45,10)" rx="2" ry="2" />
+<text  x="613.62" y="543.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;std::_List_node&lt;ns3::UlDciLteControlMessage&gt; &gt; &gt;::allocate (420,367 samples, 0.04%)</title><rect x="287.7" y="437" width="0.4" height="15.0" fill="rgb(219,66,15)" rx="2" ry="2" />
+<text  x="290.75" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Angles::Angles (311,344 samples, 0.03%)</title><rect x="113.2" y="469" width="0.2" height="15.0" fill="rgb(254,226,54)" rx="2" ry="2" />
+<text  x="116.18" y="479.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy_aux&lt;false&gt;::__destroy&lt;ns3::MacCeListElement_s*&gt; (796,900 samples, 0.08%)</title><rect x="264.8" y="437" width="0.6" height="15.0" fill="rgb(221,76,18)" rx="2" ry="2" />
+<text  x="267.80" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::AntennaModel&gt;::operator= (374,650 samples, 0.04%)</title><rect x="669.0" y="533" width="0.3" height="15.0" fill="rgb(215,48,11)" rx="2" ry="2" />
+<text  x="671.96" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt;::_M_get_Tp_allocator (152,962 samples, 0.02%)</title><rect x="132.7" y="373" width="0.1" height="15.0" fill="rgb(248,198,47)" rx="2" ry="2" />
+<text  x="135.71" y="383.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::ByteTagListData**, std::vector&lt;ns3::ByteTagListData*, std::allocator&lt;ns3::ByteTagListData*&gt; &gt; &gt;::__normal_iterator (214,988 samples, 0.02%)</title><rect x="553.8" y="181" width="0.2" height="15.0" fill="rgb(218,60,14)" rx="2" ry="2" />
+<text  x="556.81" y="191.5" ></text>
+</g>
+<g >
+<title>__cxa_finalize (155,299 samples, 0.02%)</title><rect x="35.5" y="709" width="0.2" height="15.0" fill="rgb(240,162,38)" rx="2" ry="2" />
+<text  x="38.54" y="719.5" ></text>
+</g>
+<g >
+<title>std::_List_const_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;::_List_const_iterator (158,022 samples, 0.02%)</title><rect x="464.0" y="501" width="0.2" height="15.0" fill="rgb(227,101,24)" rx="2" ry="2" />
+<text  x="467.03" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt;::_M_deallocate (148,463 samples, 0.02%)</title><rect x="445.8" y="277" width="0.1" height="15.0" fill="rgb(211,29,6)" rx="2" ry="2" />
+<text  x="448.76" y="287.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;std::is_constructible&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt;::value, std::pair&lt;std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, bool&gt; &gt;::type std::map&lt;ns3::Scheduler::EventKey, ns3::EventImpl*, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::insert&lt;std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (146,147 samples, 0.02%)</title><rect x="614.1" y="453" width="0.2" height="15.0" fill="rgb(211,29,7)" rx="2" ry="2" />
+<text  x="617.14" y="463.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; (318,404 samples, 0.03%)</title><rect x="661.4" y="325" width="0.2" height="15.0" fill="rgb(213,37,9)" rx="2" ry="2" />
+<text  x="664.36" y="335.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt; &gt;::construct&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::pair&lt;ns3::TbId_t, ns3::tbInfo_t&gt; &gt; (775,942 samples, 0.08%)</title><rect x="384.8" y="437" width="0.6" height="15.0" fill="rgb(247,195,46)" rx="2" ry="2" />
+<text  x="387.79" y="447.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Callback&lt;void, unsigned short, unsigned short, double, double, unsigned char&gt;, std::allocator&lt;ns3::Callback&lt;void, unsigned short, unsigned short, double, double, unsigned char&gt; &gt; &gt;::begin (372,850 samples, 0.04%)</title><rect x="600.6" y="293" width="0.3" height="15.0" fill="rgb(205,4,1)" rx="2" ry="2" />
+<text  x="603.64" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::LteRlcSm::DoReceivePdu (1,549,265 samples, 0.16%)</title><rect x="435.8" y="277" width="1.2" height="15.0" fill="rgb(239,160,38)" rx="2" ry="2" />
+<text  x="438.78" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::RlcTag::Serialize (197,148 samples, 0.02%)</title><rect x="31.0" y="405" width="0.2" height="15.0" fill="rgb(233,133,31)" rx="2" ry="2" />
+<text  x="34.01" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteControlMessage&gt;&amp; std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::emplace_back&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; const&amp;&gt; (898,249 samples, 0.09%)</title><rect x="610.8" y="517" width="0.7" height="15.0" fill="rgb(224,89,21)" rx="2" ry="2" />
+<text  x="613.82" y="527.5" ></text>
+</g>
+<g >
+<title>void std::_Construct&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; const&amp;&gt; (184,373 samples, 0.02%)</title><rect x="205.0" y="325" width="0.1" height="15.0" fill="rgb(206,8,1)" rx="2" ry="2" />
+<text  x="207.98" y="335.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_insert&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;&amp;&gt; (617,971 samples, 0.06%)</title><rect x="721.7" y="453" width="0.5" height="15.0" fill="rgb(227,101,24)" rx="2" ry="2" />
+<text  x="724.68" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::AttributeConstructionList::AttributeConstructionList (566,514 samples, 0.06%)</title><rect x="162.3" y="421" width="0.5" height="15.0" fill="rgb(231,122,29)" rx="2" ry="2" />
+<text  x="165.30" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::DlInfoListElement_s (411,592 samples, 0.04%)</title><rect x="107.3" y="389" width="0.3" height="15.0" fill="rgb(231,119,28)" rx="2" ry="2" />
+<text  x="110.29" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider::ReportBufferStatusParameters&gt; &gt;::operator* (283,168 samples, 0.03%)</title><rect x="568.8" y="325" width="0.2" height="15.0" fill="rgb(249,202,48)" rx="2" ry="2" />
+<text  x="571.79" y="335.5" ></text>
+</g>
+<g >
+<title>decltype  (367,864 samples, 0.04%)</title><rect x="363.7" y="437" width="0.3" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="366.67" y="447.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, bool&gt;::pair&lt;std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;&amp;, bool&gt; (153,072 samples, 0.02%)</title><rect x="664.4" y="437" width="0.1" height="15.0" fill="rgb(213,38,9)" rx="2" ry="2" />
+<text  x="667.40" y="447.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::VendorSpecificListElement_s*, ns3::VendorSpecificListElement_s&gt; (162,953 samples, 0.02%)</title><rect x="473.5" y="277" width="0.1" height="15.0" fill="rgb(207,12,3)" rx="2" ry="2" />
+<text  x="476.48" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultDeleter&lt;ns3::EventImpl&gt;::Delete (786,828 samples, 0.08%)</title><rect x="640.3" y="485" width="0.6" height="15.0" fill="rgb(240,163,39)" rx="2" ry="2" />
+<text  x="643.31" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::BuildDataListElement_s* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;ns3::BuildDataListElement_s const*, std::vector&lt;ns3::BuildDataListElement_s, std::allocator&lt;ns3::BuildDataListElement_s&gt; &gt; &gt;, ns3::BuildDataListElement_s*, ns3::BuildDataListElement_s&gt; (556,681 samples, 0.06%)</title><rect x="141.9" y="437" width="0.4" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="144.89" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;1ul, double const&amp;, double const&amp;&gt;::_M_head (323,243 samples, 0.03%)</title><rect x="748.2" y="437" width="0.2" height="15.0" fill="rgb(234,136,32)" rx="2" ry="2" />
+<text  x="751.18" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_M_drop_node (152,641 samples, 0.02%)</title><rect x="394.2" y="437" width="0.1" height="15.0" fill="rgb(225,93,22)" rx="2" ry="2" />
+<text  x="397.19" y="447.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;int&gt;::allocate (169,207 samples, 0.02%)</title><rect x="574.6" y="261" width="0.1" height="15.0" fill="rgb(212,34,8)" rx="2" ry="2" />
+<text  x="577.55" y="271.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;int const, double&gt; &gt;* std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_M_clone_node&lt;false, std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_Alloc_node&gt; (911,587 samples, 0.09%)</title><rect x="59.3" y="437" width="0.7" height="15.0" fill="rgb(228,109,26)" rx="2" ry="2" />
+<text  x="62.31" y="447.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::UlDciListElement_s, std::allocator&lt;ns3::UlDciListElement_s&gt; &gt;::push_back (234,296 samples, 0.02%)</title><rect x="105.9" y="469" width="0.1" height="15.0" fill="rgb(218,64,15)" rx="2" ry="2" />
+<text  x="108.85" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;::erase (2,911,768 samples, 0.30%)</title><rect x="633.8" y="533" width="2.3" height="15.0" fill="rgb(248,200,48)" rx="2" ry="2" />
+<text  x="636.79" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::Object::~Object (776,622 samples, 0.08%)</title><rect x="454.0" y="213" width="0.6" height="15.0" fill="rgb(229,110,26)" rx="2" ry="2" />
+<text  x="456.99" y="223.5" ></text>
+</g>
+<g >
+<title>ns3::int64x64_t::MulByInvert (359,204 samples, 0.04%)</title><rect x="406.2" y="469" width="0.3" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="409.19" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::operator= (1,990,186 samples, 0.21%)</title><rect x="646.9" y="437" width="1.6" height="15.0" fill="rgb(243,177,42)" rx="2" ry="2" />
+<text  x="649.87" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Vector3D::GetLength (422,570 samples, 0.04%)</title><rect x="66.1" y="485" width="0.3" height="15.0" fill="rgb(211,31,7)" rx="2" ry="2" />
+<text  x="69.09" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumModel::GetUid (126,136 samples, 0.01%)</title><rect x="79.6" y="517" width="0.2" height="15.0" fill="rgb(240,161,38)" rx="2" ry="2" />
+<text  x="82.65" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteSpectrumSignalParametersUlSrsFrame&gt;::Ptr (205,401 samples, 0.02%)</title><rect x="736.9" y="517" width="0.2" height="15.0" fill="rgb(223,84,20)" rx="2" ry="2" />
+<text  x="739.94" y="527.5" ></text>
+</g>
+<g >
+<title>[libc.so.6] (144,943 samples, 0.01%)</title><rect x="764.8" y="565" width="0.1" height="15.0" fill="rgb(223,84,20)" rx="2" ry="2" />
+<text  x="767.80" y="575.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;::__normal_iterator (155,390 samples, 0.02%)</title><rect x="318.2" y="373" width="0.1" height="15.0" fill="rgb(215,50,12)" rx="2" ry="2" />
+<text  x="321.18" y="383.5" ></text>
+</g>
+<g >
+<title>void std::destroy_at&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; (274,123 samples, 0.03%)</title><rect x="378.4" y="293" width="0.2" height="15.0" fill="rgb(224,88,21)" rx="2" ry="2" />
+<text  x="381.40" y="303.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt;::_M_erase (264,157 samples, 0.03%)</title><rect x="117.8" y="501" width="0.2" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="120.75" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::CallbackImpl&lt;void, unsigned short, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;::operator (1,320,674 samples, 0.14%)</title><rect x="725.6" y="501" width="1.1" height="15.0" fill="rgb(223,86,20)" rx="2" ry="2" />
+<text  x="728.60" y="511.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::resize (1,973,260 samples, 0.20%)</title><rect x="459.4" y="277" width="1.6" height="15.0" fill="rgb(213,38,9)" rx="2" ry="2" />
+<text  x="462.41" y="287.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;* std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::_M_create_node&lt;std::piecewise_construct_t const&amp;, std::tuple&lt;unsigned short const&amp;&gt;, std::tuple&lt;&gt; &gt; (922,589 samples, 0.10%)</title><rect x="242.7" y="437" width="0.7" height="15.0" fill="rgb(231,123,29)" rx="2" ry="2" />
+<text  x="245.68" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::HarqProcessInfoElement_t* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;ns3::HarqProcessInfoElement_t const*, std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt;, ns3::HarqProcessInfoElement_t*, ns3::HarqProcessInfoElement_t&gt; (419,766 samples, 0.04%)</title><rect x="591.5" y="261" width="0.3" height="15.0" fill="rgb(252,220,52)" rx="2" ry="2" />
+<text  x="594.49" y="271.5" ></text>
+</g>
+<g >
+<title>std::_Function_handler&lt;void  (73,612,890 samples, 7.59%)</title><rect x="517.4" y="421" width="59.2" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="520.39" y="431.5" >std::_..</text>
+</g>
+<g >
+<title>std::_Bit_const_iterator::_Bit_const_iterator (191,509 samples, 0.02%)</title><rect x="201.3" y="437" width="0.2" height="15.0" fill="rgb(225,95,22)" rx="2" ry="2" />
+<text  x="204.34" y="447.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned short const, double&gt; &gt;::_M_ptr (260,663 samples, 0.03%)</title><rect x="295.5" y="453" width="0.2" height="15.0" fill="rgb(210,27,6)" rx="2" ry="2" />
+<text  x="298.50" y="463.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;::operator* (284,432 samples, 0.03%)</title><rect x="410.6" y="501" width="0.2" height="15.0" fill="rgb(215,47,11)" rx="2" ry="2" />
+<text  x="413.55" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Buffer::Buffer (198,909 samples, 0.02%)</title><rect x="19.0" y="373" width="0.1" height="15.0" fill="rgb(254,226,54)" rx="2" ry="2" />
+<text  x="21.95" y="383.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;* std::__copy_move_a1&lt;true, std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;*, std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;*&gt; (148,381 samples, 0.02%)</title><rect x="117.1" y="453" width="0.1" height="15.0" fill="rgb(222,79,18)" rx="2" ry="2" />
+<text  x="120.11" y="463.5" ></text>
+</g>
+<g >
+<title>[libc.so.6] (149,521 samples, 0.02%)</title><rect x="212.9" y="277" width="0.1" height="15.0" fill="rgb(223,84,20)" rx="2" ry="2" />
+<text  x="215.88" y="287.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;std::__strip_reference_wrapper&lt;std::decay&lt;ns3::Scheduler::EventKey const&amp;&gt;::type&gt;::__type, std::__strip_reference_wrapper&lt;std::decay&lt;ns3::EventImpl* const&amp;&gt;::type&gt;::__type&gt; std::make_pair&lt;ns3::Scheduler::EventKey const&amp;, ns3::EventImpl* const&amp;&gt; (145,249 samples, 0.01%)</title><rect x="109.2" y="469" width="0.1" height="15.0" fill="rgb(235,141,33)" rx="2" ry="2" />
+<text  x="112.21" y="479.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::begin (232,377 samples, 0.02%)</title><rect x="165.4" y="357" width="0.2" height="15.0" fill="rgb(230,117,28)" rx="2" ry="2" />
+<text  x="168.45" y="367.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;1ul, ns3::Ptr&lt;ns3::PacketBurst&gt; &gt;::_Tuple_impl&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;&amp;&gt; (549,835 samples, 0.06%)</title><rect x="282.3" y="437" width="0.5" height="15.0" fill="rgb(247,194,46)" rx="2" ry="2" />
+<text  x="285.31" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt; &gt;::_M_lower_bound (778,887 samples, 0.08%)</title><rect x="180.3" y="437" width="0.6" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="183.31" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt;::~Ptr (156,408 samples, 0.02%)</title><rect x="281.5" y="421" width="0.1" height="15.0" fill="rgb(205,3,0)" rx="2" ry="2" />
+<text  x="284.47" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::CqiListElement_s* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::CqiListElement_s*, std::vector&lt;ns3::CqiListElement_s, std::allocator&lt;ns3::CqiListElement_s&gt; &gt; &gt;, ns3::CqiListElement_s*&gt; (1,085,784 samples, 0.11%)</title><rect x="92.1" y="453" width="0.8" height="15.0" fill="rgb(240,163,38)" rx="2" ry="2" />
+<text  x="95.06" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::LteInterference::ConditionallyEvaluateChunk (17,432,677 samples, 1.80%)</title><rect x="401.0" y="549" width="14.0" height="15.0" fill="rgb(243,177,42)" rx="2" ry="2" />
+<text  x="403.96" y="559.5" ></text>
+</g>
+<g >
+<title>std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; &gt; &gt;::operator (198,281 samples, 0.02%)</title><rect x="456.1" y="245" width="0.2" height="15.0" fill="rgb(252,217,51)" rx="2" ry="2" />
+<text  x="459.14" y="255.5" ></text>
+</g>
+<g >
+<title>void std::vector&lt;ns3::BuildDataListElement_s, std::allocator&lt;ns3::BuildDataListElement_s&gt; &gt;::_M_realloc_insert&lt;ns3::BuildDataListElement_s const&amp;&gt; (306,330 samples, 0.03%)</title><rect x="100.7" y="453" width="0.3" height="15.0" fill="rgb(238,153,36)" rx="2" ry="2" />
+<text  x="103.75" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter&gt;::Unref (201,024 samples, 0.02%)</title><rect x="382.2" y="453" width="0.1" height="15.0" fill="rgb(221,78,18)" rx="2" ry="2" />
+<text  x="385.15" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::_S_max_size (236,269 samples, 0.02%)</title><rect x="397.9" y="485" width="0.2" height="15.0" fill="rgb(228,109,26)" rx="2" ry="2" />
+<text  x="400.93" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::~SpectrumValue (199,623 samples, 0.02%)</title><rect x="656.1" y="469" width="0.1" height="15.0" fill="rgb(247,193,46)" rx="2" ry="2" />
+<text  x="659.05" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::DlInfoListElement_s (461,722 samples, 0.05%)</title><rect x="503.6" y="405" width="0.4" height="15.0" fill="rgb(231,119,28)" rx="2" ry="2" />
+<text  x="506.62" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::DlDciLteControlMessage::~DlDciLteControlMessage (321,995 samples, 0.03%)</title><rect x="610.0" y="421" width="0.2" height="15.0" fill="rgb(212,34,8)" rx="2" ry="2" />
+<text  x="612.97" y="431.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt; &gt;::destroy&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; (1,191,133 samples, 0.12%)</title><rect x="75.7" y="325" width="1.0" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="78.74" y="335.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;*, std::vector&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt; &gt; &gt; &gt; std::__copy_move_a&lt;true, __gnu_cxx::__normal_iterator&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;*, std::vector&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt; &gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;*, std::vector&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt; &gt; &gt; &gt; &gt; (1,780,222 samples, 0.18%)</title><rect x="290.1" y="485" width="1.4" height="15.0" fill="rgb(230,116,27)" rx="2" ry="2" />
+<text  x="293.06" y="495.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;unsigned short&gt; &gt;::allocate (378,103 samples, 0.04%)</title><rect x="520.1" y="277" width="0.3" height="15.0" fill="rgb(250,209,50)" rx="2" ry="2" />
+<text  x="523.12" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::HigherLayerSelected_s* std::__uninitialized_copy&lt;false&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::HigherLayerSelected_s const*, std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt; &gt;, ns3::HigherLayerSelected_s*&gt; (283,264 samples, 0.03%)</title><rect x="593.3" y="213" width="0.3" height="15.0" fill="rgb(251,215,51)" rx="2" ry="2" />
+<text  x="596.34" y="223.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, unsigned char*&gt; (151,453 samples, 0.02%)</title><rect x="92.8" y="341" width="0.1" height="15.0" fill="rgb(227,104,25)" rx="2" ry="2" />
+<text  x="95.82" y="351.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; std::copy&lt;__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; (455,373 samples, 0.05%)</title><rect x="317.3" y="389" width="0.3" height="15.0" fill="rgb(249,204,48)" rx="2" ry="2" />
+<text  x="320.26" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultSimulatorImpl::ScheduleWithContext (5,432,130 samples, 0.56%)</title><rect x="82.9" y="485" width="4.3" height="15.0" fill="rgb(253,222,53)" rx="2" ry="2" />
+<text  x="85.86" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, unsigned short, std::_Identity&lt;unsigned short&gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;unsigned short&gt; &gt;::_Rb_tree (311,875 samples, 0.03%)</title><rect x="194.9" y="469" width="0.3" height="15.0" fill="rgb(251,213,51)" rx="2" ry="2" />
+<text  x="197.93" y="479.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;unsigned char&gt;::deallocate (194,524 samples, 0.02%)</title><rect x="216.5" y="421" width="0.1" height="15.0" fill="rgb(232,124,29)" rx="2" ry="2" />
+<text  x="219.49" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::LtePhy::GetPacketBurst (15,706,938 samples, 1.62%)</title><rect x="623.9" y="549" width="12.7" height="15.0" fill="rgb(221,76,18)" rx="2" ry="2" />
+<text  x="626.94" y="559.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::PhichListElement_s*, ns3::PhichListElement_s&gt; (154,556 samples, 0.02%)</title><rect x="229.4" y="437" width="0.1" height="15.0" fill="rgb(250,209,50)" rx="2" ry="2" />
+<text  x="232.42" y="447.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt;::~vector (1,044,337 samples, 0.11%)</title><rect x="132.2" y="501" width="0.9" height="15.0" fill="rgb(213,39,9)" rx="2" ry="2" />
+<text  x="135.24" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Packet::Packet (2,100,998 samples, 0.22%)</title><rect x="152.9" y="373" width="1.6" height="15.0" fill="rgb(230,115,27)" rx="2" ry="2" />
+<text  x="155.85" y="383.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;bool, std::allocator&lt;bool&gt; &gt;::resize (689,758 samples, 0.07%)</title><rect x="100.1" y="469" width="0.6" height="15.0" fill="rgb(219,68,16)" rx="2" ry="2" />
+<text  x="103.13" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, unsigned char&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, unsigned char&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, unsigned char&gt; &gt; &gt;::find (1,162,445 samples, 0.12%)</title><rect x="244.5" y="469" width="0.9" height="15.0" fill="rgb(206,4,1)" rx="2" ry="2" />
+<text  x="247.50" y="479.5" ></text>
+</g>
+<g >
+<title>void std::_Construct&lt;double&gt; (202,964 samples, 0.02%)</title><rect x="301.8" y="373" width="0.1" height="15.0" fill="rgb(228,106,25)" rx="2" ry="2" />
+<text  x="304.77" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumModel const&gt;::Ptr (454,759 samples, 0.05%)</title><rect x="704.9" y="533" width="0.3" height="15.0" fill="rgb(232,125,30)" rx="2" ry="2" />
+<text  x="707.87" y="543.5" ></text>
+</g>
+<g >
+<title>std::function&lt;void  (28,352,327 samples, 2.92%)</title><rect x="441.1" y="517" width="22.8" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="444.13" y="527.5" >s..</text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::clear (1,046,140 samples, 0.11%)</title><rect x="377.8" y="341" width="0.9" height="15.0" fill="rgb(217,58,13)" rx="2" ry="2" />
+<text  x="380.84" y="351.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned int, ns3::SpectrumConverter, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::SpectrumConverter&gt; &gt; &gt;::find (1,206,198 samples, 0.12%)</title><rect x="330.2" y="501" width="1.0" height="15.0" fill="rgb(231,123,29)" rx="2" ry="2" />
+<text  x="333.19" y="511.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_insert&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; const&amp;&gt; (453,041 samples, 0.05%)</title><rect x="419.8" y="325" width="0.4" height="15.0" fill="rgb(210,27,6)" rx="2" ry="2" />
+<text  x="422.84" y="335.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::_M_default_initialize (232,224 samples, 0.02%)</title><rect x="316.2" y="373" width="0.2" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="319.22" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::SpectrumConverter&gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::SpectrumConverter&gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::SpectrumConverter&gt; &gt; &gt;::_M_lower_bound (587,425 samples, 0.06%)</title><rect x="330.7" y="469" width="0.4" height="15.0" fill="rgb(213,41,9)" rx="2" ry="2" />
+<text  x="333.66" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::MemberSchedSapProvider&lt;ns3::PfFfMacScheduler&gt;::SchedDlTriggerReq (9,997,060 samples, 1.03%)</title><rect x="94.5" y="501" width="8.1" height="15.0" fill="rgb(247,193,46)" rx="2" ry="2" />
+<text  x="97.52" y="511.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;::~_List_base (231,280 samples, 0.02%)</title><rect x="121.3" y="517" width="0.2" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="124.33" y="527.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt; &gt;::_M_ptr (157,058 samples, 0.02%)</title><rect x="298.4" y="389" width="0.1" height="15.0" fill="rgb(228,109,26)" rx="2" ry="2" />
+<text  x="301.40" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::SpectrumValue, ns3::Empty, ns3::DefaultDeleter&lt;ns3::SpectrumValue&gt; &gt;::Unref (318,182 samples, 0.03%)</title><rect x="728.8" y="485" width="0.2" height="15.0" fill="rgb(246,189,45)" rx="2" ry="2" />
+<text  x="731.79" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;0ul, ns3::LteSpectrumPhy*&gt;::_Tuple_impl&lt;ns3::LteSpectrumPhy*&amp;&gt; (466,575 samples, 0.05%)</title><rect x="306.5" y="421" width="0.4" height="15.0" fill="rgb(216,52,12)" rx="2" ry="2" />
+<text  x="309.48" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::EnbRrcMemberLteEnbCmacSapUser::AllocateTemporaryCellRnti (285,958 samples, 0.03%)</title><rect x="130.4" y="517" width="0.2" height="15.0" fill="rgb(238,156,37)" rx="2" ry="2" />
+<text  x="133.38" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::PacketTagList::CreateTagData (656,493 samples, 0.07%)</title><rect x="562.2" y="165" width="0.5" height="15.0" fill="rgb(233,130,31)" rx="2" ry="2" />
+<text  x="565.16" y="175.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt; &gt;::_M_begin (153,550 samples, 0.02%)</title><rect x="508.9" y="517" width="0.1" height="15.0" fill="rgb(241,166,39)" rx="2" ry="2" />
+<text  x="511.90" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::MemberLteUeCphySapUser&lt;ns3::LteUeRrc&gt;::RecvMasterInformationBlock (193,516 samples, 0.02%)</title><rect x="533.6" y="357" width="0.1" height="15.0" fill="rgb(223,82,19)" rx="2" ry="2" />
+<text  x="536.59" y="367.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::allocate (264,767 samples, 0.03%)</title><rect x="384.5" y="421" width="0.2" height="15.0" fill="rgb(241,170,40)" rx="2" ry="2" />
+<text  x="387.48" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::Simulator::Now (160,616 samples, 0.02%)</title><rect x="720.7" y="517" width="0.2" height="15.0" fill="rgb(240,164,39)" rx="2" ry="2" />
+<text  x="723.73" y="527.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::_M_move_assign (904,852 samples, 0.09%)</title><rect x="594.3" y="277" width="0.7" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="597.30" y="287.5" ></text>
+</g>
+<g >
+<title>std::tuple_element&lt;1ul, std::tuple&lt;ns3::MultiModelSpectrumChannel*, ns3::Ptr&lt;ns3::SpectrumValue&gt;, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt; &gt;::type&amp; std::get&lt;1ul, ns3::MultiModelSpectrumChannel*, ns3::Ptr&lt;ns3::SpectrumValue&gt;, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt; (546,406 samples, 0.06%)</title><rect x="755.1" y="597" width="0.4" height="15.0" fill="rgb(244,182,43)" rx="2" ry="2" />
+<text  x="758.05" y="607.5" ></text>
+</g>
+<g >
+<title>ns3::MapScheduler::IsEmpty (1,317,026 samples, 0.14%)</title><rect x="777.3" y="741" width="1.0" height="15.0" fill="rgb(227,102,24)" rx="2" ry="2" />
+<text  x="780.29" y="751.5" ></text>
+</g>
+<g >
+<title>std::_Bit_iterator std::copy&lt;std::_Bit_iterator, std::_Bit_iterator&gt; (786,893 samples, 0.08%)</title><rect x="197.4" y="437" width="0.6" height="15.0" fill="rgb(233,132,31)" rx="2" ry="2" />
+<text  x="200.38" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;::_Vector_impl::_Vector_impl (396,620 samples, 0.04%)</title><rect x="350.9" y="357" width="0.3" height="15.0" fill="rgb(218,62,15)" rx="2" ry="2" />
+<text  x="353.86" y="367.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::at (397,924 samples, 0.04%)</title><rect x="510.4" y="549" width="0.3" height="15.0" fill="rgb(220,69,16)" rx="2" ry="2" />
+<text  x="513.40" y="559.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::BuildDataListElement_s, std::allocator&lt;ns3::BuildDataListElement_s&gt; &gt;::push_back (3,724,637 samples, 0.38%)</title><rect x="202.3" y="485" width="3.0" height="15.0" fill="rgb(234,137,32)" rx="2" ry="2" />
+<text  x="205.32" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteControlMessage&gt;::Ptr (171,804 samples, 0.02%)</title><rect x="534.4" y="357" width="0.1" height="15.0" fill="rgb(222,81,19)" rx="2" ry="2" />
+<text  x="537.40" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::LteUePhy::CreateDlCqiFeedbackMessage (18,538,645 samples, 1.91%)</title><rect x="583.2" y="309" width="14.9" height="15.0" fill="rgb(215,49,11)" rx="2" ry="2" />
+<text  x="586.16" y="319.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_Auto_node::_Auto_node&lt;unsigned int const&amp;, ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp;&gt; (669,703 samples, 0.07%)</title><rect x="331.6" y="453" width="0.5" height="15.0" fill="rgb(209,20,4)" rx="2" ry="2" />
+<text  x="334.57" y="463.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;std::_List_node&lt;ns3::UlDciLteControlMessage&gt; &gt;::deallocate (164,519 samples, 0.02%)</title><rect x="291.0" y="309" width="0.2" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="294.05" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::LteControlMessage::LteControlMessage (179,623 samples, 0.02%)</title><rect x="421.0" y="325" width="0.1" height="15.0" fill="rgb(214,43,10)" rx="2" ry="2" />
+<text  x="423.99" y="335.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;::_M_ptr (157,744 samples, 0.02%)</title><rect x="244.1" y="389" width="0.1" height="15.0" fill="rgb(219,67,16)" rx="2" ry="2" />
+<text  x="247.10" y="399.5" ></text>
+</g>
+<g >
+<title>std::remove_reference&lt;unsigned short&amp;&gt;::type&amp;&amp; std::move&lt;unsigned short&amp;&gt; (208,684 samples, 0.02%)</title><rect x="478.7" y="293" width="0.2" height="15.0" fill="rgb(228,109,26)" rx="2" ry="2" />
+<text  x="481.72" y="303.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::allocate (270,834 samples, 0.03%)</title><rect x="108.6" y="357" width="0.2" height="15.0" fill="rgb(236,145,34)" rx="2" ry="2" />
+<text  x="111.56" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::PeekImpl (242,375 samples, 0.02%)</title><rect x="779.5" y="821" width="0.2" height="15.0" fill="rgb(221,75,18)" rx="2" ry="2" />
+<text  x="782.49" y="831.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::clear (263,603 samples, 0.03%)</title><rect x="357.4" y="389" width="0.2" height="15.0" fill="rgb(252,216,51)" rx="2" ry="2" />
+<text  x="360.43" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::Object::DoDelete (158,753 samples, 0.02%)</title><rect x="17.0" y="405" width="0.1" height="15.0" fill="rgb(212,34,8)" rx="2" ry="2" />
+<text  x="19.99" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::UlInfoListElement_s const&amp; std::forward&lt;ns3::UlInfoListElement_s const&amp;&gt; (224,662 samples, 0.02%)</title><rect x="266.5" y="405" width="0.2" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="269.50" y="415.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::push_back (382,869 samples, 0.04%)</title><rect x="95.9" y="389" width="0.3" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="98.86" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt;::_Vector_impl_data::_Vector_impl_data (188,540 samples, 0.02%)</title><rect x="125.8" y="325" width="0.2" height="15.0" fill="rgb(243,175,41)" rx="2" ry="2" />
+<text  x="128.83" y="335.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, double&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, double&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, double&gt; &gt; &gt;::find (1,926,820 samples, 0.20%)</title><rect x="294.6" y="517" width="1.6" height="15.0" fill="rgb(229,111,26)" rx="2" ry="2" />
+<text  x="297.61" y="527.5" ></text>
+</g>
+<g >
+<title>void std::fill&lt;std::_Bit_iterator, bool&gt; (469,559 samples, 0.05%)</title><rect x="200.5" y="437" width="0.4" height="15.0" fill="rgb(224,89,21)" rx="2" ry="2" />
+<text  x="203.53" y="447.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt;::_M_ptr (271,891 samples, 0.03%)</title><rect x="242.0" y="405" width="0.2" height="15.0" fill="rgb(206,4,1)" rx="2" ry="2" />
+<text  x="244.99" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::MobilityModel&gt;::Ptr (394,072 samples, 0.04%)</title><rect x="704.5" y="533" width="0.3" height="15.0" fill="rgb(213,37,8)" rx="2" ry="2" />
+<text  x="707.49" y="543.5" ></text>
+</g>
+<g >
+<title>std::operator== (208,615 samples, 0.02%)</title><rect x="86.8" y="469" width="0.2" height="15.0" fill="rgb(229,110,26)" rx="2" ry="2" />
+<text  x="89.83" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;0ul, ns3::MultiModelSpectrumChannel*, ns3::Ptr&lt;ns3::SpectrumValue&gt;, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::~_Tuple_impl (4,562,243 samples, 0.47%)</title><rect x="773.6" y="549" width="3.6" height="15.0" fill="rgb(215,47,11)" rx="2" ry="2" />
+<text  x="776.56" y="559.5" ></text>
+</g>
+<g >
+<title>std::_Bind&lt;void  (5,856,767 samples, 0.60%)</title><rect x="772.5" y="581" width="4.7" height="15.0" fill="rgb(253,221,52)" rx="2" ry="2" />
+<text  x="775.51" y="591.5" ></text>
+</g>
+<g >
+<title>ns3::LtePhy::GetRbgSize (162,303 samples, 0.02%)</title><rect x="383.4" y="549" width="0.1" height="15.0" fill="rgb(225,93,22)" rx="2" ry="2" />
+<text  x="386.39" y="559.5" ></text>
+</g>
+<g >
+<title>double* std::copy&lt;__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, double*&gt; (156,421 samples, 0.02%)</title><rect x="484.8" y="421" width="0.2" height="15.0" fill="rgb(246,192,46)" rx="2" ry="2" />
+<text  x="487.85" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultDeleter&lt;ns3::Packet&gt;::Delete (1,078,177 samples, 0.11%)</title><rect x="652.8" y="261" width="0.9" height="15.0" fill="rgb(231,123,29)" rx="2" ry="2" />
+<text  x="655.82" y="271.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, unsigned short, std::_Identity&lt;unsigned short&gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;unsigned short&gt; &gt;::find (1,768,438 samples, 0.18%)</title><rect x="394.9" y="533" width="1.4" height="15.0" fill="rgb(238,154,36)" rx="2" ry="2" />
+<text  x="397.91" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::Object::Object (375,599 samples, 0.04%)</title><rect x="69.7" y="421" width="0.3" height="15.0" fill="rgb(242,174,41)" rx="2" ry="2" />
+<text  x="72.70" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumModel const&gt;::Ptr (211,561 samples, 0.02%)</title><rect x="56.4" y="469" width="0.2" height="15.0" fill="rgb(232,125,30)" rx="2" ry="2" />
+<text  x="59.41" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::SpectrumSignalParameters, ns3::Empty, ns3::DefaultDeleter&lt;ns3::SpectrumSignalParameters&gt; &gt;::Unref (3,402,650 samples, 0.35%)</title><rect x="773.7" y="453" width="2.7" height="15.0" fill="rgb(254,229,54)" rx="2" ry="2" />
+<text  x="776.67" y="463.5" ></text>
+</g>
+<g >
+<title>void std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::_M_realloc_insert&lt;unsigned short&gt; (2,228,760 samples, 0.23%)</title><rect x="479.6" y="277" width="1.8" height="15.0" fill="rgb(217,56,13)" rx="2" ry="2" />
+<text  x="482.64" y="287.5" ></text>
+</g>
+<g >
+<title>std::tuple&lt;ns3::MultiModelSpectrumChannel*, ns3::Ptr&lt;ns3::SpectrumValue&gt;, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::~tuple (361,973 samples, 0.04%)</title><rect x="666.2" y="453" width="0.3" height="15.0" fill="rgb(218,61,14)" rx="2" ry="2" />
+<text  x="669.22" y="463.5" ></text>
+</g>
+<g >
+<title>[libc.so.6] (166,116 samples, 0.02%)</title><rect x="72.9" y="453" width="0.1" height="15.0" fill="rgb(223,84,20)" rx="2" ry="2" />
+<text  x="75.91" y="463.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::AttributeConstructionList::Item, std::allocator&lt;ns3::AttributeConstructionList::Item&gt; &gt;::~list (162,156 samples, 0.02%)</title><rect x="448.1" y="261" width="0.2" height="15.0" fill="rgb(238,154,37)" rx="2" ry="2" />
+<text  x="451.12" y="271.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt;::at (125,858 samples, 0.01%)</title><rect x="457.0" y="309" width="0.1" height="15.0" fill="rgb(208,14,3)" rx="2" ry="2" />
+<text  x="459.99" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::CqiListElement_s* std::__uninitialized_copy&lt;false&gt;::__uninit_copy&lt;std::move_iterator&lt;ns3::CqiListElement_s*&gt;, ns3::CqiListElement_s*&gt; (136,124 samples, 0.01%)</title><rect x="127.5" y="437" width="0.2" height="15.0" fill="rgb(239,156,37)" rx="2" ry="2" />
+<text  x="130.54" y="447.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;::erase (8,314,163 samples, 0.86%)</title><rect x="376.0" y="533" width="6.7" height="15.0" fill="rgb(248,200,48)" rx="2" ry="2" />
+<text  x="379.00" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt; &gt;::operator (316,802 samples, 0.03%)</title><rect x="675.1" y="485" width="0.3" height="15.0" fill="rgb(214,43,10)" rx="2" ry="2" />
+<text  x="678.11" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;int, std::allocator&lt;int&gt; &gt;::_Vector_impl_data::_M_swap_data (452,888 samples, 0.05%)</title><rect x="594.4" y="261" width="0.3" height="15.0" fill="rgb(206,6,1)" rx="2" ry="2" />
+<text  x="597.37" y="271.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;* std::__copy_move_a1&lt;true, std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;*, std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;*&gt; (183,796 samples, 0.02%)</title><rect x="110.5" y="453" width="0.2" height="15.0" fill="rgb(252,216,51)" rx="2" ry="2" />
+<text  x="113.53" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::LteSpectrumModelId, std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt;, std::_Select1st&lt;std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt; &gt;, std::less&lt;ns3::LteSpectrumModelId&gt;, std::allocator&lt;std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt; &gt; &gt;::find (964,559 samples, 0.10%)</title><rect x="297.9" y="453" width="0.8" height="15.0" fill="rgb(254,226,54)" rx="2" ry="2" />
+<text  x="300.94" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbRrc::SendSystemInformation (226,850 samples, 0.02%)</title><rect x="400.5" y="565" width="0.1" height="15.0" fill="rgb(251,215,51)" rx="2" ry="2" />
+<text  x="403.45" y="575.5" ></text>
+</g>
+<g >
+<title>void std::destroy_at&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; (190,528 samples, 0.02%)</title><rect x="506.4" y="437" width="0.1" height="15.0" fill="rgb(233,130,31)" rx="2" ry="2" />
+<text  x="509.38" y="447.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt;::deallocate (189,106 samples, 0.02%)</title><rect x="256.5" y="341" width="0.2" height="15.0" fill="rgb(246,192,45)" rx="2" ry="2" />
+<text  x="259.54" y="351.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;double*, double&gt; (150,554 samples, 0.02%)</title><rect x="303.8" y="421" width="0.1" height="15.0" fill="rgb(228,107,25)" rx="2" ry="2" />
+<text  x="306.80" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Function_handler&lt;void  (28,313,540 samples, 2.92%)</title><rect x="441.2" y="501" width="22.7" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="444.16" y="511.5" >s..</text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::max_size (126,132 samples, 0.01%)</title><rect x="572.9" y="293" width="0.1" height="15.0" fill="rgb(242,171,41)" rx="2" ry="2" />
+<text  x="575.88" y="303.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::_M_create_storage (192,396 samples, 0.02%)</title><rect x="474.0" y="181" width="0.2" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="477.01" y="191.5" ></text>
+</g>
+<g >
+<title>ns3::Angles::Angles (1,127,648 samples, 0.12%)</title><rect x="641.6" y="501" width="0.9" height="15.0" fill="rgb(254,226,54)" rx="2" ry="2" />
+<text  x="644.60" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Bind&lt;void  (283,539 samples, 0.03%)</title><rect x="87.4" y="453" width="0.2" height="15.0" fill="rgb(253,221,52)" rx="2" ry="2" />
+<text  x="90.36" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;::_M_valptr (157,744 samples, 0.02%)</title><rect x="244.1" y="405" width="0.1" height="15.0" fill="rgb(213,39,9)" rx="2" ry="2" />
+<text  x="247.10" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_Rb_tree (959,349 samples, 0.10%)</title><rect x="341.6" y="469" width="0.8" height="15.0" fill="rgb(252,219,52)" rx="2" ry="2" />
+<text  x="344.61" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Buffer::Data*, std::allocator&lt;ns3::Buffer::Data*&gt; &gt;::begin (350,086 samples, 0.04%)</title><rect x="32.0" y="325" width="0.3" height="15.0" fill="rgb(243,175,41)" rx="2" ry="2" />
+<text  x="35.04" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::PfFfMacScheduler::LcActivePerFlow (538,566 samples, 0.06%)</title><rect x="177.5" y="485" width="0.4" height="15.0" fill="rgb(219,67,16)" rx="2" ry="2" />
+<text  x="180.45" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned int const, ns3::RxSpectrumModelInfo&gt; &gt;::_Rb_tree_iterator (152,326 samples, 0.02%)</title><rect x="329.9" y="469" width="0.1" height="15.0" fill="rgb(243,175,42)" rx="2" ry="2" />
+<text  x="332.88" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Buffer::~Buffer (125,638 samples, 0.01%)</title><rect x="612.9" y="341" width="0.1" height="15.0" fill="rgb(240,162,38)" rx="2" ry="2" />
+<text  x="615.93" y="351.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::BuildRarListElement_s, std::allocator&lt;ns3::BuildRarListElement_s&gt; &gt;::vector (1,058,735 samples, 0.11%)</title><rect x="143.0" y="453" width="0.9" height="15.0" fill="rgb(224,87,20)" rx="2" ry="2" />
+<text  x="146.03" y="463.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt;::allocate (272,885 samples, 0.03%)</title><rect x="210.9" y="421" width="0.2" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="213.86" y="431.5" ></text>
+</g>
+<g >
+<title>void std::vector&lt;ns3::MacCeListElement_s, std::allocator&lt;ns3::MacCeListElement_s&gt; &gt;::_M_range_insert&lt;__gnu_cxx::__normal_iterator&lt;ns3::MacCeListElement_s*, std::vector&lt;ns3::MacCeListElement_s, std::allocator&lt;ns3::MacCeListElement_s&gt; &gt; &gt; &gt; (2,140,649 samples, 0.22%)</title><rect x="128.7" y="501" width="1.7" height="15.0" fill="rgb(225,92,22)" rx="2" ry="2" />
+<text  x="131.66" y="511.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;is_invocable_r_v&lt;void, ns3::Callback&lt;void, ns3::SpectrumValue const&amp;&gt;::Callback&lt;void  (34,406,741 samples, 3.55%)</title><rect x="577.7" y="453" width="27.7" height="15.0" fill="rgb(222,79,18)" rx="2" ry="2" />
+<text  x="580.69" y="463.5" >s..</text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;::Ptr (149,036 samples, 0.02%)</title><rect x="652.1" y="517" width="0.1" height="15.0" fill="rgb(250,208,49)" rx="2" ry="2" />
+<text  x="655.06" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Bind&lt;void  (590,966 samples, 0.06%)</title><rect x="638.5" y="469" width="0.5" height="15.0" fill="rgb(253,221,52)" rx="2" ry="2" />
+<text  x="641.52" y="479.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_List_impl::_List_impl (125,112 samples, 0.01%)</title><rect x="343.8" y="453" width="0.1" height="15.0" fill="rgb(244,183,43)" rx="2" ry="2" />
+<text  x="346.76" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::HarqStatus_e* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;ns3::DlInfoListElement_s::HarqStatus_e const*, std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt; &gt;, ns3::DlInfoListElement_s::HarqStatus_e*, ns3::DlInfoListElement_s::HarqStatus_e&gt; (234,294 samples, 0.02%)</title><rect x="510.0" y="501" width="0.2" height="15.0" fill="rgb(235,140,33)" rx="2" ry="2" />
+<text  x="512.98" y="511.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt;::_M_addr (155,895 samples, 0.02%)</title><rect x="224.4" y="389" width="0.1" height="15.0" fill="rgb(210,24,5)" rx="2" ry="2" />
+<text  x="227.35" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;::_M_valptr (179,937 samples, 0.02%)</title><rect x="385.6" y="453" width="0.1" height="15.0" fill="rgb(218,62,14)" rx="2" ry="2" />
+<text  x="388.57" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::vector (3,054,718 samples, 0.31%)</title><rect x="698.1" y="549" width="2.5" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="701.14" y="559.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt; &gt;::find (306,410 samples, 0.03%)</title><rect x="29.3" y="357" width="0.2" height="15.0" fill="rgb(225,93,22)" rx="2" ry="2" />
+<text  x="32.25" y="367.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned int, ns3::RxSpectrumModelInfo, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::RxSpectrumModelInfo&gt; &gt; &gt;::begin (566,414 samples, 0.06%)</title><rect x="657.5" y="517" width="0.4" height="15.0" fill="rgb(238,153,36)" rx="2" ry="2" />
+<text  x="660.49" y="527.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::MacCeListElement_s, std::allocator&lt;ns3::MacCeListElement_s&gt; &gt;::empty (341,339 samples, 0.04%)</title><rect x="264.3" y="517" width="0.3" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="267.34" y="527.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned short const, std::vector&lt;ns3::DlDciListElement_s, std::allocator&lt;ns3::DlDciListElement_s&gt; &gt; &gt; &gt;::_M_ptr (153,839 samples, 0.02%)</title><rect x="187.4" y="405" width="0.1" height="15.0" fill="rgb(228,109,26)" rx="2" ry="2" />
+<text  x="190.41" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::CqiListElement_s, std::allocator&lt;ns3::CqiListElement_s&gt; &gt;::_M_get_Tp_allocator (193,289 samples, 0.02%)</title><rect x="127.9" y="453" width="0.2" height="15.0" fill="rgb(223,85,20)" rx="2" ry="2" />
+<text  x="130.90" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::FfMacSchedSapUser::SchedDlConfigIndParameters::~SchedDlConfigIndParameters (1,899,935 samples, 0.20%)</title><rect x="145.1" y="469" width="1.5" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="148.10" y="479.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;std::_Rb_tree_iterator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, bool&gt; std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::emplace&lt;unsigned int const&amp;, ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp;&gt; (2,563,050 samples, 0.26%)</title><rect x="658.2" y="517" width="2.0" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="661.17" y="527.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;::base (157,048 samples, 0.02%)</title><rect x="647.4" y="357" width="0.2" height="15.0" fill="rgb(224,88,21)" rx="2" ry="2" />
+<text  x="650.43" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::SpectrumValue (534,535 samples, 0.06%)</title><rect x="646.3" y="421" width="0.5" height="15.0" fill="rgb(211,27,6)" rx="2" ry="2" />
+<text  x="649.32" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::Ptr&lt;ns3::Object&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Object&gt; &gt; &gt;::_M_get_Tp_allocator (199,501 samples, 0.02%)</title><rect x="549.8" y="197" width="0.2" height="15.0" fill="rgb(224,91,21)" rx="2" ry="2" />
+<text  x="552.80" y="207.5" ></text>
+</g>
+<g >
+<title>ns3::HarqProcessInfoElement_t* std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;ns3::HarqProcessInfoElement_t const*, std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt;, ns3::HarqProcessInfoElement_t*&gt; (185,369 samples, 0.02%)</title><rect x="117.4" y="389" width="0.1" height="15.0" fill="rgb(210,26,6)" rx="2" ry="2" />
+<text  x="120.37" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::CeBitmap_e* std::copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::CeBitmap_e const*, std::vector&lt;ns3::CeBitmap_e, std::allocator&lt;ns3::CeBitmap_e&gt; &gt; &gt;, ns3::CeBitmap_e*&gt; (376,947 samples, 0.04%)</title><rect x="203.9" y="341" width="0.3" height="15.0" fill="rgb(247,195,46)" rx="2" ry="2" />
+<text  x="206.93" y="351.5" ></text>
+</g>
+<g >
+<title>std::function&lt;void  (34,901,798 samples, 3.60%)</title><rect x="577.3" y="485" width="28.1" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="580.29" y="495.5" >s..</text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt; &gt;::_M_valptr (246,654 samples, 0.03%)</title><rect x="55.4" y="421" width="0.2" height="15.0" fill="rgb(222,81,19)" rx="2" ry="2" />
+<text  x="58.39" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::LteUePhy::ComputeAvgSinr (312,773 samples, 0.03%)</title><rect x="582.9" y="309" width="0.3" height="15.0" fill="rgb(223,84,20)" rx="2" ry="2" />
+<text  x="585.91" y="319.5" ></text>
+</g>
+<g >
+<title>std::_Function_handler&lt;void  (2,496,720 samples, 0.26%)</title><rect x="438.9" y="501" width="2.0" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="441.93" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::~SpectrumValue (812,960 samples, 0.08%)</title><rect x="772.9" y="453" width="0.7" height="15.0" fill="rgb(247,193,46)" rx="2" ry="2" />
+<text  x="775.90" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteSpectrumSignalParametersDataFrame&gt; ns3::Create&lt;ns3::LteSpectrumSignalParametersDataFrame, ns3::LteSpectrumSignalParametersDataFrame const&amp;&gt; (6,018,311 samples, 0.62%)</title><rect x="644.4" y="501" width="4.9" height="15.0" fill="rgb(226,98,23)" rx="2" ry="2" />
+<text  x="647.44" y="511.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned int, ns3::RxSpectrumModelInfo, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::RxSpectrumModelInfo&gt; &gt; &gt;::end (167,887 samples, 0.02%)</title><rect x="80.9" y="517" width="0.1" height="15.0" fill="rgb(219,64,15)" rx="2" ry="2" />
+<text  x="83.90" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::RxSpectrumModelInfo&gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::RxSpectrumModelInfo&gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::RxSpectrumModelInfo&gt; &gt; &gt;::begin (190,418 samples, 0.02%)</title><rect x="329.9" y="485" width="0.1" height="15.0" fill="rgb(226,97,23)" rx="2" ry="2" />
+<text  x="332.85" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;::operator (124,444 samples, 0.01%)</title><rect x="707.4" y="373" width="0.1" height="15.0" fill="rgb(245,186,44)" rx="2" ry="2" />
+<text  x="710.37" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; std::map&lt;ns3::Scheduler::EventKey, ns3::EventImpl*, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::emplace_hint&lt;std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (4,086,821 samples, 0.42%)</title><rect x="269.5" y="469" width="3.3" height="15.0" fill="rgb(253,224,53)" rx="2" ry="2" />
+<text  x="272.54" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt;::_M_valptr (320,518 samples, 0.03%)</title><rect x="566.1" y="165" width="0.2" height="15.0" fill="rgb(208,14,3)" rx="2" ry="2" />
+<text  x="569.09" y="175.5" ></text>
+</g>
+<g >
+<title>std::function&lt;void  (324,769 samples, 0.03%)</title><rect x="611.9" y="485" width="0.3" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="614.94" y="495.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;ns3::BuildDataListElement_s&gt; &gt;::construct&lt;ns3::BuildDataListElement_s, ns3::BuildDataListElement_s const&amp;&gt; (2,604,285 samples, 0.27%)</title><rect x="203.2" y="453" width="2.1" height="15.0" fill="rgb(226,98,23)" rx="2" ry="2" />
+<text  x="206.22" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbMac::DoSubframeIndication (314,249 samples, 0.03%)</title><rect x="11.2" y="533" width="0.2" height="15.0" fill="rgb(248,200,47)" rx="2" ry="2" />
+<text  x="14.17" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::UlDciListElement_s, std::allocator&lt;ns3::UlDciListElement_s&gt; &gt;::~_Vector_base (383,267 samples, 0.04%)</title><rect x="229.6" y="437" width="0.3" height="15.0" fill="rgb(244,182,43)" rx="2" ry="2" />
+<text  x="232.60" y="447.5" ></text>
+</g>
+<g >
+<title>atan2f32x (1,051,855 samples, 0.11%)</title><rect x="310.2" y="469" width="0.8" height="15.0" fill="rgb(240,164,39)" rx="2" ry="2" />
+<text  x="313.20" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::LteSpectrumModelId, std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt;, std::_Select1st&lt;std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt; &gt;, std::less&lt;ns3::LteSpectrumModelId&gt;, std::allocator&lt;std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt; &gt; &gt;::_S_key (426,201 samples, 0.04%)</title><rect x="675.8" y="437" width="0.4" height="15.0" fill="rgb(209,19,4)" rx="2" ry="2" />
+<text  x="678.83" y="447.5" ></text>
+</g>
+<g >
+<title> (160,344 samples, 0.02%)</title><rect x="431.8" y="309" width="0.1" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="434.79" y="319.5" ></text>
+</g>
+<g >
+<title>std::_List_const_iterator&lt;ns3::Callback&lt;void, unsigned short, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;::_List_const_iterator (155,345 samples, 0.02%)</title><rect x="481.9" y="293" width="0.1" height="15.0" fill="rgb(231,121,29)" rx="2" ry="2" />
+<text  x="484.90" y="303.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt; &gt;::_M_lower_bound (234,707 samples, 0.02%)</title><rect x="29.3" y="341" width="0.2" height="15.0" fill="rgb(245,188,44)" rx="2" ry="2" />
+<text  x="32.28" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue&gt;::~Ptr (152,896 samples, 0.02%)</title><rect x="314.9" y="437" width="0.2" height="15.0" fill="rgb(207,9,2)" rx="2" ry="2" />
+<text  x="317.94" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::Multiply (1,462,439 samples, 0.15%)</title><rect x="745.2" y="533" width="1.1" height="15.0" fill="rgb(215,46,11)" rx="2" ry="2" />
+<text  x="748.17" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::HarqProcessInfoElement_t* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::HarqProcessInfoElement_t const*, std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt;, ns3::HarqProcessInfoElement_t*&gt; (185,369 samples, 0.02%)</title><rect x="117.4" y="437" width="0.1" height="15.0" fill="rgb(233,131,31)" rx="2" ry="2" />
+<text  x="120.37" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::~PacketBurst (369,943 samples, 0.04%)</title><rect x="653.7" y="357" width="0.3" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="656.72" y="367.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt;::_M_addr (148,795 samples, 0.02%)</title><rect x="566.2" y="133" width="0.1" height="15.0" fill="rgb(218,62,14)" rx="2" ry="2" />
+<text  x="569.23" y="143.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_Vector_impl::_Vector_impl (270,409 samples, 0.03%)</title><rect x="413.4" y="469" width="0.2" height="15.0" fill="rgb(208,15,3)" rx="2" ry="2" />
+<text  x="416.36" y="479.5" ></text>
+</g>
+<g >
+<title>void std::destroy_at&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; (152,858 samples, 0.02%)</title><rect x="654.3" y="373" width="0.1" height="15.0" fill="rgb(216,52,12)" rx="2" ry="2" />
+<text  x="657.32" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::Callback&lt;void, ns3::Ptr&lt;ns3::Packet&gt; &gt;::Callback&lt;void  (185,775 samples, 0.02%)</title><rect x="422.2" y="469" width="0.1" height="15.0" fill="rgb(223,83,19)" rx="2" ry="2" />
+<text  x="425.16" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::UeSelected_s::~UeSelected_s (485,130 samples, 0.05%)</title><rect x="255.0" y="357" width="0.4" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="258.00" y="367.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt;::_Rb_tree_iterator (127,428 samples, 0.01%)</title><rect x="566.4" y="181" width="0.1" height="15.0" fill="rgb(218,61,14)" rx="2" ry="2" />
+<text  x="569.41" y="191.5" ></text>
+</g>
+<g >
+<title>ns3::PfFfMacScheduler::DoSchedDlTriggerReq (19,285,336 samples, 1.99%)</title><rect x="19.6" y="533" width="15.5" height="15.0" fill="rgb(214,45,10)" rx="2" ry="2" />
+<text  x="22.60" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::Object::DoDelete (1,989,572 samples, 0.21%)</title><rect x="773.9" y="341" width="1.6" height="15.0" fill="rgb(212,34,8)" rx="2" ry="2" />
+<text  x="776.86" y="351.5" ></text>
+</g>
+<g >
+<title> (124,716 samples, 0.01%)</title><rect x="728.6" y="485" width="0.1" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="731.63" y="495.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::copy&lt;__gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, unsigned char*&gt; (315,978 samples, 0.03%)</title><rect x="442.3" y="245" width="0.3" height="15.0" fill="rgb(241,168,40)" rx="2" ry="2" />
+<text  x="445.34" y="255.5" ></text>
+</g>
+<g >
+<title>std::function&lt;void  (20,931,339 samples, 2.16%)</title><rect x="421.9" y="517" width="16.8" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="424.87" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Packet&gt;::~Ptr (786,221 samples, 0.08%)</title><rect x="774.1" y="245" width="0.6" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="777.08" y="255.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt; &gt;::destroy&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; (555,448 samples, 0.06%)</title><rect x="233.2" y="373" width="0.4" height="15.0" fill="rgb(235,141,33)" rx="2" ry="2" />
+<text  x="236.17" y="383.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, ns3::pfsFlowPerf_t, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt; &gt; &gt;::begin (326,502 samples, 0.03%)</title><rect x="186.1" y="485" width="0.3" height="15.0" fill="rgb(215,46,11)" rx="2" ry="2" />
+<text  x="189.09" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;* std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_copy&lt;false, std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_Alloc_node&gt; (156,128 samples, 0.02%)</title><rect x="667.1" y="261" width="0.1" height="15.0" fill="rgb(251,212,50)" rx="2" ry="2" />
+<text  x="670.07" y="271.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;::operator++ (859,040 samples, 0.09%)</title><rect x="767.3" y="677" width="0.7" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="770.27" y="687.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteUePhy&gt;::Ptr (125,424 samples, 0.01%)</title><rect x="516.6" y="437" width="0.1" height="15.0" fill="rgb(241,169,40)" rx="2" ry="2" />
+<text  x="519.65" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::EventId ns3::Simulator::Schedule&lt;void  (348,760 samples, 0.04%)</title><rect x="715.4" y="517" width="0.3" height="15.0" fill="rgb(253,224,53)" rx="2" ry="2" />
+<text  x="718.38" y="527.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;::allocate (267,880 samples, 0.03%)</title><rect x="724.6" y="421" width="0.2" height="15.0" fill="rgb(254,229,54)" rx="2" ry="2" />
+<text  x="727.58" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::Divide (127,965 samples, 0.01%)</title><rect x="601.3" y="309" width="0.1" height="15.0" fill="rgb(239,160,38)" rx="2" ry="2" />
+<text  x="604.34" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::PacketTagList::CreateTagData (342,966 samples, 0.04%)</title><rect x="21.6" y="325" width="0.3" height="15.0" fill="rgb(233,130,31)" rx="2" ry="2" />
+<text  x="24.63" y="335.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;2ul, unsigned int&gt;::_Tuple_impl&lt;unsigned int&amp;&gt; (298,400 samples, 0.03%)</title><rect x="617.9" y="421" width="0.3" height="15.0" fill="rgb(217,58,13)" rx="2" ry="2" />
+<text  x="620.94" y="431.5" ></text>
+</g>
+<g >
+<title>[libm.so.6] (745,624 samples, 0.08%)</title><rect x="310.4" y="453" width="0.6" height="15.0" fill="rgb(208,16,4)" rx="2" ry="2" />
+<text  x="313.44" y="463.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;double&gt;::allocate (629,966 samples, 0.06%)</title><rect x="655.0" y="389" width="0.5" height="15.0" fill="rgb(248,201,48)" rx="2" ry="2" />
+<text  x="658.02" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Function_handler&lt;void  (27,749,977 samples, 2.86%)</title><rect x="441.6" y="421" width="22.3" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="444.62" y="431.5" >s..</text>
+</g>
+<g >
+<title>ns3::NoOpComponentCarrierManager::DoNotifyTxOpportunity (1,376,216 samples, 0.14%)</title><rect x="15.9" y="437" width="1.1" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="18.88" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s* std::__uninitialized_copy&lt;false&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::DlInfoListElement_s const*, std::vector&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt; &gt;, ns3::DlInfoListElement_s*&gt; (4,855,575 samples, 0.50%)</title><rect x="258.0" y="453" width="3.9" height="15.0" fill="rgb(225,93,22)" rx="2" ry="2" />
+<text  x="261.02" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::EnbMacMemberLteMacSapProvider&lt;ns3::LteEnbMac&gt;::ReportBufferStatus (682,380 samples, 0.07%)</title><rect x="17.9" y="357" width="0.5" height="15.0" fill="rgb(241,166,39)" rx="2" ry="2" />
+<text  x="20.88" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::HarqProcessInfoElement_t* std::__niter_base&lt;ns3::HarqProcessInfoElement_t*&gt; (232,255 samples, 0.02%)</title><rect x="513.5" y="453" width="0.2" height="15.0" fill="rgb(221,75,18)" rx="2" ry="2" />
+<text  x="516.47" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::_S_key (195,316 samples, 0.02%)</title><rect x="223.5" y="437" width="0.1" height="15.0" fill="rgb(210,26,6)" rx="2" ry="2" />
+<text  x="226.48" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::tbInfo_t::~tbInfo_t (389,508 samples, 0.04%)</title><rect x="387.6" y="517" width="0.3" height="15.0" fill="rgb(210,26,6)" rx="2" ry="2" />
+<text  x="390.63" y="527.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_clear (269,841 samples, 0.03%)</title><rect x="497.4" y="533" width="0.2" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="500.37" y="543.5" ></text>
+</g>
+<g >
+<title>__dynamic_cast (424,030 samples, 0.04%)</title><rect x="741.6" y="533" width="0.4" height="15.0" fill="rgb(227,102,24)" rx="2" ry="2" />
+<text  x="744.63" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteControlMessage&gt;::Ptr (275,374 samples, 0.03%)</title><rect x="149.6" y="325" width="0.2" height="15.0" fill="rgb(222,81,19)" rx="2" ry="2" />
+<text  x="152.56" y="335.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::UlDciListElement_s, std::allocator&lt;ns3::UlDciListElement_s&gt; &gt;::_Vector_base (314,772 samples, 0.03%)</title><rect x="228.3" y="437" width="0.3" height="15.0" fill="rgb(208,17,4)" rx="2" ry="2" />
+<text  x="231.35" y="447.5" ></text>
+</g>
+<g >
+<title>std::_List_const_iterator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt;::operator* (441,500 samples, 0.05%)</title><rect x="495.9" y="549" width="0.4" height="15.0" fill="rgb(212,34,8)" rx="2" ry="2" />
+<text  x="498.92" y="559.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy::CreateTxPowerSpectralDensity (7,834,108 samples, 0.81%)</title><rect x="296.8" y="517" width="6.3" height="15.0" fill="rgb(253,225,53)" rx="2" ry="2" />
+<text  x="299.79" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;int, std::allocator&lt;int&gt; &gt;::_M_allocate (127,251 samples, 0.01%)</title><rect x="573.4" y="341" width="0.1" height="15.0" fill="rgb(216,52,12)" rx="2" ry="2" />
+<text  x="576.38" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s&amp; std::forward&lt;ns3::DlInfoListElement_s&amp;&gt; (127,101 samples, 0.01%)</title><rect x="509.9" y="533" width="0.1" height="15.0" fill="rgb(234,136,32)" rx="2" ry="2" />
+<text  x="512.87" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::EventId::operator= (1,128,226 samples, 0.12%)</title><rect x="640.0" y="533" width="0.9" height="15.0" fill="rgb(241,165,39)" rx="2" ry="2" />
+<text  x="643.03" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::~PacketBurst (1,394,732 samples, 0.14%)</title><rect x="453.9" y="245" width="1.1" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="456.93" y="255.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::UlDciListElement_s, std::allocator&lt;ns3::UlDciListElement_s&gt; &gt;::_M_check_len (154,264 samples, 0.02%)</title><rect x="105.9" y="437" width="0.1" height="15.0" fill="rgb(223,84,20)" rx="2" ry="2" />
+<text  x="108.91" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt;::_M_allocate (156,029 samples, 0.02%)</title><rect x="228.9" y="405" width="0.1" height="15.0" fill="rgb(217,59,14)" rx="2" ry="2" />
+<text  x="231.92" y="415.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::FfMacSchedSapProvider::SchedUlCqiInfoReqParameters, std::allocator&lt;ns3::FfMacSchedSapProvider::SchedUlCqiInfoReqParameters&gt; &gt;::_M_erase_at_end (1,138,470 samples, 0.12%)</title><rect x="263.1" y="501" width="1.0" height="15.0" fill="rgb(237,149,35)" rx="2" ry="2" />
+<text  x="266.15" y="511.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::vector (126,859 samples, 0.01%)</title><rect x="530.1" y="309" width="0.1" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="533.10" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::operator- (126,699 samples, 0.01%)</title><rect x="66.4" y="501" width="0.1" height="15.0" fill="rgb(231,122,29)" rx="2" ry="2" />
+<text  x="69.43" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::AddPacket (2,887,463 samples, 0.30%)</title><rect x="361.6" y="517" width="2.4" height="15.0" fill="rgb(207,10,2)" rx="2" ry="2" />
+<text  x="364.65" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::Object::Check (191,566 samples, 0.02%)</title><rect x="374.7" y="485" width="0.2" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="377.73" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;::_Rb_tree_iterator (155,635 samples, 0.02%)</title><rect x="529.7" y="293" width="0.1" height="15.0" fill="rgb(228,110,26)" rx="2" ry="2" />
+<text  x="532.71" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::Object::Construct (185,707 samples, 0.02%)</title><rect x="119.4" y="485" width="0.2" height="15.0" fill="rgb(228,108,26)" rx="2" ry="2" />
+<text  x="122.44" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Packet&gt; ns3::Create&lt;ns3::Packet, unsigned int&amp;&gt; (358,332 samples, 0.04%)</title><rect x="16.7" y="389" width="0.3" height="15.0" fill="rgb(253,223,53)" rx="2" ry="2" />
+<text  x="19.70" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue&gt; ns3::Create&lt;ns3::SpectrumValue, ns3::Ptr&lt;ns3::SpectrumModel&gt;&amp;&gt; (4,463,471 samples, 0.46%)</title><rect x="298.7" y="485" width="3.6" height="15.0" fill="rgb(228,107,25)" rx="2" ry="2" />
+<text  x="301.72" y="495.5" ></text>
+</g>
+<g >
+<title>std::map&lt;ns3::LteFlowId_t, ns3::FfMacSchedSapProvider::SchedDlRlcBufferReqParameters, std::less&lt;ns3::LteFlowId_t&gt;, std::allocator&lt;std::pair&lt;ns3::LteFlowId_t const, ns3::FfMacSchedSapProvider::SchedDlRlcBufferReqParameters&gt; &gt; &gt;::begin (229,777 samples, 0.02%)</title><rect x="177.6" y="469" width="0.2" height="15.0" fill="rgb(233,131,31)" rx="2" ry="2" />
+<text  x="180.64" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_M_create_storage (182,249 samples, 0.02%)</title><rect x="126.4" y="357" width="0.2" height="15.0" fill="rgb(252,220,52)" rx="2" ry="2" />
+<text  x="129.41" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::DlCqiLteControlMessage::GetDlCqi (1,645,474 samples, 0.17%)</title><rect x="442.6" y="357" width="1.3" height="15.0" fill="rgb(231,122,29)" rx="2" ry="2" />
+<text  x="445.63" y="367.5" ></text>
+</g>
+<g >
+<title>unsigned short* std::__uninitialized_move_a&lt;unsigned short*, unsigned short*, std::allocator&lt;unsigned short&gt; &gt; (192,952 samples, 0.02%)</title><rect x="106.2" y="437" width="0.2" height="15.0" fill="rgb(232,126,30)" rx="2" ry="2" />
+<text  x="109.22" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt; &gt;::_M_lower_bound (876,343 samples, 0.09%)</title><rect x="650.3" y="469" width="0.7" height="15.0" fill="rgb(253,225,53)" rx="2" ry="2" />
+<text  x="653.31" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumModel const&gt;::~Ptr (357,858 samples, 0.04%)</title><rect x="743.9" y="549" width="0.2" height="15.0" fill="rgb(218,61,14)" rx="2" ry="2" />
+<text  x="746.86" y="559.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_Vector_base (161,229 samples, 0.02%)</title><rect x="403.3" y="469" width="0.1" height="15.0" fill="rgb(237,150,35)" rx="2" ry="2" />
+<text  x="406.26" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::_M_emplace_hint_unique&lt;std::piecewise_construct_t const&amp;, std::tuple&lt;unsigned short const&amp;&gt;, std::tuple&lt;&gt; &gt; (1,650,378 samples, 0.17%)</title><rect x="242.6" y="469" width="1.3" height="15.0" fill="rgb(213,37,8)" rx="2" ry="2" />
+<text  x="245.58" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::_M_erase (148,912 samples, 0.02%)</title><rect x="99.7" y="437" width="0.2" height="15.0" fill="rgb(213,41,9)" rx="2" ry="2" />
+<text  x="102.75" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt; ns3::CreateObject&lt;ns3::PacketBurst&gt; (9,676,681 samples, 1.00%)</title><rect x="536.5" y="325" width="7.8" height="15.0" fill="rgb(205,4,0)" rx="2" ry="2" />
+<text  x="539.48" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::LteRlcSm::DoNotifyTxOpportunity (19,770,990 samples, 2.04%)</title><rect x="551.6" y="277" width="15.9" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="554.55" y="287.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::reserve (334,959 samples, 0.03%)</title><rect x="573.3" y="357" width="0.3" height="15.0" fill="rgb(238,153,36)" rx="2" ry="2" />
+<text  x="576.28" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::MapScheduler::Insert (4,538,275 samples, 0.47%)</title><rect x="82.9" y="469" width="3.7" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="85.92" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::LteMiErrorModel::GetTbDecodificationStats (4,432,444 samples, 0.46%)</title><rect x="485.6" y="549" width="3.5" height="15.0" fill="rgb(209,19,4)" rx="2" ry="2" />
+<text  x="488.58" y="559.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned short const, double&gt; &gt;::_M_ptr (275,175 samples, 0.03%)</title><rect x="292.6" y="485" width="0.2" height="15.0" fill="rgb(210,27,6)" rx="2" ry="2" />
+<text  x="295.56" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter&gt;::Unref (1,777,558 samples, 0.18%)</title><rect x="652.6" y="421" width="1.4" height="15.0" fill="rgb(221,78,18)" rx="2" ry="2" />
+<text  x="655.59" y="431.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt; &gt;::begin (189,215 samples, 0.02%)</title><rect x="179.3" y="469" width="0.2" height="15.0" fill="rgb(249,206,49)" rx="2" ry="2" />
+<text  x="182.33" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::RlcPduListElement_s* std::__do_uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::RlcPduListElement_s const*, std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt;, ns3::RlcPduListElement_s*&gt; (938,823 samples, 0.10%)</title><rect x="211.9" y="357" width="0.7" height="15.0" fill="rgb(215,48,11)" rx="2" ry="2" />
+<text  x="214.87" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt; ns3::CompleteConstruct&lt;ns3::PacketBurst&gt; (6,605,149 samples, 0.68%)</title><rect x="539.0" y="309" width="5.3" height="15.0" fill="rgb(212,33,7)" rx="2" ry="2" />
+<text  x="541.95" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::SpectrumValue, ns3::Empty, ns3::DefaultDeleter&lt;ns3::SpectrumValue&gt; &gt;::Unref (345,669 samples, 0.04%)</title><rect x="674.0" y="501" width="0.3" height="15.0" fill="rgb(246,189,45)" rx="2" ry="2" />
+<text  x="677.04" y="511.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::vector (1,436,824 samples, 0.15%)</title><rect x="398.7" y="549" width="1.1" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="401.65" y="559.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_get_node (195,540 samples, 0.02%)</title><rect x="83.1" y="373" width="0.1" height="15.0" fill="rgb(221,75,17)" rx="2" ry="2" />
+<text  x="86.06" y="383.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::vector (348,336 samples, 0.04%)</title><rect x="316.1" y="389" width="0.3" height="15.0" fill="rgb(239,156,37)" rx="2" ry="2" />
+<text  x="319.13" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt; &gt;::end (232,913 samples, 0.02%)</title><rect x="508.7" y="533" width="0.1" height="15.0" fill="rgb(246,192,45)" rx="2" ry="2" />
+<text  x="511.65" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::DlInfoListElement_s (159,589 samples, 0.02%)</title><rect x="418.6" y="437" width="0.1" height="15.0" fill="rgb(231,119,28)" rx="2" ry="2" />
+<text  x="421.61" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::GetSpectrumModelUid (322,339 samples, 0.03%)</title><rect x="744.9" y="549" width="0.2" height="15.0" fill="rgb(254,228,54)" rx="2" ry="2" />
+<text  x="747.88" y="559.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::vector (485,111 samples, 0.05%)</title><rect x="527.2" y="181" width="0.4" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="530.22" y="191.5" ></text>
+</g>
+<g >
+<title>std::map&lt;ns3::Scheduler::EventKey, ns3::EventImpl*, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::key_comp (125,297 samples, 0.01%)</title><rect x="84.2" y="437" width="0.1" height="15.0" fill="rgb(213,39,9)" rx="2" ry="2" />
+<text  x="87.20" y="447.5" ></text>
+</g>
+<g >
+<title>unsigned long* std::copy&lt;unsigned long*, unsigned long*&gt; (538,409 samples, 0.06%)</title><rect x="199.6" y="421" width="0.4" height="15.0" fill="rgb(236,144,34)" rx="2" ry="2" />
+<text  x="202.61" y="431.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;bool, std::allocator&lt;bool&gt; &gt;::_M_insert_aux (300,220 samples, 0.03%)</title><rect x="196.6" y="469" width="0.2" height="15.0" fill="rgb(254,227,54)" rx="2" ry="2" />
+<text  x="199.57" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::AttributeConstructionList::AttributeConstructionList (965,115 samples, 0.10%)</title><rect x="371.2" y="501" width="0.8" height="15.0" fill="rgb(231,122,29)" rx="2" ry="2" />
+<text  x="374.20" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::FfMacSchedSapProvider::SchedDlRlcBufferReqParameters::operator= (416,467 samples, 0.04%)</title><rect x="17.9" y="293" width="0.4" height="15.0" fill="rgb(232,125,29)" rx="2" ry="2" />
+<text  x="20.95" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::UlInfoListElement_s* std::vector&lt;ns3::UlInfoListElement_s, std::allocator&lt;ns3::UlInfoListElement_s&gt; &gt;::_M_allocate_and_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::UlInfoListElement_s const*, std::vector&lt;ns3::UlInfoListElement_s, std::allocator&lt;ns3::UlInfoListElement_s&gt; &gt; &gt; &gt; (153,511 samples, 0.02%)</title><rect x="108.1" y="485" width="0.2" height="15.0" fill="rgb(239,157,37)" rx="2" ry="2" />
+<text  x="111.13" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt;::end (154,684 samples, 0.02%)</title><rect x="352.2" y="501" width="0.1" height="15.0" fill="rgb(218,63,15)" rx="2" ry="2" />
+<text  x="355.20" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::UlDciListElement_s, std::allocator&lt;ns3::UlDciListElement_s&gt; &gt;::_Vector_impl::_Vector_impl (156,685 samples, 0.02%)</title><rect x="228.5" y="421" width="0.1" height="15.0" fill="rgb(229,112,26)" rx="2" ry="2" />
+<text  x="231.47" y="431.5" ></text>
+</g>
+<g >
+<title>void  (154,843 samples, 0.02%)</title><rect x="283.0" y="485" width="0.1" height="15.0" fill="rgb(253,221,53)" rx="2" ry="2" />
+<text  x="286.00" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::SpectrumConverter&gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::SpectrumConverter&gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::SpectrumConverter&gt; &gt; &gt;::find (1,053,943 samples, 0.11%)</title><rect x="330.3" y="485" width="0.9" height="15.0" fill="rgb(243,177,42)" rx="2" ry="2" />
+<text  x="333.32" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::ByteTagList::Iterator::Next (503,981 samples, 0.05%)</title><rect x="436.2" y="229" width="0.4" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="439.18" y="239.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::map (996,229 samples, 0.10%)</title><rect x="341.6" y="485" width="0.8" height="15.0" fill="rgb(242,171,40)" rx="2" ry="2" />
+<text  x="344.58" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;int const, double&gt; &gt;* std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_M_copy&lt;false, std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_Alloc_node&gt; (418,686 samples, 0.04%)</title><rect x="60.0" y="437" width="0.4" height="15.0" fill="rgb(224,87,21)" rx="2" ry="2" />
+<text  x="63.04" y="447.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::allocate (659,007 samples, 0.07%)</title><rect x="270.3" y="373" width="0.6" height="15.0" fill="rgb(236,145,34)" rx="2" ry="2" />
+<text  x="273.32" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::HigherLayerSelected_s* std::__do_uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::HigherLayerSelected_s const*, std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt; &gt;, ns3::HigherLayerSelected_s*&gt; (711,878 samples, 0.07%)</title><rect x="125.0" y="309" width="0.6" height="15.0" fill="rgb(244,179,43)" rx="2" ry="2" />
+<text  x="127.98" y="319.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::allocate (152,219 samples, 0.02%)</title><rect x="83.1" y="325" width="0.1" height="15.0" fill="rgb(213,40,9)" rx="2" ry="2" />
+<text  x="86.09" y="335.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::DlDciListElement_s, std::allocator&lt;ns3::DlDciListElement_s&gt; &gt;::_M_range_check (399,849 samples, 0.04%)</title><rect x="205.4" y="469" width="0.3" height="15.0" fill="rgb(212,33,8)" rx="2" ry="2" />
+<text  x="208.41" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider::ReportBufferStatusParameters&gt; &gt;::_M_valptr (444,605 samples, 0.05%)</title><rect x="570.4" y="261" width="0.3" height="15.0" fill="rgb(228,107,25)" rx="2" ry="2" />
+<text  x="573.37" y="271.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt;::_Vector_base (412,677 samples, 0.04%)</title><rect x="583.9" y="245" width="0.3" height="15.0" fill="rgb(246,192,46)" rx="2" ry="2" />
+<text  x="586.86" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::Time::ToDouble (495,841 samples, 0.05%)</title><rect x="484.1" y="501" width="0.4" height="15.0" fill="rgb(249,204,48)" rx="2" ry="2" />
+<text  x="487.10" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;int, std::allocator&lt;int&gt; &gt;::_M_deallocate (169,673 samples, 0.02%)</title><rect x="575.2" y="325" width="0.1" height="15.0" fill="rgb(217,59,14)" rx="2" ry="2" />
+<text  x="578.16" y="335.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt;, std::allocator&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt; &gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt;, std::allocator&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt;, std::allocator&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt;::_M_lower_bound (802,707 samples, 0.08%)</title><rect x="188.2" y="453" width="0.6" height="15.0" fill="rgb(224,89,21)" rx="2" ry="2" />
+<text  x="191.20" y="463.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::list (543,168 samples, 0.06%)</title><rect x="463.9" y="533" width="0.5" height="15.0" fill="rgb(236,145,34)" rx="2" ry="2" />
+<text  x="466.94" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, std::map&lt;unsigned char, ns3::LteMacSapProvider*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, std::map&lt;unsigned char, ns3::LteMacSapProvider*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt; &gt; &gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, std::map&lt;unsigned char, ns3::LteMacSapProvider*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt; &gt; &gt; &gt; &gt;::end (166,213 samples, 0.02%)</title><rect x="552.9" y="197" width="0.1" height="15.0" fill="rgb(249,206,49)" rx="2" ry="2" />
+<text  x="555.88" y="207.5" ></text>
+</g>
+<g >
+<title>ns3::LteFfConverter::double2fpS11dot3 (159,428 samples, 0.02%)</title><rect x="478.3" y="309" width="0.1" height="15.0" fill="rgb(209,21,5)" rx="2" ry="2" />
+<text  x="481.31" y="319.5" ></text>
+</g>
+<g >
+<title>std::move_iterator&lt;ns3::MacCeListElement_s*&gt; std::__make_move_if_noexcept_iterator&lt;ns3::MacCeListElement_s, std::move_iterator&lt;ns3::MacCeListElement_s*&gt; &gt; (197,593 samples, 0.02%)</title><rect x="129.9" y="469" width="0.2" height="15.0" fill="rgb(218,61,14)" rx="2" ry="2" />
+<text  x="132.90" y="479.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;*, std::vector&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt; &gt; &gt; &gt; std::move&lt;__gnu_cxx::__normal_iterator&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;*, std::vector&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt; &gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;*, std::vector&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt; &gt; &gt; &gt; &gt; (292,100 samples, 0.03%)</title><rect x="110.5" y="485" width="0.2" height="15.0" fill="rgb(208,15,3)" rx="2" ry="2" />
+<text  x="113.47" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::LteRadioBearerTag::Serialize (128,769 samples, 0.01%)</title><rect x="562.1" y="165" width="0.1" height="15.0" fill="rgb(229,113,27)" rx="2" ry="2" />
+<text  x="565.06" y="175.5" ></text>
+</g>
+<g >
+<title>ns3::Time::Time (193,863 samples, 0.02%)</title><rect x="738.0" y="533" width="0.2" height="15.0" fill="rgb(226,100,24)" rx="2" ry="2" />
+<text  x="741.02" y="543.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::~list (154,473 samples, 0.02%)</title><rect x="673.6" y="485" width="0.2" height="15.0" fill="rgb(222,80,19)" rx="2" ry="2" />
+<text  x="676.63" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::ByteTagList::ByteTagList (352,331 samples, 0.04%)</title><rect x="359.8" y="485" width="0.3" height="15.0" fill="rgb(220,69,16)" rx="2" ry="2" />
+<text  x="362.80" y="495.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt;::_M_addr (279,763 samples, 0.03%)</title><rect x="22.5" y="261" width="0.3" height="15.0" fill="rgb(219,68,16)" rx="2" ry="2" />
+<text  x="25.53" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::LteRlcSm::DoNotifyTxOpportunity (314,249 samples, 0.03%)</title><rect x="11.2" y="405" width="0.2" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="14.17" y="415.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt;::allocate (272,885 samples, 0.03%)</title><rect x="210.9" y="405" width="0.2" height="15.0" fill="rgb(233,132,31)" rx="2" ry="2" />
+<text  x="213.86" y="415.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt;::deallocate (229,384 samples, 0.02%)</title><rect x="392.3" y="485" width="0.1" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="395.26" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::_M_default_initialize (648,464 samples, 0.07%)</title><rect x="56.9" y="453" width="0.6" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="59.94" y="463.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Callback&lt;void, ns3::Ptr&lt;ns3::Packet const&gt; &gt;, std::allocator&lt;ns3::Callback&lt;void, ns3::Ptr&lt;ns3::Packet const&gt; &gt; &gt; &gt;::begin (514,565 samples, 0.05%)</title><rect x="494.2" y="533" width="0.4" height="15.0" fill="rgb(214,44,10)" rx="2" ry="2" />
+<text  x="497.16" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;1ul, double const&amp;, double const&amp;&gt;::_Tuple_impl (646,830 samples, 0.07%)</title><rect x="749.5" y="469" width="0.5" height="15.0" fill="rgb(253,222,53)" rx="2" ry="2" />
+<text  x="752.47" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumSignalParametersDataFrame::~LteSpectrumSignalParametersDataFrame (2,421,676 samples, 0.25%)</title><rect x="652.5" y="469" width="1.9" height="15.0" fill="rgb(242,174,41)" rx="2" ry="2" />
+<text  x="655.49" y="479.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::HigherLayerSelected_s*&gt; (126,894 samples, 0.01%)</title><rect x="585.2" y="229" width="0.1" height="15.0" fill="rgb(251,211,50)" rx="2" ry="2" />
+<text  x="588.18" y="239.5" ></text>
+</g>
+<g >
+<title>ns3::MakeEvent&lt;void  (903,382 samples, 0.09%)</title><rect x="87.2" y="485" width="0.8" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="90.23" y="495.5" ></text>
+</g>
+<g >
+<title>void ns3::Callback&lt;void, std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt;::Callback&lt;void  (28,028,867 samples, 2.89%)</title><rect x="441.4" y="453" width="22.5" height="15.0" fill="rgb(234,135,32)" rx="2" ry="2" />
+<text  x="444.39" y="463.5" >v..</text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::_List_base (597,918 samples, 0.06%)</title><rect x="366.4" y="469" width="0.5" height="15.0" fill="rgb(250,210,50)" rx="2" ry="2" />
+<text  x="369.39" y="479.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::allocate (155,343 samples, 0.02%)</title><rect x="331.7" y="405" width="0.1" height="15.0" fill="rgb(225,92,22)" rx="2" ry="2" />
+<text  x="334.66" y="415.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_assign_dispatch&lt;std::_List_const_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; (1,071,339 samples, 0.11%)</title><rect x="672.9" y="517" width="0.9" height="15.0" fill="rgb(237,148,35)" rx="2" ry="2" />
+<text  x="675.93" y="527.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::operator= (603,213 samples, 0.06%)</title><rect x="357.2" y="421" width="0.4" height="15.0" fill="rgb(251,215,51)" rx="2" ry="2" />
+<text  x="360.16" y="431.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;::~pair (940,561 samples, 0.10%)</title><rect x="505.5" y="437" width="0.8" height="15.0" fill="rgb(213,38,9)" rx="2" ry="2" />
+<text  x="508.52" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::LteMacSapProvider::TransmitPduParameters::TransmitPduParameters (318,692 samples, 0.03%)</title><rect x="551.7" y="261" width="0.2" height="15.0" fill="rgb(237,147,35)" rx="2" ry="2" />
+<text  x="554.69" y="271.5" ></text>
+</g>
+<g >
+<title>double* std::copy&lt;__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, double*&gt; (542,531 samples, 0.06%)</title><rect x="324.9" y="405" width="0.4" height="15.0" fill="rgb(246,192,46)" rx="2" ry="2" />
+<text  x="327.89" y="415.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::_M_insert&lt;ns3::Ptr&lt;ns3::Packet&gt; const&amp;&gt; (2,075,129 samples, 0.21%)</title><rect x="362.3" y="485" width="1.7" height="15.0" fill="rgb(234,135,32)" rx="2" ry="2" />
+<text  x="365.30" y="495.5" ></text>
+</g>
+<g >
+<title>double* std::__copy_move_a1&lt;false, double const*, double*&gt; (231,822 samples, 0.02%)</title><rect x="719.4" y="421" width="0.2" height="15.0" fill="rgb(239,156,37)" rx="2" ry="2" />
+<text  x="722.41" y="431.5" ></text>
+</g>
+<g >
+<title>std::tuple&lt;ns3::MultiModelSpectrumChannel*, ns3::Ptr&lt;ns3::SpectrumValue&gt;, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::tuple&lt;ns3::MultiModelSpectrumChannel*&amp;, ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp;, double&amp;, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;&amp;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;&amp;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;&amp;, true, true&gt; (550,800 samples, 0.06%)</title><rect x="340.3" y="421" width="0.5" height="15.0" fill="rgb(209,20,4)" rx="2" ry="2" />
+<text  x="343.33" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt;::_M_valptr (349,350 samples, 0.04%)</title><rect x="224.2" y="421" width="0.3" height="15.0" fill="rgb(249,206,49)" rx="2" ry="2" />
+<text  x="227.20" y="431.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::operator[] (460,007 samples, 0.05%)</title><rect x="105.0" y="469" width="0.4" height="15.0" fill="rgb(219,66,15)" rx="2" ry="2" />
+<text  x="108.04" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::EnbMacMemberLteEnbPhySapUser::SubframeIndication (20,436,391 samples, 2.11%)</title><rect x="91.8" y="533" width="16.5" height="15.0" fill="rgb(252,216,51)" rx="2" ry="2" />
+<text  x="94.81" y="543.5" ></text>
+</g>
+<g >
+<title>std::function&lt;void  (916,117 samples, 0.09%)</title><rect x="725.8" y="405" width="0.8" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="728.82" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Function_base::_Base_manager&lt;ns3::Callback&lt;void, ns3::DlInfoListElement_s&gt;::Callback&lt;void  (339,825 samples, 0.04%)</title><rect x="418.1" y="485" width="0.3" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="421.09" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::int64x64_t::int64x64_t (1,306,529 samples, 0.13%)</title><rect x="683.2" y="501" width="1.0" height="15.0" fill="rgb(240,161,38)" rx="2" ry="2" />
+<text  x="686.16" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::TbId_t, std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::_Select1st&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::_M_lower_bound (306,362 samples, 0.03%)</title><rect x="386.9" y="501" width="0.2" height="15.0" fill="rgb(236,144,34)" rx="2" ry="2" />
+<text  x="389.90" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Head_base&lt;1ul, ns3::Ptr&lt;ns3::PacketBurst&gt;, false&gt;::_Head_base&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;&amp;&gt; (472,356 samples, 0.05%)</title><rect x="282.4" y="421" width="0.4" height="15.0" fill="rgb(245,186,44)" rx="2" ry="2" />
+<text  x="285.37" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::Callback&lt;void, ns3::DlInfoListElement_s&gt;::Callback&lt;void  (152,653 samples, 0.02%)</title><rect x="418.2" y="469" width="0.2" height="15.0" fill="rgb(253,222,53)" rx="2" ry="2" />
+<text  x="421.24" y="479.5" ></text>
+</g>
+<g >
+<title>unsigned short* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;unsigned short const*, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, unsigned short*, unsigned short&gt; (706,218 samples, 0.07%)</title><rect x="217.3" y="453" width="0.6" height="15.0" fill="rgb(217,56,13)" rx="2" ry="2" />
+<text  x="220.34" y="463.5" ></text>
+</g>
+<g >
+<title>std::operator== (166,583 samples, 0.02%)</title><rect x="571.7" y="325" width="0.2" height="15.0" fill="rgb(229,110,26)" rx="2" ry="2" />
+<text  x="574.74" y="335.5" ></text>
+</g>
+<g >
+<title>unsigned short* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;unsigned short const*, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, unsigned short*&gt; (851,489 samples, 0.09%)</title><rect x="474.7" y="261" width="0.7" height="15.0" fill="rgb(212,32,7)" rx="2" ry="2" />
+<text  x="477.70" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::IidManager::LookupInformation (309,380 samples, 0.03%)</title><rect x="449.2" y="213" width="0.3" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="452.20" y="223.5" ></text>
+</g>
+<g >
+<title>ns3::ConstantPositionMobilityModel::DoGetPosition (241,331 samples, 0.02%)</title><rect x="738.4" y="533" width="0.2" height="15.0" fill="rgb(212,32,7)" rx="2" ry="2" />
+<text  x="741.38" y="543.5" ></text>
+</g>
+<g >
+<title>double* std::__uninitialized_copy&lt;true&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, double*&gt; (891,656 samples, 0.09%)</title><rect x="238.3" y="245" width="0.7" height="15.0" fill="rgb(238,153,36)" rx="2" ry="2" />
+<text  x="241.31" y="255.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Ptr&lt;ns3::Object&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Object&gt; &gt; &gt;::~vector (425,381 samples, 0.04%)</title><rect x="165.1" y="341" width="0.3" height="15.0" fill="rgb(223,83,19)" rx="2" ry="2" />
+<text  x="168.11" y="351.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::_Vector_base (157,238 samples, 0.02%)</title><rect x="159.6" y="389" width="0.2" height="15.0" fill="rgb(219,65,15)" rx="2" ry="2" />
+<text  x="162.63" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::EnbMacMemberLteEnbPhySapUser::SubframeIndication (1,650,854 samples, 0.17%)</title><rect x="15.8" y="549" width="1.3" height="15.0" fill="rgb(252,216,51)" rx="2" ry="2" />
+<text  x="18.79" y="559.5" ></text>
+</g>
+<g >
+<title>std::_Head_base&lt;1ul, ns3::Ptr&lt;ns3::SpectrumValue const&gt;, false&gt;::~_Head_base (200,623 samples, 0.02%)</title><rect x="708.6" y="405" width="0.2" height="15.0" fill="rgb(242,171,41)" rx="2" ry="2" />
+<text  x="711.63" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteSpectrumSignalParametersDlCtrlFrame&gt;::~Ptr (455,774 samples, 0.05%)</title><rect x="736.2" y="533" width="0.4" height="15.0" fill="rgb(218,62,14)" rx="2" ry="2" />
+<text  x="739.20" y="543.5" ></text>
+</g>
+<g >
+<title>operator new (152,677 samples, 0.02%)</title><rect x="397.5" y="453" width="0.1" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="400.46" y="463.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;::_M_ptr (443,193 samples, 0.05%)</title><rect x="85.2" y="357" width="0.4" height="15.0" fill="rgb(219,66,15)" rx="2" ry="2" />
+<text  x="88.23" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue const&gt;::~Ptr (192,870 samples, 0.02%)</title><rect x="737.9" y="533" width="0.1" height="15.0" fill="rgb(240,165,39)" rx="2" ry="2" />
+<text  x="740.87" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteControlMessage&gt;::Acquire (316,058 samples, 0.03%)</title><rect x="160.4" y="437" width="0.3" height="15.0" fill="rgb(212,36,8)" rx="2" ry="2" />
+<text  x="163.40" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumPhy::GetRxSpectrumModel (536,054 samples, 0.06%)</title><rect x="704.8" y="549" width="0.4" height="15.0" fill="rgb(248,199,47)" rx="2" ry="2" />
+<text  x="707.81" y="559.5" ></text>
+</g>
+<g >
+<title>unsigned short* std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::_M_allocate_and_copy&lt;__gnu_cxx::__normal_iterator&lt;unsigned short const*, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; (745,310 samples, 0.08%)</title><rect x="217.3" y="469" width="0.6" height="15.0" fill="rgb(227,102,24)" rx="2" ry="2" />
+<text  x="220.31" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumPhy::SetTxPowerSpectralDensity (503,325 samples, 0.05%)</title><rect x="673.9" y="533" width="0.4" height="15.0" fill="rgb(208,14,3)" rx="2" ry="2" />
+<text  x="676.91" y="543.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::_M_check_len (187,285 samples, 0.02%)</title><rect x="121.9" y="501" width="0.2" height="15.0" fill="rgb(229,114,27)" rx="2" ry="2" />
+<text  x="124.94" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Time::FromDouble (185,818 samples, 0.02%)</title><rect x="121.0" y="517" width="0.1" height="15.0" fill="rgb(249,203,48)" rx="2" ry="2" />
+<text  x="123.96" y="527.5" ></text>
+</g>
+<g >
+<title> (153,603 samples, 0.02%)</title><rect x="671.1" y="517" width="0.1" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="674.08" y="527.5" ></text>
+</g>
+<g >
+<title>std::set&lt;unsigned short, std::less&lt;unsigned short&gt;, std::allocator&lt;unsigned short&gt; &gt;::find (1,768,438 samples, 0.18%)</title><rect x="394.9" y="549" width="1.4" height="15.0" fill="rgb(207,12,2)" rx="2" ry="2" />
+<text  x="397.91" y="559.5" ></text>
+</g>
+<g >
+<title>unsigned long* std::__niter_wrap&lt;unsigned long*&gt; (153,241 samples, 0.02%)</title><rect x="199.9" y="389" width="0.1" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="202.92" y="399.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; (377,397 samples, 0.04%)</title><rect x="317.3" y="373" width="0.3" height="15.0" fill="rgb(212,35,8)" rx="2" ry="2" />
+<text  x="320.32" y="383.5" ></text>
+</g>
+<g >
+<title>operator new (169,207 samples, 0.02%)</title><rect x="574.6" y="245" width="0.1" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="577.55" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumPhy&gt; ns3::Object::GetObject&lt;ns3::SpectrumPhy&gt; (1,036,584 samples, 0.11%)</title><rect x="671.2" y="533" width="0.8" height="15.0" fill="rgb(214,45,10)" rx="2" ry="2" />
+<text  x="674.21" y="543.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_initialize_dispatch&lt;std::_List_const_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; (645,888 samples, 0.07%)</title><rect x="318.8" y="389" width="0.5" height="15.0" fill="rgb(215,50,12)" rx="2" ry="2" />
+<text  x="321.81" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::FfMacSchedSapUser::SchedDlConfigIndParameters::~SchedDlConfigIndParameters (210,908 samples, 0.02%)</title><rect x="95.4" y="453" width="0.2" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="98.42" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultSimulatorImpl::Destroy (238,924 samples, 0.02%)</title><rect x="36.6" y="757" width="0.2" height="15.0" fill="rgb(234,135,32)" rx="2" ry="2" />
+<text  x="39.64" y="767.5" ></text>
+</g>
+<g >
+<title>ns3::BsrLteControlMessage::GetBsr (1,058,333 samples, 0.11%)</title><rect x="441.7" y="357" width="0.9" height="15.0" fill="rgb(226,98,23)" rx="2" ry="2" />
+<text  x="444.74" y="367.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_Vector_base (222,716 samples, 0.02%)</title><rect x="125.3" y="245" width="0.2" height="15.0" fill="rgb(205,2,0)" rx="2" ry="2" />
+<text  x="128.29" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbMac::DoReportBufferStatus (682,380 samples, 0.07%)</title><rect x="17.9" y="341" width="0.5" height="15.0" fill="rgb(222,80,19)" rx="2" ry="2" />
+<text  x="20.88" y="351.5" ></text>
+</g>
+<g >
+<title>void std::destroy_at&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; (359,626 samples, 0.04%)</title><rect x="382.0" y="485" width="0.3" height="15.0" fill="rgb(213,38,9)" rx="2" ry="2" />
+<text  x="385.02" y="495.5" ></text>
+</g>
+<g >
+<title>double* std::copy&lt;__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, double*&gt; (291,489 samples, 0.03%)</title><rect x="606.7" y="421" width="0.2" height="15.0" fill="rgb(246,192,46)" rx="2" ry="2" />
+<text  x="609.66" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt; ns3::CreateObject&lt;ns3::PacketBurst&gt; (2,205,090 samples, 0.23%)</title><rect x="33.3" y="485" width="1.8" height="15.0" fill="rgb(205,4,0)" rx="2" ry="2" />
+<text  x="36.34" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::UlDciLteControlMessage&gt;::~Ptr (167,122 samples, 0.02%)</title><rect x="534.9" y="357" width="0.1" height="15.0" fill="rgb(254,229,54)" rx="2" ry="2" />
+<text  x="537.87" y="367.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_M_allocate (499,536 samples, 0.05%)</title><rect x="692.7" y="453" width="0.4" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="695.73" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_S_key (128,223 samples, 0.01%)</title><rect x="82.2" y="453" width="0.1" height="15.0" fill="rgb(244,182,43)" rx="2" ry="2" />
+<text  x="85.22" y="463.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::__uninitialized_copy&lt;true&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, unsigned char*&gt; (150,938 samples, 0.02%)</title><rect x="443.8" y="277" width="0.1" height="15.0" fill="rgb(233,129,30)" rx="2" ry="2" />
+<text  x="446.83" y="287.5" ></text>
+</g>
+<g >
+<title>double* std::__uninitialized_default_n_a&lt;double*, unsigned long, double&gt; (538,098 samples, 0.06%)</title><rect x="677.5" y="437" width="0.5" height="15.0" fill="rgb(248,199,47)" rx="2" ry="2" />
+<text  x="680.53" y="447.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, unsigned char*&gt; (242,076 samples, 0.02%)</title><rect x="214.4" y="389" width="0.2" height="15.0" fill="rgb(254,229,54)" rx="2" ry="2" />
+<text  x="217.42" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::EventId::operator= (656,172 samples, 0.07%)</title><rect x="64.4" y="533" width="0.5" height="15.0" fill="rgb(241,165,39)" rx="2" ry="2" />
+<text  x="67.40" y="543.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::CqiListElement_s, std::allocator&lt;ns3::CqiListElement_s&gt; &gt;::erase (1,047,417 samples, 0.11%)</title><rect x="254.9" y="517" width="0.8" height="15.0" fill="rgb(231,123,29)" rx="2" ry="2" />
+<text  x="257.88" y="527.5" ></text>
+</g>
+<g >
+<title> (142,163 samples, 0.01%)</title><rect x="689.1" y="485" width="0.1" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="692.06" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;* std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_create_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; const&amp;&gt; (200,295 samples, 0.02%)</title><rect x="88.2" y="389" width="0.2" height="15.0" fill="rgb(227,104,24)" rx="2" ry="2" />
+<text  x="91.22" y="399.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::vector (234,615 samples, 0.02%)</title><rect x="129.3" y="373" width="0.2" height="15.0" fill="rgb(206,9,2)" rx="2" ry="2" />
+<text  x="132.34" y="383.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;unsigned char*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; std::copy&lt;__gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;unsigned char*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt; (125,103 samples, 0.01%)</title><rect x="585.5" y="213" width="0.1" height="15.0" fill="rgb(230,115,27)" rx="2" ry="2" />
+<text  x="588.46" y="223.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::operator= (348,625 samples, 0.04%)</title><rect x="134.5" y="453" width="0.3" height="15.0" fill="rgb(211,28,6)" rx="2" ry="2" />
+<text  x="137.55" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_emplace_hint_unique&lt;unsigned int const&amp;, ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp;&gt; (1,502,471 samples, 0.15%)</title><rect x="658.4" y="485" width="1.2" height="15.0" fill="rgb(226,100,24)" rx="2" ry="2" />
+<text  x="661.36" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Callback&lt;void, ns3::SpectrumValue const&amp;&gt;::operator (35,103,998 samples, 3.62%)</title><rect x="577.1" y="517" width="28.3" height="15.0" fill="rgb(215,50,12)" rx="2" ry="2" />
+<text  x="580.13" y="527.5" >n..</text>
+</g>
+<g >
+<title>void std::_Destroy_aux&lt;false&gt;::__destroy&lt;ns3::Ptr&lt;ns3::Object&gt;*&gt; (124,479 samples, 0.01%)</title><rect x="77.6" y="277" width="0.1" height="15.0" fill="rgb(208,15,3)" rx="2" ry="2" />
+<text  x="80.60" y="287.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::operator[] (339,246 samples, 0.03%)</title><rect x="99.5" y="469" width="0.2" height="15.0" fill="rgb(219,66,15)" rx="2" ry="2" />
+<text  x="102.47" y="479.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::copy&lt;__gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, unsigned char*&gt; (388,698 samples, 0.04%)</title><rect x="214.3" y="405" width="0.3" height="15.0" fill="rgb(241,168,40)" rx="2" ry="2" />
+<text  x="217.30" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::MultiModelSpectrumChannel::StartTx (29,239,922 samples, 3.02%)</title><rect x="65.0" y="533" width="23.5" height="15.0" fill="rgb(227,102,24)" rx="2" ry="2" />
+<text  x="67.96" y="543.5" >n..</text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::EventImpl&gt;::operator= (817,259 samples, 0.08%)</title><rect x="307.9" y="501" width="0.7" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="310.92" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::~SpectrumValue (158,082 samples, 0.02%)</title><rect x="326.0" y="453" width="0.1" height="15.0" fill="rgb(247,193,46)" rx="2" ry="2" />
+<text  x="329.01" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_S_minimum (352,600 samples, 0.04%)</title><rect x="237.1" y="421" width="0.3" height="15.0" fill="rgb(205,3,0)" rx="2" ry="2" />
+<text  x="240.07" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::Angles::NormalizeAngles (303,214 samples, 0.03%)</title><rect x="642.1" y="485" width="0.3" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="645.14" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_const_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;::_M_const_cast (162,110 samples, 0.02%)</title><rect x="662.3" y="389" width="0.1" height="15.0" fill="rgb(234,136,32)" rx="2" ry="2" />
+<text  x="665.32" y="399.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy_aux&lt;false&gt;::__destroy&lt;ns3::DlInfoListElement_s*&gt; (1,227,211 samples, 0.13%)</title><rect x="256.0" y="453" width="0.9" height="15.0" fill="rgb(225,93,22)" rx="2" ry="2" />
+<text  x="258.95" y="463.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;::_M_get_Node_allocator (237,959 samples, 0.02%)</title><rect x="393.3" y="501" width="0.2" height="15.0" fill="rgb(227,102,24)" rx="2" ry="2" />
+<text  x="396.28" y="511.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt;::at (195,616 samples, 0.02%)</title><rect x="208.2" y="485" width="0.1" height="15.0" fill="rgb(241,166,39)" rx="2" ry="2" />
+<text  x="211.16" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;int const, double&gt; &gt;* std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_Alloc_node::operator (540,906 samples, 0.06%)</title><rect x="59.4" y="421" width="0.5" height="15.0" fill="rgb(210,25,6)" rx="2" ry="2" />
+<text  x="62.44" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::LteRadioBearerTag::Serialize (424,109 samples, 0.04%)</title><rect x="21.3" y="325" width="0.3" height="15.0" fill="rgb(229,113,27)" rx="2" ry="2" />
+<text  x="24.29" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::DlDciLteControlMessage::DlDciLteControlMessage (1,384,545 samples, 0.14%)</title><rect x="158.9" y="437" width="1.2" height="15.0" fill="rgb(226,98,23)" rx="2" ry="2" />
+<text  x="161.95" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy::DoSendLteControlMessage (498,633 samples, 0.05%)</title><rect x="95.8" y="421" width="0.4" height="15.0" fill="rgb(244,180,43)" rx="2" ry="2" />
+<text  x="98.80" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt; &gt;::_M_lower_bound (393,630 samples, 0.04%)</title><rect x="24.0" y="357" width="0.3" height="15.0" fill="rgb(245,188,44)" rx="2" ry="2" />
+<text  x="26.97" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::CeBitmap_e* std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;ns3::CeBitmap_e const*, std::vector&lt;ns3::CeBitmap_e, std::allocator&lt;ns3::CeBitmap_e&gt; &gt; &gt;, ns3::CeBitmap_e*&gt; (340,009 samples, 0.04%)</title><rect x="204.0" y="325" width="0.2" height="15.0" fill="rgb(210,26,6)" rx="2" ry="2" />
+<text  x="206.96" y="335.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_M_create_storage (163,185 samples, 0.02%)</title><rect x="56.8" y="437" width="0.1" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="59.81" y="447.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;*&gt; (240,649 samples, 0.02%)</title><rect x="146.1" y="309" width="0.2" height="15.0" fill="rgb(213,37,8)" rx="2" ry="2" />
+<text  x="149.08" y="319.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;::vector (252,039 samples, 0.03%)</title><rect x="101.6" y="405" width="0.2" height="15.0" fill="rgb(246,192,45)" rx="2" ry="2" />
+<text  x="104.59" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::MakeEvent&lt;void  (5,510,444 samples, 0.57%)</title><rect x="708.1" y="485" width="4.4" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="711.11" y="495.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::CqiListElement_s*, ns3::CqiListElement_s&gt; (970,280 samples, 0.10%)</title><rect x="254.9" y="469" width="0.8" height="15.0" fill="rgb(225,92,22)" rx="2" ry="2" />
+<text  x="257.94" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::LteRlcSm::DoNotifyTxOpportunity (1,376,216 samples, 0.14%)</title><rect x="15.9" y="405" width="1.1" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="18.88" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt;::operator= (158,753 samples, 0.02%)</title><rect x="17.0" y="453" width="0.1" height="15.0" fill="rgb(219,65,15)" rx="2" ry="2" />
+<text  x="19.99" y="463.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy_aux&lt;false&gt;::__destroy&lt;ns3::UlInfoListElement_s*&gt; (228,697 samples, 0.02%)</title><rect x="265.5" y="453" width="0.2" height="15.0" fill="rgb(215,48,11)" rx="2" ry="2" />
+<text  x="268.51" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt; &gt;::end (156,019 samples, 0.02%)</title><rect x="12.2" y="341" width="0.2" height="15.0" fill="rgb(210,23,5)" rx="2" ry="2" />
+<text  x="15.24" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::Tag::Tag (166,039 samples, 0.02%)</title><rect x="561.1" y="181" width="0.1" height="15.0" fill="rgb(212,35,8)" rx="2" ry="2" />
+<text  x="564.10" y="191.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;::operator* (200,943 samples, 0.02%)</title><rect x="221.0" y="485" width="0.1" height="15.0" fill="rgb(252,218,52)" rx="2" ry="2" />
+<text  x="223.96" y="495.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, unsigned char, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, unsigned char&gt; &gt; &gt;::find (887,061 samples, 0.09%)</title><rect x="176.7" y="469" width="0.7" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="179.72" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Packet&gt;::~Ptr (985,329 samples, 0.10%)</title><rect x="75.9" y="293" width="0.8" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="78.91" y="303.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::lower_bound (455,631 samples, 0.05%)</title><rect x="192.6" y="453" width="0.4" height="15.0" fill="rgb(251,211,50)" rx="2" ry="2" />
+<text  x="195.63" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt; &gt;::_M_end (207,877 samples, 0.02%)</title><rect x="565.8" y="197" width="0.2" height="15.0" fill="rgb(235,139,33)" rx="2" ry="2" />
+<text  x="568.79" y="207.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteAmc&gt;::operator (193,493 samples, 0.02%)</title><rect x="182.7" y="485" width="0.2" height="15.0" fill="rgb(243,178,42)" rx="2" ry="2" />
+<text  x="185.70" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::HigherLayerSelected_s* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::HigherLayerSelected_s const*, std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt; &gt;, ns3::HigherLayerSelected_s*&gt; (821,377 samples, 0.08%)</title><rect x="124.9" y="341" width="0.7" height="15.0" fill="rgb(230,118,28)" rx="2" ry="2" />
+<text  x="127.90" y="351.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_emplace_hint_unique&lt;std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (3,653,483 samples, 0.38%)</title><rect x="269.9" y="453" width="2.9" height="15.0" fill="rgb(248,201,48)" rx="2" ry="2" />
+<text  x="272.89" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumSignalParameters::~SpectrumSignalParameters (189,718 samples, 0.02%)</title><rect x="324.2" y="421" width="0.1" height="15.0" fill="rgb(205,2,0)" rx="2" ry="2" />
+<text  x="327.15" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::TypeId::GetAttributeN (1,058,658 samples, 0.11%)</title><rect x="631.1" y="469" width="0.9" height="15.0" fill="rgb(225,95,22)" rx="2" ry="2" />
+<text  x="634.15" y="479.5" ></text>
+</g>
+<g >
+<title>std::__invoke_result&lt;void  (22,443,594 samples, 2.31%)</title><rect x="17.2" y="629" width="18.0" height="15.0" fill="rgb(240,163,39)" rx="2" ry="2" />
+<text  x="20.17" y="639.5" ></text>
+</g>
+<g >
+<title> (1,100,918 samples, 0.11%)</title><rect x="759.3" y="693" width="0.9" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="762.32" y="703.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;1ul, ns3::Ptr&lt;ns3::SpectrumValue&gt;, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::_Tuple_impl&lt;ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp;, double&amp;, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;&amp;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;&amp;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;&amp;, void&gt; (635,410 samples, 0.07%)</title><rect x="666.8" y="405" width="0.5" height="15.0" fill="rgb(237,151,36)" rx="2" ry="2" />
+<text  x="669.75" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::Ptr&lt;ns3::Object&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Object&gt; &gt; &gt;::_Vector_base (154,166 samples, 0.02%)</title><rect x="629.7" y="469" width="0.1" height="15.0" fill="rgb(235,141,33)" rx="2" ry="2" />
+<text  x="632.66" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::LteMiErrorModel::Mib (2,166,389 samples, 0.22%)</title><rect x="487.1" y="533" width="1.8" height="15.0" fill="rgb(222,78,18)" rx="2" ry="2" />
+<text  x="490.14" y="543.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;::clear (551,743 samples, 0.06%)</title><rect x="290.8" y="389" width="0.5" height="15.0" fill="rgb(246,192,46)" rx="2" ry="2" />
+<text  x="293.83" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt; ns3::CreateObject&lt;ns3::PacketBurst&gt; (267,173 samples, 0.03%)</title><rect x="19.4" y="469" width="0.2" height="15.0" fill="rgb(205,4,0)" rx="2" ry="2" />
+<text  x="22.36" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::CqiListElement_s::~CqiListElement_s (532,379 samples, 0.05%)</title><rect x="461.1" y="309" width="0.4" height="15.0" fill="rgb(225,92,22)" rx="2" ry="2" />
+<text  x="464.07" y="319.5" ></text>
+</g>
+<g >
+<title>std::_Head_base&lt;1ul, ns3::Ptr&lt;ns3::SpectrumValue const&gt;, false&gt;::~_Head_base (896,241 samples, 0.09%)</title><rect x="772.8" y="517" width="0.8" height="15.0" fill="rgb(242,171,41)" rx="2" ry="2" />
+<text  x="775.83" y="527.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt;::allocate (185,863 samples, 0.02%)</title><rect x="261.0" y="325" width="0.2" height="15.0" fill="rgb(245,184,44)" rx="2" ry="2" />
+<text  x="264.02" y="335.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned char, ns3::LteMacSapProvider::ReportBufferStatusParameters, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider::ReportBufferStatusParameters&gt; &gt; &gt;::empty (342,978 samples, 0.04%)</title><rect x="690.2" y="501" width="0.3" height="15.0" fill="rgb(221,77,18)" rx="2" ry="2" />
+<text  x="693.19" y="511.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::DlInfoListElement_s::HarqStatus_e const*, std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt; &gt; std::__miter_base&lt;__gnu_cxx::__normal_iterator&lt;ns3::DlInfoListElement_s::HarqStatus_e const*, std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt; &gt; &gt; (190,102 samples, 0.02%)</title><rect x="259.4" y="309" width="0.1" height="15.0" fill="rgb(251,212,50)" rx="2" ry="2" />
+<text  x="262.37" y="319.5" ></text>
+</g>
+<g >
+<title>malloc (190,161 samples, 0.02%)</title><rect x="212.9" y="293" width="0.1" height="15.0" fill="rgb(230,119,28)" rx="2" ry="2" />
+<text  x="215.85" y="303.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;*, std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; std::__copy_move_a&lt;true, __gnu_cxx::__normal_iterator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;*, std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;*, std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; (2,253,875 samples, 0.23%)</title><rect x="634.1" y="485" width="1.8" height="15.0" fill="rgb(233,131,31)" rx="2" ry="2" />
+<text  x="637.11" y="495.5" ></text>
+</g>
+<g >
+<title> (168,179 samples, 0.02%)</title><rect x="731.6" y="501" width="0.1" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="734.56" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::PacketTagList::RemoveAll (323,410 samples, 0.03%)</title><rect x="453.6" y="85" width="0.2" height="15.0" fill="rgb(226,99,23)" rx="2" ry="2" />
+<text  x="456.57" y="95.5" ></text>
+</g>
+<g >
+<title>std::__detail::_List_node_header::_M_move_nodes (181,701 samples, 0.02%)</title><rect x="357.3" y="373" width="0.1" height="15.0" fill="rgb(241,169,40)" rx="2" ry="2" />
+<text  x="360.29" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_key_compare&lt;std::less&lt;unsigned short&gt; &gt;::_Rb_tree_key_compare (269,610 samples, 0.03%)</title><rect x="190.4" y="437" width="0.2" height="15.0" fill="rgb(217,58,13)" rx="2" ry="2" />
+<text  x="193.42" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_Vector_base (863,125 samples, 0.09%)</title><rect x="654.9" y="469" width="0.7" height="15.0" fill="rgb(237,150,35)" rx="2" ry="2" />
+<text  x="657.92" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Head_base&lt;1ul, ns3::Ptr&lt;ns3::SpectrumValue const&gt;, false&gt;::_Head_base&lt;ns3::Ptr&lt;ns3::SpectrumValue const&gt;&amp;&gt; (302,346 samples, 0.03%)</title><rect x="709.6" y="389" width="0.3" height="15.0" fill="rgb(215,49,11)" rx="2" ry="2" />
+<text  x="712.65" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::tbInfo_t::~tbInfo_t (151,450 samples, 0.02%)</title><rect x="506.4" y="405" width="0.1" height="15.0" fill="rgb(210,26,6)" rx="2" ry="2" />
+<text  x="509.41" y="415.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_initialize_dispatch&lt;std::_List_const_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; (225,934 samples, 0.02%)</title><rect x="648.8" y="405" width="0.2" height="15.0" fill="rgb(215,50,12)" rx="2" ry="2" />
+<text  x="651.85" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_put_node (1,157,136 samples, 0.12%)</title><rect x="764.1" y="645" width="0.9" height="15.0" fill="rgb(209,22,5)" rx="2" ry="2" />
+<text  x="767.11" y="655.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;* std::__copy_move&lt;true, false, std::random_access_iterator_tag&gt;::__copy_m&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;*, std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;*&gt; (1,471,329 samples, 0.15%)</title><rect x="290.2" y="437" width="1.2" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="293.18" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::HarqProcessInfoElement_t* std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;ns3::HarqProcessInfoElement_t const*, std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt;, ns3::HarqProcessInfoElement_t*&gt; (1,298,579 samples, 0.13%)</title><rect x="352.9" y="405" width="1.1" height="15.0" fill="rgb(210,26,6)" rx="2" ry="2" />
+<text  x="355.95" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy::StartSubFrame (2,983,151 samples, 0.31%)</title><rect x="17.2" y="581" width="2.4" height="15.0" fill="rgb(234,136,32)" rx="2" ry="2" />
+<text  x="20.17" y="591.5" ></text>
+</g>
+<g >
+<title>std::__detail::_List_node_header::_M_move_nodes (375,374 samples, 0.04%)</title><rect x="621.9" y="373" width="0.3" height="15.0" fill="rgb(241,169,40)" rx="2" ry="2" />
+<text  x="624.92" y="383.5" ></text>
+</g>
+<g >
+<title>void std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_construct_node&lt;unsigned int const&amp;, ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp;&gt; (576,441 samples, 0.06%)</title><rect x="658.7" y="437" width="0.5" height="15.0" fill="rgb(234,135,32)" rx="2" ry="2" />
+<text  x="661.70" y="447.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Callback&lt;void, ns3::Ptr&lt;ns3::PacketBurst const&gt; &gt;, std::allocator&lt;ns3::Callback&lt;void, ns3::Ptr&lt;ns3::PacketBurst const&gt; &gt; &gt; &gt;::begin (202,714 samples, 0.02%)</title><rect x="613.4" y="533" width="0.1" height="15.0" fill="rgb(243,175,41)" rx="2" ry="2" />
+<text  x="616.38" y="543.5" ></text>
+</g>
+<g >
+<title>unsigned int const&amp; std::__pair_get&lt;0ul&gt;::__move_get&lt;unsigned int const&amp;, ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp;&gt; (150,244 samples, 0.02%)</title><rect x="660.0" y="485" width="0.1" height="15.0" fill="rgb(248,201,48)" rx="2" ry="2" />
+<text  x="662.99" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt;::vector (152,454 samples, 0.02%)</title><rect x="456.7" y="245" width="0.1" height="15.0" fill="rgb(210,23,5)" rx="2" ry="2" />
+<text  x="459.65" y="255.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt;::operator= (427,945 samples, 0.04%)</title><rect x="134.8" y="469" width="0.4" height="15.0" fill="rgb(252,217,52)" rx="2" ry="2" />
+<text  x="137.83" y="479.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned short const, unsigned char&gt; &gt;::_M_addr (164,052 samples, 0.02%)</title><rect x="185.0" y="437" width="0.2" height="15.0" fill="rgb(224,88,21)" rx="2" ry="2" />
+<text  x="188.04" y="447.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt; &gt;::construct&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (363,009 samples, 0.04%)</title><rect x="83.2" y="357" width="0.3" height="15.0" fill="rgb(231,122,29)" rx="2" ry="2" />
+<text  x="86.25" y="367.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;ns3::LteFlowId_t const, ns3::FfMacSchedSapProvider::SchedDlRlcBufferReqParameters&gt; &gt;::_M_valptr (306,649 samples, 0.03%)</title><rect x="181.9" y="405" width="0.2" height="15.0" fill="rgb(222,81,19)" rx="2" ry="2" />
+<text  x="184.90" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbMac::DoSchedDlConfigInd (33,880,851 samples, 3.49%)</title><rect x="146.6" y="469" width="27.3" height="15.0" fill="rgb(205,3,0)" rx="2" ry="2" />
+<text  x="149.63" y="479.5" >n..</text>
+</g>
+<g >
+<title>ns3::LteSpectrumPhy::GetMobility (284,534 samples, 0.03%)</title><rect x="67.0" y="517" width="0.3" height="15.0" fill="rgb(228,107,25)" rx="2" ry="2" />
+<text  x="70.04" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Bit_iterator std::copy&lt;std::_Bit_const_iterator, std::_Bit_iterator&gt; (614,787 samples, 0.06%)</title><rect x="199.1" y="421" width="0.5" height="15.0" fill="rgb(210,26,6)" rx="2" ry="2" />
+<text  x="202.12" y="431.5" ></text>
+</g>
+<g >
+<title>double* std::__copy_move_a1&lt;false, double const*, double*&gt; (368,836 samples, 0.04%)</title><rect x="412.6" y="405" width="0.3" height="15.0" fill="rgb(239,156,37)" rx="2" ry="2" />
+<text  x="415.62" y="415.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::_M_insert&lt;ns3::Ptr&lt;ns3::Packet&gt; const&amp;&gt; (234,373 samples, 0.02%)</title><rect x="17.4" y="309" width="0.2" height="15.0" fill="rgb(234,135,32)" rx="2" ry="2" />
+<text  x="20.39" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::PfFfMacScheduler::RefreshHarqProcesses (154,047 samples, 0.02%)</title><rect x="98.4" y="469" width="0.1" height="15.0" fill="rgb(247,193,46)" rx="2" ry="2" />
+<text  x="101.39" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Time::FromDouble (2,083,512 samples, 0.21%)</title><rect x="682.5" y="533" width="1.7" height="15.0" fill="rgb(249,203,48)" rx="2" ry="2" />
+<text  x="685.53" y="543.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::push_back (337,881 samples, 0.03%)</title><rect x="689.3" y="453" width="0.3" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="692.33" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Ptr&lt;ns3::Object&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Object&gt; &gt; &gt;::_M_erase_at_end (153,047 samples, 0.02%)</title><rect x="379.5" y="293" width="0.1" height="15.0" fill="rgb(246,189,45)" rx="2" ry="2" />
+<text  x="382.52" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteControlMessage&gt;&amp; std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::emplace_back&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; const&amp;&gt; (2,163,597 samples, 0.22%)</title><rect x="498.4" y="517" width="1.8" height="15.0" fill="rgb(224,89,21)" rx="2" ry="2" />
+<text  x="501.42" y="527.5" ></text>
+</g>
+<g >
+<title>std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;* std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_create_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; const&amp;&gt; (228,584 samples, 0.02%)</title><rect x="689.4" y="421" width="0.2" height="15.0" fill="rgb(230,116,27)" rx="2" ry="2" />
+<text  x="692.42" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::EventId::EventId (1,674,500 samples, 0.17%)</title><rect x="38.0" y="725" width="1.4" height="15.0" fill="rgb(206,4,1)" rx="2" ry="2" />
+<text  x="41.01" y="735.5" ></text>
+</g>
+<g >
+<title>ns3::EventId ns3::Simulator::Schedule&lt;void  (8,521,614 samples, 0.88%)</title><rect x="705.9" y="517" width="6.8" height="15.0" fill="rgb(253,224,53)" rx="2" ry="2" />
+<text  x="708.88" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::LteRlcSpecificLteMacSapUser::NotifyTxOpportunity (192,143 samples, 0.02%)</title><rect x="96.2" y="405" width="0.2" height="15.0" fill="rgb(249,204,48)" rx="2" ry="2" />
+<text  x="99.20" y="415.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt; &gt;::destroy&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; (1,143,303 samples, 0.12%)</title><rect x="652.8" y="325" width="0.9" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="655.77" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultSimulatorImpl::ScheduleWithContext (475,136 samples, 0.05%)</title><rect x="115.9" y="453" width="0.4" height="15.0" fill="rgb(253,222,53)" rx="2" ry="2" />
+<text  x="118.94" y="463.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, unsigned char*, unsigned char&gt; (356,896 samples, 0.04%)</title><rect x="442.3" y="293" width="0.3" height="15.0" fill="rgb(226,96,23)" rx="2" ry="2" />
+<text  x="445.31" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue const&gt;::operator* (203,182 samples, 0.02%)</title><rect x="713.3" y="501" width="0.2" height="15.0" fill="rgb(227,102,24)" rx="2" ry="2" />
+<text  x="716.33" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Time::GetNanoSeconds (316,166 samples, 0.03%)</title><rect x="16.4" y="357" width="0.3" height="15.0" fill="rgb(241,166,39)" rx="2" ry="2" />
+<text  x="19.45" y="367.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, ns3::LteEnbComponentCarrierManager::UeInfo, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt; &gt; &gt;::end (195,237 samples, 0.02%)</title><rect x="429.2" y="277" width="0.2" height="15.0" fill="rgb(225,96,23)" rx="2" ry="2" />
+<text  x="432.22" y="287.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_get_insert_hint_unique_pos (232,404 samples, 0.02%)</title><rect x="332.5" y="453" width="0.2" height="15.0" fill="rgb(240,162,38)" rx="2" ry="2" />
+<text  x="335.49" y="463.5" ></text>
+</g>
+<g >
+<title>std::map&lt;ns3::TbId_t, ns3::tbInfo_t, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::find (186,148 samples, 0.02%)</title><rect x="120.4" y="517" width="0.2" height="15.0" fill="rgb(224,87,20)" rx="2" ry="2" />
+<text  x="123.44" y="527.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::push_back (1,860,199 samples, 0.19%)</title><rect x="148.3" y="405" width="1.5" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="151.35" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumConverter::Convert (333,104 samples, 0.03%)</title><rect x="115.1" y="485" width="0.2" height="15.0" fill="rgb(223,86,20)" rx="2" ry="2" />
+<text  x="118.05" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy*&amp; std::__get_helper&lt;0ul, ns3::LteEnbPhy*&gt; (377,927 samples, 0.04%)</title><rect x="752.3" y="581" width="0.3" height="15.0" fill="rgb(226,99,23)" rx="2" ry="2" />
+<text  x="755.34" y="591.5" ></text>
+</g>
+<g >
+<title>pthread_self@plt (151,149 samples, 0.02%)</title><rect x="280.2" y="485" width="0.1" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="283.16" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_rebalance_for_erase (551,017 samples, 0.06%)</title><rect x="222.4" y="437" width="0.5" height="15.0" fill="rgb(205,2,0)" rx="2" ry="2" />
+<text  x="225.41" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::MultiModelSpectrumChannel::FindAndEventuallyAddTxSpectrumModel (1,340,325 samples, 0.14%)</title><rect x="73.2" y="517" width="1.1" height="15.0" fill="rgb(212,32,7)" rx="2" ry="2" />
+<text  x="76.17" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::LteInterference::DoAddSignal (2,731,360 samples, 0.28%)</title><rect x="712.7" y="517" width="2.2" height="15.0" fill="rgb(233,129,30)" rx="2" ry="2" />
+<text  x="715.74" y="527.5" ></text>
+</g>
+<g >
+<title>std::tuple&lt;ns3::MultiModelSpectrumChannel*, ns3::Ptr&lt;ns3::SpectrumValue&gt;, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::tuple&lt;ns3::MultiModelSpectrumChannel*&amp;, ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp;, double&amp;, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;&amp;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;&amp;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;&amp;, true, true&gt; (714,235 samples, 0.07%)</title><rect x="666.7" y="437" width="0.6" height="15.0" fill="rgb(209,20,4)" rx="2" ry="2" />
+<text  x="669.69" y="447.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt;::_M_ptr (375,886 samples, 0.04%)</title><rect x="321.5" y="405" width="0.3" height="15.0" fill="rgb(226,97,23)" rx="2" ry="2" />
+<text  x="324.49" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::LteFlowId_t, std::pair&lt;ns3::LteFlowId_t const, ns3::FfMacSchedSapProvider::SchedDlRlcBufferReqParameters&gt;, std::_Select1st&lt;std::pair&lt;ns3::LteFlowId_t const, ns3::FfMacSchedSapProvider::SchedDlRlcBufferReqParameters&gt; &gt;, std::less&lt;ns3::LteFlowId_t&gt;, std::allocator&lt;std::pair&lt;ns3::LteFlowId_t const, ns3::FfMacSchedSapProvider::SchedDlRlcBufferReqParameters&gt; &gt; &gt;::_S_key (303,374 samples, 0.03%)</title><rect x="27.0" y="261" width="0.3" height="15.0" fill="rgb(227,104,24)" rx="2" ry="2" />
+<text  x="30.01" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::EventImpl::~EventImpl (201,506 samples, 0.02%)</title><rect x="770.8" y="661" width="0.2" height="15.0" fill="rgb(233,130,31)" rx="2" ry="2" />
+<text  x="773.79" y="671.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::DlInfoListElement_s::HarqStatus_e const*, std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt; &gt;::base (160,882 samples, 0.02%)</title><rect x="444.2" y="213" width="0.1" height="15.0" fill="rgb(205,4,0)" rx="2" ry="2" />
+<text  x="447.21" y="223.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::push_back (3,560,217 samples, 0.37%)</title><rect x="478.6" y="309" width="2.8" height="15.0" fill="rgb(229,113,27)" rx="2" ry="2" />
+<text  x="481.56" y="319.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;* std::__copy_move_a1&lt;true, std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;*, std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;*&gt; (189,156 samples, 0.02%)</title><rect x="117.8" y="453" width="0.1" height="15.0" fill="rgb(217,56,13)" rx="2" ry="2" />
+<text  x="120.75" y="463.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;std::_Rb_tree_node_base*, std::_Rb_tree_node_base*&gt;::pair&lt;std::_Rb_tree_node_base*&amp;, std::_Rb_tree_node_base*&amp;&gt; (149,261 samples, 0.02%)</title><rect x="336.2" y="373" width="0.2" height="15.0" fill="rgb(205,0,0)" rx="2" ry="2" />
+<text  x="339.24" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, double&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, double&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, double&gt; &gt; &gt;::_M_mbegin (153,413 samples, 0.02%)</title><rect x="294.7" y="485" width="0.1" height="15.0" fill="rgb(254,226,54)" rx="2" ry="2" />
+<text  x="297.72" y="495.5" ></text>
+</g>
+<g >
+<title>std::_List_const_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;::operator++ (234,590 samples, 0.02%)</title><rect x="500.7" y="517" width="0.2" height="15.0" fill="rgb(220,71,17)" rx="2" ry="2" />
+<text  x="503.67" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;::_M_allocate (239,647 samples, 0.02%)</title><rect x="514.1" y="501" width="0.2" height="15.0" fill="rgb(248,202,48)" rx="2" ry="2" />
+<text  x="517.07" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue&gt;::operator= (757,202 samples, 0.08%)</title><rect x="303.3" y="501" width="0.6" height="15.0" fill="rgb(220,71,17)" rx="2" ry="2" />
+<text  x="306.31" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::SpectrumModel, ns3::Empty, ns3::DefaultDeleter&lt;ns3::SpectrumModel&gt; &gt;::Ref (142,470 samples, 0.01%)</title><rect x="411.7" y="469" width="0.1" height="15.0" fill="rgb(217,58,13)" rx="2" ry="2" />
+<text  x="414.71" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::LteRadioBearerTag::GetInstanceTypeId (237,147 samples, 0.02%)</title><rect x="490.7" y="517" width="0.2" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="493.68" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumSignalParametersDataFrame::~LteSpectrumSignalParametersDataFrame (3,401,494 samples, 0.35%)</title><rect x="75.3" y="453" width="2.8" height="15.0" fill="rgb(242,174,41)" rx="2" ry="2" />
+<text  x="78.35" y="463.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;std::is_constructible&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt;::value, std::pair&lt;std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, bool&gt; &gt;::type std::map&lt;ns3::Scheduler::EventKey, ns3::EventImpl*, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::insert&lt;std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (890,212 samples, 0.09%)</title><rect x="108.5" y="469" width="0.7" height="15.0" fill="rgb(211,29,7)" rx="2" ry="2" />
+<text  x="111.50" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::ObjectBase::ConstructSelf (2,247,437 samples, 0.23%)</title><rect x="630.9" y="485" width="1.8" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="633.87" y="495.5" ></text>
+</g>
+<g >
+<title>std::__allocated_ptr&lt;std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt;::__allocated_ptr (192,427 samples, 0.02%)</title><rect x="149.1" y="357" width="0.1" height="15.0" fill="rgb(248,200,48)" rx="2" ry="2" />
+<text  x="152.06" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::Copy (696,783 samples, 0.07%)</title><rect x="644.7" y="469" width="0.5" height="15.0" fill="rgb(240,161,38)" rx="2" ry="2" />
+<text  x="647.66" y="479.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::list (190,083 samples, 0.02%)</title><rect x="447.3" y="277" width="0.2" height="15.0" fill="rgb(252,216,51)" rx="2" ry="2" />
+<text  x="450.33" y="287.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;double&gt;::allocate (187,232 samples, 0.02%)</title><rect x="300.7" y="357" width="0.1" height="15.0" fill="rgb(248,201,48)" rx="2" ry="2" />
+<text  x="303.67" y="367.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_insert&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; const&amp;&gt; (480,171 samples, 0.05%)</title><rect x="733.3" y="421" width="0.4" height="15.0" fill="rgb(210,27,6)" rx="2" ry="2" />
+<text  x="736.30" y="431.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::list (635,025 samples, 0.07%)</title><rect x="366.4" y="485" width="0.5" height="15.0" fill="rgb(252,216,51)" rx="2" ry="2" />
+<text  x="369.36" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::~PacketBurst (1,859,304 samples, 0.19%)</title><rect x="164.6" y="389" width="1.5" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="167.63" y="399.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;::~pair (193,911 samples, 0.02%)</title><rect x="104.0" y="325" width="0.1" height="15.0" fill="rgb(226,100,24)" rx="2" ry="2" />
+<text  x="106.96" y="335.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_Vector_base (153,635 samples, 0.02%)</title><rect x="457.2" y="261" width="0.1" height="15.0" fill="rgb(205,2,0)" rx="2" ry="2" />
+<text  x="460.19" y="271.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt; &gt;::destroy&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; (392,648 samples, 0.04%)</title><rect x="612.9" y="437" width="0.3" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="615.90" y="447.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;* std::__copy_move_a1&lt;true, std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;*, std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;*&gt; (843,550 samples, 0.09%)</title><rect x="357.1" y="469" width="0.7" height="15.0" fill="rgb(217,56,13)" rx="2" ry="2" />
+<text  x="360.09" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Simulator::DoSchedule (2,399,693 samples, 0.25%)</title><rect x="706.1" y="501" width="2.0" height="15.0" fill="rgb(222,79,18)" rx="2" ry="2" />
+<text  x="709.12" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Singleton&lt;ns3::IidManager&gt;::Get (322,923 samples, 0.03%)</title><rect x="631.7" y="453" width="0.3" height="15.0" fill="rgb(222,79,19)" rx="2" ry="2" />
+<text  x="634.74" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::TypeId::GetParent (436,938 samples, 0.05%)</title><rect x="34.6" y="421" width="0.4" height="15.0" fill="rgb(211,29,7)" rx="2" ry="2" />
+<text  x="37.61" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::~_Vector_base (440,906 samples, 0.05%)</title><rect x="216.4" y="469" width="0.3" height="15.0" fill="rgb(241,168,40)" rx="2" ry="2" />
+<text  x="219.39" y="479.5" ></text>
+</g>
+<g >
+<title> (167,770 samples, 0.02%)</title><rect x="565.2" y="213" width="0.2" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="568.23" y="223.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::copy&lt;__gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, unsigned char*&gt; (150,938 samples, 0.02%)</title><rect x="443.8" y="261" width="0.1" height="15.0" fill="rgb(241,168,40)" rx="2" ry="2" />
+<text  x="446.83" y="271.5" ></text>
+</g>
+<g >
+<title>[libm.so.6] (236,481 samples, 0.02%)</title><rect x="486.3" y="501" width="0.1" height="15.0" fill="rgb(208,16,4)" rx="2" ry="2" />
+<text  x="489.25" y="511.5" ></text>
+</g>
+<g >
+<title>unsigned short* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;unsigned short const*, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, unsigned short*, unsigned short&gt; (893,468 samples, 0.09%)</title><rect x="474.7" y="277" width="0.7" height="15.0" fill="rgb(217,56,13)" rx="2" ry="2" />
+<text  x="477.67" y="287.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;::__normal_iterator (279,119 samples, 0.03%)</title><rect x="714.3" y="453" width="0.2" height="15.0" fill="rgb(249,206,49)" rx="2" ry="2" />
+<text  x="717.27" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_S_key (764,919 samples, 0.08%)</title><rect x="85.1" y="389" width="0.6" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="88.07" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::LteInterference::AddSignal (11,691,674 samples, 1.21%)</title><rect x="705.8" y="533" width="9.4" height="15.0" fill="rgb(239,158,37)" rx="2" ry="2" />
+<text  x="708.75" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::int64x64_t::int64x64_t (150,413 samples, 0.02%)</title><rect x="121.0" y="501" width="0.1" height="15.0" fill="rgb(240,161,38)" rx="2" ry="2" />
+<text  x="123.99" y="511.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::vector (1,002,557 samples, 0.10%)</title><rect x="729.5" y="453" width="0.8" height="15.0" fill="rgb(239,156,37)" rx="2" ry="2" />
+<text  x="732.54" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Function_handler&lt;void  (20,810,198 samples, 2.15%)</title><rect x="422.0" y="501" width="16.7" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="424.97" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, unsigned char&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, unsigned char&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, unsigned char&gt; &gt; &gt;::_S_key (552,315 samples, 0.06%)</title><rect x="244.8" y="437" width="0.5" height="15.0" fill="rgb(210,27,6)" rx="2" ry="2" />
+<text  x="247.81" y="447.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::_M_default_initialize (574,140 samples, 0.06%)</title><rect x="677.5" y="453" width="0.5" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="680.53" y="463.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::map (449,666 samples, 0.05%)</title><rect x="88.1" y="501" width="0.3" height="15.0" fill="rgb(242,171,40)" rx="2" ry="2" />
+<text  x="91.09" y="511.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::push_back (3,070,728 samples, 0.32%)</title><rect x="692.0" y="501" width="2.5" height="15.0" fill="rgb(215,50,11)" rx="2" ry="2" />
+<text  x="695.02" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::MakeEvent&lt;void  (709,970 samples, 0.07%)</title><rect x="640.4" y="453" width="0.5" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="643.37" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Packet&gt; ns3::Create&lt;ns3::Packet, unsigned int&amp;&gt; (501,720 samples, 0.05%)</title><rect x="19.0" y="405" width="0.4" height="15.0" fill="rgb(253,223,53)" rx="2" ry="2" />
+<text  x="21.95" y="415.5" ></text>
+</g>
+<g >
+<title>std::_List_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;::operator++ (150,969 samples, 0.02%)</title><rect x="572.2" y="357" width="0.1" height="15.0" fill="rgb(243,177,42)" rx="2" ry="2" />
+<text  x="575.22" y="367.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;bool, std::allocator&lt;bool&gt; &gt;::at (245,216 samples, 0.03%)</title><rect x="246.5" y="485" width="0.2" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="249.45" y="495.5" ></text>
+</g>
+<g >
+<title>void std::destroy_at&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; (269,841 samples, 0.03%)</title><rect x="497.4" y="501" width="0.2" height="15.0" fill="rgb(216,52,12)" rx="2" ry="2" />
+<text  x="500.37" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Packet&gt;::Ptr (193,783 samples, 0.02%)</title><rect x="151.9" y="373" width="0.1" height="15.0" fill="rgb(230,117,28)" rx="2" ry="2" />
+<text  x="154.87" y="383.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::_M_clear (860,343 samples, 0.09%)</title><rect x="774.0" y="293" width="0.7" height="15.0" fill="rgb(217,56,13)" rx="2" ry="2" />
+<text  x="777.02" y="303.5" ></text>
+</g>
+<g >
+<title>decltype  (189,123 samples, 0.02%)</title><rect x="358.5" y="501" width="0.2" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="361.53" y="511.5" ></text>
+</g>
+<g >
+<title>std::tuple&lt;double const&amp;, double const&amp;, double const&amp;&gt; std::tie&lt;double const, double const, double const&gt; (1,173,308 samples, 0.12%)</title><rect x="749.0" y="517" width="1.0" height="15.0" fill="rgb(237,149,35)" rx="2" ry="2" />
+<text  x="752.04" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::RarLteControlMessage::~RarLteControlMessage (509,242 samples, 0.05%)</title><rect x="167.1" y="389" width="0.4" height="15.0" fill="rgb(215,46,11)" rx="2" ry="2" />
+<text  x="170.06" y="399.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, ns3::Ptr&lt;ns3::UeManager&gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::Ptr&lt;ns3::UeManager&gt; &gt; &gt; &gt;::find (1,529,532 samples, 0.16%)</title><rect x="28.0" y="341" width="1.2" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="30.97" y="351.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;*, std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; std::move&lt;__gnu_cxx::__normal_iterator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;*, std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;*, std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; (2,253,875 samples, 0.23%)</title><rect x="634.1" y="501" width="1.8" height="15.0" fill="rgb(211,30,7)" rx="2" ry="2" />
+<text  x="637.11" y="511.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::push_back (2,809,773 samples, 0.29%)</title><rect x="396.4" y="549" width="2.3" height="15.0" fill="rgb(225,94,22)" rx="2" ry="2" />
+<text  x="399.39" y="559.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt;::_Vector_impl::_Vector_impl (157,554 samples, 0.02%)</title><rect x="132.1" y="469" width="0.1" height="15.0" fill="rgb(237,150,35)" rx="2" ry="2" />
+<text  x="135.12" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Select1st&lt;std::pair&lt;unsigned short const, double&gt; &gt;::operator (261,404 samples, 0.03%)</title><rect x="295.7" y="469" width="0.2" height="15.0" fill="rgb(237,147,35)" rx="2" ry="2" />
+<text  x="298.71" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt; &gt;::end (126,641 samples, 0.01%)</title><rect x="566.6" y="197" width="0.1" height="15.0" fill="rgb(210,23,5)" rx="2" ry="2" />
+<text  x="569.59" y="207.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumSignalParametersDlCtrlFrame::Copy (7,245,802 samples, 0.75%)</title><rect x="313.7" y="501" width="5.9" height="15.0" fill="rgb(252,220,52)" rx="2" ry="2" />
+<text  x="316.75" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::MapScheduler::Insert (10,424,431 samples, 1.07%)</title><rect x="269.2" y="501" width="8.4" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="272.19" y="511.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, std::vector&lt;double, std::allocator&lt;double&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::~map (1,140,266 samples, 0.12%)</title><rect x="232.8" y="469" width="0.9" height="15.0" fill="rgb(235,140,33)" rx="2" ry="2" />
+<text  x="235.83" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Bit_iterator::operator[] (162,486 samples, 0.02%)</title><rect x="195.7" y="453" width="0.1" height="15.0" fill="rgb(251,215,51)" rx="2" ry="2" />
+<text  x="198.70" y="463.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_insert&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; const&amp;&gt; (304,758 samples, 0.03%)</title><rect x="620.5" y="485" width="0.3" height="15.0" fill="rgb(210,27,6)" rx="2" ry="2" />
+<text  x="623.55" y="495.5" ></text>
+</g>
+<g >
+<title>unsigned short* std::__uninitialized_fill_n&lt;true&gt;::__uninit_fill_n&lt;unsigned short*, unsigned long, unsigned short&gt; (819,768 samples, 0.08%)</title><rect x="252.1" y="421" width="0.6" height="15.0" fill="rgb(228,106,25)" rx="2" ry="2" />
+<text  x="255.08" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_M_erase (325,437 samples, 0.03%)</title><rect x="60.8" y="389" width="0.3" height="15.0" fill="rgb(227,102,24)" rx="2" ry="2" />
+<text  x="63.84" y="399.5" ></text>
+</g>
+<g >
+<title>void std::_Construct&lt;ns3::HigherLayerSelected_s, ns3::HigherLayerSelected_s const&amp;&gt; (277,299 samples, 0.03%)</title><rect x="442.8" y="229" width="0.2" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="445.78" y="239.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;bool, std::allocator&lt;bool&gt; &gt;::size (382,898 samples, 0.04%)</title><rect x="195.4" y="453" width="0.3" height="15.0" fill="rgb(208,17,4)" rx="2" ry="2" />
+<text  x="198.39" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Ptr&lt;ns3::Object&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Object&gt; &gt; &gt;::vector (941,823 samples, 0.10%)</title><rect x="365.6" y="469" width="0.8" height="15.0" fill="rgb(237,147,35)" rx="2" ry="2" />
+<text  x="368.60" y="479.5" ></text>
+</g>
+<g >
+<title>unsigned int&amp; std::_Mu&lt;unsigned int, false, false&gt;::operator (264,404 samples, 0.03%)</title><rect x="758.0" y="597" width="0.2" height="15.0" fill="rgb(207,12,3)" rx="2" ry="2" />
+<text  x="761.00" y="607.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::AttributeConstructionList::Item, std::allocator&lt;ns3::AttributeConstructionList::Item&gt; &gt;::_List_base (461,286 samples, 0.05%)</title><rect x="371.6" y="469" width="0.4" height="15.0" fill="rgb(251,212,50)" rx="2" ry="2" />
+<text  x="374.60" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbMac::DoSubframeIndication (4,972,136 samples, 0.51%)</title><rect x="11.4" y="549" width="4.0" height="15.0" fill="rgb(248,200,47)" rx="2" ry="2" />
+<text  x="14.43" y="559.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;::__normal_iterator (161,967 samples, 0.02%)</title><rect x="600.2" y="277" width="0.1" height="15.0" fill="rgb(249,206,49)" rx="2" ry="2" />
+<text  x="603.21" y="287.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::deallocate (181,716 samples, 0.02%)</title><rect x="378.3" y="261" width="0.1" height="15.0" fill="rgb(217,56,13)" rx="2" ry="2" />
+<text  x="381.26" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::CqiListElement_s* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;ns3::CqiListElement_s*, std::vector&lt;ns3::CqiListElement_s, std::allocator&lt;ns3::CqiListElement_s&gt; &gt; &gt;, ns3::CqiListElement_s*, ns3::CqiListElement_s&gt; (1,085,784 samples, 0.11%)</title><rect x="92.1" y="469" width="0.8" height="15.0" fill="rgb(228,106,25)" rx="2" ry="2" />
+<text  x="95.06" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Time::~Time (227,882 samples, 0.02%)</title><rect x="339.2" y="453" width="0.2" height="15.0" fill="rgb(212,36,8)" rx="2" ry="2" />
+<text  x="342.19" y="463.5" ></text>
+</g>
+<g >
+<title>void std::destroy_at&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; (827,732 samples, 0.09%)</title><rect x="774.0" y="261" width="0.7" height="15.0" fill="rgb(224,88,21)" rx="2" ry="2" />
+<text  x="777.05" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteControlMessage&gt;&amp; std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::emplace_back&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; const&amp;&gt; (180,536 samples, 0.02%)</title><rect x="697.8" y="517" width="0.1" height="15.0" fill="rgb(224,89,21)" rx="2" ry="2" />
+<text  x="700.79" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::Object::~Object (2,269,146 samples, 0.23%)</title><rect x="378.8" y="325" width="1.8" height="15.0" fill="rgb(229,110,26)" rx="2" ry="2" />
+<text  x="381.81" y="335.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;::push_back (551,584 samples, 0.06%)</title><rect x="636.1" y="533" width="0.5" height="15.0" fill="rgb(211,29,7)" rx="2" ry="2" />
+<text  x="639.13" y="543.5" ></text>
+</g>
+<g >
+<title>void std::_Function_base::_Base_manager&lt;std::_Bind&lt;void  (1,947,662 samples, 0.20%)</title><rect x="711.0" y="453" width="1.5" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="713.98" y="463.5" ></text>
+</g>
+<g >
+<title>void std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::_M_realloc_insert&lt;unsigned short&gt; (2,020,223 samples, 0.21%)</title><rect x="218.3" y="453" width="1.7" height="15.0" fill="rgb(217,56,13)" rx="2" ry="2" />
+<text  x="221.35" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::BuildDataListElement_s, std::allocator&lt;ns3::BuildDataListElement_s&gt; &gt;::_Vector_base (382,238 samples, 0.04%)</title><rect x="174.2" y="453" width="0.3" height="15.0" fill="rgb(224,89,21)" rx="2" ry="2" />
+<text  x="177.19" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt;::_M_valptr (354,718 samples, 0.04%)</title><rect x="24.0" y="325" width="0.3" height="15.0" fill="rgb(208,14,3)" rx="2" ry="2" />
+<text  x="26.97" y="335.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; &gt; &gt;::_M_valptr (277,907 samples, 0.03%)</title><rect x="455.2" y="293" width="0.3" height="15.0" fill="rgb(219,68,16)" rx="2" ry="2" />
+<text  x="458.25" y="303.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned char, ns3::LteMacSapProvider*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt; &gt;::find (393,630 samples, 0.04%)</title><rect x="24.0" y="389" width="0.3" height="15.0" fill="rgb(248,200,47)" rx="2" ry="2" />
+<text  x="26.97" y="399.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::begin (169,080 samples, 0.02%)</title><rect x="408.1" y="469" width="0.1" height="15.0" fill="rgb(206,6,1)" rx="2" ry="2" />
+<text  x="411.11" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt; &gt; &gt;::find (155,011 samples, 0.02%)</title><rect x="97.5" y="421" width="0.2" height="15.0" fill="rgb(238,154,36)" rx="2" ry="2" />
+<text  x="100.53" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_M_erase (743,951 samples, 0.08%)</title><rect x="394.1" y="501" width="0.6" height="15.0" fill="rgb(227,102,24)" rx="2" ry="2" />
+<text  x="397.13" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_insert_and_rebalance (155,976 samples, 0.02%)</title><rect x="83.7" y="373" width="0.1" height="15.0" fill="rgb(225,94,22)" rx="2" ry="2" />
+<text  x="86.71" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::EventImpl, ns3::Empty, ns3::DefaultDeleter&lt;ns3::EventImpl&gt; &gt;::Unref (9,603,406 samples, 0.99%)</title><rect x="769.6" y="725" width="7.7" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="772.57" y="735.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, std::vector&lt;double, std::allocator&lt;double&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::map (4,812,209 samples, 0.50%)</title><rect x="236.7" y="485" width="3.9" height="15.0" fill="rgb(249,204,48)" rx="2" ry="2" />
+<text  x="239.73" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteCcmMacSapProvider*&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteCcmMacSapProvider*&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteCcmMacSapProvider*&gt; &gt; &gt;::_M_lower_bound (812,518 samples, 0.08%)</title><rect x="458.4" y="245" width="0.6" height="15.0" fill="rgb(216,52,12)" rx="2" ry="2" />
+<text  x="461.37" y="255.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt;::operator= (1,354,571 samples, 0.14%)</title><rect x="25.6" y="293" width="1.1" height="15.0" fill="rgb(222,80,19)" rx="2" ry="2" />
+<text  x="28.58" y="303.5" ></text>
+</g>
+<g >
+<title>std::map&lt;ns3::Scheduler::EventKey, ns3::EventImpl*, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::lower_bound (2,251,041 samples, 0.23%)</title><rect x="84.3" y="437" width="1.8" height="15.0" fill="rgb(238,153,36)" rx="2" ry="2" />
+<text  x="87.30" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::ObjectBase::ConstructSelf (267,173 samples, 0.03%)</title><rect x="19.4" y="421" width="0.2" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="22.36" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt;::_M_get_Tp_allocator (192,155 samples, 0.02%)</title><rect x="476.2" y="293" width="0.1" height="15.0" fill="rgb(206,5,1)" rx="2" ry="2" />
+<text  x="479.16" y="303.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt;::_M_fill_insert (1,581,674 samples, 0.16%)</title><rect x="510.9" y="533" width="1.3" height="15.0" fill="rgb(226,97,23)" rx="2" ry="2" />
+<text  x="513.91" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;* std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_clone_node&lt;false, std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_Alloc_node&gt; (244,239 samples, 0.03%)</title><rect x="88.2" y="421" width="0.2" height="15.0" fill="rgb(205,4,0)" rx="2" ry="2" />
+<text  x="91.22" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Packet&gt; const&amp; std::forward&lt;ns3::Ptr&lt;ns3::Packet&gt; const&amp;&gt; (183,511 samples, 0.02%)</title><rect x="626.0" y="469" width="0.1" height="15.0" fill="rgb(205,2,0)" rx="2" ry="2" />
+<text  x="628.95" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::UeManager&gt;::Ptr (155,695 samples, 0.02%)</title><rect x="27.8" y="341" width="0.1" height="15.0" fill="rgb(239,158,37)" rx="2" ry="2" />
+<text  x="30.75" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumPhy&gt;&amp; std::__get_helper&lt;4ul, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt; (350,980 samples, 0.04%)</title><rect x="757.1" y="581" width="0.3" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="760.12" y="591.5" ></text>
+</g>
+<g >
+<title>ns3::LogComponent::IsEnabled (240,367 samples, 0.02%)</title><rect x="401.4" y="533" width="0.2" height="15.0" fill="rgb(214,43,10)" rx="2" ry="2" />
+<text  x="404.38" y="543.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_assign_dispatch&lt;std::_List_const_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; (2,878,472 samples, 0.30%)</title><rect x="732.1" y="501" width="2.3" height="15.0" fill="rgb(237,148,35)" rx="2" ry="2" />
+<text  x="735.11" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Simulator::Now (243,501 samples, 0.03%)</title><rect x="607.4" y="501" width="0.2" height="15.0" fill="rgb(240,164,39)" rx="2" ry="2" />
+<text  x="610.38" y="511.5" ></text>
+</g>
+<g >
+<title>unsigned short* std::__uninitialized_copy&lt;true&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;unsigned short const*, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, unsigned short*&gt; (731,227 samples, 0.08%)</title><rect x="474.8" y="245" width="0.6" height="15.0" fill="rgb(217,57,13)" rx="2" ry="2" />
+<text  x="477.80" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::HarqStatus_e* std::__uninitialized_copy&lt;true&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::DlInfoListElement_s::HarqStatus_e const*, std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt; &gt;, ns3::DlInfoListElement_s::HarqStatus_e*&gt; (1,860,884 samples, 0.19%)</title><rect x="259.1" y="341" width="1.5" height="15.0" fill="rgb(241,165,39)" rx="2" ry="2" />
+<text  x="262.11" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::PropagationLossModel::CalcRxPower (3,683,031 samples, 0.38%)</title><rect x="738.6" y="549" width="2.9" height="15.0" fill="rgb(217,55,13)" rx="2" ry="2" />
+<text  x="741.57" y="559.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_M_erase (351,602 samples, 0.04%)</title><rect x="394.4" y="421" width="0.3" height="15.0" fill="rgb(227,102,24)" rx="2" ry="2" />
+<text  x="397.38" y="431.5" ></text>
+</g>
+<g >
+<title>std::function&lt;void  (7,793,846 samples, 0.80%)</title><rect x="771.0" y="661" width="6.2" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="773.96" y="671.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::EventImpl&gt;::Acquire (709,181 samples, 0.07%)</title><rect x="768.8" y="709" width="0.5" height="15.0" fill="rgb(229,112,26)" rx="2" ry="2" />
+<text  x="771.75" y="719.5" ></text>
+</g>
+<g >
+<title>int&amp; std::vector&lt;int, std::allocator&lt;int&gt; &gt;::emplace_back&lt;int&gt; (1,496,718 samples, 0.15%)</title><rect x="589.8" y="261" width="1.3" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="592.85" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::HigherLayerSelected_s* std::__uninitialized_copy&lt;false&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::HigherLayerSelected_s const*, std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt; &gt;, ns3::HigherLayerSelected_s*&gt; (356,634 samples, 0.04%)</title><rect x="442.7" y="261" width="0.3" height="15.0" fill="rgb(251,215,51)" rx="2" ry="2" />
+<text  x="445.72" y="271.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::push_back (1,940,647 samples, 0.20%)</title><rect x="22.0" y="341" width="1.6" height="15.0" fill="rgb(222,79,18)" rx="2" ry="2" />
+<text  x="25.03" y="351.5" ></text>
+</g>
+<g >
+<title>std::_List_const_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;::operator* (148,833 samples, 0.02%)</title><rect x="620.8" y="501" width="0.1" height="15.0" fill="rgb(254,229,54)" rx="2" ry="2" />
+<text  x="623.79" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultSimulatorImpl::GetSystemId (155,576 samples, 0.02%)</title><rect x="154.4" y="341" width="0.1" height="15.0" fill="rgb(208,17,4)" rx="2" ry="2" />
+<text  x="157.42" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::EventImpl::Invoke (892,884,786 samples, 92.07%)</title><rect x="40.1" y="725" width="718.1" height="15.0" fill="rgb(209,20,4)" rx="2" ry="2" />
+<text  x="43.05" y="735.5" >ns3::EventImpl::Invoke</text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;2ul, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::_Tuple_impl&lt;double&amp;, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;&amp;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;&amp;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;&amp;, void&gt; (476,638 samples, 0.05%)</title><rect x="666.9" y="389" width="0.4" height="15.0" fill="rgb(240,161,38)" rx="2" ry="2" />
+<text  x="669.88" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy::StartFrame (314,249 samples, 0.03%)</title><rect x="11.2" y="581" width="0.2" height="15.0" fill="rgb(209,22,5)" rx="2" ry="2" />
+<text  x="14.17" y="591.5" ></text>
+</g>
+<g >
+<title>ns3::SbMeasResult_s::operator= (452,044 samples, 0.05%)</title><rect x="593.2" y="293" width="0.4" height="15.0" fill="rgb(205,4,1)" rx="2" ry="2" />
+<text  x="596.21" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumPhy*&amp; std::__get_helper&lt;0ul, ns3::LteSpectrumPhy*&gt; (532,195 samples, 0.05%)</title><rect x="753.4" y="581" width="0.4" height="15.0" fill="rgb(210,26,6)" rx="2" ry="2" />
+<text  x="756.36" y="591.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy::DoSendLteControlMessage (2,809,761 samples, 0.29%)</title><rect x="148.3" y="437" width="2.2" height="15.0" fill="rgb(244,180,43)" rx="2" ry="2" />
+<text  x="151.28" y="447.5" ></text>
+</g>
+<g >
+<title>std::tuple&lt;ns3::LteInterference*, ns3::Ptr&lt;ns3::SpectrumValue const&gt;, unsigned int&gt;::~tuple (489,613 samples, 0.05%)</title><rect x="708.4" y="453" width="0.4" height="15.0" fill="rgb(251,215,51)" rx="2" ry="2" />
+<text  x="711.40" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_M_allocate (168,940 samples, 0.02%)</title><rect x="78.5" y="437" width="0.2" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="81.52" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::DoDispose (1,239,705 samples, 0.13%)</title><rect x="377.7" y="357" width="1.0" height="15.0" fill="rgb(242,172,41)" rx="2" ry="2" />
+<text  x="380.69" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::TracedCallback&lt;unsigned int, unsigned int, unsigned short, unsigned char, unsigned short, unsigned char&gt;::operator (198,920 samples, 0.02%)</title><rect x="231.2" y="453" width="0.2" height="15.0" fill="rgb(219,64,15)" rx="2" ry="2" />
+<text  x="234.25" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumPhy* ns3::PeekPointer&lt;ns3::LteSpectrumPhy&gt; (364,052 samples, 0.04%)</title><rect x="469.6" y="389" width="0.3" height="15.0" fill="rgb(206,4,1)" rx="2" ry="2" />
+<text  x="472.63" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::Simulator::DoSchedule (16,091,885 samples, 1.66%)</title><rect x="267.6" y="533" width="12.9" height="15.0" fill="rgb(222,79,18)" rx="2" ry="2" />
+<text  x="270.56" y="543.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::allocate (192,748 samples, 0.02%)</title><rect x="108.6" y="341" width="0.2" height="15.0" fill="rgb(213,40,9)" rx="2" ry="2" />
+<text  x="111.62" y="351.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::UlInfoListElement_s&gt; (157,331 samples, 0.02%)</title><rect x="265.6" y="437" width="0.1" height="15.0" fill="rgb(227,102,24)" rx="2" ry="2" />
+<text  x="268.57" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt; &gt; &gt;::_S_key (289,376 samples, 0.03%)</title><rect x="429.7" y="229" width="0.3" height="15.0" fill="rgb(222,81,19)" rx="2" ry="2" />
+<text  x="432.74" y="239.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy_aux&lt;false&gt;::__destroy&lt;ns3::DlInfoListElement_s*&gt; (852,686 samples, 0.09%)</title><rect x="132.4" y="453" width="0.7" height="15.0" fill="rgb(225,93,22)" rx="2" ry="2" />
+<text  x="135.40" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Function_handler&lt;void  (324,769 samples, 0.03%)</title><rect x="611.9" y="389" width="0.3" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="614.94" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::HarqStatus_e* std::__copy_move_a1&lt;false, ns3::DlInfoListElement_s::HarqStatus_e const*, ns3::DlInfoListElement_s::HarqStatus_e*&gt; (321,532 samples, 0.03%)</title><rect x="444.3" y="229" width="0.3" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="447.34" y="239.5" ></text>
+</g>
+<g >
+<title>std::_Function_base::_Base_manager&lt;void  (200,340 samples, 0.02%)</title><rect x="423.0" y="405" width="0.2" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="426.05" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumPhy::StartRxData (12,537,177 samples, 1.29%)</title><rect x="715.2" y="533" width="10.0" height="15.0" fill="rgb(226,100,24)" rx="2" ry="2" />
+<text  x="718.16" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbMac::DoTransmitPdu (579,238 samples, 0.06%)</title><rect x="17.2" y="357" width="0.4" height="15.0" fill="rgb(220,70,16)" rx="2" ry="2" />
+<text  x="20.17" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::LtePhy::GetPacketBurst (30,682,505 samples, 3.16%)</title><rect x="358.7" y="549" width="24.7" height="15.0" fill="rgb(221,76,18)" rx="2" ry="2" />
+<text  x="361.71" y="559.5" >n..</text>
+</g>
+<g >
+<title>ns3::LteEnbPhy::PhyPduReceived (14,218,237 samples, 1.47%)</title><rect x="423.5" y="373" width="11.4" height="15.0" fill="rgb(227,103,24)" rx="2" ry="2" />
+<text  x="426.51" y="383.5" ></text>
+</g>
+<g >
+<title>int* std::__copy_move_a2&lt;false, int const*, int*&gt; (130,133 samples, 0.01%)</title><rect x="574.2" y="245" width="0.1" height="15.0" fill="rgb(224,87,20)" rx="2" ry="2" />
+<text  x="577.21" y="255.5" ></text>
+</g>
+<g >
+<title>bool std::_Function_base::_Base_manager&lt;std::_Bind&lt;void  (195,009 samples, 0.02%)</title><rect x="307.1" y="453" width="0.1" height="15.0" fill="rgb(213,39,9)" rx="2" ry="2" />
+<text  x="310.07" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::_M_check_len (1,020,384 samples, 0.11%)</title><rect x="397.6" y="517" width="0.8" height="15.0" fill="rgb(229,114,27)" rx="2" ry="2" />
+<text  x="400.59" y="527.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::FfMacSchedSapProvider::SchedUlCqiInfoReqParameters, std::allocator&lt;ns3::FfMacSchedSapProvider::SchedUlCqiInfoReqParameters&gt; &gt;::_M_range_check (158,349 samples, 0.02%)</title><rect x="262.9" y="501" width="0.1" height="15.0" fill="rgb(211,27,6)" rx="2" ry="2" />
+<text  x="265.89" y="511.5" ></text>
+</g>
+<g >
+<title>double* std::fill_n&lt;double*, unsigned long, double&gt; (187,050 samples, 0.02%)</title><rect x="677.7" y="389" width="0.1" height="15.0" fill="rgb(234,135,32)" rx="2" ry="2" />
+<text  x="680.69" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteControlMessage&gt;::Ptr (266,180 samples, 0.03%)</title><rect x="319.1" y="293" width="0.2" height="15.0" fill="rgb(222,81,19)" rx="2" ry="2" />
+<text  x="322.05" y="303.5" ></text>
+</g>
+<g >
+<title>void std::fill&lt;std::_Bit_iterator, bool&gt; (148,785 samples, 0.02%)</title><rect x="248.6" y="437" width="0.1" height="15.0" fill="rgb(224,89,21)" rx="2" ry="2" />
+<text  x="251.63" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::~_Vector_base (160,698 samples, 0.02%)</title><rect x="610.0" y="373" width="0.1" height="15.0" fill="rgb(241,168,40)" rx="2" ry="2" />
+<text  x="612.97" y="383.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::find (842,898 samples, 0.09%)</title><rect x="223.1" y="485" width="0.7" height="15.0" fill="rgb(223,83,20)" rx="2" ry="2" />
+<text  x="226.07" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::TracedCallback&lt;unsigned short, unsigned char, unsigned int&gt;::operator (664,705 samples, 0.07%)</title><rect x="566.9" y="261" width="0.6" height="15.0" fill="rgb(228,106,25)" rx="2" ry="2" />
+<text  x="569.92" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::SpectrumValue (716,762 samples, 0.07%)</title><rect x="78.2" y="501" width="0.5" height="15.0" fill="rgb(211,27,6)" rx="2" ry="2" />
+<text  x="81.15" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Select1st&lt;std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt; &gt;::operator (124,333 samples, 0.01%)</title><rect x="434.1" y="261" width="0.1" height="15.0" fill="rgb(240,161,38)" rx="2" ry="2" />
+<text  x="437.10" y="271.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;* std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_create_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; const&amp;&gt; (233,103 samples, 0.02%)</title><rect x="668.7" y="389" width="0.1" height="15.0" fill="rgb(227,104,24)" rx="2" ry="2" />
+<text  x="671.65" y="399.5" ></text>
+</g>
+<g >
+<title>std::_List_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::insert&lt;std::_List_const_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;, void&gt; (987,508 samples, 0.10%)</title><rect x="673.0" y="501" width="0.8" height="15.0" fill="rgb(210,23,5)" rx="2" ry="2" />
+<text  x="675.96" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_copy (156,128 samples, 0.02%)</title><rect x="667.1" y="277" width="0.1" height="15.0" fill="rgb(246,192,46)" rx="2" ry="2" />
+<text  x="670.07" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::operator= (1,481,592 samples, 0.15%)</title><rect x="603.9" y="325" width="1.2" height="15.0" fill="rgb(243,177,42)" rx="2" ry="2" />
+<text  x="606.91" y="335.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, unsigned char*&gt; (481,444 samples, 0.05%)</title><rect x="519.2" y="309" width="0.4" height="15.0" fill="rgb(227,104,25)" rx="2" ry="2" />
+<text  x="522.19" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt;::Ptr (159,551 samples, 0.02%)</title><rect x="366.9" y="501" width="0.1" height="15.0" fill="rgb(219,67,16)" rx="2" ry="2" />
+<text  x="369.87" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumValueHelper::CreateUlTxPowerSpectralDensity (151,318 samples, 0.02%)</title><rect x="614.4" y="517" width="0.1" height="15.0" fill="rgb(253,224,53)" rx="2" ry="2" />
+<text  x="617.41" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_Vector_impl_data::_Vector_impl_data (146,089 samples, 0.02%)</title><rect x="688.9" y="389" width="0.1" height="15.0" fill="rgb(251,215,51)" rx="2" ry="2" />
+<text  x="691.91" y="399.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::vector (202,804 samples, 0.02%)</title><rect x="593.4" y="149" width="0.1" height="15.0" fill="rgb(206,9,2)" rx="2" ry="2" />
+<text  x="596.38" y="159.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteSpectrumPhy&gt;::Acquire (332,097 samples, 0.03%)</title><rect x="469.9" y="389" width="0.3" height="15.0" fill="rgb(236,143,34)" rx="2" ry="2" />
+<text  x="472.92" y="399.5" ></text>
+</g>
+<g >
+<title>decltype  (146,680 samples, 0.02%)</title><rect x="251.8" y="421" width="0.1" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="254.81" y="431.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::~vector (209,498 samples, 0.02%)</title><rect x="605.4" y="501" width="0.2" height="15.0" fill="rgb(225,92,22)" rx="2" ry="2" />
+<text  x="608.40" y="511.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, bool&gt;::pair (1,137,947 samples, 0.12%)</title><rect x="276.0" y="485" width="0.9" height="15.0" fill="rgb(252,220,52)" rx="2" ry="2" />
+<text  x="278.99" y="495.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;is_invocable_r_v&lt;void, void  (27,749,977 samples, 2.86%)</title><rect x="441.6" y="405" width="22.3" height="15.0" fill="rgb(243,178,42)" rx="2" ry="2" />
+<text  x="444.62" y="415.5" >s..</text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_copy (326,142 samples, 0.03%)</title><rect x="88.2" y="469" width="0.2" height="15.0" fill="rgb(246,192,46)" rx="2" ry="2" />
+<text  x="91.19" y="479.5" ></text>
+</g>
+<g >
+<title>std::_List_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;::_List_iterator (196,537 samples, 0.02%)</title><rect x="148.5" y="373" width="0.2" height="15.0" fill="rgb(223,84,20)" rx="2" ry="2" />
+<text  x="151.51" y="383.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::~_List_base (678,895 samples, 0.07%)</title><rect x="392.0" y="533" width="0.5" height="15.0" fill="rgb(221,74,17)" rx="2" ry="2" />
+<text  x="394.97" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider::ReportBufferStatusParameters&gt; &gt;::_M_valptr (187,088 samples, 0.02%)</title><rect x="689.9" y="469" width="0.2" height="15.0" fill="rgb(228,107,25)" rx="2" ry="2" />
+<text  x="692.91" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::Copy (422,077 samples, 0.04%)</title><rect x="114.0" y="421" width="0.3" height="15.0" fill="rgb(241,167,40)" rx="2" ry="2" />
+<text  x="116.96" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;0ul, ns3::LteSpectrumPhy*&gt;::_M_head (369,313 samples, 0.04%)</title><rect x="753.5" y="565" width="0.3" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="756.49" y="575.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt;::_M_check_len (474,800 samples, 0.05%)</title><rect x="511.8" y="517" width="0.4" height="15.0" fill="rgb(223,84,20)" rx="2" ry="2" />
+<text  x="514.80" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy::DequeueUlDci[abi:cxx11] (9,233,350 samples, 0.95%)</title><rect x="285.0" y="549" width="7.4" height="15.0" fill="rgb(213,37,9)" rx="2" ry="2" />
+<text  x="288.01" y="559.5" ></text>
+</g>
+<g >
+<title>ns3::Object::Dispose (202,781 samples, 0.02%)</title><rect x="36.7" y="501" width="0.1" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="39.67" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Function_base::_Base_manager&lt;ns3::Callback&lt;void, ns3::UlInfoListElement_s&gt;::Callback&lt;void  (442,482 samples, 0.05%)</title><rect x="438.9" y="485" width="0.4" height="15.0" fill="rgb(225,93,22)" rx="2" ry="2" />
+<text  x="441.93" y="495.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt; &gt;::_M_ptr (156,072 samples, 0.02%)</title><rect x="297.7" y="421" width="0.1" height="15.0" fill="rgb(228,109,26)" rx="2" ry="2" />
+<text  x="300.66" y="431.5" ></text>
+</g>
+<g >
+<title> (193,493 samples, 0.02%)</title><rect x="182.7" y="469" width="0.2" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="185.70" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::HarqProcessInfoElement_t* std::copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::HarqProcessInfoElement_t const*, std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt;, ns3::HarqProcessInfoElement_t*&gt; (185,369 samples, 0.02%)</title><rect x="117.4" y="405" width="0.1" height="15.0" fill="rgb(247,195,46)" rx="2" ry="2" />
+<text  x="120.37" y="415.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::__fill_n_a&lt;unsigned char*, unsigned long, unsigned char&gt; (604,594 samples, 0.06%)</title><rect x="460.4" y="181" width="0.5" height="15.0" fill="rgb(243,177,42)" rx="2" ry="2" />
+<text  x="463.45" y="191.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::BuildDataListElement_s, std::allocator&lt;ns3::BuildDataListElement_s&gt; &gt;::_M_check_len (351,521 samples, 0.04%)</title><rect x="202.6" y="453" width="0.3" height="15.0" fill="rgb(239,157,37)" rx="2" ry="2" />
+<text  x="205.61" y="463.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned char, ns3::LteUeMac::LcInfo, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteUeMac::LcInfo&gt; &gt; &gt;::begin (638,035 samples, 0.07%)</title><rect x="571.0" y="325" width="0.5" height="15.0" fill="rgb(230,115,27)" rx="2" ry="2" />
+<text  x="574.00" y="335.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_Vector_base (603,299 samples, 0.06%)</title><rect x="407.6" y="469" width="0.5" height="15.0" fill="rgb(237,150,35)" rx="2" ry="2" />
+<text  x="410.62" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteChunkProcessor&gt;::operator (207,486 samples, 0.02%)</title><rect x="408.8" y="533" width="0.2" height="15.0" fill="rgb(243,177,42)" rx="2" ry="2" />
+<text  x="411.85" y="543.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt;::operator= (2,127,957 samples, 0.22%)</title><rect x="206.1" y="485" width="1.7" height="15.0" fill="rgb(231,123,29)" rx="2" ry="2" />
+<text  x="209.07" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_M_erase (626,961 samples, 0.06%)</title><rect x="394.2" y="453" width="0.5" height="15.0" fill="rgb(227,102,24)" rx="2" ry="2" />
+<text  x="397.19" y="463.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned char const, ns3::LteUeMac::LcInfo&gt; &gt;::_M_ptr (236,021 samples, 0.02%)</title><rect x="438.1" y="245" width="0.2" height="15.0" fill="rgb(228,105,25)" rx="2" ry="2" />
+<text  x="441.15" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::Object::DoDelete (659,540 samples, 0.07%)</title><rect x="166.3" y="405" width="0.5" height="15.0" fill="rgb(212,34,8)" rx="2" ry="2" />
+<text  x="169.26" y="415.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;::operator[] (236,769 samples, 0.02%)</title><rect x="375.7" y="517" width="0.2" height="15.0" fill="rgb(212,32,7)" rx="2" ry="2" />
+<text  x="378.68" y="527.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt;::_M_ptr (241,718 samples, 0.02%)</title><rect x="496.1" y="517" width="0.2" height="15.0" fill="rgb(215,48,11)" rx="2" ry="2" />
+<text  x="499.09" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultDeleter&lt;ns3::Packet&gt;::Delete (2,691,525 samples, 0.28%)</title><rect x="451.7" y="133" width="2.2" height="15.0" fill="rgb(231,123,29)" rx="2" ry="2" />
+<text  x="454.73" y="143.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::deallocate (887,233 samples, 0.09%)</title><rect x="764.3" y="613" width="0.7" height="15.0" fill="rgb(238,152,36)" rx="2" ry="2" />
+<text  x="767.33" y="623.5" ></text>
+</g>
+<g >
+<title>decltype  (273,884 samples, 0.03%)</title><rect x="383.2" y="485" width="0.2" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="386.17" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::FfMacSchedSapProvider::SchedDlCqiInfoReqParameters::~SchedDlCqiInfoReqParameters (560,297 samples, 0.06%)</title><rect x="131.0" y="517" width="0.5" height="15.0" fill="rgb(239,158,37)" rx="2" ry="2" />
+<text  x="134.03" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, unsigned int&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt; &gt;::find (147,114 samples, 0.02%)</title><rect x="94.4" y="453" width="0.1" height="15.0" fill="rgb(214,44,10)" rx="2" ry="2" />
+<text  x="97.40" y="463.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; const*, std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt;::difference_type __gnu_cxx::operator-&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; const*, std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; (318,233 samples, 0.03%)</title><rect x="376.2" y="517" width="0.2" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="379.16" y="527.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy_aux&lt;true&gt;::__destroy&lt;unsigned char*&gt; (197,227 samples, 0.02%)</title><rect x="686.4" y="405" width="0.1" height="15.0" fill="rgb(224,89,21)" rx="2" ry="2" />
+<text  x="689.38" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::MobilityModel&gt;::Acquire (163,101 samples, 0.02%)</title><rect x="742.9" y="533" width="0.2" height="15.0" fill="rgb(253,222,53)" rx="2" ry="2" />
+<text  x="745.93" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_Vector_base (381,298 samples, 0.04%)</title><rect x="159.3" y="389" width="0.3" height="15.0" fill="rgb(205,2,0)" rx="2" ry="2" />
+<text  x="162.26" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::LteUePhy::DoSendLteControlMessage (1,153,573 samples, 0.12%)</title><rect x="598.1" y="309" width="0.9" height="15.0" fill="rgb(232,124,29)" rx="2" ry="2" />
+<text  x="601.07" y="319.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt;::_Vector_impl_data::_Vector_impl_data (243,120 samples, 0.03%)</title><rect x="131.8" y="453" width="0.2" height="15.0" fill="rgb(222,80,19)" rx="2" ry="2" />
+<text  x="134.83" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::LteControlMessage, ns3::Empty, ns3::DefaultDeleter&lt;ns3::LteControlMessage&gt; &gt;::Unref (160,375 samples, 0.02%)</title><rect x="150.4" y="405" width="0.1" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="153.41" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::NodeListPriv::DoDispose (238,924 samples, 0.02%)</title><rect x="36.6" y="549" width="0.2" height="15.0" fill="rgb(254,228,54)" rx="2" ry="2" />
+<text  x="39.64" y="559.5" ></text>
+</g>
+<g >
+<title>std::__fill_bvector (161,544 samples, 0.02%)</title><rect x="200.8" y="389" width="0.1" height="15.0" fill="rgb(212,33,7)" rx="2" ry="2" />
+<text  x="203.78" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::RlcPduListElement_s* std::__do_uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::RlcPduListElement_s const*, std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt;, ns3::RlcPduListElement_s*&gt; (178,382 samples, 0.02%)</title><rect x="101.6" y="341" width="0.2" height="15.0" fill="rgb(215,48,11)" rx="2" ry="2" />
+<text  x="104.62" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::HigherLayerSelected_s::HigherLayerSelected_s (277,299 samples, 0.03%)</title><rect x="442.8" y="213" width="0.2" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="445.78" y="223.5" ></text>
+</g>
+<g >
+<title>std::less&lt;ns3::Scheduler::EventKey&gt;::operator (727,810 samples, 0.08%)</title><rect x="337.5" y="373" width="0.6" height="15.0" fill="rgb(234,137,32)" rx="2" ry="2" />
+<text  x="340.50" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultSimulatorImpl::Now (158,066 samples, 0.02%)</title><rect x="391.1" y="533" width="0.1" height="15.0" fill="rgb(213,40,9)" rx="2" ry="2" />
+<text  x="394.08" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_insert_node (278,782 samples, 0.03%)</title><rect x="706.8" y="389" width="0.2" height="15.0" fill="rgb(218,62,14)" rx="2" ry="2" />
+<text  x="709.77" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, unsigned char&gt; &gt;::_M_valptr (191,519 samples, 0.02%)</title><rect x="177.0" y="405" width="0.2" height="15.0" fill="rgb(213,40,9)" rx="2" ry="2" />
+<text  x="180.00" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt;::find (484,223 samples, 0.05%)</title><rect x="437.1" y="277" width="0.4" height="15.0" fill="rgb(219,68,16)" rx="2" ry="2" />
+<text  x="440.08" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::ByteTagIterator::Item::GetTag (594,222 samples, 0.06%)</title><rect x="424.6" y="245" width="0.5" height="15.0" fill="rgb(226,98,23)" rx="2" ry="2" />
+<text  x="427.62" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Packet&gt;::Acquire (149,428 samples, 0.02%)</title><rect x="368.4" y="501" width="0.1" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="371.36" y="511.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;bool, std::allocator&lt;bool&gt; &gt;::insert (276,956 samples, 0.03%)</title><rect x="105.6" y="453" width="0.2" height="15.0" fill="rgb(250,209,50)" rx="2" ry="2" />
+<text  x="108.60" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::LteControlMessage::GetMessageType (150,641 samples, 0.02%)</title><rect x="284.9" y="549" width="0.1" height="15.0" fill="rgb(207,11,2)" rx="2" ry="2" />
+<text  x="287.89" y="559.5" ></text>
+</g>
+<g >
+<title>ns3::PacketTagList::Peek (1,947,014 samples, 0.20%)</title><rect x="489.7" y="533" width="1.6" height="15.0" fill="rgb(247,193,46)" rx="2" ry="2" />
+<text  x="492.70" y="543.5" ></text>
+</g>
+<g >
+<title>std::tuple&lt;ns3::LteInterference*, ns3::Ptr&lt;ns3::SpectrumValue const&gt;, unsigned int&gt;::tuple&lt;ns3::LteInterference*&amp;, ns3::Ptr&lt;ns3::SpectrumValue const&gt;&amp;, unsigned int&amp;, true, true&gt; (1,652,564 samples, 0.17%)</title><rect x="708.9" y="437" width="1.3" height="15.0" fill="rgb(206,5,1)" rx="2" ry="2" />
+<text  x="711.91" y="447.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;* std::__copy_move_a1&lt;true, std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;*, std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;*&gt; (1,149,860 samples, 0.12%)</title><rect x="621.6" y="469" width="0.9" height="15.0" fill="rgb(217,56,13)" rx="2" ry="2" />
+<text  x="624.61" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::GetTypeId (158,072 samples, 0.02%)</title><rect x="633.0" y="501" width="0.1" height="15.0" fill="rgb(216,54,13)" rx="2" ry="2" />
+<text  x="636.00" y="511.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;::_M_ptr (151,932 samples, 0.02%)</title><rect x="356.1" y="469" width="0.1" height="15.0" fill="rgb(207,12,3)" rx="2" ry="2" />
+<text  x="359.07" y="479.5" ></text>
+</g>
+<g >
+<title>std::operator== (305,665 samples, 0.03%)</title><rect x="328.3" y="485" width="0.3" height="15.0" fill="rgb(229,110,26)" rx="2" ry="2" />
+<text  x="331.31" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt;::~_Vector_base (186,345 samples, 0.02%)</title><rect x="461.3" y="261" width="0.1" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="464.28" y="271.5" ></text>
+</g>
+<g >
+<title> (196,328 samples, 0.02%)</title><rect x="154.7" y="373" width="0.2" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="157.73" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::Callback&lt;void, std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt;::Callback&lt;void  (126,158 samples, 0.01%)</title><rect x="516.1" y="469" width="0.1" height="15.0" fill="rgb(244,183,43)" rx="2" ry="2" />
+<text  x="519.12" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::HigherLayerSelected_s* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;ns3::HigherLayerSelected_s const*, std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt; &gt;, ns3::HigherLayerSelected_s*, ns3::HigherLayerSelected_s&gt; (324,739 samples, 0.03%)</title><rect x="593.3" y="245" width="0.3" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="596.31" y="255.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::size (161,317 samples, 0.02%)</title><rect x="685.1" y="501" width="0.2" height="15.0" fill="rgb(252,217,52)" rx="2" ry="2" />
+<text  x="688.12" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbMac::DoSubframeIndication (415,834 samples, 0.04%)</title><rect x="15.5" y="517" width="0.3" height="15.0" fill="rgb(248,200,47)" rx="2" ry="2" />
+<text  x="18.45" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Bind_helper&lt;std::__or_&lt;std::is_integral&lt;std::decay&lt;void  (1,871,248 samples, 0.19%)</title><rect x="616.9" y="501" width="1.5" height="15.0" fill="rgb(237,148,35)" rx="2" ry="2" />
+<text  x="619.88" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumPhy::EndRxDlCtrl (120,196,089 samples, 12.39%)</title><rect x="515.3" y="565" width="96.6" height="15.0" fill="rgb(211,28,6)" rx="2" ry="2" />
+<text  x="518.27" y="575.5" >ns3::LteSpe..</text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;* std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_create_node&lt;std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (783,256 samples, 0.08%)</title><rect x="661.0" y="389" width="0.7" height="15.0" fill="rgb(217,56,13)" rx="2" ry="2" />
+<text  x="664.02" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::_Vector_impl::_Vector_impl (333,132 samples, 0.03%)</title><rect x="520.4" y="309" width="0.3" height="15.0" fill="rgb(240,161,38)" rx="2" ry="2" />
+<text  x="523.43" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::EnbMacMemberFfMacSchedSapUser::SchedDlConfigInd (1,650,854 samples, 0.17%)</title><rect x="15.8" y="485" width="1.3" height="15.0" fill="rgb(241,166,39)" rx="2" ry="2" />
+<text  x="18.79" y="495.5" ></text>
+</g>
+<g >
+<title>void std::destroy_at&lt;ns3::BuildDataListElement_s&gt; (677,511 samples, 0.07%)</title><rect x="145.7" y="373" width="0.6" height="15.0" fill="rgb(253,223,53)" rx="2" ry="2" />
+<text  x="148.73" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::operator= (2,313,097 samples, 0.24%)</title><rect x="316.6" y="421" width="1.8" height="15.0" fill="rgb(243,177,42)" rx="2" ry="2" />
+<text  x="319.56" y="431.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::PacketMetadata::Data*, std::allocator&lt;ns3::PacketMetadata::Data*&gt; &gt;::end (160,537 samples, 0.02%)</title><rect x="558.6" y="181" width="0.1" height="15.0" fill="rgb(250,211,50)" rx="2" ry="2" />
+<text  x="561.58" y="191.5" ></text>
+</g>
+<g >
+<title>void std::destroy_at&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; (198,551 samples, 0.02%)</title><rect x="233.0" y="373" width="0.1" height="15.0" fill="rgb(246,192,46)" rx="2" ry="2" />
+<text  x="235.95" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::NoOpComponentCarrierManager::DoTransmitPdu (886,429 samples, 0.09%)</title><rect x="17.2" y="389" width="0.7" height="15.0" fill="rgb(228,110,26)" rx="2" ry="2" />
+<text  x="20.17" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt; &gt;::_S_key (202,540 samples, 0.02%)</title><rect x="11.9" y="325" width="0.2" height="15.0" fill="rgb(230,116,27)" rx="2" ry="2" />
+<text  x="14.92" y="335.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_M_create_storage (153,635 samples, 0.02%)</title><rect x="457.2" y="245" width="0.1" height="15.0" fill="rgb(252,220,52)" rx="2" ry="2" />
+<text  x="460.19" y="255.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;2ul, double const&amp;&gt;::_Tuple_impl (258,015 samples, 0.03%)</title><rect x="749.8" y="453" width="0.2" height="15.0" fill="rgb(251,213,51)" rx="2" ry="2" />
+<text  x="752.78" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Buffer::Data* const&amp; std::forward&lt;ns3::Buffer::Data* const&amp;&gt; (201,496 samples, 0.02%)</title><rect x="452.3" y="37" width="0.2" height="15.0" fill="rgb(250,209,50)" rx="2" ry="2" />
+<text  x="455.32" y="47.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteControlMessage&gt;::~Ptr (186,011 samples, 0.02%)</title><rect x="776.3" y="309" width="0.1" height="15.0" fill="rgb(208,17,4)" rx="2" ry="2" />
+<text  x="779.26" y="319.5" ></text>
+</g>
+<g >
+<title>std::tuple_element&lt;0ul, std::tuple&lt;ns3::LteSpectrumPhy*&gt; &gt;::type&amp; std::get&lt;0ul, ns3::LteSpectrumPhy*&gt; (724,506 samples, 0.07%)</title><rect x="753.2" y="597" width="0.6" height="15.0" fill="rgb(226,100,24)" rx="2" ry="2" />
+<text  x="756.20" y="607.5" ></text>
+</g>
+<g >
+<title>ns3::TypeId::TypeId (152,238 samples, 0.02%)</title><rect x="375.0" y="485" width="0.1" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="378.01" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt; &gt;::_M_valptr (250,138 samples, 0.03%)</title><rect x="429.0" y="261" width="0.2" height="15.0" fill="rgb(251,211,50)" rx="2" ry="2" />
+<text  x="431.99" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultSimulatorImpl::Now (231,403 samples, 0.02%)</title><rect x="155.6" y="373" width="0.1" height="15.0" fill="rgb(213,40,9)" rx="2" ry="2" />
+<text  x="158.56" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt; &gt;::_M_lower_bound (1,788,371 samples, 0.18%)</title><rect x="321.0" y="453" width="1.4" height="15.0" fill="rgb(253,225,53)" rx="2" ry="2" />
+<text  x="323.97" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::ConstValuesBegin (200,731 samples, 0.02%)</title><rect x="600.2" y="309" width="0.1" height="15.0" fill="rgb(229,114,27)" rx="2" ry="2" />
+<text  x="603.18" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::MemberSchedSapProvider&lt;ns3::PfFfMacScheduler&gt;::SchedDlTriggerReq (4,972,136 samples, 0.51%)</title><rect x="11.4" y="533" width="4.0" height="15.0" fill="rgb(247,193,46)" rx="2" ry="2" />
+<text  x="14.43" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::EventImpl&gt;::operator= (191,741 samples, 0.02%)</title><rect x="715.7" y="501" width="0.1" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="718.66" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;::_Vector_base (694,137 samples, 0.07%)</title><rect x="513.9" y="533" width="0.6" height="15.0" fill="rgb(247,197,47)" rx="2" ry="2" />
+<text  x="516.95" y="543.5" ></text>
+</g>
+<g >
+<title>unsigned short* std::__uninitialized_move_a&lt;unsigned short*, unsigned short*, std::allocator&lt;unsigned short&gt; &gt; (1,127,032 samples, 0.12%)</title><rect x="252.7" y="453" width="0.9" height="15.0" fill="rgb(232,126,30)" rx="2" ry="2" />
+<text  x="255.74" y="463.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;::_M_get_Node_allocator (237,832 samples, 0.02%)</title><rect x="724.2" y="469" width="0.2" height="15.0" fill="rgb(226,98,23)" rx="2" ry="2" />
+<text  x="727.20" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;bool, std::allocator&lt;bool&gt; &gt;::size (766,734 samples, 0.08%)</title><rect x="201.0" y="469" width="0.7" height="15.0" fill="rgb(208,17,4)" rx="2" ry="2" />
+<text  x="204.04" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;3ul, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::_Tuple_impl&lt;ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;&amp;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;&amp;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;&amp;, void&gt; (163,911 samples, 0.02%)</title><rect x="87.5" y="373" width="0.1" height="15.0" fill="rgb(215,46,11)" rx="2" ry="2" />
+<text  x="90.46" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;3ul, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::_Tuple_impl&lt;ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;&amp;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;&amp;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;&amp;, void&gt; (317,763 samples, 0.03%)</title><rect x="340.5" y="357" width="0.3" height="15.0" fill="rgb(215,46,11)" rx="2" ry="2" />
+<text  x="343.52" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::EventId::operator= (191,741 samples, 0.02%)</title><rect x="715.7" y="517" width="0.1" height="15.0" fill="rgb(241,165,39)" rx="2" ry="2" />
+<text  x="718.66" y="527.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned char, ns3::LteMacSapProvider*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt; &gt;::find (1,168,142 samples, 0.12%)</title><rect x="11.6" y="373" width="0.9" height="15.0" fill="rgb(248,200,47)" rx="2" ry="2" />
+<text  x="14.55" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Head_base&lt;0ul, double const&amp;, false&gt;::_Head_base (202,567 samples, 0.02%)</title><rect x="749.3" y="469" width="0.2" height="15.0" fill="rgb(205,3,0)" rx="2" ry="2" />
+<text  x="752.30" y="479.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_get_node (149,240 samples, 0.02%)</title><rect x="149.4" y="357" width="0.2" height="15.0" fill="rgb(247,194,46)" rx="2" ry="2" />
+<text  x="152.44" y="367.5" ></text>
+</g>
+<g >
+<title>std::_List_iterator&lt;ns3::Ptr&lt;ns3::LteChunkProcessor&gt; &gt;::operator++ (161,403 samples, 0.02%)</title><rect x="414.7" y="533" width="0.1" height="15.0" fill="rgb(220,73,17)" rx="2" ry="2" />
+<text  x="417.69" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::operator!= (199,253 samples, 0.02%)</title><rect x="431.5" y="277" width="0.1" height="15.0" fill="rgb(215,46,11)" rx="2" ry="2" />
+<text  x="434.47" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::LteUePhy::GenerateCqiRsrpRsrq (24,060,374 samples, 2.48%)</title><rect x="582.0" y="325" width="19.3" height="15.0" fill="rgb(215,49,11)" rx="2" ry="2" />
+<text  x="584.99" y="335.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::UlDciListElement_s, std::allocator&lt;ns3::UlDciListElement_s&gt; &gt;::vector (711,457 samples, 0.07%)</title><rect x="228.1" y="453" width="0.6" height="15.0" fill="rgb(210,23,5)" rx="2" ry="2" />
+<text  x="231.09" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleUeCcmMacSapProvider::ReportBufferStatus (1,286,769 samples, 0.13%)</title><rect x="552.0" y="245" width="1.0" height="15.0" fill="rgb(208,16,4)" rx="2" ry="2" />
+<text  x="554.98" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbMac::DoSchedDlConfigInd (314,249 samples, 0.03%)</title><rect x="11.2" y="469" width="0.2" height="15.0" fill="rgb(205,3,0)" rx="2" ry="2" />
+<text  x="14.17" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Tag::Tag (291,173 samples, 0.03%)</title><rect x="560.3" y="245" width="0.2" height="15.0" fill="rgb(212,35,8)" rx="2" ry="2" />
+<text  x="563.29" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::EventImpl::EventImpl (184,225 samples, 0.02%)</title><rect x="666.0" y="469" width="0.2" height="15.0" fill="rgb(247,195,46)" rx="2" ry="2" />
+<text  x="669.05" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::SpectrumSignalParameters, ns3::Empty, ns3::DefaultDeleter&lt;ns3::SpectrumSignalParameters&gt; &gt;::Unref (676,765 samples, 0.07%)</title><rect x="323.9" y="485" width="0.6" height="15.0" fill="rgb(254,229,54)" rx="2" ry="2" />
+<text  x="326.94" y="495.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;double&gt;::allocate (429,586 samples, 0.04%)</title><rect x="325.4" y="373" width="0.4" height="15.0" fill="rgb(248,201,48)" rx="2" ry="2" />
+<text  x="328.42" y="383.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::MacCeListElement_s*&gt; (796,900 samples, 0.08%)</title><rect x="264.8" y="453" width="0.6" height="15.0" fill="rgb(211,32,7)" rx="2" ry="2" />
+<text  x="267.80" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::MacCeListElement_s* std::__uninitialized_move_if_noexcept_a&lt;ns3::MacCeListElement_s*, ns3::MacCeListElement_s*, std::allocator&lt;ns3::MacCeListElement_s&gt; &gt; (659,885 samples, 0.07%)</title><rect x="129.5" y="485" width="0.6" height="15.0" fill="rgb(246,192,45)" rx="2" ry="2" />
+<text  x="132.52" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::_M_get_node (432,981 samples, 0.04%)</title><rect x="190.9" y="421" width="0.3" height="15.0" fill="rgb(217,58,14)" rx="2" ry="2" />
+<text  x="193.86" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::RngStream::RandU01 (729,422 samples, 0.08%)</title><rect x="608.9" y="517" width="0.6" height="15.0" fill="rgb(232,126,30)" rx="2" ry="2" />
+<text  x="611.92" y="527.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, ns3::LteEnbComponentCarrierManager::UeInfo, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt; &gt; &gt;::lower_bound (1,052,171 samples, 0.11%)</title><rect x="429.4" y="277" width="0.9" height="15.0" fill="rgb(236,144,34)" rx="2" ry="2" />
+<text  x="432.41" y="287.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_M_destroy_node (193,911 samples, 0.02%)</title><rect x="104.0" y="373" width="0.1" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="106.96" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;int, std::allocator&lt;int&gt; &gt;::_M_allocate (127,589 samples, 0.01%)</title><rect x="590.4" y="229" width="0.1" height="15.0" fill="rgb(216,52,12)" rx="2" ry="2" />
+<text  x="593.45" y="239.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy::DequeueUlDci[abi:cxx11] (1,038,704 samples, 0.11%)</title><rect x="110.0" y="533" width="0.8" height="15.0" fill="rgb(213,37,9)" rx="2" ry="2" />
+<text  x="113.00" y="543.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt;::destroy&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; (269,841 samples, 0.03%)</title><rect x="497.4" y="517" width="0.2" height="15.0" fill="rgb(230,118,28)" rx="2" ry="2" />
+<text  x="500.37" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::LtePhy::SetControlMessages (460,469 samples, 0.05%)</title><rect x="95.8" y="405" width="0.4" height="15.0" fill="rgb(247,193,46)" rx="2" ry="2" />
+<text  x="98.83" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_Auto_node::_M_key (161,415 samples, 0.02%)</title><rect x="335.7" y="389" width="0.1" height="15.0" fill="rgb(208,14,3)" rx="2" ry="2" />
+<text  x="338.67" y="399.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::UlDciListElement_s, std::allocator&lt;ns3::UlDciListElement_s&gt; &gt;::_M_check_len (840,073 samples, 0.09%)</title><rect x="250.0" y="453" width="0.7" height="15.0" fill="rgb(223,84,20)" rx="2" ry="2" />
+<text  x="253.00" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::HigherLayerSelected_s* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::HigherLayerSelected_s const*, std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt; &gt;, ns3::HigherLayerSelected_s*&gt; (151,182 samples, 0.02%)</title><rect x="92.3" y="325" width="0.1" height="15.0" fill="rgb(230,118,28)" rx="2" ry="2" />
+<text  x="95.31" y="335.5" ></text>
+</g>
+<g >
+<title>std::_List_const_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;::operator* (248,928 samples, 0.03%)</title><rect x="611.5" y="517" width="0.2" height="15.0" fill="rgb(254,229,54)" rx="2" ry="2" />
+<text  x="614.54" y="527.5" ></text>
+</g>
+<g >
+<title>std::map&lt;ns3::LteFlowId_t, ns3::FfMacSchedSapProvider::SchedDlRlcBufferReqParameters, std::less&lt;ns3::LteFlowId_t&gt;, std::allocator&lt;std::pair&lt;ns3::LteFlowId_t const, ns3::FfMacSchedSapProvider::SchedDlRlcBufferReqParameters&gt; &gt; &gt;::find (767,836 samples, 0.08%)</title><rect x="26.8" y="309" width="0.6" height="15.0" fill="rgb(229,112,26)" rx="2" ry="2" />
+<text  x="29.83" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy::DoSendLteControlMessage (162,081 samples, 0.02%)</title><rect x="103.7" y="421" width="0.1" height="15.0" fill="rgb(244,180,43)" rx="2" ry="2" />
+<text  x="106.68" y="431.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::splice (371,326 samples, 0.04%)</title><rect x="734.0" y="469" width="0.3" height="15.0" fill="rgb(220,70,16)" rx="2" ry="2" />
+<text  x="737.04" y="479.5" ></text>
+</g>
+<g >
+<title>void std::_Bind&lt;void  (2,105,662 samples, 0.22%)</title><rect x="15.5" y="629" width="1.6" height="15.0" fill="rgb(242,174,41)" rx="2" ry="2" />
+<text  x="18.45" y="639.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_Rb_tree (434,612 samples, 0.04%)</title><rect x="329.4" y="485" width="0.3" height="15.0" fill="rgb(252,219,52)" rx="2" ry="2" />
+<text  x="332.39" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt; &gt; &gt;::_M_begin (553,771 samples, 0.06%)</title><rect x="433.0" y="293" width="0.5" height="15.0" fill="rgb(217,58,13)" rx="2" ry="2" />
+<text  x="436.01" y="303.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_M_allocate (150,187 samples, 0.02%)</title><rect x="718.4" y="405" width="0.1" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="721.35" y="415.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;::pair (2,848,710 samples, 0.29%)</title><rect x="238.0" y="309" width="2.3" height="15.0" fill="rgb(240,164,39)" rx="2" ry="2" />
+<text  x="241.03" y="319.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::vector&lt;int, std::allocator&lt;int&gt; &gt;, std::allocator&lt;std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt; &gt;::_M_range_check (126,869 samples, 0.01%)</title><rect x="530.8" y="325" width="0.1" height="15.0" fill="rgb(238,152,36)" rx="2" ry="2" />
+<text  x="533.83" y="335.5" ></text>
+</g>
+<g >
+<title>double const* std::__niter_base&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; (126,294 samples, 0.01%)</title><rect x="719.3" y="421" width="0.1" height="15.0" fill="rgb(213,38,9)" rx="2" ry="2" />
+<text  x="722.31" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::VendorSpecificListElement_s* std::__do_uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::VendorSpecificListElement_s const*, std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt; &gt;, ns3::VendorSpecificListElement_s*&gt; (308,120 samples, 0.03%)</title><rect x="144.1" y="389" width="0.3" height="15.0" fill="rgb(219,66,15)" rx="2" ry="2" />
+<text  x="147.10" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt; ns3::Create&lt;ns3::PacketBurst&gt; (3,725,107 samples, 0.38%)</title><rect x="364.1" y="517" width="3.0" height="15.0" fill="rgb(225,93,22)" rx="2" ry="2" />
+<text  x="367.06" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::HarqStatus_e* std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;ns3::DlInfoListElement_s::HarqStatus_e const*, std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt; &gt;, ns3::DlInfoListElement_s::HarqStatus_e*&gt; (234,294 samples, 0.02%)</title><rect x="510.0" y="437" width="0.2" height="15.0" fill="rgb(212,36,8)" rx="2" ry="2" />
+<text  x="512.98" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Time::~Time (234,871 samples, 0.02%)</title><rect x="155.8" y="389" width="0.2" height="15.0" fill="rgb(212,36,8)" rx="2" ry="2" />
+<text  x="158.78" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::Angles::Angles (1,553,770 samples, 0.16%)</title><rect x="641.5" y="517" width="1.3" height="15.0" fill="rgb(254,226,54)" rx="2" ry="2" />
+<text  x="644.54" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::ObjectBase::~ObjectBase (149,528 samples, 0.02%)</title><rect x="561.3" y="165" width="0.1" height="15.0" fill="rgb(232,126,30)" rx="2" ry="2" />
+<text  x="564.26" y="175.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::BuildBroadcastListElement_s*&gt; (197,106 samples, 0.02%)</title><rect x="145.3" y="421" width="0.1" height="15.0" fill="rgb(245,188,44)" rx="2" ry="2" />
+<text  x="148.29" y="431.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_initialize_dispatch&lt;std::_List_const_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; (3,161,094 samples, 0.33%)</title><rect x="498.4" y="533" width="2.5" height="15.0" fill="rgb(215,50,12)" rx="2" ry="2" />
+<text  x="501.35" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_M_erase (983,671 samples, 0.10%)</title><rect x="232.9" y="437" width="0.8" height="15.0" fill="rgb(219,64,15)" rx="2" ry="2" />
+<text  x="235.92" y="447.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt;::_M_check_len (545,391 samples, 0.06%)</title><rect x="211.1" y="453" width="0.4" height="15.0" fill="rgb(228,110,26)" rx="2" ry="2" />
+<text  x="214.11" y="463.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;std::is_constructible&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt;::value, std::pair&lt;std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, bool&gt; &gt;::type std::map&lt;ns3::Scheduler::EventKey, ns3::EventImpl*, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::insert&lt;std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (8,106,001 samples, 0.84%)</title><rect x="269.3" y="485" width="6.5" height="15.0" fill="rgb(211,29,7)" rx="2" ry="2" />
+<text  x="272.32" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::BuildDataListElement_s* std::__uninitialized_copy&lt;false&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::BuildDataListElement_s const*, std::vector&lt;ns3::BuildDataListElement_s, std::allocator&lt;ns3::BuildDataListElement_s&gt; &gt; &gt;, ns3::BuildDataListElement_s*&gt; (143,073 samples, 0.01%)</title><rect x="95.0" y="389" width="0.1" height="15.0" fill="rgb(220,73,17)" rx="2" ry="2" />
+<text  x="97.98" y="399.5" ></text>
+</g>
+<g >
+<title>void  (394,385 samples, 0.04%)</title><rect x="471.9" y="357" width="0.3" height="15.0" fill="rgb(253,221,53)" rx="2" ry="2" />
+<text  x="474.86" y="367.5" ></text>
+</g>
+<g >
+<title>double* std::copy&lt;__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, double*&gt; (895,799 samples, 0.09%)</title><rect x="412.2" y="437" width="0.8" height="15.0" fill="rgb(246,192,46)" rx="2" ry="2" />
+<text  x="415.23" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;int, std::allocator&lt;int&gt; &gt;::_Vector_base (251,724 samples, 0.03%)</title><rect x="594.8" y="245" width="0.2" height="15.0" fill="rgb(215,47,11)" rx="2" ry="2" />
+<text  x="597.80" y="255.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;5ul, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::_Tuple_impl&lt;std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;&amp;&gt; (318,126 samples, 0.03%)</title><rect x="667.0" y="341" width="0.2" height="15.0" fill="rgb(219,68,16)" rx="2" ry="2" />
+<text  x="669.98" y="351.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_drop_node (397,972 samples, 0.04%)</title><rect x="776.8" y="373" width="0.3" height="15.0" fill="rgb(245,188,45)" rx="2" ry="2" />
+<text  x="779.78" y="383.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::vector (314,226 samples, 0.03%)</title><rect x="484.8" y="485" width="0.3" height="15.0" fill="rgb(239,156,37)" rx="2" ry="2" />
+<text  x="487.85" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt; &gt; &gt;::key_comp (161,213 samples, 0.02%)</title><rect x="157.3" y="389" width="0.1" height="15.0" fill="rgb(238,153,36)" rx="2" ry="2" />
+<text  x="160.31" y="399.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt; &gt;::_M_ptr (233,529 samples, 0.02%)</title><rect x="170.4" y="373" width="0.2" height="15.0" fill="rgb(214,41,9)" rx="2" ry="2" />
+<text  x="173.40" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_M_deallocate (275,158 samples, 0.03%)</title><rect x="216.4" y="453" width="0.2" height="15.0" fill="rgb(208,14,3)" rx="2" ry="2" />
+<text  x="219.43" y="463.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::RlcPduListElement_s*&gt; (190,862 samples, 0.02%)</title><rect x="209.1" y="437" width="0.2" height="15.0" fill="rgb(225,93,22)" rx="2" ry="2" />
+<text  x="212.12" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumPhy::AddExpectedTb (5,493,975 samples, 0.57%)</title><rect x="526.1" y="357" width="4.4" height="15.0" fill="rgb(249,206,49)" rx="2" ry="2" />
+<text  x="529.10" y="367.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, unsigned char*, unsigned char&gt; (204,725 samples, 0.02%)</title><rect x="147.2" y="421" width="0.2" height="15.0" fill="rgb(226,96,23)" rx="2" ry="2" />
+<text  x="150.24" y="431.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::BuildDataListElement_s, std::allocator&lt;ns3::BuildDataListElement_s&gt; &gt;::at (192,817 samples, 0.02%)</title><rect x="97.8" y="437" width="0.1" height="15.0" fill="rgb(206,9,2)" rx="2" ry="2" />
+<text  x="100.78" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumPhy&gt;::Ptr (241,373 samples, 0.02%)</title><rect x="750.4" y="565" width="0.2" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="753.44" y="575.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;::base (155,897 samples, 0.02%)</title><rect x="114.1" y="325" width="0.2" height="15.0" fill="rgb(240,163,38)" rx="2" ry="2" />
+<text  x="117.14" y="335.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Callback&lt;void, unsigned short, unsigned char, unsigned int&gt;, std::allocator&lt;ns3::Callback&lt;void, unsigned short, unsigned char, unsigned int&gt; &gt; &gt;::begin (250,676 samples, 0.03%)</title><rect x="567.1" y="245" width="0.2" height="15.0" fill="rgb(236,144,34)" rx="2" ry="2" />
+<text  x="570.06" y="255.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;double&gt;::deallocate (154,926 samples, 0.02%)</title><rect x="484.0" y="437" width="0.1" height="15.0" fill="rgb(223,83,20)" rx="2" ry="2" />
+<text  x="486.97" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::LteRlcSpecificLteMacSapUser::ReceivePdu (5,789,710 samples, 0.60%)</title><rect x="424.1" y="293" width="4.7" height="15.0" fill="rgb(206,6,1)" rx="2" ry="2" />
+<text  x="427.14" y="303.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;int, std::allocator&lt;int&gt; &gt;::~_Vector_base (270,798 samples, 0.03%)</title><rect x="505.8" y="389" width="0.3" height="15.0" fill="rgb(251,213,51)" rx="2" ry="2" />
+<text  x="508.85" y="399.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy_aux&lt;false&gt;::__destroy&lt;ns3::CqiListElement_s*&gt; (416,767 samples, 0.04%)</title><rect x="106.8" y="421" width="0.3" height="15.0" fill="rgb(229,111,26)" rx="2" ry="2" />
+<text  x="109.77" y="431.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;bool, std::allocator&lt;bool&gt; &gt;::_M_copy_aligned (1,193,749 samples, 0.12%)</title><rect x="199.1" y="437" width="0.9" height="15.0" fill="rgb(243,176,42)" rx="2" ry="2" />
+<text  x="202.08" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::int64x64_t::int64x64_t (159,152 samples, 0.02%)</title><rect x="484.3" y="469" width="0.2" height="15.0" fill="rgb(240,161,38)" rx="2" ry="2" />
+<text  x="487.34" y="479.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::Ptr&lt;ns3::Object&gt;*, ns3::Ptr&lt;ns3::Object&gt; &gt; (575,552 samples, 0.06%)</title><rect x="380.2" y="293" width="0.4" height="15.0" fill="rgb(226,98,23)" rx="2" ry="2" />
+<text  x="383.17" y="303.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;*, std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; (240,649 samples, 0.02%)</title><rect x="146.1" y="325" width="0.2" height="15.0" fill="rgb(205,0,0)" rx="2" ry="2" />
+<text  x="149.08" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::operator*= (308,769 samples, 0.03%)</title><rect x="682.8" y="501" width="0.3" height="15.0" fill="rgb(207,9,2)" rx="2" ry="2" />
+<text  x="685.82" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, unsigned char&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, unsigned char&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, unsigned char&gt; &gt; &gt;::_S_key (376,510 samples, 0.04%)</title><rect x="136.1" y="437" width="0.3" height="15.0" fill="rgb(210,27,6)" rx="2" ry="2" />
+<text  x="139.11" y="447.5" ></text>
+</g>
+<g >
+<title> (303,690 samples, 0.03%)</title><rect x="689.8" y="485" width="0.3" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="692.82" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt; &gt;::_Auto_node::_M_key (162,159 samples, 0.02%)</title><rect x="504.2" y="501" width="0.1" height="15.0" fill="rgb(210,26,6)" rx="2" ry="2" />
+<text  x="507.20" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumSignalParameters::SpectrumSignalParameters (1,058,660 samples, 0.11%)</title><rect x="342.8" y="485" width="0.9" height="15.0" fill="rgb(219,67,16)" rx="2" ry="2" />
+<text  x="345.85" y="495.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;unsigned char&gt;::allocate (157,055 samples, 0.02%)</title><rect x="214.0" y="421" width="0.2" height="15.0" fill="rgb(230,117,28)" rx="2" ry="2" />
+<text  x="217.05" y="431.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::~vector (197,904 samples, 0.02%)</title><rect x="220.0" y="485" width="0.2" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="223.00" y="495.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::UlDciListElement_s*, std::vector&lt;ns3::UlDciListElement_s, std::allocator&lt;ns3::UlDciListElement_s&gt; &gt; &gt;::__normal_iterator (202,471 samples, 0.02%)</title><rect x="249.3" y="453" width="0.2" height="15.0" fill="rgb(222,80,19)" rx="2" ry="2" />
+<text  x="252.34" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Bind_helper&lt;std::__or_&lt;std::is_integral&lt;std::decay&lt;void  (151,641 samples, 0.02%)</title><rect x="109.7" y="485" width="0.1" height="15.0" fill="rgb(237,148,35)" rx="2" ry="2" />
+<text  x="112.66" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::~vector (510,825 samples, 0.05%)</title><rect x="216.3" y="485" width="0.4" height="15.0" fill="rgb(243,174,41)" rx="2" ry="2" />
+<text  x="219.34" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::Packet, ns3::Empty, ns3::DefaultDeleter&lt;ns3::Packet&gt; &gt;::Unref (1,114,557 samples, 0.11%)</title><rect x="652.8" y="277" width="0.9" height="15.0" fill="rgb(215,47,11)" rx="2" ry="2" />
+<text  x="655.79" y="287.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::Ptr&lt;ns3::Object&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Object&gt; &gt; &gt;::_Vector_base (745,210 samples, 0.08%)</title><rect x="365.8" y="453" width="0.6" height="15.0" fill="rgb(235,141,33)" rx="2" ry="2" />
+<text  x="368.76" y="463.5" ></text>
+</g>
+<g >
+<title>void  (609,849 samples, 0.06%)</title><rect x="51.4" y="581" width="0.5" height="15.0" fill="rgb(253,221,53)" rx="2" ry="2" />
+<text  x="54.39" y="591.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; &gt; &gt;::_M_valptr (160,660 samples, 0.02%)</title><rect x="167.8" y="437" width="0.1" height="15.0" fill="rgb(219,68,16)" rx="2" ry="2" />
+<text  x="170.78" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt; &gt; &gt;::_M_begin (190,024 samples, 0.02%)</title><rect x="186.4" y="453" width="0.2" height="15.0" fill="rgb(252,216,51)" rx="2" ry="2" />
+<text  x="189.45" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Head_base&lt;2ul, unsigned int, false&gt;::_M_head (165,154 samples, 0.02%)</title><rect x="756.1" y="549" width="0.2" height="15.0" fill="rgb(250,209,50)" rx="2" ry="2" />
+<text  x="759.13" y="559.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::size (244,680 samples, 0.03%)</title><rect x="480.8" y="245" width="0.2" height="15.0" fill="rgb(216,50,12)" rx="2" ry="2" />
+<text  x="483.82" y="255.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::find (820,315 samples, 0.08%)</title><rect x="189.2" y="485" width="0.7" height="15.0" fill="rgb(223,83,20)" rx="2" ry="2" />
+<text  x="192.23" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::FfMacSchedSapProvider::SchedDlTriggerReqParameters::SchedDlTriggerReqParameters (944,566 samples, 0.10%)</title><rect x="131.5" y="517" width="0.7" height="15.0" fill="rgb(247,196,47)" rx="2" ry="2" />
+<text  x="134.48" y="527.5" ></text>
+</g>
+<g >
+<title>std::tuple_element&lt;0ul, std::tuple&lt;ns3::LteEnbPhy*, ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;::type&amp; std::get&lt;0ul, ns3::LteEnbPhy*, ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; (409,426 samples, 0.04%)</title><rect x="751.9" y="597" width="0.3" height="15.0" fill="rgb(213,39,9)" rx="2" ry="2" />
+<text  x="754.92" y="607.5" ></text>
+</g>
+<g >
+<title>ns3::ObjectDeleter::Delete (1,989,572 samples, 0.21%)</title><rect x="773.9" y="357" width="1.6" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="776.86" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::Time::From (739,923 samples, 0.08%)</title><rect x="682.5" y="517" width="0.6" height="15.0" fill="rgb(244,182,43)" rx="2" ry="2" />
+<text  x="685.53" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; std::_Rb_tree&lt;ns3::TbId_t, std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::_Select1st&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::_M_emplace_hint_unique&lt;std::pair&lt;ns3::TbId_t, ns3::tbInfo_t&gt; &gt; (143,473 samples, 0.01%)</title><rect x="120.3" y="485" width="0.1" height="15.0" fill="rgb(216,50,12)" rx="2" ry="2" />
+<text  x="123.30" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::UeMemberLteUePhySapUser::ReceiveLteControlMessage (45,543,635 samples, 4.70%)</title><rect x="535.4" y="357" width="36.7" height="15.0" fill="rgb(221,77,18)" rx="2" ry="2" />
+<text  x="538.43" y="367.5" >ns3..</text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_begin (327,923 samples, 0.03%)</title><rect x="84.5" y="405" width="0.2" height="15.0" fill="rgb(238,154,36)" rx="2" ry="2" />
+<text  x="87.47" y="415.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;::at (183,105 samples, 0.02%)</title><rect x="456.8" y="309" width="0.2" height="15.0" fill="rgb(233,131,31)" rx="2" ry="2" />
+<text  x="459.84" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::Object::Construct (2,631,536 samples, 0.27%)</title><rect x="448.3" y="277" width="2.1" height="15.0" fill="rgb(228,108,26)" rx="2" ry="2" />
+<text  x="451.25" y="287.5" ></text>
+</g>
+<g >
+<title>void std::__invoke_impl&lt;void, ns3::Callback&lt;void, std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt;::Callback&lt;void  (28,112,022 samples, 2.90%)</title><rect x="441.3" y="469" width="22.6" height="15.0" fill="rgb(208,15,3)" rx="2" ry="2" />
+<text  x="444.33" y="479.5" >v..</text>
+</g>
+<g >
+<title>ns3::CallbackImpl&lt;void, ns3::Ptr&lt;ns3::Packet&gt; &gt;::operator (21,094,361 samples, 2.18%)</title><rect x="421.7" y="533" width="17.0" height="15.0" fill="rgb(210,25,6)" rx="2" ry="2" />
+<text  x="424.74" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::UeMemberLteMacSapProvider::TransmitPdu (5,533,169 samples, 0.57%)</title><rect x="560.8" y="229" width="4.4" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="563.78" y="239.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteControlMessage&gt;&amp; std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::emplace_back&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; const&amp;&gt; (564,216 samples, 0.06%)</title><rect x="318.8" y="373" width="0.5" height="15.0" fill="rgb(224,89,21)" rx="2" ry="2" />
+<text  x="321.81" y="383.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::at (187,560 samples, 0.02%)</title><rect x="657.1" y="517" width="0.2" height="15.0" fill="rgb(220,71,17)" rx="2" ry="2" />
+<text  x="660.13" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::GetSpectrumModel (124,953 samples, 0.01%)</title><rect x="79.8" y="517" width="0.1" height="15.0" fill="rgb(228,106,25)" rx="2" ry="2" />
+<text  x="82.75" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::Callback&lt;void, std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt;::IsNull (376,180 samples, 0.04%)</title><rect x="515.5" y="549" width="0.3" height="15.0" fill="rgb(218,61,14)" rx="2" ry="2" />
+<text  x="518.52" y="559.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt; &gt;::allocate (185,306 samples, 0.02%)</title><rect x="661.1" y="357" width="0.1" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="664.08" y="367.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, unsigned int, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt; &gt;::begin (281,870 samples, 0.03%)</title><rect x="234.0" y="469" width="0.2" height="15.0" fill="rgb(243,174,41)" rx="2" ry="2" />
+<text  x="236.96" y="479.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;* std::__niter_base&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;*, std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt; &gt; (187,610 samples, 0.02%)</title><rect x="622.5" y="469" width="0.2" height="15.0" fill="rgb(209,18,4)" rx="2" ry="2" />
+<text  x="625.53" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::NixVector&gt;::Ptr (125,319 samples, 0.01%)</title><rect x="68.4" y="421" width="0.1" height="15.0" fill="rgb(248,201,48)" rx="2" ry="2" />
+<text  x="71.36" y="431.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt;::end (195,428 samples, 0.02%)</title><rect x="210.6" y="469" width="0.1" height="15.0" fill="rgb(213,39,9)" rx="2" ry="2" />
+<text  x="213.57" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::end (304,038 samples, 0.03%)</title><rect x="240.0" y="277" width="0.3" height="15.0" fill="rgb(237,147,35)" rx="2" ry="2" />
+<text  x="243.04" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt;* std::__niter_base&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;*, std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; (194,031 samples, 0.02%)</title><rect x="381.6" y="469" width="0.1" height="15.0" fill="rgb(229,110,26)" rx="2" ry="2" />
+<text  x="384.56" y="479.5" ></text>
+</g>
+<g >
+<title>void std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_construct_node&lt;std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (199,972 samples, 0.02%)</title><rect x="706.6" y="373" width="0.2" height="15.0" fill="rgb(231,122,29)" rx="2" ry="2" />
+<text  x="709.61" y="383.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::vector (836,469 samples, 0.09%)</title><rect x="518.9" y="341" width="0.7" height="15.0" fill="rgb(206,9,2)" rx="2" ry="2" />
+<text  x="521.90" y="351.5" ></text>
+</g>
+<g >
+<title>unsigned short* std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;unsigned short const*, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, unsigned short*&gt; (450,981 samples, 0.05%)</title><rect x="521.1" y="261" width="0.4" height="15.0" fill="rgb(239,157,37)" rx="2" ry="2" />
+<text  x="524.12" y="271.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_M_deallocate (317,082 samples, 0.03%)</title><rect x="693.1" y="453" width="0.3" height="15.0" fill="rgb(208,14,3)" rx="2" ry="2" />
+<text  x="696.13" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::at (331,136 samples, 0.03%)</title><rect x="181.0" y="469" width="0.2" height="15.0" fill="rgb(238,152,36)" rx="2" ry="2" />
+<text  x="183.96" y="479.5" ></text>
+</g>
+<g >
+<title>int* std::__uninitialized_copy&lt;true&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;int const*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt;, int*&gt; (730,011 samples, 0.08%)</title><rect x="398.8" y="501" width="0.6" height="15.0" fill="rgb(207,11,2)" rx="2" ry="2" />
+<text  x="401.81" y="511.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt; &gt; &gt;::construct&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt;, std::pair&lt;unsigned short, ns3::DlInfoListElement_s&gt; &gt; (724,895 samples, 0.07%)</title><rect x="503.4" y="453" width="0.6" height="15.0" fill="rgb(238,156,37)" rx="2" ry="2" />
+<text  x="506.44" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::EventId ns3::Simulator::Schedule&lt;void  (572,651 samples, 0.06%)</title><rect x="112.5" y="501" width="0.5" height="15.0" fill="rgb(253,224,53)" rx="2" ry="2" />
+<text  x="115.51" y="511.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;::_M_addr (156,809 samples, 0.02%)</title><rect x="500.5" y="469" width="0.2" height="15.0" fill="rgb(212,32,7)" rx="2" ry="2" />
+<text  x="503.55" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::vector (323,441 samples, 0.03%)</title><rect x="596.3" y="213" width="0.3" height="15.0" fill="rgb(206,9,2)" rx="2" ry="2" />
+<text  x="599.30" y="223.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;unsigned short&gt;::allocate (360,140 samples, 0.04%)</title><rect x="480.0" y="229" width="0.2" height="15.0" fill="rgb(237,149,35)" rx="2" ry="2" />
+<text  x="482.95" y="239.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy_aux&lt;false&gt;::__destroy&lt;ns3::CqiListElement_s*&gt; (154,796 samples, 0.02%)</title><rect x="131.1" y="453" width="0.1" height="15.0" fill="rgb(229,111,26)" rx="2" ry="2" />
+<text  x="134.12" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::EventImpl&gt;::Ptr (1,021,807 samples, 0.11%)</title><rect x="38.5" y="709" width="0.9" height="15.0" fill="rgb(239,157,37)" rx="2" ry="2" />
+<text  x="41.53" y="719.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter&gt;::SimpleRefCount (422,806 samples, 0.04%)</title><rect x="365.3" y="469" width="0.3" height="15.0" fill="rgb(230,117,28)" rx="2" ry="2" />
+<text  x="368.26" y="479.5" ></text>
+</g>
+<g >
+<title>std::map&lt;ns3::LteSpectrumModelId, ns3::Ptr&lt;ns3::SpectrumModel&gt;, std::less&lt;ns3::LteSpectrumModelId&gt;, std::allocator&lt;std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt; &gt; &gt;::find (1,429,003 samples, 0.15%)</title><rect x="54.9" y="485" width="1.2" height="15.0" fill="rgb(226,100,24)" rx="2" ry="2" />
+<text  x="57.93" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt; &gt;::_M_valptr (379,355 samples, 0.04%)</title><rect x="156.9" y="389" width="0.3" height="15.0" fill="rgb(251,211,50)" rx="2" ry="2" />
+<text  x="159.90" y="399.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, unsigned char*&gt; (520,529 samples, 0.05%)</title><rect x="126.9" y="309" width="0.4" height="15.0" fill="rgb(254,229,54)" rx="2" ry="2" />
+<text  x="129.91" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::LteChunkProcessor::EvaluateChunk (8,414,736 samples, 0.87%)</title><rect x="401.6" y="533" width="6.7" height="15.0" fill="rgb(246,191,45)" rx="2" ry="2" />
+<text  x="404.57" y="543.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::HigherLayerSelected_s*, std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt; &gt; std::copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::HigherLayerSelected_s const*, std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;ns3::HigherLayerSelected_s*, std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt; &gt; &gt; (337,592 samples, 0.03%)</title><rect x="585.7" y="229" width="0.3" height="15.0" fill="rgb(215,48,11)" rx="2" ry="2" />
+<text  x="588.68" y="239.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;*, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; std::move&lt;__gnu_cxx::__normal_iterator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;*, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;*, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; &gt; (180,270 samples, 0.02%)</title><rect x="117.1" y="485" width="0.2" height="15.0" fill="rgb(218,63,15)" rx="2" ry="2" />
+<text  x="120.11" y="495.5" ></text>
+</g>
+<g >
+<title>std::tuple&lt;double const&amp;, double const&amp;, double const&amp;&gt;::tuple&lt;true, true&gt; (1,129,345 samples, 0.12%)</title><rect x="749.1" y="501" width="0.9" height="15.0" fill="rgb(241,166,39)" rx="2" ry="2" />
+<text  x="752.08" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Simulator::GetSystemId (397,961 samples, 0.04%)</title><rect x="559.3" y="229" width="0.4" height="15.0" fill="rgb(235,141,33)" rx="2" ry="2" />
+<text  x="562.35" y="239.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__enable_if&lt;std::__is_scalar&lt;double&gt;::__value, void&gt;::__type std::__fill_a1&lt;double*, double&gt; (195,953 samples, 0.02%)</title><rect x="403.9" y="357" width="0.2" height="15.0" fill="rgb(237,149,35)" rx="2" ry="2" />
+<text  x="406.90" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Packet&gt;::operator= (328,413 samples, 0.03%)</title><rect x="559.9" y="261" width="0.2" height="15.0" fill="rgb(230,115,27)" rx="2" ry="2" />
+<text  x="562.86" y="271.5" ></text>
+</g>
+<g >
+<title>std::_Function_base::~_Function_base (488,113 samples, 0.05%)</title><rect x="640.5" y="421" width="0.4" height="15.0" fill="rgb(221,74,17)" rx="2" ry="2" />
+<text  x="643.55" y="431.5" ></text>
+</g>
+<g >
+<title>std::map&lt;ns3::LteSpectrumModelId, ns3::Ptr&lt;ns3::SpectrumModel&gt;, std::less&lt;ns3::LteSpectrumModelId&gt;, std::allocator&lt;std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt; &gt; &gt;::find (1,123,045 samples, 0.12%)</title><rect x="297.8" y="469" width="0.9" height="15.0" fill="rgb(226,100,24)" rx="2" ry="2" />
+<text  x="300.81" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::MacCeListElement_s, std::allocator&lt;ns3::MacCeListElement_s&gt; &gt;::erase (947,008 samples, 0.10%)</title><rect x="264.7" y="517" width="0.7" height="15.0" fill="rgb(216,52,12)" rx="2" ry="2" />
+<text  x="267.68" y="527.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, std::vector&lt;ns3::DlDciListElement_s, std::allocator&lt;ns3::DlDciListElement_s&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;ns3::DlDciListElement_s, std::allocator&lt;ns3::DlDciListElement_s&gt; &gt; &gt; &gt; &gt;::find (966,324 samples, 0.10%)</title><rect x="187.1" y="485" width="0.7" height="15.0" fill="rgb(241,166,39)" rx="2" ry="2" />
+<text  x="190.07" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultSimulatorImpl::Schedule (1,666,743 samples, 0.17%)</title><rect x="615.3" y="517" width="1.3" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="618.27" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::Ptr&lt;ns3::Object&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Object&gt; &gt; &gt;::_M_deallocate (162,767 samples, 0.02%)</title><rect x="380.0" y="277" width="0.1" height="15.0" fill="rgb(238,152,36)" rx="2" ry="2" />
+<text  x="382.98" y="287.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_M_erase (637,679 samples, 0.07%)</title><rect x="60.6" y="453" width="0.5" height="15.0" fill="rgb(227,102,24)" rx="2" ry="2" />
+<text  x="63.59" y="463.5" ></text>
+</g>
+<g >
+<title>operator delete (125,509 samples, 0.01%)</title><rect x="551.0" y="245" width="0.1" height="15.0" fill="rgb(247,196,46)" rx="2" ry="2" />
+<text  x="554.01" y="255.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, unsigned char, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, unsigned char&gt; &gt; &gt;::end (239,197 samples, 0.02%)</title><rect x="194.2" y="485" width="0.2" height="15.0" fill="rgb(251,213,51)" rx="2" ry="2" />
+<text  x="197.17" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt;::at (308,215 samples, 0.03%)</title><rect x="210.3" y="485" width="0.2" height="15.0" fill="rgb(246,192,45)" rx="2" ry="2" />
+<text  x="213.26" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::EventImpl&gt;::~Ptr (189,897 samples, 0.02%)</title><rect x="278.1" y="501" width="0.1" height="15.0" fill="rgb(225,92,22)" rx="2" ry="2" />
+<text  x="281.06" y="511.5" ></text>
+</g>
+<g >
+<title>std::tuple&lt;ns3::LteEnbPhy*, ns3::Ptr&lt;ns3::PacketBurst&gt; &gt;::tuple (474,767 samples, 0.05%)</title><rect x="284.0" y="437" width="0.4" height="15.0" fill="rgb(235,139,33)" rx="2" ry="2" />
+<text  x="287.03" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;* std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_M_copy&lt;false, std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_Alloc_node&gt; (400,356 samples, 0.04%)</title><rect x="232.5" y="421" width="0.3" height="15.0" fill="rgb(236,146,34)" rx="2" ry="2" />
+<text  x="235.50" y="431.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned short const, unsigned char&gt; &gt;::_M_ptr (189,215 samples, 0.02%)</title><rect x="135.3" y="453" width="0.1" height="15.0" fill="rgb(219,68,16)" rx="2" ry="2" />
+<text  x="138.29" y="463.5" ></text>
+</g>
+<g >
+<title>void std::destroy_at&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; (555,448 samples, 0.06%)</title><rect x="233.2" y="357" width="0.4" height="15.0" fill="rgb(246,192,46)" rx="2" ry="2" />
+<text  x="236.17" y="367.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;std::_Rb_tree_node_base*, std::_Rb_tree_node_base*&gt;::pair&lt;std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt;*&amp;, std::_Rb_tree_node_base*&amp;&gt; (184,807 samples, 0.02%)</title><rect x="504.6" y="469" width="0.1" height="15.0" fill="rgb(237,149,35)" rx="2" ry="2" />
+<text  x="507.58" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::SpectrumValue, ns3::Empty, ns3::DefaultDeleter&lt;ns3::SpectrumValue&gt; &gt;::Unref (602,928 samples, 0.06%)</title><rect x="303.4" y="485" width="0.5" height="15.0" fill="rgb(246,189,45)" rx="2" ry="2" />
+<text  x="306.43" y="495.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt;::find (1,563,753 samples, 0.16%)</title><rect x="171.0" y="453" width="1.2" height="15.0" fill="rgb(235,142,33)" rx="2" ry="2" />
+<text  x="173.99" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::~vector (531,401 samples, 0.05%)</title><rect x="773.1" y="437" width="0.5" height="15.0" fill="rgb(225,92,22)" rx="2" ry="2" />
+<text  x="776.13" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::EnbMacMemberLteEnbPhySapUser::SubframeIndication (314,249 samples, 0.03%)</title><rect x="11.2" y="549" width="0.2" height="15.0" fill="rgb(252,216,51)" rx="2" ry="2" />
+<text  x="14.17" y="559.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; const*, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt;::__normal_iterator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;*, void&gt; (158,435 samples, 0.02%)</title><rect x="347.9" y="533" width="0.1" height="15.0" fill="rgb(213,40,9)" rx="2" ry="2" />
+<text  x="350.91" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::Packet::~Packet (1,078,177 samples, 0.11%)</title><rect x="652.8" y="245" width="0.9" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="655.82" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::GetSpectrumModel (161,203 samples, 0.02%)</title><rect x="327.0" y="485" width="0.2" height="15.0" fill="rgb(228,106,25)" rx="2" ry="2" />
+<text  x="330.02" y="495.5" ></text>
+</g>
+<g >
+<title>[libc.so.6] (124,394 samples, 0.01%)</title><rect x="776.2" y="261" width="0.1" height="15.0" fill="rgb(223,84,20)" rx="2" ry="2" />
+<text  x="779.16" y="271.5" ></text>
+</g>
+<g >
+<title>decltype  (153,618 samples, 0.02%)</title><rect x="689.5" y="389" width="0.1" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="692.48" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt;* std::__copy_move&lt;true, false, std::random_access_iterator_tag&gt;::__copy_m&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;*, ns3::Ptr&lt;ns3::PacketBurst&gt;*&gt; (1,932,346 samples, 0.20%)</title><rect x="634.3" y="437" width="1.5" height="15.0" fill="rgb(212,33,7)" rx="2" ry="2" />
+<text  x="637.27" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Object::DoDelete (667,572 samples, 0.07%)</title><rect x="612.8" y="501" width="0.5" height="15.0" fill="rgb(212,34,8)" rx="2" ry="2" />
+<text  x="615.81" y="511.5" ></text>
+</g>
+<g >
+<title>int* std::__copy_move_a&lt;false, int*, int*&gt; (195,561 samples, 0.02%)</title><rect x="304.3" y="485" width="0.1" height="15.0" fill="rgb(213,37,8)" rx="2" ry="2" />
+<text  x="307.29" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt; ns3::CreateObject&lt;ns3::PacketBurst&gt; (299,709 samples, 0.03%)</title><rect x="96.7" y="437" width="0.2" height="15.0" fill="rgb(205,4,0)" rx="2" ry="2" />
+<text  x="99.70" y="447.5" ></text>
+</g>
+<g >
+<title>std::move_iterator&lt;unsigned short*&gt; std::make_move_iterator&lt;unsigned short*&gt; (398,257 samples, 0.04%)</title><rect x="252.7" y="437" width="0.4" height="15.0" fill="rgb(211,29,6)" rx="2" ry="2" />
+<text  x="255.74" y="447.5" ></text>
+</g>
+<g >
+<title>unsigned long* std::__copy_move_a2&lt;false, unsigned long*, unsigned long*&gt; (228,596 samples, 0.02%)</title><rect x="199.7" y="373" width="0.2" height="15.0" fill="rgb(226,100,23)" rx="2" ry="2" />
+<text  x="202.70" y="383.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt;::~vector (183,938 samples, 0.02%)</title><rect x="106.9" y="341" width="0.2" height="15.0" fill="rgb(234,134,32)" rx="2" ry="2" />
+<text  x="109.93" y="351.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_Rb_tree_impl&lt;std::less&lt;int&gt;, true&gt;::_Rb_tree_impl (172,014 samples, 0.02%)</title><rect x="60.4" y="485" width="0.1" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="63.38" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::AttributeConstructionList::AttributeConstructionList (587,413 samples, 0.06%)</title><rect x="447.6" y="277" width="0.5" height="15.0" fill="rgb(231,122,29)" rx="2" ry="2" />
+<text  x="450.62" y="287.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_transfer (163,122 samples, 0.02%)</title><rect x="734.2" y="437" width="0.1" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="737.21" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::TbId_t::TbId_t (238,722 samples, 0.02%)</title><rect x="383.8" y="533" width="0.2" height="15.0" fill="rgb(219,65,15)" rx="2" ry="2" />
+<text  x="386.80" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;* std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_create_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; const&amp;&gt; (500,996 samples, 0.05%)</title><rect x="341.9" y="373" width="0.4" height="15.0" fill="rgb(227,104,24)" rx="2" ry="2" />
+<text  x="344.88" y="383.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::operator= (340,476 samples, 0.04%)</title><rect x="530.5" y="341" width="0.3" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="533.52" y="351.5" ></text>
+</g>
+<g >
+<title>__floatuntixf (240,107 samples, 0.02%)</title><rect x="407.1" y="469" width="0.1" height="15.0" fill="rgb(208,15,3)" rx="2" ry="2" />
+<text  x="410.05" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::MapScheduler::Insert (239,679 samples, 0.02%)</title><rect x="62.4" y="485" width="0.2" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="65.40" y="495.5" ></text>
+</g>
+<g >
+<title> (151,530 samples, 0.02%)</title><rect x="717.1" y="485" width="0.1" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="720.11" y="495.5" ></text>
+</g>
+<g >
+<title>std::__detail::_List_node_header::_List_node_header (157,771 samples, 0.02%)</title><rect x="721.4" y="453" width="0.1" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="724.37" y="463.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::~list (300,600 samples, 0.03%)</title><rect x="165.7" y="357" width="0.3" height="15.0" fill="rgb(238,152,36)" rx="2" ry="2" />
+<text  x="168.73" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::Object::Construct (3,213,288 samples, 0.33%)</title><rect x="540.3" y="293" width="2.6" height="15.0" fill="rgb(228,108,26)" rx="2" ry="2" />
+<text  x="543.33" y="303.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::begin (594,572 samples, 0.06%)</title><rect x="714.2" y="469" width="0.4" height="15.0" fill="rgb(206,6,1)" rx="2" ry="2" />
+<text  x="717.17" y="479.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::deallocate (190,533 samples, 0.02%)</title><rect x="392.3" y="453" width="0.1" height="15.0" fill="rgb(209,20,4)" rx="2" ry="2" />
+<text  x="395.30" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::IidManager::GetParent (358,780 samples, 0.04%)</title><rect x="34.6" y="405" width="0.3" height="15.0" fill="rgb(217,59,14)" rx="2" ry="2" />
+<text  x="37.64" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_get_insert_hint_unique_pos (848,537 samples, 0.09%)</title><rect x="272.1" y="437" width="0.7" height="15.0" fill="rgb(209,22,5)" rx="2" ry="2" />
+<text  x="275.14" y="447.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt;::vector (788,613 samples, 0.08%)</title><rect x="228.7" y="453" width="0.6" height="15.0" fill="rgb(218,61,14)" rx="2" ry="2" />
+<text  x="231.67" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::GetValuesN (126,759 samples, 0.01%)</title><rect x="600.4" y="309" width="0.1" height="15.0" fill="rgb(251,212,50)" rx="2" ry="2" />
+<text  x="603.38" y="319.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Ptr&lt;ns3::Object&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Object&gt; &gt; &gt;::vector (573,370 samples, 0.06%)</title><rect x="446.9" y="261" width="0.4" height="15.0" fill="rgb(237,147,35)" rx="2" ry="2" />
+<text  x="449.87" y="271.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::empty (167,279 samples, 0.02%)</title><rect x="619.5" y="533" width="0.1" height="15.0" fill="rgb(243,177,42)" rx="2" ry="2" />
+<text  x="622.47" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;ns3::DlDciListElement_s, std::allocator&lt;ns3::DlDciListElement_s&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;ns3::DlDciListElement_s, std::allocator&lt;ns3::DlDciListElement_s&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;ns3::DlDciListElement_s, std::allocator&lt;ns3::DlDciListElement_s&gt; &gt; &gt; &gt; &gt;::_S_key (309,647 samples, 0.03%)</title><rect x="187.3" y="437" width="0.3" height="15.0" fill="rgb(237,150,35)" rx="2" ry="2" />
+<text  x="190.35" y="447.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::max_size (200,229 samples, 0.02%)</title><rect x="215.2" y="421" width="0.2" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="218.23" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::ByteTagList::Add (1,981,337 samples, 0.20%)</title><rect x="553.3" y="245" width="1.6" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="556.29" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::SpectrumValue, ns3::Empty, ns3::DefaultDeleter&lt;ns3::SpectrumValue&gt; &gt;::operator= (126,989 samples, 0.01%)</title><rect x="604.3" y="309" width="0.1" height="15.0" fill="rgb(250,210,50)" rx="2" ry="2" />
+<text  x="607.28" y="319.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt; &gt;::allocate (659,007 samples, 0.07%)</title><rect x="270.3" y="389" width="0.6" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="273.32" y="399.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::uninitialized_fill_n&lt;unsigned char*, unsigned long, unsigned char&gt; (378,589 samples, 0.04%)</title><rect x="216.0" y="437" width="0.3" height="15.0" fill="rgb(247,194,46)" rx="2" ry="2" />
+<text  x="218.97" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Callback&lt;void, ns3::SpectrumValue const&amp;&gt;::Callback&lt;void  (240,445 samples, 0.02%)</title><rect x="468.1" y="437" width="0.2" height="15.0" fill="rgb(231,122,29)" rx="2" ry="2" />
+<text  x="471.13" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultSimulatorImpl::Schedule (1,203,174 samples, 0.12%)</title><rect x="637.2" y="501" width="1.0" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="640.19" y="511.5" ></text>
+</g>
+<g >
+<title>std::_List_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::insert&lt;std::_List_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;, void&gt; (1,819,829 samples, 0.19%)</title><rect x="721.1" y="517" width="1.4" height="15.0" fill="rgb(233,129,30)" rx="2" ry="2" />
+<text  x="724.05" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::TbId_t, std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::_Select1st&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::_M_drop_node (229,826 samples, 0.02%)</title><rect x="506.3" y="485" width="0.2" height="15.0" fill="rgb(222,79,18)" rx="2" ry="2" />
+<text  x="509.35" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt;::_M_valptr (344,085 samples, 0.04%)</title><rect x="241.9" y="421" width="0.3" height="15.0" fill="rgb(249,206,49)" rx="2" ry="2" />
+<text  x="244.93" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt; &gt; &gt;::_M_mbegin (144,996 samples, 0.01%)</title><rect x="157.8" y="357" width="0.1" height="15.0" fill="rgb(242,174,41)" rx="2" ry="2" />
+<text  x="160.77" y="367.5" ></text>
+</g>
+<g >
+<title>[libm.so.6] (150,649 samples, 0.02%)</title><rect x="582.3" y="293" width="0.1" height="15.0" fill="rgb(208,16,4)" rx="2" ry="2" />
+<text  x="585.25" y="303.5" ></text>
+</g>
+<g >
+<title>[libc.so.6] (923,730,017 samples, 95.25%)</title><rect x="35.5" y="805" width="743.0" height="15.0" fill="rgb(223,84,20)" rx="2" ry="2" />
+<text  x="38.54" y="815.5" >[libc.so.6]</text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::operator= (707,925 samples, 0.07%)</title><rect x="72.2" y="421" width="0.6" height="15.0" fill="rgb(243,175,42)" rx="2" ry="2" />
+<text  x="75.21" y="431.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::CqiListElement_s, std::allocator&lt;ns3::CqiListElement_s&gt; &gt;::at (149,647 samples, 0.02%)</title><rect x="137.7" y="485" width="0.2" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="140.75" y="495.5" ></text>
+</g>
+<g >
+<title>operator new (165,071 samples, 0.02%)</title><rect x="564.1" y="69" width="0.1" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="567.07" y="79.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;::end (182,299 samples, 0.02%)</title><rect x="722.9" y="501" width="0.1" height="15.0" fill="rgb(239,159,38)" rx="2" ry="2" />
+<text  x="725.90" y="511.5" ></text>
+</g>
+<g >
+<title>decltype  (998,649 samples, 0.10%)</title><rect x="191.2" y="389" width="0.8" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="194.23" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultDeleter&lt;ns3::EventImpl&gt;::Delete (401,412 samples, 0.04%)</title><rect x="727.5" y="469" width="0.3" height="15.0" fill="rgb(240,163,39)" rx="2" ry="2" />
+<text  x="730.52" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_get_insert_hint_unique_pos (202,320 samples, 0.02%)</title><rect x="659.4" y="469" width="0.2" height="15.0" fill="rgb(240,162,38)" rx="2" ry="2" />
+<text  x="662.40" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy::CreateSrsCqiReport (244,160 samples, 0.03%)</title><rect x="612.0" y="325" width="0.2" height="15.0" fill="rgb(214,43,10)" rx="2" ry="2" />
+<text  x="615.01" y="335.5" ></text>
+</g>
+<g >
+<title>std::_Function_base::_Function_base (342,542 samples, 0.04%)</title><rect x="639.3" y="469" width="0.3" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="642.33" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::~PacketBurst (269,240 samples, 0.03%)</title><rect x="120.0" y="341" width="0.2" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="122.96" y="351.5" ></text>
+</g>
+<g >
+<title>__do_global_dtors_aux (155,299 samples, 0.02%)</title><rect x="35.5" y="725" width="0.2" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="38.54" y="735.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt;::_M_ptr (277,428 samples, 0.03%)</title><rect x="180.7" y="389" width="0.2" height="15.0" fill="rgb(206,4,1)" rx="2" ry="2" />
+<text  x="183.68" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_emplace_hint_unique&lt;std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (538,288 samples, 0.06%)</title><rect x="108.5" y="437" width="0.4" height="15.0" fill="rgb(248,201,48)" rx="2" ry="2" />
+<text  x="111.50" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumSignalParameters::SpectrumSignalParameters (5,377,108 samples, 0.55%)</title><rect x="314.2" y="453" width="4.4" height="15.0" fill="rgb(219,67,16)" rx="2" ry="2" />
+<text  x="317.24" y="463.5" ></text>
+</g>
+<g >
+<title>operator new (169,709 samples, 0.02%)</title><rect x="520.3" y="229" width="0.1" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="523.29" y="239.5" ></text>
+</g>
+<g >
+<title>std::_Function_base::_Function_base (186,634 samples, 0.02%)</title><rect x="283.4" y="485" width="0.1" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="286.37" y="495.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy_aux&lt;false&gt;::__destroy&lt;__gnu_cxx::__normal_iterator&lt;ns3::DlInfoListElement_s*, std::vector&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt; &gt; &gt; (269,165 samples, 0.03%)</title><rect x="207.6" y="437" width="0.2" height="15.0" fill="rgb(211,31,7)" rx="2" ry="2" />
+<text  x="210.57" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt; &gt;::_M_valptr (227,886 samples, 0.02%)</title><rect x="298.3" y="405" width="0.2" height="15.0" fill="rgb(222,81,19)" rx="2" ry="2" />
+<text  x="301.34" y="415.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::_M_range_check (187,936 samples, 0.02%)</title><rect x="678.3" y="469" width="0.2" height="15.0" fill="rgb(221,76,18)" rx="2" ry="2" />
+<text  x="681.31" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumValueHelper::CreateTxPowerSpectralDensity (1,022,169 samples, 0.11%)</title><rect x="111.4" y="485" width="0.8" height="15.0" fill="rgb(250,209,50)" rx="2" ry="2" />
+<text  x="114.35" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::operator+ (125,077 samples, 0.01%)</title><rect x="62.8" y="485" width="0.1" height="15.0" fill="rgb(244,182,43)" rx="2" ry="2" />
+<text  x="65.82" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt; &gt;::_M_valptr (323,451 samples, 0.03%)</title><rect x="433.8" y="261" width="0.3" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="436.84" y="271.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, unsigned short, std::_Identity&lt;unsigned short&gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;unsigned short&gt; &gt;::find (273,587 samples, 0.03%)</title><rect x="194.7" y="469" width="0.2" height="15.0" fill="rgb(238,154,36)" rx="2" ry="2" />
+<text  x="197.68" y="479.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;std::_List_node&lt;ns3::UlDciLteControlMessage&gt; &gt;::deallocate (278,972 samples, 0.03%)</title><rect x="291.0" y="325" width="0.2" height="15.0" fill="rgb(208,13,3)" rx="2" ry="2" />
+<text  x="293.95" y="335.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::TbId_t, std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::_Select1st&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::_S_key (313,691 samples, 0.03%)</title><rect x="528.0" y="277" width="0.3" height="15.0" fill="rgb(220,73,17)" rx="2" ry="2" />
+<text  x="531.03" y="287.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::BuildDataListElement_s, std::allocator&lt;ns3::BuildDataListElement_s&gt; &gt;::_Vector_base (790,436 samples, 0.08%)</title><rect x="142.3" y="437" width="0.7" height="15.0" fill="rgb(224,89,21)" rx="2" ry="2" />
+<text  x="145.33" y="447.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_M_fill_initialize (492,278 samples, 0.05%)</title><rect x="215.9" y="469" width="0.4" height="15.0" fill="rgb(205,0,0)" rx="2" ry="2" />
+<text  x="218.88" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::operator= (270,541 samples, 0.03%)</title><rect x="147.9" y="421" width="0.2" height="15.0" fill="rgb(211,28,6)" rx="2" ry="2" />
+<text  x="150.88" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Bind_helper&lt;std::__or_&lt;std::is_integral&lt;std::decay&lt;void  (857,965 samples, 0.09%)</title><rect x="638.3" y="485" width="0.7" height="15.0" fill="rgb(237,148,35)" rx="2" ry="2" />
+<text  x="641.33" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_get_insert_hint_unique_pos (687,499 samples, 0.07%)</title><rect x="335.8" y="389" width="0.6" height="15.0" fill="rgb(209,22,5)" rx="2" ry="2" />
+<text  x="338.80" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt;* std::__copy_move_a2&lt;true, ns3::Ptr&lt;ns3::PacketBurst&gt;*, ns3::Ptr&lt;ns3::PacketBurst&gt;*&gt; (5,897,576 samples, 0.61%)</title><rect x="376.8" y="453" width="4.8" height="15.0" fill="rgb(213,38,9)" rx="2" ry="2" />
+<text  x="379.82" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_Rb_tree_impl&lt;std::less&lt;unsigned int&gt;, true&gt;::_Rb_tree_impl (152,827 samples, 0.02%)</title><rect x="667.8" y="245" width="0.2" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="670.83" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::EventImpl::Invoke (5,321,712 samples, 0.55%)</title><rect x="11.2" y="741" width="4.3" height="15.0" fill="rgb(209,20,4)" rx="2" ry="2" />
+<text  x="14.17" y="751.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::AttributeConstructionList::Item, std::allocator&lt;ns3::AttributeConstructionList::Item&gt; &gt;::list (652,304 samples, 0.07%)</title><rect x="371.4" y="485" width="0.6" height="15.0" fill="rgb(252,219,52)" rx="2" ry="2" />
+<text  x="374.45" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_S_relocate (381,047 samples, 0.04%)</title><rect x="694.0" y="453" width="0.3" height="15.0" fill="rgb(228,110,26)" rx="2" ry="2" />
+<text  x="697.03" y="463.5" ></text>
+</g>
+<g >
+<title>std::map&lt;ns3::TbId_t, ns3::tbInfo_t, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::find (1,799,150 samples, 0.19%)</title><rect x="506.9" y="549" width="1.5" height="15.0" fill="rgb(224,87,20)" rx="2" ry="2" />
+<text  x="509.91" y="559.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; (481,004 samples, 0.05%)</title><rect x="271.2" y="357" width="0.3" height="15.0" fill="rgb(213,37,9)" rx="2" ry="2" />
+<text  x="274.16" y="367.5" ></text>
+</g>
+<g >
+<title>unsigned short* std::__uninitialized_copy&lt;true&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;unsigned short const*, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, unsigned short*&gt; (545,960 samples, 0.06%)</title><rect x="217.5" y="421" width="0.4" height="15.0" fill="rgb(217,57,13)" rx="2" ry="2" />
+<text  x="220.47" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::LteHarqPhy::GetHarqProcessInfoUl (4,963,729 samples, 0.51%)</title><rect x="522.1" y="357" width="4.0" height="15.0" fill="rgb(239,157,37)" rx="2" ry="2" />
+<text  x="525.08" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteNetDevice&gt;::Ptr (241,803 samples, 0.02%)</title><rect x="582.7" y="293" width="0.2" height="15.0" fill="rgb(233,132,31)" rx="2" ry="2" />
+<text  x="585.71" y="303.5" ></text>
+</g>
+<g >
+<title>std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt; &gt;::operator (231,657 samples, 0.02%)</title><rect x="236.0" y="421" width="0.2" height="15.0" fill="rgb(218,61,14)" rx="2" ry="2" />
+<text  x="238.98" y="431.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::_M_default_initialize (1,464,943 samples, 0.15%)</title><rect x="300.9" y="437" width="1.2" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="303.91" y="447.5" ></text>
+</g>
+<g >
+<title>double* std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, double*&gt; (165,918 samples, 0.02%)</title><rect x="78.3" y="405" width="0.2" height="15.0" fill="rgb(210,23,5)" rx="2" ry="2" />
+<text  x="81.32" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::TypeId::GetAttributeN (1,150,317 samples, 0.12%)</title><rect x="33.7" y="421" width="0.9" height="15.0" fill="rgb(225,95,22)" rx="2" ry="2" />
+<text  x="36.68" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::ConstantPositionMobilityModel::DoGetPosition (190,065 samples, 0.02%)</title><rect x="649.3" y="501" width="0.2" height="15.0" fill="rgb(212,32,7)" rx="2" ry="2" />
+<text  x="652.34" y="511.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;::_M_clear (2,445,979 samples, 0.25%)</title><rect x="501.0" y="533" width="1.9" height="15.0" fill="rgb(245,186,44)" rx="2" ry="2" />
+<text  x="503.96" y="543.5" ></text>
+</g>
+<g >
+<title>[ld-linux-x86-64.so.2] (206,546 samples, 0.02%)</title><rect x="10.1" y="757" width="0.1" height="15.0" fill="rgb(243,178,42)" rx="2" ry="2" />
+<text  x="13.05" y="767.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_Vector_base (663,076 samples, 0.07%)</title><rect x="413.0" y="485" width="0.6" height="15.0" fill="rgb(237,150,35)" rx="2" ry="2" />
+<text  x="416.04" y="495.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned short const, ns3::SbMeasResult_s&gt; &gt;::_M_ptr (163,489 samples, 0.02%)</title><rect x="185.7" y="405" width="0.1" height="15.0" fill="rgb(207,12,2)" rx="2" ry="2" />
+<text  x="188.68" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::_M_allocate (360,140 samples, 0.04%)</title><rect x="480.0" y="261" width="0.2" height="15.0" fill="rgb(220,70,16)" rx="2" ry="2" />
+<text  x="482.95" y="271.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::_M_range_check (154,783 samples, 0.02%)</title><rect x="589.3" y="229" width="0.1" height="15.0" fill="rgb(249,203,48)" rx="2" ry="2" />
+<text  x="592.26" y="239.5" ></text>
+</g>
+<g >
+<title>std::_List_iterator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt;::operator* (237,279 samples, 0.02%)</title><rect x="496.3" y="549" width="0.2" height="15.0" fill="rgb(224,91,21)" rx="2" ry="2" />
+<text  x="499.28" y="559.5" ></text>
+</g>
+<g >
+<title>ns3::operator&lt; (377,493 samples, 0.04%)</title><rect x="85.8" y="373" width="0.3" height="15.0" fill="rgb(234,137,32)" rx="2" ry="2" />
+<text  x="88.81" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::DlCqiLteControlMessage::SetDlCqi (1,473,854 samples, 0.15%)</title><rect x="585.4" y="293" width="1.1" height="15.0" fill="rgb(254,226,54)" rx="2" ry="2" />
+<text  x="588.35" y="303.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::~vector (221,743 samples, 0.02%)</title><rect x="139.3" y="453" width="0.2" height="15.0" fill="rgb(243,174,41)" rx="2" ry="2" />
+<text  x="142.29" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt;::at (473,755 samples, 0.05%)</title><rect x="149.8" y="405" width="0.4" height="15.0" fill="rgb(248,200,47)" rx="2" ry="2" />
+<text  x="152.84" y="415.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::ByteTagListData*, std::allocator&lt;ns3::ByteTagListData*&gt; &gt;::pop_back (350,982 samples, 0.04%)</title><rect x="30.7" y="373" width="0.2" height="15.0" fill="rgb(229,112,26)" rx="2" ry="2" />
+<text  x="33.67" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Bind&lt;void  (378,932 samples, 0.04%)</title><rect x="618.7" y="453" width="0.3" height="15.0" fill="rgb(253,221,52)" rx="2" ry="2" />
+<text  x="621.72" y="463.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_List_node&lt;ns3::UlDciLteControlMessage&gt; &gt; &gt;::destroy&lt;ns3::UlDciLteControlMessage&gt; (234,425 samples, 0.02%)</title><rect x="393.6" y="501" width="0.2" height="15.0" fill="rgb(232,126,30)" rx="2" ry="2" />
+<text  x="396.63" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::int64x64_t::GetDouble (604,584 samples, 0.06%)</title><rect x="406.8" y="485" width="0.5" height="15.0" fill="rgb(230,116,27)" rx="2" ry="2" />
+<text  x="409.83" y="495.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;std::is_constructible&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt;::value, std::pair&lt;std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, bool&gt; &gt;::type std::map&lt;ns3::Scheduler::EventKey, ns3::EventImpl*, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::insert&lt;std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (297,456 samples, 0.03%)</title><rect x="116.0" y="421" width="0.2" height="15.0" fill="rgb(211,29,7)" rx="2" ry="2" />
+<text  x="118.97" y="431.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::copy&lt;__gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, unsigned char*&gt; (556,653 samples, 0.06%)</title><rect x="126.9" y="325" width="0.4" height="15.0" fill="rgb(241,168,40)" rx="2" ry="2" />
+<text  x="129.88" y="335.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_M_get_Tp_allocator (169,242 samples, 0.02%)</title><rect x="57.3" y="437" width="0.2" height="15.0" fill="rgb(227,101,24)" rx="2" ry="2" />
+<text  x="60.33" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Angles::Angles (1,554,886 samples, 0.16%)</title><rect x="702.3" y="533" width="1.2" height="15.0" fill="rgb(254,226,54)" rx="2" ry="2" />
+<text  x="705.27" y="543.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;::_M_initialize_dispatch&lt;std::_List_const_iterator&lt;ns3::UlDciLteControlMessage&gt; &gt; (139,939 samples, 0.01%)</title><rect x="110.3" y="501" width="0.1" height="15.0" fill="rgb(236,145,34)" rx="2" ry="2" />
+<text  x="113.27" y="511.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::operator= (606,661 samples, 0.06%)</title><rect x="482.6" y="309" width="0.5" height="15.0" fill="rgb(243,175,42)" rx="2" ry="2" />
+<text  x="485.57" y="319.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt; &gt; &gt;::operator[] (278,129 samples, 0.03%)</title><rect x="289.2" y="517" width="0.2" height="15.0" fill="rgb(216,54,13)" rx="2" ry="2" />
+<text  x="292.18" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::LteUePowerControl::ReportTpc (2,374,811 samples, 0.24%)</title><rect x="531.7" y="357" width="1.9" height="15.0" fill="rgb(221,74,17)" rx="2" ry="2" />
+<text  x="534.68" y="367.5" ></text>
+</g>
+<g >
+<title>std::tuple_element&lt;2ul, std::tuple&lt;ns3::LteUePhy*, unsigned int, unsigned int&gt; &gt;::type&amp; std::get&lt;2ul, ns3::LteUePhy*, unsigned int, unsigned int&gt; (349,917 samples, 0.04%)</title><rect x="756.3" y="597" width="0.2" height="15.0" fill="rgb(251,213,50)" rx="2" ry="2" />
+<text  x="759.26" y="607.5" ></text>
+</g>
+<g >
+<title>std::tuple_element&lt;0ul, std::tuple&lt;ns3::LteEnbPhy*&gt; &gt;::type&amp; std::get&lt;0ul, ns3::LteEnbPhy*&gt; (491,352 samples, 0.05%)</title><rect x="752.2" y="597" width="0.4" height="15.0" fill="rgb(242,174,41)" rx="2" ry="2" />
+<text  x="755.25" y="607.5" ></text>
+</g>
+<g >
+<title>std::_Bvector_base&lt;std::allocator&lt;bool&gt; &gt;::_M_deallocate (352,416 samples, 0.04%)</title><rect x="195.8" y="469" width="0.3" height="15.0" fill="rgb(237,149,35)" rx="2" ry="2" />
+<text  x="198.83" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_Rb_tree (719,320 samples, 0.07%)</title><rect x="668.3" y="485" width="0.6" height="15.0" fill="rgb(252,219,52)" rx="2" ry="2" />
+<text  x="671.32" y="495.5" ></text>
+</g>
+<g >
+<title>decltype  (151,782 samples, 0.02%)</title><rect x="122.4" y="485" width="0.1" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="125.36" y="495.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::list (1,967,941 samples, 0.20%)</title><rect x="354.7" y="533" width="1.6" height="15.0" fill="rgb(236,145,34)" rx="2" ry="2" />
+<text  x="357.67" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::TbId_t, std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::_Select1st&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::_M_get_node (418,393 samples, 0.04%)</title><rect x="384.4" y="453" width="0.3" height="15.0" fill="rgb(228,105,25)" rx="2" ry="2" />
+<text  x="387.36" y="463.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;int*&gt; (161,562 samples, 0.02%)</title><rect x="575.3" y="325" width="0.1" height="15.0" fill="rgb(235,139,33)" rx="2" ry="2" />
+<text  x="578.30" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::FfMacSchedSapUser::SchedDlConfigIndParameters::SchedDlConfigIndParameters (1,092,598 samples, 0.11%)</title><rect x="173.9" y="485" width="0.9" height="15.0" fill="rgb(208,15,3)" rx="2" ry="2" />
+<text  x="176.88" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_M_erase (702,211 samples, 0.07%)</title><rect x="394.2" y="469" width="0.5" height="15.0" fill="rgb(227,102,24)" rx="2" ry="2" />
+<text  x="397.16" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;* std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_create_node&lt;unsigned int const&amp;, ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp;&gt; (849,776 samples, 0.09%)</title><rect x="658.5" y="453" width="0.7" height="15.0" fill="rgb(245,186,44)" rx="2" ry="2" />
+<text  x="661.48" y="463.5" ></text>
+</g>
+<g >
+<title>std::function&lt;void  (27,867,459 samples, 2.87%)</title><rect x="441.5" y="437" width="22.4" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="444.52" y="447.5" >s..</text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt;::_M_create_storage (499,008 samples, 0.05%)</title><rect x="260.8" y="357" width="0.4" height="15.0" fill="rgb(206,4,1)" rx="2" ry="2" />
+<text  x="263.77" y="367.5" ></text>
+</g>
+<g >
+<title>unsigned short* std::copy&lt;std::move_iterator&lt;unsigned short*&gt;, unsigned short*&gt; (687,255 samples, 0.07%)</title><rect x="253.1" y="389" width="0.5" height="15.0" fill="rgb(234,136,32)" rx="2" ry="2" />
+<text  x="256.10" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::Simulator::DoSchedule (1,350,821 samples, 0.14%)</title><rect x="304.9" y="501" width="1.1" height="15.0" fill="rgb(222,79,18)" rx="2" ry="2" />
+<text  x="307.95" y="511.5" ></text>
+</g>
+<g >
+<title>void std::_Function_base::_Base_manager&lt;std::_Bind&lt;void  (240,043 samples, 0.02%)</title><rect x="727.1" y="453" width="0.2" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="730.07" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;4ul, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::_Tuple_impl&lt;ns3::Ptr&lt;ns3::SpectrumPhy&gt;&amp;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;&amp;, void&gt; (317,763 samples, 0.03%)</title><rect x="340.5" y="341" width="0.3" height="15.0" fill="rgb(208,17,4)" rx="2" ry="2" />
+<text  x="343.52" y="351.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::lower_bound (163,786 samples, 0.02%)</title><rect x="82.5" y="501" width="0.1" height="15.0" fill="rgb(247,197,47)" rx="2" ry="2" />
+<text  x="85.49" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt; &gt;::_M_mbegin (229,108 samples, 0.02%)</title><rect x="320.7" y="437" width="0.2" height="15.0" fill="rgb(208,16,3)" rx="2" ry="2" />
+<text  x="323.69" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy*&amp;&amp; std::forward&lt;ns3::LteEnbPhy*&gt; (159,430 samples, 0.02%)</title><rect x="267.2" y="533" width="0.1" height="15.0" fill="rgb(238,152,36)" rx="2" ry="2" />
+<text  x="270.18" y="543.5" ></text>
+</g>
+<g >
+<title>cfree (159,331 samples, 0.02%)</title><rect x="453.6" y="69" width="0.1" height="15.0" fill="rgb(223,86,20)" rx="2" ry="2" />
+<text  x="456.61" y="79.5" ></text>
+</g>
+<g >
+<title>double&amp; std::__get_helper&lt;2ul, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt; (437,238 samples, 0.05%)</title><rect x="756.6" y="581" width="0.3" height="15.0" fill="rgb(240,161,38)" rx="2" ry="2" />
+<text  x="759.58" y="591.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;::_M_addr (164,453 samples, 0.02%)</title><rect x="222.0" y="389" width="0.1" height="15.0" fill="rgb(242,172,41)" rx="2" ry="2" />
+<text  x="224.96" y="399.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::RlcPduListElement_s*, ns3::RlcPduListElement_s&gt; (190,862 samples, 0.02%)</title><rect x="209.1" y="453" width="0.2" height="15.0" fill="rgb(236,143,34)" rx="2" ry="2" />
+<text  x="212.12" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::vector (719,050 samples, 0.07%)</title><rect x="215.8" y="485" width="0.5" height="15.0" fill="rgb(206,9,2)" rx="2" ry="2" />
+<text  x="218.76" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt;::vector (1,038,323 samples, 0.11%)</title><rect x="583.7" y="261" width="0.8" height="15.0" fill="rgb(248,198,47)" rx="2" ry="2" />
+<text  x="586.65" y="271.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::IidManager::IidInformation, std::allocator&lt;ns3::IidManager::IidInformation&gt; &gt;::operator[] (167,043 samples, 0.02%)</title><rect x="541.4" y="213" width="0.2" height="15.0" fill="rgb(214,41,9)" rx="2" ry="2" />
+<text  x="544.42" y="223.5" ></text>
+</g>
+<g >
+<title>ns3::EnbMacMemberFfMacSchedSapUser::SchedDlConfigInd (3,932,604 samples, 0.41%)</title><rect x="94.9" y="469" width="3.1" height="15.0" fill="rgb(241,166,39)" rx="2" ry="2" />
+<text  x="97.86" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::end (384,192 samples, 0.04%)</title><rect x="687.4" y="453" width="0.3" height="15.0" fill="rgb(205,0,0)" rx="2" ry="2" />
+<text  x="690.39" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::CeBitmap_e const* std::__niter_base&lt;ns3::CeBitmap_e const*, std::vector&lt;ns3::CeBitmap_e, std::allocator&lt;ns3::CeBitmap_e&gt; &gt; &gt; (152,075 samples, 0.02%)</title><rect x="204.0" y="309" width="0.1" height="15.0" fill="rgb(253,224,53)" rx="2" ry="2" />
+<text  x="206.96" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::AddPacket (234,373 samples, 0.02%)</title><rect x="17.4" y="341" width="0.2" height="15.0" fill="rgb(207,10,2)" rx="2" ry="2" />
+<text  x="20.39" y="351.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy_aux&lt;false&gt;::__destroy&lt;ns3::FfMacSchedSapProvider::SchedUlCqiInfoReqParameters*&gt; (1,018,939 samples, 0.11%)</title><rect x="263.2" y="453" width="0.9" height="15.0" fill="rgb(250,210,50)" rx="2" ry="2" />
+<text  x="266.24" y="463.5" ></text>
+</g>
+<g >
+<title>void std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_construct_node&lt;unsigned int const&amp;, ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp;&gt; (251,956 samples, 0.03%)</title><rect x="81.9" y="437" width="0.3" height="15.0" fill="rgb(234,135,32)" rx="2" ry="2" />
+<text  x="84.95" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::HarqStatus_e* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;ns3::DlInfoListElement_s::HarqStatus_e const*, std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt; &gt;, ns3::DlInfoListElement_s::HarqStatus_e*, ns3::DlInfoListElement_s::HarqStatus_e&gt; (723,994 samples, 0.07%)</title><rect x="444.1" y="309" width="0.6" height="15.0" fill="rgb(235,140,33)" rx="2" ry="2" />
+<text  x="447.08" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::EventId ns3::Simulator::Schedule&lt;void  (790,276 samples, 0.08%)</title><rect x="726.7" y="517" width="0.6" height="15.0" fill="rgb(253,224,53)" rx="2" ry="2" />
+<text  x="729.66" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt; &gt; &gt;::_S_key (502,432 samples, 0.05%)</title><rect x="235.8" y="437" width="0.4" height="15.0" fill="rgb(227,104,25)" rx="2" ry="2" />
+<text  x="238.76" y="447.5" ></text>
+</g>
+<g >
+<title>std::remove_reference&lt;ns3::HigherLayerSelected_s&amp;&gt;::type&amp;&amp; std::move&lt;ns3::HigherLayerSelected_s&amp;&gt; (170,828 samples, 0.02%)</title><rect x="595.6" y="197" width="0.1" height="15.0" fill="rgb(206,6,1)" rx="2" ry="2" />
+<text  x="598.55" y="207.5" ></text>
+</g>
+<g >
+<title>ns3::EnbMacMemberLteEnbPhySapUser::SubframeIndication (4,972,136 samples, 0.51%)</title><rect x="11.4" y="565" width="4.0" height="15.0" fill="rgb(252,216,51)" rx="2" ry="2" />
+<text  x="14.43" y="575.5" ></text>
+</g>
+<g >
+<title>ns3::PacketMetadata::PacketMetadata (1,027,645 samples, 0.11%)</title><rect x="14.6" y="373" width="0.8" height="15.0" fill="rgb(231,121,28)" rx="2" ry="2" />
+<text  x="17.57" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteControlMessage&gt;::Ptr&lt;ns3::DlDciLteControlMessage&gt; (316,058 samples, 0.03%)</title><rect x="160.4" y="453" width="0.3" height="15.0" fill="rgb(224,89,21)" rx="2" ry="2" />
+<text  x="163.40" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::vector (200,365 samples, 0.02%)</title><rect x="442.8" y="197" width="0.2" height="15.0" fill="rgb(206,9,2)" rx="2" ry="2" />
+<text  x="445.84" y="207.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt; &gt;::end (422,449 samples, 0.04%)</title><rect x="179.5" y="469" width="0.3" height="15.0" fill="rgb(230,117,28)" rx="2" ry="2" />
+<text  x="182.49" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt;::vector (765,141 samples, 0.08%)</title><rect x="204.7" y="405" width="0.6" height="15.0" fill="rgb(215,48,11)" rx="2" ry="2" />
+<text  x="207.67" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::PacketTagList::Add (1,584,708 samples, 0.16%)</title><rect x="561.5" y="181" width="1.3" height="15.0" fill="rgb(248,197,47)" rx="2" ry="2" />
+<text  x="564.52" y="191.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::Buffer::Data* const*, std::vector&lt;ns3::Buffer::Data*, std::allocator&lt;ns3::Buffer::Data*&gt; &gt; &gt;::__normal_iterator (154,434 samples, 0.02%)</title><rect x="32.4" y="309" width="0.2" height="15.0" fill="rgb(205,0,0)" rx="2" ry="2" />
+<text  x="35.45" y="319.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;::allocate (428,661 samples, 0.04%)</title><rect x="724.5" y="437" width="0.3" height="15.0" fill="rgb(227,104,24)" rx="2" ry="2" />
+<text  x="727.45" y="447.5" ></text>
+</g>
+<g >
+<title>std::tuple&lt;ns3::LteSpectrumPhy*&gt;::tuple (264,111 samples, 0.03%)</title><rect x="307.7" y="405" width="0.2" height="15.0" fill="rgb(217,55,13)" rx="2" ry="2" />
+<text  x="310.71" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::NoOpComponentCarrierManager::DoReportBufferStatus (747,299 samples, 0.08%)</title><rect x="12.5" y="373" width="0.6" height="15.0" fill="rgb(230,119,28)" rx="2" ry="2" />
+<text  x="15.49" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::LteUePhy::UeMeasurementsElement&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::LteUePhy::UeMeasurementsElement&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::LteUePhy::UeMeasurementsElement&gt; &gt; &gt;::_M_lower_bound (202,753 samples, 0.02%)</title><rect x="726.4" y="293" width="0.1" height="15.0" fill="rgb(205,1,0)" rx="2" ry="2" />
+<text  x="729.36" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::UlInfoListElement_s* std::__uninitialized_copy&lt;false&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::UlInfoListElement_s const*, std::vector&lt;ns3::UlInfoListElement_s, std::allocator&lt;ns3::UlInfoListElement_s&gt; &gt; &gt;, ns3::UlInfoListElement_s*&gt; (794,783 samples, 0.08%)</title><rect x="266.2" y="453" width="0.7" height="15.0" fill="rgb(226,97,23)" rx="2" ry="2" />
+<text  x="269.23" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue&gt; ns3::Create&lt;ns3::SpectrumValue, ns3::Ptr&lt;ns3::SpectrumModel const&gt; const&amp;&gt; (1,007,918 samples, 0.10%)</title><rect x="718.1" y="485" width="0.8" height="15.0" fill="rgb(246,189,45)" rx="2" ry="2" />
+<text  x="721.12" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_M_begin (148,965 samples, 0.02%)</title><rect x="121.5" y="501" width="0.2" height="15.0" fill="rgb(248,199,47)" rx="2" ry="2" />
+<text  x="124.54" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Function_base::_Base_manager&lt;std::_Bind&lt;void  (488,113 samples, 0.05%)</title><rect x="640.5" y="389" width="0.4" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="643.55" y="399.5" ></text>
+</g>
+<g >
+<title>std::operator== (145,718 samples, 0.02%)</title><rect x="109.4" y="485" width="0.1" height="15.0" fill="rgb(229,110,26)" rx="2" ry="2" />
+<text  x="112.39" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt;::vector (275,175 samples, 0.03%)</title><rect x="132.0" y="501" width="0.2" height="15.0" fill="rgb(218,61,14)" rx="2" ry="2" />
+<text  x="135.02" y="511.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__promote_2&lt;decltype  (310,695 samples, 0.03%)</title><rect x="227.1" y="485" width="0.3" height="15.0" fill="rgb(250,209,50)" rx="2" ry="2" />
+<text  x="230.10" y="495.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::ByteTagListData**, std::vector&lt;ns3::ByteTagListData*, std::allocator&lt;ns3::ByteTagListData*&gt; &gt; &gt;::operator- (157,845 samples, 0.02%)</title><rect x="29.7" y="357" width="0.1" height="15.0" fill="rgb(248,198,47)" rx="2" ry="2" />
+<text  x="32.65" y="367.5" ></text>
+</g>
+<g >
+<title>void std::__invoke_impl&lt;void, ns3::Callback&lt;void, unsigned short, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;::Callback&lt;void  (1,115,555 samples, 0.12%)</title><rect x="725.7" y="437" width="0.9" height="15.0" fill="rgb(249,206,49)" rx="2" ry="2" />
+<text  x="728.69" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::ByteTagList::Iterator::PrepareForNext (615,765 samples, 0.06%)</title><rect x="426.7" y="197" width="0.4" height="15.0" fill="rgb(206,5,1)" rx="2" ry="2" />
+<text  x="429.65" y="207.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;::_M_move_assign (1,013,617 samples, 0.10%)</title><rect x="290.5" y="405" width="0.8" height="15.0" fill="rgb(208,16,3)" rx="2" ry="2" />
+<text  x="293.46" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_emplace_hint_unique&lt;std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (450,043 samples, 0.05%)</title><rect x="615.5" y="453" width="0.4" height="15.0" fill="rgb(248,201,48)" rx="2" ry="2" />
+<text  x="618.51" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt;::operator* (279,655 samples, 0.03%)</title><rect x="179.1" y="469" width="0.2" height="15.0" fill="rgb(220,71,17)" rx="2" ry="2" />
+<text  x="182.11" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteCcmMacSapProvider*&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteCcmMacSapProvider*&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteCcmMacSapProvider*&gt; &gt; &gt;::_S_key (572,914 samples, 0.06%)</title><rect x="458.4" y="229" width="0.5" height="15.0" fill="rgb(250,211,50)" rx="2" ry="2" />
+<text  x="461.44" y="239.5" ></text>
+</g>
+<g >
+<title> (207,486 samples, 0.02%)</title><rect x="408.8" y="517" width="0.2" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="411.85" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node_base::_S_maximum (160,901 samples, 0.02%)</title><rect x="59.1" y="437" width="0.1" height="15.0" fill="rgb(225,94,22)" rx="2" ry="2" />
+<text  x="62.08" y="447.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Callback&lt;void, ns3::PhyReceptionStatParameters&gt;, std::allocator&lt;ns3::Callback&lt;void, ns3::PhyReceptionStatParameters&gt; &gt; &gt;::end (157,995 samples, 0.02%)</title><rect x="494.0" y="533" width="0.1" height="15.0" fill="rgb(231,121,28)" rx="2" ry="2" />
+<text  x="496.97" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::CqiListElement_s::operator= (1,390,282 samples, 0.14%)</title><rect x="585.4" y="277" width="1.1" height="15.0" fill="rgb(207,11,2)" rx="2" ry="2" />
+<text  x="588.42" y="287.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::LteSpectrumModelId, std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt;, std::_Select1st&lt;std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt; &gt;, std::less&lt;ns3::LteSpectrumModelId&gt;, std::allocator&lt;std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt; &gt; &gt;::_S_key (491,785 samples, 0.05%)</title><rect x="55.4" y="437" width="0.4" height="15.0" fill="rgb(209,19,4)" rx="2" ry="2" />
+<text  x="58.36" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::RlcPduListElement_s* std::__uninitialized_copy&lt;false&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::RlcPduListElement_s const*, std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt;, ns3::RlcPduListElement_s*&gt; (980,187 samples, 0.10%)</title><rect x="211.8" y="373" width="0.8" height="15.0" fill="rgb(223,83,19)" rx="2" ry="2" />
+<text  x="214.84" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_get_insert_hint_unique_pos (200,604 samples, 0.02%)</title><rect x="707.0" y="405" width="0.2" height="15.0" fill="rgb(209,22,5)" rx="2" ry="2" />
+<text  x="710.00" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;int, std::allocator&lt;int&gt; &gt;::~_Vector_base (169,673 samples, 0.02%)</title><rect x="575.2" y="341" width="0.1" height="15.0" fill="rgb(251,213,51)" rx="2" ry="2" />
+<text  x="578.16" y="351.5" ></text>
+</g>
+<g >
+<title>std::map&lt;int, double, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::clear (301,718 samples, 0.03%)</title><rect x="121.5" y="533" width="0.3" height="15.0" fill="rgb(233,132,31)" rx="2" ry="2" />
+<text  x="124.51" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::HigherLayerSelected_s* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;ns3::HigherLayerSelected_s const*, std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt; &gt;, ns3::HigherLayerSelected_s*, ns3::HigherLayerSelected_s&gt; (213,295 samples, 0.02%)</title><rect x="583.7" y="245" width="0.2" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="586.69" y="255.5" ></text>
+</g>
+<g >
+<title>bool __gnu_cxx::operator==&lt;ns3::Buffer::Data* const*, std::vector&lt;ns3::Buffer::Data*, std::allocator&lt;ns3::Buffer::Data*&gt; &gt; &gt; (253,162 samples, 0.03%)</title><rect x="556.4" y="165" width="0.2" height="15.0" fill="rgb(244,183,43)" rx="2" ry="2" />
+<text  x="559.40" y="175.5" ></text>
+</g>
+<g >
+<title>std::_Function_base::_Function_base (204,573 samples, 0.02%)</title><rect x="63.8" y="469" width="0.1" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="66.78" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::TracedCallback&lt;unsigned short, unsigned char, unsigned int, unsigned long&gt;::operator (487,633 samples, 0.05%)</title><rect x="428.3" y="261" width="0.4" height="15.0" fill="rgb(227,104,25)" rx="2" ry="2" />
+<text  x="431.30" y="271.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::TbId_t, std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::_Select1st&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::_M_destroy_node (1,297,607 samples, 0.13%)</title><rect x="505.2" y="485" width="1.1" height="15.0" fill="rgb(219,66,15)" rx="2" ry="2" />
+<text  x="508.24" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::ByteTagListData*, std::allocator&lt;ns3::ByteTagListData*&gt; &gt;::push_back (480,087 samples, 0.05%)</title><rect x="452.7" y="69" width="0.4" height="15.0" fill="rgb(249,204,48)" rx="2" ry="2" />
+<text  x="455.67" y="79.5" ></text>
+</g>
+<g >
+<title>unsigned short* std::uninitialized_copy&lt;std::move_iterator&lt;unsigned short*&gt;, unsigned short*&gt; (154,651 samples, 0.02%)</title><rect x="106.3" y="405" width="0.1" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="109.25" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;::operator++ (161,661 samples, 0.02%)</title><rect x="497.1" y="549" width="0.2" height="15.0" fill="rgb(254,229,54)" rx="2" ry="2" />
+<text  x="500.14" y="559.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::BuildDataListElement_s, std::allocator&lt;ns3::BuildDataListElement_s&gt; &gt;::_Vector_impl_data::_Vector_impl_data (193,156 samples, 0.02%)</title><rect x="142.8" y="405" width="0.2" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="145.82" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumValueHelper::GetSpectrumModel (332,755 samples, 0.03%)</title><rect x="111.4" y="469" width="0.2" height="15.0" fill="rgb(207,12,3)" rx="2" ry="2" />
+<text  x="114.35" y="479.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;int*, int&gt; (265,597 samples, 0.03%)</title><rect x="506.1" y="389" width="0.2" height="15.0" fill="rgb(206,5,1)" rx="2" ry="2" />
+<text  x="509.07" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumModel::GetNumBands (216,568 samples, 0.02%)</title><rect x="300.0" y="453" width="0.2" height="15.0" fill="rgb(247,194,46)" rx="2" ry="2" />
+<text  x="303.02" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::~SpectrumValue (125,754 samples, 0.01%)</title><rect x="79.0" y="469" width="0.1" height="15.0" fill="rgb(247,193,46)" rx="2" ry="2" />
+<text  x="81.96" y="479.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::list (501,982 samples, 0.05%)</title><rect x="516.9" y="437" width="0.4" height="15.0" fill="rgb(236,145,34)" rx="2" ry="2" />
+<text  x="519.88" y="447.5" ></text>
+</g>
+<g >
+<title>std::tuple&lt;unsigned short const&amp;&gt;::tuple (265,541 samples, 0.03%)</title><rect x="191.8" y="373" width="0.2" height="15.0" fill="rgb(233,129,30)" rx="2" ry="2" />
+<text  x="194.82" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Bit_iterator_base::_Bit_iterator_base (148,793 samples, 0.02%)</title><rect x="195.5" y="405" width="0.1" height="15.0" fill="rgb(234,136,32)" rx="2" ry="2" />
+<text  x="198.48" y="415.5" ></text>
+</g>
+<g >
+<title>void  (370,976 samples, 0.04%)</title><rect x="471.2" y="357" width="0.3" height="15.0" fill="rgb(253,221,53)" rx="2" ry="2" />
+<text  x="474.24" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::VendorSpecificListElement_s* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;ns3::VendorSpecificListElement_s const*, std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt; &gt;, ns3::VendorSpecificListElement_s*, ns3::VendorSpecificListElement_s&gt; (198,957 samples, 0.02%)</title><rect x="228.7" y="437" width="0.2" height="15.0" fill="rgb(210,23,5)" rx="2" ry="2" />
+<text  x="231.70" y="447.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; const*, std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt; &gt;::__normal_iterator (155,343 samples, 0.02%)</title><rect x="358.4" y="501" width="0.1" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="361.37" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::LteUePhy::EnqueueDlHarqFeedback (2,635,248 samples, 0.27%)</title><rect x="419.3" y="373" width="2.1" height="15.0" fill="rgb(226,96,23)" rx="2" ry="2" />
+<text  x="422.27" y="383.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::BuildDataListElement_s*&gt; (793,632 samples, 0.08%)</title><rect x="145.6" y="421" width="0.7" height="15.0" fill="rgb(214,45,10)" rx="2" ry="2" />
+<text  x="148.63" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::int64x64_t::int64x64_t (1,284,908 samples, 0.13%)</title><rect x="390.0" y="501" width="1.0" height="15.0" fill="rgb(240,161,38)" rx="2" ry="2" />
+<text  x="392.99" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter&gt;::SimpleRefCount (335,668 samples, 0.03%)</title><rect x="161.2" y="405" width="0.3" height="15.0" fill="rgb(230,117,28)" rx="2" ry="2" />
+<text  x="164.21" y="415.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;int&gt;::allocate (152,677 samples, 0.02%)</title><rect x="397.5" y="485" width="0.1" height="15.0" fill="rgb(235,139,33)" rx="2" ry="2" />
+<text  x="400.46" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::GetSize (336,952 samples, 0.03%)</title><rect x="119.0" y="517" width="0.3" height="15.0" fill="rgb(229,113,27)" rx="2" ry="2" />
+<text  x="122.05" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt;* std::__copy_move_a1&lt;true, ns3::Ptr&lt;ns3::PacketBurst&gt;*, ns3::Ptr&lt;ns3::PacketBurst&gt;*&gt; (5,935,274 samples, 0.61%)</title><rect x="376.8" y="469" width="4.8" height="15.0" fill="rgb(219,68,16)" rx="2" ry="2" />
+<text  x="379.79" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp; std::__get_helper&lt;1ul, ns3::Ptr&lt;ns3::SpectrumValue&gt;, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt; (465,270 samples, 0.05%)</title><rect x="755.1" y="581" width="0.4" height="15.0" fill="rgb(226,98,23)" rx="2" ry="2" />
+<text  x="758.12" y="591.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::LteFlowId_t, std::pair&lt;ns3::LteFlowId_t const, ns3::FfMacSchedSapProvider::SchedDlRlcBufferReqParameters&gt;, std::_Select1st&lt;std::pair&lt;ns3::LteFlowId_t const, ns3::FfMacSchedSapProvider::SchedDlRlcBufferReqParameters&gt; &gt;, std::less&lt;ns3::LteFlowId_t&gt;, std::allocator&lt;std::pair&lt;ns3::LteFlowId_t const, ns3::FfMacSchedSapProvider::SchedDlRlcBufferReqParameters&gt; &gt; &gt;::begin (229,777 samples, 0.02%)</title><rect x="177.6" y="453" width="0.2" height="15.0" fill="rgb(226,100,23)" rx="2" ry="2" />
+<text  x="180.64" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::LteAmc::CreateCqiFeedbacks (6,876,813 samples, 0.71%)</title><rect x="586.7" y="293" width="5.6" height="15.0" fill="rgb(248,198,47)" rx="2" ry="2" />
+<text  x="589.73" y="303.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;int&gt;::allocate (137,246 samples, 0.01%)</title><rect x="699.8" y="453" width="0.2" height="15.0" fill="rgb(212,34,8)" rx="2" ry="2" />
+<text  x="702.85" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::~vector (275,354 samples, 0.03%)</title><rect x="387.7" y="501" width="0.2" height="15.0" fill="rgb(252,219,52)" rx="2" ry="2" />
+<text  x="390.72" y="511.5" ></text>
+</g>
+<g >
+<title>std::operator== (159,377 samples, 0.02%)</title><rect x="720.2" y="501" width="0.1" height="15.0" fill="rgb(229,110,26)" rx="2" ry="2" />
+<text  x="723.17" y="511.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;is_invocable_r_v&lt;void, void  (874,599 samples, 0.09%)</title><rect x="725.9" y="373" width="0.7" height="15.0" fill="rgb(243,178,42)" rx="2" ry="2" />
+<text  x="728.86" y="383.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::operator= (241,903 samples, 0.02%)</title><rect x="585.5" y="229" width="0.2" height="15.0" fill="rgb(211,28,6)" rx="2" ry="2" />
+<text  x="588.46" y="239.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, ns3::LteEnbComponentCarrierManager::UeInfo, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt; &gt; &gt;::lower_bound (1,800,854 samples, 0.19%)</title><rect x="157.4" y="405" width="1.5" height="15.0" fill="rgb(236,144,34)" rx="2" ry="2" />
+<text  x="160.44" y="415.5" ></text>
+</g>
+<g >
+<title>decltype  (233,530 samples, 0.02%)</title><rect x="456.6" y="277" width="0.2" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="459.59" y="287.5" ></text>
+</g>
+<g >
+<title>void std::destroy_at&lt;ns3::FfMacSchedSapProvider::SchedUlCqiInfoReqParameters&gt; (745,848 samples, 0.08%)</title><rect x="263.5" y="421" width="0.6" height="15.0" fill="rgb(229,113,27)" rx="2" ry="2" />
+<text  x="266.46" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::TypeId::TypeId (250,661 samples, 0.03%)</title><rect x="542.5" y="245" width="0.2" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="545.52" y="255.5" ></text>
+</g>
+<g >
+<title>std::_List_const_iterator&lt;ns3::Callback&lt;void, ns3::Ptr&lt;ns3::SpectrumPhy const&gt;, ns3::Ptr&lt;ns3::SpectrumPhy const&gt;, double&gt; &gt;::_List_const_iterator (161,602 samples, 0.02%)</title><rect x="746.7" y="517" width="0.1" height="15.0" fill="rgb(244,179,43)" rx="2" ry="2" />
+<text  x="749.70" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::Tag::~Tag (233,481 samples, 0.02%)</title><rect x="20.5" y="341" width="0.2" height="15.0" fill="rgb(248,201,48)" rx="2" ry="2" />
+<text  x="23.55" y="351.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;* std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_copy&lt;false, std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_Alloc_node&gt; (284,436 samples, 0.03%)</title><rect x="88.2" y="437" width="0.2" height="15.0" fill="rgb(251,212,50)" rx="2" ry="2" />
+<text  x="91.22" y="447.5" ></text>
+</g>
+<g >
+<title>void std::destroy_at&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; (186,011 samples, 0.02%)</title><rect x="776.3" y="325" width="0.1" height="15.0" fill="rgb(216,52,12)" rx="2" ry="2" />
+<text  x="779.26" y="335.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::CqiListElement_s*, std::vector&lt;ns3::CqiListElement_s, std::allocator&lt;ns3::CqiListElement_s&gt; &gt; &gt; std::vector&lt;ns3::CqiListElement_s, std::allocator&lt;ns3::CqiListElement_s&gt; &gt;::insert&lt;__gnu_cxx::__normal_iterator&lt;ns3::CqiListElement_s*, std::vector&lt;ns3::CqiListElement_s, std::allocator&lt;ns3::CqiListElement_s&gt; &gt; &gt;, void&gt; (1,418,884 samples, 0.15%)</title><rect x="92.0" y="501" width="1.1" height="15.0" fill="rgb(235,140,33)" rx="2" ry="2" />
+<text  x="94.97" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::SpectrumValue, ns3::Empty, ns3::DefaultDeleter&lt;ns3::SpectrumValue&gt; &gt;::Unref (248,283 samples, 0.03%)</title><rect x="78.9" y="501" width="0.2" height="15.0" fill="rgb(246,189,45)" rx="2" ry="2" />
+<text  x="81.87" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumModel const&gt;::Acquire (143,319 samples, 0.01%)</title><rect x="299.1" y="453" width="0.1" height="15.0" fill="rgb(222,80,19)" rx="2" ry="2" />
+<text  x="302.06" y="463.5" ></text>
+</g>
+<g >
+<title> (158,234 samples, 0.02%)</title><rect x="737.3" y="517" width="0.1" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="740.27" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::FfMacSchedSapProvider::SchedDlRlcBufferReqParameters::SchedDlRlcBufferReqParameters (393,529 samples, 0.04%)</title><rect x="24.4" y="341" width="0.4" height="15.0" fill="rgb(240,161,38)" rx="2" ry="2" />
+<text  x="27.44" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::MobilityModel* ns3::PeekPointer&lt;ns3::MobilityModel&gt; (168,016 samples, 0.02%)</title><rect x="740.7" y="501" width="0.1" height="15.0" fill="rgb(240,161,38)" rx="2" ry="2" />
+<text  x="743.69" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::LogComponent::IsEnabled (252,384 samples, 0.03%)</title><rect x="536.7" y="293" width="0.2" height="15.0" fill="rgb(214,43,10)" rx="2" ry="2" />
+<text  x="539.71" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumModel const* ns3::PeekPointer&lt;ns3::SpectrumModel const&gt; (253,729 samples, 0.03%)</title><rect x="416.4" y="501" width="0.2" height="15.0" fill="rgb(228,108,26)" rx="2" ry="2" />
+<text  x="419.35" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_M_get_node (236,751 samples, 0.02%)</title><rect x="293.1" y="453" width="0.2" height="15.0" fill="rgb(231,120,28)" rx="2" ry="2" />
+<text  x="296.13" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Object::Object (1,300,864 samples, 0.13%)</title><rect x="161.0" y="421" width="1.0" height="15.0" fill="rgb(242,174,41)" rx="2" ry="2" />
+<text  x="163.97" y="431.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::allocate (124,601 samples, 0.01%)</title><rect x="611.2" y="437" width="0.1" height="15.0" fill="rgb(230,118,28)" rx="2" ry="2" />
+<text  x="614.25" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::BuildRarListElement_s, std::allocator&lt;ns3::BuildRarListElement_s&gt; &gt;::_Vector_base (198,813 samples, 0.02%)</title><rect x="143.5" y="437" width="0.1" height="15.0" fill="rgb(222,81,19)" rx="2" ry="2" />
+<text  x="146.47" y="447.5" ></text>
+</g>
+<g >
+<title>double const&amp; const&amp; std::__get_helper&lt;1ul, double const&amp;, double const&amp;&gt; (407,082 samples, 0.04%)</title><rect x="748.1" y="453" width="0.3" height="15.0" fill="rgb(234,134,32)" rx="2" ry="2" />
+<text  x="751.12" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt;::operator= (701,868 samples, 0.07%)</title><rect x="585.7" y="245" width="0.5" height="15.0" fill="rgb(252,217,52)" rx="2" ry="2" />
+<text  x="588.65" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::TypeId::GetUid (236,772 samples, 0.02%)</title><rect x="13.6" y="373" width="0.2" height="15.0" fill="rgb(230,116,27)" rx="2" ry="2" />
+<text  x="16.57" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::SpectrumValue (534,268 samples, 0.06%)</title><rect x="111.7" y="453" width="0.4" height="15.0" fill="rgb(211,27,6)" rx="2" ry="2" />
+<text  x="114.72" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::FriisPropagationLossModel::DoCalcRxPower (2,967,176 samples, 0.31%)</title><rect x="738.9" y="533" width="2.3" height="15.0" fill="rgb(222,80,19)" rx="2" ry="2" />
+<text  x="741.86" y="543.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt;::deallocate (189,106 samples, 0.02%)</title><rect x="256.5" y="325" width="0.2" height="15.0" fill="rgb(233,132,31)" rx="2" ry="2" />
+<text  x="259.54" y="335.5" ></text>
+</g>
+<g >
+<title>std::function&lt;void  (304,521 samples, 0.03%)</title><rect x="112.7" y="453" width="0.3" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="115.73" y="463.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;unsigned short&gt; &gt;::allocate (163,524 samples, 0.02%)</title><rect x="474.0" y="149" width="0.2" height="15.0" fill="rgb(250,209,50)" rx="2" ry="2" />
+<text  x="477.03" y="159.5" ></text>
+</g>
+<g >
+<title>void std::destroy_at&lt;ns3::ByteTagListData*&gt; (350,982 samples, 0.04%)</title><rect x="30.7" y="341" width="0.2" height="15.0" fill="rgb(210,26,6)" rx="2" ry="2" />
+<text  x="33.67" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::int64x64_t::int64x64_t (246,965 samples, 0.03%)</title><rect x="605.7" y="469" width="0.2" height="15.0" fill="rgb(240,161,38)" rx="2" ry="2" />
+<text  x="608.73" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Ptr&lt;ns3::Object&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Object&gt; &gt; &gt;::~vector (419,148 samples, 0.04%)</title><rect x="635.2" y="309" width="0.3" height="15.0" fill="rgb(223,83,19)" rx="2" ry="2" />
+<text  x="638.16" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::GetTypeId (231,702 samples, 0.02%)</title><rect x="374.9" y="501" width="0.2" height="15.0" fill="rgb(216,54,13)" rx="2" ry="2" />
+<text  x="377.95" y="511.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::begin (148,148 samples, 0.02%)</title><rect x="380.6" y="325" width="0.2" height="15.0" fill="rgb(230,117,28)" rx="2" ry="2" />
+<text  x="383.63" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::LtePhy::SetControlMessages (1,385,802 samples, 0.14%)</title><rect x="419.6" y="357" width="1.1" height="15.0" fill="rgb(247,193,46)" rx="2" ry="2" />
+<text  x="422.62" y="367.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; &gt; &gt;::_M_addr (159,937 samples, 0.02%)</title><rect x="455.3" y="261" width="0.2" height="15.0" fill="rgb(230,116,27)" rx="2" ry="2" />
+<text  x="458.34" y="271.5" ></text>
+</g>
+<g >
+<title>unsigned int* std::__uninitialized_fill_n_a&lt;unsigned int*, unsigned long, unsigned int, unsigned int&gt; (1,206,539 samples, 0.12%)</title><rect x="695.5" y="469" width="0.9" height="15.0" fill="rgb(240,162,38)" rx="2" ry="2" />
+<text  x="698.47" y="479.5" ></text>
+</g>
+<g >
+<title>malloc (156,584 samples, 0.02%)</title><rect x="154.6" y="357" width="0.1" height="15.0" fill="rgb(230,119,28)" rx="2" ry="2" />
+<text  x="157.60" y="367.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;int const, double&gt; &gt;* std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_M_create_node&lt;std::pair&lt;int const, double&gt; const&amp;&gt; (417,843 samples, 0.04%)</title><rect x="59.5" y="405" width="0.3" height="15.0" fill="rgb(235,139,33)" rx="2" ry="2" />
+<text  x="62.51" y="415.5" ></text>
+</g>
+<g >
+<title>void std::__invoke_impl&lt;void, void  (18,977,087 samples, 1.96%)</title><rect x="423.4" y="389" width="15.3" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="426.44" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::HarqStatus_e* std::copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::DlInfoListElement_s::HarqStatus_e const*, std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt; &gt;, ns3::DlInfoListElement_s::HarqStatus_e*&gt; (683,830 samples, 0.07%)</title><rect x="444.1" y="261" width="0.6" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="447.11" y="271.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt;::~vector (234,807 samples, 0.02%)</title><rect x="263.9" y="389" width="0.2" height="15.0" fill="rgb(254,227,54)" rx="2" ry="2" />
+<text  x="266.87" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_Vector_base (254,332 samples, 0.03%)</title><rect x="595.9" y="133" width="0.2" height="15.0" fill="rgb(205,2,0)" rx="2" ry="2" />
+<text  x="598.86" y="143.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::~vector (193,911 samples, 0.02%)</title><rect x="104.0" y="309" width="0.1" height="15.0" fill="rgb(225,92,22)" rx="2" ry="2" />
+<text  x="106.96" y="319.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::HigherLayerSelected_s*, ns3::HigherLayerSelected_s&gt; (126,894 samples, 0.01%)</title><rect x="585.2" y="245" width="0.1" height="15.0" fill="rgb(237,150,35)" rx="2" ry="2" />
+<text  x="588.18" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::SbMeasResult_s::operator= (338,715 samples, 0.03%)</title><rect x="93.8" y="469" width="0.2" height="15.0" fill="rgb(205,4,1)" rx="2" ry="2" />
+<text  x="96.76" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter&gt;::Unref (238,924 samples, 0.02%)</title><rect x="36.6" y="597" width="0.2" height="15.0" fill="rgb(221,78,18)" rx="2" ry="2" />
+<text  x="39.64" y="607.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::GetSpectrumModel (551,820 samples, 0.06%)</title><rect x="405.0" y="517" width="0.5" height="15.0" fill="rgb(228,106,25)" rx="2" ry="2" />
+<text  x="408.02" y="527.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::BuildBroadcastListElement_s, std::allocator&lt;ns3::BuildBroadcastListElement_s&gt; &gt;::~vector (432,794 samples, 0.04%)</title><rect x="145.1" y="453" width="0.3" height="15.0" fill="rgb(224,87,20)" rx="2" ry="2" />
+<text  x="148.10" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt;::operator* (303,984 samples, 0.03%)</title><rect x="178.2" y="469" width="0.2" height="15.0" fill="rgb(220,71,17)" rx="2" ry="2" />
+<text  x="181.17" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt;::~_Vector_base (220,788 samples, 0.02%)</title><rect x="131.3" y="485" width="0.2" height="15.0" fill="rgb(253,220,52)" rx="2" ry="2" />
+<text  x="134.28" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned long, std::allocator&lt;unsigned long&gt; &gt;::end (154,845 samples, 0.02%)</title><rect x="327.4" y="485" width="0.1" height="15.0" fill="rgb(222,80,19)" rx="2" ry="2" />
+<text  x="330.40" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::TbId_t, std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::_Select1st&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::_M_get_insert_hint_unique_pos (473,287 samples, 0.05%)</title><rect x="385.8" y="485" width="0.4" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="388.84" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbMac::ReceiveBsrMessage (4,862,603 samples, 0.50%)</title><rect x="457.1" y="325" width="3.9" height="15.0" fill="rgb(233,130,31)" rx="2" ry="2" />
+<text  x="460.09" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbMac::DoTransmitPdu (5,387,885 samples, 0.56%)</title><rect x="19.6" y="373" width="4.3" height="15.0" fill="rgb(220,70,16)" rx="2" ry="2" />
+<text  x="22.60" y="383.5" ></text>
+</g>
+<g >
+<title>void std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_construct_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; const&amp;&gt; (344,140 samples, 0.04%)</title><rect x="342.0" y="357" width="0.3" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="345.01" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::IidManager::LookupInformation (534,682 samples, 0.06%)</title><rect x="541.2" y="229" width="0.4" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="544.16" y="239.5" ></text>
+</g>
+<g >
+<title>ns3::TracedCallback&lt;unsigned short, unsigned char, unsigned int&gt;::operator (515,825 samples, 0.05%)</title><rect x="156.0" y="389" width="0.4" height="15.0" fill="rgb(228,106,25)" rx="2" ry="2" />
+<text  x="158.97" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::TbId_t, std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::_Select1st&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::_M_destroy_node (229,826 samples, 0.02%)</title><rect x="506.3" y="469" width="0.2" height="15.0" fill="rgb(219,66,15)" rx="2" ry="2" />
+<text  x="509.35" y="479.5" ></text>
+</g>
+<g >
+<title>double* std::__uninitialized_default_n_1&lt;true&gt;::__uninit_default_n&lt;double*, unsigned long&gt; (403,975 samples, 0.04%)</title><rect x="729.9" y="389" width="0.3" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="732.86" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::CqiListElement_s::CqiListElement_s (1,645,474 samples, 0.17%)</title><rect x="442.6" y="341" width="1.3" height="15.0" fill="rgb(238,156,37)" rx="2" ry="2" />
+<text  x="445.63" y="351.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_Vector_base (206,509 samples, 0.02%)</title><rect x="606.9" y="469" width="0.2" height="15.0" fill="rgb(237,150,35)" rx="2" ry="2" />
+<text  x="609.89" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::LteHarqPhy::ResetUlHarqProcessStatus (2,339,527 samples, 0.24%)</title><rect x="465.0" y="549" width="1.9" height="15.0" fill="rgb(220,73,17)" rx="2" ry="2" />
+<text  x="467.98" y="559.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;int const, double&gt; &gt;* std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_M_copy&lt;false, std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_Alloc_node&gt; (1,950,782 samples, 0.20%)</title><rect x="58.8" y="469" width="1.6" height="15.0" fill="rgb(224,87,21)" rx="2" ry="2" />
+<text  x="61.81" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::RlcTag::Serialize (366,372 samples, 0.04%)</title><rect x="555.1" y="245" width="0.3" height="15.0" fill="rgb(233,133,31)" rx="2" ry="2" />
+<text  x="558.07" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt; ns3::Create&lt;ns3::PacketBurst&gt; (610,469 samples, 0.06%)</title><rect x="627.0" y="517" width="0.5" height="15.0" fill="rgb(225,93,22)" rx="2" ry="2" />
+<text  x="630.03" y="527.5" ></text>
+</g>
+<g >
+<title>void std::destroy_at&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; (1,015,028 samples, 0.10%)</title><rect x="505.5" y="453" width="0.8" height="15.0" fill="rgb(233,130,31)" rx="2" ry="2" />
+<text  x="508.46" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::PacketMetadata::PacketMetadata (796,815 samples, 0.08%)</title><rect x="32.7" y="389" width="0.6" height="15.0" fill="rgb(231,121,28)" rx="2" ry="2" />
+<text  x="35.70" y="399.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;std::is_constructible&lt;std::pair&lt;int const, double&gt;, std::pair&lt;int, double&gt; &gt;::value, std::pair&lt;std::_Rb_tree_iterator&lt;std::pair&lt;int const, double&gt; &gt;, bool&gt; &gt;::type std::map&lt;int, double, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::insert&lt;std::pair&lt;int, double&gt; &gt; (2,157,773 samples, 0.22%)</title><rect x="292.8" y="533" width="1.7" height="15.0" fill="rgb(219,65,15)" rx="2" ry="2" />
+<text  x="295.78" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumModel const&gt;::Ptr (280,962 samples, 0.03%)</title><rect x="402.2" y="501" width="0.2" height="15.0" fill="rgb(232,125,30)" rx="2" ry="2" />
+<text  x="405.21" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::SpectrumSignalParameters, ns3::Empty, ns3::DefaultDeleter&lt;ns3::SpectrumSignalParameters&gt; &gt;::Unref (2,461,305 samples, 0.25%)</title><rect x="652.5" y="501" width="1.9" height="15.0" fill="rgb(254,229,54)" rx="2" ry="2" />
+<text  x="655.46" y="511.5" ></text>
+</g>
+<g >
+<title>decltype  (169,019 samples, 0.02%)</title><rect x="533.4" y="293" width="0.2" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="536.42" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumPhy::GetMobility (496,870 samples, 0.05%)</title><rect x="313.3" y="501" width="0.4" height="15.0" fill="rgb(228,107,25)" rx="2" ry="2" />
+<text  x="316.32" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;::_M_valptr (827,930 samples, 0.09%)</title><rect x="759.5" y="677" width="0.7" height="15.0" fill="rgb(213,38,9)" rx="2" ry="2" />
+<text  x="762.54" y="687.5" ></text>
+</g>
+<g >
+<title> (160,403 samples, 0.02%)</title><rect x="744.9" y="517" width="0.2" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="747.94" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::DoDispose (865,729 samples, 0.09%)</title><rect x="501.7" y="421" width="0.7" height="15.0" fill="rgb(242,172,41)" rx="2" ry="2" />
+<text  x="504.71" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::DlDciListElement_s::operator= (918,195 samples, 0.09%)</title><rect x="140.0" y="485" width="0.7" height="15.0" fill="rgb(254,228,54)" rx="2" ry="2" />
+<text  x="142.96" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_get_insert_hint_unique_pos (165,767 samples, 0.02%)</title><rect x="82.3" y="469" width="0.2" height="15.0" fill="rgb(240,162,38)" rx="2" ry="2" />
+<text  x="85.32" y="479.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;double&gt; &gt;::deallocate (190,332 samples, 0.02%)</title><rect x="674.2" y="405" width="0.1" height="15.0" fill="rgb(236,143,34)" rx="2" ry="2" />
+<text  x="677.16" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumModel&gt;::operator= (145,744 samples, 0.02%)</title><rect x="297.5" y="469" width="0.1" height="15.0" fill="rgb(248,198,47)" rx="2" ry="2" />
+<text  x="300.48" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::PacketBurst (301,065 samples, 0.03%)</title><rect x="118.8" y="485" width="0.2" height="15.0" fill="rgb(208,15,3)" rx="2" ry="2" />
+<text  x="121.78" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::UlInfoListElement_s* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::UlInfoListElement_s const*, std::vector&lt;ns3::UlInfoListElement_s, std::allocator&lt;ns3::UlInfoListElement_s&gt; &gt; &gt;, ns3::UlInfoListElement_s*&gt; (794,783 samples, 0.08%)</title><rect x="266.2" y="469" width="0.7" height="15.0" fill="rgb(205,1,0)" rx="2" ry="2" />
+<text  x="269.23" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Packet::AddByteTag (2,074,064 samples, 0.21%)</title><rect x="29.5" y="421" width="1.7" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="32.50" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::HigherLayerSelected_s* std::__do_uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::HigherLayerSelected_s const*, std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt; &gt;, ns3::HigherLayerSelected_s*&gt; (241,929 samples, 0.02%)</title><rect x="593.4" y="197" width="0.2" height="15.0" fill="rgb(244,179,43)" rx="2" ry="2" />
+<text  x="596.38" y="207.5" ></text>
+</g>
+<g >
+<title>std::_Bit_iterator std::__copy_move_a&lt;false, std::_Bit_const_iterator, std::_Bit_iterator&gt; (273,527 samples, 0.03%)</title><rect x="248.0" y="405" width="0.3" height="15.0" fill="rgb(224,87,20)" rx="2" ry="2" />
+<text  x="251.04" y="415.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;std::is_constructible&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::pair&lt;ns3::TbId_t, ns3::tbInfo_t&gt; &gt;::value, std::pair&lt;std::_Rb_tree_iterator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, bool&gt; &gt;::type std::map&lt;ns3::TbId_t, ns3::tbInfo_t, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::insert&lt;std::pair&lt;ns3::TbId_t, ns3::tbInfo_t&gt; &gt; (2,996,775 samples, 0.31%)</title><rect x="384.1" y="533" width="2.4" height="15.0" fill="rgb(213,40,9)" rx="2" ry="2" />
+<text  x="387.05" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::Time::Time (197,236 samples, 0.02%)</title><rect x="670.4" y="485" width="0.1" height="15.0" fill="rgb(226,100,24)" rx="2" ry="2" />
+<text  x="673.38" y="495.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::AttributeConstructionList::Item, std::allocator&lt;ns3::AttributeConstructionList::Item&gt; &gt;::_List_base (495,491 samples, 0.05%)</title><rect x="630.2" y="469" width="0.4" height="15.0" fill="rgb(251,212,50)" rx="2" ry="2" />
+<text  x="633.21" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::LtePhy::GetTti (159,059 samples, 0.02%)</title><rect x="383.5" y="549" width="0.1" height="15.0" fill="rgb(238,152,36)" rx="2" ry="2" />
+<text  x="386.52" y="559.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;::_M_erase_at_end (228,146 samples, 0.02%)</title><rect x="209.1" y="469" width="0.2" height="15.0" fill="rgb(205,3,0)" rx="2" ry="2" />
+<text  x="212.09" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt;::~vector (429,894 samples, 0.04%)</title><rect x="445.6" y="309" width="0.4" height="15.0" fill="rgb(246,189,45)" rx="2" ry="2" />
+<text  x="448.63" y="319.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;* std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_M_copy&lt;false, std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_Alloc_node&gt; (3,799,581 samples, 0.39%)</title><rect x="237.4" y="421" width="3.0" height="15.0" fill="rgb(236,146,34)" rx="2" ry="2" />
+<text  x="240.35" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::_Vector_base (364,748 samples, 0.04%)</title><rect x="474.3" y="277" width="0.3" height="15.0" fill="rgb(219,65,15)" rx="2" ry="2" />
+<text  x="477.35" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::ObjectDeleter::Delete (4,924,388 samples, 0.51%)</title><rect x="451.1" y="277" width="4.0" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="454.12" y="287.5" ></text>
+</g>
+<g >
+<title>std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt; &gt;::operator (148,923 samples, 0.02%)</title><rect x="158.6" y="341" width="0.1" height="15.0" fill="rgb(233,130,31)" rx="2" ry="2" />
+<text  x="161.61" y="351.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt;::_M_erase (2,189,170 samples, 0.23%)</title><rect x="621.4" y="517" width="1.8" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="624.44" y="527.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_put_node (269,933 samples, 0.03%)</title><rect x="392.2" y="501" width="0.2" height="15.0" fill="rgb(235,141,33)" rx="2" ry="2" />
+<text  x="395.23" y="511.5" ></text>
+</g>
+<g >
+<title>cfree (155,386 samples, 0.02%)</title><rect x="216.5" y="389" width="0.1" height="15.0" fill="rgb(223,86,20)" rx="2" ry="2" />
+<text  x="219.49" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_end (247,206 samples, 0.03%)</title><rect x="84.7" y="405" width="0.2" height="15.0" fill="rgb(219,65,15)" rx="2" ry="2" />
+<text  x="87.73" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;0ul, double const&amp;, double const&amp;, double const&amp;&gt;::_M_head (311,781 samples, 0.03%)</title><rect x="748.8" y="453" width="0.2" height="15.0" fill="rgb(236,145,34)" rx="2" ry="2" />
+<text  x="751.79" y="463.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::map (198,211 samples, 0.02%)</title><rect x="667.1" y="309" width="0.1" height="15.0" fill="rgb(242,171,40)" rx="2" ry="2" />
+<text  x="670.07" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::Simulator::Now (151,574 samples, 0.02%)</title><rect x="697.4" y="517" width="0.2" height="15.0" fill="rgb(240,164,39)" rx="2" ry="2" />
+<text  x="700.45" y="527.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;ns3::Buffer::Data*&gt; &gt;::construct&lt;ns3::Buffer::Data*, ns3::Buffer::Data* const&amp;&gt; (345,768 samples, 0.04%)</title><rect x="546.1" y="69" width="0.3" height="15.0" fill="rgb(251,213,50)" rx="2" ry="2" />
+<text  x="549.11" y="79.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::lower_bound (1,665,605 samples, 0.17%)</title><rect x="663.0" y="421" width="1.3" height="15.0" fill="rgb(254,228,54)" rx="2" ry="2" />
+<text  x="666.00" y="431.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, ns3::DlInfoListElement_s, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt; &gt;::begin (250,766 samples, 0.03%)</title><rect x="508.4" y="549" width="0.2" height="15.0" fill="rgb(241,167,40)" rx="2" ry="2" />
+<text  x="511.36" y="559.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::~_Vector_base (190,332 samples, 0.02%)</title><rect x="674.2" y="437" width="0.1" height="15.0" fill="rgb(223,86,20)" rx="2" ry="2" />
+<text  x="677.16" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_S_key (340,756 samples, 0.04%)</title><rect x="337.1" y="373" width="0.2" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="340.07" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::DoDispose (5,576,521 samples, 0.58%)</title><rect x="544.7" y="261" width="4.4" height="15.0" fill="rgb(242,172,41)" rx="2" ry="2" />
+<text  x="547.65" y="271.5" ></text>
+</g>
+<g >
+<title>pow (501,451 samples, 0.05%)</title><rect x="678.6" y="501" width="0.4" height="15.0" fill="rgb(254,226,54)" rx="2" ry="2" />
+<text  x="681.61" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter&gt;::Unref (158,753 samples, 0.02%)</title><rect x="17.0" y="437" width="0.1" height="15.0" fill="rgb(221,78,18)" rx="2" ry="2" />
+<text  x="19.99" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_M_get_Tp_allocator (158,009 samples, 0.02%)</title><rect x="239.0" y="277" width="0.2" height="15.0" fill="rgb(227,101,24)" rx="2" ry="2" />
+<text  x="242.03" y="287.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::HarqProcessInfoElement_t*, ns3::HarqProcessInfoElement_t&gt; (288,179 samples, 0.03%)</title><rect x="515.0" y="533" width="0.3" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="518.03" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt; &gt;::_S_key (209,098 samples, 0.02%)</title><rect x="73.8" y="453" width="0.2" height="15.0" fill="rgb(238,153,36)" rx="2" ry="2" />
+<text  x="76.78" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::LteUePowerControl::SetRsrp (935,867 samples, 0.10%)</title><rect x="603.0" y="325" width="0.7" height="15.0" fill="rgb(214,44,10)" rx="2" ry="2" />
+<text  x="605.99" y="335.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;int, std::allocator&lt;int&gt; &gt;::_M_allocate (231,272 samples, 0.02%)</title><rect x="397.4" y="517" width="0.2" height="15.0" fill="rgb(216,52,12)" rx="2" ry="2" />
+<text  x="400.40" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::UeMemberLteUePhySapUser::ReceivePhyPdu (4,482,363 samples, 0.46%)</title><rect x="435.0" y="357" width="3.6" height="15.0" fill="rgb(216,54,12)" rx="2" ry="2" />
+<text  x="438.01" y="367.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::LteUePhy::PssElement, std::allocator&lt;ns3::LteUePhy::PssElement&gt; &gt;::_M_insert&lt;ns3::LteUePhy::PssElement const&amp;&gt; (194,530 samples, 0.02%)</title><rect x="726.2" y="309" width="0.1" height="15.0" fill="rgb(251,212,50)" rx="2" ry="2" />
+<text  x="729.19" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultDeleter&lt;ns3::EventImpl&gt;::Delete (444,360 samples, 0.05%)</title><rect x="64.6" y="485" width="0.3" height="15.0" fill="rgb(240,163,39)" rx="2" ry="2" />
+<text  x="67.57" y="495.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; &gt;::_M_addr (147,511 samples, 0.02%)</title><rect x="466.0" y="437" width="0.1" height="15.0" fill="rgb(224,87,20)" rx="2" ry="2" />
+<text  x="468.97" y="447.5" ></text>
+</g>
+<g >
+<title>malloc (220,654 samples, 0.02%)</title><rect x="21.6" y="309" width="0.2" height="15.0" fill="rgb(230,119,28)" rx="2" ry="2" />
+<text  x="24.63" y="319.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::list (276,041 samples, 0.03%)</title><rect x="162.0" y="421" width="0.2" height="15.0" fill="rgb(252,216,51)" rx="2" ry="2" />
+<text  x="165.01" y="431.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::~list (343,413 samples, 0.04%)</title><rect x="654.2" y="437" width="0.2" height="15.0" fill="rgb(222,80,19)" rx="2" ry="2" />
+<text  x="657.16" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::MacCeValue_u::MacCeValue_u (234,615 samples, 0.02%)</title><rect x="129.3" y="389" width="0.2" height="15.0" fill="rgb(219,65,15)" rx="2" ry="2" />
+<text  x="132.34" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;int const, double&gt; &gt; std::map&lt;int, double, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::emplace_hint&lt;std::pair&lt;int, double&gt; &gt; (1,385,087 samples, 0.14%)</title><rect x="293.0" y="517" width="1.1" height="15.0" fill="rgb(232,126,30)" rx="2" ry="2" />
+<text  x="296.00" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::MemberSchedSapProvider&lt;ns3::PfFfMacScheduler&gt;::SchedDlTriggerReq (1,650,854 samples, 0.17%)</title><rect x="15.8" y="517" width="1.3" height="15.0" fill="rgb(247,193,46)" rx="2" ry="2" />
+<text  x="18.79" y="527.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt;::_M_ptr (199,234 samples, 0.02%)</title><rect x="362.8" y="437" width="0.2" height="15.0" fill="rgb(215,48,11)" rx="2" ry="2" />
+<text  x="365.81" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::BuildDataListElement_s* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::BuildDataListElement_s const*, std::vector&lt;ns3::BuildDataListElement_s, std::allocator&lt;ns3::BuildDataListElement_s&gt; &gt; &gt;, ns3::BuildDataListElement_s*&gt; (143,073 samples, 0.01%)</title><rect x="95.0" y="405" width="0.1" height="15.0" fill="rgb(249,206,49)" rx="2" ry="2" />
+<text  x="97.98" y="415.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;std::_Rb_tree_iterator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, bool&gt; std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::emplace&lt;unsigned int const&amp;, ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp;&gt; (1,130,669 samples, 0.12%)</title><rect x="81.8" y="517" width="0.9" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="84.78" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;0ul, ns3::LteSpectrumPhy*&gt;::_Tuple_impl&lt;ns3::LteSpectrumPhy*&amp;&gt; (415,211 samples, 0.04%)</title><rect x="638.7" y="437" width="0.3" height="15.0" fill="rgb(216,52,12)" rx="2" ry="2" />
+<text  x="641.66" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::_Vector_impl::~_Vector_impl (154,656 samples, 0.02%)</title><rect x="473.0" y="245" width="0.1" height="15.0" fill="rgb(226,97,23)" rx="2" ry="2" />
+<text  x="476.01" y="255.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt;, std::allocator&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt; &gt; &gt;::_M_range_check (158,396 samples, 0.02%)</title><rect x="213.3" y="469" width="0.1" height="15.0" fill="rgb(235,142,34)" rx="2" ry="2" />
+<text  x="216.28" y="479.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;::~list (231,280 samples, 0.02%)</title><rect x="121.3" y="533" width="0.2" height="15.0" fill="rgb(217,57,13)" rx="2" ry="2" />
+<text  x="124.33" y="543.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;std::__strip_reference_wrapper&lt;std::decay&lt;ns3::Scheduler::EventKey const&amp;&gt;::type&gt;::__type, std::__strip_reference_wrapper&lt;std::decay&lt;ns3::EventImpl* const&amp;&gt;::type&gt;::__type&gt; std::make_pair&lt;ns3::Scheduler::EventKey const&amp;, ns3::EventImpl* const&amp;&gt; (141,536 samples, 0.01%)</title><rect x="664.7" y="453" width="0.1" height="15.0" fill="rgb(235,141,33)" rx="2" ry="2" />
+<text  x="667.69" y="463.5" ></text>
+</g>
+<g >
+<title>std::tuple_element&lt;1ul, std::pair&lt;unsigned int const&amp;, ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp;&gt; &gt;::type&amp;&amp; std::get&lt;1ul, unsigned int const&amp;, ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp;&gt; (161,945 samples, 0.02%)</title><rect x="333.1" y="485" width="0.2" height="15.0" fill="rgb(219,65,15)" rx="2" ry="2" />
+<text  x="336.14" y="495.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::BuildDataListElement_s const*, std::vector&lt;ns3::BuildDataListElement_s, std::allocator&lt;ns3::BuildDataListElement_s&gt; &gt; &gt;::operator* (163,914 samples, 0.02%)</title><rect x="141.9" y="373" width="0.2" height="15.0" fill="rgb(229,112,26)" rx="2" ry="2" />
+<text  x="144.92" y="383.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::operator= (1,045,585 samples, 0.11%)</title><rect x="680.0" y="533" width="0.8" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="682.97" y="543.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;double&gt;::deallocate (190,332 samples, 0.02%)</title><rect x="674.2" y="373" width="0.1" height="15.0" fill="rgb(250,208,49)" rx="2" ry="2" />
+<text  x="677.16" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue const&gt;::operator (129,312 samples, 0.01%)</title><rect x="79.2" y="501" width="0.1" height="15.0" fill="rgb(248,200,47)" rx="2" ry="2" />
+<text  x="82.23" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumPhy::SetTxPowerSpectralDensity (1,023,722 samples, 0.11%)</title><rect x="303.1" y="517" width="0.8" height="15.0" fill="rgb(208,14,3)" rx="2" ry="2" />
+<text  x="306.09" y="527.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;ns3::TbId_t, ns3::tbInfo_t&gt;::~pair (656,469 samples, 0.07%)</title><rect x="387.4" y="533" width="0.5" height="15.0" fill="rgb(229,112,27)" rx="2" ry="2" />
+<text  x="390.42" y="543.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::CqiListElement_s*, ns3::CqiListElement_s&gt; (190,387 samples, 0.02%)</title><rect x="131.1" y="485" width="0.1" height="15.0" fill="rgb(225,92,22)" rx="2" ry="2" />
+<text  x="134.09" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue&gt;::Ptr (158,198 samples, 0.02%)</title><rect x="670.1" y="485" width="0.2" height="15.0" fill="rgb(220,73,17)" rx="2" ry="2" />
+<text  x="673.13" y="495.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;double&gt;::allocate (126,483 samples, 0.01%)</title><rect x="606.9" y="389" width="0.1" height="15.0" fill="rgb(248,201,48)" rx="2" ry="2" />
+<text  x="609.92" y="399.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::FfMacSchedSapProvider::SchedUlCqiInfoReqParameters, std::allocator&lt;ns3::FfMacSchedSapProvider::SchedUlCqiInfoReqParameters&gt; &gt;::push_back (722,100 samples, 0.07%)</title><rect x="473.6" y="293" width="0.6" height="15.0" fill="rgb(237,148,35)" rx="2" ry="2" />
+<text  x="476.65" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::int64x64_t::int64x64_t (1,343,589 samples, 0.14%)</title><rect x="683.1" y="517" width="1.1" height="15.0" fill="rgb(240,161,38)" rx="2" ry="2" />
+<text  x="686.13" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::TagBuffer::WriteU16 (309,646 samples, 0.03%)</title><rect x="21.4" y="309" width="0.2" height="15.0" fill="rgb(215,48,11)" rx="2" ry="2" />
+<text  x="24.38" y="319.5" ></text>
+</g>
+<g >
+<title>decltype  (518,331 samples, 0.05%)</title><rect x="271.1" y="373" width="0.4" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="274.13" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::PfFfMacScheduler::DoSchedDlRlcBufferReq (605,673 samples, 0.06%)</title><rect x="17.9" y="309" width="0.5" height="15.0" fill="rgb(236,143,34)" rx="2" ry="2" />
+<text  x="20.95" y="319.5" ></text>
+</g>
+<g >
+<title>std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;* std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_create_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; const&amp;&gt; (494,618 samples, 0.05%)</title><rect x="355.6" y="469" width="0.4" height="15.0" fill="rgb(230,116,27)" rx="2" ry="2" />
+<text  x="358.61" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::_M_default_initialize (1,425,764 samples, 0.15%)</title><rect x="403.4" y="469" width="1.1" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="406.39" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;unsigned short&gt;::_M_valptr (202,650 samples, 0.02%)</title><rect x="463.1" y="293" width="0.2" height="15.0" fill="rgb(211,28,6)" rx="2" ry="2" />
+<text  x="466.13" y="303.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_S_relocate (348,271 samples, 0.04%)</title><rect x="597.8" y="245" width="0.2" height="15.0" fill="rgb(228,110,26)" rx="2" ry="2" />
+<text  x="600.75" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::TagBuffer::TagBuffer (294,318 samples, 0.03%)</title><rect x="490.9" y="517" width="0.2" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="493.87" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::LteSpectrumModelId, std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt;, std::_Select1st&lt;std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt; &gt;, std::less&lt;ns3::LteSpectrumModelId&gt;, std::allocator&lt;std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt; &gt; &gt;::_M_lower_bound (843,869 samples, 0.09%)</title><rect x="675.8" y="453" width="0.7" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="678.80" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::MakeEvent&lt;void  (379,721 samples, 0.04%)</title><rect x="112.7" y="469" width="0.3" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="115.67" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteSpectrumSignalParametersDataFrame&gt;::Ptr (160,095 samples, 0.02%)</title><rect x="735.4" y="533" width="0.1" height="15.0" fill="rgb(243,178,42)" rx="2" ry="2" />
+<text  x="738.39" y="543.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt; &gt;::allocate (258,278 samples, 0.03%)</title><rect x="334.5" y="341" width="0.2" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="337.53" y="351.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;std::_Rb_tree_node_base*, std::_Rb_tree_node_base*&gt;::pair&lt;std::_Rb_tree_node&lt;std::pair&lt;int const, double&gt; &gt;*&amp;, std::_Rb_tree_node_base*&amp;&gt; (186,478 samples, 0.02%)</title><rect x="293.9" y="453" width="0.1" height="15.0" fill="rgb(241,166,39)" rx="2" ry="2" />
+<text  x="296.87" y="463.5" ></text>
+</g>
+<g >
+<title>malloc (169,207 samples, 0.02%)</title><rect x="574.6" y="229" width="0.1" height="15.0" fill="rgb(230,119,28)" rx="2" ry="2" />
+<text  x="577.55" y="239.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::~vector (242,607 samples, 0.03%)</title><rect x="521.7" y="341" width="0.2" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="524.72" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::TypeId::~TypeId (183,254 samples, 0.02%)</title><rect x="375.1" y="501" width="0.2" height="15.0" fill="rgb(232,125,30)" rx="2" ry="2" />
+<text  x="378.13" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::PacketMetadata::Recycle (521,509 samples, 0.05%)</title><rect x="453.2" y="85" width="0.4" height="15.0" fill="rgb(238,154,37)" rx="2" ry="2" />
+<text  x="456.15" y="95.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;unsigned short&gt; &gt;::allocate (360,140 samples, 0.04%)</title><rect x="480.0" y="245" width="0.2" height="15.0" fill="rgb(250,209,50)" rx="2" ry="2" />
+<text  x="482.95" y="255.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::VendorSpecificListElement_s const*, std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt; &gt;::base (158,549 samples, 0.02%)</title><rect x="144.2" y="357" width="0.2" height="15.0" fill="rgb(218,60,14)" rx="2" ry="2" />
+<text  x="147.23" y="367.5" ></text>
+</g>
+<g >
+<title>double* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, double*, double&gt; (251,522 samples, 0.03%)</title><rect x="78.3" y="469" width="0.2" height="15.0" fill="rgb(222,79,19)" rx="2" ry="2" />
+<text  x="81.29" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt;::~Ptr (2,069,772 samples, 0.21%)</title><rect x="773.8" y="389" width="1.7" height="15.0" fill="rgb(205,3,0)" rx="2" ry="2" />
+<text  x="776.80" y="399.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, unsigned char*&gt; (190,052 samples, 0.02%)</title><rect x="443.8" y="293" width="0.1" height="15.0" fill="rgb(227,104,25)" rx="2" ry="2" />
+<text  x="446.80" y="303.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt; &gt;::_M_get_insert_hint_unique_pos (501,334 samples, 0.05%)</title><rect x="504.4" y="501" width="0.4" height="15.0" fill="rgb(212,35,8)" rx="2" ry="2" />
+<text  x="507.39" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::IidManager::GetAttributeN (456,193 samples, 0.05%)</title><rect x="631.3" y="453" width="0.4" height="15.0" fill="rgb(232,125,30)" rx="2" ry="2" />
+<text  x="634.31" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Ptr&lt;ns3::Object&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Object&gt; &gt; &gt;::clear (158,065 samples, 0.02%)</title><rect x="165.0" y="341" width="0.1" height="15.0" fill="rgb(241,167,40)" rx="2" ry="2" />
+<text  x="167.98" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::LteControlMessage, ns3::Empty, ns3::DefaultDeleter&lt;ns3::LteControlMessage&gt; &gt;::Ref (156,385 samples, 0.02%)</title><rect x="319.1" y="261" width="0.2" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="322.14" y="271.5" ></text>
+</g>
+<g >
+<title>void std::_Function_base::_Base_manager&lt;std::_Bind&lt;void  (489,748 samples, 0.05%)</title><rect x="639.6" y="469" width="0.4" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="642.61" y="479.5" ></text>
+</g>
+<g >
+<title>unsigned long const&amp; std::min&lt;unsigned long&gt; (159,495 samples, 0.02%)</title><rect x="696.8" y="453" width="0.1" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="699.77" y="463.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::__copy_move_a2&lt;false, unsigned char const*, unsigned char*&gt; (185,651 samples, 0.02%)</title><rect x="127.2" y="277" width="0.1" height="15.0" fill="rgb(209,20,4)" rx="2" ry="2" />
+<text  x="130.15" y="287.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::__uninitialized_copy&lt;true&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, unsigned char*&gt; (163,843 samples, 0.02%)</title><rect x="147.3" y="389" width="0.1" height="15.0" fill="rgb(233,129,30)" rx="2" ry="2" />
+<text  x="150.28" y="399.5" ></text>
+</g>
+<g >
+<title>void std::__invoke_impl&lt;void, ns3::Callback&lt;void, ns3::SpectrumValue const&amp;&gt;::Callback&lt;void  (34,038,084 samples, 3.51%)</title><rect x="578.0" y="437" width="27.4" height="15.0" fill="rgb(245,184,44)" rx="2" ry="2" />
+<text  x="580.99" y="447.5" >v..</text>
+</g>
+<g >
+<title>ns3::Packet::AddPacketTag (1,534,193 samples, 0.16%)</title><rect x="20.7" y="357" width="1.3" height="15.0" fill="rgb(233,131,31)" rx="2" ry="2" />
+<text  x="23.74" y="367.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_M_drop_node (325,437 samples, 0.03%)</title><rect x="60.8" y="373" width="0.3" height="15.0" fill="rgb(225,93,22)" rx="2" ry="2" />
+<text  x="63.84" y="383.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::vector (677,875 samples, 0.07%)</title><rect x="91.1" y="549" width="0.5" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="94.09" y="559.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;5ul, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::~_Tuple_impl (220,721 samples, 0.02%)</title><rect x="666.3" y="357" width="0.2" height="15.0" fill="rgb(207,10,2)" rx="2" ry="2" />
+<text  x="669.34" y="367.5" ></text>
+</g>
+<g >
+<title>std::function&lt;void  (2,496,720 samples, 0.26%)</title><rect x="438.9" y="517" width="2.0" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="441.93" y="527.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt;::_M_range_check (228,068 samples, 0.02%)</title><rect x="210.3" y="469" width="0.1" height="15.0" fill="rgb(248,198,47)" rx="2" ry="2" />
+<text  x="213.26" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt;::~Ptr (816,661 samples, 0.08%)</title><rect x="166.1" y="453" width="0.7" height="15.0" fill="rgb(205,3,0)" rx="2" ry="2" />
+<text  x="169.13" y="463.5" ></text>
+</g>
+<g >
+<title>std::map&lt;ns3::Scheduler::EventKey, ns3::EventImpl*, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::lower_bound (2,631,944 samples, 0.27%)</title><rect x="273.3" y="469" width="2.2" height="15.0" fill="rgb(238,153,36)" rx="2" ry="2" />
+<text  x="276.34" y="479.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;unsigned short*, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;::__normal_iterator (153,496 samples, 0.02%)</title><rect x="218.1" y="437" width="0.2" height="15.0" fill="rgb(213,38,9)" rx="2" ry="2" />
+<text  x="221.13" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::TagBuffer::ReadU16 (721,482 samples, 0.07%)</title><rect x="490.1" y="501" width="0.6" height="15.0" fill="rgb(239,157,37)" rx="2" ry="2" />
+<text  x="493.10" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Buffer::~Buffer (1,257,420 samples, 0.13%)</title><rect x="545.7" y="117" width="1.0" height="15.0" fill="rgb(240,162,38)" rx="2" ry="2" />
+<text  x="548.71" y="127.5" ></text>
+</g>
+<g >
+<title>ns3::LteRlcSm::DoReceivePdu (5,629,506 samples, 0.58%)</title><rect x="424.3" y="277" width="4.5" height="15.0" fill="rgb(239,160,38)" rx="2" ry="2" />
+<text  x="427.27" y="287.5" ></text>
+</g>
+<g >
+<title>void std::_Construct&lt;ns3::HigherLayerSelected_s, ns3::HigherLayerSelected_s const&amp;&gt; (241,929 samples, 0.02%)</title><rect x="593.4" y="181" width="0.2" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="596.38" y="191.5" ></text>
+</g>
+<g >
+<title>double* std::__uninitialized_default_n&lt;double*, unsigned long&gt; (152,182 samples, 0.02%)</title><rect x="112.0" y="389" width="0.1" height="15.0" fill="rgb(231,123,29)" rx="2" ry="2" />
+<text  x="115.02" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::Buffer::Create (1,901,878 samples, 0.20%)</title><rect x="31.2" y="357" width="1.5" height="15.0" fill="rgb(242,174,41)" rx="2" ry="2" />
+<text  x="34.17" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultSimulatorImpl::ScheduleWithContext (6,714,863 samples, 0.69%)</title><rect x="660.6" y="485" width="5.4" height="15.0" fill="rgb(253,222,53)" rx="2" ry="2" />
+<text  x="663.58" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s* std::__copy_move_a&lt;false, ns3::DlInfoListElement_s*, ns3::DlInfoListElement_s*&gt; (394,051 samples, 0.04%)</title><rect x="206.9" y="453" width="0.4" height="15.0" fill="rgb(254,228,54)" rx="2" ry="2" />
+<text  x="209.94" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;int, std::allocator&lt;int&gt; &gt;::_Vector_impl_data::_M_copy_data (368,766 samples, 0.04%)</title><rect x="594.4" y="245" width="0.3" height="15.0" fill="rgb(206,6,1)" rx="2" ry="2" />
+<text  x="597.43" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::CqiListElement_s* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::CqiListElement_s*, std::vector&lt;ns3::CqiListElement_s, std::allocator&lt;ns3::CqiListElement_s&gt; &gt; &gt;, ns3::CqiListElement_s*&gt; (3,635,299 samples, 0.37%)</title><rect x="124.4" y="469" width="3.0" height="15.0" fill="rgb(240,163,38)" rx="2" ry="2" />
+<text  x="127.44" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_Auto_node::_Auto_node&lt;std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (403,625 samples, 0.04%)</title><rect x="706.4" y="405" width="0.4" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="709.45" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapProvider::ReportBufferStatusParameters&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider::ReportBufferStatusParameters&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider::ReportBufferStatusParameters&gt; &gt; &gt;::_M_lower_bound (904,347 samples, 0.09%)</title><rect x="570.2" y="293" width="0.8" height="15.0" fill="rgb(206,8,2)" rx="2" ry="2" />
+<text  x="573.24" y="303.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned short const, double&gt; &gt;::_M_addr (198,698 samples, 0.02%)</title><rect x="292.6" y="469" width="0.2" height="15.0" fill="rgb(215,46,11)" rx="2" ry="2" />
+<text  x="295.62" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::~PacketBurst (269,240 samples, 0.03%)</title><rect x="120.0" y="325" width="0.2" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="122.96" y="335.5" ></text>
+</g>
+<g >
+<title>unsigned short* std::__uninitialized_copy&lt;true&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;unsigned short const*, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, unsigned short*&gt; (534,449 samples, 0.06%)</title><rect x="521.1" y="293" width="0.4" height="15.0" fill="rgb(217,57,13)" rx="2" ry="2" />
+<text  x="524.06" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::Angles::Angles (388,419 samples, 0.04%)</title><rect x="113.2" y="485" width="0.3" height="15.0" fill="rgb(254,226,54)" rx="2" ry="2" />
+<text  x="116.18" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::at (431,395 samples, 0.04%)</title><rect x="488.0" y="501" width="0.3" height="15.0" fill="rgb(220,69,16)" rx="2" ry="2" />
+<text  x="490.98" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Time::GetMilliSeconds (240,705 samples, 0.02%)</title><rect x="391.2" y="549" width="0.2" height="15.0" fill="rgb(250,207,49)" rx="2" ry="2" />
+<text  x="394.21" y="559.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::SbMeasResult_s&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::SbMeasResult_s&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::SbMeasResult_s&gt; &gt; &gt;::_S_key (240,787 samples, 0.02%)</title><rect x="185.6" y="437" width="0.2" height="15.0" fill="rgb(224,88,21)" rx="2" ry="2" />
+<text  x="188.61" y="447.5" ></text>
+</g>
+<g >
+<title>std::_List_const_iterator&lt;ns3::Callback&lt;void, unsigned short, unsigned short, double&gt; &gt;::_List_const_iterator (194,040 samples, 0.02%)</title><rect x="682.2" y="501" width="0.2" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="685.20" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_Auto_node::_M_key (311,517 samples, 0.03%)</title><rect x="271.9" y="437" width="0.2" height="15.0" fill="rgb(208,14,3)" rx="2" ry="2" />
+<text  x="274.86" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;2ul, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::_Tuple_impl&lt;double&amp;, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;&amp;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;&amp;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;&amp;, void&gt; (163,911 samples, 0.02%)</title><rect x="87.5" y="389" width="0.1" height="15.0" fill="rgb(240,161,38)" rx="2" ry="2" />
+<text  x="90.46" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::PhichListElement_s, std::allocator&lt;ns3::PhichListElement_s&gt; &gt;::~_Vector_base (153,471 samples, 0.02%)</title><rect x="229.3" y="437" width="0.1" height="15.0" fill="rgb(245,188,45)" rx="2" ry="2" />
+<text  x="232.30" y="447.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, ns3::SbMeasResult_s, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::SbMeasResult_s&gt; &gt; &gt;::end (191,621 samples, 0.02%)</title><rect x="185.2" y="485" width="0.2" height="15.0" fill="rgb(226,100,24)" rx="2" ry="2" />
+<text  x="188.24" y="495.5" ></text>
+</g>
+<g >
+<title>bool __gnu_cxx::operator==&lt;ns3::ByteTagListData* const*, std::vector&lt;ns3::ByteTagListData*, std::allocator&lt;ns3::ByteTagListData*&gt; &gt; &gt; (160,543 samples, 0.02%)</title><rect x="554.1" y="197" width="0.1" height="15.0" fill="rgb(241,169,40)" rx="2" ry="2" />
+<text  x="557.05" y="207.5" ></text>
+</g>
+<g >
+<title>ns3::PfFfMacScheduler::DoSchedDlCqiInfoReq (4,461,995 samples, 0.46%)</title><rect x="134.3" y="501" width="3.6" height="15.0" fill="rgb(242,173,41)" rx="2" ry="2" />
+<text  x="137.31" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::TbId_t, std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::_Select1st&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::_M_get_insert_unique_pos (403,662 samples, 0.04%)</title><rect x="528.3" y="277" width="0.3" height="15.0" fill="rgb(240,162,38)" rx="2" ry="2" />
+<text  x="531.31" y="287.5" ></text>
+</g>
+<g >
+<title>decltype  (351,931 samples, 0.04%)</title><rect x="658.8" y="405" width="0.3" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="661.79" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::RlcTag::GetTypeId (126,373 samples, 0.01%)</title><rect x="555.0" y="229" width="0.1" height="15.0" fill="rgb(252,216,51)" rx="2" ry="2" />
+<text  x="557.97" y="239.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;int, std::allocator&lt;int&gt; &gt;::_Vector_base (576,261 samples, 0.06%)</title><rect x="574.3" y="341" width="0.5" height="15.0" fill="rgb(215,47,11)" rx="2" ry="2" />
+<text  x="577.32" y="351.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt;::deallocate (158,232 samples, 0.02%)</title><rect x="501.2" y="501" width="0.1" height="15.0" fill="rgb(242,171,41)" rx="2" ry="2" />
+<text  x="504.20" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumSignalParametersDataFrame::LteSpectrumSignalParametersDataFrame (6,515,982 samples, 0.67%)</title><rect x="67.6" y="485" width="5.2" height="15.0" fill="rgb(206,8,1)" rx="2" ry="2" />
+<text  x="70.61" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt; &gt;::_M_valptr (233,529 samples, 0.02%)</title><rect x="170.4" y="389" width="0.2" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="173.40" y="399.5" ></text>
+</g>
+<g >
+<title>__libc_start_main (2,105,662 samples, 0.22%)</title><rect x="15.5" y="821" width="1.6" height="15.0" fill="rgb(236,142,34)" rx="2" ry="2" />
+<text  x="18.45" y="831.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::vector (712,112 samples, 0.07%)</title><rect x="718.4" y="453" width="0.5" height="15.0" fill="rgb(239,156,37)" rx="2" ry="2" />
+<text  x="721.35" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumSignalParametersDlCtrlFrame::~LteSpectrumSignalParametersDlCtrlFrame (656,172 samples, 0.07%)</title><rect x="775.9" y="405" width="0.5" height="15.0" fill="rgb(220,69,16)" rx="2" ry="2" />
+<text  x="778.88" y="415.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_M_check_len (226,478 samples, 0.02%)</title><rect x="459.7" y="245" width="0.2" height="15.0" fill="rgb(220,70,16)" rx="2" ry="2" />
+<text  x="462.70" y="255.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::DlInfoListElement_s*, std::vector&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt; &gt; std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;ns3::DlInfoListElement_s const*, std::vector&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;ns3::DlInfoListElement_s*, std::vector&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt; &gt; &gt; (293,879 samples, 0.03%)</title><rect x="206.2" y="453" width="0.2" height="15.0" fill="rgb(211,29,6)" rx="2" ry="2" />
+<text  x="209.19" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::PfFfMacScheduler::DoSchedDlTriggerReq (102,241,082 samples, 10.54%)</title><rect x="137.9" y="501" width="82.3" height="15.0" fill="rgb(214,45,10)" rx="2" ry="2" />
+<text  x="140.93" y="511.5" >ns3::PfFf..</text>
+</g>
+<g >
+<title>ns3::Simulator::ScheduleWithContext (179,532 samples, 0.02%)</title><rect x="614.1" y="501" width="0.2" height="15.0" fill="rgb(230,116,27)" rx="2" ry="2" />
+<text  x="617.14" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::_M_deallocate (126,977 samples, 0.01%)</title><rect x="521.8" y="309" width="0.1" height="15.0" fill="rgb(221,77,18)" rx="2" ry="2" />
+<text  x="524.75" y="319.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::back (197,417 samples, 0.02%)</title><rect x="610.9" y="501" width="0.1" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="613.89" y="511.5" ></text>
+</g>
+<g >
+<title> (309,905 samples, 0.03%)</title><rect x="652.2" y="501" width="0.2" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="655.18" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultSimulatorImpl::ProcessEventsWithContext (229,456 samples, 0.02%)</title><rect x="37.8" y="725" width="0.2" height="15.0" fill="rgb(243,179,42)" rx="2" ry="2" />
+<text  x="40.82" y="735.5" ></text>
+</g>
+<g >
+<title>ns3::ByteTagList::ByteTagList (194,885 samples, 0.02%)</title><rect x="624.5" y="485" width="0.2" height="15.0" fill="rgb(220,69,16)" rx="2" ry="2" />
+<text  x="627.53" y="495.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, unsigned char*&gt; (356,896 samples, 0.04%)</title><rect x="442.3" y="277" width="0.3" height="15.0" fill="rgb(227,104,25)" rx="2" ry="2" />
+<text  x="445.31" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::LteRlcSpecificLteMacSapUser::NotifyTxOpportunity (19,853,193 samples, 2.05%)</title><rect x="551.5" y="293" width="16.0" height="15.0" fill="rgb(249,204,48)" rx="2" ry="2" />
+<text  x="554.49" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::ConstValuesEnd (330,602 samples, 0.03%)</title><rect x="589.5" y="277" width="0.3" height="15.0" fill="rgb(210,25,6)" rx="2" ry="2" />
+<text  x="592.55" y="287.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::_Vector_base (189,435 samples, 0.02%)</title><rect x="203.5" y="373" width="0.2" height="15.0" fill="rgb(219,65,15)" rx="2" ry="2" />
+<text  x="206.51" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::TypeId::SetUid (156,879 samples, 0.02%)</title><rect x="436.5" y="213" width="0.1" height="15.0" fill="rgb(252,219,52)" rx="2" ry="2" />
+<text  x="439.46" y="223.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt;::_M_valptr (265,616 samples, 0.03%)</title><rect x="178.2" y="453" width="0.2" height="15.0" fill="rgb(249,206,49)" rx="2" ry="2" />
+<text  x="181.20" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Object::Object (1,324,951 samples, 0.14%)</title><rect x="446.3" y="277" width="1.0" height="15.0" fill="rgb(242,174,41)" rx="2" ry="2" />
+<text  x="449.26" y="287.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Ptr&lt;ns3::Object&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Object&gt; &gt; &gt;::clear (272,736 samples, 0.03%)</title><rect x="379.4" y="309" width="0.2" height="15.0" fill="rgb(241,167,40)" rx="2" ry="2" />
+<text  x="382.42" y="319.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::__uninitialized_copy&lt;true&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, unsigned char*&gt; (360,886 samples, 0.04%)</title><rect x="519.3" y="293" width="0.3" height="15.0" fill="rgb(233,129,30)" rx="2" ry="2" />
+<text  x="522.28" y="303.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::_M_put_node (124,434 samples, 0.01%)</title><rect x="545.2" y="213" width="0.1" height="15.0" fill="rgb(251,213,51)" rx="2" ry="2" />
+<text  x="548.24" y="223.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;double&gt;::deallocate (237,323 samples, 0.02%)</title><rect x="233.3" y="245" width="0.2" height="15.0" fill="rgb(250,208,49)" rx="2" ry="2" />
+<text  x="236.30" y="255.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::Ptr&lt;ns3::UeManager&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::Ptr&lt;ns3::UeManager&gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::Ptr&lt;ns3::UeManager&gt; &gt; &gt; &gt;::find (1,377,498 samples, 0.14%)</title><rect x="28.1" y="325" width="1.1" height="15.0" fill="rgb(248,199,47)" rx="2" ry="2" />
+<text  x="31.09" y="335.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt; &gt;::_S_key (613,816 samples, 0.06%)</title><rect x="650.3" y="453" width="0.5" height="15.0" fill="rgb(238,153,36)" rx="2" ry="2" />
+<text  x="653.31" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::CqiListElement_s* std::__do_uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::CqiListElement_s*, std::vector&lt;ns3::CqiListElement_s, std::allocator&lt;ns3::CqiListElement_s&gt; &gt; &gt;, ns3::CqiListElement_s*&gt; (1,085,784 samples, 0.11%)</title><rect x="92.1" y="421" width="0.8" height="15.0" fill="rgb(253,224,53)" rx="2" ry="2" />
+<text  x="95.06" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::RlcTag::Serialize (343,838 samples, 0.04%)</title><rect x="13.9" y="389" width="0.2" height="15.0" fill="rgb(233,133,31)" rx="2" ry="2" />
+<text  x="16.86" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, ns3::SbMeasResult_s&gt; &gt;::_M_valptr (240,787 samples, 0.02%)</title><rect x="185.6" y="421" width="0.2" height="15.0" fill="rgb(251,213,51)" rx="2" ry="2" />
+<text  x="188.61" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_Auto_node::_M_key (128,223 samples, 0.01%)</title><rect x="82.2" y="469" width="0.1" height="15.0" fill="rgb(238,154,36)" rx="2" ry="2" />
+<text  x="85.22" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt;::~_Vector_base (242,999 samples, 0.03%)</title><rect x="473.3" y="277" width="0.2" height="15.0" fill="rgb(253,220,52)" rx="2" ry="2" />
+<text  x="476.29" y="287.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt;::find (964,623 samples, 0.10%)</title><rect x="432.0" y="309" width="0.8" height="15.0" fill="rgb(219,68,16)" rx="2" ry="2" />
+<text  x="435.01" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::int64x64_t::GetDouble (246,625 samples, 0.03%)</title><rect x="605.9" y="485" width="0.2" height="15.0" fill="rgb(230,116,27)" rx="2" ry="2" />
+<text  x="608.93" y="495.5" ></text>
+</g>
+<g >
+<title>std::function&lt;void  (282,732 samples, 0.03%)</title><rect x="64.7" y="437" width="0.2" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="67.70" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::Packet, ns3::Empty, ns3::DefaultDeleter&lt;ns3::Packet&gt; &gt;::Unref (2,803,402 samples, 0.29%)</title><rect x="451.6" y="149" width="2.3" height="15.0" fill="rgb(215,47,11)" rx="2" ry="2" />
+<text  x="454.64" y="159.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt;::_M_allocate (238,842 samples, 0.02%)</title><rect x="476.4" y="261" width="0.2" height="15.0" fill="rgb(217,59,14)" rx="2" ry="2" />
+<text  x="479.41" y="271.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt;, std::allocator&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt;::_M_ptr (201,235 samples, 0.02%)</title><rect x="188.5" y="405" width="0.2" height="15.0" fill="rgb(252,218,52)" rx="2" ry="2" />
+<text  x="191.50" y="415.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt;, std::allocator&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt; &gt; &gt;::at (311,692 samples, 0.03%)</title><rect x="213.2" y="485" width="0.3" height="15.0" fill="rgb(234,135,32)" rx="2" ry="2" />
+<text  x="216.22" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::DlDciLteControlMessage::SetDci (501,657 samples, 0.05%)</title><rect x="147.9" y="453" width="0.4" height="15.0" fill="rgb(209,18,4)" rx="2" ry="2" />
+<text  x="150.88" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::operator*= (412,379 samples, 0.04%)</title><rect x="493.2" y="549" width="0.4" height="15.0" fill="rgb(222,79,18)" rx="2" ry="2" />
+<text  x="496.24" y="559.5" ></text>
+</g>
+<g >
+<title>std::_Head_base&lt;1ul, ns3::Ptr&lt;ns3::SpectrumValue&gt;, false&gt;::_M_head (146,531 samples, 0.02%)</title><rect x="755.4" y="549" width="0.1" height="15.0" fill="rgb(223,83,20)" rx="2" ry="2" />
+<text  x="758.37" y="559.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::~list (466,245 samples, 0.05%)</title><rect x="776.0" y="389" width="0.4" height="15.0" fill="rgb(222,80,19)" rx="2" ry="2" />
+<text  x="779.03" y="399.5" ></text>
+</g>
+<g >
+<title>decltype  (127,066 samples, 0.01%)</title><rect x="88.3" y="341" width="0.1" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="91.28" y="351.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;::_M_valptr (128,223 samples, 0.01%)</title><rect x="82.2" y="437" width="0.1" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="85.22" y="447.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__promote_2&lt;decltype  (555,396 samples, 0.06%)</title><rect x="486.1" y="533" width="0.4" height="15.0" fill="rgb(250,209,50)" rx="2" ry="2" />
+<text  x="489.06" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter&gt;::Unref (384,276 samples, 0.04%)</title><rect x="119.9" y="389" width="0.3" height="15.0" fill="rgb(221,78,18)" rx="2" ry="2" />
+<text  x="122.86" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;::get_allocator (277,666 samples, 0.03%)</title><rect x="350.4" y="389" width="0.3" height="15.0" fill="rgb(241,169,40)" rx="2" ry="2" />
+<text  x="353.45" y="399.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::~list (159,855 samples, 0.02%)</title><rect x="722.4" y="501" width="0.1" height="15.0" fill="rgb(222,80,19)" rx="2" ry="2" />
+<text  x="725.39" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::TracedCallback&lt;ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt; &gt;::operator (618,076 samples, 0.06%)</title><rect x="79.9" y="517" width="0.5" height="15.0" fill="rgb(228,106,25)" rx="2" ry="2" />
+<text  x="82.92" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::NoOpComponentCarrierManager::DoReportBufferStatus (1,019,985 samples, 0.11%)</title><rect x="17.9" y="373" width="0.8" height="15.0" fill="rgb(230,119,28)" rx="2" ry="2" />
+<text  x="20.88" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::~PacketBurst (2,253,374 samples, 0.23%)</title><rect x="549.2" y="245" width="1.8" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="552.20" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::LogComponent::IsEnabled (152,096 samples, 0.02%)</title><rect x="642.9" y="501" width="0.1" height="15.0" fill="rgb(214,43,10)" rx="2" ry="2" />
+<text  x="645.91" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt; &gt;::find (1,373,897 samples, 0.14%)</title><rect x="179.8" y="453" width="1.1" height="15.0" fill="rgb(214,44,10)" rx="2" ry="2" />
+<text  x="182.83" y="463.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt;::find (224,964 samples, 0.02%)</title><rect x="97.3" y="437" width="0.2" height="15.0" fill="rgb(228,106,25)" rx="2" ry="2" />
+<text  x="100.35" y="447.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::ByteTagListData*, std::allocator&lt;ns3::ByteTagListData*&gt; &gt;::end (167,215 samples, 0.02%)</title><rect x="554.2" y="197" width="0.1" height="15.0" fill="rgb(238,154,36)" rx="2" ry="2" />
+<text  x="557.22" y="207.5" ></text>
+</g>
+<g >
+<title>int* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;int const*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt;, int*&gt; (268,424 samples, 0.03%)</title><rect x="91.1" y="517" width="0.2" height="15.0" fill="rgb(251,216,51)" rx="2" ry="2" />
+<text  x="94.12" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteUeMac::LcInfo&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteUeMac::LcInfo&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteUeMac::LcInfo&gt; &gt; &gt;::_M_lower_bound (893,620 samples, 0.09%)</title><rect x="437.8" y="293" width="0.7" height="15.0" fill="rgb(237,148,35)" rx="2" ry="2" />
+<text  x="440.80" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::DlDciLteControlMessage&gt;::Ptr (301,451 samples, 0.03%)</title><rect x="388.2" y="533" width="0.3" height="15.0" fill="rgb(228,108,26)" rx="2" ry="2" />
+<text  x="391.24" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt; &gt;::operator (160,344 samples, 0.02%)</title><rect x="431.8" y="325" width="0.1" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="434.79" y="335.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;* std::__copy_move&lt;true, false, std::random_access_iterator_tag&gt;::__copy_m&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;*, std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;*&gt; (154,567 samples, 0.02%)</title><rect x="117.8" y="421" width="0.1" height="15.0" fill="rgb(209,21,5)" rx="2" ry="2" />
+<text  x="120.78" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::ByteTagList::Add (1,876,916 samples, 0.19%)</title><rect x="29.5" y="405" width="1.5" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="32.50" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::DlInfoListElement_s const*, std::vector&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt; &gt;, ns3::DlInfoListElement_s*&gt; (411,592 samples, 0.04%)</title><rect x="107.3" y="453" width="0.3" height="15.0" fill="rgb(254,227,54)" rx="2" ry="2" />
+<text  x="110.29" y="463.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;is_invocable_r_v&lt;void, void  (324,769 samples, 0.03%)</title><rect x="611.9" y="373" width="0.3" height="15.0" fill="rgb(243,178,42)" rx="2" ry="2" />
+<text  x="614.94" y="383.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::vector (276,695 samples, 0.03%)</title><rect x="71.7" y="405" width="0.2" height="15.0" fill="rgb(239,156,37)" rx="2" ry="2" />
+<text  x="74.69" y="415.5" ></text>
+</g>
+<g >
+<title>int const* std::__niter_base&lt;int const*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt; (149,777 samples, 0.02%)</title><rect x="399.1" y="453" width="0.1" height="15.0" fill="rgb(218,62,14)" rx="2" ry="2" />
+<text  x="402.06" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::EventImpl, ns3::Empty, ns3::DefaultDeleter&lt;ns3::EventImpl&gt; &gt;::Unref (635,403 samples, 0.07%)</title><rect x="308.1" y="485" width="0.5" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="311.07" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned int const, ns3::RxSpectrumModelInfo&gt; &gt;::_Rb_tree_iterator (128,201 samples, 0.01%)</title><rect x="80.9" y="485" width="0.1" height="15.0" fill="rgb(243,175,42)" rx="2" ry="2" />
+<text  x="83.93" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleUeComponentCarrierManager::DoNotifyTxOpportunity (21,809,279 samples, 2.25%)</title><rect x="551.2" y="309" width="17.6" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="554.22" y="319.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;std::_Rb_tree_node_base*, std::_Rb_tree_node_base*&gt;::pair (186,508 samples, 0.02%)</title><rect x="243.7" y="437" width="0.1" height="15.0" fill="rgb(221,76,18)" rx="2" ry="2" />
+<text  x="246.67" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Head_base&lt;1ul, ns3::Ptr&lt;ns3::SpectrumValue const&gt;, false&gt;::_M_head (163,671 samples, 0.02%)</title><rect x="754.6" y="549" width="0.2" height="15.0" fill="rgb(207,9,2)" rx="2" ry="2" />
+<text  x="757.64" y="559.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt; &gt;::destroy&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; (1,015,028 samples, 0.10%)</title><rect x="505.5" y="469" width="0.8" height="15.0" fill="rgb(209,18,4)" rx="2" ry="2" />
+<text  x="508.46" y="479.5" ></text>
+</g>
+<g >
+<title>std::function&lt;void  (891,744,980 samples, 91.95%)</title><rect x="41.0" y="693" width="717.2" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="43.97" y="703.5" >std::function&lt;void </text>
+</g>
+<g >
+<title>ns3::HarqProcessInfoElement_t* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::HarqProcessInfoElement_t const*, std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt;, ns3::HarqProcessInfoElement_t*&gt; (1,522,938 samples, 0.16%)</title><rect x="512.4" y="517" width="1.3" height="15.0" fill="rgb(233,131,31)" rx="2" ry="2" />
+<text  x="515.43" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Function_handler&lt;void  (2,105,662 samples, 0.22%)</title><rect x="15.5" y="677" width="1.6" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="18.45" y="687.5" ></text>
+</g>
+<g >
+<title>std::less&lt;unsigned short&gt;::operator (232,709 samples, 0.02%)</title><rect x="136.5" y="437" width="0.2" height="15.0" fill="rgb(207,11,2)" rx="2" ry="2" />
+<text  x="139.50" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;3ul, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::~_Tuple_impl (297,048 samples, 0.03%)</title><rect x="666.3" y="389" width="0.2" height="15.0" fill="rgb(254,225,53)" rx="2" ry="2" />
+<text  x="669.27" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::~PacketBurst (460,732 samples, 0.05%)</title><rect x="166.4" y="389" width="0.4" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="169.42" y="399.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::lower_bound (455,631 samples, 0.05%)</title><rect x="192.6" y="469" width="0.4" height="15.0" fill="rgb(218,61,14)" rx="2" ry="2" />
+<text  x="195.63" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt; &gt; &gt;::find (198,041 samples, 0.02%)</title><rect x="104.3" y="453" width="0.2" height="15.0" fill="rgb(222,81,19)" rx="2" ry="2" />
+<text  x="107.29" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::EventImpl&gt;::Ptr (124,898 samples, 0.01%)</title><rect x="706.2" y="453" width="0.1" height="15.0" fill="rgb(239,157,37)" rx="2" ry="2" />
+<text  x="709.19" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Buffer::Buffer (535,246 samples, 0.06%)</title><rect x="14.1" y="373" width="0.5" height="15.0" fill="rgb(254,226,54)" rx="2" ry="2" />
+<text  x="17.13" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;ns3::UlDciListElement_s, std::allocator&lt;ns3::UlDciListElement_s&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;ns3::UlDciListElement_s, std::allocator&lt;ns3::UlDciListElement_s&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;ns3::UlDciListElement_s, std::allocator&lt;ns3::UlDciListElement_s&gt; &gt; &gt; &gt; &gt;::_M_lower_bound (347,387 samples, 0.04%)</title><rect x="241.2" y="453" width="0.3" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="244.25" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::TbId_t, std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::_Select1st&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::clear (2,200,745 samples, 0.23%)</title><rect x="505.0" y="533" width="1.8" height="15.0" fill="rgb(207,9,2)" rx="2" ry="2" />
+<text  x="508.05" y="543.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::end (186,424 samples, 0.02%)</title><rect x="397.0" y="533" width="0.1" height="15.0" fill="rgb(214,44,10)" rx="2" ry="2" />
+<text  x="399.97" y="543.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt;::_M_check_len (162,250 samples, 0.02%)</title><rect x="595.1" y="261" width="0.2" height="15.0" fill="rgb(211,30,7)" rx="2" ry="2" />
+<text  x="598.12" y="271.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::PhichListElement_s*&gt; (154,556 samples, 0.02%)</title><rect x="229.4" y="421" width="0.1" height="15.0" fill="rgb(232,126,30)" rx="2" ry="2" />
+<text  x="232.42" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::Object::DoDelete (4,921,016 samples, 0.51%)</title><rect x="377.4" y="373" width="4.0" height="15.0" fill="rgb(212,34,8)" rx="2" ry="2" />
+<text  x="380.45" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumPhy::SetTxPowerSpectralDensity (252,668 samples, 0.03%)</title><rect x="61.3" y="533" width="0.2" height="15.0" fill="rgb(208,14,3)" rx="2" ry="2" />
+<text  x="64.27" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::operator&lt; (151,762 samples, 0.02%)</title><rect x="676.4" y="421" width="0.1" height="15.0" fill="rgb(234,137,32)" rx="2" ry="2" />
+<text  x="679.36" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter&gt;::SimpleRefCount (283,524 samples, 0.03%)</title><rect x="446.6" y="261" width="0.3" height="15.0" fill="rgb(230,117,28)" rx="2" ry="2" />
+<text  x="449.64" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::MapScheduler::RemoveNext (12,466,528 samples, 1.29%)</title><rect x="758.3" y="725" width="10.1" height="15.0" fill="rgb(247,194,46)" rx="2" ry="2" />
+<text  x="761.34" y="735.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;double&gt; &gt;::deallocate (276,642 samples, 0.03%)</title><rect x="233.3" y="277" width="0.2" height="15.0" fill="rgb(236,143,34)" rx="2" ry="2" />
+<text  x="236.27" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::TimeStep (151,604 samples, 0.02%)</title><rect x="665.2" y="469" width="0.1" height="15.0" fill="rgb(242,171,41)" rx="2" ry="2" />
+<text  x="668.20" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Packet::Copy (1,194,409 samples, 0.12%)</title><rect x="67.8" y="453" width="1.0" height="15.0" fill="rgb(250,211,50)" rx="2" ry="2" />
+<text  x="70.80" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_Rb_tree (155,456 samples, 0.02%)</title><rect x="341.2" y="453" width="0.2" height="15.0" fill="rgb(252,219,52)" rx="2" ry="2" />
+<text  x="344.24" y="463.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;unsigned short*, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;::base (158,533 samples, 0.02%)</title><rect x="218.5" y="421" width="0.1" height="15.0" fill="rgb(237,151,36)" rx="2" ry="2" />
+<text  x="221.50" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::EventImpl, ns3::Empty, ns3::DefaultDeleter&lt;ns3::EventImpl&gt; &gt;::Unref (565,943 samples, 0.06%)</title><rect x="727.4" y="485" width="0.4" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="730.39" y="495.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::HigherLayerSelected_s*, std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt; &gt; std::__niter_wrap&lt;__gnu_cxx::__normal_iterator&lt;ns3::HigherLayerSelected_s*, std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt; &gt;, ns3::HigherLayerSelected_s*&gt; (126,370 samples, 0.01%)</title><rect x="585.7" y="197" width="0.1" height="15.0" fill="rgb(212,36,8)" rx="2" ry="2" />
+<text  x="588.72" y="207.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt;::_M_create_storage (403,537 samples, 0.04%)</title><rect x="444.8" y="293" width="0.3" height="15.0" fill="rgb(206,4,1)" rx="2" ry="2" />
+<text  x="447.78" y="303.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Buffer::Data*, std::allocator&lt;ns3::Buffer::Data*&gt; &gt;::size (288,898 samples, 0.03%)</title><rect x="546.4" y="85" width="0.2" height="15.0" fill="rgb(221,74,17)" rx="2" ry="2" />
+<text  x="549.38" y="95.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::TbId_t, std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::_Select1st&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::_M_get_insert_unique_pos (357,360 samples, 0.04%)</title><rect x="385.9" y="469" width="0.3" height="15.0" fill="rgb(240,162,38)" rx="2" ry="2" />
+<text  x="388.90" y="479.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt;::find (562,566 samples, 0.06%)</title><rect x="437.0" y="293" width="0.5" height="15.0" fill="rgb(228,106,25)" rx="2" ry="2" />
+<text  x="440.02" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::HarqProcessInfoElement_t* std::copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::HarqProcessInfoElement_t const*, std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt;, ns3::HarqProcessInfoElement_t*&gt; (447,796 samples, 0.05%)</title><rect x="525.0" y="277" width="0.3" height="15.0" fill="rgb(247,195,46)" rx="2" ry="2" />
+<text  x="527.98" y="287.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::TbId_t, std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::_Select1st&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::_M_insert_node (194,473 samples, 0.02%)</title><rect x="527.8" y="277" width="0.2" height="15.0" fill="rgb(225,92,22)" rx="2" ry="2" />
+<text  x="530.80" y="287.5" ></text>
+</g>
+<g >
+<title>void std::destroy_at&lt;ns3::CqiListElement_s&gt; (154,796 samples, 0.02%)</title><rect x="131.1" y="421" width="0.1" height="15.0" fill="rgb(208,15,3)" rx="2" ry="2" />
+<text  x="134.12" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt;::_Vector_base (443,709 samples, 0.05%)</title><rect x="476.3" y="293" width="0.4" height="15.0" fill="rgb(216,55,13)" rx="2" ry="2" />
+<text  x="479.31" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::Object::DoDelete (8,154,602 samples, 0.84%)</title><rect x="544.6" y="277" width="6.5" height="15.0" fill="rgb(212,34,8)" rx="2" ry="2" />
+<text  x="547.56" y="287.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;std::_Rb_tree_node_base*, std::_Rb_tree_node_base*&gt;::pair&lt;std::_Rb_tree_node&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;*&amp;, std::_Rb_tree_node_base*&amp;&gt; (331,552 samples, 0.03%)</title><rect x="528.4" y="261" width="0.2" height="15.0" fill="rgb(207,9,2)" rx="2" ry="2" />
+<text  x="531.37" y="271.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, std::vector&lt;ns3::DlDciListElement_s, std::allocator&lt;ns3::DlDciListElement_s&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;ns3::DlDciListElement_s, std::allocator&lt;ns3::DlDciListElement_s&gt; &gt; &gt; &gt; &gt;::find (184,813 samples, 0.02%)</title><rect x="99.1" y="469" width="0.1" height="15.0" fill="rgb(241,166,39)" rx="2" ry="2" />
+<text  x="102.05" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::HigherLayerSelected_s* std::__copy_move_a2&lt;false, ns3::HigherLayerSelected_s const*, ns3::HigherLayerSelected_s*&gt; (193,644 samples, 0.02%)</title><rect x="134.9" y="405" width="0.1" height="15.0" fill="rgb(221,75,17)" rx="2" ry="2" />
+<text  x="137.86" y="415.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;::_M_put_node (199,431 samples, 0.02%)</title><rect x="393.5" y="501" width="0.1" height="15.0" fill="rgb(230,118,28)" rx="2" ry="2" />
+<text  x="396.47" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, unsigned int&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt; &gt;::begin (148,580 samples, 0.02%)</title><rect x="178.6" y="453" width="0.1" height="15.0" fill="rgb(218,62,14)" rx="2" ry="2" />
+<text  x="181.56" y="463.5" ></text>
+</g>
+<g >
+<title>[libc.so.6] (270,636 samples, 0.03%)</title><rect x="239.6" y="149" width="0.2" height="15.0" fill="rgb(223,84,20)" rx="2" ry="2" />
+<text  x="242.59" y="159.5" ></text>
+</g>
+<g >
+<title>ns3::MapScheduler::Insert (407,207 samples, 0.04%)</title><rect x="115.9" y="437" width="0.4" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="118.94" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Packet&gt;::~Ptr (392,648 samples, 0.04%)</title><rect x="612.9" y="405" width="0.3" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="615.90" y="415.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;__gnu_cxx::__normal_iterator&lt;ns3::VendorSpecificListElement_s*, std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt; &gt; &gt; (317,071 samples, 0.03%)</title><rect x="26.4" y="261" width="0.3" height="15.0" fill="rgb(213,37,9)" rx="2" ry="2" />
+<text  x="29.42" y="271.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::BuildDataListElement_s, std::allocator&lt;ns3::BuildDataListElement_s&gt; &gt;::_M_create_storage (253,158 samples, 0.03%)</title><rect x="142.5" y="421" width="0.2" height="15.0" fill="rgb(221,77,18)" rx="2" ry="2" />
+<text  x="145.52" y="431.5" ></text>
+</g>
+<g >
+<title>std::function&lt;void  (495,402 samples, 0.05%)</title><rect x="340.8" y="453" width="0.4" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="343.78" y="463.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::operator= (155,136 samples, 0.02%)</title><rect x="116.7" y="501" width="0.1" height="15.0" fill="rgb(251,215,51)" rx="2" ry="2" />
+<text  x="119.66" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_M_allocate (266,378 samples, 0.03%)</title><rect x="300.6" y="405" width="0.2" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="303.60" y="415.5" ></text>
+</g>
+<g >
+<title>double* std::__uninitialized_copy&lt;true&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, double*&gt; (979,447 samples, 0.10%)</title><rect x="412.2" y="453" width="0.8" height="15.0" fill="rgb(238,153,36)" rx="2" ry="2" />
+<text  x="415.17" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumConverter::Convert (724,879 samples, 0.07%)</title><rect x="79.1" y="517" width="0.5" height="15.0" fill="rgb(223,86,20)" rx="2" ry="2" />
+<text  x="82.07" y="527.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::list&lt;std::_List_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;, void&gt; (1,329,282 samples, 0.14%)</title><rect x="721.3" y="501" width="1.0" height="15.0" fill="rgb(247,196,47)" rx="2" ry="2" />
+<text  x="724.27" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::LteChunkProcessor::End (22,516,339 samples, 2.32%)</title><rect x="467.2" y="533" width="18.1" height="15.0" fill="rgb(223,83,19)" rx="2" ry="2" />
+<text  x="470.18" y="543.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;ns3::BuildDataListElement_s&gt; &gt;::allocate (158,386 samples, 0.02%)</title><rect x="202.5" y="437" width="0.1" height="15.0" fill="rgb(228,106,25)" rx="2" ry="2" />
+<text  x="205.48" y="447.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::push_back (307,397 samples, 0.03%)</title><rect x="118.4" y="485" width="0.3" height="15.0" fill="rgb(222,79,18)" rx="2" ry="2" />
+<text  x="121.41" y="495.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, unsigned char*, unsigned char&gt; (685,962 samples, 0.07%)</title><rect x="687.7" y="453" width="0.5" height="15.0" fill="rgb(226,96,23)" rx="2" ry="2" />
+<text  x="690.70" y="463.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::back (161,548 samples, 0.02%)</title><rect x="620.4" y="485" width="0.1" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="623.39" y="495.5" ></text>
+</g>
+<g >
+<title>void std::__invoke_impl&lt;void, void  (14,431,856 samples, 1.49%)</title><rect x="472.2" y="357" width="11.6" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="475.17" y="367.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt;::_M_erase_at_end (1,267,352 samples, 0.13%)</title><rect x="255.9" y="501" width="1.0" height="15.0" fill="rgb(236,145,34)" rx="2" ry="2" />
+<text  x="258.92" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumModel const&gt;::Ptr&lt;ns3::SpectrumModel&gt; (555,656 samples, 0.06%)</title><rect x="298.8" y="469" width="0.5" height="15.0" fill="rgb(254,225,53)" rx="2" ry="2" />
+<text  x="301.84" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::SpectrumValue (869,023 samples, 0.09%)</title><rect x="606.4" y="501" width="0.7" height="15.0" fill="rgb(211,27,6)" rx="2" ry="2" />
+<text  x="609.39" y="511.5" ></text>
+</g>
+<g >
+<title>[ld-linux-x86-64.so.2] (155,299 samples, 0.02%)</title><rect x="35.5" y="757" width="0.2" height="15.0" fill="rgb(243,178,42)" rx="2" ry="2" />
+<text  x="38.54" y="767.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultSimulatorImpl::ScheduleWithContext (179,532 samples, 0.02%)</title><rect x="614.1" y="485" width="0.2" height="15.0" fill="rgb(253,222,53)" rx="2" ry="2" />
+<text  x="617.14" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;::vector (261,998 samples, 0.03%)</title><rect x="117.4" y="469" width="0.2" height="15.0" fill="rgb(249,203,48)" rx="2" ry="2" />
+<text  x="120.37" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_Auto_node::_M_key (191,540 samples, 0.02%)</title><rect x="661.8" y="405" width="0.2" height="15.0" fill="rgb(208,14,3)" rx="2" ry="2" />
+<text  x="664.83" y="415.5" ></text>
+</g>
+<g >
+<title>void std::__invoke_impl&lt;void, std::_Bind&lt;void  (22,443,594 samples, 2.31%)</title><rect x="17.2" y="677" width="18.0" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="20.17" y="687.5" ></text>
+</g>
+<g >
+<title>ns3::HarqProcessInfoElement_t* std::__uninitialized_copy&lt;true&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::HarqProcessInfoElement_t const*, std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt;, ns3::HarqProcessInfoElement_t*&gt; (185,369 samples, 0.02%)</title><rect x="117.4" y="421" width="0.1" height="15.0" fill="rgb(238,156,37)" rx="2" ry="2" />
+<text  x="120.37" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;int const, double&gt; &gt;* std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_M_copy&lt;false, std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_Alloc_node&gt; (294,404 samples, 0.03%)</title><rect x="60.1" y="421" width="0.3" height="15.0" fill="rgb(224,87,21)" rx="2" ry="2" />
+<text  x="63.14" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::CallbackImpl&lt;void, ns3::SpectrumValue const&amp;&gt;::operator (20,037,682 samples, 2.07%)</title><rect x="467.7" y="501" width="16.1" height="15.0" fill="rgb(219,64,15)" rx="2" ry="2" />
+<text  x="470.67" y="511.5" ></text>
+</g>
+<g >
+<title>unsigned short* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;unsigned short const*, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, unsigned short*, unsigned short&gt; (192,062 samples, 0.02%)</title><rect x="147.7" y="421" width="0.1" height="15.0" fill="rgb(217,56,13)" rx="2" ry="2" />
+<text  x="150.69" y="431.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::deallocate (164,554 samples, 0.02%)</title><rect x="777.0" y="325" width="0.1" height="15.0" fill="rgb(213,39,9)" rx="2" ry="2" />
+<text  x="779.97" y="335.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::operator= (1,223,540 samples, 0.13%)</title><rect x="216.9" y="485" width="1.0" height="15.0" fill="rgb(224,91,21)" rx="2" ry="2" />
+<text  x="219.93" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Buffer::Buffer (165,400 samples, 0.02%)</title><rect x="68.0" y="421" width="0.2" height="15.0" fill="rgb(254,226,54)" rx="2" ry="2" />
+<text  x="71.03" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::MobilityModel&gt;::Ptr (189,531 samples, 0.02%)</title><rect x="643.9" y="501" width="0.1" height="15.0" fill="rgb(213,37,8)" rx="2" ry="2" />
+<text  x="646.89" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::_M_get_Node_allocator (204,937 samples, 0.02%)</title><rect x="190.9" y="405" width="0.1" height="15.0" fill="rgb(252,220,52)" rx="2" ry="2" />
+<text  x="193.86" y="415.5" ></text>
+</g>
+<g >
+<title>double* std::fill_n&lt;double*, unsigned long, double&gt; (550,124 samples, 0.06%)</title><rect x="403.7" y="405" width="0.5" height="15.0" fill="rgb(234,135,32)" rx="2" ry="2" />
+<text  x="406.71" y="415.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt;::~vector (153,009 samples, 0.02%)</title><rect x="93.4" y="485" width="0.1" height="15.0" fill="rgb(254,227,54)" rx="2" ry="2" />
+<text  x="96.42" y="495.5" ></text>
+</g>
+<g >
+<title>bool __gnu_cxx::operator==&lt;ns3::HigherLayerSelected_s const*, std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt; &gt; (229,505 samples, 0.02%)</title><rect x="125.0" y="293" width="0.2" height="15.0" fill="rgb(228,107,25)" rx="2" ry="2" />
+<text  x="128.01" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::EnbMacMemberFfMacSchedSapUser::SchedDlConfigInd (19,285,336 samples, 1.99%)</title><rect x="19.6" y="517" width="15.5" height="15.0" fill="rgb(241,166,39)" rx="2" ry="2" />
+<text  x="22.60" y="527.5" ></text>
+</g>
+<g >
+<title> (157,592 samples, 0.02%)</title><rect x="743.7" y="533" width="0.2" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="746.73" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::NoOpComponentCarrierManager::DoReceivePdu (7,688,560 samples, 0.79%)</title><rect x="424.1" y="309" width="6.2" height="15.0" fill="rgb(252,219,52)" rx="2" ry="2" />
+<text  x="427.07" y="319.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::TbId_t, std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::_Select1st&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::_M_drop_node (1,378,012 samples, 0.14%)</title><rect x="505.2" y="501" width="1.1" height="15.0" fill="rgb(222,79,18)" rx="2" ry="2" />
+<text  x="508.24" y="511.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, unsigned char*&gt; (280,915 samples, 0.03%)</title><rect x="519.3" y="261" width="0.3" height="15.0" fill="rgb(254,229,54)" rx="2" ry="2" />
+<text  x="522.35" y="271.5" ></text>
+</g>
+<g >
+<title>[ld-linux-x86-64.so.2] (279,737 samples, 0.03%)</title><rect x="10.0" y="773" width="0.2" height="15.0" fill="rgb(243,178,42)" rx="2" ry="2" />
+<text  x="13.00" y="783.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::vector (153,635 samples, 0.02%)</title><rect x="457.2" y="277" width="0.1" height="15.0" fill="rgb(206,9,2)" rx="2" ry="2" />
+<text  x="460.19" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::SbMeasResult_s::operator= (986,836 samples, 0.10%)</title><rect x="585.4" y="261" width="0.8" height="15.0" fill="rgb(205,4,1)" rx="2" ry="2" />
+<text  x="588.42" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::FfMacSchedSapProvider::SchedUlCqiInfoReqParameters::~SchedUlCqiInfoReqParameters (544,597 samples, 0.06%)</title><rect x="263.6" y="405" width="0.5" height="15.0" fill="rgb(219,67,16)" rx="2" ry="2" />
+<text  x="266.62" y="415.5" ></text>
+</g>
+<g >
+<title>double* std::__copy_move_a2&lt;false, double const*, double*&gt; (157,987 samples, 0.02%)</title><rect x="325.1" y="357" width="0.1" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="328.10" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::operator= (829,393 samples, 0.09%)</title><rect x="72.1" y="437" width="0.7" height="15.0" fill="rgb(243,177,42)" rx="2" ry="2" />
+<text  x="75.11" y="447.5" ></text>
+</g>
+<g >
+<title>std::less&lt;ns3::Scheduler::EventKey&gt;::operator (678,555 samples, 0.07%)</title><rect x="274.9" y="421" width="0.6" height="15.0" fill="rgb(234,137,32)" rx="2" ry="2" />
+<text  x="277.91" y="431.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::AttributeConstructionList::Item, std::allocator&lt;ns3::AttributeConstructionList::Item&gt; &gt;::list (568,564 samples, 0.06%)</title><rect x="630.2" y="485" width="0.4" height="15.0" fill="rgb(252,219,52)" rx="2" ry="2" />
+<text  x="633.15" y="495.5" ></text>
+</g>
+<g >
+<title>unsigned short* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;unsigned short const*, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, unsigned short*&gt; (575,480 samples, 0.06%)</title><rect x="521.0" y="309" width="0.5" height="15.0" fill="rgb(212,32,7)" rx="2" ry="2" />
+<text  x="524.02" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleUeCcmMacSapUser::NotifyTxOpportunity (21,852,046 samples, 2.25%)</title><rect x="551.2" y="325" width="17.6" height="15.0" fill="rgb(238,152,36)" rx="2" ry="2" />
+<text  x="554.19" y="335.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::CqiListElement_s*, ns3::CqiListElement_s&gt; (183,284 samples, 0.02%)</title><rect x="128.1" y="485" width="0.2" height="15.0" fill="rgb(225,92,22)" rx="2" ry="2" />
+<text  x="131.14" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt;::_M_deallocate (158,001 samples, 0.02%)</title><rect x="262.4" y="501" width="0.1" height="15.0" fill="rgb(228,109,26)" rx="2" ry="2" />
+<text  x="265.36" y="511.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_move_assign (524,495 samples, 0.05%)</title><rect x="357.2" y="405" width="0.4" height="15.0" fill="rgb(213,40,9)" rx="2" ry="2" />
+<text  x="360.22" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::Node::DoDispose (238,924 samples, 0.02%)</title><rect x="36.6" y="517" width="0.2" height="15.0" fill="rgb(209,22,5)" rx="2" ry="2" />
+<text  x="39.64" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_M_create_storage (150,187 samples, 0.02%)</title><rect x="718.4" y="421" width="0.1" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="721.35" y="431.5" ></text>
+</g>
+<g >
+<title>std::function&lt;void  (1,713,426 samples, 0.18%)</title><rect x="283.1" y="501" width="1.4" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="286.13" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumPhy::GetDevice (383,185 samples, 0.04%)</title><rect x="313.0" y="501" width="0.3" height="15.0" fill="rgb(236,146,35)" rx="2" ry="2" />
+<text  x="316.01" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::UlInfoListElement_s* std::vector&lt;ns3::UlInfoListElement_s, std::allocator&lt;ns3::UlInfoListElement_s&gt; &gt;::_M_allocate_and_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::UlInfoListElement_s const*, std::vector&lt;ns3::UlInfoListElement_s, std::allocator&lt;ns3::UlInfoListElement_s&gt; &gt; &gt; &gt; (1,018,809 samples, 0.11%)</title><rect x="266.1" y="501" width="0.8" height="15.0" fill="rgb(239,157,37)" rx="2" ry="2" />
+<text  x="269.11" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::~_Vector_base (233,349 samples, 0.02%)</title><rect x="472.9" y="261" width="0.2" height="15.0" fill="rgb(205,1,0)" rx="2" ry="2" />
+<text  x="475.94" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::AddPacket (2,126,604 samples, 0.22%)</title><rect x="562.8" y="197" width="1.7" height="15.0" fill="rgb(207,10,2)" rx="2" ry="2" />
+<text  x="565.79" y="207.5" ></text>
+</g>
+<g >
+<title>ns3::PacketMetadata::PacketMetadata (262,148 samples, 0.03%)</title><rect x="624.7" y="485" width="0.2" height="15.0" fill="rgb(231,121,28)" rx="2" ry="2" />
+<text  x="627.69" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy::ReportUlHarqFeedback (652,539 samples, 0.07%)</title><rect x="440.3" y="373" width="0.5" height="15.0" fill="rgb(222,81,19)" rx="2" ry="2" />
+<text  x="443.31" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::EnbMacMemberFfMacSchedSapUser::SchedDlConfigInd (41,165,130 samples, 4.24%)</title><rect x="140.8" y="485" width="33.1" height="15.0" fill="rgb(241,166,39)" rx="2" ry="2" />
+<text  x="143.77" y="495.5" >ns..</text>
+</g>
+<g >
+<title>std::vector&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt;::~vector (470,466 samples, 0.05%)</title><rect x="207.8" y="485" width="0.4" height="15.0" fill="rgb(213,39,9)" rx="2" ry="2" />
+<text  x="210.78" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::vector (235,913 samples, 0.02%)</title><rect x="159.6" y="405" width="0.2" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="162.56" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::HarqProcessInfoElement_t const* std::__niter_base&lt;ns3::HarqProcessInfoElement_t const*, std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; (200,788 samples, 0.02%)</title><rect x="513.0" y="453" width="0.1" height="15.0" fill="rgb(233,132,31)" rx="2" ry="2" />
+<text  x="515.96" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_Vector_impl_data::_Vector_impl_data (146,004 samples, 0.02%)</title><rect x="413.5" y="453" width="0.1" height="15.0" fill="rgb(233,133,31)" rx="2" ry="2" />
+<text  x="416.46" y="463.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::__fill_n_a&lt;unsigned char*, unsigned long, unsigned char&gt; (268,012 samples, 0.03%)</title><rect x="216.1" y="389" width="0.2" height="15.0" fill="rgb(243,177,42)" rx="2" ry="2" />
+<text  x="219.06" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::Time::GetSeconds (693,056 samples, 0.07%)</title><rect x="605.6" y="517" width="0.5" height="15.0" fill="rgb(249,203,48)" rx="2" ry="2" />
+<text  x="608.57" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::PacketTagList::Remove (349,447 samples, 0.04%)</title><rect x="435.3" y="309" width="0.2" height="15.0" fill="rgb(241,169,40)" rx="2" ry="2" />
+<text  x="438.25" y="319.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::_M_drop_node (496,453 samples, 0.05%)</title><rect x="193.2" y="437" width="0.4" height="15.0" fill="rgb(212,32,7)" rx="2" ry="2" />
+<text  x="196.18" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::LogComponent::IsEnabled (199,761 samples, 0.02%)</title><rect x="703.7" y="549" width="0.1" height="15.0" fill="rgb(214,43,10)" rx="2" ry="2" />
+<text  x="706.68" y="559.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt;::at (589,794 samples, 0.06%)</title><rect x="525.6" y="341" width="0.5" height="15.0" fill="rgb(251,215,51)" rx="2" ry="2" />
+<text  x="528.59" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::DlDciListElement_s::DlDciListElement_s (3,299,485 samples, 0.34%)</title><rect x="518.8" y="357" width="2.7" height="15.0" fill="rgb(233,129,30)" rx="2" ry="2" />
+<text  x="521.83" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt; ns3::CreateObject&lt;ns3::PacketBurst&gt; (4,247,837 samples, 0.44%)</title><rect x="160.7" y="453" width="3.4" height="15.0" fill="rgb(205,4,0)" rx="2" ry="2" />
+<text  x="163.66" y="463.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;is_invocable_r_v&lt;void, void  (19,263,971 samples, 1.99%)</title><rect x="423.2" y="405" width="15.5" height="15.0" fill="rgb(243,178,42)" rx="2" ry="2" />
+<text  x="426.21" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst const&gt;::~Ptr (148,119 samples, 0.02%)</title><rect x="720.5" y="517" width="0.1" height="15.0" fill="rgb(239,159,38)" rx="2" ry="2" />
+<text  x="723.45" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt; &gt; &gt;::_S_key (503,437 samples, 0.05%)</title><rect x="170.2" y="405" width="0.4" height="15.0" fill="rgb(243,176,42)" rx="2" ry="2" />
+<text  x="173.19" y="415.5" ></text>
+</g>
+<g >
+<title>std::__detail::_List_node_header::_List_node_header (572,667 samples, 0.06%)</title><rect x="285.6" y="485" width="0.5" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="288.64" y="495.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy_aux&lt;false&gt;::__destroy&lt;ns3::Ptr&lt;ns3::Object&gt;*&gt; (162,694 samples, 0.02%)</title><rect x="550.3" y="165" width="0.1" height="15.0" fill="rgb(208,15,3)" rx="2" ry="2" />
+<text  x="553.29" y="175.5" ></text>
+</g>
+<g >
+<title>void std::_Function_base::_Base_manager&lt;std::_Bind&lt;void  (153,002 samples, 0.02%)</title><rect x="53.7" y="469" width="0.2" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="56.75" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::LteUePhy::ReceiveLteControlMessageList (71,922,230 samples, 7.42%)</title><rect x="518.2" y="373" width="57.8" height="15.0" fill="rgb(205,0,0)" rx="2" ry="2" />
+<text  x="521.18" y="383.5" >ns3::L..</text>
+</g>
+<g >
+<title>std::_Vector_base&lt;int, std::allocator&lt;int&gt; &gt;::_M_get_Tp_allocator (179,945 samples, 0.02%)</title><rect x="699.2" y="533" width="0.1" height="15.0" fill="rgb(254,228,54)" rx="2" ry="2" />
+<text  x="702.15" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::LteUePhy::QueueSubChannelsForTransmission (714,483 samples, 0.07%)</title><rect x="530.5" y="357" width="0.6" height="15.0" fill="rgb(218,60,14)" rx="2" ry="2" />
+<text  x="533.52" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::HarqStatus_e* std::__copy_move_a1&lt;false, ns3::DlInfoListElement_s::HarqStatus_e const*, ns3::DlInfoListElement_s::HarqStatus_e*&gt; (158,174 samples, 0.02%)</title><rect x="510.0" y="421" width="0.2" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="513.04" y="431.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::operator= (1,174,367 samples, 0.12%)</title><rect x="672.8" y="533" width="1.0" height="15.0" fill="rgb(251,215,51)" rx="2" ry="2" />
+<text  x="675.85" y="543.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned char, ns3::LteUeMac::LcInfo, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteUeMac::LcInfo&gt; &gt; &gt;::find (1,463,058 samples, 0.15%)</title><rect x="690.8" y="501" width="1.2" height="15.0" fill="rgb(226,97,23)" rx="2" ry="2" />
+<text  x="693.81" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::LteRlcSm::DoNotifyTxOpportunity (2,715,978 samples, 0.28%)</title><rect x="17.2" y="421" width="2.2" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="20.17" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::Object::DoDelete (1,607,547 samples, 0.17%)</title><rect x="634.5" y="373" width="1.3" height="15.0" fill="rgb(212,34,8)" rx="2" ry="2" />
+<text  x="637.53" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::PacketTagList::~PacketTagList (184,330 samples, 0.02%)</title><rect x="653.5" y="229" width="0.2" height="15.0" fill="rgb(223,87,20)" rx="2" ry="2" />
+<text  x="656.51" y="239.5" ></text>
+</g>
+<g >
+<title>unsigned short* std::copy&lt;__gnu_cxx::__normal_iterator&lt;unsigned short const*, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, unsigned short*&gt; (649,960 samples, 0.07%)</title><rect x="474.9" y="229" width="0.5" height="15.0" fill="rgb(226,96,23)" rx="2" ry="2" />
+<text  x="477.87" y="239.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned char const, ns3::LteCcmMacSapProvider*&gt; &gt;::_M_valptr (243,580 samples, 0.03%)</title><rect x="458.6" y="213" width="0.2" height="15.0" fill="rgb(231,122,29)" rx="2" ry="2" />
+<text  x="461.61" y="223.5" ></text>
+</g>
+<g >
+<title> (247,279 samples, 0.03%)</title><rect x="534.1" y="341" width="0.2" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="537.14" y="351.5" ></text>
+</g>
+<g >
+<title>std::_List_node&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt;* std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::_M_create_node&lt;ns3::Ptr&lt;ns3::Packet&gt; const&amp;&gt; (194,175 samples, 0.02%)</title><rect x="17.4" y="293" width="0.1" height="15.0" fill="rgb(211,30,7)" rx="2" ry="2" />
+<text  x="20.39" y="303.5" ></text>
+</g>
+<g >
+<title>std::__tuple_compare&lt;std::tuple&lt;double const&amp;, double const&amp;, double const&amp;&gt;, std::tuple&lt;double const&amp;, double const&amp;, double const&amp;&gt;, 0ul, 3ul&gt;::__eq (2,160,599 samples, 0.22%)</title><rect x="747.3" y="501" width="1.7" height="15.0" fill="rgb(235,140,33)" rx="2" ry="2" />
+<text  x="750.31" y="511.5" ></text>
+</g>
+<g >
+<title>double* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, double*&gt; (156,421 samples, 0.02%)</title><rect x="484.8" y="453" width="0.2" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="487.85" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultSimulatorImpl::Run (2,105,662 samples, 0.22%)</title><rect x="15.5" y="757" width="1.6" height="15.0" fill="rgb(207,11,2)" rx="2" ry="2" />
+<text  x="18.45" y="767.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::_M_insert&lt;ns3::Ptr&lt;ns3::Packet&gt; const&amp;&gt; (1,174,204 samples, 0.12%)</title><rect x="625.9" y="485" width="1.0" height="15.0" fill="rgb(234,135,32)" rx="2" ry="2" />
+<text  x="628.93" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_S_key (206,860 samples, 0.02%)</title><rect x="83.5" y="373" width="0.2" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="86.54" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::tbInfo_t&amp;&amp; std::forward&lt;ns3::tbInfo_t&gt; (124,354 samples, 0.01%)</title><rect x="527.0" y="197" width="0.1" height="15.0" fill="rgb(228,107,25)" rx="2" ry="2" />
+<text  x="529.98" y="207.5" ></text>
+</g>
+<g >
+<title>ns3::MemberLteCcmMacSapUser&lt;ns3::NoOpComponentCarrierManager&gt;::NotifyTxOpportunity (10,219,715 samples, 1.05%)</title><rect x="150.7" y="453" width="8.2" height="15.0" fill="rgb(205,3,0)" rx="2" ry="2" />
+<text  x="153.73" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;5ul, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::_Tuple_impl&lt;std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;&amp;&gt; (236,989 samples, 0.02%)</title><rect x="340.6" y="325" width="0.2" height="15.0" fill="rgb(219,68,16)" rx="2" ry="2" />
+<text  x="343.59" y="335.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt; &gt; &gt;::_M_lower_bound (1,154,434 samples, 0.12%)</title><rect x="158.0" y="373" width="0.9" height="15.0" fill="rgb(238,153,36)" rx="2" ry="2" />
+<text  x="160.95" y="383.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;double&gt;::allocate (150,187 samples, 0.02%)</title><rect x="718.4" y="357" width="0.1" height="15.0" fill="rgb(248,201,48)" rx="2" ry="2" />
+<text  x="721.35" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::UlInfoListElement_s::UlInfoListElement_s (561,715 samples, 0.06%)</title><rect x="439.4" y="437" width="0.4" height="15.0" fill="rgb(211,29,7)" rx="2" ry="2" />
+<text  x="442.38" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt; &gt;::_M_get_Node_allocator (124,773 samples, 0.01%)</title><rect x="503.2" y="453" width="0.1" height="15.0" fill="rgb(209,19,4)" rx="2" ry="2" />
+<text  x="506.21" y="463.5" ></text>
+</g>
+<g >
+<title>std::function&lt;void  (261,746 samples, 0.03%)</title><rect x="109.8" y="485" width="0.2" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="112.79" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt;::operator (350,639 samples, 0.04%)</title><rect x="321.8" y="421" width="0.3" height="15.0" fill="rgb(252,217,52)" rx="2" ry="2" />
+<text  x="324.80" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt;::_M_lower_bound (193,840 samples, 0.02%)</title><rect x="156.6" y="373" width="0.2" height="15.0" fill="rgb(240,162,38)" rx="2" ry="2" />
+<text  x="159.62" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Bind&lt;void  (869,324 samples, 0.09%)</title><rect x="283.8" y="453" width="0.7" height="15.0" fill="rgb(253,221,52)" rx="2" ry="2" />
+<text  x="286.81" y="463.5" ></text>
+</g>
+<g >
+<title>double const&amp; const&amp; std::__get_helper&lt;2ul, double const&amp;&gt; (303,442 samples, 0.03%)</title><rect x="747.9" y="437" width="0.2" height="15.0" fill="rgb(232,125,30)" rx="2" ry="2" />
+<text  x="750.87" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_insert_node (220,811 samples, 0.02%)</title><rect x="661.7" y="389" width="0.1" height="15.0" fill="rgb(218,62,14)" rx="2" ry="2" />
+<text  x="664.65" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_M_drop_node (193,911 samples, 0.02%)</title><rect x="104.0" y="389" width="0.1" height="15.0" fill="rgb(217,55,13)" rx="2" ry="2" />
+<text  x="106.96" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::SbMeasResult_s::~SbMeasResult_s (493,524 samples, 0.05%)</title><rect x="461.1" y="293" width="0.4" height="15.0" fill="rgb(221,77,18)" rx="2" ry="2" />
+<text  x="464.07" y="303.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::AttributeConstructionList::Item, std::allocator&lt;ns3::AttributeConstructionList::Item&gt; &gt;::_List_base (414,980 samples, 0.04%)</title><rect x="162.4" y="389" width="0.4" height="15.0" fill="rgb(251,212,50)" rx="2" ry="2" />
+<text  x="165.42" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumPhy*&amp; std::forward&lt;ns3::LteSpectrumPhy*&amp;&gt; (192,441 samples, 0.02%)</title><rect x="638.4" y="469" width="0.1" height="15.0" fill="rgb(222,78,18)" rx="2" ry="2" />
+<text  x="641.36" y="479.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy_aux&lt;false&gt;::__destroy&lt;ns3::BuildDataListElement_s*&gt; (793,632 samples, 0.08%)</title><rect x="145.6" y="405" width="0.7" height="15.0" fill="rgb(224,89,21)" rx="2" ry="2" />
+<text  x="148.63" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::HigherLayerSelected_s* std::__uninitialized_copy&lt;false&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::HigherLayerSelected_s const*, std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt; &gt;, ns3::HigherLayerSelected_s*&gt; (213,295 samples, 0.02%)</title><rect x="583.7" y="213" width="0.2" height="15.0" fill="rgb(251,215,51)" rx="2" ry="2" />
+<text  x="586.69" y="223.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;*, std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt;::operator+ (151,748 samples, 0.02%)</title><rect x="376.4" y="517" width="0.1" height="15.0" fill="rgb(232,125,29)" rx="2" ry="2" />
+<text  x="379.42" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt; &gt; &gt;::_M_end (156,504 samples, 0.02%)</title><rect x="235.5" y="453" width="0.2" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="238.54" y="463.5" ></text>
+</g>
+<g >
+<title>decltype  (1,840,875 samples, 0.19%)</title><rect x="211.7" y="437" width="1.5" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="214.74" y="447.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Callback&lt;void, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt; &gt;, std::allocator&lt;ns3::Callback&lt;void, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt; &gt; &gt; &gt;::begin (158,211 samples, 0.02%)</title><rect x="80.0" y="501" width="0.1" height="15.0" fill="rgb(236,144,34)" rx="2" ry="2" />
+<text  x="82.99" y="511.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::end (160,592 samples, 0.02%)</title><rect x="498.9" y="501" width="0.1" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="501.86" y="511.5" ></text>
+</g>
+<g >
+<title>pow (358,907 samples, 0.04%)</title><rect x="302.6" y="485" width="0.2" height="15.0" fill="rgb(254,226,54)" rx="2" ry="2" />
+<text  x="305.56" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::lower_bound (431,721 samples, 0.04%)</title><rect x="243.9" y="453" width="0.4" height="15.0" fill="rgb(251,211,50)" rx="2" ry="2" />
+<text  x="246.94" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::NixVector&gt;::Acquire (419,529 samples, 0.04%)</title><rect x="360.8" y="469" width="0.3" height="15.0" fill="rgb(238,156,37)" rx="2" ry="2" />
+<text  x="363.80" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumModel const&gt;::~Ptr (312,525 samples, 0.03%)</title><rect x="315.6" y="405" width="0.2" height="15.0" fill="rgb(218,61,14)" rx="2" ry="2" />
+<text  x="318.56" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt;::_Vector_base (1,053,971 samples, 0.11%)</title><rect x="260.6" y="373" width="0.9" height="15.0" fill="rgb(208,17,4)" rx="2" ry="2" />
+<text  x="263.64" y="383.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::allocate (493,183 samples, 0.05%)</title><rect x="563.8" y="101" width="0.4" height="15.0" fill="rgb(238,153,36)" rx="2" ry="2" />
+<text  x="566.80" y="111.5" ></text>
+</g>
+<g >
+<title>double* std::__uninitialized_default_n_1&lt;true&gt;::__uninit_default_n&lt;double*, unsigned long&gt; (158,356 samples, 0.02%)</title><rect x="646.6" y="341" width="0.2" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="649.62" y="351.5" ></text>
+</g>
+<g >
+<title>void std::__fill_a&lt;double*, double&gt; (344,019 samples, 0.04%)</title><rect x="301.5" y="341" width="0.2" height="15.0" fill="rgb(211,27,6)" rx="2" ry="2" />
+<text  x="304.46" y="351.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; (372,854 samples, 0.04%)</title><rect x="72.2" y="389" width="0.3" height="15.0" fill="rgb(212,35,8)" rx="2" ry="2" />
+<text  x="75.24" y="399.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy_aux&lt;false&gt;::__destroy&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;*&gt; (160,848 samples, 0.02%)</title><rect x="146.1" y="293" width="0.2" height="15.0" fill="rgb(222,81,19)" rx="2" ry="2" />
+<text  x="149.14" y="303.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::push_back (452,241 samples, 0.05%)</title><rect x="230.2" y="405" width="0.3" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="233.16" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::HarqProcessInfoElement_t* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::HarqProcessInfoElement_t const*, std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt;, ns3::HarqProcessInfoElement_t*&gt; (419,766 samples, 0.04%)</title><rect x="591.5" y="245" width="0.3" height="15.0" fill="rgb(233,131,31)" rx="2" ry="2" />
+<text  x="594.49" y="255.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::PhichListElement_s, std::allocator&lt;ns3::PhichListElement_s&gt; &gt;::vector (813,912 samples, 0.08%)</title><rect x="227.4" y="453" width="0.7" height="15.0" fill="rgb(211,28,6)" rx="2" ry="2" />
+<text  x="230.44" y="463.5" ></text>
+</g>
+<g >
+<title>std::map&lt;ns3::Scheduler::EventKey, ns3::EventImpl*, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::lower_bound (1,848,808 samples, 0.19%)</title><rect x="336.6" y="421" width="1.5" height="15.0" fill="rgb(238,153,36)" rx="2" ry="2" />
+<text  x="339.60" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::operator&lt; (204,834 samples, 0.02%)</title><rect x="707.5" y="373" width="0.2" height="15.0" fill="rgb(234,137,32)" rx="2" ry="2" />
+<text  x="710.51" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter&gt;::SimpleRefCount (573,224 samples, 0.06%)</title><rect x="537.7" y="277" width="0.5" height="15.0" fill="rgb(230,117,28)" rx="2" ry="2" />
+<text  x="540.71" y="287.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt;::pair&lt;unsigned short, ns3::DlInfoListElement_s&gt; (569,357 samples, 0.06%)</title><rect x="503.5" y="421" width="0.5" height="15.0" fill="rgb(234,137,32)" rx="2" ry="2" />
+<text  x="506.53" y="431.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;*, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt;::operator+ (155,822 samples, 0.02%)</title><rect x="352.1" y="501" width="0.1" height="15.0" fill="rgb(234,136,32)" rx="2" ry="2" />
+<text  x="355.08" y="511.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::~vector (408,168 samples, 0.04%)</title><rect x="303.6" y="437" width="0.3" height="15.0" fill="rgb(225,92,22)" rx="2" ry="2" />
+<text  x="306.59" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::PfFfMacScheduler::DoSchedDlTriggerReq (2,983,151 samples, 0.31%)</title><rect x="17.2" y="517" width="2.4" height="15.0" fill="rgb(214,45,10)" rx="2" ry="2" />
+<text  x="20.17" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumPhy::SetTxPowerSpectralDensity (266,358 samples, 0.03%)</title><rect x="112.2" y="501" width="0.2" height="15.0" fill="rgb(208,14,3)" rx="2" ry="2" />
+<text  x="115.18" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::SbMeasResult_s::~SbMeasResult_s (340,024 samples, 0.04%)</title><rect x="106.8" y="357" width="0.3" height="15.0" fill="rgb(221,77,18)" rx="2" ry="2" />
+<text  x="109.80" y="367.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::map (934,328 samples, 0.10%)</title><rect x="189.9" y="485" width="0.7" height="15.0" fill="rgb(212,35,8)" rx="2" ry="2" />
+<text  x="192.89" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::UniformRandomVariable::GetValue (1,052,360 samples, 0.11%)</title><rect x="608.7" y="549" width="0.8" height="15.0" fill="rgb(238,152,36)" rx="2" ry="2" />
+<text  x="611.66" y="559.5" ></text>
+</g>
+<g >
+<title>std::operator+ (505,904 samples, 0.05%)</title><rect x="198.3" y="437" width="0.4" height="15.0" fill="rgb(239,157,37)" rx="2" ry="2" />
+<text  x="201.32" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteUeNetDevice&gt; ns3::Object::GetObject&lt;ns3::LteUeNetDevice&gt; (242,422 samples, 0.02%)</title><rect x="599.7" y="309" width="0.2" height="15.0" fill="rgb(251,215,51)" rx="2" ry="2" />
+<text  x="602.66" y="319.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_insert&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; const&amp;&gt; (180,536 samples, 0.02%)</title><rect x="697.8" y="501" width="0.1" height="15.0" fill="rgb(210,27,6)" rx="2" ry="2" />
+<text  x="700.79" y="511.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::~map (934,712 samples, 0.10%)</title><rect x="776.5" y="437" width="0.7" height="15.0" fill="rgb(228,107,25)" rx="2" ry="2" />
+<text  x="779.47" y="447.5" ></text>
+</g>
+<g >
+<title>__libc_start_main (923,730,017 samples, 95.25%)</title><rect x="35.5" y="821" width="743.0" height="15.0" fill="rgb(236,142,34)" rx="2" ry="2" />
+<text  x="38.54" y="831.5" >__libc_start_main</text>
+</g>
+<g >
+<title>ns3::BuildDataListElement_s* std::__relocate_a&lt;ns3::BuildDataListElement_s*, ns3::BuildDataListElement_s*, std::allocator&lt;ns3::BuildDataListElement_s&gt; &gt; (268,184 samples, 0.03%)</title><rect x="203.0" y="437" width="0.2" height="15.0" fill="rgb(221,74,17)" rx="2" ry="2" />
+<text  x="205.97" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt; &gt;::_M_lower_bound (162,629 samples, 0.02%)</title><rect x="189.0" y="453" width="0.2" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="192.03" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::EnbMacMemberLteEnbPhySapUser::UlInfoListElementHarqFeedback (486,223 samples, 0.05%)</title><rect x="440.3" y="357" width="0.4" height="15.0" fill="rgb(253,221,53)" rx="2" ry="2" />
+<text  x="443.35" y="367.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;::vector (634,130 samples, 0.07%)</title><rect x="350.7" y="389" width="0.5" height="15.0" fill="rgb(249,203,48)" rx="2" ry="2" />
+<text  x="353.67" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Bind&lt;void  (396,468 samples, 0.04%)</title><rect x="666.2" y="469" width="0.3" height="15.0" fill="rgb(253,221,52)" rx="2" ry="2" />
+<text  x="669.19" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::MatrixArray&lt;std::complex&lt;double&gt; &gt; const&gt;::operator= (149,159 samples, 0.02%)</title><rect x="645.4" y="453" width="0.1" height="15.0" fill="rgb(243,177,42)" rx="2" ry="2" />
+<text  x="648.40" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider::ReportBufferStatusParameters&gt; &gt;::_M_valptr (164,987 samples, 0.02%)</title><rect x="568.9" y="309" width="0.1" height="15.0" fill="rgb(228,107,25)" rx="2" ry="2" />
+<text  x="571.88" y="319.5" ></text>
+</g>
+<g >
+<title>std::_Bit_iterator std::__copy_move_a2&lt;false, std::_Bit_const_iterator, std::_Bit_iterator&gt; (267,552 samples, 0.03%)</title><rect x="199.4" y="373" width="0.2" height="15.0" fill="rgb(251,211,50)" rx="2" ry="2" />
+<text  x="202.39" y="383.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::operator= (1,826,902 samples, 0.19%)</title><rect x="647.0" y="421" width="1.5" height="15.0" fill="rgb(243,175,42)" rx="2" ry="2" />
+<text  x="650.00" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_get_node (493,361 samples, 0.05%)</title><rect x="334.3" y="357" width="0.4" height="15.0" fill="rgb(221,75,17)" rx="2" ry="2" />
+<text  x="337.34" y="367.5" ></text>
+</g>
+<g >
+<title>double&amp; std::forward&lt;double&amp;&gt; (125,210 samples, 0.01%)</title><rect x="48.7" y="581" width="0.1" height="15.0" fill="rgb(246,188,45)" rx="2" ry="2" />
+<text  x="51.66" y="591.5" ></text>
+</g>
+<g >
+<title>std::_List_const_iterator&lt;ns3::Callback&lt;void, ns3::Ptr&lt;ns3::MobilityModel const&gt;, ns3::Ptr&lt;ns3::MobilityModel const&gt;, double, double, double, double&gt; &gt;::_List_const_iterator (158,162 samples, 0.02%)</title><rect x="746.4" y="517" width="0.2" height="15.0" fill="rgb(213,40,9)" rx="2" ry="2" />
+<text  x="749.44" y="527.5" ></text>
+</g>
+<g >
+<title>std::_List_const_iterator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt;::_List_const_iterator (161,744 samples, 0.02%)</title><rect x="491.7" y="517" width="0.1" height="15.0" fill="rgb(234,137,32)" rx="2" ry="2" />
+<text  x="494.66" y="527.5" ></text>
+</g>
+<g >
+<title>void std::__invoke_impl&lt;void, void  (2,105,662 samples, 0.22%)</title><rect x="15.5" y="581" width="1.6" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="18.45" y="591.5" ></text>
+</g>
+<g >
+<title>ns3::operator&lt; (654,418 samples, 0.07%)</title><rect x="337.6" y="357" width="0.5" height="15.0" fill="rgb(234,137,32)" rx="2" ry="2" />
+<text  x="340.56" y="367.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt;::_M_create_storage (160,120 samples, 0.02%)</title><rect x="443.1" y="277" width="0.1" height="15.0" fill="rgb(244,180,43)" rx="2" ry="2" />
+<text  x="446.10" y="287.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::LteSpectrumModelId, std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt;, std::_Select1st&lt;std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt; &gt;, std::less&lt;ns3::LteSpectrumModelId&gt;, std::allocator&lt;std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt; &gt; &gt;::end (125,572 samples, 0.01%)</title><rect x="676.5" y="453" width="0.1" height="15.0" fill="rgb(238,156,37)" rx="2" ry="2" />
+<text  x="679.48" y="463.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, unsigned char*, unsigned char&gt; (500,842 samples, 0.05%)</title><rect x="214.2" y="453" width="0.4" height="15.0" fill="rgb(226,96,23)" rx="2" ry="2" />
+<text  x="217.21" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_Auto_node::_M_key (154,486 samples, 0.02%)</title><rect x="659.3" y="469" width="0.1" height="15.0" fill="rgb(238,154,36)" rx="2" ry="2" />
+<text  x="662.28" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt;, std::allocator&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt; &gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt;, std::allocator&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt;, std::allocator&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt;::find (151,942 samples, 0.02%)</title><rect x="99.2" y="453" width="0.1" height="15.0" fill="rgb(253,225,53)" rx="2" ry="2" />
+<text  x="102.20" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Buffer::Initialize (198,909 samples, 0.02%)</title><rect x="19.0" y="357" width="0.1" height="15.0" fill="rgb(211,31,7)" rx="2" ry="2" />
+<text  x="21.95" y="367.5" ></text>
+</g>
+<g >
+<title>decltype  (189,091 samples, 0.02%)</title><rect x="100.8" y="421" width="0.2" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="103.84" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumSignalParameters::~SpectrumSignalParameters (150,807 samples, 0.02%)</title><rect x="775.9" y="389" width="0.1" height="15.0" fill="rgb(205,2,0)" rx="2" ry="2" />
+<text  x="778.91" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::ByteTagList::~ByteTagList (286,110 samples, 0.03%)</title><rect x="76.3" y="229" width="0.2" height="15.0" fill="rgb(206,5,1)" rx="2" ry="2" />
+<text  x="79.28" y="239.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumModel const&gt;::operator= (275,587 samples, 0.03%)</title><rect x="316.7" y="405" width="0.2" height="15.0" fill="rgb(232,124,29)" rx="2" ry="2" />
+<text  x="319.72" y="415.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;int*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt;::operator++ (129,245 samples, 0.01%)</title><rect x="54.4" y="501" width="0.1" height="15.0" fill="rgb(222,80,19)" rx="2" ry="2" />
+<text  x="57.40" y="511.5" ></text>
+</g>
+<g >
+<title>std::set&lt;unsigned short, std::less&lt;unsigned short&gt;, std::allocator&lt;unsigned short&gt; &gt;::find (997,034 samples, 0.10%)</title><rect x="462.8" y="357" width="0.8" height="15.0" fill="rgb(207,12,2)" rx="2" ry="2" />
+<text  x="465.81" y="367.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt;::_M_ptr (221,148 samples, 0.02%)</title><rect x="650.6" y="421" width="0.2" height="15.0" fill="rgb(226,97,23)" rx="2" ry="2" />
+<text  x="653.60" y="431.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt; &gt;::construct&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (558,175 samples, 0.06%)</title><rect x="271.1" y="389" width="0.4" height="15.0" fill="rgb(231,122,29)" rx="2" ry="2" />
+<text  x="274.10" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::ObjectDeleter::Delete (659,540 samples, 0.07%)</title><rect x="166.3" y="421" width="0.5" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="169.26" y="431.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;::pair&lt;unsigned short const&amp;, 0ul&gt; (363,578 samples, 0.04%)</title><rect x="243.0" y="357" width="0.3" height="15.0" fill="rgb(232,124,29)" rx="2" ry="2" />
+<text  x="245.96" y="367.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt;::_M_begin (473,969 samples, 0.05%)</title><rect x="171.1" y="421" width="0.3" height="15.0" fill="rgb(254,225,53)" rx="2" ry="2" />
+<text  x="174.05" y="431.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::end (304,113 samples, 0.03%)</title><rect x="370.2" y="517" width="0.2" height="15.0" fill="rgb(211,29,6)" rx="2" ry="2" />
+<text  x="373.17" y="527.5" ></text>
+</g>
+<g >
+<title>std::less&lt;ns3::LteSpectrumModelId&gt;::operator (304,181 samples, 0.03%)</title><rect x="676.2" y="437" width="0.3" height="15.0" fill="rgb(243,176,42)" rx="2" ry="2" />
+<text  x="679.23" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Time::~Time (126,395 samples, 0.01%)</title><rect x="86.7" y="469" width="0.1" height="15.0" fill="rgb(212,36,8)" rx="2" ry="2" />
+<text  x="89.68" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::UlDciListElement_s, std::allocator&lt;ns3::UlDciListElement_s&gt; &gt;::push_back (2,043,951 samples, 0.21%)</title><rect x="249.3" y="485" width="1.6" height="15.0" fill="rgb(218,64,15)" rx="2" ry="2" />
+<text  x="252.28" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Angles::NormalizeAngles (187,861 samples, 0.02%)</title><rect x="65.9" y="485" width="0.2" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="68.93" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::LteFlowId_t, std::pair&lt;ns3::LteFlowId_t const, ns3::FfMacSchedSapProvider::SchedDlRlcBufferReqParameters&gt;, std::_Select1st&lt;std::pair&lt;ns3::LteFlowId_t const, ns3::FfMacSchedSapProvider::SchedDlRlcBufferReqParameters&gt; &gt;, std::less&lt;ns3::LteFlowId_t&gt;, std::allocator&lt;std::pair&lt;ns3::LteFlowId_t const, ns3::FfMacSchedSapProvider::SchedDlRlcBufferReqParameters&gt; &gt; &gt;::_M_lower_bound (462,671 samples, 0.05%)</title><rect x="27.0" y="277" width="0.4" height="15.0" fill="rgb(243,175,42)" rx="2" ry="2" />
+<text  x="30.01" y="287.5" ></text>
+</g>
+<g >
+<title>malloc (249,753 samples, 0.03%)</title><rect x="72.8" y="469" width="0.2" height="15.0" fill="rgb(230,119,28)" rx="2" ry="2" />
+<text  x="75.85" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::Add (189,127 samples, 0.02%)</title><rect x="405.5" y="501" width="0.1" height="15.0" fill="rgb(234,136,32)" rx="2" ry="2" />
+<text  x="408.47" y="511.5" ></text>
+</g>
+<g >
+<title>void std::__invoke_impl&lt;void, ns3::Callback&lt;void, ns3::DlInfoListElement_s&gt;::Callback&lt;void  (3,583,306 samples, 0.37%)</title><rect x="418.5" y="469" width="2.9" height="15.0" fill="rgb(216,54,12)" rx="2" ry="2" />
+<text  x="421.51" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned int, std::allocator&lt;unsigned int&gt; &gt;::_M_fill_initialize (1,326,838 samples, 0.14%)</title><rect x="695.4" y="485" width="1.0" height="15.0" fill="rgb(227,103,24)" rx="2" ry="2" />
+<text  x="698.37" y="495.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;int*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt; std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;int const*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;int*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt; &gt; (248,988 samples, 0.03%)</title><rect x="61.7" y="501" width="0.2" height="15.0" fill="rgb(236,146,35)" rx="2" ry="2" />
+<text  x="64.70" y="511.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::back (194,530 samples, 0.02%)</title><rect x="479.1" y="277" width="0.1" height="15.0" fill="rgb(237,148,35)" rx="2" ry="2" />
+<text  x="482.09" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::HarqStatus_e* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::DlInfoListElement_s::HarqStatus_e const*, std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt; &gt;, ns3::DlInfoListElement_s::HarqStatus_e*&gt; (147,743 samples, 0.02%)</title><rect x="107.3" y="341" width="0.1" height="15.0" fill="rgb(235,140,33)" rx="2" ry="2" />
+<text  x="110.33" y="351.5" ></text>
+</g>
+<g >
+<title>std::_Function_handler&lt;void  (145,405 samples, 0.01%)</title><rect x="308.5" y="389" width="0.1" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="311.46" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteUeMac::LcInfo&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteUeMac::LcInfo&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteUeMac::LcInfo&gt; &gt; &gt;::_M_lower_bound (805,256 samples, 0.08%)</title><rect x="691.2" y="469" width="0.7" height="15.0" fill="rgb(237,148,35)" rx="2" ry="2" />
+<text  x="694.25" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Object::Construct (2,205,090 samples, 0.23%)</title><rect x="33.3" y="453" width="1.8" height="15.0" fill="rgb(228,108,26)" rx="2" ry="2" />
+<text  x="36.34" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::SpectrumValue (3,061,806 samples, 0.32%)</title><rect x="411.4" y="517" width="2.5" height="15.0" fill="rgb(211,27,6)" rx="2" ry="2" />
+<text  x="414.42" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;ns3::UlDciListElement_s, std::allocator&lt;ns3::UlDciListElement_s&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;ns3::UlDciListElement_s, std::allocator&lt;ns3::UlDciListElement_s&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;ns3::UlDciListElement_s, std::allocator&lt;ns3::UlDciListElement_s&gt; &gt; &gt; &gt; &gt;::_S_key (155,594 samples, 0.02%)</title><rect x="241.3" y="437" width="0.2" height="15.0" fill="rgb(228,109,26)" rx="2" ry="2" />
+<text  x="244.34" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::LteInterference::DoSubtractSignal (20,555,876 samples, 2.12%)</title><rect x="400.6" y="565" width="16.6" height="15.0" fill="rgb(218,62,15)" rx="2" ry="2" />
+<text  x="403.64" y="575.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;ns3::LteFlowId_t const, ns3::FfMacSchedSapProvider::SchedDlRlcBufferReqParameters&gt; &gt;::_M_valptr (158,324 samples, 0.02%)</title><rect x="177.5" y="453" width="0.1" height="15.0" fill="rgb(222,81,19)" rx="2" ry="2" />
+<text  x="180.48" y="463.5" ></text>
+</g>
+<g >
+<title>operator new (152,076 samples, 0.02%)</title><rect x="270.7" y="341" width="0.2" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="273.73" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumSignalParameters* ns3::PeekPointer&lt;ns3::SpectrumSignalParameters&gt; (126,810 samples, 0.01%)</title><rect x="74.9" y="501" width="0.1" height="15.0" fill="rgb(214,43,10)" rx="2" ry="2" />
+<text  x="77.92" y="511.5" ></text>
+</g>
+<g >
+<title>std::tuple_element&lt;2ul, std::tuple&lt;double const&amp;, double const&amp;, double const&amp;&gt; &gt;::type const&amp; std::get&lt;2ul, double const&amp;, double const&amp;, double const&amp;&gt; (498,549 samples, 0.05%)</title><rect x="747.7" y="453" width="0.4" height="15.0" fill="rgb(217,56,13)" rx="2" ry="2" />
+<text  x="750.72" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumPhy::StartRx (40,953,039 samples, 4.22%)</title><rect x="705.2" y="549" width="33.0" height="15.0" fill="rgb(218,63,15)" rx="2" ry="2" />
+<text  x="708.24" y="559.5" >ns..</text>
+</g>
+<g >
+<title>double std::reduce&lt;__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, double, std::plus&lt;void&gt; &gt; (163,427 samples, 0.02%)</title><rect x="725.9" y="309" width="0.2" height="15.0" fill="rgb(221,77,18)" rx="2" ry="2" />
+<text  x="728.92" y="319.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, unsigned short, std::_Identity&lt;unsigned short&gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;unsigned short&gt; &gt;::_Rb_tree_impl&lt;std::less&lt;unsigned short&gt;, true&gt;::_Rb_tree_impl (238,331 samples, 0.02%)</title><rect x="195.0" y="453" width="0.2" height="15.0" fill="rgb(215,50,12)" rx="2" ry="2" />
+<text  x="197.99" y="463.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; std::copy&lt;__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; (372,854 samples, 0.04%)</title><rect x="72.2" y="405" width="0.3" height="15.0" fill="rgb(249,204,48)" rx="2" ry="2" />
+<text  x="75.24" y="415.5" ></text>
+</g>
+<g >
+<title>std::function&lt;void  (20,037,682 samples, 2.07%)</title><rect x="467.7" y="485" width="16.1" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="470.67" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;::_Vector_impl_data::_Vector_impl_data (152,701 samples, 0.02%)</title><rect x="514.4" y="501" width="0.1" height="15.0" fill="rgb(244,180,43)" rx="2" ry="2" />
+<text  x="517.38" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumSignalParametersDataFrame::~LteSpectrumSignalParametersDataFrame (2,628,658 samples, 0.27%)</title><rect x="773.8" y="421" width="2.1" height="15.0" fill="rgb(242,174,41)" rx="2" ry="2" />
+<text  x="776.77" y="431.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Ptr&lt;ns3::Object&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Object&gt; &gt; &gt;::~vector (266,121 samples, 0.03%)</title><rect x="502.5" y="373" width="0.2" height="15.0" fill="rgb(223,83,19)" rx="2" ry="2" />
+<text  x="505.53" y="383.5" ></text>
+</g>
+<g >
+<title>void std::destroy_at&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; (4,680,368 samples, 0.48%)</title><rect x="545.3" y="197" width="3.8" height="15.0" fill="rgb(224,88,21)" rx="2" ry="2" />
+<text  x="548.34" y="207.5" ></text>
+</g>
+<g >
+<title>__dynamic_cast (254,736 samples, 0.03%)</title><rect x="89.9" y="517" width="0.2" height="15.0" fill="rgb(227,102,24)" rx="2" ry="2" />
+<text  x="92.91" y="527.5" ></text>
+</g>
+<g >
+<title>unsigned int* std::fill_n&lt;unsigned int*, unsigned long, unsigned int&gt; (716,615 samples, 0.07%)</title><rect x="695.9" y="421" width="0.5" height="15.0" fill="rgb(219,67,16)" rx="2" ry="2" />
+<text  x="698.86" y="431.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::fill_n&lt;unsigned char*, unsigned long, unsigned char&gt; (682,457 samples, 0.07%)</title><rect x="460.4" y="197" width="0.5" height="15.0" fill="rgb(211,28,6)" rx="2" ry="2" />
+<text  x="463.39" y="207.5" ></text>
+</g>
+<g >
+<title>std::_List_iterator&lt;ns3::UlDciLteControlMessage&gt;::operator* (176,788 samples, 0.02%)</title><rect x="391.6" y="549" width="0.2" height="15.0" fill="rgb(253,224,53)" rx="2" ry="2" />
+<text  x="394.65" y="559.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::MobilityModel const&gt;::Acquire (164,722 samples, 0.02%)</title><rect x="740.8" y="501" width="0.2" height="15.0" fill="rgb(237,148,35)" rx="2" ry="2" />
+<text  x="743.82" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::_Vector_base (125,979 samples, 0.01%)</title><rect x="440.6" y="245" width="0.1" height="15.0" fill="rgb(219,65,15)" rx="2" ry="2" />
+<text  x="443.57" y="255.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt;::vector (297,291 samples, 0.03%)</title><rect x="130.8" y="501" width="0.2" height="15.0" fill="rgb(218,61,14)" rx="2" ry="2" />
+<text  x="133.79" y="511.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned int, std::allocator&lt;unsigned int&gt; &gt;::vector (2,570,731 samples, 0.27%)</title><rect x="694.8" y="501" width="2.1" height="15.0" fill="rgb(229,111,26)" rx="2" ry="2" />
+<text  x="697.83" y="511.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;::list (4,322,765 samples, 0.45%)</title><rect x="285.4" y="533" width="3.5" height="15.0" fill="rgb(231,121,29)" rx="2" ry="2" />
+<text  x="288.38" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_Vector_impl::_Vector_impl (148,226 samples, 0.02%)</title><rect x="125.3" y="229" width="0.2" height="15.0" fill="rgb(226,98,23)" rx="2" ry="2" />
+<text  x="128.35" y="239.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt;::_M_addr (195,800 samples, 0.02%)</title><rect x="723.7" y="437" width="0.1" height="15.0" fill="rgb(209,18,4)" rx="2" ry="2" />
+<text  x="726.66" y="447.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::_M_clear (5,410,131 samples, 0.56%)</title><rect x="544.8" y="229" width="4.3" height="15.0" fill="rgb(217,56,13)" rx="2" ry="2" />
+<text  x="547.75" y="239.5" ></text>
+</g>
+<g >
+<title>void ns3::Callback&lt;void, ns3::SpectrumValue const&amp;&gt;::Callback&lt;void  (18,776,737 samples, 1.94%)</title><rect x="468.7" y="421" width="15.1" height="15.0" fill="rgb(221,75,18)" rx="2" ry="2" />
+<text  x="471.68" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Function_handler&lt;void  (200,664 samples, 0.02%)</title><rect x="64.8" y="405" width="0.1" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="67.77" y="415.5" ></text>
+</g>
+<g >
+<title>void std::_Function_base::_Base_manager&lt;std::_Bind&lt;void  (495,402 samples, 0.05%)</title><rect x="340.8" y="437" width="0.4" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="343.78" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue&gt; ns3::Create&lt;ns3::SpectrumValue, ns3::Ptr&lt;ns3::SpectrumModel const&gt; const&amp;&gt; (997,289 samples, 0.10%)</title><rect x="71.2" y="437" width="0.8" height="15.0" fill="rgb(246,189,45)" rx="2" ry="2" />
+<text  x="74.24" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Function_handler&lt;void  (1,211,161 samples, 0.12%)</title><rect x="440.0" y="421" width="0.9" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="442.96" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::MemberLteFfrSapProvider&lt;ns3::LteFrNoOpAlgorithm&gt;::ReportUlCqiInfo (231,712 samples, 0.02%)</title><rect x="103.9" y="469" width="0.2" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="106.93" y="479.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__enable_if&lt;std::__is_integer&lt;int&gt;::__value, double&gt;::__type std::sqrt&lt;int&gt; (152,846 samples, 0.02%)</title><rect x="486.9" y="517" width="0.1" height="15.0" fill="rgb(213,40,9)" rx="2" ry="2" />
+<text  x="489.92" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_Vector_base (344,519 samples, 0.04%)</title><rect x="592.8" y="229" width="0.2" height="15.0" fill="rgb(205,2,0)" rx="2" ry="2" />
+<text  x="595.76" y="239.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;* std::__niter_base&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;*, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; (393,544 samples, 0.04%)</title><rect x="351.7" y="469" width="0.3" height="15.0" fill="rgb(215,48,11)" rx="2" ry="2" />
+<text  x="354.67" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::operator*= (1,505,163 samples, 0.16%)</title><rect x="745.1" y="549" width="1.2" height="15.0" fill="rgb(222,79,18)" rx="2" ry="2" />
+<text  x="748.13" y="559.5" ></text>
+</g>
+<g >
+<title>std::_List_const_iterator&lt;ns3::Callback&lt;void, unsigned short, unsigned char, unsigned int, unsigned long&gt; &gt;::_List_const_iterator (203,852 samples, 0.02%)</title><rect x="428.4" y="229" width="0.1" height="15.0" fill="rgb(237,149,35)" rx="2" ry="2" />
+<text  x="431.37" y="239.5" ></text>
+</g>
+<g >
+<title>ns3::CallbackImpl&lt;void, ns3::UlInfoListElement_s&gt;::operator (2,539,404 samples, 0.26%)</title><rect x="438.9" y="533" width="2.0" height="15.0" fill="rgb(230,118,28)" rx="2" ry="2" />
+<text  x="441.90" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_Vector_base (187,036 samples, 0.02%)</title><rect x="718.4" y="437" width="0.1" height="15.0" fill="rgb(237,150,35)" rx="2" ry="2" />
+<text  x="721.35" y="447.5" ></text>
+</g>
+<g >
+<title>void std::_Function_base::_Base_manager&lt;std::_Bind&lt;void  (675,431 samples, 0.07%)</title><rect x="307.4" y="453" width="0.5" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="310.38" y="463.5" ></text>
+</g>
+<g >
+<title>std::operator== (189,080 samples, 0.02%)</title><rect x="665.6" y="469" width="0.2" height="15.0" fill="rgb(229,110,26)" rx="2" ry="2" />
+<text  x="668.62" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_lower_bound (193,007 samples, 0.02%)</title><rect x="109.0" y="421" width="0.2" height="15.0" fill="rgb(229,113,27)" rx="2" ry="2" />
+<text  x="112.03" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue&gt;::operator* (277,433 samples, 0.03%)</title><rect x="713.5" y="501" width="0.2" height="15.0" fill="rgb(243,176,42)" rx="2" ry="2" />
+<text  x="716.49" y="511.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::_M_default_initialize (160,457 samples, 0.02%)</title><rect x="71.8" y="389" width="0.1" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="74.78" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;* std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_create_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; const&amp;&gt; (156,128 samples, 0.02%)</title><rect x="667.1" y="197" width="0.1" height="15.0" fill="rgb(227,104,24)" rx="2" ry="2" />
+<text  x="670.07" y="207.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;::~list (234,294 samples, 0.02%)</title><rect x="291.8" y="469" width="0.2" height="15.0" fill="rgb(217,57,13)" rx="2" ry="2" />
+<text  x="294.83" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy* ns3::PeekPointer&lt;ns3::LteEnbPhy&gt; (151,158 samples, 0.02%)</title><rect x="469.2" y="389" width="0.1" height="15.0" fill="rgb(221,77,18)" rx="2" ry="2" />
+<text  x="472.19" y="399.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::operator[] (2,456,594 samples, 0.25%)</title><rect x="242.5" y="485" width="2.0" height="15.0" fill="rgb(219,66,15)" rx="2" ry="2" />
+<text  x="245.49" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::BuildDataListElement_s, std::allocator&lt;ns3::BuildDataListElement_s&gt; &gt;::max_size (153,400 samples, 0.02%)</title><rect x="202.7" y="437" width="0.1" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="205.67" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_Rb_tree (4,812,209 samples, 0.50%)</title><rect x="236.7" y="469" width="3.9" height="15.0" fill="rgb(223,86,20)" rx="2" ry="2" />
+<text  x="239.73" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;bool, std::allocator&lt;bool&gt; &gt;::resize (149,910 samples, 0.02%)</title><rect x="176.1" y="453" width="0.1" height="15.0" fill="rgb(219,68,16)" rx="2" ry="2" />
+<text  x="179.10" y="463.5" ></text>
+</g>
+<g >
+<title>std::function&lt;void  (3,263,000 samples, 0.34%)</title><rect x="418.8" y="437" width="2.6" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="421.77" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::HigherLayerSelected_s* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;ns3::HigherLayerSelected_s const*, std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt; &gt;, ns3::HigherLayerSelected_s*, ns3::HigherLayerSelected_s&gt; (860,392 samples, 0.09%)</title><rect x="124.9" y="357" width="0.7" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="127.86" y="367.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;0ul, ns3::LteSpectrumPhy*&gt;::_Tuple_impl&lt;ns3::LteSpectrumPhy*&amp;&gt; (205,546 samples, 0.02%)</title><rect x="63.4" y="437" width="0.1" height="15.0" fill="rgb(216,52,12)" rx="2" ry="2" />
+<text  x="66.35" y="447.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;int&gt; &gt;::allocate (177,537 samples, 0.02%)</title><rect x="699.8" y="485" width="0.2" height="15.0" fill="rgb(248,200,47)" rx="2" ry="2" />
+<text  x="702.81" y="495.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt; &gt;::allocate (195,540 samples, 0.02%)</title><rect x="83.1" y="357" width="0.1" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="86.06" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::LtePhy::GetControlMessages[abi:cxx11] (517,990 samples, 0.05%)</title><rect x="117.6" y="533" width="0.4" height="15.0" fill="rgb(250,208,49)" rx="2" ry="2" />
+<text  x="120.58" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::int64x64_t::int64x64_t (1,365,624 samples, 0.14%)</title><rect x="389.9" y="517" width="1.1" height="15.0" fill="rgb(240,161,38)" rx="2" ry="2" />
+<text  x="392.92" y="527.5" ></text>
+</g>
+<g >
+<title>std::map&lt;ns3::LteSpectrumModelId, ns3::Ptr&lt;ns3::SpectrumModel&gt;, std::less&lt;ns3::LteSpectrumModelId&gt;, std::allocator&lt;std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt; &gt; &gt;::find (220,015 samples, 0.02%)</title><rect x="111.4" y="453" width="0.2" height="15.0" fill="rgb(226,100,24)" rx="2" ry="2" />
+<text  x="114.45" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::LteRlcSm::ReportBufferStatus (1,286,769 samples, 0.13%)</title><rect x="552.0" y="261" width="1.0" height="15.0" fill="rgb(224,89,21)" rx="2" ry="2" />
+<text  x="554.98" y="271.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;::_M_clear (433,351 samples, 0.04%)</title><rect x="290.9" y="373" width="0.3" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="293.89" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;0ul, ns3::LteEnbPhy*, ns3::Ptr&lt;ns3::PacketBurst&gt; &gt;::_M_head (204,180 samples, 0.02%)</title><rect x="752.1" y="565" width="0.1" height="15.0" fill="rgb(213,40,9)" rx="2" ry="2" />
+<text  x="755.08" y="575.5" ></text>
+</g>
+<g >
+<title>std::_Function_handler&lt;void  (34,696,291 samples, 3.58%)</title><rect x="577.5" y="469" width="27.9" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="580.46" y="479.5" >s..</text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; &gt; &gt;::_M_ptr (200,206 samples, 0.02%)</title><rect x="455.3" y="277" width="0.2" height="15.0" fill="rgb(226,97,23)" rx="2" ry="2" />
+<text  x="458.31" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::FfMacSchedSapUser::SchedDlConfigIndParameters::SchedDlConfigIndParameters (5,344,608 samples, 0.55%)</title><rect x="140.8" y="469" width="4.3" height="15.0" fill="rgb(208,15,3)" rx="2" ry="2" />
+<text  x="143.80" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::MobilityModel const&gt;::Ptr&lt;ns3::MobilityModel&gt; (387,700 samples, 0.04%)</title><rect x="742.5" y="549" width="0.3" height="15.0" fill="rgb(233,130,31)" rx="2" ry="2" />
+<text  x="745.46" y="559.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt;::_M_valptr (157,233 samples, 0.02%)</title><rect x="503.3" y="453" width="0.1" height="15.0" fill="rgb(249,202,48)" rx="2" ry="2" />
+<text  x="506.31" y="463.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::end (241,920 samples, 0.02%)</title><rect x="491.9" y="533" width="0.2" height="15.0" fill="rgb(211,29,6)" rx="2" ry="2" />
+<text  x="494.95" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::MemberLteCcmMacSapUser&lt;ns3::NoOpComponentCarrierManager&gt;::NotifyTxOpportunity (1,376,216 samples, 0.14%)</title><rect x="15.9" y="453" width="1.1" height="15.0" fill="rgb(205,3,0)" rx="2" ry="2" />
+<text  x="18.88" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::TypeId::~TypeId (294,683 samples, 0.03%)</title><rect x="544.0" y="293" width="0.3" height="15.0" fill="rgb(232,125,30)" rx="2" ry="2" />
+<text  x="547.03" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::LteRadioBearerTag::GetTypeId (197,030 samples, 0.02%)</title><rect x="490.7" y="501" width="0.2" height="15.0" fill="rgb(247,197,47)" rx="2" ry="2" />
+<text  x="493.71" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_Vector_base (183,612 samples, 0.02%)</title><rect x="688.9" y="421" width="0.1" height="15.0" fill="rgb(205,2,0)" rx="2" ry="2" />
+<text  x="691.88" y="431.5" ></text>
+</g>
+<g >
+<title>__cxxabiv1::__si_class_type_info::__do_dyncast (350,826 samples, 0.04%)</title><rect x="345.2" y="485" width="0.3" height="15.0" fill="rgb(219,65,15)" rx="2" ry="2" />
+<text  x="348.24" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::~SpectrumValue (202,197 samples, 0.02%)</title><rect x="728.9" y="453" width="0.1" height="15.0" fill="rgb(247,193,46)" rx="2" ry="2" />
+<text  x="731.89" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Packet&gt;::~Ptr (146,523 samples, 0.02%)</title><rect x="155.1" y="389" width="0.1" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="158.07" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;&amp; std::__get_helper&lt;3ul, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt; (236,255 samples, 0.02%)</title><rect x="756.9" y="581" width="0.2" height="15.0" fill="rgb(217,56,13)" rx="2" ry="2" />
+<text  x="759.93" y="591.5" ></text>
+</g>
+<g >
+<title>void std::__invoke_impl&lt;void, std::_Bind&lt;void  (2,105,662 samples, 0.22%)</title><rect x="15.5" y="645" width="1.6" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="18.45" y="655.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy::SetDownlinkSubChannels (9,637,583 samples, 0.99%)</title><rect x="296.8" y="533" width="7.7" height="15.0" fill="rgb(207,12,2)" rx="2" ry="2" />
+<text  x="299.76" y="543.5" ></text>
+</g>
+<g >
+<title>std::less&lt;unsigned short&gt;::operator (223,783 samples, 0.02%)</title><rect x="396.0" y="501" width="0.2" height="15.0" fill="rgb(207,11,2)" rx="2" ry="2" />
+<text  x="399.03" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteUePhy&gt;::Ptr (764,206 samples, 0.08%)</title><rect x="578.9" y="405" width="0.6" height="15.0" fill="rgb(241,169,40)" rx="2" ry="2" />
+<text  x="581.88" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;* std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_create_node&lt;unsigned int const&amp;, ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp;&gt; (669,703 samples, 0.07%)</title><rect x="331.6" y="437" width="0.5" height="15.0" fill="rgb(245,186,44)" rx="2" ry="2" />
+<text  x="334.57" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_Auto_node::_Auto_node&lt;std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (940,707 samples, 0.10%)</title><rect x="660.9" y="405" width="0.8" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="663.89" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumValueHelper::CreateUlTxPowerSpectralDensity (5,829,900 samples, 0.60%)</title><rect x="674.4" y="517" width="4.7" height="15.0" fill="rgb(253,224,53)" rx="2" ry="2" />
+<text  x="677.41" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::IidManager::GetParent (309,404 samples, 0.03%)</title><rect x="449.8" y="229" width="0.2" height="15.0" fill="rgb(217,59,14)" rx="2" ry="2" />
+<text  x="452.76" y="239.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::lower_bound (308,342 samples, 0.03%)</title><rect x="659.6" y="485" width="0.3" height="15.0" fill="rgb(234,137,32)" rx="2" ry="2" />
+<text  x="662.62" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::_S_check_init_len (269,236 samples, 0.03%)</title><rect x="302.1" y="437" width="0.2" height="15.0" fill="rgb(233,130,31)" rx="2" ry="2" />
+<text  x="305.09" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Time::GetSeconds (2,106,405 samples, 0.22%)</title><rect x="405.6" y="517" width="1.7" height="15.0" fill="rgb(249,203,48)" rx="2" ry="2" />
+<text  x="408.62" y="527.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::back (308,674 samples, 0.03%)</title><rect x="396.6" y="517" width="0.2" height="15.0" fill="rgb(233,130,31)" rx="2" ry="2" />
+<text  x="399.58" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt;::Ptr (242,157 samples, 0.02%)</title><rect x="633.3" y="533" width="0.2" height="15.0" fill="rgb(219,67,16)" rx="2" ry="2" />
+<text  x="636.34" y="543.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt;::at (160,105 samples, 0.02%)</title><rect x="621.0" y="533" width="0.1" height="15.0" fill="rgb(248,200,47)" rx="2" ry="2" />
+<text  x="623.97" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::RarLteControlMessage::RarLteControlMessage (154,430 samples, 0.02%)</title><rect x="166.9" y="437" width="0.1" height="15.0" fill="rgb(228,110,26)" rx="2" ry="2" />
+<text  x="169.88" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::~_Vector_base (201,377 samples, 0.02%)</title><rect x="717.7" y="421" width="0.2" height="15.0" fill="rgb(223,86,20)" rx="2" ry="2" />
+<text  x="720.73" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Node&gt;::Ptr (264,636 samples, 0.03%)</title><rect x="643.4" y="501" width="0.2" height="15.0" fill="rgb(237,147,35)" rx="2" ry="2" />
+<text  x="646.36" y="511.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::_M_clear (1,273,753 samples, 0.13%)</title><rect x="75.7" y="341" width="1.0" height="15.0" fill="rgb(217,56,13)" rx="2" ry="2" />
+<text  x="78.68" y="351.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::operator= (396,148 samples, 0.04%)</title><rect x="304.2" y="517" width="0.3" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="307.19" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::EnbMemberLteEnbPhySapProvider::SendLteControlMessage (3,042,329 samples, 0.31%)</title><rect x="148.3" y="453" width="2.4" height="15.0" fill="rgb(253,222,53)" rx="2" ry="2" />
+<text  x="151.28" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Function_handler&lt;void  (324,769 samples, 0.03%)</title><rect x="611.9" y="469" width="0.3" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="614.94" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Object::Check (206,111 samples, 0.02%)</title><rect x="450.5" y="261" width="0.2" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="453.52" y="271.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::_M_get_insert_unique_pos (159,018 samples, 0.02%)</title><rect x="192.4" y="437" width="0.2" height="15.0" fill="rgb(230,115,27)" rx="2" ry="2" />
+<text  x="195.44" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::~PacketBurst (1,161,332 samples, 0.12%)</title><rect x="454.0" y="229" width="0.9" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="456.99" y="239.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::end (181,482 samples, 0.02%)</title><rect x="680.6" y="517" width="0.2" height="15.0" fill="rgb(214,44,10)" rx="2" ry="2" />
+<text  x="683.63" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Function_base::_Base_manager&lt;ns3::Callback&lt;void, ns3::Ptr&lt;ns3::Packet&gt; &gt;::Callback&lt;void  (426,263 samples, 0.04%)</title><rect x="422.0" y="485" width="0.3" height="15.0" fill="rgb(205,0,0)" rx="2" ry="2" />
+<text  x="424.97" y="495.5" ></text>
+</g>
+<g >
+<title>unsigned short* std::__uninitialized_copy_a&lt;std::move_iterator&lt;unsigned short*&gt;, unsigned short*, unsigned short&gt; (728,775 samples, 0.08%)</title><rect x="253.1" y="437" width="0.5" height="15.0" fill="rgb(225,96,22)" rx="2" ry="2" />
+<text  x="256.06" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::~PacketBurst (1,475,273 samples, 0.15%)</title><rect x="76.7" y="373" width="1.2" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="79.70" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultDeleter&lt;ns3::SpectrumValue&gt;::Delete (235,829 samples, 0.02%)</title><rect x="656.0" y="485" width="0.2" height="15.0" fill="rgb(222,79,19)" rx="2" ry="2" />
+<text  x="659.02" y="495.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;ns3::FfMacSchedSapProvider::SchedUlCqiInfoReqParameters&gt; &gt;::construct&lt;ns3::FfMacSchedSapProvider::SchedUlCqiInfoReqParameters, ns3::FfMacSchedSapProvider::SchedUlCqiInfoReqParameters const&amp;&gt; (480,241 samples, 0.05%)</title><rect x="473.8" y="277" width="0.4" height="15.0" fill="rgb(205,0,0)" rx="2" ry="2" />
+<text  x="476.84" y="287.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::lower_bound (2,631,944 samples, 0.27%)</title><rect x="273.3" y="453" width="2.2" height="15.0" fill="rgb(254,228,54)" rx="2" ry="2" />
+<text  x="276.34" y="463.5" ></text>
+</g>
+<g >
+<title>int const&amp; std::min&lt;int&gt; (162,428 samples, 0.02%)</title><rect x="425.6" y="213" width="0.2" height="15.0" fill="rgb(250,207,49)" rx="2" ry="2" />
+<text  x="428.63" y="223.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_S_key (573,784 samples, 0.06%)</title><rect x="274.2" y="421" width="0.4" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="277.16" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::Now (284,192 samples, 0.03%)</title><rect x="607.3" y="517" width="0.3" height="15.0" fill="rgb(241,168,40)" rx="2" ry="2" />
+<text  x="610.35" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Bind&lt;void  (889,944 samples, 0.09%)</title><rect x="44.1" y="645" width="0.8" height="15.0" fill="rgb(253,221,52)" rx="2" ry="2" />
+<text  x="47.14" y="655.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;int const, double&gt; &gt; std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_M_emplace_hint_unique&lt;std::pair&lt;int, double&gt; &gt; (385,367 samples, 0.04%)</title><rect x="110.9" y="485" width="0.3" height="15.0" fill="rgb(237,149,35)" rx="2" ry="2" />
+<text  x="113.86" y="495.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt; &gt;::find (277,435 samples, 0.03%)</title><rect x="188.9" y="485" width="0.3" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="191.94" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::AntennaModel&gt;::Acquire (338,066 samples, 0.03%)</title><rect x="669.0" y="517" width="0.3" height="15.0" fill="rgb(205,4,1)" rx="2" ry="2" />
+<text  x="671.99" y="527.5" ></text>
+</g>
+<g >
+<title>cfree (157,707 samples, 0.02%)</title><rect x="716.8" y="325" width="0.2" height="15.0" fill="rgb(223,86,20)" rx="2" ry="2" />
+<text  x="719.83" y="335.5" ></text>
+</g>
+<g >
+<title>void std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::_M_construct_node&lt;std::piecewise_construct_t const&amp;, std::tuple&lt;unsigned short const&amp;&gt;, std::tuple&lt;&gt; &gt; (1,034,007 samples, 0.11%)</title><rect x="191.2" y="421" width="0.8" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="194.20" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::int64x64_t::int64x64_t (150,413 samples, 0.02%)</title><rect x="121.0" y="485" width="0.1" height="15.0" fill="rgb(240,161,38)" rx="2" ry="2" />
+<text  x="123.99" y="495.5" ></text>
+</g>
+<g >
+<title>std::operator== (196,279 samples, 0.02%)</title><rect x="166.0" y="357" width="0.1" height="15.0" fill="rgb(229,110,26)" rx="2" ry="2" />
+<text  x="168.97" y="367.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;unsigned char*, unsigned char&gt; (220,248 samples, 0.02%)</title><rect x="255.2" y="325" width="0.2" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="258.22" y="335.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::_M_check_len (170,871 samples, 0.02%)</title><rect x="591.2" y="245" width="0.2" height="15.0" fill="rgb(229,114,27)" rx="2" ry="2" />
+<text  x="594.22" y="255.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::TbId_t, std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::_Select1st&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::find (1,490,594 samples, 0.15%)</title><rect x="507.2" y="533" width="1.2" height="15.0" fill="rgb(215,50,12)" rx="2" ry="2" />
+<text  x="510.16" y="543.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;* std::__copy_move&lt;true, false, std::random_access_iterator_tag&gt;::__copy_m&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;*, std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;*&gt; (603,213 samples, 0.06%)</title><rect x="357.2" y="437" width="0.4" height="15.0" fill="rgb(209,21,5)" rx="2" ry="2" />
+<text  x="360.16" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Time::GetTimeStep (222,929 samples, 0.02%)</title><rect x="664.8" y="469" width="0.2" height="15.0" fill="rgb(205,0,0)" rx="2" ry="2" />
+<text  x="667.80" y="479.5" ></text>
+</g>
+<g >
+<title>unsigned int&amp; std::__get_helper&lt;2ul, unsigned int&gt; (546,981 samples, 0.06%)</title><rect x="755.8" y="581" width="0.5" height="15.0" fill="rgb(211,31,7)" rx="2" ry="2" />
+<text  x="758.83" y="591.5" ></text>
+</g>
+<g >
+<title>std::_Bit_const_iterator::_M_const_cast (177,400 samples, 0.02%)</title><rect x="197.1" y="453" width="0.1" height="15.0" fill="rgb(219,68,16)" rx="2" ry="2" />
+<text  x="200.08" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt;::_S_key (463,094 samples, 0.05%)</title><rect x="171.5" y="405" width="0.4" height="15.0" fill="rgb(229,113,27)" rx="2" ry="2" />
+<text  x="174.52" y="415.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Callback&lt;void, ns3::Ptr&lt;ns3::PacketBurst const&gt; &gt;, std::allocator&lt;ns3::Callback&lt;void, ns3::Ptr&lt;ns3::PacketBurst const&gt; &gt; &gt; &gt;::begin (162,620 samples, 0.02%)</title><rect x="90.4" y="517" width="0.1" height="15.0" fill="rgb(243,175,41)" rx="2" ry="2" />
+<text  x="93.42" y="527.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;::~pair (198,551 samples, 0.02%)</title><rect x="233.0" y="357" width="0.1" height="15.0" fill="rgb(226,100,24)" rx="2" ry="2" />
+<text  x="235.95" y="367.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::back (166,101 samples, 0.02%)</title><rect x="590.0" y="245" width="0.2" height="15.0" fill="rgb(233,130,31)" rx="2" ry="2" />
+<text  x="593.05" y="255.5" ></text>
+</g>
+<g >
+<title>std::less&lt;unsigned short&gt;::operator (282,929 samples, 0.03%)</title><rect x="466.2" y="485" width="0.2" height="15.0" fill="rgb(207,11,2)" rx="2" ry="2" />
+<text  x="469.16" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt;::vector (154,721 samples, 0.02%)</title><rect x="461.6" y="229" width="0.1" height="15.0" fill="rgb(248,198,47)" rx="2" ry="2" />
+<text  x="464.55" y="239.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; std::map&lt;ns3::TbId_t, ns3::tbInfo_t, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::emplace_hint&lt;std::pair&lt;ns3::TbId_t, ns3::tbInfo_t&gt; &gt; (2,992,854 samples, 0.31%)</title><rect x="526.3" y="325" width="2.4" height="15.0" fill="rgb(245,186,44)" rx="2" ry="2" />
+<text  x="529.26" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumSignalParameters::SpectrumSignalParameters (580,700 samples, 0.06%)</title><rect x="113.8" y="437" width="0.5" height="15.0" fill="rgb(219,67,16)" rx="2" ry="2" />
+<text  x="116.83" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::ObjectDeleter::Delete (1,607,547 samples, 0.17%)</title><rect x="634.5" y="389" width="1.3" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="637.53" y="399.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt;::vector (1,506,714 samples, 0.16%)</title><rect x="143.9" y="453" width="1.2" height="15.0" fill="rgb(218,61,14)" rx="2" ry="2" />
+<text  x="146.89" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbMac::DoSubframeIndication (19,358,790 samples, 2.00%)</title><rect x="19.6" y="565" width="15.5" height="15.0" fill="rgb(248,200,47)" rx="2" ry="2" />
+<text  x="22.57" y="575.5" ></text>
+</g>
+<g >
+<title>malloc (197,254 samples, 0.02%)</title><rect x="446.4" y="261" width="0.1" height="15.0" fill="rgb(230,119,28)" rx="2" ry="2" />
+<text  x="449.36" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::EnbMacMemberLteMacSapProvider&lt;ns3::NoOpComponentCarrierManager&gt;::ReportBufferStatus (747,299 samples, 0.08%)</title><rect x="12.5" y="389" width="0.6" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="15.49" y="399.5" ></text>
+</g>
+<g >
+<title>operator new (372,038 samples, 0.04%)</title><rect x="557.9" y="181" width="0.3" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="560.93" y="191.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;::empty (324,331 samples, 0.03%)</title><rect x="488.9" y="533" width="0.2" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="491.89" y="543.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;*, std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt; &gt; std::__copy_move_a&lt;true, __gnu_cxx::__normal_iterator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;*, std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;*, std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt; &gt; &gt; (1,076,159 samples, 0.11%)</title><rect x="357.0" y="485" width="0.9" height="15.0" fill="rgb(226,96,23)" rx="2" ry="2" />
+<text  x="360.03" y="495.5" ></text>
+</g>
+<g >
+<title>bool __gnu_cxx::operator==&lt;ns3::DlInfoListElement_s*, std::vector&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt; &gt; (230,973 samples, 0.02%)</title><rect x="207.6" y="421" width="0.2" height="15.0" fill="rgb(238,154,36)" rx="2" ry="2" />
+<text  x="210.60" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt; &gt; &gt;::_M_lower_bound (464,204 samples, 0.05%)</title><rect x="186.7" y="453" width="0.3" height="15.0" fill="rgb(243,176,42)" rx="2" ry="2" />
+<text  x="189.66" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::HarqStatus_e* std::__uninitialized_copy&lt;true&gt;::__uninit_copy&lt;std::move_iterator&lt;ns3::DlInfoListElement_s::HarqStatus_e*&gt;, ns3::DlInfoListElement_s::HarqStatus_e*&gt; (347,263 samples, 0.04%)</title><rect x="511.3" y="469" width="0.3" height="15.0" fill="rgb(210,24,5)" rx="2" ry="2" />
+<text  x="514.33" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt;::_S_key (208,515 samples, 0.02%)</title><rect x="568.2" y="245" width="0.2" height="15.0" fill="rgb(224,91,21)" rx="2" ry="2" />
+<text  x="571.22" y="255.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;*, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; std::move&lt;__gnu_cxx::__normal_iterator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;*, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;*, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; &gt; (3,099,663 samples, 0.32%)</title><rect x="349.6" y="501" width="2.5" height="15.0" fill="rgb(218,63,15)" rx="2" ry="2" />
+<text  x="352.59" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::FfMacSchedSapProvider::SchedDlCqiInfoReqParameters::SchedDlCqiInfoReqParameters (527,752 samples, 0.05%)</title><rect x="130.6" y="517" width="0.4" height="15.0" fill="rgb(253,222,53)" rx="2" ry="2" />
+<text  x="133.61" y="527.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::max_size (189,176 samples, 0.02%)</title><rect x="102.2" y="405" width="0.2" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="105.23" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt; &gt; &gt;::_M_lower_bound (925,594 samples, 0.10%)</title><rect x="170.1" y="421" width="0.7" height="15.0" fill="rgb(208,18,4)" rx="2" ry="2" />
+<text  x="173.09" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::LteUePhy::ReceivePss (833,626 samples, 0.09%)</title><rect x="725.9" y="341" width="0.7" height="15.0" fill="rgb(247,196,46)" rx="2" ry="2" />
+<text  x="728.89" y="351.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::_M_clear (3,222,559 samples, 0.33%)</title><rect x="451.3" y="213" width="2.6" height="15.0" fill="rgb(217,56,13)" rx="2" ry="2" />
+<text  x="454.30" y="223.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::MobilityModel&gt;::operator (237,842 samples, 0.02%)</title><rect x="741.1" y="517" width="0.1" height="15.0" fill="rgb(206,8,1)" rx="2" ry="2" />
+<text  x="744.05" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_lower_bound (1,279,264 samples, 0.13%)</title><rect x="663.3" y="405" width="1.0" height="15.0" fill="rgb(229,113,27)" rx="2" ry="2" />
+<text  x="666.31" y="415.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;ns3::RlcPduListElement_s&gt;::allocate (190,161 samples, 0.02%)</title><rect x="212.9" y="341" width="0.1" height="15.0" fill="rgb(225,94,22)" rx="2" ry="2" />
+<text  x="215.85" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::LteChunkProcessor::Start (1,058,141 samples, 0.11%)</title><rect x="716.2" y="501" width="0.9" height="15.0" fill="rgb(227,103,24)" rx="2" ry="2" />
+<text  x="719.22" y="511.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt;::construct&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; const&amp;&gt; (406,463 samples, 0.04%)</title><rect x="623.6" y="517" width="0.3" height="15.0" fill="rgb(217,55,13)" rx="2" ry="2" />
+<text  x="626.61" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::Angles::Angles (1,131,340 samples, 0.12%)</title><rect x="65.5" y="501" width="0.9" height="15.0" fill="rgb(254,226,54)" rx="2" ry="2" />
+<text  x="68.52" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteSpectrumPhy&gt;::operator* (166,039 samples, 0.02%)</title><rect x="605.1" y="341" width="0.2" height="15.0" fill="rgb(218,61,14)" rx="2" ry="2" />
+<text  x="608.13" y="351.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::lower_bound (152,705 samples, 0.02%)</title><rect x="116.1" y="389" width="0.1" height="15.0" fill="rgb(254,228,54)" rx="2" ry="2" />
+<text  x="119.06" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_Vector_impl::_Vector_impl (212,001 samples, 0.02%)</title><rect x="595.9" y="117" width="0.2" height="15.0" fill="rgb(226,98,23)" rx="2" ry="2" />
+<text  x="598.89" y="127.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;::vector (2,102,576 samples, 0.22%)</title><rect x="352.6" y="485" width="1.7" height="15.0" fill="rgb(249,203,48)" rx="2" ry="2" />
+<text  x="355.61" y="495.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::push_back (691,803 samples, 0.07%)</title><rect x="419.6" y="341" width="0.6" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="422.65" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy::StartFrame (38,351,386 samples, 3.95%)</title><rect x="91.7" y="565" width="30.8" height="15.0" fill="rgb(209,22,5)" rx="2" ry="2" />
+<text  x="94.67" y="575.5" >ns..</text>
+</g>
+<g >
+<title>ns3::SimpleUeComponentCarrierManager::DoTransmitPdu (7,667,549 samples, 0.79%)</title><rect x="560.7" y="245" width="6.1" height="15.0" fill="rgb(239,160,38)" rx="2" ry="2" />
+<text  x="563.65" y="255.5" ></text>
+</g>
+<g >
+<title>std::_Head_base&lt;2ul, unsigned int, false&gt;::_Head_base&lt;unsigned int&amp;&gt; (281,440 samples, 0.03%)</title><rect x="710.0" y="373" width="0.2" height="15.0" fill="rgb(209,19,4)" rx="2" ry="2" />
+<text  x="712.95" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::TbId_t, std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::_Select1st&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::_Auto_node::_M_key (372,232 samples, 0.04%)</title><rect x="385.5" y="485" width="0.3" height="15.0" fill="rgb(214,44,10)" rx="2" ry="2" />
+<text  x="388.51" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Object::GetInstanceTypeId (156,330 samples, 0.02%)</title><rect x="372.7" y="469" width="0.1" height="15.0" fill="rgb(230,117,28)" rx="2" ry="2" />
+<text  x="375.65" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::CqiListElement_s::~CqiListElement_s (894,967 samples, 0.09%)</title><rect x="255.0" y="389" width="0.7" height="15.0" fill="rgb(225,92,22)" rx="2" ry="2" />
+<text  x="258.00" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::MakeEvent&lt;void  (2,105,662 samples, 0.22%)</title><rect x="15.5" y="709" width="1.6" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="18.45" y="719.5" ></text>
+</g>
+<g >
+<title>std::_Bvector_base&lt;std::allocator&lt;bool&gt; &gt;::_M_move_data (305,258 samples, 0.03%)</title><rect x="196.2" y="469" width="0.2" height="15.0" fill="rgb(244,182,43)" rx="2" ry="2" />
+<text  x="199.20" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Function_base::_Base_manager&lt;std::_Bind&lt;void  (145,405 samples, 0.01%)</title><rect x="308.5" y="373" width="0.1" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="311.46" y="383.5" ></text>
+</g>
+<g >
+<title>cfree (124,394 samples, 0.01%)</title><rect x="776.2" y="277" width="0.1" height="15.0" fill="rgb(223,86,20)" rx="2" ry="2" />
+<text  x="779.16" y="287.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;ns3::DlDciListElement_s, std::allocator&lt;ns3::DlDciListElement_s&gt; &gt; &gt; &gt;::_M_valptr (232,350 samples, 0.02%)</title><rect x="187.3" y="421" width="0.2" height="15.0" fill="rgb(222,81,19)" rx="2" ry="2" />
+<text  x="190.35" y="431.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy_aux&lt;false&gt;::__destroy&lt;ns3::CqiListElement_s*&gt; (933,761 samples, 0.10%)</title><rect x="255.0" y="437" width="0.7" height="15.0" fill="rgb(229,111,26)" rx="2" ry="2" />
+<text  x="257.97" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt; &gt;::_M_begin (244,771 samples, 0.03%)</title><rect x="73.4" y="469" width="0.2" height="15.0" fill="rgb(212,35,8)" rx="2" ry="2" />
+<text  x="76.41" y="479.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_clear (569,510 samples, 0.06%)</title><rect x="392.1" y="517" width="0.4" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="395.05" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::NixVector&gt;::Acquire (169,425 samples, 0.02%)</title><rect x="559.0" y="213" width="0.2" height="15.0" fill="rgb(238,156,37)" rx="2" ry="2" />
+<text  x="562.01" y="223.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt;::erase (2,631,164 samples, 0.27%)</title><rect x="356.4" y="533" width="2.1" height="15.0" fill="rgb(213,39,9)" rx="2" ry="2" />
+<text  x="359.38" y="543.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::lower_bound (431,721 samples, 0.04%)</title><rect x="243.9" y="469" width="0.4" height="15.0" fill="rgb(218,61,14)" rx="2" ry="2" />
+<text  x="246.94" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::DlDciLteControlMessage&gt; ns3::DynamicCast&lt;ns3::DlDciLteControlMessage, ns3::LteControlMessage&gt; (458,846 samples, 0.05%)</title><rect x="533.8" y="357" width="0.3" height="15.0" fill="rgb(254,228,54)" rx="2" ry="2" />
+<text  x="536.77" y="367.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt;::cbegin (469,030 samples, 0.05%)</title><rect x="623.2" y="517" width="0.4" height="15.0" fill="rgb(245,184,44)" rx="2" ry="2" />
+<text  x="626.20" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::SbMeasResult_s::SbMeasResult_s (365,319 samples, 0.04%)</title><rect x="92.2" y="373" width="0.3" height="15.0" fill="rgb(235,141,33)" rx="2" ry="2" />
+<text  x="95.25" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::TypeId::TypeId (165,840 samples, 0.02%)</title><rect x="543.6" y="277" width="0.2" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="546.64" y="287.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::end (139,584 samples, 0.01%)</title><rect x="648.3" y="405" width="0.1" height="15.0" fill="rgb(237,147,35)" rx="2" ry="2" />
+<text  x="651.30" y="415.5" ></text>
+</g>
+<g >
+<title>void ns3::Callback&lt;void, ns3::Ptr&lt;ns3::Packet&gt; &gt;::Callback&lt;void  (20,138,435 samples, 2.08%)</title><rect x="422.5" y="453" width="16.2" height="15.0" fill="rgb(212,36,8)" rx="2" ry="2" />
+<text  x="425.51" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::EnbMemberLteEnbPhySapProvider::SendLteControlMessage (498,633 samples, 0.05%)</title><rect x="95.8" y="437" width="0.4" height="15.0" fill="rgb(253,222,53)" rx="2" ry="2" />
+<text  x="98.80" y="447.5" ></text>
+</g>
+<g >
+<title>void std::__invoke_impl&lt;void, ns3::Callback&lt;void, ns3::Ptr&lt;ns3::Packet&gt; &gt;::Callback&lt;void  (20,180,449 samples, 2.08%)</title><rect x="422.5" y="469" width="16.2" height="15.0" fill="rgb(236,145,34)" rx="2" ry="2" />
+<text  x="425.47" y="479.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;::clear (2,445,979 samples, 0.25%)</title><rect x="501.0" y="549" width="1.9" height="15.0" fill="rgb(246,188,45)" rx="2" ry="2" />
+<text  x="503.96" y="559.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_insert&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; const&amp;&gt; (530,447 samples, 0.05%)</title><rect x="611.1" y="501" width="0.4" height="15.0" fill="rgb(210,27,6)" rx="2" ry="2" />
+<text  x="614.12" y="511.5" ></text>
+</g>
+<g >
+<title>unsigned short* std::uninitialized_copy&lt;std::move_iterator&lt;unsigned short*&gt;, unsigned short*&gt; (728,775 samples, 0.08%)</title><rect x="253.1" y="421" width="0.5" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="256.06" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::TbId_t, std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::_Select1st&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::_Auto_node::_Auto_node&lt;std::pair&lt;ns3::TbId_t, ns3::tbInfo_t&gt; &gt; (1,620,533 samples, 0.17%)</title><rect x="384.1" y="485" width="1.3" height="15.0" fill="rgb(218,62,14)" rx="2" ry="2" />
+<text  x="387.11" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::LogComponent::IsEnabled (206,491 samples, 0.02%)</title><rect x="400.8" y="549" width="0.2" height="15.0" fill="rgb(214,43,10)" rx="2" ry="2" />
+<text  x="403.80" y="559.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, ns3::LteEnbComponentCarrierManager::UeInfo, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt; &gt; &gt;::at (1,778,082 samples, 0.18%)</title><rect x="428.8" y="293" width="1.5" height="15.0" fill="rgb(209,18,4)" rx="2" ry="2" />
+<text  x="431.82" y="303.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned int, ns3::TxSpectrumModelInfo, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt; &gt;::find (1,213,331 samples, 0.13%)</title><rect x="73.3" y="501" width="1.0" height="15.0" fill="rgb(208,16,3)" rx="2" ry="2" />
+<text  x="76.28" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt; std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt; &gt;::_M_emplace_hint_unique&lt;std::pair&lt;unsigned short, ns3::DlInfoListElement_s&gt; &gt; (2,130,125 samples, 0.22%)</title><rect x="503.1" y="517" width="1.7" height="15.0" fill="rgb(223,83,19)" rx="2" ry="2" />
+<text  x="506.08" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::SpectrumValue, ns3::Empty, ns3::DefaultDeleter&lt;ns3::SpectrumValue&gt; &gt;::Unref (227,190 samples, 0.02%)</title><rect x="112.2" y="469" width="0.2" height="15.0" fill="rgb(246,189,45)" rx="2" ry="2" />
+<text  x="115.21" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PropagationLossModel&gt;::operator bool (286,148 samples, 0.03%)</title><rect x="743.4" y="549" width="0.3" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="746.44" y="559.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt;::operator= (324,739 samples, 0.03%)</title><rect x="593.3" y="277" width="0.3" height="15.0" fill="rgb(252,217,52)" rx="2" ry="2" />
+<text  x="596.31" y="287.5" ></text>
+</g>
+<g >
+<title>std::_Bvector_base&lt;std::allocator&lt;bool&gt; &gt;::_M_allocate (148,686 samples, 0.02%)</title><rect x="247.3" y="437" width="0.1" height="15.0" fill="rgb(235,141,33)" rx="2" ry="2" />
+<text  x="250.26" y="447.5" ></text>
+</g>
+<g >
+<title>__dynamic_cast (724,942 samples, 0.07%)</title><rect x="671.3" y="517" width="0.6" height="15.0" fill="rgb(227,102,24)" rx="2" ry="2" />
+<text  x="674.33" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::RlcPduListElement_s* std::__relocate_a_1&lt;ns3::RlcPduListElement_s*, ns3::RlcPduListElement_s*, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; (159,106 samples, 0.02%)</title><rect x="210.0" y="421" width="0.2" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="213.04" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteSpectrumSignalParametersDataFrame&gt; ns3::Create&lt;ns3::LteSpectrumSignalParametersDataFrame&gt; (1,120,807 samples, 0.12%)</title><rect x="88.5" y="533" width="0.9" height="15.0" fill="rgb(223,86,20)" rx="2" ry="2" />
+<text  x="91.55" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::EventImpl::EventImpl (155,310 samples, 0.02%)</title><rect x="616.8" y="501" width="0.1" height="15.0" fill="rgb(247,195,46)" rx="2" ry="2" />
+<text  x="619.76" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::MacCeListElement_s* std::__do_uninit_copy&lt;std::move_iterator&lt;ns3::MacCeListElement_s*&gt;, ns3::MacCeListElement_s*&gt; (193,178 samples, 0.02%)</title><rect x="129.7" y="421" width="0.2" height="15.0" fill="rgb(208,14,3)" rx="2" ry="2" />
+<text  x="132.71" y="431.5" ></text>
+</g>
+<g >
+<title>void std::_Function_base::_Base_manager&lt;std::_Bind&lt;void  (574,266 samples, 0.06%)</title><rect x="618.6" y="485" width="0.4" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="621.57" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumPhy&gt;::operator= (154,933 samples, 0.02%)</title><rect x="672.0" y="533" width="0.2" height="15.0" fill="rgb(238,153,36)" rx="2" ry="2" />
+<text  x="675.04" y="543.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_clear (263,603 samples, 0.03%)</title><rect x="357.4" y="373" width="0.2" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="360.43" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::operator= (980,052 samples, 0.10%)</title><rect x="718.9" y="485" width="0.8" height="15.0" fill="rgb(243,177,42)" rx="2" ry="2" />
+<text  x="721.93" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::operator* (125,769 samples, 0.01%)</title><rect x="601.8" y="325" width="0.1" height="15.0" fill="rgb(251,212,50)" rx="2" ry="2" />
+<text  x="604.75" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter&gt;::Unref (1,713,044 samples, 0.18%)</title><rect x="634.4" y="405" width="1.4" height="15.0" fill="rgb(221,78,18)" rx="2" ry="2" />
+<text  x="637.44" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::SpectrumValue, ns3::Empty, ns3::DefaultDeleter&lt;ns3::SpectrumValue&gt; &gt;::Unref (127,422 samples, 0.01%)</title><rect x="61.4" y="501" width="0.1" height="15.0" fill="rgb(246,189,45)" rx="2" ry="2" />
+<text  x="64.37" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::operator*= (321,020 samples, 0.03%)</title><rect x="389.7" y="501" width="0.2" height="15.0" fill="rgb(207,9,2)" rx="2" ry="2" />
+<text  x="392.66" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, double&gt; &gt;::_M_valptr (275,175 samples, 0.03%)</title><rect x="292.6" y="501" width="0.2" height="15.0" fill="rgb(254,229,54)" rx="2" ry="2" />
+<text  x="295.56" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::FfMacSchedSapUser::SchedUlConfigIndParameters::~SchedUlConfigIndParameters (876,854 samples, 0.09%)</title><rect x="229.3" y="469" width="0.7" height="15.0" fill="rgb(224,91,21)" rx="2" ry="2" />
+<text  x="232.30" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt;, std::allocator&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt;::operator (188,098 samples, 0.02%)</title><rect x="188.7" y="421" width="0.1" height="15.0" fill="rgb(228,108,26)" rx="2" ry="2" />
+<text  x="191.66" y="431.5" ></text>
+</g>
+<g >
+<title>double* std::__uninitialized_default_n_1&lt;true&gt;::__uninit_default_n&lt;double*, unsigned long&gt; (322,925 samples, 0.03%)</title><rect x="718.5" y="389" width="0.3" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="721.54" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::PacketMetadata::Allocate (678,878 samples, 0.07%)</title><rect x="32.7" y="357" width="0.5" height="15.0" fill="rgb(231,121,29)" rx="2" ry="2" />
+<text  x="35.70" y="367.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::allocate (126,498 samples, 0.01%)</title><rect x="81.8" y="405" width="0.1" height="15.0" fill="rgb(212,32,7)" rx="2" ry="2" />
+<text  x="84.85" y="415.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt;::construct&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, ns3::Ptr&lt;ns3::PacketBurst&gt; const&amp;&gt; (389,168 samples, 0.04%)</title><rect x="724.8" y="469" width="0.3" height="15.0" fill="rgb(222,79,18)" rx="2" ry="2" />
+<text  x="727.80" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;signed char, std::allocator&lt;signed char&gt; &gt;::_M_range_check (245,588 samples, 0.03%)</title><rect x="532.0" y="325" width="0.2" height="15.0" fill="rgb(222,79,19)" rx="2" ry="2" />
+<text  x="535.05" y="335.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;::_Rb_tree_iterator (629,732 samples, 0.06%)</title><rect x="276.4" y="469" width="0.5" height="15.0" fill="rgb(223,85,20)" rx="2" ry="2" />
+<text  x="279.40" y="479.5" ></text>
+</g>
+<g >
+<title>double* std::__uninitialized_default_n&lt;double*, unsigned long&gt; (605,341 samples, 0.06%)</title><rect x="729.7" y="405" width="0.5" height="15.0" fill="rgb(231,123,29)" rx="2" ry="2" />
+<text  x="732.73" y="415.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::end (153,672 samples, 0.02%)</title><rect x="355.5" y="485" width="0.1" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="358.45" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::HarqStatus_e* std::__copy_move_a&lt;true, ns3::DlInfoListElement_s::HarqStatus_e*, ns3::DlInfoListElement_s::HarqStatus_e*&gt; (267,517 samples, 0.03%)</title><rect x="511.4" y="437" width="0.2" height="15.0" fill="rgb(237,150,36)" rx="2" ry="2" />
+<text  x="514.40" y="447.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Callback&lt;void, ns3::Ptr&lt;ns3::Packet const&gt; &gt;, std::allocator&lt;ns3::Callback&lt;void, ns3::Ptr&lt;ns3::Packet const&gt; &gt; &gt; &gt;::end (205,687 samples, 0.02%)</title><rect x="494.6" y="533" width="0.1" height="15.0" fill="rgb(245,186,44)" rx="2" ry="2" />
+<text  x="497.57" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::HarqProcessInfoElement_t* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::HarqProcessInfoElement_t const*, std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt;, ns3::HarqProcessInfoElement_t*&gt; (1,567,317 samples, 0.16%)</title><rect x="352.7" y="453" width="1.3" height="15.0" fill="rgb(233,131,31)" rx="2" ry="2" />
+<text  x="355.73" y="463.5" ></text>
+</g>
+<g >
+<title>void std::_Construct&lt;ns3::DlInfoListElement_s, ns3::DlInfoListElement_s&amp;&gt; (313,569 samples, 0.03%)</title><rect x="206.7" y="405" width="0.2" height="15.0" fill="rgb(228,106,25)" rx="2" ry="2" />
+<text  x="209.69" y="415.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::CqiListElement_s, std::allocator&lt;ns3::CqiListElement_s&gt; &gt;::_M_erase_at_end (416,767 samples, 0.04%)</title><rect x="106.8" y="469" width="0.3" height="15.0" fill="rgb(244,182,43)" rx="2" ry="2" />
+<text  x="109.77" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::erase[abi:cxx11] (6,953,857 samples, 0.72%)</title><rect x="762.4" y="693" width="5.6" height="15.0" fill="rgb(218,59,14)" rx="2" ry="2" />
+<text  x="765.39" y="703.5" ></text>
+</g>
+<g >
+<title>ns3::CqiListElement_s::CqiListElement_s (3,330,355 samples, 0.34%)</title><rect x="124.7" y="405" width="2.6" height="15.0" fill="rgb(238,156,37)" rx="2" ry="2" />
+<text  x="127.65" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_Rb_tree (152,827 samples, 0.02%)</title><rect x="667.8" y="261" width="0.2" height="15.0" fill="rgb(252,219,52)" rx="2" ry="2" />
+<text  x="670.83" y="271.5" ></text>
+</g>
+<g >
+<title>bool __gnu_cxx::operator==&lt;ns3::VendorSpecificListElement_s const*, std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt; &gt; (156,843 samples, 0.02%)</title><rect x="228.7" y="373" width="0.2" height="15.0" fill="rgb(233,131,31)" rx="2" ry="2" />
+<text  x="231.73" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter&gt;::Unref (2,031,472 samples, 0.21%)</title><rect x="773.8" y="373" width="1.7" height="15.0" fill="rgb(221,78,18)" rx="2" ry="2" />
+<text  x="776.83" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::ByteTagList::~ByteTagList (336,743 samples, 0.03%)</title><rect x="653.2" y="229" width="0.3" height="15.0" fill="rgb(206,5,1)" rx="2" ry="2" />
+<text  x="656.21" y="239.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::begin (166,916 samples, 0.02%)</title><rect x="574.8" y="341" width="0.1" height="15.0" fill="rgb(233,133,31)" rx="2" ry="2" />
+<text  x="577.78" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::operator[] (472,196 samples, 0.05%)</title><rect x="488.0" y="517" width="0.3" height="15.0" fill="rgb(248,202,48)" rx="2" ry="2" />
+<text  x="490.95" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumPhy&gt; ns3::Object::GetObject&lt;ns3::SpectrumPhy&gt; (1,654,930 samples, 0.17%)</title><rect x="344.5" y="517" width="1.3" height="15.0" fill="rgb(214,45,10)" rx="2" ry="2" />
+<text  x="347.52" y="527.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;::operator= (1,124,799 samples, 0.12%)</title><rect x="290.4" y="421" width="0.9" height="15.0" fill="rgb(246,191,45)" rx="2" ry="2" />
+<text  x="293.37" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultSimulatorImpl::Schedule (15,576,788 samples, 1.61%)</title><rect x="267.8" y="517" width="12.6" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="270.84" y="527.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt;::allocate (265,191 samples, 0.03%)</title><rect x="262.0" y="469" width="0.2" height="15.0" fill="rgb(228,110,26)" rx="2" ry="2" />
+<text  x="265.02" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;::size (154,036 samples, 0.02%)</title><rect x="525.5" y="325" width="0.1" height="15.0" fill="rgb(244,182,43)" rx="2" ry="2" />
+<text  x="528.47" y="335.5" ></text>
+</g>
+<g >
+<title>decltype  (181,678 samples, 0.02%)</title><rect x="636.4" y="485" width="0.2" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="639.43" y="495.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::construct&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; const&amp;&gt; (127,066 samples, 0.01%)</title><rect x="88.3" y="357" width="0.1" height="15.0" fill="rgb(236,146,35)" rx="2" ry="2" />
+<text  x="91.28" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::~PacketBurst (1,782,590 samples, 0.18%)</title><rect x="164.7" y="373" width="1.4" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="167.70" y="383.5" ></text>
+</g>
+<g >
+<title>malloc (429,586 samples, 0.04%)</title><rect x="325.4" y="341" width="0.4" height="15.0" fill="rgb(230,119,28)" rx="2" ry="2" />
+<text  x="328.42" y="351.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Callback&lt;void, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt; &gt;, std::allocator&lt;ns3::Callback&lt;void, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt; &gt; &gt; &gt;::begin (232,164 samples, 0.02%)</title><rect x="328.1" y="485" width="0.2" height="15.0" fill="rgb(236,144,34)" rx="2" ry="2" />
+<text  x="331.13" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::Packet, ns3::Empty, ns3::DefaultDeleter&lt;ns3::Packet&gt; &gt;::SimpleRefCount (222,949 samples, 0.02%)</title><rect x="361.3" y="485" width="0.2" height="15.0" fill="rgb(223,86,20)" rx="2" ry="2" />
+<text  x="364.28" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Buffer::Initialize (1,790,059 samples, 0.18%)</title><rect x="555.8" y="213" width="1.4" height="15.0" fill="rgb(211,31,7)" rx="2" ry="2" />
+<text  x="558.80" y="223.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::Ptr&lt;ns3::Object&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Object&gt; &gt; &gt;::_Vector_base (124,541 samples, 0.01%)</title><rect x="69.9" y="389" width="0.1" height="15.0" fill="rgb(235,141,33)" rx="2" ry="2" />
+<text  x="72.91" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::ByteTagList::Iterator::Iterator (236,079 samples, 0.02%)</title><rect x="436.6" y="213" width="0.2" height="15.0" fill="rgb(248,198,47)" rx="2" ry="2" />
+<text  x="439.62" y="223.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::at (190,175 samples, 0.02%)</title><rect x="327.2" y="469" width="0.1" height="15.0" fill="rgb(220,69,16)" rx="2" ry="2" />
+<text  x="330.15" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::DlHarqFeedbackLteControlMessage::SetDlHarqFeedback (234,084 samples, 0.02%)</title><rect x="419.3" y="357" width="0.2" height="15.0" fill="rgb(233,129,30)" rx="2" ry="2" />
+<text  x="422.30" y="367.5" ></text>
+</g>
+<g >
+<title>std::_Bit_const_iterator::_Bit_const_iterator (148,793 samples, 0.02%)</title><rect x="195.5" y="421" width="0.1" height="15.0" fill="rgb(225,95,22)" rx="2" ry="2" />
+<text  x="198.48" y="431.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::begin (160,992 samples, 0.02%)</title><rect x="70.4" y="453" width="0.1" height="15.0" fill="rgb(230,117,28)" rx="2" ry="2" />
+<text  x="73.40" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::IidManager::IidInformation, std::allocator&lt;ns3::IidManager::IidInformation&gt; &gt;::size (157,042 samples, 0.02%)</title><rect x="631.5" y="421" width="0.1" height="15.0" fill="rgb(249,206,49)" rx="2" ry="2" />
+<text  x="634.46" y="431.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::_List_base (209,616 samples, 0.02%)</title><rect x="538.8" y="277" width="0.2" height="15.0" fill="rgb(250,210,50)" rx="2" ry="2" />
+<text  x="541.79" y="287.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt;::begin (156,943 samples, 0.02%)</title><rect x="207.3" y="469" width="0.1" height="15.0" fill="rgb(244,183,43)" rx="2" ry="2" />
+<text  x="210.32" y="479.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_List_impl::_List_impl (410,572 samples, 0.04%)</title><rect x="619.8" y="501" width="0.4" height="15.0" fill="rgb(244,183,43)" rx="2" ry="2" />
+<text  x="622.83" y="511.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy_aux&lt;false&gt;::__destroy&lt;ns3::VendorSpecificListElement_s*&gt; (234,807 samples, 0.02%)</title><rect x="263.9" y="341" width="0.2" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="266.87" y="351.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt;::_M_mbegin (191,851 samples, 0.02%)</title><rect x="171.3" y="405" width="0.1" height="15.0" fill="rgb(249,206,49)" rx="2" ry="2" />
+<text  x="174.28" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::TypeId::GetAttributeN (942,736 samples, 0.10%)</title><rect x="448.9" y="245" width="0.7" height="15.0" fill="rgb(225,95,22)" rx="2" ry="2" />
+<text  x="451.88" y="255.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::BuildDataListElement_s, std::allocator&lt;ns3::BuildDataListElement_s&gt; &gt;::vector (1,851,121 samples, 0.19%)</title><rect x="141.5" y="453" width="1.5" height="15.0" fill="rgb(225,95,22)" rx="2" ry="2" />
+<text  x="144.54" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;int, std::allocator&lt;int&gt; &gt;::_M_create_storage (635,025 samples, 0.07%)</title><rect x="699.4" y="517" width="0.6" height="15.0" fill="rgb(212,35,8)" rx="2" ry="2" />
+<text  x="702.45" y="527.5" ></text>
+</g>
+<g >
+<title>bool std::_Function_base::_Base_manager&lt;std::_Bind&lt;void  (159,062 samples, 0.02%)</title><rect x="639.1" y="469" width="0.2" height="15.0" fill="rgb(213,39,9)" rx="2" ry="2" />
+<text  x="642.14" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;::_Rb_tree_iterator (189,556 samples, 0.02%)</title><rect x="192.8" y="421" width="0.2" height="15.0" fill="rgb(223,87,20)" rx="2" ry="2" />
+<text  x="195.85" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumModel const&gt;::operator (157,592 samples, 0.02%)</title><rect x="743.7" y="549" width="0.2" height="15.0" fill="rgb(226,96,23)" rx="2" ry="2" />
+<text  x="746.73" y="559.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteControlMessage&gt;::~Ptr (167,870 samples, 0.02%)</title><rect x="576.5" y="293" width="0.1" height="15.0" fill="rgb(208,17,4)" rx="2" ry="2" />
+<text  x="579.46" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::PacketTagList::Remove (1,461,431 samples, 0.15%)</title><rect x="430.5" y="309" width="1.2" height="15.0" fill="rgb(241,169,40)" rx="2" ry="2" />
+<text  x="433.48" y="319.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;::__normal_iterator (157,586 samples, 0.02%)</title><rect x="746.0" y="501" width="0.2" height="15.0" fill="rgb(215,50,12)" rx="2" ry="2" />
+<text  x="749.04" y="511.5" ></text>
+</g>
+<g >
+<title>std::operator== (190,947 samples, 0.02%)</title><rect x="331.2" y="501" width="0.1" height="15.0" fill="rgb(229,110,26)" rx="2" ry="2" />
+<text  x="334.19" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::DlDciLteControlMessage&gt;::operator (247,279 samples, 0.03%)</title><rect x="534.1" y="357" width="0.2" height="15.0" fill="rgb(222,79,19)" rx="2" ry="2" />
+<text  x="537.14" y="367.5" ></text>
+</g>
+<g >
+<title>double* std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, double*&gt; (231,188 samples, 0.02%)</title><rect x="654.7" y="405" width="0.2" height="15.0" fill="rgb(210,23,5)" rx="2" ry="2" />
+<text  x="657.74" y="415.5" ></text>
+</g>
+<g >
+<title>decltype (238,924 samples, 0.02%)</title><rect x="36.6" y="709" width="0.2" height="15.0" fill="rgb(220,73,17)" rx="2" ry="2" />
+<text  x="39.64" y="719.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter&gt;::Unref (4,924,388 samples, 0.51%)</title><rect x="451.1" y="293" width="4.0" height="15.0" fill="rgb(221,78,18)" rx="2" ry="2" />
+<text  x="454.12" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::Simulator::Run (5,321,712 samples, 0.55%)</title><rect x="11.2" y="789" width="4.3" height="15.0" fill="rgb(234,134,32)" rx="2" ry="2" />
+<text  x="14.17" y="799.5" ></text>
+</g>
+<g >
+<title>void std::_Construct&lt;ns3::CqiListElement_s, ns3::CqiListElement_s&amp;&gt; (3,446,655 samples, 0.36%)</title><rect x="124.6" y="421" width="2.8" height="15.0" fill="rgb(236,143,34)" rx="2" ry="2" />
+<text  x="127.59" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::Simulator::Destroy (238,924 samples, 0.02%)</title><rect x="36.6" y="773" width="0.2" height="15.0" fill="rgb(211,29,6)" rx="2" ry="2" />
+<text  x="39.64" y="783.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt; &gt;::find (353,675 samples, 0.04%)</title><rect x="508.8" y="533" width="0.3" height="15.0" fill="rgb(212,32,7)" rx="2" ry="2" />
+<text  x="511.84" y="543.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;double&gt;::deallocate (199,701 samples, 0.02%)</title><rect x="716.8" y="341" width="0.2" height="15.0" fill="rgb(250,208,49)" rx="2" ry="2" />
+<text  x="719.83" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::ObjectDeleter::Delete (2,326,898 samples, 0.24%)</title><rect x="164.3" y="421" width="1.8" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="167.26" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; std::map&lt;ns3::Scheduler::EventKey, ns3::EventImpl*, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::emplace_hint&lt;std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (2,428,249 samples, 0.25%)</title><rect x="660.8" y="437" width="2.0" height="15.0" fill="rgb(253,224,53)" rx="2" ry="2" />
+<text  x="663.83" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt;::~_Vector_base (148,819 samples, 0.02%)</title><rect x="255.5" y="341" width="0.1" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="258.45" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::UlDciLteControlMessage&amp; std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;::emplace_back&lt;ns3::UlDciLteControlMessage const&amp;&gt; (139,939 samples, 0.01%)</title><rect x="110.3" y="485" width="0.1" height="15.0" fill="rgb(207,11,2)" rx="2" ry="2" />
+<text  x="113.27" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::GetSpectrumModel (192,465 samples, 0.02%)</title><rect x="327.6" y="501" width="0.2" height="15.0" fill="rgb(228,106,25)" rx="2" ry="2" />
+<text  x="330.62" y="511.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt; &gt;::allocate (228,044 samples, 0.02%)</title><rect x="191.0" y="405" width="0.2" height="15.0" fill="rgb(250,207,49)" rx="2" ry="2" />
+<text  x="194.02" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_M_deallocate (124,900 samples, 0.01%)</title><rect x="605.4" y="469" width="0.1" height="15.0" fill="rgb(240,162,38)" rx="2" ry="2" />
+<text  x="608.43" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned int, std::allocator&lt;unsigned int&gt; &gt;::_M_deallocate (393,825 samples, 0.04%)</title><rect x="697.0" y="469" width="0.4" height="15.0" fill="rgb(230,117,28)" rx="2" ry="2" />
+<text  x="700.04" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::TagBuffer::ReadU8 (242,549 samples, 0.03%)</title><rect x="490.5" y="485" width="0.2" height="15.0" fill="rgb(242,174,41)" rx="2" ry="2" />
+<text  x="493.48" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::push_back (376,292 samples, 0.04%)</title><rect x="102.2" y="469" width="0.3" height="15.0" fill="rgb(229,113,27)" rx="2" ry="2" />
+<text  x="105.17" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::VendorSpecificListElement_s* std::__do_uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::VendorSpecificListElement_s const*, std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt; &gt;, ns3::VendorSpecificListElement_s*&gt; (401,487 samples, 0.04%)</title><rect x="475.8" y="245" width="0.3" height="15.0" fill="rgb(219,66,15)" rx="2" ry="2" />
+<text  x="478.80" y="255.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;* std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_M_create_node&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; const&amp;&gt; (3,565,957 samples, 0.37%)</title><rect x="237.4" y="373" width="2.9" height="15.0" fill="rgb(235,139,33)" rx="2" ry="2" />
+<text  x="240.45" y="383.5" ></text>
+</g>
+<g >
+<title>std::__is_constant_evaluated (126,671 samples, 0.01%)</title><rect x="563.8" y="85" width="0.1" height="15.0" fill="rgb(234,137,32)" rx="2" ry="2" />
+<text  x="566.80" y="95.5" ></text>
+</g>
+<g >
+<title>ns3::CqiListElement_s::CqiListElement_s (892,722 samples, 0.09%)</title><rect x="92.2" y="389" width="0.7" height="15.0" fill="rgb(238,156,37)" rx="2" ry="2" />
+<text  x="95.22" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::CallbackImpl&lt;void, std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt;::operator (75,554,587 samples, 7.79%)</title><rect x="515.9" y="533" width="60.7" height="15.0" fill="rgb(232,124,29)" rx="2" ry="2" />
+<text  x="518.86" y="543.5" >ns3::C..</text>
+</g>
+<g >
+<title>ns3::Object::Construct (2,912,216 samples, 0.30%)</title><rect x="372.2" y="501" width="2.4" height="15.0" fill="rgb(228,108,26)" rx="2" ry="2" />
+<text  x="375.23" y="511.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;int const*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt; std::__miter_base&lt;__gnu_cxx::__normal_iterator&lt;int const*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt; &gt; (153,542 samples, 0.02%)</title><rect x="398.8" y="469" width="0.1" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="401.81" y="479.5" ></text>
+</g>
+<g >
+<title>std::_List_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::insert&lt;std::_List_const_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;, void&gt; (804,377 samples, 0.08%)</title><rect x="318.7" y="421" width="0.7" height="15.0" fill="rgb(210,23,5)" rx="2" ry="2" />
+<text  x="321.72" y="431.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;::~vector (530,782 samples, 0.05%)</title><rect x="351.2" y="389" width="0.4" height="15.0" fill="rgb(235,139,33)" rx="2" ry="2" />
+<text  x="354.18" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt;::_M_begin (452,338 samples, 0.05%)</title><rect x="567.8" y="261" width="0.4" height="15.0" fill="rgb(249,203,48)" rx="2" ry="2" />
+<text  x="570.83" y="271.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::_Temporary_value::_Temporary_value&lt;unsigned short const&amp;&gt; (610,808 samples, 0.06%)</title><rect x="251.4" y="453" width="0.5" height="15.0" fill="rgb(206,6,1)" rx="2" ry="2" />
+<text  x="254.43" y="463.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy_aux&lt;false&gt;::__destroy&lt;__gnu_cxx::__normal_iterator&lt;ns3::VendorSpecificListElement_s*, std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt; &gt; &gt; (201,318 samples, 0.02%)</title><rect x="26.5" y="245" width="0.2" height="15.0" fill="rgb(222,81,19)" rx="2" ry="2" />
+<text  x="29.51" y="255.5" ></text>
+</g>
+<g >
+<title>std::_Function_base::_Base_manager&lt;std::_Bind&lt;void  (159,033 samples, 0.02%)</title><rect x="727.7" y="373" width="0.1" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="730.72" y="383.5" ></text>
+</g>
+<g >
+<title>double* std::__uninitialized_copy&lt;true&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, double*&gt; (165,918 samples, 0.02%)</title><rect x="78.3" y="437" width="0.2" height="15.0" fill="rgb(238,153,36)" rx="2" ry="2" />
+<text  x="81.32" y="447.5" ></text>
+</g>
+<g >
+<title>decltype  (2,931,196 samples, 0.30%)</title><rect x="238.0" y="325" width="2.3" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="240.96" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::CqiListElement_s* std::__uninitialized_copy&lt;false&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::CqiListElement_s*, std::vector&lt;ns3::CqiListElement_s, std::allocator&lt;ns3::CqiListElement_s&gt; &gt; &gt;, ns3::CqiListElement_s*&gt; (3,635,299 samples, 0.37%)</title><rect x="124.4" y="453" width="3.0" height="15.0" fill="rgb(211,29,7)" rx="2" ry="2" />
+<text  x="127.44" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::back (207,937 samples, 0.02%)</title><rect x="596.6" y="261" width="0.2" height="15.0" fill="rgb(223,85,20)" rx="2" ry="2" />
+<text  x="599.62" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::MemberLteCcmMacSapUser&lt;ns3::NoOpComponentCarrierManager&gt;::NotifyTxOpportunity (314,249 samples, 0.03%)</title><rect x="11.2" y="453" width="0.2" height="15.0" fill="rgb(205,3,0)" rx="2" ry="2" />
+<text  x="14.17" y="463.5" ></text>
+</g>
+<g >
+<title>void std::__invoke_impl&lt;void, void  (2,784,150 samples, 0.29%)</title><rect x="419.2" y="389" width="2.2" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="422.15" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_mbegin (202,221 samples, 0.02%)</title><rect x="84.6" y="389" width="0.1" height="15.0" fill="rgb(234,135,32)" rx="2" ry="2" />
+<text  x="87.57" y="399.5" ></text>
+</g>
+<g >
+<title>__cxxabiv1::__vmi_class_type_info::__do_dyncast (186,796 samples, 0.02%)</title><rect x="736.0" y="501" width="0.1" height="15.0" fill="rgb(245,186,44)" rx="2" ry="2" />
+<text  x="738.96" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::operator- (162,725 samples, 0.02%)</title><rect x="740.2" y="485" width="0.1" height="15.0" fill="rgb(231,122,29)" rx="2" ry="2" />
+<text  x="743.18" y="495.5" ></text>
+</g>
+<g >
+<title>decltype  (290,705 samples, 0.03%)</title><rect x="623.6" y="501" width="0.2" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="626.61" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt;::_Vector_impl::_Vector_impl (271,897 samples, 0.03%)</title><rect x="503.8" y="357" width="0.2" height="15.0" fill="rgb(229,112,26)" rx="2" ry="2" />
+<text  x="506.77" y="367.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_M_create_storage (235,300 samples, 0.02%)</title><rect x="677.3" y="437" width="0.2" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="680.28" y="447.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::end (205,079 samples, 0.02%)</title><rect x="596.8" y="261" width="0.2" height="15.0" fill="rgb(205,0,0)" rx="2" ry="2" />
+<text  x="599.79" y="271.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_insert&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; const&amp;&gt; (532,874 samples, 0.05%)</title><rect x="355.6" y="485" width="0.4" height="15.0" fill="rgb(210,27,6)" rx="2" ry="2" />
+<text  x="358.58" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_copy (527,289 samples, 0.05%)</title><rect x="668.4" y="469" width="0.4" height="15.0" fill="rgb(246,192,46)" rx="2" ry="2" />
+<text  x="671.41" y="479.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; &gt;::_M_ptr (246,841 samples, 0.03%)</title><rect x="522.2" y="309" width="0.2" height="15.0" fill="rgb(219,67,16)" rx="2" ry="2" />
+<text  x="525.21" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::MakeEvent&lt;&gt; (238,924 samples, 0.02%)</title><rect x="36.6" y="645" width="0.2" height="15.0" fill="rgb(205,0,0)" rx="2" ry="2" />
+<text  x="39.64" y="655.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::__copy_move_a2&lt;false, unsigned char const*, unsigned char*&gt; (225,178 samples, 0.02%)</title><rect x="688.0" y="357" width="0.2" height="15.0" fill="rgb(209,20,4)" rx="2" ry="2" />
+<text  x="691.00" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::EnbMacMemberLteEnbPhySapUser::UlCqiReport (1,913,367 samples, 0.20%)</title><rect x="472.7" y="325" width="1.5" height="15.0" fill="rgb(237,148,35)" rx="2" ry="2" />
+<text  x="475.69" y="335.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_M_allocate_and_copy&lt;__gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt; (144,727 samples, 0.01%)</title><rect x="686.2" y="437" width="0.2" height="15.0" fill="rgb(236,143,34)" rx="2" ry="2" />
+<text  x="689.23" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue&gt;::operator= (208,946 samples, 0.02%)</title><rect x="61.3" y="517" width="0.2" height="15.0" fill="rgb(220,71,17)" rx="2" ry="2" />
+<text  x="64.30" y="527.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::Ptr&lt;ns3::Object&gt;*&gt; (500,080 samples, 0.05%)</title><rect x="380.2" y="277" width="0.4" height="15.0" fill="rgb(248,201,48)" rx="2" ry="2" />
+<text  x="383.23" y="287.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Buffer::Data*, std::allocator&lt;ns3::Buffer::Data*&gt; &gt;::end (168,242 samples, 0.02%)</title><rect x="556.1" y="165" width="0.1" height="15.0" fill="rgb(223,86,20)" rx="2" ry="2" />
+<text  x="559.10" y="175.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::EventImpl&gt;::~Ptr (261,450 samples, 0.03%)</title><rect x="769.3" y="725" width="0.2" height="15.0" fill="rgb(225,92,22)" rx="2" ry="2" />
+<text  x="772.32" y="735.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;::__normal_iterator (286,765 samples, 0.03%)</title><rect x="213.8" y="453" width="0.2" height="15.0" fill="rgb(226,99,23)" rx="2" ry="2" />
+<text  x="216.79" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::end (185,556 samples, 0.02%)</title><rect x="692.4" y="469" width="0.1" height="15.0" fill="rgb(205,0,0)" rx="2" ry="2" />
+<text  x="695.39" y="479.5" ></text>
+</g>
+<g >
+<title>malloc (125,582 samples, 0.01%)</title><rect x="70.0" y="421" width="0.1" height="15.0" fill="rgb(230,119,28)" rx="2" ry="2" />
+<text  x="73.04" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::VendorSpecificListElement_s* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::VendorSpecificListElement_s const*, std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt; &gt;, ns3::VendorSpecificListElement_s*&gt; (198,957 samples, 0.02%)</title><rect x="228.7" y="421" width="0.2" height="15.0" fill="rgb(206,5,1)" rx="2" ry="2" />
+<text  x="231.70" y="431.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;is_member_pointer_v&lt;void  (239,715 samples, 0.02%)</title><rect x="715.5" y="501" width="0.2" height="15.0" fill="rgb(241,170,40)" rx="2" ry="2" />
+<text  x="718.47" y="511.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt;::end (143,255 samples, 0.01%)</title><rect x="623.1" y="501" width="0.1" height="15.0" fill="rgb(215,48,11)" rx="2" ry="2" />
+<text  x="626.05" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::MemberLteCcmMacSapProvider&lt;ns3::LteEnbMac&gt;::ReportMacCeToScheduler (280,173 samples, 0.03%)</title><rect x="457.6" y="277" width="0.3" height="15.0" fill="rgb(219,68,16)" rx="2" ry="2" />
+<text  x="460.63" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::HarqStatus_e* std::uninitialized_copy&lt;std::move_iterator&lt;ns3::DlInfoListElement_s::HarqStatus_e*&gt;, ns3::DlInfoListElement_s::HarqStatus_e*&gt; (347,263 samples, 0.04%)</title><rect x="511.3" y="485" width="0.3" height="15.0" fill="rgb(254,229,54)" rx="2" ry="2" />
+<text  x="514.33" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteControlMessage&gt;::~Ptr (269,841 samples, 0.03%)</title><rect x="497.4" y="485" width="0.2" height="15.0" fill="rgb(208,17,4)" rx="2" ry="2" />
+<text  x="500.37" y="495.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt;::_M_ptr (279,342 samples, 0.03%)</title><rect x="566.1" y="149" width="0.2" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="569.12" y="159.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;int*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt; std::copy&lt;__gnu_cxx::__normal_iterator&lt;int const*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;int*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt; &gt; (489,292 samples, 0.05%)</title><rect x="680.1" y="517" width="0.4" height="15.0" fill="rgb(223,85,20)" rx="2" ry="2" />
+<text  x="683.09" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteControlMessage&gt;&amp; std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::emplace_back&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; const&amp;&gt; (539,424 samples, 0.06%)</title><rect x="620.4" y="501" width="0.4" height="15.0" fill="rgb(224,89,21)" rx="2" ry="2" />
+<text  x="623.36" y="511.5" ></text>
+</g>
+<g >
+<title>unsigned char&amp; std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::emplace_back&lt;unsigned char&gt; (1,837,360 samples, 0.19%)</title><rect x="596.6" y="277" width="1.5" height="15.0" fill="rgb(237,147,35)" rx="2" ry="2" />
+<text  x="599.59" y="287.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt;::_M_addr (160,217 samples, 0.02%)</title><rect x="362.8" y="421" width="0.2" height="15.0" fill="rgb(219,68,16)" rx="2" ry="2" />
+<text  x="365.84" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;::~Ptr (3,444,708 samples, 0.36%)</title><rect x="75.3" y="517" width="2.8" height="15.0" fill="rgb(236,143,34)" rx="2" ry="2" />
+<text  x="78.31" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::Simulator::ScheduleWithContext (6,833,554 samples, 0.70%)</title><rect x="660.5" y="501" width="5.5" height="15.0" fill="rgb(230,116,27)" rx="2" ry="2" />
+<text  x="663.52" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::AttributeConstructionList::AttributeConstructionList (1,330,457 samples, 0.14%)</title><rect x="539.0" y="293" width="1.1" height="15.0" fill="rgb(231,122,29)" rx="2" ry="2" />
+<text  x="541.99" y="303.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt; &gt;::_S_key (393,630 samples, 0.04%)</title><rect x="24.0" y="341" width="0.3" height="15.0" fill="rgb(230,116,27)" rx="2" ry="2" />
+<text  x="26.97" y="351.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;* std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_create_node&lt;std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (217,068 samples, 0.02%)</title><rect x="615.6" y="421" width="0.1" height="15.0" fill="rgb(217,56,13)" rx="2" ry="2" />
+<text  x="618.57" y="431.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::push_back (2,730,012 samples, 0.28%)</title><rect x="361.8" y="501" width="2.2" height="15.0" fill="rgb(222,79,18)" rx="2" ry="2" />
+<text  x="364.77" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_Vector_base (692,819 samples, 0.07%)</title><rect x="300.4" y="437" width="0.5" height="15.0" fill="rgb(237,150,35)" rx="2" ry="2" />
+<text  x="303.35" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbRrcProtocolIdeal::DoSendSystemInformation (188,903 samples, 0.02%)</title><rect x="400.5" y="533" width="0.1" height="15.0" fill="rgb(210,24,5)" rx="2" ry="2" />
+<text  x="403.49" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::BuildBroadcastListElement_s, std::allocator&lt;ns3::BuildBroadcastListElement_s&gt; &gt;::_Vector_impl::_Vector_impl (185,676 samples, 0.02%)</title><rect x="141.3" y="421" width="0.2" height="15.0" fill="rgb(207,10,2)" rx="2" ry="2" />
+<text  x="144.33" y="431.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; &gt;::_M_addr (305,390 samples, 0.03%)</title><rect x="348.3" y="485" width="0.3" height="15.0" fill="rgb(224,87,20)" rx="2" ry="2" />
+<text  x="351.32" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::DlDciLteControlMessage&gt; ns3::DynamicCast&lt;ns3::DlDciLteControlMessage, ns3::LteControlMessage&gt; (478,172 samples, 0.05%)</title><rect x="388.1" y="549" width="0.4" height="15.0" fill="rgb(254,228,54)" rx="2" ry="2" />
+<text  x="391.10" y="559.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt;::find (153,882 samples, 0.02%)</title><rect x="23.6" y="357" width="0.2" height="15.0" fill="rgb(235,142,33)" rx="2" ry="2" />
+<text  x="26.63" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultSimulatorImpl::Schedule (192,930 samples, 0.02%)</title><rect x="112.5" y="469" width="0.2" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="115.51" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;bool, std::allocator&lt;bool&gt; &gt;::begin (414,441 samples, 0.04%)</title><rect x="201.2" y="453" width="0.3" height="15.0" fill="rgb(230,118,28)" rx="2" ry="2" />
+<text  x="204.16" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::LogComponent::IsEnabled (165,541 samples, 0.02%)</title><rect x="88.9" y="485" width="0.2" height="15.0" fill="rgb(214,43,10)" rx="2" ry="2" />
+<text  x="91.92" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::lower_bound (294,424 samples, 0.03%)</title><rect x="615.9" y="453" width="0.3" height="15.0" fill="rgb(254,228,54)" rx="2" ry="2" />
+<text  x="618.93" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::vector (1,634,801 samples, 0.17%)</title><rect x="654.5" y="485" width="1.3" height="15.0" fill="rgb(239,156,37)" rx="2" ry="2" />
+<text  x="657.53" y="495.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::end (154,831 samples, 0.02%)</title><rect x="22.1" y="325" width="0.1" height="15.0" fill="rgb(211,29,6)" rx="2" ry="2" />
+<text  x="25.07" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::DlDciListElement_s::~DlDciListElement_s (280,667 samples, 0.03%)</title><rect x="610.0" y="405" width="0.2" height="15.0" fill="rgb(219,64,15)" rx="2" ry="2" />
+<text  x="612.97" y="415.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt;::_M_addr (280,432 samples, 0.03%)</title><rect x="545.0" y="181" width="0.2" height="15.0" fill="rgb(219,68,16)" rx="2" ry="2" />
+<text  x="547.98" y="191.5" ></text>
+</g>
+<g >
+<title>ns3::Time::To (989,300 samples, 0.10%)</title><rect x="406.0" y="485" width="0.8" height="15.0" fill="rgb(244,182,43)" rx="2" ry="2" />
+<text  x="409.03" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumModel const&gt;::Acquire (160,796 samples, 0.02%)</title><rect x="402.7" y="469" width="0.1" height="15.0" fill="rgb(222,80,19)" rx="2" ry="2" />
+<text  x="405.72" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned int, std::allocator&lt;unsigned int&gt; &gt;::at (426,836 samples, 0.04%)</title><rect x="694.5" y="501" width="0.3" height="15.0" fill="rgb(210,24,5)" rx="2" ry="2" />
+<text  x="697.49" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Time::Time (201,450 samples, 0.02%)</title><rect x="343.5" y="469" width="0.2" height="15.0" fill="rgb(226,100,24)" rx="2" ry="2" />
+<text  x="346.53" y="479.5" ></text>
+</g>
+<g >
+<title>malloc (147,798 samples, 0.02%)</title><rect x="319.4" y="453" width="0.1" height="15.0" fill="rgb(230,119,28)" rx="2" ry="2" />
+<text  x="322.42" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::RarLteControlMessage::~RarLteControlMessage (509,242 samples, 0.05%)</title><rect x="167.1" y="405" width="0.4" height="15.0" fill="rgb(215,46,11)" rx="2" ry="2" />
+<text  x="170.06" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_Vector_base (539,442 samples, 0.06%)</title><rect x="325.4" y="453" width="0.4" height="15.0" fill="rgb(237,150,35)" rx="2" ry="2" />
+<text  x="328.35" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt;::cbegin (346,916 samples, 0.04%)</title><rect x="358.2" y="517" width="0.3" height="15.0" fill="rgb(245,184,44)" rx="2" ry="2" />
+<text  x="361.22" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::HarqStatus_e* std::__copy_move_a1&lt;false, ns3::DlInfoListElement_s::HarqStatus_e const*, ns3::DlInfoListElement_s::HarqStatus_e*&gt; (749,922 samples, 0.08%)</title><rect x="259.9" y="293" width="0.6" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="262.91" y="303.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;unsigned long&gt;::allocate (271,783 samples, 0.03%)</title><rect x="198.0" y="405" width="0.3" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="201.04" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy::DoSendLteControlMessage (773,102 samples, 0.08%)</title><rect x="230.2" y="437" width="0.6" height="15.0" fill="rgb(244,180,43)" rx="2" ry="2" />
+<text  x="233.16" y="447.5" ></text>
+</g>
+<g >
+<title>void std::__fill_a&lt;double*, double&gt; (203,543 samples, 0.02%)</title><rect x="730.0" y="341" width="0.2" height="15.0" fill="rgb(211,27,6)" rx="2" ry="2" />
+<text  x="732.99" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::Buffer::Buffer (239,848 samples, 0.02%)</title><rect x="16.7" y="357" width="0.2" height="15.0" fill="rgb(254,226,54)" rx="2" ry="2" />
+<text  x="19.70" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumSignalParametersDataFrame::Copy (7,176,472 samples, 0.74%)</title><rect x="67.3" y="517" width="5.8" height="15.0" fill="rgb(214,43,10)" rx="2" ry="2" />
+<text  x="70.34" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, unsigned char&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, unsigned char&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, unsigned char&gt; &gt; &gt;::_M_lower_bound (709,426 samples, 0.07%)</title><rect x="244.7" y="453" width="0.6" height="15.0" fill="rgb(226,99,23)" rx="2" ry="2" />
+<text  x="247.71" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;::at (232,011 samples, 0.02%)</title><rect x="173.2" y="453" width="0.2" height="15.0" fill="rgb(233,131,31)" rx="2" ry="2" />
+<text  x="176.25" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_M_fill_initialize (189,712 samples, 0.02%)</title><rect x="102.0" y="453" width="0.1" height="15.0" fill="rgb(205,0,0)" rx="2" ry="2" />
+<text  x="104.98" y="463.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;is_member_pointer_v&lt;void  (759,561 samples, 0.08%)</title><rect x="53.3" y="533" width="0.6" height="15.0" fill="rgb(241,170,40)" rx="2" ry="2" />
+<text  x="56.26" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;0ul, ns3::LteSpectrumPhy*&gt;::_Tuple_impl (202,993 samples, 0.02%)</title><rect x="64.2" y="405" width="0.1" height="15.0" fill="rgb(214,41,9)" rx="2" ry="2" />
+<text  x="67.18" y="415.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::begin (193,810 samples, 0.02%)</title><rect x="482.8" y="293" width="0.1" height="15.0" fill="rgb(206,6,1)" rx="2" ry="2" />
+<text  x="485.79" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::Packet::~Packet (319,925 samples, 0.03%)</title><rect x="502.1" y="293" width="0.2" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="505.08" y="303.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt;::at (322,129 samples, 0.03%)</title><rect x="420.2" y="341" width="0.3" height="15.0" fill="rgb(248,200,47)" rx="2" ry="2" />
+<text  x="423.20" y="351.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::allocate (423,703 samples, 0.04%)</title><rect x="270.5" y="357" width="0.4" height="15.0" fill="rgb(213,40,9)" rx="2" ry="2" />
+<text  x="273.51" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::MakeEvent&lt;void  (4,824,055 samples, 0.50%)</title><rect x="280.6" y="517" width="3.9" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="283.62" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteControlMessage&gt;::~Ptr (199,934 samples, 0.02%)</title><rect x="150.4" y="421" width="0.1" height="15.0" fill="rgb(208,17,4)" rx="2" ry="2" />
+<text  x="153.38" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::ChangeSign (1,192,502 samples, 0.12%)</title><rect x="410.5" y="517" width="0.9" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="413.46" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt;::Ptr (160,262 samples, 0.02%)</title><rect x="282.6" y="405" width="0.2" height="15.0" fill="rgb(219,67,16)" rx="2" ry="2" />
+<text  x="285.62" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::HarqStatus_e* std::__copy_move_a2&lt;false, ns3::DlInfoListElement_s::HarqStatus_e const*, ns3::DlInfoListElement_s::HarqStatus_e*&gt; (243,097 samples, 0.03%)</title><rect x="444.4" y="213" width="0.2" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="447.40" y="223.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::end (293,521 samples, 0.03%)</title><rect x="589.6" y="261" width="0.2" height="15.0" fill="rgb(237,147,35)" rx="2" ry="2" />
+<text  x="592.58" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::Time::operator= (180,257 samples, 0.02%)</title><rect x="318.4" y="437" width="0.2" height="15.0" fill="rgb(251,213,51)" rx="2" ry="2" />
+<text  x="321.42" y="447.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt;::erase (3,797,469 samples, 0.39%)</title><rect x="349.3" y="533" width="3.1" height="15.0" fill="rgb(216,54,13)" rx="2" ry="2" />
+<text  x="352.31" y="543.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;bool, std::allocator&lt;bool&gt; &gt;::insert (5,134,912 samples, 0.53%)</title><rect x="196.9" y="469" width="4.1" height="15.0" fill="rgb(250,209,50)" rx="2" ry="2" />
+<text  x="199.91" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Simulator::Now (384,287 samples, 0.04%)</title><rect x="155.5" y="389" width="0.3" height="15.0" fill="rgb(240,164,39)" rx="2" ry="2" />
+<text  x="158.47" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;0ul, ns3::LteEnbPhy*, ns3::Ptr&lt;ns3::PacketBurst&gt; &gt;::_Tuple_impl (474,767 samples, 0.05%)</title><rect x="284.0" y="421" width="0.4" height="15.0" fill="rgb(232,125,30)" rx="2" ry="2" />
+<text  x="287.03" y="431.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::VendorSpecificListElement_s*, std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt; &gt; std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;ns3::VendorSpecificListElement_s const*, std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;ns3::VendorSpecificListElement_s*, std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt; &gt; &gt; (603,286 samples, 0.06%)</title><rect x="25.7" y="261" width="0.5" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="28.74" y="271.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_M_allocate (429,586 samples, 0.04%)</title><rect x="325.4" y="421" width="0.4" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="328.42" y="431.5" ></text>
+</g>
+<g >
+<title>std::_List_node&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt;* std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::_M_create_node&lt;ns3::Ptr&lt;ns3::Packet&gt; const&amp;&gt; (955,890 samples, 0.10%)</title><rect x="626.1" y="469" width="0.8" height="15.0" fill="rgb(211,30,7)" rx="2" ry="2" />
+<text  x="629.10" y="479.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt; &gt;::allocate (264,767 samples, 0.03%)</title><rect x="384.5" y="437" width="0.2" height="15.0" fill="rgb(205,0,0)" rx="2" ry="2" />
+<text  x="387.48" y="447.5" ></text>
+</g>
+<g >
+<title>std::numeric_limits&lt;unsigned int&gt;::max (161,154 samples, 0.02%)</title><rect x="562.6" y="149" width="0.1" height="15.0" fill="rgb(234,134,32)" rx="2" ry="2" />
+<text  x="565.56" y="159.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::DoDispose (507,948 samples, 0.05%)</title><rect x="612.8" y="485" width="0.5" height="15.0" fill="rgb(242,172,41)" rx="2" ry="2" />
+<text  x="615.84" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::PacketBurst (220,732 samples, 0.02%)</title><rect x="644.9" y="437" width="0.2" height="15.0" fill="rgb(208,15,3)" rx="2" ry="2" />
+<text  x="647.94" y="447.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::Ptr&lt;ns3::Object&gt;*&gt; (194,998 samples, 0.02%)</title><rect x="165.3" y="309" width="0.1" height="15.0" fill="rgb(248,201,48)" rx="2" ry="2" />
+<text  x="168.29" y="319.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt; &gt;::find (152,754 samples, 0.02%)</title><rect x="104.9" y="469" width="0.1" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="107.92" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; std::_Rb_tree&lt;ns3::TbId_t, std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::_Select1st&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::_M_emplace_hint_unique&lt;std::pair&lt;ns3::TbId_t, ns3::tbInfo_t&gt; &gt; (2,663,179 samples, 0.27%)</title><rect x="384.1" y="501" width="2.1" height="15.0" fill="rgb(216,50,12)" rx="2" ry="2" />
+<text  x="387.11" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::MacCeValue_u::~MacCeValue_u (408,728 samples, 0.04%)</title><rect x="265.1" y="373" width="0.3" height="15.0" fill="rgb(205,0,0)" rx="2" ry="2" />
+<text  x="268.12" y="383.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, ns3::SbMeasResult_s, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::SbMeasResult_s&gt; &gt; &gt;::find (873,028 samples, 0.09%)</title><rect x="185.4" y="485" width="0.7" height="15.0" fill="rgb(242,171,40)" rx="2" ry="2" />
+<text  x="188.39" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumModel* ns3::PeekPointer&lt;ns3::SpectrumModel&gt; (148,477 samples, 0.02%)</title><rect x="299.2" y="453" width="0.1" height="15.0" fill="rgb(210,27,6)" rx="2" ry="2" />
+<text  x="302.17" y="463.5" ></text>
+</g>
+<g >
+<title>bool __gnu_cxx::operator==&lt;ns3::ByteTagListData* const*, std::vector&lt;ns3::ByteTagListData*, std::allocator&lt;ns3::ByteTagListData*&gt; &gt; &gt; (357,081 samples, 0.04%)</title><rect x="30.2" y="357" width="0.2" height="15.0" fill="rgb(241,169,40)" rx="2" ry="2" />
+<text  x="33.15" y="367.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt;::_M_valptr (255,360 samples, 0.03%)</title><rect x="168.7" y="389" width="0.2" height="15.0" fill="rgb(222,82,19)" rx="2" ry="2" />
+<text  x="171.66" y="399.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::ByteTagListData**, std::vector&lt;ns3::ByteTagListData*, std::allocator&lt;ns3::ByteTagListData*&gt; &gt; &gt;::operator* (164,625 samples, 0.02%)</title><rect x="553.6" y="197" width="0.1" height="15.0" fill="rgb(217,57,13)" rx="2" ry="2" />
+<text  x="556.58" y="207.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_Rb_tree (198,211 samples, 0.02%)</title><rect x="667.1" y="293" width="0.1" height="15.0" fill="rgb(252,219,52)" rx="2" ry="2" />
+<text  x="670.07" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy::GeneratePowerAllocationMap (650,842 samples, 0.07%)</title><rect x="110.8" y="533" width="0.6" height="15.0" fill="rgb(247,197,47)" rx="2" ry="2" />
+<text  x="113.83" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Packet&gt;::operator= (230,262 samples, 0.02%)</title><rect x="154.9" y="389" width="0.2" height="15.0" fill="rgb(230,115,27)" rx="2" ry="2" />
+<text  x="157.89" y="399.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::_List_base (159,271 samples, 0.02%)</title><rect x="447.4" y="261" width="0.1" height="15.0" fill="rgb(250,210,50)" rx="2" ry="2" />
+<text  x="450.35" y="271.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy_aux&lt;true&gt;::__destroy&lt;ns3::RlcPduListElement_s*&gt; (151,388 samples, 0.02%)</title><rect x="209.2" y="421" width="0.1" height="15.0" fill="rgb(219,66,15)" rx="2" ry="2" />
+<text  x="212.16" y="431.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, std::vector&lt;double, std::allocator&lt;double&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::find (1,290,271 samples, 0.13%)</title><rect x="221.2" y="485" width="1.1" height="15.0" fill="rgb(209,22,5)" rx="2" ry="2" />
+<text  x="224.25" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::_M_fill_insert (343,043 samples, 0.04%)</title><rect x="106.1" y="453" width="0.3" height="15.0" fill="rgb(236,146,34)" rx="2" ry="2" />
+<text  x="109.10" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_Vector_base (242,221 samples, 0.02%)</title><rect x="729.5" y="437" width="0.2" height="15.0" fill="rgb(237,150,35)" rx="2" ry="2" />
+<text  x="732.54" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt;::operator= (2,555,713 samples, 0.26%)</title><rect x="164.1" y="453" width="2.0" height="15.0" fill="rgb(219,65,15)" rx="2" ry="2" />
+<text  x="167.07" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::UlInfoListElement_s::UlInfoListElement_s (526,168 samples, 0.05%)</title><rect x="494.8" y="549" width="0.4" height="15.0" fill="rgb(211,29,7)" rx="2" ry="2" />
+<text  x="497.77" y="559.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;::vector (1,840,875 samples, 0.19%)</title><rect x="211.7" y="421" width="1.5" height="15.0" fill="rgb(246,192,45)" rx="2" ry="2" />
+<text  x="214.74" y="431.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::back (305,905 samples, 0.03%)</title><rect x="498.6" y="501" width="0.3" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="501.61" y="511.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;double&gt;::allocate (429,586 samples, 0.04%)</title><rect x="325.4" y="389" width="0.4" height="15.0" fill="rgb(221,76,18)" rx="2" ry="2" />
+<text  x="328.42" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, unsigned int&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt; &gt;::find (1,164,278 samples, 0.12%)</title><rect x="136.8" y="469" width="0.9" height="15.0" fill="rgb(214,44,10)" rx="2" ry="2" />
+<text  x="139.81" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::vector (242,130 samples, 0.02%)</title><rect x="409.8" y="501" width="0.2" height="15.0" fill="rgb(239,156,37)" rx="2" ry="2" />
+<text  x="412.84" y="511.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;std::is_constructible&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::pair&lt;ns3::TbId_t, ns3::tbInfo_t&gt; &gt;::value, std::pair&lt;std::_Rb_tree_iterator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, bool&gt; &gt;::type std::map&lt;ns3::TbId_t, ns3::tbInfo_t, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::insert&lt;std::pair&lt;ns3::TbId_t, ns3::tbInfo_t&gt; &gt; (181,887 samples, 0.02%)</title><rect x="120.3" y="517" width="0.1" height="15.0" fill="rgb(213,40,9)" rx="2" ry="2" />
+<text  x="123.30" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;::operator* (341,636 samples, 0.04%)</title><rect x="184.3" y="485" width="0.3" height="15.0" fill="rgb(234,134,32)" rx="2" ry="2" />
+<text  x="187.29" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteControlMessage&gt;::~Ptr (156,455 samples, 0.02%)</title><rect x="571.9" y="341" width="0.2" height="15.0" fill="rgb(208,17,4)" rx="2" ry="2" />
+<text  x="574.94" y="351.5" ></text>
+</g>
+<g >
+<title>std::operator== (191,748 samples, 0.02%)</title><rect x="279.6" y="501" width="0.1" height="15.0" fill="rgb(229,110,26)" rx="2" ry="2" />
+<text  x="282.56" y="511.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::UlInfoListElement_s, std::allocator&lt;ns3::UlInfoListElement_s&gt; &gt;::operator= (1,296,028 samples, 0.13%)</title><rect x="266.0" y="517" width="1.1" height="15.0" fill="rgb(212,32,7)" rx="2" ry="2" />
+<text  x="269.01" y="527.5" ></text>
+</g>
+<g >
+<title>std::function&lt;void  (235,820 samples, 0.02%)</title><rect x="727.7" y="421" width="0.1" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="730.66" y="431.5" ></text>
+</g>
+<g >
+<title>operator new (159,293 samples, 0.02%)</title><rect x="352.5" y="485" width="0.1" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="355.48" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::MobilityModel&gt;::Ptr (283,469 samples, 0.03%)</title><rect x="742.8" y="549" width="0.3" height="15.0" fill="rgb(213,37,8)" rx="2" ry="2" />
+<text  x="745.84" y="559.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::__uninitialized_copy&lt;true&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, unsigned char*&gt; (356,896 samples, 0.04%)</title><rect x="442.3" y="261" width="0.3" height="15.0" fill="rgb(233,129,30)" rx="2" ry="2" />
+<text  x="445.31" y="271.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Buffer::Data*, std::allocator&lt;ns3::Buffer::Data*&gt; &gt;::back (542,975 samples, 0.06%)</title><rect x="31.4" y="341" width="0.4" height="15.0" fill="rgb(242,172,41)" rx="2" ry="2" />
+<text  x="34.39" y="351.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_M_mbegin (125,248 samples, 0.01%)</title><rect x="58.9" y="453" width="0.1" height="15.0" fill="rgb(244,180,43)" rx="2" ry="2" />
+<text  x="61.91" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;2ul, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::_Tuple_impl&lt;double&amp;, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;&amp;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;&amp;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;&amp;, void&gt; (317,763 samples, 0.03%)</title><rect x="340.5" y="373" width="0.3" height="15.0" fill="rgb(240,161,38)" rx="2" ry="2" />
+<text  x="343.52" y="383.5" ></text>
+</g>
+<g >
+<title>decltype  (389,168 samples, 0.04%)</title><rect x="724.8" y="453" width="0.3" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="727.80" y="463.5" ></text>
+</g>
+<g >
+<title>unsigned int* std::uninitialized_fill_n&lt;unsigned int*, unsigned long, unsigned int&gt; (1,094,828 samples, 0.11%)</title><rect x="695.6" y="453" width="0.8" height="15.0" fill="rgb(205,3,0)" rx="2" ry="2" />
+<text  x="698.56" y="463.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt;::construct&lt;ns3::HigherLayerSelected_s, ns3::HigherLayerSelected_s&gt; (545,065 samples, 0.06%)</title><rect x="595.7" y="197" width="0.4" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="598.69" y="207.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::HarqStatus_e* std::__copy_move&lt;false, true, std::random_access_iterator_tag&gt;::__copy_m&lt;ns3::DlInfoListElement_s::HarqStatus_e const, ns3::DlInfoListElement_s::HarqStatus_e&gt; (158,174 samples, 0.02%)</title><rect x="510.0" y="389" width="0.2" height="15.0" fill="rgb(240,161,38)" rx="2" ry="2" />
+<text  x="513.04" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_Auto_node::_M_insert (162,012 samples, 0.02%)</title><rect x="332.1" y="453" width="0.1" height="15.0" fill="rgb(243,178,42)" rx="2" ry="2" />
+<text  x="335.10" y="463.5" ></text>
+</g>
+<g >
+<title>decltype  (353,605 samples, 0.04%)</title><rect x="149.6" y="341" width="0.2" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="152.56" y="351.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned int, ns3::TxSpectrumModelInfo, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt; &gt;::find (2,900,479 samples, 0.30%)</title><rect x="320.3" y="485" width="2.3" height="15.0" fill="rgb(208,16,3)" rx="2" ry="2" />
+<text  x="323.28" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::at (200,222 samples, 0.02%)</title><rect x="400.2" y="549" width="0.1" height="15.0" fill="rgb(251,215,51)" rx="2" ry="2" />
+<text  x="403.18" y="559.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::deallocate (124,394 samples, 0.01%)</title><rect x="776.2" y="309" width="0.1" height="15.0" fill="rgb(232,125,29)" rx="2" ry="2" />
+<text  x="779.16" y="319.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;is_invocable_r_v&lt;void, void  (2,940,550 samples, 0.30%)</title><rect x="419.0" y="405" width="2.4" height="15.0" fill="rgb(243,178,42)" rx="2" ry="2" />
+<text  x="422.03" y="415.5" ></text>
+</g>
+<g >
+<title>[libm.so.6] (153,007 samples, 0.02%)</title><rect x="603.6" y="293" width="0.1" height="15.0" fill="rgb(208,16,4)" rx="2" ry="2" />
+<text  x="606.62" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::SpectrumValue (742,462 samples, 0.08%)</title><rect x="315.8" y="405" width="0.6" height="15.0" fill="rgb(211,27,6)" rx="2" ry="2" />
+<text  x="318.81" y="415.5" ></text>
+</g>
+<g >
+<title>std::less&lt;unsigned short&gt;::operator (263,666 samples, 0.03%)</title><rect x="236.4" y="437" width="0.2" height="15.0" fill="rgb(207,11,2)" rx="2" ry="2" />
+<text  x="239.39" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::CqiListElement_s::~CqiListElement_s (293,386 samples, 0.03%)</title><rect x="585.1" y="293" width="0.3" height="15.0" fill="rgb(225,92,22)" rx="2" ry="2" />
+<text  x="588.12" y="303.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_List_base (293,130 samples, 0.03%)</title><rect x="610.4" y="533" width="0.2" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="613.36" y="543.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::VendorSpecificListElement_s*, std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt; &gt; std::copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::VendorSpecificListElement_s const*, std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;ns3::VendorSpecificListElement_s*, std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt; &gt; &gt; (183,538 samples, 0.02%)</title><rect x="18.0" y="261" width="0.2" height="15.0" fill="rgb(231,119,28)" rx="2" ry="2" />
+<text  x="21.01" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Packet&gt;::Ptr (567,669 samples, 0.06%)</title><rect x="368.0" y="517" width="0.5" height="15.0" fill="rgb(230,117,28)" rx="2" ry="2" />
+<text  x="371.02" y="527.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::UlInfoListElement_s, std::allocator&lt;ns3::UlInfoListElement_s&gt; &gt;::empty (391,139 samples, 0.04%)</title><rect x="265.7" y="517" width="0.3" height="15.0" fill="rgb(253,225,53)" rx="2" ry="2" />
+<text  x="268.70" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultSimulatorImpl::ProcessOneEvent (5,321,712 samples, 0.55%)</title><rect x="11.2" y="757" width="4.3" height="15.0" fill="rgb(211,30,7)" rx="2" ry="2" />
+<text  x="14.17" y="767.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::~vector (448,730 samples, 0.05%)</title><rect x="575.1" y="357" width="0.3" height="15.0" fill="rgb(252,219,52)" rx="2" ry="2" />
+<text  x="578.07" y="367.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;* std::__addressof&lt;std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; (320,226 samples, 0.03%)</title><rect x="723.8" y="453" width="0.3" height="15.0" fill="rgb(247,194,46)" rx="2" ry="2" />
+<text  x="726.85" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Function_base::_Base_manager&lt;std::_Bind&lt;void  (6,819,282 samples, 0.70%)</title><rect x="771.7" y="613" width="5.5" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="774.74" y="623.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::HarqStatus_e* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;ns3::DlInfoListElement_s::HarqStatus_e const*, std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt; &gt;, ns3::DlInfoListElement_s::HarqStatus_e*, ns3::DlInfoListElement_s::HarqStatus_e&gt; (147,743 samples, 0.02%)</title><rect x="107.3" y="357" width="0.1" height="15.0" fill="rgb(235,140,33)" rx="2" ry="2" />
+<text  x="110.33" y="367.5" ></text>
+</g>
+<g >
+<title>int* std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;int const*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt;, int*&gt; (232,547 samples, 0.02%)</title><rect x="91.2" y="469" width="0.1" height="15.0" fill="rgb(229,111,26)" rx="2" ry="2" />
+<text  x="94.15" y="479.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, bool&gt;::pair (150,672 samples, 0.02%)</title><rect x="616.2" y="485" width="0.2" height="15.0" fill="rgb(252,220,52)" rx="2" ry="2" />
+<text  x="619.23" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumModel const&gt;::Ptr (194,816 samples, 0.02%)</title><rect x="402.7" y="485" width="0.1" height="15.0" fill="rgb(232,125,30)" rx="2" ry="2" />
+<text  x="405.69" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::tbInfo_t::~tbInfo_t (271,160 samples, 0.03%)</title><rect x="530.2" y="325" width="0.3" height="15.0" fill="rgb(210,26,6)" rx="2" ry="2" />
+<text  x="533.23" y="335.5" ></text>
+</g>
+<g >
+<title>std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;* std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_create_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; const&amp;&gt; (447,972 samples, 0.05%)</title><rect x="598.4" y="245" width="0.3" height="15.0" fill="rgb(230,116,27)" rx="2" ry="2" />
+<text  x="601.37" y="255.5" ></text>
+</g>
+<g >
+<title>std::operator== (294,846 samples, 0.03%)</title><rect x="524.6" y="309" width="0.3" height="15.0" fill="rgb(229,110,26)" rx="2" ry="2" />
+<text  x="527.64" y="319.5" ></text>
+</g>
+<g >
+<title>void std::vector&lt;ns3::CqiListElement_s, std::allocator&lt;ns3::CqiListElement_s&gt; &gt;::_M_range_insert&lt;__gnu_cxx::__normal_iterator&lt;ns3::CqiListElement_s*, std::vector&lt;ns3::CqiListElement_s, std::allocator&lt;ns3::CqiListElement_s&gt; &gt; &gt; &gt; (4,898,473 samples, 0.51%)</title><rect x="124.3" y="501" width="4.0" height="15.0" fill="rgb(213,40,9)" rx="2" ry="2" />
+<text  x="127.35" y="511.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::push_back (2,561,414 samples, 0.26%)</title><rect x="217.9" y="485" width="2.1" height="15.0" fill="rgb(229,113,27)" rx="2" ry="2" />
+<text  x="220.91" y="495.5" ></text>
+</g>
+<g >
+<title>void std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_construct_node&lt;std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (522,481 samples, 0.05%)</title><rect x="661.2" y="373" width="0.5" height="15.0" fill="rgb(231,122,29)" rx="2" ry="2" />
+<text  x="664.23" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::empty (283,670 samples, 0.03%)</title><rect x="778.1" y="709" width="0.2" height="15.0" fill="rgb(241,170,40)" rx="2" ry="2" />
+<text  x="781.12" y="719.5" ></text>
+</g>
+<g >
+<title>void std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_construct_node&lt;std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (861,873 samples, 0.09%)</title><rect x="270.9" y="405" width="0.6" height="15.0" fill="rgb(231,122,29)" rx="2" ry="2" />
+<text  x="273.85" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::Object::Object (977,100 samples, 0.10%)</title><rect x="629.0" y="501" width="0.8" height="15.0" fill="rgb(242,174,41)" rx="2" ry="2" />
+<text  x="632.00" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::SpectrumConverter&gt; &gt;::operator (208,208 samples, 0.02%)</title><rect x="81.4" y="453" width="0.2" height="15.0" fill="rgb(238,156,37)" rx="2" ry="2" />
+<text  x="84.38" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;* std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_clone_node&lt;false, std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_Alloc_node&gt; (158,119 samples, 0.02%)</title><rect x="340.6" y="213" width="0.2" height="15.0" fill="rgb(205,4,0)" rx="2" ry="2" />
+<text  x="343.65" y="223.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::HigherLayerSelected_s*, std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt; &gt; std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;ns3::HigherLayerSelected_s const*, std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;ns3::HigherLayerSelected_s*, std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt; &gt; &gt; (231,948 samples, 0.02%)</title><rect x="134.8" y="437" width="0.2" height="15.0" fill="rgb(228,109,26)" rx="2" ry="2" />
+<text  x="137.83" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::PfFfMacScheduler::DoSchedDlTriggerReq (314,249 samples, 0.03%)</title><rect x="11.2" y="501" width="0.2" height="15.0" fill="rgb(214,45,10)" rx="2" ry="2" />
+<text  x="14.17" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Time::operator= (268,567 samples, 0.03%)</title><rect x="346.2" y="517" width="0.2" height="15.0" fill="rgb(251,213,51)" rx="2" ry="2" />
+<text  x="349.16" y="527.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;::_List_base (945,418 samples, 0.10%)</title><rect x="285.4" y="517" width="0.8" height="15.0" fill="rgb(230,115,27)" rx="2" ry="2" />
+<text  x="288.43" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::EventImpl, ns3::Empty, ns3::DefaultDeleter&lt;ns3::EventImpl&gt; &gt;::Unref (152,343 samples, 0.02%)</title><rect x="715.7" y="485" width="0.1" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="718.69" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::DlInfoListElement_s (4,041,567 samples, 0.42%)</title><rect x="258.7" y="405" width="3.2" height="15.0" fill="rgb(231,119,28)" rx="2" ry="2" />
+<text  x="261.68" y="415.5" ></text>
+</g>
+<g >
+<title>void std::__fill_a&lt;std::_Bit_iterator, bool&gt; (391,811 samples, 0.04%)</title><rect x="200.6" y="421" width="0.3" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="203.59" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::CallbackImpl&lt;void, ns3::SpectrumValue const&amp;&gt;::operator (324,769 samples, 0.03%)</title><rect x="611.9" y="501" width="0.3" height="15.0" fill="rgb(219,64,15)" rx="2" ry="2" />
+<text  x="614.94" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::LogComponent::IsEnabled (155,530 samples, 0.02%)</title><rect x="758.2" y="725" width="0.1" height="15.0" fill="rgb(214,43,10)" rx="2" ry="2" />
+<text  x="761.21" y="735.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;double&gt; &gt;::deallocate (154,926 samples, 0.02%)</title><rect x="484.0" y="453" width="0.1" height="15.0" fill="rgb(236,143,34)" rx="2" ry="2" />
+<text  x="486.97" y="463.5" ></text>
+</g>
+<g >
+<title>unsigned long const&amp; std::max&lt;unsigned long&gt; (149,635 samples, 0.02%)</title><rect x="398.3" y="501" width="0.1" height="15.0" fill="rgb(244,183,43)" rx="2" ry="2" />
+<text  x="401.29" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::FfMacSchedSapProvider::SchedUlCqiInfoReqParameters::SchedUlCqiInfoReqParameters (569,767 samples, 0.06%)</title><rect x="477.9" y="309" width="0.4" height="15.0" fill="rgb(233,131,31)" rx="2" ry="2" />
+<text  x="480.85" y="319.5" ></text>
+</g>
+<g >
+<title>std::_Head_base&lt;1ul, unsigned int, false&gt;::_Head_base&lt;unsigned int&amp;&gt; (390,794 samples, 0.04%)</title><rect x="617.6" y="421" width="0.3" height="15.0" fill="rgb(215,48,11)" rx="2" ry="2" />
+<text  x="620.62" y="431.5" ></text>
+</g>
+<g >
+<title>int* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;int const*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt;, int*, int&gt; (973,754 samples, 0.10%)</title><rect x="698.4" y="533" width="0.8" height="15.0" fill="rgb(205,0,0)" rx="2" ry="2" />
+<text  x="701.37" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::Seconds (258,846 samples, 0.03%)</title><rect x="120.9" y="533" width="0.2" height="15.0" fill="rgb(236,145,34)" rx="2" ry="2" />
+<text  x="123.90" y="543.5" ></text>
+</g>
+<g >
+<title>double const* std::__niter_base&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; (181,230 samples, 0.02%)</title><rect x="238.7" y="197" width="0.1" height="15.0" fill="rgb(213,38,9)" rx="2" ry="2" />
+<text  x="241.69" y="207.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;::_M_get_Tp_allocator (236,458 samples, 0.02%)</title><rect x="350.5" y="373" width="0.2" height="15.0" fill="rgb(237,148,35)" rx="2" ry="2" />
+<text  x="353.48" y="383.5" ></text>
+</g>
+<g >
+<title>void std::_Function_base::_Base_manager&lt;std::_Bind&lt;void  (819,716 samples, 0.08%)</title><rect x="667.3" y="437" width="0.7" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="670.29" y="447.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_M_default_append (1,930,472 samples, 0.20%)</title><rect x="459.4" y="261" width="1.6" height="15.0" fill="rgb(206,5,1)" rx="2" ry="2" />
+<text  x="462.45" y="271.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::HarqProcessInfoElement_t*&gt; (288,179 samples, 0.03%)</title><rect x="515.0" y="517" width="0.3" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="518.03" y="527.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::map (158,119 samples, 0.02%)</title><rect x="340.6" y="293" width="0.2" height="15.0" fill="rgb(242,171,40)" rx="2" ry="2" />
+<text  x="343.65" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt;::~Ptr (3,158,900 samples, 0.33%)</title><rect x="75.3" y="437" width="2.6" height="15.0" fill="rgb(205,3,0)" rx="2" ry="2" />
+<text  x="78.35" y="447.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Buffer::Data*, std::allocator&lt;ns3::Buffer::Data*&gt; &gt;::empty (1,091,313 samples, 0.11%)</title><rect x="556.2" y="181" width="0.9" height="15.0" fill="rgb(221,77,18)" rx="2" ry="2" />
+<text  x="559.23" y="191.5" ></text>
+</g>
+<g >
+<title>ns3::LteMiErrorModel::Mib (946,675 samples, 0.10%)</title><rect x="588.7" y="261" width="0.7" height="15.0" fill="rgb(222,78,18)" rx="2" ry="2" />
+<text  x="591.65" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::LteRadioBearerTag::LteRadioBearerTag (416,698 samples, 0.04%)</title><rect x="489.1" y="549" width="0.4" height="15.0" fill="rgb(220,71,17)" rx="2" ry="2" />
+<text  x="492.15" y="559.5" ></text>
+</g>
+<g >
+<title>std::_Function_base::_M_empty (149,519 samples, 0.02%)</title><rect x="467.8" y="469" width="0.1" height="15.0" fill="rgb(244,183,43)" rx="2" ry="2" />
+<text  x="470.78" y="479.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;double&gt; &gt;::allocate (429,586 samples, 0.04%)</title><rect x="325.4" y="405" width="0.4" height="15.0" fill="rgb(234,136,32)" rx="2" ry="2" />
+<text  x="328.42" y="415.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::MacCeListElement_s, std::allocator&lt;ns3::MacCeListElement_s&gt; &gt;::begin (152,476 samples, 0.02%)</title><rect x="264.4" y="501" width="0.2" height="15.0" fill="rgb(237,149,35)" rx="2" ry="2" />
+<text  x="267.43" y="511.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::vector (578,299 samples, 0.06%)</title><rect x="443.5" y="325" width="0.4" height="15.0" fill="rgb(206,9,2)" rx="2" ry="2" />
+<text  x="446.48" y="335.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::begin (290,983 samples, 0.03%)</title><rect x="550.4" y="229" width="0.3" height="15.0" fill="rgb(230,117,28)" rx="2" ry="2" />
+<text  x="553.42" y="239.5" ></text>
+</g>
+<g >
+<title>std::_Function_handler&lt;void  (7,010,506 samples, 0.72%)</title><rect x="771.6" y="629" width="5.6" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="774.59" y="639.5" ></text>
+</g>
+<g >
+<title>ns3::operator/ (752,804 samples, 0.08%)</title><rect x="484.5" y="517" width="0.6" height="15.0" fill="rgb(218,63,15)" rx="2" ry="2" />
+<text  x="487.49" y="527.5" ></text>
+</g>
+<g >
+<title>void std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::_M_construct_node&lt;std::piecewise_construct_t const&amp;, std::tuple&lt;unsigned short const&amp;&gt;, std::tuple&lt;&gt; &gt; (190,282 samples, 0.02%)</title><rect x="99.5" y="405" width="0.2" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="102.50" y="415.5" ></text>
+</g>
+<g >
+<title>std::operator== (198,006 samples, 0.02%)</title><rect x="339.6" y="453" width="0.1" height="15.0" fill="rgb(229,110,26)" rx="2" ry="2" />
+<text  x="342.59" y="463.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;ns3::UlInfoListElement_s&gt; &gt;::construct&lt;ns3::UlInfoListElement_s, ns3::UlInfoListElement_s const&amp;&gt; (331,199 samples, 0.03%)</title><rect x="440.4" y="309" width="0.3" height="15.0" fill="rgb(249,204,48)" rx="2" ry="2" />
+<text  x="443.44" y="319.5" ></text>
+</g>
+<g >
+<title>[libc.so.6] (125,474 samples, 0.01%)</title><rect x="557.5" y="213" width="0.1" height="15.0" fill="rgb(223,84,20)" rx="2" ry="2" />
+<text  x="560.50" y="223.5" ></text>
+</g>
+<g >
+<title>ns3::EnbMacMemberFfMacSchedSapUser::SchedDlConfigInd (314,249 samples, 0.03%)</title><rect x="11.2" y="485" width="0.2" height="15.0" fill="rgb(241,166,39)" rx="2" ry="2" />
+<text  x="14.17" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::int64x64_t::Mul (269,603 samples, 0.03%)</title><rect x="682.8" y="485" width="0.3" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="685.85" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::MemberLteFfrSapProvider&lt;ns3::LteFrNoOpAlgorithm&gt;::ReportUlCqiInfo (378,546 samples, 0.04%)</title><rect x="220.7" y="485" width="0.3" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="223.65" y="495.5" ></text>
+</g>
+<g >
+<title>std::__invoke_result&lt;void  (5,321,712 samples, 0.55%)</title><rect x="11.2" y="613" width="4.3" height="15.0" fill="rgb(240,163,39)" rx="2" ry="2" />
+<text  x="14.17" y="623.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue&gt;::~Ptr (165,191 samples, 0.02%)</title><rect x="481.6" y="325" width="0.2" height="15.0" fill="rgb(207,9,2)" rx="2" ry="2" />
+<text  x="484.64" y="335.5" ></text>
+</g>
+<g >
+<title>[ld-linux-x86-64.so.2] (280,175 samples, 0.03%)</title><rect x="10.0" y="789" width="0.2" height="15.0" fill="rgb(243,178,42)" rx="2" ry="2" />
+<text  x="13.00" y="799.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; std::map&lt;ns3::Scheduler::EventKey, ns3::EventImpl*, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::emplace_hint&lt;std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (538,288 samples, 0.06%)</title><rect x="108.5" y="453" width="0.4" height="15.0" fill="rgb(253,224,53)" rx="2" ry="2" />
+<text  x="111.50" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::operator= (156,275 samples, 0.02%)</title><rect x="251.2" y="485" width="0.1" height="15.0" fill="rgb(224,91,21)" rx="2" ry="2" />
+<text  x="254.16" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::TypeId::TypeId (163,126 samples, 0.02%)</title><rect x="491.1" y="517" width="0.1" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="494.10" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::HarqProcessInfoElement_t* std::__copy_move_a2&lt;false, ns3::HarqProcessInfoElement_t const*, ns3::HarqProcessInfoElement_t*&gt; (363,923 samples, 0.04%)</title><rect x="353.4" y="373" width="0.3" height="15.0" fill="rgb(222,82,19)" rx="2" ry="2" />
+<text  x="356.45" y="383.5" ></text>
+</g>
+<g >
+<title>int* std::__copy_move_a1&lt;false, int*, int*&gt; (153,996 samples, 0.02%)</title><rect x="304.3" y="469" width="0.1" height="15.0" fill="rgb(246,191,45)" rx="2" ry="2" />
+<text  x="307.32" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;* std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_Alloc_node::operator (3,608,007 samples, 0.37%)</title><rect x="237.4" y="389" width="2.9" height="15.0" fill="rgb(231,122,29)" rx="2" ry="2" />
+<text  x="240.42" y="399.5" ></text>
+</g>
+<g >
+<title>[libm.so.6] (271,870 samples, 0.03%)</title><rect x="678.7" y="485" width="0.2" height="15.0" fill="rgb(208,16,4)" rx="2" ry="2" />
+<text  x="681.67" y="495.5" ></text>
+</g>
+<g >
+<title>std::less&lt;unsigned short&gt;::operator (156,875 samples, 0.02%)</title><rect x="172.0" y="405" width="0.1" height="15.0" fill="rgb(207,11,2)" rx="2" ry="2" />
+<text  x="174.96" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Head_base&lt;4ul, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, false&gt;::_M_head (197,720 samples, 0.02%)</title><rect x="757.2" y="549" width="0.2" height="15.0" fill="rgb(221,76,18)" rx="2" ry="2" />
+<text  x="760.24" y="559.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::operator= (165,413 samples, 0.02%)</title><rect x="581.7" y="309" width="0.1" height="15.0" fill="rgb(243,175,42)" rx="2" ry="2" />
+<text  x="584.70" y="319.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;0ul, ns3::MultiModelSpectrumChannel*, ns3::Ptr&lt;ns3::SpectrumValue&gt;, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::_Tuple_impl&lt;ns3::MultiModelSpectrumChannel*&amp;, ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp;, double&amp;, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;&amp;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;&amp;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;&amp;, void&gt; (714,235 samples, 0.07%)</title><rect x="666.7" y="421" width="0.6" height="15.0" fill="rgb(231,123,29)" rx="2" ry="2" />
+<text  x="669.69" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::Simulator::Run (2,105,662 samples, 0.22%)</title><rect x="15.5" y="773" width="1.6" height="15.0" fill="rgb(234,134,32)" rx="2" ry="2" />
+<text  x="18.45" y="783.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt;::allocate (428,661 samples, 0.04%)</title><rect x="724.5" y="453" width="0.3" height="15.0" fill="rgb(240,164,39)" rx="2" ry="2" />
+<text  x="727.45" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt; &gt;::find (277,435 samples, 0.03%)</title><rect x="188.9" y="469" width="0.3" height="15.0" fill="rgb(214,44,10)" rx="2" ry="2" />
+<text  x="191.94" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::HarqStatus_e* std::__uninitialized_copy&lt;true&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::DlInfoListElement_s::HarqStatus_e const*, std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt; &gt;, ns3::DlInfoListElement_s::HarqStatus_e*&gt; (147,743 samples, 0.02%)</title><rect x="107.3" y="325" width="0.1" height="15.0" fill="rgb(241,165,39)" rx="2" ry="2" />
+<text  x="110.33" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::ObjectBase::ObjectBase (222,732 samples, 0.02%)</title><rect x="365.4" y="453" width="0.2" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="368.42" y="463.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;is_invocable_r_v&lt;void, ns3::Callback&lt;void, ns3::SpectrumValue const&amp;&gt;::Callback&lt;void  (324,769 samples, 0.03%)</title><rect x="611.9" y="453" width="0.3" height="15.0" fill="rgb(222,79,18)" rx="2" ry="2" />
+<text  x="614.94" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::_S_relocate (230,884 samples, 0.02%)</title><rect x="398.4" y="517" width="0.2" height="15.0" fill="rgb(238,154,37)" rx="2" ry="2" />
+<text  x="401.41" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy::StartFrame (415,834 samples, 0.04%)</title><rect x="15.5" y="565" width="0.3" height="15.0" fill="rgb(209,22,5)" rx="2" ry="2" />
+<text  x="18.45" y="575.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;bool, std::allocator&lt;bool&gt; &gt;::insert (572,036 samples, 0.06%)</title><rect x="100.2" y="453" width="0.4" height="15.0" fill="rgb(250,209,50)" rx="2" ry="2" />
+<text  x="103.16" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Time::GetSeconds (495,841 samples, 0.05%)</title><rect x="484.1" y="517" width="0.4" height="15.0" fill="rgb(249,203,48)" rx="2" ry="2" />
+<text  x="487.10" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt;::_Vector_impl::_Vector_impl (272,688 samples, 0.03%)</title><rect x="130.8" y="469" width="0.2" height="15.0" fill="rgb(237,150,35)" rx="2" ry="2" />
+<text  x="133.81" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::HarqStatus_e* std::__copy_move&lt;false, true, std::random_access_iterator_tag&gt;::__copy_m&lt;ns3::DlInfoListElement_s::HarqStatus_e const, ns3::DlInfoListElement_s::HarqStatus_e&gt; (593,050 samples, 0.06%)</title><rect x="260.0" y="261" width="0.5" height="15.0" fill="rgb(240,161,38)" rx="2" ry="2" />
+<text  x="263.04" y="271.5" ></text>
+</g>
+<g >
+<title>unsigned short* std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;unsigned short const*, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, unsigned short*&gt; (485,137 samples, 0.05%)</title><rect x="475.0" y="213" width="0.4" height="15.0" fill="rgb(239,157,37)" rx="2" ry="2" />
+<text  x="478.00" y="223.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned char, ns3::LteUeMac::LcInfo, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteUeMac::LcInfo&gt; &gt; &gt;::find (1,135,998 samples, 0.12%)</title><rect x="437.6" y="325" width="0.9" height="15.0" fill="rgb(226,97,23)" rx="2" ry="2" />
+<text  x="440.60" y="335.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;::_Vector_base (198,899 samples, 0.02%)</title><rect x="354.0" y="469" width="0.2" height="15.0" fill="rgb(247,197,47)" rx="2" ry="2" />
+<text  x="356.99" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::operator[] (316,514 samples, 0.03%)</title><rect x="302.3" y="485" width="0.3" height="15.0" fill="rgb(248,202,48)" rx="2" ry="2" />
+<text  x="305.31" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue&gt; ns3::Create&lt;ns3::SpectrumValue, ns3::SpectrumValue const&amp;&gt; (186,604 samples, 0.02%)</title><rect x="481.5" y="325" width="0.1" height="15.0" fill="rgb(207,12,2)" rx="2" ry="2" />
+<text  x="484.49" y="335.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::operator= (345,577 samples, 0.04%)</title><rect x="114.0" y="389" width="0.3" height="15.0" fill="rgb(243,175,42)" rx="2" ry="2" />
+<text  x="117.02" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::Subtract (2,558,547 samples, 0.26%)</title><rect x="415.1" y="533" width="2.1" height="15.0" fill="rgb(220,69,16)" rx="2" ry="2" />
+<text  x="418.11" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::~PacketBurst (1,132,572 samples, 0.12%)</title><rect x="634.9" y="357" width="0.9" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="637.88" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::Packet, ns3::Empty, ns3::DefaultDeleter&lt;ns3::Packet&gt; &gt;::SimpleRefCount (246,179 samples, 0.03%)</title><rect x="559.2" y="229" width="0.1" height="15.0" fill="rgb(223,86,20)" rx="2" ry="2" />
+<text  x="562.15" y="239.5" ></text>
+</g>
+<g >
+<title>ns3::HigherLayerSelected_s* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::HigherLayerSelected_s const*, std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt; &gt;, ns3::HigherLayerSelected_s*&gt; (356,634 samples, 0.04%)</title><rect x="442.7" y="277" width="0.3" height="15.0" fill="rgb(230,118,28)" rx="2" ry="2" />
+<text  x="445.72" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::ObjectBase::ObjectBase (229,496 samples, 0.02%)</title><rect x="489.3" y="517" width="0.2" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="492.30" y="527.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt;::construct&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, ns3::Ptr&lt;ns3::LteControlMessage&gt; const&amp;&gt; (353,605 samples, 0.04%)</title><rect x="149.6" y="357" width="0.2" height="15.0" fill="rgb(231,120,28)" rx="2" ry="2" />
+<text  x="152.56" y="367.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;unsigned short, ns3::DlInfoListElement_s&gt;::pair&lt;unsigned short&amp;, ns3::DlInfoListElement_s&amp;&gt; (647,715 samples, 0.07%)</title><rect x="509.8" y="549" width="0.6" height="15.0" fill="rgb(210,23,5)" rx="2" ry="2" />
+<text  x="512.85" y="559.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_Vector_impl::_Vector_impl (200,380 samples, 0.02%)</title><rect x="159.4" y="373" width="0.2" height="15.0" fill="rgb(226,98,23)" rx="2" ry="2" />
+<text  x="162.40" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::DoDispose (3,367,904 samples, 0.35%)</title><rect x="451.2" y="245" width="2.7" height="15.0" fill="rgb(242,172,41)" rx="2" ry="2" />
+<text  x="454.22" y="255.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt; &gt;::_M_ptr (208,839 samples, 0.02%)</title><rect x="429.0" y="245" width="0.2" height="15.0" fill="rgb(207,9,2)" rx="2" ry="2" />
+<text  x="432.02" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Object&gt;::~Ptr (152,955 samples, 0.02%)</title><rect x="743.3" y="549" width="0.1" height="15.0" fill="rgb(222,82,19)" rx="2" ry="2" />
+<text  x="746.26" y="559.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;__gnu_cxx::__normal_iterator&lt;ns3::VendorSpecificListElement_s*, std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt; &gt;, ns3::VendorSpecificListElement_s&gt; (317,071 samples, 0.03%)</title><rect x="26.4" y="277" width="0.3" height="15.0" fill="rgb(241,168,40)" rx="2" ry="2" />
+<text  x="29.42" y="287.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::~vector (782,981 samples, 0.08%)</title><rect x="505.7" y="405" width="0.6" height="15.0" fill="rgb(252,219,52)" rx="2" ry="2" />
+<text  x="508.65" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::DlCqiLteControlMessage&gt; ns3::Create&lt;ns3::DlCqiLteControlMessage&gt; (1,129,510 samples, 0.12%)</title><rect x="592.3" y="293" width="0.9" height="15.0" fill="rgb(225,93,22)" rx="2" ry="2" />
+<text  x="595.26" y="303.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::BuildDataListElement_s, std::allocator&lt;ns3::BuildDataListElement_s&gt; &gt;::_Vector_impl::_Vector_impl (271,168 samples, 0.03%)</title><rect x="174.3" y="437" width="0.2" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="177.28" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt; &gt;::find (393,630 samples, 0.04%)</title><rect x="24.0" y="373" width="0.3" height="15.0" fill="rgb(225,93,22)" rx="2" ry="2" />
+<text  x="26.97" y="383.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::AttributeConstructionList::Item, std::allocator&lt;ns3::AttributeConstructionList::Item&gt; &gt;::list (1,123,852 samples, 0.12%)</title><rect x="539.2" y="277" width="0.9" height="15.0" fill="rgb(252,219,52)" rx="2" ry="2" />
+<text  x="542.15" y="287.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::ByteTagListData*, std::allocator&lt;ns3::ByteTagListData*&gt; &gt;::back (511,487 samples, 0.05%)</title><rect x="29.6" y="373" width="0.4" height="15.0" fill="rgb(207,9,2)" rx="2" ry="2" />
+<text  x="32.59" y="383.5" ></text>
+</g>
+<g >
+<title>void std::destroy_at&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; (392,648 samples, 0.04%)</title><rect x="612.9" y="421" width="0.3" height="15.0" fill="rgb(224,88,21)" rx="2" ry="2" />
+<text  x="615.90" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_Auto_node::_Auto_node&lt;unsigned int const&amp;, ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp;&gt; (925,680 samples, 0.10%)</title><rect x="658.4" y="469" width="0.8" height="15.0" fill="rgb(209,20,4)" rx="2" ry="2" />
+<text  x="661.42" y="479.5" ></text>
+</g>
+<g >
+<title>std::function&lt;void  (856,730 samples, 0.09%)</title><rect x="667.3" y="469" width="0.7" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="670.27" y="479.5" ></text>
+</g>
+<g >
+<title>std::__allocated_ptr&lt;std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt;::__allocated_ptr (363,344 samples, 0.04%)</title><rect x="723.8" y="469" width="0.3" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="726.81" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::operator= (946,469 samples, 0.10%)</title><rect x="685.8" y="453" width="0.7" height="15.0" fill="rgb(211,28,6)" rx="2" ry="2" />
+<text  x="688.78" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::LteRadioBearerTag::LteRadioBearerTag (235,722 samples, 0.02%)</title><rect x="20.3" y="357" width="0.2" height="15.0" fill="rgb(220,71,17)" rx="2" ry="2" />
+<text  x="23.33" y="367.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;::pair (194,069 samples, 0.02%)</title><rect x="104.6" y="293" width="0.2" height="15.0" fill="rgb(240,164,39)" rx="2" ry="2" />
+<text  x="107.61" y="303.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;::_M_valptr (245,098 samples, 0.03%)</title><rect x="528.0" y="261" width="0.2" height="15.0" fill="rgb(218,62,14)" rx="2" ry="2" />
+<text  x="531.05" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::RlcTag::GetInstanceTypeId (165,086 samples, 0.02%)</title><rect x="554.9" y="245" width="0.2" height="15.0" fill="rgb(248,200,47)" rx="2" ry="2" />
+<text  x="557.94" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::Object::DoDelete (1,796,083 samples, 0.19%)</title><rect x="501.5" y="437" width="1.4" height="15.0" fill="rgb(212,34,8)" rx="2" ry="2" />
+<text  x="504.48" y="447.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::allocate (195,540 samples, 0.02%)</title><rect x="83.1" y="341" width="0.1" height="15.0" fill="rgb(236,145,34)" rx="2" ry="2" />
+<text  x="86.06" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt; ns3::CreateObject&lt;ns3::PacketBurst&gt; (5,924,813 samples, 0.61%)</title><rect x="446.1" y="309" width="4.8" height="15.0" fill="rgb(205,4,0)" rx="2" ry="2" />
+<text  x="449.13" y="319.5" ></text>
+</g>
+<g >
+<title>void std::vector&lt;int, std::allocator&lt;int&gt; &gt;::_M_realloc_insert&lt;int&gt; (917,956 samples, 0.09%)</title><rect x="590.3" y="245" width="0.8" height="15.0" fill="rgb(211,28,6)" rx="2" ry="2" />
+<text  x="593.31" y="255.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_clear (271,061 samples, 0.03%)</title><rect x="775.7" y="357" width="0.2" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="778.66" y="367.5" ></text>
+</g>
+<g >
+<title>decltype  (338,177 samples, 0.03%)</title><rect x="117.3" y="485" width="0.3" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="120.31" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_const_iterator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;::_Rb_tree_const_iterator (163,290 samples, 0.02%)</title><rect x="331.4" y="485" width="0.1" height="15.0" fill="rgb(252,220,52)" rx="2" ry="2" />
+<text  x="334.37" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;1ul, ns3::Ptr&lt;ns3::SpectrumValue&gt;, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::_Tuple_impl (589,946 samples, 0.06%)</title><rect x="667.5" y="373" width="0.5" height="15.0" fill="rgb(206,6,1)" rx="2" ry="2" />
+<text  x="670.48" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;* std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_copy&lt;false, std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_Alloc_node&gt; (326,142 samples, 0.03%)</title><rect x="88.2" y="453" width="0.2" height="15.0" fill="rgb(251,212,50)" rx="2" ry="2" />
+<text  x="91.19" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::HigherLayerSelected_s* std::__copy_move_a1&lt;false, ns3::HigherLayerSelected_s const*, ns3::HigherLayerSelected_s*&gt; (231,948 samples, 0.02%)</title><rect x="134.8" y="421" width="0.2" height="15.0" fill="rgb(227,104,25)" rx="2" ry="2" />
+<text  x="137.83" y="431.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::end (316,703 samples, 0.03%)</title><rect x="416.9" y="517" width="0.3" height="15.0" fill="rgb(237,147,35)" rx="2" ry="2" />
+<text  x="419.92" y="527.5" ></text>
+</g>
+<g >
+<title> (233,577 samples, 0.02%)</title><rect x="344.0" y="501" width="0.2" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="347.01" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Scheduler::EventKey&amp;&amp; std::forward&lt;ns3::Scheduler::EventKey&gt; (159,059 samples, 0.02%)</title><rect x="271.4" y="341" width="0.1" height="15.0" fill="rgb(232,125,29)" rx="2" ry="2" />
+<text  x="274.42" y="351.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::BuildBroadcastListElement_s, std::allocator&lt;ns3::BuildBroadcastListElement_s&gt; &gt;::_M_create_storage (276,341 samples, 0.03%)</title><rect x="141.1" y="421" width="0.2" height="15.0" fill="rgb(233,133,31)" rx="2" ry="2" />
+<text  x="144.11" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::DlInfoListElement_s (1,840,989 samples, 0.19%)</title><rect x="444.0" y="341" width="1.5" height="15.0" fill="rgb(231,119,28)" rx="2" ry="2" />
+<text  x="446.98" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::FfMacSchedSapProvider::SchedUlMacCtrlInfoReqParameters::~SchedUlMacCtrlInfoReqParameters (274,453 samples, 0.03%)</title><rect x="133.3" y="517" width="0.2" height="15.0" fill="rgb(242,171,41)" rx="2" ry="2" />
+<text  x="136.29" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;0ul, ns3::MultiModelSpectrumChannel*, ns3::Ptr&lt;ns3::SpectrumValue&gt;, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::_Tuple_impl (411,266 samples, 0.04%)</title><rect x="87.6" y="389" width="0.4" height="15.0" fill="rgb(229,111,26)" rx="2" ry="2" />
+<text  x="90.62" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::LteFrNoOpAlgorithm::DoReportUlCqiInfo (261,636 samples, 0.03%)</title><rect x="220.7" y="469" width="0.3" height="15.0" fill="rgb(245,184,44)" rx="2" ry="2" />
+<text  x="223.75" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;3ul, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::_Tuple_impl (326,828 samples, 0.03%)</title><rect x="87.7" y="341" width="0.3" height="15.0" fill="rgb(218,59,14)" rx="2" ry="2" />
+<text  x="90.69" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::SpectrumValue, ns3::Empty, ns3::DefaultDeleter&lt;ns3::SpectrumValue&gt; &gt;::Unref (235,829 samples, 0.02%)</title><rect x="656.0" y="501" width="0.2" height="15.0" fill="rgb(246,189,45)" rx="2" ry="2" />
+<text  x="659.02" y="511.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;::list (480,104 samples, 0.05%)</title><rect x="110.0" y="517" width="0.4" height="15.0" fill="rgb(231,121,29)" rx="2" ry="2" />
+<text  x="113.00" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node_base*&amp; std::forward&lt;std::_Rb_tree_node_base*&amp;&gt; (209,016 samples, 0.02%)</title><rect x="528.5" y="245" width="0.1" height="15.0" fill="rgb(253,224,53)" rx="2" ry="2" />
+<text  x="531.47" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumPhy::GetRxSpectrumModel (176,892 samples, 0.02%)</title><rect x="644.0" y="517" width="0.2" height="15.0" fill="rgb(248,199,47)" rx="2" ry="2" />
+<text  x="647.05" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::Packet::GetByteTagIterator (1,295,465 samples, 0.13%)</title><rect x="426.1" y="245" width="1.1" height="15.0" fill="rgb(211,31,7)" rx="2" ry="2" />
+<text  x="429.14" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::MacCeListElement_s::MacCeListElement_s (339,065 samples, 0.03%)</title><rect x="688.8" y="469" width="0.2" height="15.0" fill="rgb(223,85,20)" rx="2" ry="2" />
+<text  x="691.76" y="479.5" ></text>
+</g>
+<g >
+<title>std::operator== (124,937 samples, 0.01%)</title><rect x="611.7" y="517" width="0.1" height="15.0" fill="rgb(229,110,26)" rx="2" ry="2" />
+<text  x="614.74" y="527.5" ></text>
+</g>
+<g >
+<title>pow (310,695 samples, 0.03%)</title><rect x="227.1" y="469" width="0.3" height="15.0" fill="rgb(254,226,54)" rx="2" ry="2" />
+<text  x="230.10" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::push_back (148,897 samples, 0.02%)</title><rect x="347.2" y="533" width="0.1" height="15.0" fill="rgb(225,94,22)" rx="2" ry="2" />
+<text  x="350.19" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt; ns3::CompleteConstruct&lt;ns3::PacketBurst&gt; (5,277,768 samples, 0.54%)</title><rect x="371.0" y="517" width="4.3" height="15.0" fill="rgb(212,33,7)" rx="2" ry="2" />
+<text  x="374.04" y="527.5" ></text>
+</g>
+<g >
+<title>std::less&lt;ns3::Scheduler::EventKey&gt;::operator (414,791 samples, 0.04%)</title><rect x="85.8" y="389" width="0.3" height="15.0" fill="rgb(234,137,32)" rx="2" ry="2" />
+<text  x="88.78" y="399.5" ></text>
+</g>
+<g >
+<title>cfree (124,845 samples, 0.01%)</title><rect x="76.7" y="357" width="0.1" height="15.0" fill="rgb(223,86,20)" rx="2" ry="2" />
+<text  x="79.70" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt;::~Ptr (1,777,558 samples, 0.18%)</title><rect x="652.6" y="437" width="1.4" height="15.0" fill="rgb(205,3,0)" rx="2" ry="2" />
+<text  x="655.59" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Bind&lt;void  (1,437,343 samples, 0.15%)</title><rect x="711.4" y="421" width="1.1" height="15.0" fill="rgb(253,221,52)" rx="2" ry="2" />
+<text  x="714.39" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::Callback&lt;void, std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt;::operator (75,636,826 samples, 7.80%)</title><rect x="515.8" y="549" width="60.9" height="15.0" fill="rgb(229,110,26)" rx="2" ry="2" />
+<text  x="518.83" y="559.5" >ns3::C..</text>
+</g>
+<g >
+<title>ns3::LteFrNoOpAlgorithm::DoGetAvailableDlRbg (848,072 samples, 0.09%)</title><rect x="175.5" y="469" width="0.7" height="15.0" fill="rgb(229,112,26)" rx="2" ry="2" />
+<text  x="178.54" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::LteRlcSpecificLteMacSapUser::ReceivePdu (1,587,883 samples, 0.16%)</title><rect x="435.7" y="293" width="1.3" height="15.0" fill="rgb(206,6,1)" rx="2" ry="2" />
+<text  x="438.74" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::~SpectrumValue (390,089 samples, 0.04%)</title><rect x="483.8" y="517" width="0.3" height="15.0" fill="rgb(247,193,46)" rx="2" ry="2" />
+<text  x="486.78" y="527.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::operator[] (186,851 samples, 0.02%)</title><rect x="678.5" y="469" width="0.1" height="15.0" fill="rgb(248,200,47)" rx="2" ry="2" />
+<text  x="681.46" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; &gt;::_Rb_tree_iterator (160,302 samples, 0.02%)</title><rect x="348.9" y="501" width="0.1" height="15.0" fill="rgb(223,87,20)" rx="2" ry="2" />
+<text  x="351.88" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::PacketTagList::PacketTagList (222,450 samples, 0.02%)</title><rect x="153.9" y="357" width="0.1" height="15.0" fill="rgb(237,151,36)" rx="2" ry="2" />
+<text  x="156.87" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::ObjectDeleter::Delete (238,924 samples, 0.02%)</title><rect x="36.6" y="581" width="0.2" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="39.64" y="591.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::at (196,396 samples, 0.02%)</title><rect x="173.7" y="453" width="0.2" height="15.0" fill="rgb(238,152,36)" rx="2" ry="2" />
+<text  x="176.72" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::emplace_hint&lt;unsigned int const&amp;, ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp;&gt; (1,489,049 samples, 0.15%)</title><rect x="331.5" y="485" width="1.2" height="15.0" fill="rgb(211,29,6)" rx="2" ry="2" />
+<text  x="334.51" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_Vector_impl::~_Vector_impl (125,125 samples, 0.01%)</title><rect x="216.6" y="453" width="0.1" height="15.0" fill="rgb(212,34,8)" rx="2" ry="2" />
+<text  x="219.65" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumPhy&gt;::~Ptr (200,126 samples, 0.02%)</title><rect x="672.2" y="533" width="0.1" height="15.0" fill="rgb(224,91,21)" rx="2" ry="2" />
+<text  x="675.17" y="543.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::~list (578,265 samples, 0.06%)</title><rect x="576.1" y="373" width="0.5" height="15.0" fill="rgb(222,80,19)" rx="2" ry="2" />
+<text  x="579.13" y="383.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;std::is_constructible&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt;::value, std::pair&lt;std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, bool&gt; &gt;::type std::map&lt;ns3::Scheduler::EventKey, ns3::EventImpl*, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::insert&lt;std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (932,942 samples, 0.10%)</title><rect x="615.4" y="485" width="0.8" height="15.0" fill="rgb(211,29,7)" rx="2" ry="2" />
+<text  x="618.45" y="495.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, ns3::LteUePhy::UeMeasurementsElement, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::LteUePhy::UeMeasurementsElement&gt; &gt; &gt;::find (242,538 samples, 0.03%)</title><rect x="726.4" y="325" width="0.2" height="15.0" fill="rgb(235,141,33)" rx="2" ry="2" />
+<text  x="729.36" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultSimulatorImpl::Run (22,443,594 samples, 2.31%)</title><rect x="17.2" y="789" width="18.0" height="15.0" fill="rgb(207,11,2)" rx="2" ry="2" />
+<text  x="20.17" y="799.5" ></text>
+</g>
+<g >
+<title>operator new (201,409 samples, 0.02%)</title><rect x="547.4" y="37" width="0.2" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="550.41" y="47.5" ></text>
+</g>
+<g >
+<title>ns3::LteUePhy*&amp; std::_Mu&lt;ns3::LteUePhy*, false, false&gt;::operator (226,205 samples, 0.02%)</title><rect x="49.6" y="597" width="0.1" height="15.0" fill="rgb(235,139,33)" rx="2" ry="2" />
+<text  x="52.55" y="607.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;* std::__copy_move_a2&lt;true, std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;*, std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;*&gt; (154,567 samples, 0.02%)</title><rect x="117.8" y="437" width="0.1" height="15.0" fill="rgb(210,26,6)" rx="2" ry="2" />
+<text  x="120.78" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::key_comp (125,297 samples, 0.01%)</title><rect x="84.2" y="421" width="0.1" height="15.0" fill="rgb(229,114,27)" rx="2" ry="2" />
+<text  x="87.20" y="431.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;::_M_erase (2,288,506 samples, 0.24%)</title><rect x="634.1" y="517" width="1.8" height="15.0" fill="rgb(223,86,20)" rx="2" ry="2" />
+<text  x="637.11" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteControlMessage&gt;&amp; std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::emplace_back&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; const&amp;&gt; (919,396 samples, 0.09%)</title><rect x="732.9" y="437" width="0.8" height="15.0" fill="rgb(224,89,21)" rx="2" ry="2" />
+<text  x="735.95" y="447.5" ></text>
+</g>
+<g >
+<title>operator new (156,584 samples, 0.02%)</title><rect x="154.6" y="373" width="0.1" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="157.60" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteSpectrumSignalParametersDlCtrlFrame&gt;::operator (168,179 samples, 0.02%)</title><rect x="731.6" y="517" width="0.1" height="15.0" fill="rgb(226,97,23)" rx="2" ry="2" />
+<text  x="734.56" y="527.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; const* std::__addressof&lt;std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; const&gt; (186,584 samples, 0.02%)</title><rect x="685.9" y="437" width="0.2" height="15.0" fill="rgb(230,118,28)" rx="2" ry="2" />
+<text  x="688.91" y="447.5" ></text>
+</g>
+<g >
+<title>void std::destroy_at&lt;ns3::DlInfoListElement_s&gt; (652,447 samples, 0.07%)</title><rect x="132.6" y="421" width="0.5" height="15.0" fill="rgb(254,227,54)" rx="2" ry="2" />
+<text  x="135.56" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_Rb_tree_impl&lt;std::less&lt;unsigned int&gt;, true&gt;::_Rb_tree_impl (236,125 samples, 0.02%)</title><rect x="329.5" y="469" width="0.2" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="332.55" y="479.5" ></text>
+</g>
+<g >
+<title> (160,485 samples, 0.02%)</title><rect x="368.5" y="501" width="0.1" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="371.48" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::MacCeListElement_s::~MacCeListElement_s (599,086 samples, 0.06%)</title><rect x="265.0" y="389" width="0.4" height="15.0" fill="rgb(209,20,4)" rx="2" ry="2" />
+<text  x="267.96" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultDeleter&lt;ns3::SpectrumSignalParameters&gt;::Delete (2,421,676 samples, 0.25%)</title><rect x="652.5" y="485" width="1.9" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="655.49" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::LteUePhy::PhyPduReceived (4,557,849 samples, 0.47%)</title><rect x="434.9" y="373" width="3.7" height="15.0" fill="rgb(215,47,11)" rx="2" ry="2" />
+<text  x="437.94" y="383.5" ></text>
+</g>
+<g >
+<title>void  (200,340 samples, 0.02%)</title><rect x="423.0" y="389" width="0.2" height="15.0" fill="rgb(253,221,53)" rx="2" ry="2" />
+<text  x="426.05" y="399.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;double&gt;::allocate (490,258 samples, 0.05%)</title><rect x="239.4" y="197" width="0.4" height="15.0" fill="rgb(248,201,48)" rx="2" ry="2" />
+<text  x="242.41" y="207.5" ></text>
+</g>
+<g >
+<title>std::__detail::_List_node_header::_M_init (156,589 samples, 0.02%)</title><rect x="162.1" y="357" width="0.1" height="15.0" fill="rgb(243,178,42)" rx="2" ry="2" />
+<text  x="165.11" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt;::operator= (5,201,507 samples, 0.54%)</title><rect x="450.9" y="309" width="4.2" height="15.0" fill="rgb(219,65,15)" rx="2" ry="2" />
+<text  x="453.90" y="319.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::TbId_t, std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::_Select1st&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::_M_erase (270,189 samples, 0.03%)</title><rect x="506.3" y="501" width="0.3" height="15.0" fill="rgb(224,87,21)" rx="2" ry="2" />
+<text  x="509.35" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleUeCcmMacSapUser::ReceivePdu (2,333,945 samples, 0.24%)</title><rect x="435.6" y="325" width="1.9" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="438.60" y="335.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, unsigned char&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, unsigned char&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, unsigned char&gt; &gt; &gt;::_S_key (312,442 samples, 0.03%)</title><rect x="177.0" y="421" width="0.2" height="15.0" fill="rgb(210,27,6)" rx="2" ry="2" />
+<text  x="179.97" y="431.5" ></text>
+</g>
+<g >
+<title>void std::_Bind&lt;void  (884,239,690 samples, 91.18%)</title><rect x="47.0" y="613" width="711.2" height="15.0" fill="rgb(242,174,41)" rx="2" ry="2" />
+<text  x="50.01" y="623.5" >void std::_Bind&lt;void </text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;* std::__copy_move&lt;true, false, std::random_access_iterator_tag&gt;::__copy_m&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;*, std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;*&gt; (1,074,226 samples, 0.11%)</title><rect x="621.6" y="437" width="0.9" height="15.0" fill="rgb(209,21,5)" rx="2" ry="2" />
+<text  x="624.64" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt;::_Vector_base (431,145 samples, 0.04%)</title><rect x="131.7" y="485" width="0.3" height="15.0" fill="rgb(226,97,23)" rx="2" ry="2" />
+<text  x="134.68" y="495.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::allocate (143,335 samples, 0.01%)</title><rect x="499.5" y="421" width="0.1" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="502.52" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::EventImpl::EventImpl (158,256 samples, 0.02%)</title><rect x="340.0" y="453" width="0.1" height="15.0" fill="rgb(247,195,46)" rx="2" ry="2" />
+<text  x="343.02" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::LteControlMessage::LteControlMessage (271,693 samples, 0.03%)</title><rect x="288.2" y="405" width="0.2" height="15.0" fill="rgb(214,43,10)" rx="2" ry="2" />
+<text  x="291.18" y="415.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;::push_back (148,059 samples, 0.02%)</title><rect x="101.4" y="469" width="0.1" height="15.0" fill="rgb(205,3,0)" rx="2" ry="2" />
+<text  x="104.41" y="479.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;::operator* (233,448 samples, 0.02%)</title><rect x="745.5" y="517" width="0.2" height="15.0" fill="rgb(215,47,11)" rx="2" ry="2" />
+<text  x="748.50" y="527.5" ></text>
+</g>
+<g >
+<title>std::tuple&lt;unsigned short const&amp;&gt;::tuple (200,653 samples, 0.02%)</title><rect x="243.3" y="373" width="0.1" height="15.0" fill="rgb(233,129,30)" rx="2" ry="2" />
+<text  x="246.26" y="383.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt;::~vector (399,447 samples, 0.04%)</title><rect x="145.9" y="341" width="0.4" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="148.95" y="351.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_Vector_base (125,411 samples, 0.01%)</title><rect x="584.5" y="261" width="0.1" height="15.0" fill="rgb(205,2,0)" rx="2" ry="2" />
+<text  x="587.52" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultDeleter&lt;ns3::SpectrumSignalParameters&gt;::Delete (233,861 samples, 0.02%)</title><rect x="344.2" y="485" width="0.2" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="347.23" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;1ul, ns3::Ptr&lt;ns3::SpectrumValue&gt;, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::_Tuple_impl (368,770 samples, 0.04%)</title><rect x="87.7" y="373" width="0.3" height="15.0" fill="rgb(206,6,1)" rx="2" ry="2" />
+<text  x="90.66" y="383.5" ></text>
+</g>
+<g >
+<title>std::__detail::_List_node_header::_List_node_header (309,432 samples, 0.03%)</title><rect x="630.4" y="437" width="0.2" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="633.36" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_Auto_node::_M_insert (233,734 samples, 0.02%)</title><rect x="293.5" y="485" width="0.2" height="15.0" fill="rgb(223,83,20)" rx="2" ry="2" />
+<text  x="296.50" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumPhy::GetAntenna (524,985 samples, 0.05%)</title><rect x="703.8" y="549" width="0.5" height="15.0" fill="rgb(231,119,28)" rx="2" ry="2" />
+<text  x="706.84" y="559.5" ></text>
+</g>
+<g >
+<title>std::operator== (467,378 samples, 0.05%)</title><rect x="768.0" y="709" width="0.4" height="15.0" fill="rgb(229,110,26)" rx="2" ry="2" />
+<text  x="770.99" y="719.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::CqiListElement_s, std::allocator&lt;ns3::CqiListElement_s&gt; &gt;::_M_erase (1,008,706 samples, 0.10%)</title><rect x="254.9" y="501" width="0.8" height="15.0" fill="rgb(207,9,2)" rx="2" ry="2" />
+<text  x="257.91" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::BuildRarListElement_s* std::__uninitialized_copy&lt;false&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::BuildRarListElement_s const*, std::vector&lt;ns3::BuildRarListElement_s, std::allocator&lt;ns3::BuildRarListElement_s&gt; &gt; &gt;, ns3::BuildRarListElement_s*&gt; (198,569 samples, 0.02%)</title><rect x="143.1" y="405" width="0.2" height="15.0" fill="rgb(216,52,12)" rx="2" ry="2" />
+<text  x="146.13" y="415.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;* std::__copy_move_a2&lt;true, std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;*, std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;*&gt; (1,149,860 samples, 0.12%)</title><rect x="621.6" y="453" width="0.9" height="15.0" fill="rgb(210,26,6)" rx="2" ry="2" />
+<text  x="624.61" y="463.5" ></text>
+</g>
+<g >
+<title>unsigned short* std::__copy_move_a&lt;true, unsigned short*, unsigned short*&gt; (251,127 samples, 0.03%)</title><rect x="253.4" y="373" width="0.2" height="15.0" fill="rgb(253,223,53)" rx="2" ry="2" />
+<text  x="256.45" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::GetImpl (158,305 samples, 0.02%)</title><rect x="280.4" y="517" width="0.1" height="15.0" fill="rgb(223,87,20)" rx="2" ry="2" />
+<text  x="283.37" y="527.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt;::deallocate (152,095 samples, 0.02%)</title><rect x="256.6" y="309" width="0.1" height="15.0" fill="rgb(210,27,6)" rx="2" ry="2" />
+<text  x="259.57" y="319.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::Ptr&lt;ns3::Object&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Object&gt; &gt; &gt;::_Vector_impl::_Vector_impl (391,527 samples, 0.04%)</title><rect x="366.0" y="437" width="0.4" height="15.0" fill="rgb(206,6,1)" rx="2" ry="2" />
+<text  x="369.04" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::TracedCallback&lt;unsigned short, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;::operator (569,042 samples, 0.06%)</title><rect x="481.8" y="325" width="0.4" height="15.0" fill="rgb(221,76,18)" rx="2" ry="2" />
+<text  x="484.77" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::MacCeListElement_s::MacCeListElement_s (153,635 samples, 0.02%)</title><rect x="457.2" y="309" width="0.1" height="15.0" fill="rgb(223,85,20)" rx="2" ry="2" />
+<text  x="460.19" y="319.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;::back (388,694 samples, 0.04%)</title><rect x="382.9" y="501" width="0.3" height="15.0" fill="rgb(219,64,15)" rx="2" ry="2" />
+<text  x="385.86" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::HarqProcessInfoElement_t* std::copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::HarqProcessInfoElement_t const*, std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt;, ns3::HarqProcessInfoElement_t*&gt; (334,764 samples, 0.03%)</title><rect x="591.6" y="213" width="0.2" height="15.0" fill="rgb(247,195,46)" rx="2" ry="2" />
+<text  x="594.56" y="223.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue&gt; ns3::Create&lt;ns3::SpectrumValue, ns3::Ptr&lt;ns3::SpectrumModel&gt;&amp;&gt; (650,459 samples, 0.07%)</title><rect x="111.6" y="469" width="0.5" height="15.0" fill="rgb(228,107,25)" rx="2" ry="2" />
+<text  x="114.62" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt;&amp; std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;::emplace_back&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; (551,584 samples, 0.06%)</title><rect x="636.1" y="517" width="0.5" height="15.0" fill="rgb(228,106,25)" rx="2" ry="2" />
+<text  x="639.13" y="527.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Ptr&lt;ns3::Object&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Object&gt; &gt; &gt;::_M_erase_at_end (127,447 samples, 0.01%)</title><rect x="549.6" y="197" width="0.1" height="15.0" fill="rgb(246,189,45)" rx="2" ry="2" />
+<text  x="552.60" y="207.5" ></text>
+</g>
+<g >
+<title>ns3::MemberLteCcmMacSapUser&lt;ns3::NoOpComponentCarrierManager&gt;::ReceivePdu (7,833,319 samples, 0.81%)</title><rect x="424.0" y="325" width="6.3" height="15.0" fill="rgb(212,35,8)" rx="2" ry="2" />
+<text  x="426.95" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::VendorSpecificListElement_s const* std::__niter_base&lt;ns3::VendorSpecificListElement_s const*, std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt; &gt; (192,328 samples, 0.02%)</title><rect x="25.9" y="245" width="0.2" height="15.0" fill="rgb(221,77,18)" rx="2" ry="2" />
+<text  x="28.90" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt;::Ptr (156,542 samples, 0.02%)</title><rect x="163.8" y="421" width="0.1" height="15.0" fill="rgb(219,67,16)" rx="2" ry="2" />
+<text  x="166.80" y="431.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt; &gt;::destroy&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; (142,224 samples, 0.01%)</title><rect x="634.7" y="309" width="0.1" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="637.73" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Object&gt;::Acquire (269,784 samples, 0.03%)</title><rect x="704.0" y="517" width="0.3" height="15.0" fill="rgb(227,101,24)" rx="2" ry="2" />
+<text  x="707.05" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::~_Vector_base (357,028 samples, 0.04%)</title><rect x="233.3" y="309" width="0.3" height="15.0" fill="rgb(223,86,20)" rx="2" ry="2" />
+<text  x="236.27" y="319.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::operator= (1,336,444 samples, 0.14%)</title><rect x="213.6" y="485" width="1.0" height="15.0" fill="rgb(211,28,6)" rx="2" ry="2" />
+<text  x="216.57" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::AntennaModel&gt;::Ptr (201,269 samples, 0.02%)</title><rect x="742.0" y="533" width="0.2" height="15.0" fill="rgb(215,49,11)" rx="2" ry="2" />
+<text  x="745.03" y="543.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; const*, std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt;::difference_type __gnu_cxx::operator-&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; const*, std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; (278,789 samples, 0.03%)</title><rect x="633.8" y="517" width="0.2" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="636.79" y="527.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned char, ns3::LteMacSapProvider::ReportBufferStatusParameters, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider::ReportBufferStatusParameters&gt; &gt; &gt;::find (1,503,084 samples, 0.15%)</title><rect x="569.8" y="325" width="1.2" height="15.0" fill="rgb(239,157,37)" rx="2" ry="2" />
+<text  x="572.79" y="335.5" ></text>
+</g>
+<g >
+<title>std::tuple_element&lt;1ul, std::tuple&lt;double const&amp;, double const&amp;, double const&amp;&gt; &gt;::type const&amp; std::get&lt;1ul, double const&amp;, double const&amp;, double const&amp;&gt; (407,082 samples, 0.04%)</title><rect x="748.1" y="469" width="0.3" height="15.0" fill="rgb(230,116,27)" rx="2" ry="2" />
+<text  x="751.12" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt;::find (1,766,493 samples, 0.18%)</title><rect x="168.0" y="437" width="1.5" height="15.0" fill="rgb(219,68,16)" rx="2" ry="2" />
+<text  x="171.04" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Packet&gt;::Acquire (154,647 samples, 0.02%)</title><rect x="628.2" y="501" width="0.1" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="631.16" y="511.5" ></text>
+</g>
+<g >
+<title>void  (614,254 samples, 0.06%)</title><rect x="580.3" y="357" width="0.5" height="15.0" fill="rgb(253,221,53)" rx="2" ry="2" />
+<text  x="583.33" y="367.5" ></text>
+</g>
+<g >
+<title>std::modf (232,865 samples, 0.02%)</title><rect x="684.0" y="485" width="0.2" height="15.0" fill="rgb(249,206,49)" rx="2" ry="2" />
+<text  x="687.02" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::int64x64_t::MulByInvert (163,855 samples, 0.02%)</title><rect x="605.6" y="469" width="0.1" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="608.60" y="479.5" ></text>
+</g>
+<g >
+<title>[ld-linux-x86-64.so.2] (1,432,110 samples, 0.15%)</title><rect x="10.0" y="805" width="1.2" height="15.0" fill="rgb(243,178,42)" rx="2" ry="2" />
+<text  x="13.00" y="815.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::CqiListElement_s, std::allocator&lt;ns3::CqiListElement_s&gt; &gt;::erase (456,537 samples, 0.05%)</title><rect x="106.7" y="501" width="0.4" height="15.0" fill="rgb(231,123,29)" rx="2" ry="2" />
+<text  x="109.74" y="511.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::FfMacSchedSapProvider::SchedUlCqiInfoReqParameters*&gt; (1,058,935 samples, 0.11%)</title><rect x="263.2" y="469" width="0.9" height="15.0" fill="rgb(241,166,39)" rx="2" ry="2" />
+<text  x="266.21" y="479.5" ></text>
+</g>
+<g >
+<title>exit (155,299 samples, 0.02%)</title><rect x="35.5" y="789" width="0.2" height="15.0" fill="rgb(208,15,3)" rx="2" ry="2" />
+<text  x="38.54" y="799.5" ></text>
+</g>
+<g >
+<title>ns3::Buffer::~Buffer (206,160 samples, 0.02%)</title><rect x="76.1" y="229" width="0.2" height="15.0" fill="rgb(240,162,38)" rx="2" ry="2" />
+<text  x="79.11" y="239.5" ></text>
+</g>
+<g >
+<title>std::__allocated_ptr&lt;std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt; &gt;::operator= (147,762 samples, 0.02%)</title><rect x="363.1" y="453" width="0.1" height="15.0" fill="rgb(206,8,2)" rx="2" ry="2" />
+<text  x="366.13" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned int, std::allocator&lt;unsigned int&gt; &gt;::_M_allocate (191,041 samples, 0.02%)</title><rect x="695.2" y="453" width="0.1" height="15.0" fill="rgb(228,110,26)" rx="2" ry="2" />
+<text  x="698.16" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::ObjectDeleter::Delete (3,074,446 samples, 0.32%)</title><rect x="75.4" y="405" width="2.5" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="78.42" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::Time::ToDouble (1,825,393 samples, 0.19%)</title><rect x="405.8" y="501" width="1.5" height="15.0" fill="rgb(249,204,48)" rx="2" ry="2" />
+<text  x="408.85" y="511.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned char const, ns3::LteCcmMacSapProvider*&gt; &gt;::_M_ptr (243,580 samples, 0.03%)</title><rect x="458.6" y="197" width="0.2" height="15.0" fill="rgb(237,150,36)" rx="2" ry="2" />
+<text  x="461.61" y="207.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::operator= (1,599,149 samples, 0.16%)</title><rect x="317.1" y="405" width="1.3" height="15.0" fill="rgb(243,175,42)" rx="2" ry="2" />
+<text  x="320.14" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt; &gt;::find (1,126,228 samples, 0.12%)</title><rect x="73.3" y="485" width="1.0" height="15.0" fill="rgb(233,130,31)" rx="2" ry="2" />
+<text  x="76.35" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::PacketTagList::PacketTagList (159,488 samples, 0.02%)</title><rect x="624.9" y="485" width="0.1" height="15.0" fill="rgb(237,151,36)" rx="2" ry="2" />
+<text  x="627.90" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;ns3::UlDciListElement_s, std::allocator&lt;ns3::UlDciListElement_s&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;ns3::UlDciListElement_s, std::allocator&lt;ns3::UlDciListElement_s&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;ns3::UlDciListElement_s, std::allocator&lt;ns3::UlDciListElement_s&gt; &gt; &gt; &gt; &gt;::_M_mbegin (155,860 samples, 0.02%)</title><rect x="241.0" y="437" width="0.2" height="15.0" fill="rgb(248,202,48)" rx="2" ry="2" />
+<text  x="244.03" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;* std::_Rb_tree&lt;ns3::TbId_t, std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::_Select1st&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::_M_create_node&lt;std::pair&lt;ns3::TbId_t, ns3::tbInfo_t&gt; &gt; (1,386,943 samples, 0.14%)</title><rect x="384.3" y="469" width="1.1" height="15.0" fill="rgb(234,136,32)" rx="2" ry="2" />
+<text  x="387.30" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::PfFfMacScheduler::DoSchedUlCqiInfoReq (821,265 samples, 0.08%)</title><rect x="102.6" y="485" width="0.6" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="105.56" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::~vector (199,813 samples, 0.02%)</title><rect x="610.0" y="389" width="0.1" height="15.0" fill="rgb(243,174,41)" rx="2" ry="2" />
+<text  x="612.97" y="399.5" ></text>
+</g>
+<g >
+<title>void std::_Construct&lt;ns3::DlInfoListElement_s, ns3::DlInfoListElement_s const&amp;&gt; (4,273,011 samples, 0.44%)</title><rect x="258.5" y="421" width="3.4" height="15.0" fill="rgb(212,32,7)" rx="2" ry="2" />
+<text  x="261.49" y="431.5" ></text>
+</g>
+<g >
+<title>void std::__invoke_impl&lt;void, std::_Bind&lt;void  (5,321,712 samples, 0.55%)</title><rect x="11.2" y="661" width="4.3" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="14.17" y="671.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::SbMeasResult_s&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::SbMeasResult_s&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::SbMeasResult_s&gt; &gt; &gt;::_M_lower_bound (228,291 samples, 0.02%)</title><rect x="135.6" y="453" width="0.2" height="15.0" fill="rgb(239,160,38)" rx="2" ry="2" />
+<text  x="138.63" y="463.5" ></text>
+</g>
+<g >
+<title>void std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_M_realloc_insert&lt;unsigned char&gt; (1,385,167 samples, 0.14%)</title><rect x="597.0" y="261" width="1.1" height="15.0" fill="rgb(246,191,45)" rx="2" ry="2" />
+<text  x="599.96" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::Time::Time (156,551 samples, 0.02%)</title><rect x="408.7" y="469" width="0.1" height="15.0" fill="rgb(226,100,24)" rx="2" ry="2" />
+<text  x="411.69" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;int, std::allocator&lt;int&gt; &gt;::_Vector_base (427,278 samples, 0.04%)</title><rect x="399.4" y="533" width="0.3" height="15.0" fill="rgb(215,47,11)" rx="2" ry="2" />
+<text  x="402.40" y="543.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt;::construct&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; const&amp;&gt; (252,039 samples, 0.03%)</title><rect x="101.6" y="437" width="0.2" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="104.59" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::LteControlMessage, ns3::Empty, ns3::DefaultDeleter&lt;ns3::LteControlMessage&gt; &gt;::Ref (330,055 samples, 0.03%)</title><rect x="499.9" y="405" width="0.2" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="502.86" y="415.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Buffer::Data*, std::allocator&lt;ns3::Buffer::Data*&gt; &gt;::pop_back (158,310 samples, 0.02%)</title><rect x="32.6" y="341" width="0.1" height="15.0" fill="rgb(214,44,10)" rx="2" ry="2" />
+<text  x="35.57" y="351.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::AttributeConstructionList::Item, std::allocator&lt;ns3::AttributeConstructionList::Item&gt; &gt;::_M_clear (124,335 samples, 0.01%)</title><rect x="540.2" y="245" width="0.1" height="15.0" fill="rgb(217,58,13)" rx="2" ry="2" />
+<text  x="543.23" y="255.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;signed char&gt; &gt;::construct&lt;signed char, signed char&gt; (169,019 samples, 0.02%)</title><rect x="533.4" y="309" width="0.2" height="15.0" fill="rgb(233,132,31)" rx="2" ry="2" />
+<text  x="536.42" y="319.5" ></text>
+</g>
+<g >
+<title>_start (923,730,017 samples, 95.25%)</title><rect x="35.5" y="837" width="743.0" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="38.54" y="847.5" >_start</text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::operator[] (196,931 samples, 0.02%)</title><rect x="488.2" y="485" width="0.1" height="15.0" fill="rgb(248,200,47)" rx="2" ry="2" />
+<text  x="491.17" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Function_base::_M_empty (150,383 samples, 0.02%)</title><rect x="41.4" y="677" width="0.2" height="15.0" fill="rgb(244,183,43)" rx="2" ry="2" />
+<text  x="44.44" y="687.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Callback&lt;void, unsigned short, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::allocator&lt;ns3::Callback&lt;void, unsigned short, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::begin (240,498 samples, 0.02%)</title><rect x="481.8" y="309" width="0.2" height="15.0" fill="rgb(223,85,20)" rx="2" ry="2" />
+<text  x="484.83" y="319.5" ></text>
+</g>
+<g >
+<title>void std::__invoke_impl&lt;void, void  (833,626 samples, 0.09%)</title><rect x="725.9" y="357" width="0.7" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="728.89" y="367.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned char, ns3::LteMacSapProvider*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt; &gt;::find (306,410 samples, 0.03%)</title><rect x="29.3" y="373" width="0.2" height="15.0" fill="rgb(248,200,47)" rx="2" ry="2" />
+<text  x="32.25" y="383.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;::push_back (1,103,607 samples, 0.11%)</title><rect x="209.3" y="485" width="0.9" height="15.0" fill="rgb(205,3,0)" rx="2" ry="2" />
+<text  x="212.28" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Packet&gt; ns3::Create&lt;ns3::Packet, unsigned int&amp;&gt; (5,253,542 samples, 0.54%)</title><rect x="555.6" y="261" width="4.2" height="15.0" fill="rgb(253,223,53)" rx="2" ry="2" />
+<text  x="558.60" y="271.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt; &gt;::_M_ptr (158,837 samples, 0.02%)</title><rect x="675.2" y="437" width="0.2" height="15.0" fill="rgb(228,109,26)" rx="2" ry="2" />
+<text  x="678.24" y="447.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::UlDciListElement_s, std::allocator&lt;ns3::UlDciListElement_s&gt; &gt;::max_size (276,398 samples, 0.03%)</title><rect x="250.2" y="437" width="0.2" height="15.0" fill="rgb(235,141,33)" rx="2" ry="2" />
+<text  x="253.17" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;::_M_get_Tp_allocator (314,467 samples, 0.03%)</title><rect x="513.7" y="533" width="0.2" height="15.0" fill="rgb(237,148,35)" rx="2" ry="2" />
+<text  x="516.69" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbRrc::AddUe (285,958 samples, 0.03%)</title><rect x="130.4" y="485" width="0.2" height="15.0" fill="rgb(230,118,28)" rx="2" ry="2" />
+<text  x="133.38" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Bvector_base&lt;std::allocator&lt;bool&gt; &gt;::_Bvector_impl_data::_M_reset (156,996 samples, 0.02%)</title><rect x="202.1" y="437" width="0.2" height="15.0" fill="rgb(233,129,31)" rx="2" ry="2" />
+<text  x="205.13" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::HarqProcessInfoElement_t* std::__niter_wrap&lt;ns3::HarqProcessInfoElement_t*&gt; (274,590 samples, 0.03%)</title><rect x="353.8" y="389" width="0.2" height="15.0" fill="rgb(221,74,17)" rx="2" ry="2" />
+<text  x="356.77" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::HarqStatus_e* std::__copy_move_a2&lt;false, ns3::DlInfoListElement_s::HarqStatus_e const*, ns3::DlInfoListElement_s::HarqStatus_e*&gt; (158,174 samples, 0.02%)</title><rect x="510.0" y="405" width="0.2" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="513.04" y="415.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;bool, std::allocator&lt;bool&gt; &gt;::_M_copy_aligned (653,505 samples, 0.07%)</title><rect x="248.0" y="437" width="0.5" height="15.0" fill="rgb(243,176,42)" rx="2" ry="2" />
+<text  x="250.98" y="447.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;::__normal_iterator (126,951 samples, 0.01%)</title><rect x="408.1" y="453" width="0.1" height="15.0" fill="rgb(249,206,49)" rx="2" ry="2" />
+<text  x="411.14" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Packet&gt;::operator bool (157,451 samples, 0.02%)</title><rect x="361.6" y="501" width="0.2" height="15.0" fill="rgb(252,219,52)" rx="2" ry="2" />
+<text  x="364.65" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultDeleter&lt;ns3::SpectrumValue&gt;::Delete (362,265 samples, 0.04%)</title><rect x="728.3" y="453" width="0.3" height="15.0" fill="rgb(222,79,19)" rx="2" ry="2" />
+<text  x="731.27" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::UlDciListElement_s* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;ns3::UlDciListElement_s const*, std::vector&lt;ns3::UlDciListElement_s, std::allocator&lt;ns3::UlDciListElement_s&gt; &gt; &gt;, ns3::UlDciListElement_s*, ns3::UlDciListElement_s&gt; (196,365 samples, 0.02%)</title><rect x="228.2" y="437" width="0.1" height="15.0" fill="rgb(235,139,33)" rx="2" ry="2" />
+<text  x="231.16" y="447.5" ></text>
+</g>
+<g >
+<title>void std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_construct_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; const&amp;&gt; (127,066 samples, 0.01%)</title><rect x="88.3" y="373" width="0.1" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="91.28" y="383.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt;::begin (157,097 samples, 0.02%)</title><rect x="205.1" y="389" width="0.2" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="208.13" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::EnbMacMemberLteEnbPhySapUser::SubframeIndication (19,358,790 samples, 2.00%)</title><rect x="19.6" y="581" width="15.5" height="15.0" fill="rgb(252,216,51)" rx="2" ry="2" />
+<text  x="22.57" y="591.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::list (205,185 samples, 0.02%)</title><rect x="343.7" y="485" width="0.2" height="15.0" fill="rgb(236,145,34)" rx="2" ry="2" />
+<text  x="346.70" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::BuildDataListElement_s, std::allocator&lt;ns3::BuildDataListElement_s&gt; &gt;::_M_allocate (198,391 samples, 0.02%)</title><rect x="202.4" y="453" width="0.2" height="15.0" fill="rgb(225,94,22)" rx="2" ry="2" />
+<text  x="205.45" y="463.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned char, ns3::LteMacSapProvider*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt; &gt;::find (270,008 samples, 0.03%)</title><rect x="17.7" y="373" width="0.2" height="15.0" fill="rgb(248,200,47)" rx="2" ry="2" />
+<text  x="20.67" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::operator+ (149,473 samples, 0.02%)</title><rect x="339.5" y="453" width="0.1" height="15.0" fill="rgb(244,182,43)" rx="2" ry="2" />
+<text  x="342.47" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::_Auto_node::_Auto_node&lt;std::piecewise_construct_t const&amp;, std::tuple&lt;unsigned short const&amp;&gt;, std::tuple&lt;&gt; &gt; (1,505,468 samples, 0.16%)</title><rect x="190.8" y="453" width="1.2" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="193.82" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::PacketMetadata::Create (796,815 samples, 0.08%)</title><rect x="32.7" y="373" width="0.6" height="15.0" fill="rgb(231,122,29)" rx="2" ry="2" />
+<text  x="35.70" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteSpectrumSignalParametersDataFrame&gt; ns3::Create&lt;ns3::LteSpectrumSignalParametersDataFrame, ns3::LteSpectrumSignalParametersDataFrame const&amp;&gt; (6,974,208 samples, 0.72%)</title><rect x="67.4" y="501" width="5.6" height="15.0" fill="rgb(226,98,23)" rx="2" ry="2" />
+<text  x="70.44" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::NetDevice&gt;::Ptr (158,827 samples, 0.02%)</title><rect x="643.7" y="501" width="0.1" height="15.0" fill="rgb(226,98,23)" rx="2" ry="2" />
+<text  x="646.67" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::UniformRandomVariable::GetValue (910,934 samples, 0.09%)</title><rect x="495.2" y="549" width="0.7" height="15.0" fill="rgb(238,152,36)" rx="2" ry="2" />
+<text  x="498.19" y="559.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt; &gt;::_M_ptr (165,849 samples, 0.02%)</title><rect x="55.5" y="405" width="0.1" height="15.0" fill="rgb(228,109,26)" rx="2" ry="2" />
+<text  x="58.46" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt;::_M_allocate (364,814 samples, 0.04%)</title><rect x="444.8" y="277" width="0.3" height="15.0" fill="rgb(209,21,5)" rx="2" ry="2" />
+<text  x="447.82" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::LteHarqPhy::SubframeIndication (778,194 samples, 0.08%)</title><rect x="117.0" y="533" width="0.6" height="15.0" fill="rgb(229,112,26)" rx="2" ry="2" />
+<text  x="119.96" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::EnbMacMemberFfMacSchedSapUser::SchedDlConfigInd (415,834 samples, 0.04%)</title><rect x="15.5" y="469" width="0.3" height="15.0" fill="rgb(241,166,39)" rx="2" ry="2" />
+<text  x="18.45" y="479.5" ></text>
+</g>
+<g >
+<title>double const* std::__niter_base&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; (157,559 samples, 0.02%)</title><rect x="730.7" y="421" width="0.1" height="15.0" fill="rgb(213,38,9)" rx="2" ry="2" />
+<text  x="733.70" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::tbInfo_t::tbInfo_t (653,622 samples, 0.07%)</title><rect x="527.1" y="197" width="0.5" height="15.0" fill="rgb(224,91,21)" rx="2" ry="2" />
+<text  x="530.08" y="207.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::end (261,288 samples, 0.03%)</title><rect x="635.5" y="325" width="0.2" height="15.0" fill="rgb(211,29,6)" rx="2" ry="2" />
+<text  x="638.53" y="335.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::vector (487,568 samples, 0.05%)</title><rect x="494.8" y="533" width="0.4" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="497.80" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::PfFfMacScheduler::RefreshDlCqiMaps (1,254,491 samples, 0.13%)</title><rect x="177.9" y="485" width="1.0" height="15.0" fill="rgb(230,115,27)" rx="2" ry="2" />
+<text  x="180.88" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned int const, ns3::RxSpectrumModelInfo&gt; &gt;::_M_valptr (258,528 samples, 0.03%)</title><rect x="656.9" y="485" width="0.2" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="659.92" y="495.5" ></text>
+</g>
+<g >
+<title>std::tuple_element&lt;2ul, std::tuple&lt;ns3::LteInterference*, ns3::Ptr&lt;ns3::SpectrumValue const&gt;, unsigned int&gt; &gt;::type&amp; std::get&lt;2ul, ns3::LteInterference*, ns3::Ptr&lt;ns3::SpectrumValue const&gt;, unsigned int&gt; (960,298 samples, 0.10%)</title><rect x="755.5" y="597" width="0.8" height="15.0" fill="rgb(248,201,48)" rx="2" ry="2" />
+<text  x="758.49" y="607.5" ></text>
+</g>
+<g >
+<title>ns3::LteUeRrc::DoRecvMasterInformationBlock (193,516 samples, 0.02%)</title><rect x="533.6" y="341" width="0.1" height="15.0" fill="rgb(234,134,32)" rx="2" ry="2" />
+<text  x="536.59" y="351.5" ></text>
+</g>
+<g >
+<title>void std::destroy_at&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; (193,911 samples, 0.02%)</title><rect x="104.0" y="341" width="0.1" height="15.0" fill="rgb(246,192,46)" rx="2" ry="2" />
+<text  x="106.96" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::TagBuffer::WriteU8 (197,148 samples, 0.02%)</title><rect x="31.0" y="373" width="0.2" height="15.0" fill="rgb(219,64,15)" rx="2" ry="2" />
+<text  x="34.01" y="383.5" ></text>
+</g>
+<g >
+<title>double* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, double*, double&gt; (418,403 samples, 0.04%)</title><rect x="654.6" y="469" width="0.3" height="15.0" fill="rgb(222,79,19)" rx="2" ry="2" />
+<text  x="657.59" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::at (276,726 samples, 0.03%)</title><rect x="459.2" y="277" width="0.2" height="15.0" fill="rgb(238,152,36)" rx="2" ry="2" />
+<text  x="462.19" y="287.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_M_erase (818,048 samples, 0.08%)</title><rect x="394.1" y="517" width="0.7" height="15.0" fill="rgb(227,102,24)" rx="2" ry="2" />
+<text  x="397.10" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::MemberSchedSapProvider&lt;ns3::PfFfMacScheduler&gt;::SchedDlRlcBufferReq (605,673 samples, 0.06%)</title><rect x="17.9" y="325" width="0.5" height="15.0" fill="rgb(218,60,14)" rx="2" ry="2" />
+<text  x="20.95" y="335.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt;::end (201,886 samples, 0.02%)</title><rect x="443.3" y="293" width="0.2" height="15.0" fill="rgb(246,189,45)" rx="2" ry="2" />
+<text  x="446.29" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::HigherLayerSelected_s::HigherLayerSelected_s (202,804 samples, 0.02%)</title><rect x="593.4" y="165" width="0.1" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="596.38" y="175.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::~_Rb_tree (895,963 samples, 0.09%)</title><rect x="776.5" y="421" width="0.7" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="779.50" y="431.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;double&gt;::deallocate (154,926 samples, 0.02%)</title><rect x="484.0" y="421" width="0.1" height="15.0" fill="rgb(250,208,49)" rx="2" ry="2" />
+<text  x="486.97" y="431.5" ></text>
+</g>
+<g >
+<title>int* std::__copy_move_a2&lt;false, int const*, int*&gt; (162,673 samples, 0.02%)</title><rect x="531.3" y="277" width="0.1" height="15.0" fill="rgb(224,87,20)" rx="2" ry="2" />
+<text  x="534.29" y="287.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_insert_and_rebalance (195,862 samples, 0.02%)</title><rect x="335.5" y="357" width="0.1" height="15.0" fill="rgb(225,94,22)" rx="2" ry="2" />
+<text  x="338.48" y="367.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned char, ns3::LteCcmMacSapProvider*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteCcmMacSapProvider*&gt; &gt; &gt;::find (1,417,571 samples, 0.15%)</title><rect x="458.0" y="277" width="1.2" height="15.0" fill="rgb(245,186,44)" rx="2" ry="2" />
+<text  x="461.05" y="287.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;1ul, ns3::Ptr&lt;ns3::SpectrumValue const&gt;, unsigned int&gt;::_Tuple_impl (853,910 samples, 0.09%)</title><rect x="711.9" y="373" width="0.6" height="15.0" fill="rgb(216,54,13)" rx="2" ry="2" />
+<text  x="714.86" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::~PacketBurst (383,002 samples, 0.04%)</title><rect x="166.4" y="373" width="0.3" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="169.42" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::SpectrumSignalParameters, ns3::Empty, ns3::DefaultDeleter&lt;ns3::SpectrumSignalParameters&gt; &gt;::Ref (272,369 samples, 0.03%)</title><rect x="750.9" y="533" width="0.2" height="15.0" fill="rgb(221,74,17)" rx="2" ry="2" />
+<text  x="753.86" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::LogComponent::IsEnabled (155,440 samples, 0.02%)</title><rect x="220.5" y="485" width="0.1" height="15.0" fill="rgb(214,43,10)" rx="2" ry="2" />
+<text  x="223.50" y="495.5" ></text>
+</g>
+<g >
+<title>operator delete (153,527 samples, 0.02%)</title><rect x="764.9" y="581" width="0.1" height="15.0" fill="rgb(247,196,46)" rx="2" ry="2" />
+<text  x="767.92" y="591.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt;::construct&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, ns3::Ptr&lt;ns3::MibLteControlMessage&gt;&amp;&gt; (151,782 samples, 0.02%)</title><rect x="122.4" y="501" width="0.1" height="15.0" fill="rgb(238,154,36)" rx="2" ry="2" />
+<text  x="125.36" y="511.5" ></text>
+</g>
+<g >
+<title> (240,645 samples, 0.02%)</title><rect x="160.2" y="437" width="0.1" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="163.15" y="447.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::VendorSpecificListElement_s*, ns3::VendorSpecificListElement_s&gt; (234,807 samples, 0.02%)</title><rect x="263.9" y="373" width="0.2" height="15.0" fill="rgb(207,12,3)" rx="2" ry="2" />
+<text  x="266.87" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt;::_M_lower_bound (500,820 samples, 0.05%)</title><rect x="568.2" y="261" width="0.4" height="15.0" fill="rgb(240,162,38)" rx="2" ry="2" />
+<text  x="571.19" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultSimulatorImpl::Schedule (888,679 samples, 0.09%)</title><rect x="62.2" y="501" width="0.7" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="65.21" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumPhy::EndRxData (121,921,584 samples, 12.57%)</title><rect x="417.2" y="565" width="98.1" height="15.0" fill="rgb(222,80,19)" rx="2" ry="2" />
+<text  x="420.20" y="575.5" >ns3::LteSpe..</text>
+</g>
+<g >
+<title>modff64x (241,188 samples, 0.02%)</title><rect x="390.8" y="469" width="0.2" height="15.0" fill="rgb(218,62,14)" rx="2" ry="2" />
+<text  x="393.79" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt;::max_size (465,751 samples, 0.05%)</title><rect x="211.1" y="437" width="0.4" height="15.0" fill="rgb(241,167,39)" rx="2" ry="2" />
+<text  x="214.11" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbMac::DoSchedUlConfigInd (1,937,481 samples, 0.20%)</title><rect x="230.0" y="469" width="1.6" height="15.0" fill="rgb(246,188,45)" rx="2" ry="2" />
+<text  x="233.01" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::WrapToPi (196,497 samples, 0.02%)</title><rect x="311.2" y="453" width="0.2" height="15.0" fill="rgb(227,105,25)" rx="2" ry="2" />
+<text  x="314.20" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, unsigned char&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, unsigned char&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, unsigned char&gt; &gt; &gt;::_M_begin (182,609 samples, 0.02%)</title><rect x="244.5" y="453" width="0.1" height="15.0" fill="rgb(235,139,33)" rx="2" ry="2" />
+<text  x="247.50" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::LteFfrAlgorithm::GetRbgSize (314,835 samples, 0.03%)</title><rect x="175.8" y="453" width="0.3" height="15.0" fill="rgb(208,14,3)" rx="2" ry="2" />
+<text  x="178.85" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::_M_default_initialize (647,164 samples, 0.07%)</title><rect x="729.7" y="437" width="0.6" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="732.73" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; &gt; &gt;::find (2,749,650 samples, 0.28%)</title><rect x="522.7" y="325" width="2.2" height="15.0" fill="rgb(205,3,0)" rx="2" ry="2" />
+<text  x="525.67" y="335.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;* std::__copy_move&lt;true, false, std::random_access_iterator_tag&gt;::__copy_m&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;*, std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;*&gt; (145,758 samples, 0.02%)</title><rect x="110.6" y="421" width="0.1" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="113.56" y="431.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::BuildDataListElement_s, std::allocator&lt;ns3::BuildDataListElement_s&gt; &gt;::operator[] (152,525 samples, 0.02%)</title><rect x="172.9" y="437" width="0.1" height="15.0" fill="rgb(235,140,33)" rx="2" ry="2" />
+<text  x="175.90" y="447.5" ></text>
+</g>
+<g >
+<title>int&amp; std::vector&lt;int, std::allocator&lt;int&gt; &gt;::emplace_back&lt;int&gt; (931,649 samples, 0.10%)</title><rect x="572.5" y="341" width="0.7" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="575.50" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt;::~Ptr (279,109 samples, 0.03%)</title><rect x="382.1" y="469" width="0.2" height="15.0" fill="rgb(205,3,0)" rx="2" ry="2" />
+<text  x="385.09" y="479.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::allocate (313,319 samples, 0.03%)</title><rect x="626.6" y="405" width="0.2" height="15.0" fill="rgb(215,48,11)" rx="2" ry="2" />
+<text  x="629.59" y="415.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::copy&lt;__gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, unsigned char*&gt; (280,915 samples, 0.03%)</title><rect x="519.3" y="277" width="0.3" height="15.0" fill="rgb(241,168,40)" rx="2" ry="2" />
+<text  x="522.35" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Packet&gt;::Ptr (218,155 samples, 0.02%)</title><rect x="363.8" y="421" width="0.1" height="15.0" fill="rgb(230,117,28)" rx="2" ry="2" />
+<text  x="366.77" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;* std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_clone_node&lt;false, std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_Alloc_node&gt; (155,456 samples, 0.02%)</title><rect x="341.2" y="389" width="0.2" height="15.0" fill="rgb(205,4,0)" rx="2" ry="2" />
+<text  x="344.24" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::LteControlMessage, ns3::Empty, ns3::DefaultDeleter&lt;ns3::LteControlMessage&gt; &gt;::Unref (127,064 samples, 0.01%)</title><rect x="576.5" y="277" width="0.1" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="579.49" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::Packet, ns3::Empty, ns3::DefaultDeleter&lt;ns3::Packet&gt; &gt;::Unref (943,939 samples, 0.10%)</title><rect x="75.9" y="277" width="0.8" height="15.0" fill="rgb(215,47,11)" rx="2" ry="2" />
+<text  x="78.94" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultDeleter&lt;ns3::Packet&gt;::Delete (359,163 samples, 0.04%)</title><rect x="502.1" y="309" width="0.2" height="15.0" fill="rgb(231,123,29)" rx="2" ry="2" />
+<text  x="505.05" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::HigherLayerSelected_s* std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt;::_M_allocate_and_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::HigherLayerSelected_s const*, std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt; &gt; &gt; (324,739 samples, 0.03%)</title><rect x="593.3" y="261" width="0.3" height="15.0" fill="rgb(209,22,5)" rx="2" ry="2" />
+<text  x="596.31" y="271.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::_M_clear (891,714 samples, 0.09%)</title><rect x="377.9" y="325" width="0.7" height="15.0" fill="rgb(217,56,13)" rx="2" ry="2" />
+<text  x="380.91" y="335.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::CqiListElement_s&gt; (154,796 samples, 0.02%)</title><rect x="131.1" y="437" width="0.1" height="15.0" fill="rgb(241,165,39)" rx="2" ry="2" />
+<text  x="134.12" y="447.5" ></text>
+</g>
+<g >
+<title>operator new (190,161 samples, 0.02%)</title><rect x="212.9" y="309" width="0.1" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="215.85" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::EventImpl&gt;::~Ptr (281,749 samples, 0.03%)</title><rect x="305.7" y="469" width="0.2" height="15.0" fill="rgb(225,92,22)" rx="2" ry="2" />
+<text  x="308.65" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Simulator::DoSchedule (888,679 samples, 0.09%)</title><rect x="62.2" y="517" width="0.7" height="15.0" fill="rgb(222,79,18)" rx="2" ry="2" />
+<text  x="65.21" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;5ul, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::~_Tuple_impl (934,712 samples, 0.10%)</title><rect x="776.5" y="469" width="0.7" height="15.0" fill="rgb(207,10,2)" rx="2" ry="2" />
+<text  x="779.47" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt;::_Rb_tree_iterator (163,346 samples, 0.02%)</title><rect x="242.4" y="437" width="0.1" height="15.0" fill="rgb(210,24,5)" rx="2" ry="2" />
+<text  x="245.36" y="447.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::BuildDataListElement_s*, ns3::BuildDataListElement_s&gt; (793,632 samples, 0.08%)</title><rect x="145.6" y="437" width="0.7" height="15.0" fill="rgb(215,47,11)" rx="2" ry="2" />
+<text  x="148.63" y="447.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__enable_if&lt;std::__is_scalar&lt;unsigned int&gt;::__value, void&gt;::__type std::__fill_a1&lt;unsigned int*, unsigned int&gt; (467,368 samples, 0.05%)</title><rect x="696.1" y="373" width="0.3" height="15.0" fill="rgb(222,81,19)" rx="2" ry="2" />
+<text  x="699.06" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::MacCeValue_u::MacCeValue_u (153,635 samples, 0.02%)</title><rect x="457.2" y="293" width="0.1" height="15.0" fill="rgb(219,65,15)" rx="2" ry="2" />
+<text  x="460.19" y="303.5" ></text>
+</g>
+<g >
+<title>decltype  (232,855 samples, 0.02%)</title><rect x="722.0" y="405" width="0.1" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="724.96" y="415.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::operator= (3,155,006 samples, 0.33%)</title><rect x="731.9" y="517" width="2.5" height="15.0" fill="rgb(251,215,51)" rx="2" ry="2" />
+<text  x="734.89" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::ByteTagList::Begin (1,259,994 samples, 0.13%)</title><rect x="426.2" y="229" width="1.0" height="15.0" fill="rgb(243,174,41)" rx="2" ry="2" />
+<text  x="429.17" y="239.5" ></text>
+</g>
+<g >
+<title>ns3::SbMeasResult_s::~SbMeasResult_s (154,796 samples, 0.02%)</title><rect x="131.1" y="389" width="0.1" height="15.0" fill="rgb(221,77,18)" rx="2" ry="2" />
+<text  x="134.12" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::MemberSchedSapProvider&lt;ns3::PfFfMacScheduler&gt;::SchedDlTriggerReq (102,277,174 samples, 10.55%)</title><rect x="137.9" y="517" width="82.3" height="15.0" fill="rgb(247,193,46)" rx="2" ry="2" />
+<text  x="140.90" y="527.5" >ns3::Memb..</text>
+</g>
+<g >
+<title>ns3::HigherLayerSelected_s* std::__copy_move_a1&lt;false, ns3::HigherLayerSelected_s const*, ns3::HigherLayerSelected_s*&gt; (126,567 samples, 0.01%)</title><rect x="585.8" y="197" width="0.1" height="15.0" fill="rgb(227,104,25)" rx="2" ry="2" />
+<text  x="588.82" y="207.5" ></text>
+</g>
+<g >
+<title>ns3::FfMacSchedSapProvider::SchedUlCqiInfoReqParameters* std::__addressof&lt;ns3::FfMacSchedSapProvider::SchedUlCqiInfoReqParameters&gt; (156,394 samples, 0.02%)</title><rect x="263.3" y="437" width="0.2" height="15.0" fill="rgb(248,200,47)" rx="2" ry="2" />
+<text  x="266.34" y="447.5" ></text>
+</g>
+<g >
+<title>std::__allocated_ptr&lt;std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt;::operator= (125,732 samples, 0.01%)</title><rect x="733.4" y="389" width="0.1" height="15.0" fill="rgb(249,202,48)" rx="2" ry="2" />
+<text  x="736.43" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::RlcTag::Serialize (356,272 samples, 0.04%)</title><rect x="16.4" y="373" width="0.3" height="15.0" fill="rgb(233,133,31)" rx="2" ry="2" />
+<text  x="19.41" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::Object::Construct (2,451,198 samples, 0.25%)</title><rect x="630.7" y="501" width="2.0" height="15.0" fill="rgb(228,108,26)" rx="2" ry="2" />
+<text  x="633.71" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_get_node (768,882 samples, 0.08%)</title><rect x="270.2" y="405" width="0.7" height="15.0" fill="rgb(221,75,17)" rx="2" ry="2" />
+<text  x="273.23" y="415.5" ></text>
+</g>
+<g >
+<title>int* std::__copy_move_a1&lt;false, int const*, int*&gt; (214,092 samples, 0.02%)</title><rect x="574.1" y="261" width="0.2" height="15.0" fill="rgb(230,117,28)" rx="2" ry="2" />
+<text  x="577.15" y="271.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, unsigned short, std::_Identity&lt;unsigned short&gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;unsigned short&gt; &gt;::find (955,568 samples, 0.10%)</title><rect x="462.8" y="341" width="0.8" height="15.0" fill="rgb(238,154,36)" rx="2" ry="2" />
+<text  x="465.85" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue const&gt;::Ptr&lt;ns3::SpectrumValue&gt; (191,031 samples, 0.02%)</title><rect x="737.7" y="533" width="0.2" height="15.0" fill="rgb(249,202,48)" rx="2" ry="2" />
+<text  x="740.71" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::~_Vector_base (146,912 samples, 0.02%)</title><rect x="303.7" y="421" width="0.1" height="15.0" fill="rgb(223,86,20)" rx="2" ry="2" />
+<text  x="306.68" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::GetImpl (242,375 samples, 0.02%)</title><rect x="779.5" y="837" width="0.2" height="15.0" fill="rgb(223,87,20)" rx="2" ry="2" />
+<text  x="782.49" y="847.5" ></text>
+</g>
+<g >
+<title>std::_Head_base&lt;5ul, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;, false&gt;::~_Head_base (934,712 samples, 0.10%)</title><rect x="776.5" y="453" width="0.7" height="15.0" fill="rgb(205,2,0)" rx="2" ry="2" />
+<text  x="779.47" y="463.5" ></text>
+</g>
+<g >
+<title>int* std::__copy_move&lt;false, true, std::random_access_iterator_tag&gt;::__copy_m&lt;int const, int&gt; (162,673 samples, 0.02%)</title><rect x="531.3" y="261" width="0.1" height="15.0" fill="rgb(250,207,49)" rx="2" ry="2" />
+<text  x="534.29" y="271.5" ></text>
+</g>
+<g >
+<title>[libm.so.6] (276,808 samples, 0.03%)</title><rect x="750.0" y="533" width="0.3" height="15.0" fill="rgb(208,16,4)" rx="2" ry="2" />
+<text  x="753.05" y="543.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;is_invocable_r_v&lt;void, std::_Bind&lt;void  (888,830,008 samples, 91.65%)</title><rect x="43.3" y="661" width="714.9" height="15.0" fill="rgb(243,178,42)" rx="2" ry="2" />
+<text  x="46.31" y="671.5" >std::enable_if&lt;is_invocable_r_v&lt;void, std::_Bind&lt;void </text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue&gt; ns3::Create&lt;ns3::SpectrumValue, ns3::Ptr&lt;ns3::SpectrumModel const&gt; const&amp;&gt; (1,116,674 samples, 0.12%)</title><rect x="645.9" y="437" width="0.9" height="15.0" fill="rgb(246,189,45)" rx="2" ry="2" />
+<text  x="648.94" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumValueHelper::GetSpectrumModel (1,991,247 samples, 0.21%)</title><rect x="54.5" y="501" width="1.6" height="15.0" fill="rgb(207,12,3)" rx="2" ry="2" />
+<text  x="57.51" y="511.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, unsigned char, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, unsigned char&gt; &gt; &gt;::begin (434,661 samples, 0.04%)</title><rect x="193.8" y="485" width="0.4" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="196.82" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::BuildDataListElement_s, std::allocator&lt;ns3::BuildDataListElement_s&gt; &gt;::_S_relocate (371,811 samples, 0.04%)</title><rect x="202.9" y="453" width="0.3" height="15.0" fill="rgb(247,197,47)" rx="2" ry="2" />
+<text  x="205.89" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::NixVector&gt;::Ptr (292,715 samples, 0.03%)</title><rect x="558.9" y="229" width="0.3" height="15.0" fill="rgb(248,201,48)" rx="2" ry="2" />
+<text  x="561.92" y="239.5" ></text>
+</g>
+<g >
+<title>ns3::SbMeasResult_s::SbMeasResult_s (154,721 samples, 0.02%)</title><rect x="461.6" y="245" width="0.1" height="15.0" fill="rgb(235,141,33)" rx="2" ry="2" />
+<text  x="464.55" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s* std::vector&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt;::_M_allocate_and_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::DlInfoListElement_s const*, std::vector&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt; &gt; &gt; (5,646,301 samples, 0.58%)</title><rect x="257.8" y="501" width="4.6" height="15.0" fill="rgb(248,198,47)" rx="2" ry="2" />
+<text  x="260.82" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::TagBuffer::TagBuffer (206,219 samples, 0.02%)</title><rect x="13.1" y="373" width="0.2" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="16.10" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::LteControlMessage, ns3::Empty, ns3::DefaultDeleter&lt;ns3::LteControlMessage&gt; &gt;::SimpleRefCount (141,410 samples, 0.01%)</title><rect x="421.0" y="309" width="0.1" height="15.0" fill="rgb(208,15,3)" rx="2" ry="2" />
+<text  x="424.03" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::PfFfMacScheduler::DoSchedDlTriggerReq (415,834 samples, 0.04%)</title><rect x="15.5" y="485" width="0.3" height="15.0" fill="rgb(214,45,10)" rx="2" ry="2" />
+<text  x="18.45" y="495.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt; &gt;::construct&lt;ns3::Ptr&lt;ns3::Packet&gt;, ns3::Ptr&lt;ns3::Packet&gt; const&amp;&gt; (247,590 samples, 0.03%)</title><rect x="564.2" y="133" width="0.2" height="15.0" fill="rgb(254,228,54)" rx="2" ry="2" />
+<text  x="567.20" y="143.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumPhy::EndRxUlSrs (363,240 samples, 0.04%)</title><rect x="611.9" y="565" width="0.3" height="15.0" fill="rgb(252,216,51)" rx="2" ry="2" />
+<text  x="614.94" y="575.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;bool, std::allocator&lt;bool&gt; &gt;::size (156,263 samples, 0.02%)</title><rect x="248.8" y="469" width="0.2" height="15.0" fill="rgb(208,17,4)" rx="2" ry="2" />
+<text  x="251.84" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::~PacketBurst (1,016,178 samples, 0.10%)</title><rect x="635.0" y="341" width="0.8" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="637.98" y="351.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;std::__is_bitwise_relocatable&lt;unsigned short, void&gt;::value, unsigned short*&gt;::type std::__relocate_a_1&lt;unsigned short, unsigned short&gt; (126,646 samples, 0.01%)</title><rect x="481.2" y="229" width="0.1" height="15.0" fill="rgb(235,141,33)" rx="2" ry="2" />
+<text  x="484.24" y="239.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;::_S_relocate (319,205 samples, 0.03%)</title><rect x="209.9" y="453" width="0.3" height="15.0" fill="rgb(218,63,15)" rx="2" ry="2" />
+<text  x="212.91" y="463.5" ></text>
+</g>
+<g >
+<title>double* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, double*&gt; (210,427 samples, 0.02%)</title><rect x="78.3" y="453" width="0.2" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="81.29" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::ObjectBase::ObjectBase (178,001 samples, 0.02%)</title><rect x="161.3" y="389" width="0.2" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="164.34" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_emplace_hint_unique&lt;std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (917,334 samples, 0.09%)</title><rect x="706.4" y="421" width="0.8" height="15.0" fill="rgb(248,201,48)" rx="2" ry="2" />
+<text  x="709.45" y="431.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;bool, std::allocator&lt;bool&gt; &gt;::_M_fill_insert (4,584,091 samples, 0.47%)</title><rect x="197.2" y="453" width="3.7" height="15.0" fill="rgb(229,112,26)" rx="2" ry="2" />
+<text  x="200.22" y="463.5" ></text>
+</g>
+<g >
+<title>[ld-linux-x86-64.so.2] (1,432,154 samples, 0.15%)</title><rect x="10.0" y="821" width="1.2" height="15.0" fill="rgb(243,178,42)" rx="2" ry="2" />
+<text  x="13.00" y="831.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::clear (1,296,666 samples, 0.13%)</title><rect x="652.6" y="357" width="1.1" height="15.0" fill="rgb(217,58,13)" rx="2" ry="2" />
+<text  x="655.64" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::ObjectBase::ConstructSelf (2,205,090 samples, 0.23%)</title><rect x="33.3" y="437" width="1.8" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="36.34" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;::operator-- (189,133 samples, 0.02%)</title><rect x="336.1" y="373" width="0.1" height="15.0" fill="rgb(223,86,20)" rx="2" ry="2" />
+<text  x="339.08" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::LtePhy::SetMacPdu (539,148 samples, 0.06%)</title><rect x="19.9" y="325" width="0.4" height="15.0" fill="rgb(248,201,48)" rx="2" ry="2" />
+<text  x="22.86" y="335.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt;::at (165,094 samples, 0.02%)</title><rect x="598.8" y="277" width="0.1" height="15.0" fill="rgb(248,200,47)" rx="2" ry="2" />
+<text  x="601.76" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::UeSelected_s::operator= (127,305 samples, 0.01%)</title><rect x="593.2" y="277" width="0.1" height="15.0" fill="rgb(244,183,43)" rx="2" ry="2" />
+<text  x="596.21" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::PacketMetadata::Create (266,992 samples, 0.03%)</title><rect x="19.1" y="357" width="0.2" height="15.0" fill="rgb(231,122,29)" rx="2" ry="2" />
+<text  x="22.11" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::ObjectBase::ConstructSelf (185,707 samples, 0.02%)</title><rect x="119.4" y="469" width="0.2" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="122.44" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt; &gt;::_Auto_node::_Auto_node&lt;std::pair&lt;unsigned short, ns3::DlInfoListElement_s&gt; &gt; (1,129,994 samples, 0.12%)</title><rect x="503.1" y="501" width="0.9" height="15.0" fill="rgb(245,184,44)" rx="2" ry="2" />
+<text  x="506.11" y="511.5" ></text>
+</g>
+<g >
+<title>[libm.so.6] (283,669 samples, 0.03%)</title><rect x="309.8" y="469" width="0.2" height="15.0" fill="rgb(208,16,4)" rx="2" ry="2" />
+<text  x="312.79" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;::Ptr (126,810 samples, 0.01%)</title><rect x="74.9" y="517" width="0.1" height="15.0" fill="rgb(250,208,49)" rx="2" ry="2" />
+<text  x="77.92" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteControlMessage&gt;::Acquire (196,949 samples, 0.02%)</title><rect x="319.1" y="277" width="0.2" height="15.0" fill="rgb(212,36,8)" rx="2" ry="2" />
+<text  x="322.11" y="287.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::LteSpectrumModelId, std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt;, std::_Select1st&lt;std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt; &gt;, std::less&lt;ns3::LteSpectrumModelId&gt;, std::allocator&lt;std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt; &gt; &gt;::find (1,328,190 samples, 0.14%)</title><rect x="675.5" y="469" width="1.1" height="15.0" fill="rgb(254,226,54)" rx="2" ry="2" />
+<text  x="678.51" y="479.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::push_back (234,373 samples, 0.02%)</title><rect x="17.4" y="325" width="0.2" height="15.0" fill="rgb(222,79,18)" rx="2" ry="2" />
+<text  x="20.39" y="335.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::~vector (162,616 samples, 0.02%)</title><rect x="457.7" y="229" width="0.2" height="15.0" fill="rgb(243,174,41)" rx="2" ry="2" />
+<text  x="460.72" y="239.5" ></text>
+</g>
+<g >
+<title>ns3::SbMeasResult_s::SbMeasResult_s (1,765,679 samples, 0.18%)</title><rect x="124.7" y="389" width="1.4" height="15.0" fill="rgb(235,141,33)" rx="2" ry="2" />
+<text  x="127.68" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::EnbMacMemberLteMacSapProvider&lt;ns3::LteEnbMac&gt;::ReportBufferStatus (3,928,142 samples, 0.41%)</title><rect x="24.3" y="373" width="3.1" height="15.0" fill="rgb(241,166,39)" rx="2" ry="2" />
+<text  x="27.28" y="383.5" ></text>
+</g>
+<g >
+<title>pow (353,785 samples, 0.04%)</title><rect x="750.0" y="549" width="0.3" height="15.0" fill="rgb(254,226,54)" rx="2" ry="2" />
+<text  x="752.99" y="559.5" ></text>
+</g>
+<g >
+<title>void std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_construct_node&lt;unsigned int const&amp;, ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp;&gt; (395,726 samples, 0.04%)</title><rect x="331.8" y="421" width="0.3" height="15.0" fill="rgb(234,135,32)" rx="2" ry="2" />
+<text  x="334.79" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::Buffer::Buffer (238,535 samples, 0.02%)</title><rect x="153.2" y="357" width="0.2" height="15.0" fill="rgb(254,226,54)" rx="2" ry="2" />
+<text  x="156.17" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumModel const&gt;::Ptr (141,816 samples, 0.01%)</title><rect x="718.1" y="469" width="0.2" height="15.0" fill="rgb(232,125,30)" rx="2" ry="2" />
+<text  x="721.15" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::TracedCallback&lt;ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt; &gt;::operator (699,741 samples, 0.07%)</title><rect x="328.0" y="501" width="0.6" height="15.0" fill="rgb(228,106,25)" rx="2" ry="2" />
+<text  x="331.00" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::LtePhy::GetControlMessages[abi:cxx11] (5,917,079 samples, 0.61%)</title><rect x="619.2" y="549" width="4.7" height="15.0" fill="rgb(250,208,49)" rx="2" ry="2" />
+<text  x="622.18" y="559.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt; &gt;::construct&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; const&amp;&gt; (2,931,196 samples, 0.30%)</title><rect x="238.0" y="341" width="2.3" height="15.0" fill="rgb(216,54,12)" rx="2" ry="2" />
+<text  x="240.96" y="351.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::push_back (155,710 samples, 0.02%)</title><rect x="101.9" y="469" width="0.1" height="15.0" fill="rgb(215,50,11)" rx="2" ry="2" />
+<text  x="104.86" y="479.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::CqiListElement_s*&gt; (416,767 samples, 0.04%)</title><rect x="106.8" y="437" width="0.3" height="15.0" fill="rgb(219,67,16)" rx="2" ry="2" />
+<text  x="109.77" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::~PacketBurst (158,753 samples, 0.02%)</title><rect x="17.0" y="389" width="0.1" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="19.99" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::CqiListElement_s::~CqiListElement_s (154,796 samples, 0.02%)</title><rect x="131.1" y="405" width="0.1" height="15.0" fill="rgb(225,92,22)" rx="2" ry="2" />
+<text  x="134.12" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, unsigned int&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt; &gt;::_M_begin (318,309 samples, 0.03%)</title><rect x="172.2" y="421" width="0.3" height="15.0" fill="rgb(243,178,42)" rx="2" ry="2" />
+<text  x="175.25" y="431.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;int*, int&gt; (161,562 samples, 0.02%)</title><rect x="575.3" y="341" width="0.1" height="15.0" fill="rgb(206,5,1)" rx="2" ry="2" />
+<text  x="578.30" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::HarqStatus_e* std::copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::DlInfoListElement_s::HarqStatus_e const*, std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt; &gt;, ns3::DlInfoListElement_s::HarqStatus_e*&gt; (1,860,884 samples, 0.19%)</title><rect x="259.1" y="325" width="1.5" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="262.11" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::Packet::~Packet (734,989 samples, 0.08%)</title><rect x="76.1" y="245" width="0.6" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="79.08" y="255.5" ></text>
+</g>
+<g >
+<title>std::_Bind_helper&lt;std::__or_&lt;std::is_integral&lt;std::decay&lt;void  (325,363 samples, 0.03%)</title><rect x="87.4" y="469" width="0.2" height="15.0" fill="rgb(237,148,35)" rx="2" ry="2" />
+<text  x="90.36" y="479.5" ></text>
+</g>
+<g >
+<title>decltype  (240,418 samples, 0.02%)</title><rect x="611.3" y="453" width="0.2" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="614.35" y="463.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;::_M_insert&lt;ns3::UlDciLteControlMessage const&amp;&gt; (1,786,879 samples, 0.18%)</title><rect x="287.1" y="485" width="1.4" height="15.0" fill="rgb(224,91,21)" rx="2" ry="2" />
+<text  x="290.08" y="495.5" ></text>
+</g>
+<g >
+<title>double* std::__uninitialized_default_n&lt;double*, unsigned long&gt; (455,698 samples, 0.05%)</title><rect x="677.6" y="421" width="0.4" height="15.0" fill="rgb(231,123,29)" rx="2" ry="2" />
+<text  x="680.60" y="431.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt;::_M_ptr (349,350 samples, 0.04%)</title><rect x="224.2" y="405" width="0.3" height="15.0" fill="rgb(206,4,1)" rx="2" ry="2" />
+<text  x="227.20" y="415.5" ></text>
+</g>
+<g >
+<title>void std::__invoke_impl&lt;void, ns3::MakeEvent&lt;&gt; (238,924 samples, 0.02%)</title><rect x="36.6" y="661" width="0.2" height="15.0" fill="rgb(218,62,14)" rx="2" ry="2" />
+<text  x="39.64" y="671.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt; &gt;::_M_lower_bound (420,439 samples, 0.04%)</title><rect x="73.7" y="469" width="0.4" height="15.0" fill="rgb(253,225,53)" rx="2" ry="2" />
+<text  x="76.75" y="479.5" ></text>
+</g>
+<g >
+<title>unsigned short* std::__uninitialized_copy&lt;true&gt;::__uninit_copy&lt;std::move_iterator&lt;unsigned short*&gt;, unsigned short*&gt; (728,775 samples, 0.08%)</title><rect x="253.1" y="405" width="0.5" height="15.0" fill="rgb(226,97,23)" rx="2" ry="2" />
+<text  x="256.06" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt;::_Vector_impl_data::_Vector_impl_data (157,537 samples, 0.02%)</title><rect x="130.9" y="453" width="0.1" height="15.0" fill="rgb(213,37,9)" rx="2" ry="2" />
+<text  x="133.91" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::LteAmc::GetMcsFromCqi (233,362 samples, 0.02%)</title><rect x="175.3" y="485" width="0.2" height="15.0" fill="rgb(234,135,32)" rx="2" ry="2" />
+<text  x="178.30" y="495.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;*, std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; std::__miter_base&lt;__gnu_cxx::__normal_iterator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;*, std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; (188,301 samples, 0.02%)</title><rect x="381.7" y="485" width="0.2" height="15.0" fill="rgb(217,55,13)" rx="2" ry="2" />
+<text  x="384.72" y="495.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned char, ns3::LteMacSapProvider::ReportBufferStatusParameters, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider::ReportBufferStatusParameters&gt; &gt; &gt;::end (158,274 samples, 0.02%)</title><rect x="569.7" y="325" width="0.1" height="15.0" fill="rgb(223,87,20)" rx="2" ry="2" />
+<text  x="572.66" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::Singleton&lt;ns3::IidManager&gt;::Get (145,954 samples, 0.02%)</title><rect x="373.8" y="453" width="0.1" height="15.0" fill="rgb(222,79,19)" rx="2" ry="2" />
+<text  x="376.77" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; &gt; &gt;::find (1,985,670 samples, 0.20%)</title><rect x="465.1" y="517" width="1.6" height="15.0" fill="rgb(205,3,0)" rx="2" ry="2" />
+<text  x="468.11" y="527.5" ></text>
+</g>
+<g >
+<title>std::tuple_element&lt;3ul, std::tuple&lt;ns3::MultiModelSpectrumChannel*, ns3::Ptr&lt;ns3::SpectrumValue&gt;, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt; &gt;::type&amp; std::get&lt;3ul, ns3::MultiModelSpectrumChannel*, ns3::Ptr&lt;ns3::SpectrumValue&gt;, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt; (236,255 samples, 0.02%)</title><rect x="756.9" y="597" width="0.2" height="15.0" fill="rgb(218,63,15)" rx="2" ry="2" />
+<text  x="759.93" y="607.5" ></text>
+</g>
+<g >
+<title>std::move_iterator&lt;unsigned short*&gt;::move_iterator (197,587 samples, 0.02%)</title><rect x="252.9" y="421" width="0.1" height="15.0" fill="rgb(239,160,38)" rx="2" ry="2" />
+<text  x="255.87" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::Object::Dispose (238,924 samples, 0.02%)</title><rect x="36.6" y="533" width="0.2" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="39.64" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_emplace_hint_unique&lt;std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (2,388,285 samples, 0.25%)</title><rect x="660.9" y="421" width="1.9" height="15.0" fill="rgb(248,201,48)" rx="2" ry="2" />
+<text  x="663.86" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultSimulatorImpl::Schedule (2,358,952 samples, 0.24%)</title><rect x="706.2" y="485" width="1.9" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="709.16" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::MemberLteCcmMacSapUser&lt;ns3::NoOpComponentCarrierManager&gt;::NotifyTxOpportunity (304,289 samples, 0.03%)</title><rect x="15.5" y="437" width="0.2" height="15.0" fill="rgb(205,3,0)" rx="2" ry="2" />
+<text  x="18.45" y="447.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned char, ns3::LteMacSapProvider::ReportBufferStatusParameters, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider::ReportBufferStatusParameters&gt; &gt; &gt;::end (393,274 samples, 0.04%)</title><rect x="690.5" y="501" width="0.3" height="15.0" fill="rgb(223,87,20)" rx="2" ry="2" />
+<text  x="693.46" y="511.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, ns3::pfsFlowPerf_t, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt; &gt; &gt;::find (1,750,862 samples, 0.18%)</title><rect x="235.3" y="485" width="1.4" height="15.0" fill="rgb(211,28,6)" rx="2" ry="2" />
+<text  x="238.26" y="495.5" ></text>
+</g>
+<g >
+<title>std::_List_const_iterator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt;::operator++ (196,897 samples, 0.02%)</title><rect x="628.5" y="517" width="0.2" height="15.0" fill="rgb(228,107,25)" rx="2" ry="2" />
+<text  x="631.50" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::LogComponent::IsEnabled (217,399 samples, 0.02%)</title><rect x="367.5" y="517" width="0.2" height="15.0" fill="rgb(214,43,10)" rx="2" ry="2" />
+<text  x="370.52" y="527.5" ></text>
+</g>
+<g >
+<title>double* std::__copy_move_a2&lt;false, double const*, double*&gt; (125,420 samples, 0.01%)</title><rect x="72.4" y="357" width="0.1" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="75.44" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::CqiListElement_s* std::__uninitialized_copy&lt;false&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::CqiListElement_s*, std::vector&lt;ns3::CqiListElement_s, std::allocator&lt;ns3::CqiListElement_s&gt; &gt; &gt;, ns3::CqiListElement_s*&gt; (1,085,784 samples, 0.11%)</title><rect x="92.1" y="437" width="0.8" height="15.0" fill="rgb(211,29,7)" rx="2" ry="2" />
+<text  x="95.06" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::LogComponent::IsEnabled (126,870 samples, 0.01%)</title><rect x="587.3" y="277" width="0.1" height="15.0" fill="rgb(214,43,10)" rx="2" ry="2" />
+<text  x="590.30" y="287.5" ></text>
+</g>
+<g >
+<title>std::__tuple_compare&lt;std::tuple&lt;double const&amp;, double const&amp;, double const&amp;&gt;, std::tuple&lt;double const&amp;, double const&amp;, double const&amp;&gt;, 1ul, 3ul&gt;::__eq (1,304,506 samples, 0.13%)</title><rect x="747.4" y="485" width="1.0" height="15.0" fill="rgb(229,110,26)" rx="2" ry="2" />
+<text  x="750.40" y="495.5" ></text>
+</g>
+<g >
+<title>std::less&lt;unsigned short&gt;::operator (310,760 samples, 0.03%)</title><rect x="524.1" y="293" width="0.3" height="15.0" fill="rgb(207,11,2)" rx="2" ry="2" />
+<text  x="527.11" y="303.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt; &gt; &gt;::_M_lower_bound (1,339,418 samples, 0.14%)</title><rect x="433.6" y="293" width="1.1" height="15.0" fill="rgb(208,18,4)" rx="2" ry="2" />
+<text  x="436.58" y="303.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt;::destroy&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; (1,991,119 samples, 0.21%)</title><rect x="501.3" y="517" width="1.6" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="504.32" y="527.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt;::begin (154,700 samples, 0.02%)</title><rect x="257.3" y="501" width="0.1" height="15.0" fill="rgb(244,183,43)" rx="2" ry="2" />
+<text  x="260.32" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned short const, unsigned char&gt; &gt;::operator* (264,202 samples, 0.03%)</title><rect x="135.2" y="485" width="0.2" height="15.0" fill="rgb(234,134,32)" rx="2" ry="2" />
+<text  x="138.23" y="495.5" ></text>
+</g>
+<g >
+<title> (234,452 samples, 0.02%)</title><rect x="297.6" y="453" width="0.2" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="300.59" y="463.5" ></text>
+</g>
+<g >
+<title>std::tuple&lt;ns3::LteInterference*, ns3::Ptr&lt;ns3::SpectrumValue const&gt;, unsigned int&gt;::~tuple (1,016,655 samples, 0.10%)</title><rect x="772.7" y="565" width="0.9" height="15.0" fill="rgb(251,215,51)" rx="2" ry="2" />
+<text  x="775.74" y="575.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::RxSpectrumModelInfo&gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::RxSpectrumModelInfo&gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::RxSpectrumModelInfo&gt; &gt; &gt;::begin (414,271 samples, 0.04%)</title><rect x="657.6" y="501" width="0.3" height="15.0" fill="rgb(226,97,23)" rx="2" ry="2" />
+<text  x="660.61" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteControlMessage&gt;::Ptr (199,678 samples, 0.02%)</title><rect x="150.5" y="437" width="0.2" height="15.0" fill="rgb(222,81,19)" rx="2" ry="2" />
+<text  x="153.54" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::MacCeValue_u::~MacCeValue_u (457,826 samples, 0.05%)</title><rect x="688.2" y="485" width="0.4" height="15.0" fill="rgb(205,0,0)" rx="2" ry="2" />
+<text  x="691.25" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::CeBitmap_e, std::allocator&lt;ns3::CeBitmap_e&gt; &gt;::~vector (156,611 samples, 0.02%)</title><rect x="139.5" y="469" width="0.1" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="142.47" y="479.5" ></text>
+</g>
+<g >
+<title>void std::_Function_base::_Base_manager&lt;std::_Bind&lt;void  (496,911 samples, 0.05%)</title><rect x="63.9" y="469" width="0.4" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="66.94" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::AntennaModel&gt;::Acquire (155,047 samples, 0.02%)</title><rect x="342.4" y="501" width="0.2" height="15.0" fill="rgb(205,4,1)" rx="2" ry="2" />
+<text  x="345.44" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Packet::RemovePacketTag (1,745,173 samples, 0.18%)</title><rect x="430.3" y="325" width="1.4" height="15.0" fill="rgb(227,103,24)" rx="2" ry="2" />
+<text  x="433.25" y="335.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;int&gt;::allocate (169,207 samples, 0.02%)</title><rect x="574.6" y="277" width="0.1" height="15.0" fill="rgb(235,139,33)" rx="2" ry="2" />
+<text  x="577.55" y="287.5" ></text>
+</g>
+<g >
+<title>[libm.so.6] (303,230 samples, 0.03%)</title><rect x="641.9" y="469" width="0.2" height="15.0" fill="rgb(208,16,4)" rx="2" ry="2" />
+<text  x="644.89" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::max_size (250,041 samples, 0.03%)</title><rect x="597.4" y="229" width="0.2" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="600.39" y="239.5" ></text>
+</g>
+<g >
+<title>ns3::MakeEvent&lt;void  (319,694 samples, 0.03%)</title><rect x="727.6" y="437" width="0.2" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="730.59" y="447.5" ></text>
+</g>
+<g >
+<title> (164,113 samples, 0.02%)</title><rect x="70.7" y="453" width="0.1" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="73.69" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::CeBitmap_e* std::__uninitialized_copy&lt;true&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::CeBitmap_e const*, std::vector&lt;ns3::CeBitmap_e, std::allocator&lt;ns3::CeBitmap_e&gt; &gt; &gt;, ns3::CeBitmap_e*&gt; (414,390 samples, 0.04%)</title><rect x="203.9" y="357" width="0.3" height="15.0" fill="rgb(239,156,37)" rx="2" ry="2" />
+<text  x="206.90" y="367.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::vector (1,354,660 samples, 0.14%)</title><rect x="324.8" y="469" width="1.1" height="15.0" fill="rgb(239,156,37)" rx="2" ry="2" />
+<text  x="327.79" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned char const, std::map&lt;unsigned char, ns3::LteMacSapProvider*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt; &gt; &gt; &gt;::operator (126,576 samples, 0.01%)</title><rect x="552.3" y="213" width="0.1" height="15.0" fill="rgb(213,38,9)" rx="2" ry="2" />
+<text  x="555.26" y="223.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteControlMessage&gt;::Ptr (156,463 samples, 0.02%)</title><rect x="388.7" y="549" width="0.1" height="15.0" fill="rgb(222,81,19)" rx="2" ry="2" />
+<text  x="391.69" y="559.5" ></text>
+</g>
+<g >
+<title>ns3::EventId ns3::Simulator::Schedule&lt;void  (4,891,359 samples, 0.50%)</title><rect x="615.2" y="549" width="3.9" height="15.0" fill="rgb(253,224,53)" rx="2" ry="2" />
+<text  x="618.19" y="559.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt;* std::__copy_move&lt;true, false, std::random_access_iterator_tag&gt;::__copy_m&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;*, ns3::Ptr&lt;ns3::PacketBurst&gt;*&gt; (5,666,405 samples, 0.58%)</title><rect x="377.0" y="437" width="4.6" height="15.0" fill="rgb(212,33,7)" rx="2" ry="2" />
+<text  x="380.00" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt;::_M_begin (155,598 samples, 0.02%)</title><rect x="455.6" y="277" width="0.1" height="15.0" fill="rgb(254,225,53)" rx="2" ry="2" />
+<text  x="458.59" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::~SpectrumValue (127,422 samples, 0.01%)</title><rect x="61.4" y="469" width="0.1" height="15.0" fill="rgb(247,193,46)" rx="2" ry="2" />
+<text  x="64.37" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::RarLteControlMessage&gt;::~Ptr (538,741 samples, 0.06%)</title><rect x="167.0" y="453" width="0.5" height="15.0" fill="rgb(215,50,12)" rx="2" ry="2" />
+<text  x="170.03" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Buffer::Buffer (1,912,352 samples, 0.20%)</title><rect x="555.7" y="229" width="1.5" height="15.0" fill="rgb(254,226,54)" rx="2" ry="2" />
+<text  x="558.70" y="239.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;int*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt; std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;int const*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;int*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt; &gt; (330,607 samples, 0.03%)</title><rect x="531.2" y="309" width="0.3" height="15.0" fill="rgb(236,146,35)" rx="2" ry="2" />
+<text  x="534.19" y="319.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_mbegin (234,522 samples, 0.02%)</title><rect x="273.5" y="421" width="0.2" height="15.0" fill="rgb(234,135,32)" rx="2" ry="2" />
+<text  x="276.49" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbMac::DoSchedDlConfigInd (1,650,854 samples, 0.17%)</title><rect x="15.8" y="469" width="1.3" height="15.0" fill="rgb(205,3,0)" rx="2" ry="2" />
+<text  x="18.79" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::size (164,095 samples, 0.02%)</title><rect x="597.6" y="229" width="0.1" height="15.0" fill="rgb(252,217,52)" rx="2" ry="2" />
+<text  x="600.59" y="239.5" ></text>
+</g>
+<g >
+<title>ns3::PacketMetadata::~PacketMetadata (559,336 samples, 0.06%)</title><rect x="453.1" y="101" width="0.5" height="15.0" fill="rgb(217,56,13)" rx="2" ry="2" />
+<text  x="456.12" y="111.5" ></text>
+</g>
+<g >
+<title>ns3::MemberSchedSapProvider&lt;ns3::PfFfMacScheduler&gt;::SchedUlTriggerReq (34,464,006 samples, 3.55%)</title><rect x="226.2" y="517" width="27.7" height="15.0" fill="rgb(237,148,35)" rx="2" ry="2" />
+<text  x="229.18" y="527.5" >n..</text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_M_check_len (545,573 samples, 0.06%)</title><rect x="215.1" y="437" width="0.4" height="15.0" fill="rgb(220,70,16)" rx="2" ry="2" />
+<text  x="218.10" y="447.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::operator= (277,205 samples, 0.03%)</title><rect x="140.1" y="469" width="0.2" height="15.0" fill="rgb(211,28,6)" rx="2" ry="2" />
+<text  x="143.05" y="479.5" ></text>
+</g>
+<g >
+<title>std::less&lt;unsigned int&gt;::operator (177,845 samples, 0.02%)</title><rect x="322.3" y="437" width="0.1" height="15.0" fill="rgb(236,146,35)" rx="2" ry="2" />
+<text  x="325.26" y="447.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;ns3::TbId_t, ns3::tbInfo_t&gt;::~pair (307,118 samples, 0.03%)</title><rect x="530.2" y="341" width="0.3" height="15.0" fill="rgb(229,112,27)" rx="2" ry="2" />
+<text  x="533.21" y="351.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::DlDciListElement_s, std::allocator&lt;ns3::DlDciListElement_s&gt; &gt;::size (284,337 samples, 0.03%)</title><rect x="205.5" y="453" width="0.2" height="15.0" fill="rgb(225,92,22)" rx="2" ry="2" />
+<text  x="208.50" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::~vector (292,063 samples, 0.03%)</title><rect x="728.3" y="421" width="0.3" height="15.0" fill="rgb(225,92,22)" rx="2" ry="2" />
+<text  x="731.32" y="431.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::map (164,996 samples, 0.02%)</title><rect x="88.0" y="485" width="0.1" height="15.0" fill="rgb(242,171,40)" rx="2" ry="2" />
+<text  x="90.95" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;1ul, ns3::Ptr&lt;ns3::SpectrumValue const&gt;, unsigned int&gt;::_Tuple_impl&lt;ns3::Ptr&lt;ns3::SpectrumValue const&gt;&amp;, unsigned int&amp;, void&gt; (939,853 samples, 0.10%)</title><rect x="709.5" y="405" width="0.7" height="15.0" fill="rgb(238,154,37)" rx="2" ry="2" />
+<text  x="712.45" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::Object::SetTypeId (389,266 samples, 0.04%)</title><rect x="450.4" y="277" width="0.3" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="453.37" y="287.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt; &gt; &gt;::end (191,913 samples, 0.02%)</title><rect x="291.6" y="501" width="0.2" height="15.0" fill="rgb(205,1,0)" rx="2" ry="2" />
+<text  x="294.65" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumModel const&gt;::Acquire (156,296 samples, 0.02%)</title><rect x="402.3" y="485" width="0.1" height="15.0" fill="rgb(222,80,19)" rx="2" ry="2" />
+<text  x="405.27" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt;::vector (485,819 samples, 0.05%)</title><rect x="510.0" y="517" width="0.4" height="15.0" fill="rgb(210,23,5)" rx="2" ry="2" />
+<text  x="512.98" y="527.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::AttributeConstructionList::Item, std::allocator&lt;ns3::AttributeConstructionList::Item&gt; &gt;::list (496,879 samples, 0.05%)</title><rect x="162.4" y="405" width="0.4" height="15.0" fill="rgb(252,219,52)" rx="2" ry="2" />
+<text  x="165.36" y="415.5" ></text>
+</g>
+<g >
+<title>decltype  (274,733 samples, 0.03%)</title><rect x="23.2" y="277" width="0.3" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="26.25" y="287.5" ></text>
+</g>
+<g >
+<title>std::map&lt;ns3::TbId_t, ns3::tbInfo_t, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::clear (2,281,160 samples, 0.24%)</title><rect x="505.0" y="549" width="1.8" height="15.0" fill="rgb(215,46,11)" rx="2" ry="2" />
+<text  x="507.98" y="559.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::_S_check_init_len (245,728 samples, 0.03%)</title><rect x="404.5" y="469" width="0.2" height="15.0" fill="rgb(233,130,31)" rx="2" ry="2" />
+<text  x="407.54" y="479.5" ></text>
+</g>
+<g >
+<title>std::map&lt;ns3::Scheduler::EventKey, ns3::EventImpl*, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::erase[abi:cxx11] (7,110,876 samples, 0.73%)</title><rect x="762.3" y="709" width="5.7" height="15.0" fill="rgb(251,215,51)" rx="2" ry="2" />
+<text  x="765.27" y="719.5" ></text>
+</g>
+<g >
+<title>ns3::Simulator::DoSchedule (192,930 samples, 0.02%)</title><rect x="112.5" y="485" width="0.2" height="15.0" fill="rgb(222,79,18)" rx="2" ry="2" />
+<text  x="115.51" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::LteUeMac::RefreshHarqProcessesPacketBuffer (953,324 samples, 0.10%)</title><rect x="684.5" y="517" width="0.8" height="15.0" fill="rgb(213,37,9)" rx="2" ry="2" />
+<text  x="687.49" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_M_allocate (126,483 samples, 0.01%)</title><rect x="606.9" y="437" width="0.1" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="609.92" y="447.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_insert&lt;ns3::Ptr&lt;ns3::MibLteControlMessage&gt;&amp;&gt; (190,229 samples, 0.02%)</title><rect x="122.3" y="533" width="0.2" height="15.0" fill="rgb(218,61,14)" rx="2" ry="2" />
+<text  x="125.33" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::emplace_hint&lt;unsigned int const&amp;, ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp;&gt; (1,502,471 samples, 0.15%)</title><rect x="658.4" y="501" width="1.2" height="15.0" fill="rgb(211,29,6)" rx="2" ry="2" />
+<text  x="661.36" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteControlMessage&gt;&amp; std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::emplace_back&lt;ns3::Ptr&lt;ns3::MibLteControlMessage&gt;&amp;&gt; (190,229 samples, 0.02%)</title><rect x="122.3" y="549" width="0.2" height="15.0" fill="rgb(231,123,29)" rx="2" ry="2" />
+<text  x="125.33" y="559.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;is_member_pointer_v&lt;void  (2,016,394 samples, 0.21%)</title><rect x="340.0" y="485" width="1.6" height="15.0" fill="rgb(241,170,40)" rx="2" ry="2" />
+<text  x="342.96" y="495.5" ></text>
+</g>
+<g >
+<title>void std::__copy_move&lt;false, false, std::random_access_iterator_tag&gt;::__assign_one&lt;ns3::DlInfoListElement_s::HarqStatus_e, ns3::DlInfoListElement_s::HarqStatus_e const&gt; (390,278 samples, 0.04%)</title><rect x="260.2" y="245" width="0.3" height="15.0" fill="rgb(234,133,31)" rx="2" ry="2" />
+<text  x="263.20" y="255.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt;::_M_create_storage (329,313 samples, 0.03%)</title><rect x="583.9" y="229" width="0.2" height="15.0" fill="rgb(244,180,43)" rx="2" ry="2" />
+<text  x="586.86" y="239.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::~list (191,802 samples, 0.02%)</title><rect x="344.3" y="437" width="0.1" height="15.0" fill="rgb(222,80,19)" rx="2" ry="2" />
+<text  x="347.27" y="447.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt;::deallocate (124,394 samples, 0.01%)</title><rect x="776.2" y="325" width="0.1" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="779.16" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::ByteTagList::Allocate (1,800,803 samples, 0.19%)</title><rect x="29.5" y="389" width="1.4" height="15.0" fill="rgb(225,95,22)" rx="2" ry="2" />
+<text  x="32.50" y="399.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;::_List_impl::_List_impl (831,229 samples, 0.09%)</title><rect x="285.4" y="501" width="0.7" height="15.0" fill="rgb(239,159,38)" rx="2" ry="2" />
+<text  x="288.43" y="511.5" ></text>
+</g>
+<g >
+<title>std::tuple&lt;ns3::LteEnbPhy*, ns3::Ptr&lt;ns3::PacketBurst&gt; &gt;::tuple&lt;ns3::LteEnbPhy*&amp;, ns3::Ptr&lt;ns3::PacketBurst&gt;&amp;, true&gt; (929,346 samples, 0.10%)</title><rect x="282.0" y="469" width="0.8" height="15.0" fill="rgb(232,126,30)" rx="2" ry="2" />
+<text  x="285.01" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;0ul, ns3::LteInterference*, ns3::Ptr&lt;ns3::SpectrumValue const&gt;, unsigned int&gt;::~_Tuple_impl (448,944 samples, 0.05%)</title><rect x="708.4" y="437" width="0.4" height="15.0" fill="rgb(248,202,48)" rx="2" ry="2" />
+<text  x="711.43" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_Rb_tree (400,356 samples, 0.04%)</title><rect x="232.5" y="453" width="0.3" height="15.0" fill="rgb(223,86,20)" rx="2" ry="2" />
+<text  x="235.50" y="463.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;ns3::DlInfoListElement_s&gt;::allocate (265,191 samples, 0.03%)</title><rect x="262.0" y="437" width="0.2" height="15.0" fill="rgb(243,175,41)" rx="2" ry="2" />
+<text  x="265.02" y="447.5" ></text>
+</g>
+<g >
+<title>std::tuple&lt;ns3::LteSpectrumPhy*&gt;::tuple (285,575 samples, 0.03%)</title><rect x="64.1" y="421" width="0.2" height="15.0" fill="rgb(217,55,13)" rx="2" ry="2" />
+<text  x="67.11" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::FfMacSchedSapProvider::SchedDlTriggerReqParameters::~SchedDlTriggerReqParameters (1,122,238 samples, 0.12%)</title><rect x="132.2" y="517" width="0.9" height="15.0" fill="rgb(233,132,31)" rx="2" ry="2" />
+<text  x="135.24" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;::operator* (316,524 samples, 0.03%)</title><rect x="272.8" y="469" width="0.3" height="15.0" fill="rgb(233,132,31)" rx="2" ry="2" />
+<text  x="275.83" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, unsigned int&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt; &gt;::_M_mbegin (159,315 samples, 0.02%)</title><rect x="172.4" y="405" width="0.1" height="15.0" fill="rgb(239,159,38)" rx="2" ry="2" />
+<text  x="175.37" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy::StartSubFrame (415,834 samples, 0.04%)</title><rect x="15.5" y="549" width="0.3" height="15.0" fill="rgb(234,136,32)" rx="2" ry="2" />
+<text  x="18.45" y="559.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;is_invocable_r_v&lt;void, ns3::Callback&lt;void, std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt;::Callback&lt;void  (28,232,039 samples, 2.91%)</title><rect x="441.2" y="485" width="22.7" height="15.0" fill="rgb(235,139,33)" rx="2" ry="2" />
+<text  x="444.23" y="495.5" >s..</text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt;::_M_lower_bound (1,144,795 samples, 0.12%)</title><rect x="168.4" y="421" width="0.9" height="15.0" fill="rgb(240,162,38)" rx="2" ry="2" />
+<text  x="171.38" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; std::map&lt;ns3::TbId_t, ns3::tbInfo_t, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::emplace_hint&lt;std::pair&lt;ns3::TbId_t, ns3::tbInfo_t&gt; &gt; (143,473 samples, 0.01%)</title><rect x="120.3" y="501" width="0.1" height="15.0" fill="rgb(245,186,44)" rx="2" ry="2" />
+<text  x="123.30" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Bind&lt;void  (782,663 samples, 0.08%)</title><rect x="667.3" y="421" width="0.7" height="15.0" fill="rgb(253,221,52)" rx="2" ry="2" />
+<text  x="670.32" y="431.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt;::_M_erase (1,544,641 samples, 0.16%)</title><rect x="356.9" y="517" width="1.3" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="359.94" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt; &gt;::_M_valptr (234,452 samples, 0.02%)</title><rect x="297.6" y="437" width="0.2" height="15.0" fill="rgb(222,81,19)" rx="2" ry="2" />
+<text  x="300.59" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::LteRlcSpecificLteMacSapUser::NotifyTxOpportunity (4,972,136 samples, 0.51%)</title><rect x="11.4" y="437" width="4.0" height="15.0" fill="rgb(249,204,48)" rx="2" ry="2" />
+<text  x="14.43" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::EnbMemberLteEnbPhySapProvider::SendMacPdu (783,721 samples, 0.08%)</title><rect x="19.7" y="357" width="0.6" height="15.0" fill="rgb(254,229,54)" rx="2" ry="2" />
+<text  x="22.70" y="367.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, unsigned int, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt; &gt;::find (1,203,918 samples, 0.12%)</title><rect x="136.8" y="485" width="0.9" height="15.0" fill="rgb(239,156,37)" rx="2" ry="2" />
+<text  x="139.78" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::Ptr&lt;ns3::Object&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Object&gt; &gt; &gt;::_Vector_impl_data::_Vector_impl_data (154,775 samples, 0.02%)</title><rect x="366.2" y="421" width="0.2" height="15.0" fill="rgb(231,123,29)" rx="2" ry="2" />
+<text  x="369.23" y="431.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::clear (3,285,580 samples, 0.34%)</title><rect x="451.3" y="229" width="2.6" height="15.0" fill="rgb(217,58,13)" rx="2" ry="2" />
+<text  x="454.28" y="239.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::vector (775,418 samples, 0.08%)</title><rect x="442.0" y="309" width="0.6" height="15.0" fill="rgb(206,9,2)" rx="2" ry="2" />
+<text  x="444.97" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::NixVector&gt;::Ptr (395,681 samples, 0.04%)</title><rect x="625.0" y="485" width="0.3" height="15.0" fill="rgb(248,201,48)" rx="2" ry="2" />
+<text  x="628.02" y="495.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__enable_if&lt;std::__is_byte&lt;unsigned char&gt;::__value, void&gt;::__type std::__fill_a1&lt;unsigned char&gt; (464,806 samples, 0.05%)</title><rect x="460.6" y="149" width="0.3" height="15.0" fill="rgb(222,82,19)" rx="2" ry="2" />
+<text  x="463.56" y="159.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::DoDispose (262,214 samples, 0.03%)</title><rect x="634.7" y="357" width="0.2" height="15.0" fill="rgb(242,172,41)" rx="2" ry="2" />
+<text  x="637.67" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::operator/= (127,965 samples, 0.01%)</title><rect x="601.3" y="325" width="0.1" height="15.0" fill="rgb(239,160,38)" rx="2" ry="2" />
+<text  x="604.34" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumPhy&gt;::Acquire (282,880 samples, 0.03%)</title><rect x="345.6" y="485" width="0.2" height="15.0" fill="rgb(228,110,26)" rx="2" ry="2" />
+<text  x="348.62" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt;::operator (236,363 samples, 0.02%)</title><rect x="375.3" y="533" width="0.2" height="15.0" fill="rgb(213,38,9)" rx="2" ry="2" />
+<text  x="378.34" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;1ul, ns3::Ptr&lt;ns3::SpectrumValue&gt;, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::~_Tuple_impl (4,562,243 samples, 0.47%)</title><rect x="773.6" y="533" width="3.6" height="15.0" fill="rgb(242,172,41)" rx="2" ry="2" />
+<text  x="776.56" y="543.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::MacCeListElement_s, std::allocator&lt;ns3::MacCeListElement_s&gt; &gt;::_M_check_len (366,216 samples, 0.04%)</title><rect x="130.1" y="485" width="0.3" height="15.0" fill="rgb(233,130,31)" rx="2" ry="2" />
+<text  x="133.09" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::TracedCallback&lt;ns3::Ptr&lt;ns3::PacketBurst const&gt; &gt;::operator (284,159 samples, 0.03%)</title><rect x="90.4" y="533" width="0.2" height="15.0" fill="rgb(231,121,28)" rx="2" ry="2" />
+<text  x="93.38" y="543.5" ></text>
+</g>
+<g >
+<title>std::remove_reference&lt;std::_Vector_base&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_Vector_impl&amp;&gt;::type&amp;&amp; std::move&lt;std::_Vector_base&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_Vector_impl&amp;&gt; (130,561 samples, 0.01%)</title><rect x="596.0" y="101" width="0.1" height="15.0" fill="rgb(238,152,36)" rx="2" ry="2" />
+<text  x="598.96" y="111.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; &gt; &gt;::_S_key (474,607 samples, 0.05%)</title><rect x="465.7" y="485" width="0.4" height="15.0" fill="rgb(210,26,6)" rx="2" ry="2" />
+<text  x="468.74" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;signed char, std::allocator&lt;signed char&gt; &gt;::_M_erase (208,683 samples, 0.02%)</title><rect x="532.5" y="325" width="0.1" height="15.0" fill="rgb(211,28,6)" rx="2" ry="2" />
+<text  x="535.46" y="335.5" ></text>
+</g>
+<g >
+<title>std::_List_iterator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt;::_List_iterator (190,641 samples, 0.02%)</title><rect x="362.1" y="469" width="0.2" height="15.0" fill="rgb(231,119,28)" rx="2" ry="2" />
+<text  x="365.15" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;5ul, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::_Tuple_impl&lt;std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;&amp;&gt; (163,911 samples, 0.02%)</title><rect x="87.5" y="341" width="0.1" height="15.0" fill="rgb(219,68,16)" rx="2" ry="2" />
+<text  x="90.46" y="351.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;1ul, ns3::Ptr&lt;ns3::SpectrumValue&gt;, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::_Tuple_impl&lt;ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp;, double&amp;, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;&amp;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;&amp;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;&amp;, void&gt; (206,637 samples, 0.02%)</title><rect x="87.4" y="405" width="0.2" height="15.0" fill="rgb(237,151,36)" rx="2" ry="2" />
+<text  x="90.42" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::SpectrumValue, ns3::Empty, ns3::DefaultDeleter&lt;ns3::SpectrumValue&gt; &gt;::Unref (470,391 samples, 0.05%)</title><rect x="717.5" y="485" width="0.4" height="15.0" fill="rgb(246,189,45)" rx="2" ry="2" />
+<text  x="720.55" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;int const, double&gt; &gt; std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_M_emplace_hint_unique&lt;std::pair&lt;int, double&gt; &gt; (1,269,252 samples, 0.13%)</title><rect x="293.1" y="501" width="1.0" height="15.0" fill="rgb(237,149,35)" rx="2" ry="2" />
+<text  x="296.09" y="511.5" ></text>
+</g>
+<g >
+<title>std::tuple_element&lt;2ul, std::tuple&lt;ns3::MultiModelSpectrumChannel*, ns3::Ptr&lt;ns3::SpectrumValue&gt;, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt; &gt;::type&amp; std::get&lt;2ul, ns3::MultiModelSpectrumChannel*, ns3::Ptr&lt;ns3::SpectrumValue&gt;, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt; (473,819 samples, 0.05%)</title><rect x="756.5" y="597" width="0.4" height="15.0" fill="rgb(231,122,29)" rx="2" ry="2" />
+<text  x="759.55" y="607.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, unsigned char*&gt; (292,785 samples, 0.03%)</title><rect x="584.9" y="197" width="0.2" height="15.0" fill="rgb(254,229,54)" rx="2" ry="2" />
+<text  x="587.88" y="207.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::~_Vector_base (167,250 samples, 0.02%)</title><rect x="605.4" y="485" width="0.1" height="15.0" fill="rgb(223,86,20)" rx="2" ry="2" />
+<text  x="608.40" y="495.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;ns3::LteFlowId_t const, ns3::FfMacSchedSapProvider::SchedDlRlcBufferReqParameters&gt; &gt;::_M_ptr (151,492 samples, 0.02%)</title><rect x="182.0" y="389" width="0.1" height="15.0" fill="rgb(228,109,26)" rx="2" ry="2" />
+<text  x="185.02" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::~PacketBurst (3,267,652 samples, 0.34%)</title><rect x="378.7" y="357" width="2.6" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="381.69" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::HigherLayerSelected_s* std::__copy_move&lt;false, false, std::random_access_iterator_tag&gt;::__copy_m&lt;ns3::HigherLayerSelected_s const*, ns3::HigherLayerSelected_s*&gt; (193,644 samples, 0.02%)</title><rect x="134.9" y="389" width="0.1" height="15.0" fill="rgb(220,70,16)" rx="2" ry="2" />
+<text  x="137.86" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::Time::ToDouble (693,056 samples, 0.07%)</title><rect x="605.6" y="501" width="0.5" height="15.0" fill="rgb(249,204,48)" rx="2" ry="2" />
+<text  x="608.57" y="511.5" ></text>
+</g>
+<g >
+<title>int&amp; std::forward&lt;int&amp;&gt; (154,940 samples, 0.02%)</title><rect x="296.3" y="517" width="0.1" height="15.0" fill="rgb(223,85,20)" rx="2" ry="2" />
+<text  x="299.29" y="527.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::vector (158,373 samples, 0.02%)</title><rect x="203.4" y="389" width="0.1" height="15.0" fill="rgb(206,9,2)" rx="2" ry="2" />
+<text  x="206.35" y="399.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;unsigned short&gt;::_M_ptr (275,914 samples, 0.03%)</title><rect x="395.6" y="469" width="0.2" height="15.0" fill="rgb(217,56,13)" rx="2" ry="2" />
+<text  x="398.59" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::tbInfo_t::tbInfo_t (509,350 samples, 0.05%)</title><rect x="384.9" y="389" width="0.4" height="15.0" fill="rgb(224,91,21)" rx="2" ry="2" />
+<text  x="387.91" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::TbId_t, std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::_Select1st&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::_M_erase (1,924,737 samples, 0.20%)</title><rect x="505.1" y="517" width="1.6" height="15.0" fill="rgb(224,87,21)" rx="2" ry="2" />
+<text  x="508.14" y="527.5" ></text>
+</g>
+<g >
+<title>unsigned long* std::__copy_move_a&lt;false, unsigned long*, unsigned long*&gt; (190,049 samples, 0.02%)</title><rect x="248.3" y="405" width="0.2" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="251.33" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::LteUeMac::DoSubframeIndication (16,576,198 samples, 1.71%)</title><rect x="684.3" y="533" width="13.4" height="15.0" fill="rgb(236,144,34)" rx="2" ry="2" />
+<text  x="687.33" y="543.5" ></text>
+</g>
+<g >
+<title>void ns3::Callback&lt;void, ns3::DlInfoListElement_s&gt;::Callback&lt;void  (3,542,887 samples, 0.37%)</title><rect x="418.5" y="453" width="2.9" height="15.0" fill="rgb(242,174,41)" rx="2" ry="2" />
+<text  x="421.54" y="463.5" ></text>
+</g>
+<g >
+<title>bool __gnu_cxx::operator==&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; (229,110 samples, 0.02%)</title><rect x="477.6" y="309" width="0.2" height="15.0" fill="rgb(239,159,38)" rx="2" ry="2" />
+<text  x="480.60" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::EventImpl&gt;::~Ptr (390,370 samples, 0.04%)</title><rect x="39.7" y="709" width="0.4" height="15.0" fill="rgb(225,92,22)" rx="2" ry="2" />
+<text  x="42.74" y="719.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt;* std::__copy_move&lt;true, false, std::random_access_iterator_tag&gt;::__copy_m&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;*, ns3::Ptr&lt;ns3::PacketBurst&gt;*&gt; (458,200 samples, 0.05%)</title><rect x="119.8" y="421" width="0.4" height="15.0" fill="rgb(212,33,7)" rx="2" ry="2" />
+<text  x="122.80" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::CqiListElement_s::~CqiListElement_s (377,731 samples, 0.04%)</title><rect x="106.8" y="373" width="0.3" height="15.0" fill="rgb(225,92,22)" rx="2" ry="2" />
+<text  x="109.80" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, unsigned int&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt; &gt;::clear (355,870 samples, 0.04%)</title><rect x="172.2" y="437" width="0.3" height="15.0" fill="rgb(205,3,0)" rx="2" ry="2" />
+<text  x="175.25" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt; &gt;::_M_lower_bound (725,002 samples, 0.07%)</title><rect x="241.8" y="453" width="0.6" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="244.78" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapProvider::ReportBufferStatusParameters&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider::ReportBufferStatusParameters&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider::ReportBufferStatusParameters&gt; &gt; &gt;::find (1,345,383 samples, 0.14%)</title><rect x="569.9" y="309" width="1.1" height="15.0" fill="rgb(236,144,34)" rx="2" ry="2" />
+<text  x="572.92" y="319.5" ></text>
+</g>
+<g >
+<title>std::__invoke_result&lt;ns3::MakeEvent&lt;&gt; (238,924 samples, 0.02%)</title><rect x="36.6" y="677" width="0.2" height="15.0" fill="rgb(242,172,41)" rx="2" ry="2" />
+<text  x="39.64" y="687.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::Packet, ns3::Empty, ns3::DefaultDeleter&lt;ns3::Packet&gt; &gt;::Unref (161,302 samples, 0.02%)</title><rect x="368.9" y="501" width="0.1" height="15.0" fill="rgb(215,47,11)" rx="2" ry="2" />
+<text  x="371.86" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;::_M_valptr (352,479 samples, 0.04%)</title><rect x="496.9" y="533" width="0.2" height="15.0" fill="rgb(218,62,14)" rx="2" ry="2" />
+<text  x="499.86" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::DlDciListElement_s::DlDciListElement_s (500,791 samples, 0.05%)</title><rect x="203.3" y="405" width="0.4" height="15.0" fill="rgb(233,129,30)" rx="2" ry="2" />
+<text  x="206.32" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned int, std::allocator&lt;unsigned int&gt; &gt;::_Vector_base (447,425 samples, 0.05%)</title><rect x="695.0" y="485" width="0.4" height="15.0" fill="rgb(227,105,25)" rx="2" ry="2" />
+<text  x="698.01" y="495.5" ></text>
+</g>
+<g >
+<title>operator delete[] (204,130 samples, 0.02%)</title><rect x="548.7" y="69" width="0.1" height="15.0" fill="rgb(208,18,4)" rx="2" ry="2" />
+<text  x="551.68" y="79.5" ></text>
+</g>
+<g >
+<title>std::map&lt;ns3::Scheduler::EventKey, ns3::EventImpl*, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::lower_bound (1,750,547 samples, 0.18%)</title><rect x="662.9" y="437" width="1.4" height="15.0" fill="rgb(238,153,36)" rx="2" ry="2" />
+<text  x="665.93" y="447.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::__copy_move_a1&lt;false, unsigned char const*, unsigned char*&gt; (185,651 samples, 0.02%)</title><rect x="127.2" y="293" width="0.1" height="15.0" fill="rgb(215,50,12)" rx="2" ry="2" />
+<text  x="130.15" y="303.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;ns3::TbId_t, ns3::tbInfo_t&gt;::pair&lt;ns3::TbId_t&amp;, ns3::tbInfo_t&amp;&gt; (217,947 samples, 0.02%)</title><rect x="387.2" y="533" width="0.2" height="15.0" fill="rgb(249,202,48)" rx="2" ry="2" />
+<text  x="390.24" y="543.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; (507,555 samples, 0.05%)</title><rect x="719.2" y="437" width="0.4" height="15.0" fill="rgb(212,35,8)" rx="2" ry="2" />
+<text  x="722.22" y="447.5" ></text>
+</g>
+<g >
+<title>unsigned int const&amp; std::max&lt;unsigned int&gt; (238,645 samples, 0.02%)</title><rect x="547.7" y="85" width="0.2" height="15.0" fill="rgb(249,206,49)" rx="2" ry="2" />
+<text  x="550.73" y="95.5" ></text>
+</g>
+<g >
+<title>std::set&lt;unsigned short, std::less&lt;unsigned short&gt;, std::allocator&lt;unsigned short&gt; &gt;::find (495,883 samples, 0.05%)</title><rect x="245.9" y="485" width="0.4" height="15.0" fill="rgb(207,12,2)" rx="2" ry="2" />
+<text  x="248.88" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Ptr&lt;ns3::Object&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Object&gt; &gt; &gt;::vector (350,110 samples, 0.04%)</title><rect x="629.5" y="485" width="0.3" height="15.0" fill="rgb(237,147,35)" rx="2" ry="2" />
+<text  x="632.51" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::CallbackImpl&lt;void, ns3::DlInfoListElement_s&gt;::operator (4,219,650 samples, 0.44%)</title><rect x="418.0" y="533" width="3.4" height="15.0" fill="rgb(240,163,39)" rx="2" ry="2" />
+<text  x="421.00" y="543.5" ></text>
+</g>
+<g >
+<title>void std::_Rb_tree&lt;ns3::TbId_t, std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::_Select1st&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::_M_construct_node&lt;std::pair&lt;ns3::TbId_t, ns3::tbInfo_t&gt; &gt; (1,227,522 samples, 0.13%)</title><rect x="526.6" y="261" width="1.0" height="15.0" fill="rgb(243,177,42)" rx="2" ry="2" />
+<text  x="529.62" y="271.5" ></text>
+</g>
+<g >
+<title>std::function&lt;void  (324,769 samples, 0.03%)</title><rect x="611.9" y="405" width="0.3" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="614.94" y="415.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;::_M_ptr (192,658 samples, 0.02%)</title><rect x="733.8" y="405" width="0.1" height="15.0" fill="rgb(207,12,3)" rx="2" ry="2" />
+<text  x="736.76" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::Buffer::Recycle (663,612 samples, 0.07%)</title><rect x="452.0" y="85" width="0.5" height="15.0" fill="rgb(250,207,49)" rx="2" ry="2" />
+<text  x="455.02" y="95.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_M_erase (704,923 samples, 0.07%)</title><rect x="233.1" y="421" width="0.6" height="15.0" fill="rgb(219,64,15)" rx="2" ry="2" />
+<text  x="236.11" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_Auto_node::_M_insert (391,675 samples, 0.04%)</title><rect x="271.5" y="437" width="0.4" height="15.0" fill="rgb(213,38,9)" rx="2" ry="2" />
+<text  x="274.55" y="447.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;int&gt;::allocate (127,251 samples, 0.01%)</title><rect x="573.4" y="309" width="0.1" height="15.0" fill="rgb(235,139,33)" rx="2" ry="2" />
+<text  x="576.38" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::HigherLayerSelected_s::HigherLayerSelected_s (323,441 samples, 0.03%)</title><rect x="596.3" y="229" width="0.3" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="599.30" y="239.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned short const, std::vector&lt;ns3::DlDciListElement_s, std::allocator&lt;ns3::DlDciListElement_s&gt; &gt; &gt; &gt;::_M_addr (155,689 samples, 0.02%)</title><rect x="184.0" y="437" width="0.1" height="15.0" fill="rgb(233,128,30)" rx="2" ry="2" />
+<text  x="187.01" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s* std::__do_uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::DlInfoListElement_s const*, std::vector&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt; &gt;, ns3::DlInfoListElement_s*&gt; (411,592 samples, 0.04%)</title><rect x="107.3" y="421" width="0.3" height="15.0" fill="rgb(217,58,13)" rx="2" ry="2" />
+<text  x="110.29" y="431.5" ></text>
+</g>
+<g >
+<title>decltype  (240,540 samples, 0.02%)</title><rect x="83.3" y="341" width="0.2" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="86.31" y="351.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt;::_M_valptr (221,148 samples, 0.02%)</title><rect x="650.6" y="437" width="0.2" height="15.0" fill="rgb(220,69,16)" rx="2" ry="2" />
+<text  x="653.60" y="447.5" ></text>
+</g>
+<g >
+<title>void std::_Function_base::_Base_manager&lt;std::_Bind&lt;void  (411,266 samples, 0.04%)</title><rect x="87.6" y="453" width="0.4" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="90.62" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::_M_emplace_hint_unique&lt;std::piecewise_construct_t const&amp;, std::tuple&lt;unsigned short const&amp;&gt;, std::tuple&lt;&gt; &gt; (299,849 samples, 0.03%)</title><rect x="105.1" y="453" width="0.2" height="15.0" fill="rgb(213,37,8)" rx="2" ry="2" />
+<text  x="108.07" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::EventImpl&gt;::operator= (572,810 samples, 0.06%)</title><rect x="64.5" y="517" width="0.4" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="67.47" y="527.5" ></text>
+</g>
+<g >
+<title>__cxxabiv1::__si_class_type_info::__do_dyncast (128,525 samples, 0.01%)</title><rect x="90.0" y="501" width="0.1" height="15.0" fill="rgb(219,65,15)" rx="2" ry="2" />
+<text  x="93.02" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::PacketTagList::Add (190,338 samples, 0.02%)</title><rect x="17.2" y="325" width="0.2" height="15.0" fill="rgb(248,197,47)" rx="2" ry="2" />
+<text  x="20.23" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::TracedCallback&lt;ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt; &gt;::operator (312,772 samples, 0.03%)</title><rect x="656.5" y="517" width="0.3" height="15.0" fill="rgb(228,106,25)" rx="2" ry="2" />
+<text  x="659.52" y="527.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;*, std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; std::move&lt;__gnu_cxx::__normal_iterator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;*, std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;*, std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; (6,507,760 samples, 0.67%)</title><rect x="376.6" y="501" width="5.3" height="15.0" fill="rgb(211,30,7)" rx="2" ry="2" />
+<text  x="379.63" y="511.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::at (645,472 samples, 0.07%)</title><rect x="488.3" y="517" width="0.6" height="15.0" fill="rgb(247,196,47)" rx="2" ry="2" />
+<text  x="491.33" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_key_compare&lt;std::less&lt;unsigned short&gt; &gt;::_Rb_tree_key_compare (234,753 samples, 0.02%)</title><rect x="509.2" y="501" width="0.2" height="15.0" fill="rgb(217,58,13)" rx="2" ry="2" />
+<text  x="512.22" y="511.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_initialize_dispatch&lt;std::_List_const_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; (1,438,361 samples, 0.15%)</title><rect x="732.9" y="453" width="1.1" height="15.0" fill="rgb(215,50,12)" rx="2" ry="2" />
+<text  x="735.88" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::HarqStatus_e* std::copy&lt;std::move_iterator&lt;ns3::DlInfoListElement_s::HarqStatus_e*&gt;, ns3::DlInfoListElement_s::HarqStatus_e*&gt; (267,517 samples, 0.03%)</title><rect x="511.4" y="453" width="0.2" height="15.0" fill="rgb(218,63,15)" rx="2" ry="2" />
+<text  x="514.40" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::UniformRandomVariable::GetValue (789,202 samples, 0.08%)</title><rect x="495.3" y="533" width="0.6" height="15.0" fill="rgb(238,152,36)" rx="2" ry="2" />
+<text  x="498.29" y="543.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::clear (265,487 samples, 0.03%)</title><rect x="622.2" y="389" width="0.2" height="15.0" fill="rgb(252,216,51)" rx="2" ry="2" />
+<text  x="625.22" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::MacCeValue_u::MacCeValue_u (858,457 samples, 0.09%)</title><rect x="441.9" y="325" width="0.7" height="15.0" fill="rgb(219,65,15)" rx="2" ry="2" />
+<text  x="444.90" y="335.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_initialize_dispatch&lt;std::_List_const_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; (216,051 samples, 0.02%)</title><rect x="697.8" y="533" width="0.2" height="15.0" fill="rgb(215,50,12)" rx="2" ry="2" />
+<text  x="700.79" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt; ns3::CompleteConstruct&lt;ns3::PacketBurst&gt; (2,140,117 samples, 0.22%)</title><rect x="162.2" y="437" width="1.8" height="15.0" fill="rgb(212,33,7)" rx="2" ry="2" />
+<text  x="165.24" y="447.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::clear (154,782 samples, 0.02%)</title><rect x="164.5" y="373" width="0.1" height="15.0" fill="rgb(217,58,13)" rx="2" ry="2" />
+<text  x="167.51" y="383.5" ></text>
+</g>
+<g >
+<title> (124,340 samples, 0.01%)</title><rect x="457.9" y="261" width="0.1" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="460.85" y="271.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::~vector (241,102 samples, 0.02%)</title><rect x="717.7" y="437" width="0.2" height="15.0" fill="rgb(225,92,22)" rx="2" ry="2" />
+<text  x="720.73" y="447.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt;::_S_relocate (199,707 samples, 0.02%)</title><rect x="211.5" y="453" width="0.2" height="15.0" fill="rgb(237,150,35)" rx="2" ry="2" />
+<text  x="214.55" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::HarqProcessInfoElement_t* std::__copy_move&lt;false, true, std::random_access_iterator_tag&gt;::__copy_m&lt;ns3::HarqProcessInfoElement_t const, ns3::HarqProcessInfoElement_t&gt; (368,034 samples, 0.04%)</title><rect x="513.2" y="421" width="0.3" height="15.0" fill="rgb(248,202,48)" rx="2" ry="2" />
+<text  x="516.18" y="431.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::CqiListElement_s&gt; (933,761 samples, 0.10%)</title><rect x="255.0" y="421" width="0.7" height="15.0" fill="rgb(241,165,39)" rx="2" ry="2" />
+<text  x="257.97" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::LteInterference::EndRx (23,269,983 samples, 2.40%)</title><rect x="466.9" y="549" width="18.7" height="15.0" fill="rgb(208,17,4)" rx="2" ry="2" />
+<text  x="469.86" y="559.5" ></text>
+</g>
+<g >
+<title>void std::vector&lt;int, std::allocator&lt;int&gt; &gt;::_M_realloc_insert&lt;int const&amp;&gt; (336,155 samples, 0.03%)</title><rect x="591.2" y="261" width="0.3" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="594.19" y="271.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;int const, double&gt; &gt; &gt; &gt;::allocate (199,176 samples, 0.02%)</title><rect x="293.2" y="437" width="0.1" height="15.0" fill="rgb(239,157,37)" rx="2" ry="2" />
+<text  x="296.16" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultDeleter&lt;ns3::SpectrumValue&gt;::Delete (392,749 samples, 0.04%)</title><rect x="716.7" y="453" width="0.3" height="15.0" fill="rgb(222,79,19)" rx="2" ry="2" />
+<text  x="719.67" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_M_erase (231,712 samples, 0.02%)</title><rect x="103.9" y="421" width="0.2" height="15.0" fill="rgb(219,64,15)" rx="2" ry="2" />
+<text  x="106.93" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_S_key (429,986 samples, 0.04%)</title><rect x="57.9" y="453" width="0.3" height="15.0" fill="rgb(224,87,20)" rx="2" ry="2" />
+<text  x="60.90" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumPhy::StartTxDlCtrlFrame (52,866,048 samples, 5.45%)</title><rect x="304.5" y="533" width="42.5" height="15.0" fill="rgb(230,118,28)" rx="2" ry="2" />
+<text  x="307.51" y="543.5" >ns3:..</text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::push_back (263,413 samples, 0.03%)</title><rect x="121.9" y="533" width="0.2" height="15.0" fill="rgb(225,94,22)" rx="2" ry="2" />
+<text  x="124.91" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt; &gt;::end (149,904 samples, 0.02%)</title><rect x="322.4" y="453" width="0.2" height="15.0" fill="rgb(218,60,14)" rx="2" ry="2" />
+<text  x="325.44" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::RlcPduListElement_s* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;ns3::RlcPduListElement_s const*, std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt;, ns3::RlcPduListElement_s*, ns3::RlcPduListElement_s&gt; (1,020,771 samples, 0.11%)</title><rect x="211.8" y="405" width="0.8" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="214.81" y="415.5" ></text>
+</g>
+<g >
+<title> (353,348 samples, 0.04%)</title><rect x="717.2" y="485" width="0.3" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="720.23" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned int const, ns3::RxSpectrumModelInfo&gt; &gt;::_M_valptr (415,198 samples, 0.04%)</title><rect x="328.8" y="469" width="0.3" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="331.78" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::EventImpl&gt;::Acquire (195,822 samples, 0.02%)</title><rect x="305.5" y="453" width="0.2" height="15.0" fill="rgb(229,112,26)" rx="2" ry="2" />
+<text  x="308.50" y="463.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Callback&lt;void, unsigned short, unsigned short, double&gt;, std::allocator&lt;ns3::Callback&lt;void, unsigned short, unsigned short, double&gt; &gt; &gt;::begin (274,474 samples, 0.03%)</title><rect x="682.1" y="517" width="0.3" height="15.0" fill="rgb(209,22,5)" rx="2" ry="2" />
+<text  x="685.13" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt; &gt; &gt;::_S_key (775,617 samples, 0.08%)</title><rect x="158.1" y="357" width="0.6" height="15.0" fill="rgb(222,81,19)" rx="2" ry="2" />
+<text  x="161.11" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumPhy&gt;::Ptr (359,569 samples, 0.04%)</title><rect x="345.6" y="501" width="0.2" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="348.56" y="511.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::DlDciListElement_s, std::allocator&lt;ns3::DlDciListElement_s&gt; &gt;::at (514,866 samples, 0.05%)</title><rect x="205.3" y="485" width="0.4" height="15.0" fill="rgb(210,26,6)" rx="2" ry="2" />
+<text  x="208.32" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Bind&lt;void  (1,733,420 samples, 0.18%)</title><rect x="708.8" y="453" width="1.4" height="15.0" fill="rgb(253,221,52)" rx="2" ry="2" />
+<text  x="711.85" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::SpectrumValue (152,703 samples, 0.02%)</title><rect x="481.5" y="309" width="0.1" height="15.0" fill="rgb(211,27,6)" rx="2" ry="2" />
+<text  x="484.49" y="319.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; std::copy&lt;__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; (307,652 samples, 0.03%)</title><rect x="114.0" y="373" width="0.3" height="15.0" fill="rgb(249,204,48)" rx="2" ry="2" />
+<text  x="117.02" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Function_handler&lt;void  (19,740,362 samples, 2.04%)</title><rect x="467.9" y="469" width="15.9" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="470.90" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::NoOpComponentCarrierManager::DoNotifyTxOpportunity (4,972,136 samples, 0.51%)</title><rect x="11.4" y="453" width="4.0" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="14.43" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue&gt;::operator= (512,892 samples, 0.05%)</title><rect x="717.5" y="501" width="0.4" height="15.0" fill="rgb(220,71,17)" rx="2" ry="2" />
+<text  x="720.51" y="511.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt;::at (139,701 samples, 0.01%)</title><rect x="464.7" y="533" width="0.1" height="15.0" fill="rgb(251,215,51)" rx="2" ry="2" />
+<text  x="467.70" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapProvider::ReportBufferStatusParameters&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider::ReportBufferStatusParameters&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider::ReportBufferStatusParameters&gt; &gt; &gt;::_M_begin (234,350 samples, 0.02%)</title><rect x="570.0" y="293" width="0.2" height="15.0" fill="rgb(215,49,11)" rx="2" ry="2" />
+<text  x="572.98" y="303.5" ></text>
+</g>
+<g >
+<title>std::operator== (210,233 samples, 0.02%)</title><rect x="80.2" y="501" width="0.2" height="15.0" fill="rgb(229,110,26)" rx="2" ry="2" />
+<text  x="83.24" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::Ptr&lt;ns3::Object&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Object&gt; &gt; &gt;::_Vector_base (420,986 samples, 0.04%)</title><rect x="447.0" y="245" width="0.3" height="15.0" fill="rgb(235,141,33)" rx="2" ry="2" />
+<text  x="449.99" y="255.5" ></text>
+</g>
+<g >
+<title>double* std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, double*&gt; (456,050 samples, 0.05%)</title><rect x="238.7" y="213" width="0.3" height="15.0" fill="rgb(210,23,5)" rx="2" ry="2" />
+<text  x="241.66" y="223.5" ></text>
+</g>
+<g >
+<title>void std::destroy_at&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; (1,191,133 samples, 0.12%)</title><rect x="75.7" y="309" width="1.0" height="15.0" fill="rgb(224,88,21)" rx="2" ry="2" />
+<text  x="78.74" y="319.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;ns3::ByteTagListData*&gt; &gt;::destroy&lt;ns3::ByteTagListData*&gt; (350,982 samples, 0.04%)</title><rect x="30.7" y="357" width="0.2" height="15.0" fill="rgb(216,54,13)" rx="2" ry="2" />
+<text  x="33.67" y="367.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Callback&lt;void, unsigned short, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::allocator&lt;ns3::Callback&lt;void, unsigned short, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::end (207,421 samples, 0.02%)</title><rect x="482.0" y="309" width="0.2" height="15.0" fill="rgb(254,226,54)" rx="2" ry="2" />
+<text  x="485.03" y="319.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::ByteTagListData*, std::allocator&lt;ns3::ByteTagListData*&gt; &gt;::empty (455,493 samples, 0.05%)</title><rect x="554.0" y="213" width="0.3" height="15.0" fill="rgb(236,144,34)" rx="2" ry="2" />
+<text  x="556.98" y="223.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Callback&lt;void, unsigned short, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::allocator&lt;ns3::Callback&lt;void, unsigned short, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::begin (189,841 samples, 0.02%)</title><rect x="679.5" y="501" width="0.2" height="15.0" fill="rgb(223,85,20)" rx="2" ry="2" />
+<text  x="682.51" y="511.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;::__normal_iterator (229,352 samples, 0.02%)</title><rect x="687.5" y="437" width="0.2" height="15.0" fill="rgb(226,99,23)" rx="2" ry="2" />
+<text  x="690.51" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::TracedCallback&lt;unsigned short, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;::operator (538,849 samples, 0.06%)</title><rect x="679.4" y="517" width="0.4" height="15.0" fill="rgb(221,76,18)" rx="2" ry="2" />
+<text  x="682.35" y="527.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::_M_get_node (655,781 samples, 0.07%)</title><rect x="563.7" y="133" width="0.5" height="15.0" fill="rgb(212,36,8)" rx="2" ry="2" />
+<text  x="566.67" y="143.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_M_insert_node (196,868 samples, 0.02%)</title><rect x="293.5" y="469" width="0.2" height="15.0" fill="rgb(228,107,25)" rx="2" ry="2" />
+<text  x="296.53" y="479.5" ></text>
+</g>
+<g >
+<title>double* std::copy&lt;__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, double*&gt; (165,918 samples, 0.02%)</title><rect x="78.3" y="421" width="0.2" height="15.0" fill="rgb(246,192,46)" rx="2" ry="2" />
+<text  x="81.32" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_M_copy (4,538,330 samples, 0.47%)</title><rect x="236.8" y="453" width="3.6" height="15.0" fill="rgb(218,60,14)" rx="2" ry="2" />
+<text  x="239.76" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;* std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_M_copy&lt;false, std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_Alloc_node&gt; (347,372 samples, 0.04%)</title><rect x="104.5" y="405" width="0.3" height="15.0" fill="rgb(236,146,34)" rx="2" ry="2" />
+<text  x="107.52" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Head_base&lt;5ul, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;, false&gt;::~_Head_base (220,721 samples, 0.02%)</title><rect x="666.3" y="341" width="0.2" height="15.0" fill="rgb(205,2,0)" rx="2" ry="2" />
+<text  x="669.34" y="351.5" ></text>
+</g>
+<g >
+<title>unsigned short* std::__relocate_a&lt;unsigned short*, unsigned short*, std::allocator&lt;unsigned short&gt; &gt; (196,177 samples, 0.02%)</title><rect x="219.7" y="421" width="0.2" height="15.0" fill="rgb(210,27,6)" rx="2" ry="2" />
+<text  x="222.69" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_S_key (400,281 samples, 0.04%)</title><rect x="221.8" y="437" width="0.3" height="15.0" fill="rgb(215,49,11)" rx="2" ry="2" />
+<text  x="224.77" y="447.5" ></text>
+</g>
+<g >
+<title>std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;* std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_create_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; const&amp;&gt; (530,447 samples, 0.05%)</title><rect x="611.1" y="485" width="0.4" height="15.0" fill="rgb(230,116,27)" rx="2" ry="2" />
+<text  x="614.12" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;1ul, ns3::Ptr&lt;ns3::SpectrumValue const&gt;, unsigned int&gt;::~_Tuple_impl (370,840 samples, 0.04%)</title><rect x="708.5" y="421" width="0.3" height="15.0" fill="rgb(252,220,52)" rx="2" ry="2" />
+<text  x="711.49" y="431.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt; &gt;::allocate (163,549 samples, 0.02%)</title><rect x="706.5" y="357" width="0.1" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="709.48" y="367.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt;::find (1,336,082 samples, 0.14%)</title><rect x="567.7" y="293" width="1.1" height="15.0" fill="rgb(228,106,25)" rx="2" ry="2" />
+<text  x="570.69" y="303.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::_M_clear (182,893 samples, 0.02%)</title><rect x="634.7" y="325" width="0.1" height="15.0" fill="rgb(217,56,13)" rx="2" ry="2" />
+<text  x="637.70" y="335.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_insert&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; const&amp;&gt; (228,584 samples, 0.02%)</title><rect x="689.4" y="437" width="0.2" height="15.0" fill="rgb(210,27,6)" rx="2" ry="2" />
+<text  x="692.42" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Simulator::DoSchedule (1,698,311 samples, 0.18%)</title><rect x="615.3" y="533" width="1.3" height="15.0" fill="rgb(222,79,18)" rx="2" ry="2" />
+<text  x="618.27" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::ByteTagList::Deallocate (267,431 samples, 0.03%)</title><rect x="653.2" y="213" width="0.2" height="15.0" fill="rgb(227,103,24)" rx="2" ry="2" />
+<text  x="656.23" y="223.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::Divide (414,550 samples, 0.04%)</title><rect x="414.0" y="517" width="0.3" height="15.0" fill="rgb(239,160,38)" rx="2" ry="2" />
+<text  x="416.97" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;5ul, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::_Tuple_impl (152,827 samples, 0.02%)</title><rect x="667.8" y="309" width="0.2" height="15.0" fill="rgb(221,74,17)" rx="2" ry="2" />
+<text  x="670.83" y="319.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt; &gt;::_S_key (552,579 samples, 0.06%)</title><rect x="180.5" y="421" width="0.4" height="15.0" fill="rgb(219,66,15)" rx="2" ry="2" />
+<text  x="183.46" y="431.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;unsigned int&gt;::deallocate (227,074 samples, 0.02%)</title><rect x="697.2" y="437" width="0.2" height="15.0" fill="rgb(218,61,14)" rx="2" ry="2" />
+<text  x="700.18" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::_M_create_storage (578,790 samples, 0.06%)</title><rect x="520.0" y="309" width="0.4" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="522.96" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::BuildRarListElement_s* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;ns3::BuildRarListElement_s const*, std::vector&lt;ns3::BuildRarListElement_s, std::allocator&lt;ns3::BuildRarListElement_s&gt; &gt; &gt;, ns3::BuildRarListElement_s*, ns3::BuildRarListElement_s&gt; (278,330 samples, 0.03%)</title><rect x="143.1" y="437" width="0.2" height="15.0" fill="rgb(227,102,24)" rx="2" ry="2" />
+<text  x="146.10" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::FfMacSchedSapUser::SchedDlConfigIndParameters::SchedDlConfigIndParameters (155,354 samples, 0.02%)</title><rect x="98.0" y="469" width="0.1" height="15.0" fill="rgb(208,15,3)" rx="2" ry="2" />
+<text  x="101.02" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt;::_M_range_check (426,031 samples, 0.04%)</title><rect x="525.6" y="325" width="0.4" height="15.0" fill="rgb(253,222,53)" rx="2" ry="2" />
+<text  x="528.63" y="335.5" ></text>
+</g>
+<g >
+<title>[libm.so.6] (277,109 samples, 0.03%)</title><rect x="65.7" y="469" width="0.2" height="15.0" fill="rgb(208,16,4)" rx="2" ry="2" />
+<text  x="68.71" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::ByteTagIterator::HasNext (236,780 samples, 0.02%)</title><rect x="424.4" y="245" width="0.2" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="427.43" y="255.5" ></text>
+</g>
+<g >
+<title>double&amp; std::_Mu&lt;double, false, false&gt;::operator (202,203 samples, 0.02%)</title><rect x="48.6" y="597" width="0.2" height="15.0" fill="rgb(217,57,13)" rx="2" ry="2" />
+<text  x="51.60" y="607.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;double&gt;::allocate (530,824 samples, 0.05%)</title><rect x="239.4" y="213" width="0.4" height="15.0" fill="rgb(221,76,18)" rx="2" ry="2" />
+<text  x="242.38" y="223.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_Vector_base (211,429 samples, 0.02%)</title><rect x="78.5" y="469" width="0.2" height="15.0" fill="rgb(237,150,35)" rx="2" ry="2" />
+<text  x="81.49" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::CqiListElement_s, std::allocator&lt;ns3::CqiListElement_s&gt; &gt;::end (201,936 samples, 0.02%)</title><rect x="254.6" y="501" width="0.1" height="15.0" fill="rgb(233,131,31)" rx="2" ry="2" />
+<text  x="257.59" y="511.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, unsigned char*, unsigned char&gt; (223,250 samples, 0.02%)</title><rect x="92.8" y="357" width="0.1" height="15.0" fill="rgb(226,96,23)" rx="2" ry="2" />
+<text  x="95.76" y="367.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned char, std::map&lt;unsigned char, ns3::LteMacSapProvider*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, std::map&lt;unsigned char, ns3::LteMacSapProvider*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt; &gt; &gt; &gt; &gt;::begin (204,131 samples, 0.02%)</title><rect x="552.7" y="213" width="0.1" height="15.0" fill="rgb(235,141,33)" rx="2" ry="2" />
+<text  x="555.65" y="223.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_M_erase (637,679 samples, 0.07%)</title><rect x="60.6" y="469" width="0.5" height="15.0" fill="rgb(227,102,24)" rx="2" ry="2" />
+<text  x="63.59" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::emplace_hint&lt;unsigned int const&amp;, ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp;&gt; (838,836 samples, 0.09%)</title><rect x="81.8" y="501" width="0.7" height="15.0" fill="rgb(211,29,6)" rx="2" ry="2" />
+<text  x="84.78" y="511.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;double&gt;::deallocate (163,066 samples, 0.02%)</title><rect x="773.3" y="373" width="0.2" height="15.0" fill="rgb(223,83,20)" rx="2" ry="2" />
+<text  x="776.33" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_copy (878,011 samples, 0.09%)</title><rect x="341.6" y="453" width="0.7" height="15.0" fill="rgb(246,192,46)" rx="2" ry="2" />
+<text  x="344.64" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::RlcTag::GetInstanceTypeId (313,712 samples, 0.03%)</title><rect x="427.2" y="245" width="0.2" height="15.0" fill="rgb(248,200,47)" rx="2" ry="2" />
+<text  x="430.18" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue&gt; ns3::Create&lt;ns3::SpectrumValue, ns3::Ptr&lt;ns3::SpectrumModel&gt;&amp;&gt; (1,854,475 samples, 0.19%)</title><rect x="56.1" y="501" width="1.5" height="15.0" fill="rgb(228,107,25)" rx="2" ry="2" />
+<text  x="59.11" y="511.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt; &gt;::_M_addr (124,878 samples, 0.01%)</title><rect x="429.1" y="229" width="0.1" height="15.0" fill="rgb(211,29,7)" rx="2" ry="2" />
+<text  x="432.09" y="239.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumSignalParametersDataFrame::LteSpectrumSignalParametersDataFrame (1,082,844 samples, 0.11%)</title><rect x="88.6" y="517" width="0.8" height="15.0" fill="rgb(206,8,1)" rx="2" ry="2" />
+<text  x="91.58" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::PacketBurst (495,532 samples, 0.05%)</title><rect x="627.1" y="501" width="0.4" height="15.0" fill="rgb(208,15,3)" rx="2" ry="2" />
+<text  x="630.06" y="511.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;::cbegin (384,549 samples, 0.04%)</title><rect x="382.4" y="517" width="0.3" height="15.0" fill="rgb(230,116,27)" rx="2" ry="2" />
+<text  x="385.38" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::LteUePhy::UeMeasurementsElement&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::LteUePhy::UeMeasurementsElement&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::LteUePhy::UeMeasurementsElement&gt; &gt; &gt;::find (162,761 samples, 0.02%)</title><rect x="601.2" y="293" width="0.1" height="15.0" fill="rgb(234,136,32)" rx="2" ry="2" />
+<text  x="604.21" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumPhy*&amp; std::_Mu&lt;ns3::LteSpectrumPhy*, false, false&gt;::operator (199,187 samples, 0.02%)</title><rect x="49.4" y="597" width="0.2" height="15.0" fill="rgb(243,178,42)" rx="2" ry="2" />
+<text  x="52.39" y="607.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::operator= (193,644 samples, 0.02%)</title><rect x="134.9" y="357" width="0.1" height="15.0" fill="rgb(211,28,6)" rx="2" ry="2" />
+<text  x="137.86" y="367.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt; &gt;::operator* (379,355 samples, 0.04%)</title><rect x="156.9" y="405" width="0.3" height="15.0" fill="rgb(221,76,18)" rx="2" ry="2" />
+<text  x="159.90" y="415.5" ></text>
+</g>
+<g >
+<title>unsigned long const&amp; std::min&lt;unsigned long&gt; (156,731 samples, 0.02%)</title><rect x="211.4" y="405" width="0.1" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="214.36" y="415.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;ns3::DlInfoListElement_s&gt;::allocate (265,191 samples, 0.03%)</title><rect x="262.0" y="453" width="0.2" height="15.0" fill="rgb(215,50,12)" rx="2" ry="2" />
+<text  x="265.02" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::~_Rb_tree (763,268 samples, 0.08%)</title><rect x="60.6" y="501" width="0.6" height="15.0" fill="rgb(218,60,14)" rx="2" ry="2" />
+<text  x="63.55" y="511.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::CeBitmap_e, std::allocator&lt;ns3::CeBitmap_e&gt; &gt;::end (267,288 samples, 0.03%)</title><rect x="204.5" y="389" width="0.2" height="15.0" fill="rgb(207,10,2)" rx="2" ry="2" />
+<text  x="207.45" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::Simulator::DoSchedule (1,482,842 samples, 0.15%)</title><rect x="108.3" y="517" width="1.2" height="15.0" fill="rgb(222,79,18)" rx="2" ry="2" />
+<text  x="111.32" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::BufferSizeLevelBsr::BsrId2BufferSize (237,172 samples, 0.02%)</title><rect x="225.6" y="485" width="0.2" height="15.0" fill="rgb(236,145,34)" rx="2" ry="2" />
+<text  x="228.58" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt;::_M_valptr (126,162 samples, 0.01%)</title><rect x="568.3" y="229" width="0.1" height="15.0" fill="rgb(222,82,19)" rx="2" ry="2" />
+<text  x="571.26" y="239.5" ></text>
+</g>
+<g >
+<title>ns3::HarqProcessInfoElement_t* std::__uninitialized_copy&lt;true&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::HarqProcessInfoElement_t const*, std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt;, ns3::HarqProcessInfoElement_t*&gt; (1,453,727 samples, 0.15%)</title><rect x="352.8" y="437" width="1.2" height="15.0" fill="rgb(238,156,37)" rx="2" ry="2" />
+<text  x="355.82" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultSimulatorImpl::ScheduleWithContext (7,958,779 samples, 0.82%)</title><rect x="333.6" y="469" width="6.4" height="15.0" fill="rgb(253,222,53)" rx="2" ry="2" />
+<text  x="336.55" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Callback&lt;void, ns3::UlInfoListElement_s&gt;::Callback&lt;void  (249,755 samples, 0.03%)</title><rect x="439.1" y="469" width="0.2" height="15.0" fill="rgb(243,177,42)" rx="2" ry="2" />
+<text  x="442.08" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::lower_bound (567,494 samples, 0.06%)</title><rect x="707.2" y="421" width="0.5" height="15.0" fill="rgb(254,228,54)" rx="2" ry="2" />
+<text  x="710.21" y="431.5" ></text>
+</g>
+<g >
+<title>std::map&lt;ns3::Scheduler::EventKey, ns3::EventImpl*, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::empty (712,405 samples, 0.07%)</title><rect x="777.8" y="725" width="0.5" height="15.0" fill="rgb(225,95,22)" rx="2" ry="2" />
+<text  x="780.78" y="735.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;*, std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt; &gt;::operator+ (160,323 samples, 0.02%)</title><rect x="356.8" y="517" width="0.1" height="15.0" fill="rgb(229,113,27)" rx="2" ry="2" />
+<text  x="359.81" y="527.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::max_size (230,324 samples, 0.02%)</title><rect x="219.4" y="421" width="0.1" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="222.36" y="431.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy_aux&lt;true&gt;::__destroy&lt;unsigned short*&gt; (155,477 samples, 0.02%)</title><rect x="473.1" y="229" width="0.2" height="15.0" fill="rgb(231,121,28)" rx="2" ry="2" />
+<text  x="476.13" y="239.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::vector (631,882 samples, 0.07%)</title><rect x="78.2" y="485" width="0.5" height="15.0" fill="rgb(239,156,37)" rx="2" ry="2" />
+<text  x="81.22" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Vector3D::GetLength (361,586 samples, 0.04%)</title><rect x="703.2" y="517" width="0.3" height="15.0" fill="rgb(211,31,7)" rx="2" ry="2" />
+<text  x="706.23" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumChannel&gt;::operator bool (155,807 samples, 0.02%)</title><rect x="671.0" y="533" width="0.1" height="15.0" fill="rgb(228,108,26)" rx="2" ry="2" />
+<text  x="673.96" y="543.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::clear (467,457 samples, 0.05%)</title><rect x="612.9" y="469" width="0.4" height="15.0" fill="rgb(217,58,13)" rx="2" ry="2" />
+<text  x="615.88" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;::erase (616,017 samples, 0.06%)</title><rect x="119.7" y="517" width="0.5" height="15.0" fill="rgb(248,200,48)" rx="2" ry="2" />
+<text  x="122.71" y="527.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt;::_M_range_check (190,527 samples, 0.02%)</title><rect x="150.0" y="389" width="0.1" height="15.0" fill="rgb(250,207,49)" rx="2" ry="2" />
+<text  x="152.97" y="399.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;std::is_constructible&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt;::value, std::pair&lt;std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, bool&gt; &gt;::type std::map&lt;ns3::Scheduler::EventKey, ns3::EventImpl*, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::insert&lt;std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (239,679 samples, 0.02%)</title><rect x="62.4" y="469" width="0.2" height="15.0" fill="rgb(211,29,7)" rx="2" ry="2" />
+<text  x="65.40" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_copy (155,456 samples, 0.02%)</title><rect x="341.2" y="437" width="0.2" height="15.0" fill="rgb(246,192,46)" rx="2" ry="2" />
+<text  x="344.24" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Bvector_base&lt;std::allocator&lt;bool&gt; &gt;::~_Bvector_base (545,023 samples, 0.06%)</title><rect x="201.9" y="469" width="0.4" height="15.0" fill="rgb(237,150,36)" rx="2" ry="2" />
+<text  x="204.88" y="479.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt;::_M_ptr (396,644 samples, 0.04%)</title><rect x="22.4" y="277" width="0.4" height="15.0" fill="rgb(215,48,11)" rx="2" ry="2" />
+<text  x="25.44" y="287.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::~map (148,912 samples, 0.02%)</title><rect x="99.7" y="469" width="0.2" height="15.0" fill="rgb(248,201,48)" rx="2" ry="2" />
+<text  x="102.75" y="479.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::__copy_move_a1&lt;false, unsigned char const*, unsigned char*&gt; (149,127 samples, 0.02%)</title><rect x="442.4" y="213" width="0.2" height="15.0" fill="rgb(215,50,12)" rx="2" ry="2" />
+<text  x="445.44" y="223.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;* std::__copy_move_a2&lt;true, std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;*, std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;*&gt; (1,623,419 samples, 0.17%)</title><rect x="290.1" y="453" width="1.3" height="15.0" fill="rgb(245,186,44)" rx="2" ry="2" />
+<text  x="293.09" y="463.5" ></text>
+</g>
+<g >
+<title>main (2,105,662 samples, 0.22%)</title><rect x="15.5" y="789" width="1.6" height="15.0" fill="rgb(243,179,42)" rx="2" ry="2" />
+<text  x="18.45" y="799.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt; &gt;::destroy&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; (521,712 samples, 0.05%)</title><rect x="501.9" y="373" width="0.4" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="504.92" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::NoOpComponentCarrierManager::DoUlReceiveMacCe (4,513,254 samples, 0.47%)</title><rect x="457.4" y="293" width="3.6" height="15.0" fill="rgb(225,95,22)" rx="2" ry="2" />
+<text  x="460.37" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::UeSelected_s::operator= (241,903 samples, 0.02%)</title><rect x="585.5" y="245" width="0.2" height="15.0" fill="rgb(244,183,43)" rx="2" ry="2" />
+<text  x="588.46" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::LteUePhy::RlfDetection (610,186 samples, 0.06%)</title><rect x="599.0" y="309" width="0.5" height="15.0" fill="rgb(242,173,41)" rx="2" ry="2" />
+<text  x="602.00" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::VendorSpecificListElement_s* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::VendorSpecificListElement_s const*, std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt; &gt;, ns3::VendorSpecificListElement_s*&gt; (598,518 samples, 0.06%)</title><rect x="475.6" y="277" width="0.5" height="15.0" fill="rgb(206,5,1)" rx="2" ry="2" />
+<text  x="478.64" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbRrc::GetUeManager (297,730 samples, 0.03%)</title><rect x="18.4" y="341" width="0.3" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="21.43" y="351.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;double&gt;::deallocate (163,066 samples, 0.02%)</title><rect x="773.3" y="357" width="0.2" height="15.0" fill="rgb(250,208,49)" rx="2" ry="2" />
+<text  x="776.33" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::Time::To (446,431 samples, 0.05%)</title><rect x="605.6" y="485" width="0.3" height="15.0" fill="rgb(244,182,43)" rx="2" ry="2" />
+<text  x="608.57" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::ByteTagList::Deallocate (675,876 samples, 0.07%)</title><rect x="452.6" y="85" width="0.5" height="15.0" fill="rgb(227,103,24)" rx="2" ry="2" />
+<text  x="455.58" y="95.5" ></text>
+</g>
+<g >
+<title>ns3::PacketMetadata::Deallocate (241,216 samples, 0.02%)</title><rect x="453.4" y="69" width="0.2" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="456.38" y="79.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;ns3::ByteTagListData*&gt; &gt;::construct&lt;ns3::ByteTagListData*, ns3::ByteTagListData* const&amp;&gt; (320,897 samples, 0.03%)</title><rect x="452.8" y="53" width="0.3" height="15.0" fill="rgb(248,199,47)" rx="2" ry="2" />
+<text  x="455.80" y="63.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumSignalParameters* ns3::PeekPointer&lt;ns3::SpectrumSignalParameters&gt; (161,138 samples, 0.02%)</title><rect x="735.3" y="517" width="0.1" height="15.0" fill="rgb(214,43,10)" rx="2" ry="2" />
+<text  x="738.26" y="527.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::~vector (159,560 samples, 0.02%)</title><rect x="233.0" y="341" width="0.1" height="15.0" fill="rgb(225,92,22)" rx="2" ry="2" />
+<text  x="235.98" y="351.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::copy&lt;__gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, unsigned char*&gt; (330,967 samples, 0.03%)</title><rect x="584.9" y="213" width="0.2" height="15.0" fill="rgb(241,168,40)" rx="2" ry="2" />
+<text  x="587.85" y="223.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;int, std::allocator&lt;int&gt; &gt;::~_Vector_base (157,700 samples, 0.02%)</title><rect x="387.8" y="485" width="0.1" height="15.0" fill="rgb(251,213,51)" rx="2" ry="2" />
+<text  x="390.82" y="495.5" ></text>
+</g>
+<g >
+<title>void std::_Construct&lt;ns3::CqiListElement_s, ns3::CqiListElement_s&amp;&gt; (968,712 samples, 0.10%)</title><rect x="92.2" y="405" width="0.7" height="15.0" fill="rgb(236,143,34)" rx="2" ry="2" />
+<text  x="95.16" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::Simulator::Run (922,121,412 samples, 95.09%)</title><rect x="36.8" y="773" width="741.7" height="15.0" fill="rgb(234,134,32)" rx="2" ry="2" />
+<text  x="39.84" y="783.5" >ns3::Simulator::Run</text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;::_M_ptr (315,999 samples, 0.03%)</title><rect x="500.4" y="485" width="0.3" height="15.0" fill="rgb(207,12,3)" rx="2" ry="2" />
+<text  x="503.42" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt;* std::__copy_move_a2&lt;true, ns3::Ptr&lt;ns3::PacketBurst&gt;*, ns3::Ptr&lt;ns3::PacketBurst&gt;*&gt; (1,973,200 samples, 0.20%)</title><rect x="634.3" y="453" width="1.6" height="15.0" fill="rgb(213,38,9)" rx="2" ry="2" />
+<text  x="637.27" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;0ul, ns3::MultiModelSpectrumChannel*, ns3::Ptr&lt;ns3::SpectrumValue&gt;, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::_Tuple_impl&lt;ns3::MultiModelSpectrumChannel*&amp;, ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp;, double&amp;, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;&amp;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;&amp;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;&amp;, void&gt; (206,637 samples, 0.02%)</title><rect x="87.4" y="421" width="0.2" height="15.0" fill="rgb(231,123,29)" rx="2" ry="2" />
+<text  x="90.42" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_M_create_storage (162,839 samples, 0.02%)</title><rect x="606.9" y="453" width="0.1" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="609.89" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; std::map&lt;ns3::Scheduler::EventKey, ns3::EventImpl*, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::emplace_hint&lt;std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (1,461,013 samples, 0.15%)</title><rect x="83.0" y="437" width="1.2" height="15.0" fill="rgb(253,224,53)" rx="2" ry="2" />
+<text  x="85.99" y="447.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;unsigned char*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;unsigned char*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt; (155,513 samples, 0.02%)</title><rect x="134.6" y="421" width="0.1" height="15.0" fill="rgb(243,176,42)" rx="2" ry="2" />
+<text  x="137.58" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::Buffer::~Buffer (158,245 samples, 0.02%)</title><rect x="502.1" y="277" width="0.1" height="15.0" fill="rgb(240,162,38)" rx="2" ry="2" />
+<text  x="505.11" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue&gt;::Ptr (302,852 samples, 0.03%)</title><rect x="303.9" y="517" width="0.3" height="15.0" fill="rgb(220,73,17)" rx="2" ry="2" />
+<text  x="306.92" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter&gt;::Unref (5,067,937 samples, 0.52%)</title><rect x="377.3" y="405" width="4.1" height="15.0" fill="rgb(221,78,18)" rx="2" ry="2" />
+<text  x="380.33" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleUeComponentCarrierManager::DoReportBufferStatus (1,164,381 samples, 0.12%)</title><rect x="552.1" y="229" width="0.9" height="15.0" fill="rgb(241,169,40)" rx="2" ry="2" />
+<text  x="555.08" y="239.5" ></text>
+</g>
+<g >
+<title>std::tuple&lt;ns3::MultiModelSpectrumChannel*, ns3::Ptr&lt;ns3::SpectrumValue&gt;, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::~tuple (4,562,243 samples, 0.47%)</title><rect x="773.6" y="565" width="3.6" height="15.0" fill="rgb(218,61,14)" rx="2" ry="2" />
+<text  x="776.56" y="575.5" ></text>
+</g>
+<g >
+<title>ns3::UlDciListElement_s* std::__do_uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::UlDciListElement_s const*, std::vector&lt;ns3::UlDciListElement_s, std::allocator&lt;ns3::UlDciListElement_s&gt; &gt; &gt;, ns3::UlDciListElement_s*&gt; (160,843 samples, 0.02%)</title><rect x="228.2" y="389" width="0.1" height="15.0" fill="rgb(223,86,20)" rx="2" ry="2" />
+<text  x="231.19" y="399.5" ></text>
+</g>
+<g >
+<title>std::_List_const_iterator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt;::operator* (789,338 samples, 0.08%)</title><rect x="369.0" y="517" width="0.6" height="15.0" fill="rgb(212,34,8)" rx="2" ry="2" />
+<text  x="371.99" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;4ul, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::_Tuple_impl (283,515 samples, 0.03%)</title><rect x="87.7" y="325" width="0.3" height="15.0" fill="rgb(213,41,9)" rx="2" ry="2" />
+<text  x="90.72" y="335.5" ></text>
+</g>
+<g >
+<title>void std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_M_realloc_insert&lt;unsigned char&gt; (2,339,611 samples, 0.24%)</title><rect x="692.6" y="469" width="1.9" height="15.0" fill="rgb(246,191,45)" rx="2" ry="2" />
+<text  x="695.61" y="479.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::allocate (228,044 samples, 0.02%)</title><rect x="191.0" y="389" width="0.2" height="15.0" fill="rgb(237,147,35)" rx="2" ry="2" />
+<text  x="194.02" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::EventImpl, ns3::Empty, ns3::DefaultDeleter&lt;ns3::EventImpl&gt; &gt;::Ref (161,738 samples, 0.02%)</title><rect x="277.9" y="469" width="0.2" height="15.0" fill="rgb(249,202,48)" rx="2" ry="2" />
+<text  x="280.93" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::RachListElement_s, std::allocator&lt;ns3::RachListElement_s&gt; &gt;::_M_erase_at_end (156,259 samples, 0.02%)</title><rect x="208.8" y="469" width="0.1" height="15.0" fill="rgb(241,167,40)" rx="2" ry="2" />
+<text  x="211.81" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::ByteTagList::~ByteTagList (713,131 samples, 0.07%)</title><rect x="452.5" y="101" width="0.6" height="15.0" fill="rgb(206,5,1)" rx="2" ry="2" />
+<text  x="455.55" y="111.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, ns3::DlInfoListElement_s, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt; &gt;::map (351,966 samples, 0.04%)</title><rect x="509.1" y="549" width="0.3" height="15.0" fill="rgb(226,100,24)" rx="2" ry="2" />
+<text  x="512.12" y="559.5" ></text>
+</g>
+<g >
+<title>ns3::LtePhy::SetMacPdu (332,587 samples, 0.03%)</title><rect x="564.8" y="165" width="0.3" height="15.0" fill="rgb(248,201,48)" rx="2" ry="2" />
+<text  x="567.83" y="175.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::~map (270,414 samples, 0.03%)</title><rect x="341.4" y="469" width="0.2" height="15.0" fill="rgb(228,107,25)" rx="2" ry="2" />
+<text  x="344.36" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_emplace_hint_unique&lt;std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (2,857,108 samples, 0.29%)</title><rect x="334.1" y="405" width="2.3" height="15.0" fill="rgb(248,201,48)" rx="2" ry="2" />
+<text  x="337.06" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::LteUePhy*&amp; std::forward&lt;ns3::LteUePhy*&amp;&gt; (157,221 samples, 0.02%)</title><rect x="616.9" y="485" width="0.1" height="15.0" fill="rgb(213,40,9)" rx="2" ry="2" />
+<text  x="619.91" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_M_range_check (188,564 samples, 0.02%)</title><rect x="400.0" y="533" width="0.1" height="15.0" fill="rgb(239,159,38)" rx="2" ry="2" />
+<text  x="402.96" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, unsigned int&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt; &gt;::_M_lower_bound (601,671 samples, 0.06%)</title><rect x="137.1" y="453" width="0.5" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="140.12" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;::_Vector_impl::_Vector_impl (155,130 samples, 0.02%)</title><rect x="213.0" y="389" width="0.1" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="216.00" y="399.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, unsigned char*&gt; (275,599 samples, 0.03%)</title><rect x="442.4" y="229" width="0.2" height="15.0" fill="rgb(254,229,54)" rx="2" ry="2" />
+<text  x="445.37" y="239.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::BuildBroadcastListElement_s, std::allocator&lt;ns3::BuildBroadcastListElement_s&gt; &gt;::_Vector_base (584,510 samples, 0.06%)</title><rect x="141.0" y="437" width="0.5" height="15.0" fill="rgb(236,145,34)" rx="2" ry="2" />
+<text  x="144.01" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::Copy (4,566,749 samples, 0.47%)</title><rect x="624.0" y="533" width="3.7" height="15.0" fill="rgb(240,161,38)" rx="2" ry="2" />
+<text  x="627.00" y="543.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;* std::__copy_move_a1&lt;true, std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;*, std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;*&gt; (2,516,750 samples, 0.26%)</title><rect x="349.6" y="469" width="2.1" height="15.0" fill="rgb(222,79,18)" rx="2" ry="2" />
+<text  x="352.65" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::SpectrumSignalParameters, ns3::Empty, ns3::DefaultDeleter&lt;ns3::SpectrumSignalParameters&gt; &gt;::Unref (273,890 samples, 0.03%)</title><rect x="344.2" y="501" width="0.2" height="15.0" fill="rgb(254,229,54)" rx="2" ry="2" />
+<text  x="347.20" y="511.5" ></text>
+</g>
+<g >
+<title>std::operator== (160,825 samples, 0.02%)</title><rect x="628.8" y="517" width="0.1" height="15.0" fill="rgb(229,110,26)" rx="2" ry="2" />
+<text  x="631.81" y="527.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, std::vector&lt;double, std::allocator&lt;double&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::map (459,078 samples, 0.05%)</title><rect x="104.5" y="469" width="0.3" height="15.0" fill="rgb(249,204,48)" rx="2" ry="2" />
+<text  x="107.45" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::LteRlcSpecificLteMacSapUser::NotifyTxOpportunity (17,080,246 samples, 1.76%)</title><rect x="19.6" y="453" width="13.7" height="15.0" fill="rgb(249,204,48)" rx="2" ry="2" />
+<text  x="22.60" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt;::push_back (2,568,842 samples, 0.26%)</title><rect x="352.4" y="533" width="2.0" height="15.0" fill="rgb(229,113,27)" rx="2" ry="2" />
+<text  x="355.36" y="543.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::CqiListElement_s*&gt; (970,280 samples, 0.10%)</title><rect x="254.9" y="453" width="0.8" height="15.0" fill="rgb(219,67,16)" rx="2" ry="2" />
+<text  x="257.94" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::Ptr&lt;ns3::UeManager&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::Ptr&lt;ns3::UeManager&gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::Ptr&lt;ns3::UeManager&gt; &gt; &gt; &gt;::_S_key (321,034 samples, 0.03%)</title><rect x="28.7" y="293" width="0.2" height="15.0" fill="rgb(253,222,53)" rx="2" ry="2" />
+<text  x="31.69" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::MapScheduler::Insert (1,160,513 samples, 0.12%)</title><rect x="615.4" y="501" width="1.0" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="618.42" y="511.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::~vector (202,197 samples, 0.02%)</title><rect x="728.9" y="437" width="0.1" height="15.0" fill="rgb(225,92,22)" rx="2" ry="2" />
+<text  x="731.89" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, unsigned char&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, unsigned char&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, unsigned char&gt; &gt; &gt;::find (1,128,415 samples, 0.12%)</title><rect x="135.9" y="469" width="0.9" height="15.0" fill="rgb(206,4,1)" rx="2" ry="2" />
+<text  x="138.87" y="479.5" ></text>
+</g>
+<g >
+<title>void std::__invoke_impl&lt;void, void  (5,321,712 samples, 0.55%)</title><rect x="11.2" y="597" width="4.3" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="14.17" y="607.5" ></text>
+</g>
+<g >
+<title>main (5,321,712 samples, 0.55%)</title><rect x="11.2" y="805" width="4.3" height="15.0" fill="rgb(243,179,42)" rx="2" ry="2" />
+<text  x="14.17" y="815.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteSpectrumSignalParametersUlSrsFrame&gt; ns3::DynamicCast&lt;ns3::LteSpectrumSignalParametersUlSrsFrame, ns3::SpectrumSignalParameters&gt; (670,184 samples, 0.07%)</title><rect x="736.6" y="533" width="0.5" height="15.0" fill="rgb(221,77,18)" rx="2" ry="2" />
+<text  x="739.57" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Bvector_base&lt;std::allocator&lt;bool&gt; &gt;::_Bvector_impl_data::_M_move_data (231,889 samples, 0.02%)</title><rect x="196.2" y="453" width="0.2" height="15.0" fill="rgb(218,62,15)" rx="2" ry="2" />
+<text  x="199.20" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::CqiListElement_s, std::allocator&lt;ns3::CqiListElement_s&gt; &gt;::_M_erase (416,767 samples, 0.04%)</title><rect x="106.8" y="485" width="0.3" height="15.0" fill="rgb(207,9,2)" rx="2" ry="2" />
+<text  x="109.77" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_Rb_tree_impl&lt;std::less&lt;unsigned int&gt;, true&gt;::_Rb_tree_impl (152,651 samples, 0.02%)</title><rect x="657.4" y="485" width="0.1" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="660.37" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::Packet, ns3::Empty, ns3::DefaultDeleter&lt;ns3::Packet&gt; &gt;::Unref (750,603 samples, 0.08%)</title><rect x="774.1" y="229" width="0.6" height="15.0" fill="rgb(215,47,11)" rx="2" ry="2" />
+<text  x="777.11" y="239.5" ></text>
+</g>
+<g >
+<title>void std::_Bind&lt;void  (5,321,712 samples, 0.55%)</title><rect x="11.2" y="629" width="4.3" height="15.0" fill="rgb(242,174,41)" rx="2" ry="2" />
+<text  x="14.17" y="639.5" ></text>
+</g>
+<g >
+<title> (353,481 samples, 0.04%)</title><rect x="740.4" y="485" width="0.3" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="743.37" y="495.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;::~pair (190,528 samples, 0.02%)</title><rect x="506.4" y="421" width="0.1" height="15.0" fill="rgb(213,38,9)" rx="2" ry="2" />
+<text  x="509.38" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::Packet::AddByteTag (1,292,520 samples, 0.13%)</title><rect x="13.1" y="405" width="1.0" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="16.10" y="415.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt;::vector (381,879 samples, 0.04%)</title><rect x="503.7" y="389" width="0.3" height="15.0" fill="rgb(210,23,5)" rx="2" ry="2" />
+<text  x="506.68" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumSignalParametersDlCtrlFrame::~LteSpectrumSignalParametersDlCtrlFrame (233,861 samples, 0.02%)</title><rect x="344.2" y="469" width="0.2" height="15.0" fill="rgb(220,69,16)" rx="2" ry="2" />
+<text  x="347.23" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::SpectrumValue (1,744,005 samples, 0.18%)</title><rect x="654.4" y="501" width="1.4" height="15.0" fill="rgb(211,27,6)" rx="2" ry="2" />
+<text  x="657.44" y="511.5" ></text>
+</g>
+<g >
+<title>[ld-linux-x86-64.so.2] (1,432,157 samples, 0.15%)</title><rect x="10.0" y="837" width="1.2" height="15.0" fill="rgb(243,178,42)" rx="2" ry="2" />
+<text  x="13.00" y="847.5" ></text>
+</g>
+<g >
+<title>std::_Bit_const_iterator::_Bit_const_iterator (204,269 samples, 0.02%)</title><rect x="198.9" y="389" width="0.2" height="15.0" fill="rgb(225,95,22)" rx="2" ry="2" />
+<text  x="201.92" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt; &gt; &gt;::lower_bound (151,718 samples, 0.02%)</title><rect x="96.5" y="373" width="0.1" height="15.0" fill="rgb(213,37,8)" rx="2" ry="2" />
+<text  x="99.52" y="383.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, unsigned char*, unsigned char&gt; (481,444 samples, 0.05%)</title><rect x="519.2" y="325" width="0.4" height="15.0" fill="rgb(226,96,23)" rx="2" ry="2" />
+<text  x="522.19" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::Callback&lt;void, ns3::SpectrumValue const&amp;&gt;::operator (20,199,448 samples, 2.08%)</title><rect x="467.5" y="517" width="16.3" height="15.0" fill="rgb(215,50,12)" rx="2" ry="2" />
+<text  x="470.54" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt; &gt;::find (188,402 samples, 0.02%)</title><rect x="114.5" y="453" width="0.2" height="15.0" fill="rgb(233,130,31)" rx="2" ry="2" />
+<text  x="117.51" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::HarqStatus_e* std::__copy_move&lt;false, true, std::random_access_iterator_tag&gt;::__copy_m&lt;ns3::DlInfoListElement_s::HarqStatus_e const, ns3::DlInfoListElement_s::HarqStatus_e&gt; (243,097 samples, 0.03%)</title><rect x="444.4" y="197" width="0.2" height="15.0" fill="rgb(240,161,38)" rx="2" ry="2" />
+<text  x="447.40" y="207.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::allocate (183,384 samples, 0.02%)</title><rect x="334.6" y="309" width="0.1" height="15.0" fill="rgb(213,40,9)" rx="2" ry="2" />
+<text  x="337.59" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::Time::Time (244,557 samples, 0.03%)</title><rect x="279.4" y="485" width="0.2" height="15.0" fill="rgb(226,100,24)" rx="2" ry="2" />
+<text  x="282.37" y="495.5" ></text>
+</g>
+<g >
+<title>void std::vector&lt;ns3::CqiListElement_s, std::allocator&lt;ns3::CqiListElement_s&gt; &gt;::_M_range_insert&lt;__gnu_cxx::__normal_iterator&lt;ns3::CqiListElement_s*, std::vector&lt;ns3::CqiListElement_s, std::allocator&lt;ns3::CqiListElement_s&gt; &gt; &gt; &gt; (1,338,732 samples, 0.14%)</title><rect x="92.0" y="485" width="1.1" height="15.0" fill="rgb(213,40,9)" rx="2" ry="2" />
+<text  x="95.03" y="495.5" ></text>
+</g>
+<g >
+<title>std::function&lt;void  (1,214,433 samples, 0.13%)</title><rect x="639.0" y="485" width="1.0" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="642.02" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::UlDciListElement_s, std::allocator&lt;ns3::UlDciListElement_s&gt; &gt;::end (241,860 samples, 0.02%)</title><rect x="249.3" y="469" width="0.2" height="15.0" fill="rgb(208,14,3)" rx="2" ry="2" />
+<text  x="252.31" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::Copy (2,143,209 samples, 0.22%)</title><rect x="718.0" y="501" width="1.7" height="15.0" fill="rgb(241,167,40)" rx="2" ry="2" />
+<text  x="720.99" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumSignalParametersDlCtrlFrame::Copy (729,950 samples, 0.08%)</title><rect x="113.8" y="485" width="0.6" height="15.0" fill="rgb(252,220,52)" rx="2" ry="2" />
+<text  x="116.83" y="495.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;unsigned short&gt;::allocate (378,103 samples, 0.04%)</title><rect x="520.1" y="261" width="0.3" height="15.0" fill="rgb(237,149,35)" rx="2" ry="2" />
+<text  x="523.12" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultDeleter&lt;ns3::SpectrumSignalParameters&gt;::Delete (3,402,650 samples, 0.35%)</title><rect x="773.7" y="437" width="2.7" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="776.67" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumModel const&gt;::operator= (199,517 samples, 0.02%)</title><rect x="730.4" y="469" width="0.1" height="15.0" fill="rgb(232,124,29)" rx="2" ry="2" />
+<text  x="733.38" y="479.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::__uninitialized_fill_n&lt;true&gt;::__uninit_fill_n&lt;unsigned char*, unsigned long, unsigned char&gt; (149,553 samples, 0.02%)</title><rect x="102.0" y="405" width="0.1" height="15.0" fill="rgb(207,12,2)" rx="2" ry="2" />
+<text  x="105.01" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::ObjectDeleter::Delete (8,154,602 samples, 0.84%)</title><rect x="544.6" y="293" width="6.5" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="547.56" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Packet&gt;::~Ptr (479,003 samples, 0.05%)</title><rect x="368.6" y="517" width="0.4" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="371.61" y="527.5" ></text>
+</g>
+<g >
+<title>void std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt;::_M_realloc_insert&lt;ns3::HigherLayerSelected_s const&amp;&gt; (1,903,180 samples, 0.20%)</title><rect x="595.1" y="277" width="1.5" height="15.0" fill="rgb(246,193,46)" rx="2" ry="2" />
+<text  x="598.06" y="287.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_Auto_node::_M_insert (143,534 samples, 0.01%)</title><rect x="659.2" y="469" width="0.1" height="15.0" fill="rgb(243,178,42)" rx="2" ry="2" />
+<text  x="662.16" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;::~vector (449,968 samples, 0.05%)</title><rect x="514.9" y="549" width="0.4" height="15.0" fill="rgb(235,139,33)" rx="2" ry="2" />
+<text  x="517.90" y="559.5" ></text>
+</g>
+<g >
+<title>ns3::FfMacSchedSapProvider::SchedUlCqiInfoReqParameters::SchedUlCqiInfoReqParameters (319,872 samples, 0.03%)</title><rect x="473.9" y="245" width="0.3" height="15.0" fill="rgb(233,131,31)" rx="2" ry="2" />
+<text  x="476.91" y="255.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;int, std::allocator&lt;int&gt; &gt;::_Vector_impl_data::_Vector_impl_data (195,817 samples, 0.02%)</title><rect x="700.1" y="501" width="0.2" height="15.0" fill="rgb(211,30,7)" rx="2" ry="2" />
+<text  x="703.10" y="511.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned int const, ns3::RxSpectrumModelInfo&gt; &gt;::_M_ptr (376,880 samples, 0.04%)</title><rect x="328.8" y="453" width="0.3" height="15.0" fill="rgb(239,156,37)" rx="2" ry="2" />
+<text  x="331.81" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt; &gt; &gt;::_M_end (161,396 samples, 0.02%)</title><rect x="170.0" y="421" width="0.1" height="15.0" fill="rgb(248,199,47)" rx="2" ry="2" />
+<text  x="172.96" y="431.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, bool&gt;::operator= (149,032 samples, 0.02%)</title><rect x="338.3" y="437" width="0.1" height="15.0" fill="rgb(214,45,10)" rx="2" ry="2" />
+<text  x="341.30" y="447.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, ns3::LteEnbComponentCarrierManager::UeInfo, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt; &gt; &gt;::at (2,696,904 samples, 0.28%)</title><rect x="156.8" y="421" width="2.1" height="15.0" fill="rgb(209,18,4)" rx="2" ry="2" />
+<text  x="159.78" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultSimulatorImpl::Now (126,194 samples, 0.01%)</title><rect x="607.4" y="485" width="0.1" height="15.0" fill="rgb(213,40,9)" rx="2" ry="2" />
+<text  x="610.41" y="495.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::operator= (154,567 samples, 0.02%)</title><rect x="117.8" y="405" width="0.1" height="15.0" fill="rgb(251,215,51)" rx="2" ry="2" />
+<text  x="120.78" y="415.5" ></text>
+</g>
+<g >
+<title>void std::vector&lt;ns3::UlDciListElement_s, std::allocator&lt;ns3::UlDciListElement_s&gt; &gt;::_M_realloc_insert&lt;ns3::UlDciListElement_s const&amp;&gt; (1,765,394 samples, 0.18%)</title><rect x="249.5" y="469" width="1.4" height="15.0" fill="rgb(214,44,10)" rx="2" ry="2" />
+<text  x="252.50" y="479.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy_aux&lt;false&gt;::__destroy&lt;ns3::Ptr&lt;ns3::Object&gt;*&gt; (190,590 samples, 0.02%)</title><rect x="380.5" y="261" width="0.1" height="15.0" fill="rgb(208,15,3)" rx="2" ry="2" />
+<text  x="383.48" y="271.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::get_allocator (396,683 samples, 0.04%)</title><rect x="732.5" y="469" width="0.3" height="15.0" fill="rgb(215,50,12)" rx="2" ry="2" />
+<text  x="735.47" y="479.5" ></text>
+</g>
+<g >
+<title>double* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, double*&gt; (460,469 samples, 0.05%)</title><rect x="606.5" y="453" width="0.4" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="609.52" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumModel const&gt;::Ptr&lt;ns3::SpectrumModel&gt; (273,542 samples, 0.03%)</title><rect x="676.6" y="485" width="0.3" height="15.0" fill="rgb(254,225,53)" rx="2" ry="2" />
+<text  x="679.64" y="495.5" ></text>
+</g>
+<g >
+<title>std::tuple&lt;ns3::LteUePhy*, unsigned int, unsigned int&gt;::tuple (190,393 samples, 0.02%)</title><rect x="618.9" y="437" width="0.1" height="15.0" fill="rgb(217,55,13)" rx="2" ry="2" />
+<text  x="621.88" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt;::_M_create_storage (317,668 samples, 0.03%)</title><rect x="476.3" y="277" width="0.3" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="479.35" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::VendorSpecificListElement_s* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;ns3::VendorSpecificListElement_s const*, std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt; &gt;, ns3::VendorSpecificListElement_s*, ns3::VendorSpecificListElement_s&gt; (675,744 samples, 0.07%)</title><rect x="475.6" y="293" width="0.6" height="15.0" fill="rgb(210,23,5)" rx="2" ry="2" />
+<text  x="478.61" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s* std::uninitialized_copy&lt;ns3::DlInfoListElement_s*, ns3::DlInfoListElement_s*&gt; (632,143 samples, 0.07%)</title><rect x="206.4" y="453" width="0.5" height="15.0" fill="rgb(227,102,24)" rx="2" ry="2" />
+<text  x="209.43" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::~_Rb_tree (220,721 samples, 0.02%)</title><rect x="666.3" y="309" width="0.2" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="669.34" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::HigherLayerSelected_s* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;ns3::HigherLayerSelected_s const*, std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt; &gt;, ns3::HigherLayerSelected_s*, ns3::HigherLayerSelected_s&gt; (389,363 samples, 0.04%)</title><rect x="442.7" y="293" width="0.3" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="445.69" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumPhy::AddExpectedTb (5,530,969 samples, 0.57%)</title><rect x="383.6" y="549" width="4.5" height="15.0" fill="rgb(249,206,49)" rx="2" ry="2" />
+<text  x="386.65" y="559.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_M_get_node (474,197 samples, 0.05%)</title><rect x="237.5" y="357" width="0.4" height="15.0" fill="rgb(222,82,19)" rx="2" ry="2" />
+<text  x="240.55" y="367.5" ></text>
+</g>
+<g >
+<title>std::tuple&lt;ns3::MultiModelSpectrumChannel*, ns3::Ptr&lt;ns3::SpectrumValue&gt;, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::tuple (665,649 samples, 0.07%)</title><rect x="667.4" y="405" width="0.6" height="15.0" fill="rgb(232,125,30)" rx="2" ry="2" />
+<text  x="670.42" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_insert_node (391,675 samples, 0.04%)</title><rect x="271.5" y="421" width="0.4" height="15.0" fill="rgb(218,62,14)" rx="2" ry="2" />
+<text  x="274.55" y="431.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::CqiListElement_s*&gt; (190,387 samples, 0.02%)</title><rect x="131.1" y="469" width="0.1" height="15.0" fill="rgb(219,67,16)" rx="2" ry="2" />
+<text  x="134.09" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::LtePhy::GetPacketBurst (2,782,438 samples, 0.29%)</title><rect x="118.0" y="533" width="2.2" height="15.0" fill="rgb(221,76,18)" rx="2" ry="2" />
+<text  x="121.00" y="543.5" ></text>
+</g>
+<g >
+<title>std::map&lt;ns3::Scheduler::EventKey, ns3::EventImpl*, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::lower_bound (272,545 samples, 0.03%)</title><rect x="109.0" y="453" width="0.2" height="15.0" fill="rgb(238,153,36)" rx="2" ry="2" />
+<text  x="111.96" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned char const, ns3::LteCcmMacSapProvider*&gt; &gt;::operator (124,340 samples, 0.01%)</title><rect x="457.9" y="277" width="0.1" height="15.0" fill="rgb(223,85,20)" rx="2" ry="2" />
+<text  x="460.85" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::Vector3D::GetLength (548,871 samples, 0.06%)</title><rect x="311.4" y="469" width="0.5" height="15.0" fill="rgb(211,31,7)" rx="2" ry="2" />
+<text  x="314.42" y="479.5" ></text>
+</g>
+<g >
+<title>bool __gnu_cxx::operator==&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; (408,801 samples, 0.04%)</title><rect x="410.8" y="501" width="0.3" height="15.0" fill="rgb(205,3,0)" rx="2" ry="2" />
+<text  x="413.78" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultDeleter&lt;ns3::SpectrumValue&gt;::Delete (196,986 samples, 0.02%)</title><rect x="326.0" y="469" width="0.1" height="15.0" fill="rgb(222,79,19)" rx="2" ry="2" />
+<text  x="328.98" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_erase (437,697 samples, 0.05%)</title><rect x="776.8" y="389" width="0.3" height="15.0" fill="rgb(247,197,47)" rx="2" ry="2" />
+<text  x="779.78" y="399.5" ></text>
+</g>
+<g >
+<title>std::less&lt;ns3::Scheduler::EventKey&gt;::operator (246,576 samples, 0.03%)</title><rect x="707.5" y="389" width="0.2" height="15.0" fill="rgb(234,137,32)" rx="2" ry="2" />
+<text  x="710.47" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::Packet::GetByteTagIterator (353,377 samples, 0.04%)</title><rect x="436.6" y="245" width="0.3" height="15.0" fill="rgb(211,31,7)" rx="2" ry="2" />
+<text  x="439.59" y="255.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::vector (435,841 samples, 0.04%)</title><rect x="147.1" y="437" width="0.3" height="15.0" fill="rgb(206,9,2)" rx="2" ry="2" />
+<text  x="150.06" y="447.5" ></text>
+</g>
+<g >
+<title>__fixunsxfti (505,737 samples, 0.05%)</title><rect x="683.5" y="485" width="0.4" height="15.0" fill="rgb(252,219,52)" rx="2" ry="2" />
+<text  x="686.50" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;* std::_Rb_tree&lt;ns3::TbId_t, std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::_Select1st&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::_M_create_node&lt;std::pair&lt;ns3::TbId_t, ns3::tbInfo_t&gt; &gt; (1,468,656 samples, 0.15%)</title><rect x="526.4" y="277" width="1.2" height="15.0" fill="rgb(234,136,32)" rx="2" ry="2" />
+<text  x="529.43" y="287.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;unsigned char&gt; &gt;::allocate (352,577 samples, 0.04%)</title><rect x="692.8" y="437" width="0.3" height="15.0" fill="rgb(243,177,42)" rx="2" ry="2" />
+<text  x="695.85" y="447.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::CqiListElement_s, std::allocator&lt;ns3::CqiListElement_s&gt; &gt;::end (186,918 samples, 0.02%)</title><rect x="106.6" y="485" width="0.1" height="15.0" fill="rgb(233,131,31)" rx="2" ry="2" />
+<text  x="109.56" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::AddPacket (2,019,519 samples, 0.21%)</title><rect x="22.0" y="357" width="1.6" height="15.0" fill="rgb(207,10,2)" rx="2" ry="2" />
+<text  x="24.97" y="367.5" ></text>
+</g>
+<g >
+<title>void std::destroy_at&lt;ns3::UlDciLteControlMessage&gt; (234,425 samples, 0.02%)</title><rect x="393.6" y="485" width="0.2" height="15.0" fill="rgb(242,171,40)" rx="2" ry="2" />
+<text  x="396.63" y="495.5" ></text>
+</g>
+<g >
+<title>std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;* std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_create_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; const&amp;&gt; (370,818 samples, 0.04%)</title><rect x="419.9" y="309" width="0.3" height="15.0" fill="rgb(230,116,27)" rx="2" ry="2" />
+<text  x="422.87" y="319.5" ></text>
+</g>
+<g >
+<title>std::tuple_element&lt;1ul, std::tuple&lt;ns3::LteInterference*, ns3::Ptr&lt;ns3::SpectrumValue const&gt;, unsigned int&gt; &gt;::type&amp; std::get&lt;1ul, ns3::LteInterference*, ns3::Ptr&lt;ns3::SpectrumValue const&gt;, unsigned int&gt; (881,128 samples, 0.09%)</title><rect x="754.1" y="597" width="0.7" height="15.0" fill="rgb(211,31,7)" rx="2" ry="2" />
+<text  x="757.07" y="607.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;::_Vector_base (623,026 samples, 0.06%)</title><rect x="212.6" y="405" width="0.5" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="215.63" y="415.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::vector (194,069 samples, 0.02%)</title><rect x="104.6" y="277" width="0.2" height="15.0" fill="rgb(239,156,37)" rx="2" ry="2" />
+<text  x="107.61" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::EventId::operator= (688,506 samples, 0.07%)</title><rect x="727.3" y="517" width="0.5" height="15.0" fill="rgb(241,165,39)" rx="2" ry="2" />
+<text  x="730.29" y="527.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;std::_List_node&lt;ns3::UlDciLteControlMessage&gt; &gt;::allocate (420,367 samples, 0.04%)</title><rect x="287.7" y="421" width="0.4" height="15.0" fill="rgb(206,6,1)" rx="2" ry="2" />
+<text  x="290.75" y="431.5" ></text>
+</g>
+<g >
+<title>bool __gnu_cxx::operator==&lt;ns3::CqiListElement_s const*, std::vector&lt;ns3::CqiListElement_s, std::allocator&lt;ns3::CqiListElement_s&gt; &gt; &gt; (158,030 samples, 0.02%)</title><rect x="254.4" y="501" width="0.1" height="15.0" fill="rgb(234,135,32)" rx="2" ry="2" />
+<text  x="257.37" y="511.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;std::_List_node&lt;ns3::UlDciLteControlMessage&gt; &gt;::allocate (397,126 samples, 0.04%)</title><rect x="287.8" y="405" width="0.3" height="15.0" fill="rgb(233,131,31)" rx="2" ry="2" />
+<text  x="290.76" y="415.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::MacCeListElement_s*, ns3::MacCeListElement_s&gt; (796,900 samples, 0.08%)</title><rect x="264.8" y="469" width="0.6" height="15.0" fill="rgb(209,20,5)" rx="2" ry="2" />
+<text  x="267.80" y="479.5" ></text>
+</g>
+<g >
+<title>std::is_constant_evaluated (159,721 samples, 0.02%)</title><rect x="357.6" y="437" width="0.2" height="15.0" fill="rgb(212,33,8)" rx="2" ry="2" />
+<text  x="360.64" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Object::DoDelete (238,924 samples, 0.02%)</title><rect x="36.6" y="565" width="0.2" height="15.0" fill="rgb(212,34,8)" rx="2" ry="2" />
+<text  x="39.64" y="575.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt;::_M_erase (3,534,925 samples, 0.36%)</title><rect x="349.5" y="517" width="2.8" height="15.0" fill="rgb(242,170,40)" rx="2" ry="2" />
+<text  x="352.49" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;* std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_Alloc_node::operator (346,575 samples, 0.04%)</title><rect x="668.6" y="405" width="0.2" height="15.0" fill="rgb(217,55,13)" rx="2" ry="2" />
+<text  x="671.56" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumModel const&gt;::Ptr (150,773 samples, 0.02%)</title><rect x="646.2" y="421" width="0.1" height="15.0" fill="rgb(232,125,30)" rx="2" ry="2" />
+<text  x="649.17" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt;&amp; std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;::emplace_back&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; (838,531 samples, 0.09%)</title><rect x="382.7" y="517" width="0.7" height="15.0" fill="rgb(228,106,25)" rx="2" ry="2" />
+<text  x="385.71" y="527.5" ></text>
+</g>
+<g >
+<title> (160,407 samples, 0.02%)</title><rect x="328.6" y="485" width="0.1" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="331.59" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt; &gt; &gt;::lower_bound (966,658 samples, 0.10%)</title><rect x="429.5" y="261" width="0.8" height="15.0" fill="rgb(213,37,8)" rx="2" ry="2" />
+<text  x="432.48" y="271.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::~vector (384,119 samples, 0.04%)</title><rect x="688.3" y="469" width="0.3" height="15.0" fill="rgb(243,174,41)" rx="2" ry="2" />
+<text  x="691.31" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Packet const&gt;::Ptr&lt;ns3::Packet&gt; (235,834 samples, 0.02%)</title><rect x="492.5" y="549" width="0.2" height="15.0" fill="rgb(218,60,14)" rx="2" ry="2" />
+<text  x="495.47" y="559.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue const&gt;::Ptr (238,944 samples, 0.02%)</title><rect x="714.9" y="517" width="0.2" height="15.0" fill="rgb(254,229,54)" rx="2" ry="2" />
+<text  x="717.93" y="527.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt;::erase (446,852 samples, 0.05%)</title><rect x="117.6" y="517" width="0.4" height="15.0" fill="rgb(213,39,9)" rx="2" ry="2" />
+<text  x="120.64" y="527.5" ></text>
+</g>
+<g >
+<title>decltype  (368,604 samples, 0.04%)</title><rect x="602.5" y="293" width="0.3" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="605.54" y="303.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;*, std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt; &gt; std::move&lt;__gnu_cxx::__normal_iterator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;*, std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;*, std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt; &gt; &gt; (1,076,159 samples, 0.11%)</title><rect x="357.0" y="501" width="0.9" height="15.0" fill="rgb(254,225,54)" rx="2" ry="2" />
+<text  x="360.03" y="511.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::BuildRarListElement_s*, ns3::BuildRarListElement_s&gt; (157,406 samples, 0.02%)</title><rect x="146.4" y="437" width="0.2" height="15.0" fill="rgb(213,38,9)" rx="2" ry="2" />
+<text  x="149.43" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; &gt; &gt;::_S_key (158,025 samples, 0.02%)</title><rect x="524.4" y="309" width="0.1" height="15.0" fill="rgb(210,26,6)" rx="2" ry="2" />
+<text  x="527.36" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt;* std::__copy_move_a1&lt;true, ns3::Ptr&lt;ns3::PacketBurst&gt;*, ns3::Ptr&lt;ns3::PacketBurst&gt;*&gt; (2,014,508 samples, 0.21%)</title><rect x="634.2" y="469" width="1.7" height="15.0" fill="rgb(219,68,16)" rx="2" ry="2" />
+<text  x="637.23" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::VendorSpecificListElement_s* std::__uninitialized_copy&lt;false&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::VendorSpecificListElement_s const*, std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt; &gt;, ns3::VendorSpecificListElement_s*&gt; (198,957 samples, 0.02%)</title><rect x="228.7" y="405" width="0.2" height="15.0" fill="rgb(227,101,24)" rx="2" ry="2" />
+<text  x="231.70" y="415.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt; &gt;::construct&lt;ns3::Ptr&lt;ns3::Packet&gt;, ns3::Ptr&lt;ns3::Packet&gt; const&amp;&gt; (408,582 samples, 0.04%)</title><rect x="363.6" y="453" width="0.4" height="15.0" fill="rgb(254,228,54)" rx="2" ry="2" />
+<text  x="366.64" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::HarqProcessInfoElement_t* std::__uninitialized_copy&lt;true&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::HarqProcessInfoElement_t const*, std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt;, ns3::HarqProcessInfoElement_t*&gt; (419,766 samples, 0.04%)</title><rect x="591.5" y="229" width="0.3" height="15.0" fill="rgb(238,156,37)" rx="2" ry="2" />
+<text  x="594.49" y="239.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; &gt; &gt;::find (1,985,670 samples, 0.20%)</title><rect x="465.1" y="533" width="1.6" height="15.0" fill="rgb(223,83,20)" rx="2" ry="2" />
+<text  x="468.11" y="543.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::at (197,283 samples, 0.02%)</title><rect x="302.4" y="469" width="0.2" height="15.0" fill="rgb(220,69,16)" rx="2" ry="2" />
+<text  x="305.40" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt;::_Vector_base (426,707 samples, 0.04%)</title><rect x="228.9" y="437" width="0.3" height="15.0" fill="rgb(216,55,13)" rx="2" ry="2" />
+<text  x="231.89" y="447.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::_M_check_len (249,636 samples, 0.03%)</title><rect x="572.9" y="309" width="0.2" height="15.0" fill="rgb(229,114,27)" rx="2" ry="2" />
+<text  x="575.88" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultDeleter&lt;ns3::SpectrumValue&gt;::Delete (433,382 samples, 0.04%)</title><rect x="717.6" y="469" width="0.3" height="15.0" fill="rgb(222,79,19)" rx="2" ry="2" />
+<text  x="720.58" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::FfMacSchedSapProvider::SchedDlRlcBufferReqParameters::operator= (1,434,031 samples, 0.15%)</title><rect x="25.5" y="309" width="1.2" height="15.0" fill="rgb(232,125,29)" rx="2" ry="2" />
+<text  x="28.52" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter&gt;::Unref (3,158,900 samples, 0.33%)</title><rect x="75.3" y="421" width="2.6" height="15.0" fill="rgb(221,78,18)" rx="2" ry="2" />
+<text  x="78.35" y="431.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;::pair&lt;ns3::TbId_t, ns3::tbInfo_t&gt; (581,670 samples, 0.06%)</title><rect x="384.9" y="405" width="0.4" height="15.0" fill="rgb(223,87,20)" rx="2" ry="2" />
+<text  x="387.85" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::TypeId::GetAttributeN (149,666 samples, 0.02%)</title><rect x="119.5" y="453" width="0.1" height="15.0" fill="rgb(225,95,22)" rx="2" ry="2" />
+<text  x="122.47" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::BuildDataListElement_s, std::allocator&lt;ns3::BuildDataListElement_s&gt; &gt;::vector (296,060 samples, 0.03%)</title><rect x="94.9" y="437" width="0.3" height="15.0" fill="rgb(225,95,22)" rx="2" ry="2" />
+<text  x="97.95" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy::SendControlChannels (63,350,263 samples, 6.53%)</title><rect x="296.7" y="549" width="51.0" height="15.0" fill="rgb(227,105,25)" rx="2" ry="2" />
+<text  x="299.73" y="559.5" >ns3::..</text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Packet&gt;::operator (160,485 samples, 0.02%)</title><rect x="368.5" y="517" width="0.1" height="15.0" fill="rgb(224,88,21)" rx="2" ry="2" />
+<text  x="371.48" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::Object::GetTypeId (544,814 samples, 0.06%)</title><rect x="537.3" y="277" width="0.4" height="15.0" fill="rgb(234,134,32)" rx="2" ry="2" />
+<text  x="540.27" y="287.5" ></text>
+</g>
+<g >
+<title>std::less&lt;ns3::LteFlowId_t&gt;::operator (150,830 samples, 0.02%)</title><rect x="182.3" y="421" width="0.1" height="15.0" fill="rgb(252,218,52)" rx="2" ry="2" />
+<text  x="185.33" y="431.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::MacCeListElement_s, std::allocator&lt;ns3::MacCeListElement_s&gt; &gt;::~vector (237,617 samples, 0.02%)</title><rect x="133.3" y="501" width="0.2" height="15.0" fill="rgb(206,5,1)" rx="2" ry="2" />
+<text  x="136.29" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::TypeId::operator= (327,866 samples, 0.03%)</title><rect x="543.3" y="277" width="0.3" height="15.0" fill="rgb(211,28,6)" rx="2" ry="2" />
+<text  x="546.35" y="287.5" ></text>
+</g>
+<g >
+<title>bool __gnu_cxx::operator==&lt;ns3::VendorSpecificListElement_s const*, std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt; &gt; (316,067 samples, 0.03%)</title><rect x="475.9" y="229" width="0.2" height="15.0" fill="rgb(233,131,31)" rx="2" ry="2" />
+<text  x="478.87" y="239.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;int&gt; &gt;::deallocate (169,673 samples, 0.02%)</title><rect x="575.2" y="309" width="0.1" height="15.0" fill="rgb(250,207,49)" rx="2" ry="2" />
+<text  x="578.16" y="319.5" ></text>
+</g>
+<g >
+<title>void std::_Bind&lt;void  (22,443,594 samples, 2.31%)</title><rect x="17.2" y="661" width="18.0" height="15.0" fill="rgb(242,174,41)" rx="2" ry="2" />
+<text  x="20.17" y="671.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::SpectrumValue, ns3::Empty, ns3::DefaultDeleter&lt;ns3::SpectrumValue&gt; &gt;::Unref (165,191 samples, 0.02%)</title><rect x="481.6" y="309" width="0.2" height="15.0" fill="rgb(246,189,45)" rx="2" ry="2" />
+<text  x="484.64" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::VendorSpecificListElement_s* std::__copy_move_a1&lt;false, ns3::VendorSpecificListElement_s const*, ns3::VendorSpecificListElement_s*&gt; (181,476 samples, 0.02%)</title><rect x="26.1" y="245" width="0.1" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="29.05" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::Object::Construct (260,304 samples, 0.03%)</title><rect x="162.8" y="421" width="0.3" height="15.0" fill="rgb(228,108,26)" rx="2" ry="2" />
+<text  x="165.85" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; &gt; &gt;::_M_lower_bound (993,953 samples, 0.10%)</title><rect x="465.6" y="501" width="0.8" height="15.0" fill="rgb(226,97,23)" rx="2" ry="2" />
+<text  x="468.59" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultSimulatorImpl::ProcessOneEvent (22,443,594 samples, 2.31%)</title><rect x="17.2" y="773" width="18.0" height="15.0" fill="rgb(211,30,7)" rx="2" ry="2" />
+<text  x="20.17" y="783.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, unsigned char*&gt; (204,725 samples, 0.02%)</title><rect x="147.2" y="405" width="0.2" height="15.0" fill="rgb(227,104,25)" rx="2" ry="2" />
+<text  x="150.24" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::SpectrumValue, ns3::Empty, ns3::DefaultDeleter&lt;ns3::SpectrumValue&gt; &gt;::operator= (239,557 samples, 0.02%)</title><rect x="316.9" y="405" width="0.2" height="15.0" fill="rgb(250,210,50)" rx="2" ry="2" />
+<text  x="319.94" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::~_Rb_tree (270,414 samples, 0.03%)</title><rect x="341.4" y="453" width="0.2" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="344.36" y="463.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;is_member_pointer_v&lt;void  (1,840,445 samples, 0.19%)</title><rect x="62.9" y="517" width="1.5" height="15.0" fill="rgb(241,170,40)" rx="2" ry="2" />
+<text  x="65.92" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::Object::Object (2,165,809 samples, 0.22%)</title><rect x="536.9" y="293" width="1.8" height="15.0" fill="rgb(242,174,41)" rx="2" ry="2" />
+<text  x="539.92" y="303.5" ></text>
+</g>
+<g >
+<title>std::set&lt;unsigned short, std::less&lt;unsigned short&gt;, std::allocator&lt;unsigned short&gt; &gt;::find (148,308 samples, 0.02%)</title><rect x="121.8" y="533" width="0.1" height="15.0" fill="rgb(207,12,2)" rx="2" ry="2" />
+<text  x="124.79" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::operator[] (190,175 samples, 0.02%)</title><rect x="327.2" y="485" width="0.1" height="15.0" fill="rgb(248,202,48)" rx="2" ry="2" />
+<text  x="330.15" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_S_left (158,793 samples, 0.02%)</title><rect x="337.3" y="373" width="0.2" height="15.0" fill="rgb(231,120,28)" rx="2" ry="2" />
+<text  x="340.35" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;int, std::allocator&lt;int&gt; &gt;::_Vector_impl::_Vector_impl (165,440 samples, 0.02%)</title><rect x="91.4" y="517" width="0.1" height="15.0" fill="rgb(236,142,34)" rx="2" ry="2" />
+<text  x="94.41" y="527.5" ></text>
+</g>
+<g >
+<title>void std::vector&lt;ns3::BuildDataListElement_s, std::allocator&lt;ns3::BuildDataListElement_s&gt; &gt;::_M_realloc_insert&lt;ns3::BuildDataListElement_s const&amp;&gt; (3,684,590 samples, 0.38%)</title><rect x="202.4" y="469" width="2.9" height="15.0" fill="rgb(238,153,36)" rx="2" ry="2" />
+<text  x="205.35" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_decrement (156,793 samples, 0.02%)</title><rect x="272.6" y="405" width="0.2" height="15.0" fill="rgb(238,152,36)" rx="2" ry="2" />
+<text  x="275.64" y="415.5" ></text>
+</g>
+<g >
+<title>decltype  (2,332,441 samples, 0.24%)</title><rect x="352.4" y="501" width="1.9" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="355.42" y="511.5" ></text>
+</g>
+<g >
+<title>double* std::__uninitialized_default_n_1&lt;true&gt;::__uninit_default_n&lt;double*, unsigned long&gt; (153,593 samples, 0.02%)</title><rect x="316.3" y="325" width="0.1" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="319.25" y="335.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_List_base (403,989 samples, 0.04%)</title><rect x="497.7" y="533" width="0.3" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="500.72" y="543.5" ></text>
+</g>
+<g >
+<title>bool __gnu_cxx::operator==&lt;ns3::RlcPduListElement_s const*, std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; (346,484 samples, 0.04%)</title><rect x="212.3" y="341" width="0.2" height="15.0" fill="rgb(251,212,50)" rx="2" ry="2" />
+<text  x="215.26" y="351.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_Auto_node::_Auto_node&lt;std::pair&lt;int, double&gt; &gt; (461,183 samples, 0.05%)</title><rect x="293.1" y="485" width="0.4" height="15.0" fill="rgb(205,4,1)" rx="2" ry="2" />
+<text  x="296.13" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::DlCqiLteControlMessage::~DlCqiLteControlMessage (197,585 samples, 0.02%)</title><rect x="497.4" y="437" width="0.2" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="500.43" y="447.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::operator= (458,503 samples, 0.05%)</title><rect x="61.6" y="533" width="0.4" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="64.63" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt;::Ptr (272,135 samples, 0.03%)</title><rect x="724.9" y="437" width="0.2" height="15.0" fill="rgb(219,67,16)" rx="2" ry="2" />
+<text  x="727.89" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::TagBuffer::ReadU32 (197,361 samples, 0.02%)</title><rect x="436.7" y="181" width="0.1" height="15.0" fill="rgb(252,216,51)" rx="2" ry="2" />
+<text  x="439.65" y="191.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumSignalParameters::~SpectrumSignalParameters (184,600 samples, 0.02%)</title><rect x="654.0" y="437" width="0.2" height="15.0" fill="rgb(205,2,0)" rx="2" ry="2" />
+<text  x="657.02" y="447.5" ></text>
+</g>
+<g >
+<title>double* std::fill_n&lt;double*, unsigned long, double&gt; (162,027 samples, 0.02%)</title><rect x="57.1" y="389" width="0.1" height="15.0" fill="rgb(234,135,32)" rx="2" ry="2" />
+<text  x="60.11" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultSimulatorImpl::Run (922,121,412 samples, 95.09%)</title><rect x="36.8" y="757" width="741.7" height="15.0" fill="rgb(207,11,2)" rx="2" ry="2" />
+<text  x="39.84" y="767.5" >ns3::DefaultSimulatorImpl::Run</text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_Vector_impl::_Vector_impl (183,612 samples, 0.02%)</title><rect x="688.9" y="405" width="0.1" height="15.0" fill="rgb(226,98,23)" rx="2" ry="2" />
+<text  x="691.88" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;5ul, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::_Tuple_impl (165,624 samples, 0.02%)</title><rect x="87.8" y="309" width="0.2" height="15.0" fill="rgb(221,74,17)" rx="2" ry="2" />
+<text  x="90.82" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::MakeEvent&lt;void  (2,408,455 samples, 0.25%)</title><rect x="666.0" y="485" width="2.0" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="669.02" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::Copy (10,413,233 samples, 1.07%)</title><rect x="358.8" y="533" width="8.4" height="15.0" fill="rgb(240,161,38)" rx="2" ry="2" />
+<text  x="361.81" y="543.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;* std::__niter_base&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;*, std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt; &gt; (157,965 samples, 0.02%)</title><rect x="357.8" y="469" width="0.1" height="15.0" fill="rgb(209,18,4)" rx="2" ry="2" />
+<text  x="360.77" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::~PacketBurst (2,458,313 samples, 0.25%)</title><rect x="549.1" y="261" width="2.0" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="552.14" y="271.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::_S_key (157,744 samples, 0.02%)</title><rect x="244.1" y="421" width="0.1" height="15.0" fill="rgb(210,26,6)" rx="2" ry="2" />
+<text  x="247.10" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::EventId::EventId (646,382 samples, 0.07%)</title><rect x="305.0" y="469" width="0.5" height="15.0" fill="rgb(206,4,1)" rx="2" ry="2" />
+<text  x="307.98" y="479.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::operator[] (3,043,186 samples, 0.31%)</title><rect x="190.6" y="485" width="2.5" height="15.0" fill="rgb(219,66,15)" rx="2" ry="2" />
+<text  x="193.64" y="495.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;::_M_ptr (179,937 samples, 0.02%)</title><rect x="385.6" y="437" width="0.1" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="388.57" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Head_base&lt;1ul, ns3::Ptr&lt;ns3::SpectrumValue const&gt;, false&gt;::_Head_base (380,537 samples, 0.04%)</title><rect x="712.2" y="357" width="0.3" height="15.0" fill="rgb(206,5,1)" rx="2" ry="2" />
+<text  x="715.21" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumModel const&gt;::Acquire (127,934 samples, 0.01%)</title><rect x="405.4" y="485" width="0.1" height="15.0" fill="rgb(222,80,19)" rx="2" ry="2" />
+<text  x="408.37" y="495.5" ></text>
+</g>
+<g >
+<title>unsigned short&amp;&amp; std::forward&lt;unsigned short&gt; (242,245 samples, 0.02%)</title><rect x="479.4" y="277" width="0.2" height="15.0" fill="rgb(227,104,24)" rx="2" ry="2" />
+<text  x="482.44" y="287.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::__uninitialized_copy&lt;true&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, unsigned char*&gt; (650,532 samples, 0.07%)</title><rect x="687.7" y="421" width="0.5" height="15.0" fill="rgb(233,129,30)" rx="2" ry="2" />
+<text  x="690.72" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::~SpectrumValue (362,265 samples, 0.04%)</title><rect x="728.3" y="437" width="0.3" height="15.0" fill="rgb(247,193,46)" rx="2" ry="2" />
+<text  x="731.27" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter&gt;::Unref (191,238 samples, 0.02%)</title><rect x="97.0" y="421" width="0.1" height="15.0" fill="rgb(221,78,18)" rx="2" ry="2" />
+<text  x="99.98" y="431.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_assign_dispatch&lt;std::_List_const_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; (776,735 samples, 0.08%)</title><rect x="346.4" y="501" width="0.6" height="15.0" fill="rgb(237,148,35)" rx="2" ry="2" />
+<text  x="349.41" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::TbId_t, std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::_Select1st&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::_M_get_insert_hint_unique_pos (485,965 samples, 0.05%)</title><rect x="528.3" y="293" width="0.4" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="531.28" y="303.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::end (220,899 samples, 0.02%)</title><rect x="746.2" y="517" width="0.1" height="15.0" fill="rgb(237,147,35)" rx="2" ry="2" />
+<text  x="749.17" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;::_Vector_impl_data::_M_swap_data (195,859 samples, 0.02%)</title><rect x="350.3" y="389" width="0.1" height="15.0" fill="rgb(239,156,37)" rx="2" ry="2" />
+<text  x="353.29" y="399.5" ></text>
+</g>
+<g >
+<title>__dynamic_cast (271,796 samples, 0.03%)</title><rect x="736.7" y="517" width="0.2" height="15.0" fill="rgb(227,102,24)" rx="2" ry="2" />
+<text  x="739.72" y="527.5" ></text>
+</g>
+<g >
+<title>unsigned short* std::__uninitialized_copy&lt;true&gt;::__uninit_copy&lt;std::move_iterator&lt;unsigned short*&gt;, unsigned short*&gt; (154,651 samples, 0.02%)</title><rect x="106.3" y="389" width="0.1" height="15.0" fill="rgb(226,97,23)" rx="2" ry="2" />
+<text  x="109.25" y="399.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::end (326,697 samples, 0.03%)</title><rect x="213.8" y="469" width="0.2" height="15.0" fill="rgb(205,0,0)" rx="2" ry="2" />
+<text  x="216.76" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Bit_iterator::_Bit_iterator (156,996 samples, 0.02%)</title><rect x="202.1" y="405" width="0.2" height="15.0" fill="rgb(222,78,18)" rx="2" ry="2" />
+<text  x="205.13" y="415.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned char, unsigned int, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, unsigned int&gt; &gt; &gt;::empty (277,085 samples, 0.03%)</title><rect x="253.9" y="517" width="0.2" height="15.0" fill="rgb(251,212,50)" rx="2" ry="2" />
+<text  x="256.90" y="527.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::PacketMetadata::Data*, std::allocator&lt;ns3::PacketMetadata::Data*&gt; &gt;::begin (175,095 samples, 0.02%)</title><rect x="15.1" y="325" width="0.1" height="15.0" fill="rgb(220,70,16)" rx="2" ry="2" />
+<text  x="18.10" y="335.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_S_key (553,980 samples, 0.06%)</title><rect x="663.4" y="389" width="0.4" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="666.38" y="399.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt;::allocate (185,863 samples, 0.02%)</title><rect x="261.0" y="309" width="0.2" height="15.0" fill="rgb(232,124,29)" rx="2" ry="2" />
+<text  x="264.02" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumModel const&gt;::operator* (233,289 samples, 0.02%)</title><rect x="326.5" y="485" width="0.2" height="15.0" fill="rgb(254,228,54)" rx="2" ry="2" />
+<text  x="329.52" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt; &gt;::operator* (587,602 samples, 0.06%)</title><rect x="183.4" y="485" width="0.5" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="186.45" y="495.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::VendorSpecificListElement_s*&gt; (234,807 samples, 0.02%)</title><rect x="263.9" y="357" width="0.2" height="15.0" fill="rgb(236,143,34)" rx="2" ry="2" />
+<text  x="266.87" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::EventId ns3::Simulator::ScheduleNow&lt;void  (1,222,846 samples, 0.13%)</title><rect x="52.9" y="549" width="1.0" height="15.0" fill="rgb(214,41,9)" rx="2" ry="2" />
+<text  x="55.89" y="559.5" ></text>
+</g>
+<g >
+<title>std::function&lt;void  (2,750,000 samples, 0.28%)</title><rect x="710.3" y="469" width="2.2" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="713.33" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::TagBuffer::ReadU8 (285,405 samples, 0.03%)</title><rect x="426.9" y="165" width="0.2" height="15.0" fill="rgb(242,174,41)" rx="2" ry="2" />
+<text  x="429.92" y="175.5" ></text>
+</g>
+<g >
+<title>void std::__invoke_impl&lt;void, std::_Bind&lt;void  (886,915,093 samples, 91.46%)</title><rect x="44.9" y="645" width="713.3" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="47.85" y="655.5" >void std::__invoke_impl&lt;void, std::_Bind&lt;void </text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; std::map&lt;ns3::Scheduler::EventKey, ns3::EventImpl*, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::emplace_hint&lt;std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (953,823 samples, 0.10%)</title><rect x="706.4" y="437" width="0.8" height="15.0" fill="rgb(253,224,53)" rx="2" ry="2" />
+<text  x="709.45" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::TbId_t, std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::_Select1st&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::end (332,913 samples, 0.03%)</title><rect x="529.8" y="309" width="0.3" height="15.0" fill="rgb(250,210,50)" rx="2" ry="2" />
+<text  x="532.84" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::CeBitmap_e* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::CeBitmap_e const*, std::vector&lt;ns3::CeBitmap_e, std::allocator&lt;ns3::CeBitmap_e&gt; &gt; &gt;, ns3::CeBitmap_e*&gt; (492,021 samples, 0.05%)</title><rect x="203.8" y="373" width="0.4" height="15.0" fill="rgb(233,131,31)" rx="2" ry="2" />
+<text  x="206.84" y="383.5" ></text>
+</g>
+<g >
+<title>unsigned short const&amp; std::__get_helper&lt;0ul, unsigned short const&amp;&gt; (277,874 samples, 0.03%)</title><rect x="191.4" y="325" width="0.3" height="15.0" fill="rgb(238,154,36)" rx="2" ry="2" />
+<text  x="194.45" y="335.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt;::_M_ptr (311,832 samples, 0.03%)</title><rect x="723.6" y="453" width="0.2" height="15.0" fill="rgb(254,228,54)" rx="2" ry="2" />
+<text  x="726.56" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::ObjectBase::~ObjectBase (202,260 samples, 0.02%)</title><rect x="77.1" y="309" width="0.1" height="15.0" fill="rgb(232,126,30)" rx="2" ry="2" />
+<text  x="80.07" y="319.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;bool, std::allocator&lt;bool&gt; &gt;::_M_check_len (234,878 samples, 0.02%)</title><rect x="247.8" y="437" width="0.2" height="15.0" fill="rgb(226,100,23)" rx="2" ry="2" />
+<text  x="250.79" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::LteRadioBearerTag::Deserialize (721,482 samples, 0.07%)</title><rect x="490.1" y="517" width="0.6" height="15.0" fill="rgb(231,121,28)" rx="2" ry="2" />
+<text  x="493.10" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Function_handler&lt;void  (916,117 samples, 0.09%)</title><rect x="725.8" y="389" width="0.8" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="728.82" y="399.5" ></text>
+</g>
+<g >
+<title>operator new (333,876 samples, 0.03%)</title><rect x="239.5" y="181" width="0.3" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="242.54" y="191.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;int, double&gt;::pair&lt;int&amp;, double&amp;&gt; (314,047 samples, 0.03%)</title><rect x="296.2" y="533" width="0.2" height="15.0" fill="rgb(217,57,13)" rx="2" ry="2" />
+<text  x="299.16" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Select1st&lt;std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt; &gt;::operator (203,288 samples, 0.02%)</title><rect x="55.6" y="421" width="0.2" height="15.0" fill="rgb(254,229,54)" rx="2" ry="2" />
+<text  x="58.59" y="431.5" ></text>
+</g>
+<g >
+<title>std::this_thread::get_id (261,839 samples, 0.03%)</title><rect x="665.8" y="469" width="0.2" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="668.77" y="479.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::~_List_base (277,280 samples, 0.03%)</title><rect x="463.7" y="357" width="0.2" height="15.0" fill="rgb(221,74,17)" rx="2" ry="2" />
+<text  x="466.71" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::MapScheduler::Insert (146,147 samples, 0.02%)</title><rect x="614.1" y="469" width="0.2" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="617.14" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::_M_get_insert_hint_unique_pos (424,499 samples, 0.04%)</title><rect x="192.3" y="453" width="0.3" height="15.0" fill="rgb(206,6,1)" rx="2" ry="2" />
+<text  x="195.29" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;::clear (165,983 samples, 0.02%)</title><rect x="464.6" y="533" width="0.1" height="15.0" fill="rgb(253,223,53)" rx="2" ry="2" />
+<text  x="467.56" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::EventImpl&gt;::Ptr (596,385 samples, 0.06%)</title><rect x="277.6" y="501" width="0.5" height="15.0" fill="rgb(239,157,37)" rx="2" ry="2" />
+<text  x="280.58" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt;::_M_allocate (381,294 samples, 0.04%)</title><rect x="261.9" y="485" width="0.3" height="15.0" fill="rgb(227,102,24)" rx="2" ry="2" />
+<text  x="264.93" y="495.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;double&gt; &gt;::allocate (168,940 samples, 0.02%)</title><rect x="78.5" y="421" width="0.2" height="15.0" fill="rgb(234,136,32)" rx="2" ry="2" />
+<text  x="81.52" y="431.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::TypeId::AttributeInformation, std::allocator&lt;ns3::TypeId::AttributeInformation&gt; &gt;::size (214,385 samples, 0.02%)</title><rect x="541.6" y="229" width="0.2" height="15.0" fill="rgb(230,117,28)" rx="2" ry="2" />
+<text  x="544.62" y="239.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt; &gt;::_M_end (171,031 samples, 0.02%)</title><rect x="73.6" y="469" width="0.1" height="15.0" fill="rgb(243,176,42)" rx="2" ry="2" />
+<text  x="76.61" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::LteInterference*&amp; std::forward&lt;ns3::LteInterference*&amp;&gt; (156,121 samples, 0.02%)</title><rect x="51.2" y="581" width="0.1" height="15.0" fill="rgb(211,27,6)" rx="2" ry="2" />
+<text  x="54.16" y="591.5" ></text>
+</g>
+<g >
+<title>operator new (167,253 samples, 0.02%)</title><rect x="71.9" y="421" width="0.1" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="74.91" y="431.5" ></text>
+</g>
+<g >
+<title>std::map&lt;ns3::Scheduler::EventKey, ns3::EventImpl*, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::key_comp (280,831 samples, 0.03%)</title><rect x="273.1" y="469" width="0.2" height="15.0" fill="rgb(213,39,9)" rx="2" ry="2" />
+<text  x="276.11" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::PhichListElement_s* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::PhichListElement_s const*, std::vector&lt;ns3::PhichListElement_s, std::allocator&lt;ns3::PhichListElement_s&gt; &gt; &gt;, ns3::PhichListElement_s*&gt; (202,017 samples, 0.02%)</title><rect x="227.5" y="421" width="0.2" height="15.0" fill="rgb(238,153,36)" rx="2" ry="2" />
+<text  x="230.50" y="431.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, std::vector&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt;, std::allocator&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt;, std::allocator&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt;::find (1,363,562 samples, 0.14%)</title><rect x="187.8" y="485" width="1.1" height="15.0" fill="rgb(238,154,37)" rx="2" ry="2" />
+<text  x="190.84" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::lower_bound (2,165,306 samples, 0.22%)</title><rect x="84.4" y="421" width="1.7" height="15.0" fill="rgb(254,228,54)" rx="2" ry="2" />
+<text  x="87.37" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt; &gt;::end (151,000 samples, 0.02%)</title><rect x="651.1" y="469" width="0.1" height="15.0" fill="rgb(218,60,14)" rx="2" ry="2" />
+<text  x="654.11" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::TypeId::GetAttributeN (1,373,694 samples, 0.14%)</title><rect x="372.8" y="469" width="1.1" height="15.0" fill="rgb(225,95,22)" rx="2" ry="2" />
+<text  x="375.78" y="479.5" ></text>
+</g>
+<g >
+<title>void std::__invoke_impl&lt;void, ns3::Callback&lt;void, ns3::SpectrumValue const&amp;&gt;::Callback&lt;void  (324,769 samples, 0.03%)</title><rect x="611.9" y="437" width="0.3" height="15.0" fill="rgb(245,184,44)" rx="2" ry="2" />
+<text  x="614.94" y="447.5" ></text>
+</g>
+<g >
+<title>void std::vector&lt;int, std::allocator&lt;int&gt; &gt;::_M_realloc_insert&lt;int const&amp;&gt; (1,905,826 samples, 0.20%)</title><rect x="397.1" y="533" width="1.6" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="400.12" y="543.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;ns3::UlDciLteControlMessage&gt;::_M_ptr (143,958 samples, 0.01%)</title><rect x="287.3" y="437" width="0.1" height="15.0" fill="rgb(233,131,31)" rx="2" ry="2" />
+<text  x="290.30" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;::_M_valptr (126,568 samples, 0.01%)</title><rect x="81.9" y="421" width="0.2" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="84.95" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::DlDciListElement_s::~DlDciListElement_s (221,743 samples, 0.02%)</title><rect x="139.3" y="469" width="0.2" height="15.0" fill="rgb(219,64,15)" rx="2" ry="2" />
+<text  x="142.29" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::LteRlcSpecificLteMacSapUser::NotifyTxOpportunity (1,376,216 samples, 0.14%)</title><rect x="15.9" y="421" width="1.1" height="15.0" fill="rgb(249,204,48)" rx="2" ry="2" />
+<text  x="18.88" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::ByteTagList::Iterator::PrepareForNext (236,079 samples, 0.02%)</title><rect x="436.6" y="197" width="0.2" height="15.0" fill="rgb(206,5,1)" rx="2" ry="2" />
+<text  x="439.62" y="207.5" ></text>
+</g>
+<g >
+<title>std::_Bvector_base&lt;std::allocator&lt;bool&gt; &gt;::_Bvector_impl_data::_Bvector_impl_data (156,996 samples, 0.02%)</title><rect x="202.1" y="421" width="0.2" height="15.0" fill="rgb(214,45,10)" rx="2" ry="2" />
+<text  x="205.13" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::Angles::Angles (3,272,025 samples, 0.34%)</title><rect x="309.5" y="501" width="2.7" height="15.0" fill="rgb(254,226,54)" rx="2" ry="2" />
+<text  x="312.54" y="511.5" ></text>
+</g>
+<g >
+<title>double* std::__copy_move_a2&lt;false, double const*, double*&gt; (447,358 samples, 0.05%)</title><rect x="647.6" y="357" width="0.3" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="650.56" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumSignalParametersDataFrame::LteSpectrumSignalParametersDataFrame (5,596,120 samples, 0.58%)</title><rect x="644.6" y="485" width="4.5" height="15.0" fill="rgb(206,8,1)" rx="2" ry="2" />
+<text  x="647.56" y="495.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_List_impl::_List_impl (157,771 samples, 0.02%)</title><rect x="721.4" y="469" width="0.1" height="15.0" fill="rgb(244,183,43)" rx="2" ry="2" />
+<text  x="724.37" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::EventId ns3::Simulator::Schedule&lt;void  (2,167,776 samples, 0.22%)</title><rect x="108.3" y="533" width="1.7" height="15.0" fill="rgb(253,224,53)" rx="2" ry="2" />
+<text  x="111.25" y="543.5" ></text>
+</g>
+<g >
+<title>std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;::_M_valptr (151,932 samples, 0.02%)</title><rect x="356.1" y="485" width="0.1" height="15.0" fill="rgb(207,10,2)" rx="2" ry="2" />
+<text  x="359.07" y="495.5" ></text>
+</g>
+<g >
+<title>unsigned int&amp; std::__get_helper&lt;2ul, unsigned int&gt; (272,452 samples, 0.03%)</title><rect x="756.3" y="581" width="0.2" height="15.0" fill="rgb(211,31,7)" rx="2" ry="2" />
+<text  x="759.33" y="591.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbMac::DoReceiveLteControlMessage (20,358,746 samples, 2.10%)</title><rect x="445.5" y="341" width="16.4" height="15.0" fill="rgb(229,110,26)" rx="2" ry="2" />
+<text  x="448.50" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::ObjectBase::ConstructSelf (2,873,447 samples, 0.30%)</title><rect x="372.3" y="485" width="2.3" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="375.26" y="495.5" ></text>
+</g>
+<g >
+<title>double* std::__niter_base&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; (155,897 samples, 0.02%)</title><rect x="114.1" y="341" width="0.2" height="15.0" fill="rgb(245,186,44)" rx="2" ry="2" />
+<text  x="117.14" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::PacketTagList::COWTraverse (1,126,525 samples, 0.12%)</title><rect x="430.8" y="293" width="0.9" height="15.0" fill="rgb(252,219,52)" rx="2" ry="2" />
+<text  x="433.75" y="303.5" ></text>
+</g>
+<g >
+<title>std::tuple_element&lt;5ul, std::tuple&lt;ns3::MultiModelSpectrumChannel*, ns3::Ptr&lt;ns3::SpectrumValue&gt;, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt; &gt;::type&amp; std::get&lt;5ul, ns3::MultiModelSpectrumChannel*, ns3::Ptr&lt;ns3::SpectrumValue&gt;, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt; (744,917 samples, 0.08%)</title><rect x="757.4" y="597" width="0.6" height="15.0" fill="rgb(242,174,41)" rx="2" ry="2" />
+<text  x="760.40" y="607.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumPhy::GetMobility (303,143 samples, 0.03%)</title><rect x="643.8" y="517" width="0.2" height="15.0" fill="rgb(228,107,25)" rx="2" ry="2" />
+<text  x="646.80" y="527.5" ></text>
+</g>
+<g >
+<title>std::_List_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::insert&lt;std::_List_const_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;, void&gt; (411,083 samples, 0.04%)</title><rect x="648.7" y="437" width="0.4" height="15.0" fill="rgb(210,23,5)" rx="2" ry="2" />
+<text  x="651.73" y="447.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt; &gt;::destroy&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; (190,528 samples, 0.02%)</title><rect x="506.4" y="453" width="0.1" height="15.0" fill="rgb(209,18,4)" rx="2" ry="2" />
+<text  x="509.38" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt;::size (173,421 samples, 0.02%)</title><rect x="525.8" y="309" width="0.2" height="15.0" fill="rgb(216,50,12)" rx="2" ry="2" />
+<text  x="528.83" y="319.5" ></text>
+</g>
+<g >
+<title>std::map&lt;int, double, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::~map (804,188 samples, 0.08%)</title><rect x="60.5" y="517" width="0.7" height="15.0" fill="rgb(218,61,14)" rx="2" ry="2" />
+<text  x="63.52" y="527.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::IidManager::IidInformation, std::allocator&lt;ns3::IidManager::IidInformation&gt; &gt;::operator[] (150,378 samples, 0.02%)</title><rect x="373.4" y="421" width="0.1" height="15.0" fill="rgb(214,41,9)" rx="2" ry="2" />
+<text  x="376.36" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_Auto_node::_M_insert (220,811 samples, 0.02%)</title><rect x="661.7" y="405" width="0.1" height="15.0" fill="rgb(213,38,9)" rx="2" ry="2" />
+<text  x="664.65" y="415.5" ></text>
+</g>
+<g >
+<title>double* std::__uninitialized_default_n&lt;double*, unsigned long&gt; (197,197 samples, 0.02%)</title><rect x="646.6" y="357" width="0.2" height="15.0" fill="rgb(231,123,29)" rx="2" ry="2" />
+<text  x="649.59" y="367.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapProvider::ReportBufferStatusParameters&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider::ReportBufferStatusParameters&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider::ReportBufferStatusParameters&gt; &gt; &gt;::begin (295,218 samples, 0.03%)</title><rect x="569.4" y="309" width="0.3" height="15.0" fill="rgb(240,163,39)" rx="2" ry="2" />
+<text  x="572.43" y="319.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Callback&lt;void, ns3::Ptr&lt;ns3::PacketBurst const&gt; &gt;, std::allocator&lt;ns3::Callback&lt;void, ns3::Ptr&lt;ns3::PacketBurst const&gt; &gt; &gt; &gt;::begin (233,931 samples, 0.02%)</title><rect x="672.7" y="517" width="0.1" height="15.0" fill="rgb(243,175,41)" rx="2" ry="2" />
+<text  x="675.66" y="527.5" ></text>
+</g>
+<g >
+<title>bool __gnu_cxx::operator==&lt;ns3::PhichListElement_s const*, std::vector&lt;ns3::PhichListElement_s, std::allocator&lt;ns3::PhichListElement_s&gt; &gt; &gt; (161,679 samples, 0.02%)</title><rect x="227.5" y="373" width="0.2" height="15.0" fill="rgb(222,82,19)" rx="2" ry="2" />
+<text  x="230.53" y="383.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;unsigned short*, unsigned short&gt; (155,477 samples, 0.02%)</title><rect x="473.1" y="261" width="0.2" height="15.0" fill="rgb(210,23,5)" rx="2" ry="2" />
+<text  x="476.13" y="271.5" ></text>
+</g>
+<g >
+<title>std::__allocated_ptr&lt;std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt; &gt;::__allocated_ptr (199,424 samples, 0.02%)</title><rect x="363.0" y="453" width="0.1" height="15.0" fill="rgb(206,6,1)" rx="2" ry="2" />
+<text  x="365.97" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::LtePhy::SetControlMessages (985,557 samples, 0.10%)</title><rect x="598.1" y="293" width="0.8" height="15.0" fill="rgb(247,193,46)" rx="2" ry="2" />
+<text  x="601.14" y="303.5" ></text>
+</g>
+<g >
+<title>void std::__invoke_impl&lt;void, void  (870,107,623 samples, 89.72%)</title><rect x="51.9" y="581" width="699.8" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="54.88" y="591.5" >void std::__invoke_impl&lt;void, void </text>
+</g>
+<g >
+<title>ns3::LteEnbRrc::GetUeManager (2,186,317 samples, 0.23%)</title><rect x="27.4" y="357" width="1.8" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="30.44" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::Object::DoDelete (191,238 samples, 0.02%)</title><rect x="97.0" y="389" width="0.1" height="15.0" fill="rgb(212,34,8)" rx="2" ry="2" />
+<text  x="99.98" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumPhy::UpdateSinrPerceived (400,144 samples, 0.04%)</title><rect x="581.5" y="341" width="0.3" height="15.0" fill="rgb(226,98,23)" rx="2" ry="2" />
+<text  x="584.51" y="351.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_M_erase (763,268 samples, 0.08%)</title><rect x="60.6" y="485" width="0.6" height="15.0" fill="rgb(227,102,24)" rx="2" ry="2" />
+<text  x="63.55" y="495.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt; &gt;::_M_ptr (230,371 samples, 0.02%)</title><rect x="158.4" y="325" width="0.2" height="15.0" fill="rgb(207,9,2)" rx="2" ry="2" />
+<text  x="161.43" y="335.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt; &gt; &gt;::erase (3,494,424 samples, 0.36%)</title><rect x="289.5" y="533" width="2.8" height="15.0" fill="rgb(253,223,53)" rx="2" ry="2" />
+<text  x="292.46" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::TbId_t, std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::_Select1st&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::_Auto_node::_Auto_node&lt;std::pair&lt;ns3::TbId_t, ns3::tbInfo_t&gt; &gt; (1,468,656 samples, 0.15%)</title><rect x="526.4" y="293" width="1.2" height="15.0" fill="rgb(218,62,14)" rx="2" ry="2" />
+<text  x="529.43" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::PacketMetadata::PacketMetadata (266,992 samples, 0.03%)</title><rect x="19.1" y="373" width="0.2" height="15.0" fill="rgb(231,121,28)" rx="2" ry="2" />
+<text  x="22.11" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::clear (1,054,314 samples, 0.11%)</title><rect x="393.9" y="533" width="0.9" height="15.0" fill="rgb(210,24,5)" rx="2" ry="2" />
+<text  x="396.91" y="543.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;::at (194,370 samples, 0.02%)</title><rect x="633.6" y="533" width="0.2" height="15.0" fill="rgb(233,131,31)" rx="2" ry="2" />
+<text  x="636.60" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; std::map&lt;ns3::Scheduler::EventKey, ns3::EventImpl*, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::emplace_hint&lt;std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (487,403 samples, 0.05%)</title><rect x="615.5" y="469" width="0.4" height="15.0" fill="rgb(253,224,53)" rx="2" ry="2" />
+<text  x="618.48" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::~PacketBurst (3,088,032 samples, 0.32%)</title><rect x="378.7" y="341" width="2.5" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="381.74" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumPhy::AddExpectedTb (590,754 samples, 0.06%)</title><rect x="120.2" y="533" width="0.5" height="15.0" fill="rgb(249,206,49)" rx="2" ry="2" />
+<text  x="123.24" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::MemberSchedSapProvider&lt;ns3::PfFfMacScheduler&gt;::SchedUlCqiInfoReq (6,622,886 samples, 0.68%)</title><rect x="220.2" y="517" width="5.3" height="15.0" fill="rgb(214,45,10)" rx="2" ry="2" />
+<text  x="223.16" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s* std::copy&lt;ns3::DlInfoListElement_s*, ns3::DlInfoListElement_s*&gt; (475,054 samples, 0.05%)</title><rect x="206.9" y="469" width="0.4" height="15.0" fill="rgb(241,167,39)" rx="2" ry="2" />
+<text  x="209.94" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_emplace_hint_unique&lt;unsigned int const&amp;, ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp;&gt; (838,836 samples, 0.09%)</title><rect x="81.8" y="485" width="0.7" height="15.0" fill="rgb(226,100,24)" rx="2" ry="2" />
+<text  x="84.78" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue const&gt;::Acquire (472,815 samples, 0.05%)</title><rect x="751.2" y="549" width="0.4" height="15.0" fill="rgb(245,184,44)" rx="2" ry="2" />
+<text  x="754.18" y="559.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt;::push_back (371,903 samples, 0.04%)</title><rect x="117.3" y="517" width="0.3" height="15.0" fill="rgb(229,113,27)" rx="2" ry="2" />
+<text  x="120.28" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::Buffer::~Buffer (338,881 samples, 0.03%)</title><rect x="652.9" y="229" width="0.3" height="15.0" fill="rgb(240,162,38)" rx="2" ry="2" />
+<text  x="655.94" y="239.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; &gt;::_M_ptr (232,556 samples, 0.02%)</title><rect x="465.9" y="453" width="0.2" height="15.0" fill="rgb(219,67,16)" rx="2" ry="2" />
+<text  x="468.91" y="463.5" ></text>
+</g>
+<g >
+<title>f32xsqrtf64 (164,839 samples, 0.02%)</title><rect x="703.4" y="501" width="0.1" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="706.39" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::ByteTagList::ByteTagList (157,202 samples, 0.02%)</title><rect x="153.4" y="357" width="0.1" height="15.0" fill="rgb(220,69,16)" rx="2" ry="2" />
+<text  x="156.36" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::Packet::~Packet (2,563,159 samples, 0.26%)</title><rect x="451.8" y="117" width="2.1" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="454.80" y="127.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteControlMessage&gt;&amp; std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::emplace_back&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; const&amp;&gt; (156,292 samples, 0.02%)</title><rect x="781.5" y="837" width="0.1" height="15.0" fill="rgb(224,89,21)" rx="2" ry="2" />
+<text  x="784.51" y="847.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Callback&lt;void, ns3::PhyTransmissionStatParameters&gt;, std::allocator&lt;ns3::Callback&lt;void, ns3::PhyTransmissionStatParameters&gt; &gt; &gt;::begin (125,646 samples, 0.01%)</title><rect x="535.3" y="341" width="0.1" height="15.0" fill="rgb(239,160,38)" rx="2" ry="2" />
+<text  x="538.27" y="351.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt; &gt;::_M_begin (343,708 samples, 0.04%)</title><rect x="649.9" y="469" width="0.3" height="15.0" fill="rgb(212,35,8)" rx="2" ry="2" />
+<text  x="652.91" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;1ul, ns3::Ptr&lt;ns3::SpectrumValue const&gt;, unsigned int&gt;::~_Tuple_impl (935,788 samples, 0.10%)</title><rect x="772.8" y="533" width="0.8" height="15.0" fill="rgb(252,220,52)" rx="2" ry="2" />
+<text  x="775.80" y="543.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt; &gt; &gt;::_M_range_check (215,267 samples, 0.02%)</title><rect x="289.0" y="517" width="0.2" height="15.0" fill="rgb(239,160,38)" rx="2" ry="2" />
+<text  x="292.00" y="527.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;::_M_range_check (145,739 samples, 0.02%)</title><rect x="375.6" y="517" width="0.1" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="378.57" y="527.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::vector (293,137 samples, 0.03%)</title><rect x="594.8" y="261" width="0.2" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="597.77" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteSpectrumPhy&gt;::Ptr (960,925 samples, 0.10%)</title><rect x="469.4" y="405" width="0.8" height="15.0" fill="rgb(246,188,45)" rx="2" ry="2" />
+<text  x="472.41" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::SpectrumValue, ns3::Empty, ns3::DefaultDeleter&lt;ns3::SpectrumValue&gt; &gt;::Unref (508,044 samples, 0.05%)</title><rect x="716.6" y="469" width="0.4" height="15.0" fill="rgb(246,189,45)" rx="2" ry="2" />
+<text  x="719.58" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_M_copy (425,223 samples, 0.04%)</title><rect x="104.5" y="437" width="0.3" height="15.0" fill="rgb(218,60,14)" rx="2" ry="2" />
+<text  x="107.45" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumPhy&gt;::Ptr (160,484 samples, 0.02%)</title><rect x="660.3" y="501" width="0.1" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="663.30" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::RlcPduListElement_s* std::__uninitialized_copy&lt;false&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::RlcPduListElement_s const*, std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt;, ns3::RlcPduListElement_s*&gt; (178,382 samples, 0.02%)</title><rect x="101.6" y="357" width="0.2" height="15.0" fill="rgb(223,83,19)" rx="2" ry="2" />
+<text  x="104.62" y="367.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::AttributeConstructionList::Item, std::allocator&lt;ns3::AttributeConstructionList::Item&gt; &gt;::_List_base (961,294 samples, 0.10%)</title><rect x="539.3" y="261" width="0.8" height="15.0" fill="rgb(251,212,50)" rx="2" ry="2" />
+<text  x="542.29" y="271.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;unsigned short&gt;::_M_addr (241,097 samples, 0.02%)</title><rect x="395.6" y="453" width="0.2" height="15.0" fill="rgb(221,75,18)" rx="2" ry="2" />
+<text  x="398.62" y="463.5" ></text>
+</g>
+<g >
+<title>operator new (195,089 samples, 0.02%)</title><rect x="316.4" y="405" width="0.2" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="319.41" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteInterference&gt;::operator (310,011 samples, 0.03%)</title><rect x="734.6" y="533" width="0.3" height="15.0" fill="rgb(234,134,32)" rx="2" ry="2" />
+<text  x="737.62" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy::StartSubFrame (19,358,790 samples, 2.00%)</title><rect x="19.6" y="597" width="15.5" height="15.0" fill="rgb(234,136,32)" rx="2" ry="2" />
+<text  x="22.57" y="607.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;* std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_Alloc_node::operator (310,137 samples, 0.03%)</title><rect x="104.5" y="373" width="0.3" height="15.0" fill="rgb(231,122,29)" rx="2" ry="2" />
+<text  x="107.52" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::clear (301,718 samples, 0.03%)</title><rect x="121.5" y="517" width="0.3" height="15.0" fill="rgb(210,24,5)" rx="2" ry="2" />
+<text  x="124.51" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_get_insert_hint_unique_pos (920,658 samples, 0.09%)</title><rect x="662.0" y="405" width="0.7" height="15.0" fill="rgb(209,22,5)" rx="2" ry="2" />
+<text  x="664.98" y="415.5" ></text>
+</g>
+<g >
+<title>void std::_Function_base::_Base_manager&lt;std::_Bind&lt;void  (266,931 samples, 0.03%)</title><rect x="53.7" y="485" width="0.2" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="56.66" y="495.5" ></text>
+</g>
+<g >
+<title>__sqrt_finite (155,543 samples, 0.02%)</title><rect x="311.6" y="453" width="0.1" height="15.0" fill="rgb(235,142,34)" rx="2" ry="2" />
+<text  x="314.61" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PropagationDelayModel&gt;::operator bool (144,100 samples, 0.01%)</title><rect x="323.1" y="501" width="0.1" height="15.0" fill="rgb(252,219,52)" rx="2" ry="2" />
+<text  x="326.08" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;3ul, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::_Tuple_impl (517,866 samples, 0.05%)</title><rect x="667.5" y="341" width="0.5" height="15.0" fill="rgb(218,59,14)" rx="2" ry="2" />
+<text  x="670.54" y="351.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::at (291,311 samples, 0.03%)</title><rect x="588.9" y="229" width="0.3" height="15.0" fill="rgb(220,69,16)" rx="2" ry="2" />
+<text  x="591.92" y="239.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, unsigned char&gt; &gt;::_M_valptr (632,959 samples, 0.07%)</title><rect x="184.7" y="469" width="0.5" height="15.0" fill="rgb(213,40,9)" rx="2" ry="2" />
+<text  x="187.67" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::UeSelected_s::~UeSelected_s (156,086 samples, 0.02%)</title><rect x="106.8" y="341" width="0.1" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="109.80" y="351.5" ></text>
+</g>
+<g >
+<title>double* std::copy&lt;__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, double*&gt; (775,199 samples, 0.08%)</title><rect x="238.4" y="229" width="0.6" height="15.0" fill="rgb(246,192,46)" rx="2" ry="2" />
+<text  x="241.40" y="239.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::clear (828,329 samples, 0.09%)</title><rect x="501.7" y="405" width="0.7" height="15.0" fill="rgb(217,58,13)" rx="2" ry="2" />
+<text  x="504.74" y="415.5" ></text>
+</g>
+<g >
+<title>int* std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;int const*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt;, int*&gt; (599,025 samples, 0.06%)</title><rect x="698.7" y="469" width="0.5" height="15.0" fill="rgb(229,111,26)" rx="2" ry="2" />
+<text  x="701.67" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_decrement (195,924 samples, 0.02%)</title><rect x="662.4" y="373" width="0.2" height="15.0" fill="rgb(238,152,36)" rx="2" ry="2" />
+<text  x="665.45" y="383.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Ptr&lt;ns3::Object&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Object&gt; &gt; &gt;::vector (604,571 samples, 0.06%)</title><rect x="538.2" y="277" width="0.5" height="15.0" fill="rgb(237,147,35)" rx="2" ry="2" />
+<text  x="541.17" y="287.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;ns3::UlDciLteControlMessage&gt;::_M_ptr (283,830 samples, 0.03%)</title><rect x="393.0" y="485" width="0.3" height="15.0" fill="rgb(233,131,31)" rx="2" ry="2" />
+<text  x="396.05" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;0ul, ns3::LteInterference*, ns3::Ptr&lt;ns3::SpectrumValue const&gt;, unsigned int&gt;::~_Tuple_impl (976,372 samples, 0.10%)</title><rect x="772.8" y="549" width="0.8" height="15.0" fill="rgb(248,202,48)" rx="2" ry="2" />
+<text  x="775.77" y="559.5" ></text>
+</g>
+<g >
+<title>decltype  (979,889 samples, 0.10%)</title><rect x="526.8" y="229" width="0.8" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="529.82" y="239.5" ></text>
+</g>
+<g >
+<title>malloc (333,876 samples, 0.03%)</title><rect x="239.5" y="165" width="0.3" height="15.0" fill="rgb(230,119,28)" rx="2" ry="2" />
+<text  x="242.54" y="175.5" ></text>
+</g>
+<g >
+<title>ns3::Object::Initialize (214,377 samples, 0.02%)</title><rect x="130.4" y="469" width="0.2" height="15.0" fill="rgb(231,120,28)" rx="2" ry="2" />
+<text  x="133.38" y="479.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;double&gt; &gt;::deallocate (163,066 samples, 0.02%)</title><rect x="773.3" y="389" width="0.2" height="15.0" fill="rgb(236,143,34)" rx="2" ry="2" />
+<text  x="776.33" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt;::_M_mbegin (161,866 samples, 0.02%)</title><rect x="568.1" y="245" width="0.1" height="15.0" fill="rgb(245,184,44)" rx="2" ry="2" />
+<text  x="571.06" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::operator+ (373,725 samples, 0.04%)</title><rect x="665.3" y="469" width="0.3" height="15.0" fill="rgb(244,182,43)" rx="2" ry="2" />
+<text  x="668.32" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumSignalParametersDataFrame::~LteSpectrumSignalParametersDataFrame (3,401,494 samples, 0.35%)</title><rect x="75.3" y="469" width="2.8" height="15.0" fill="rgb(242,174,41)" rx="2" ry="2" />
+<text  x="78.35" y="479.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt;::allocate (272,885 samples, 0.03%)</title><rect x="210.9" y="437" width="0.2" height="15.0" fill="rgb(219,67,16)" rx="2" ry="2" />
+<text  x="213.86" y="447.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::at (338,936 samples, 0.03%)</title><rect x="399.9" y="549" width="0.3" height="15.0" fill="rgb(238,152,36)" rx="2" ry="2" />
+<text  x="402.90" y="559.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;::~vector (250,258 samples, 0.03%)</title><rect x="592.1" y="277" width="0.2" height="15.0" fill="rgb(235,139,33)" rx="2" ry="2" />
+<text  x="595.06" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::BufferSizeLevelBsr::BufferSize2BsrId (148,238 samples, 0.02%)</title><rect x="686.5" y="501" width="0.2" height="15.0" fill="rgb(236,145,34)" rx="2" ry="2" />
+<text  x="689.54" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::_M_get_insert_hint_unique_pos (303,018 samples, 0.03%)</title><rect x="243.6" y="453" width="0.2" height="15.0" fill="rgb(206,6,1)" rx="2" ry="2" />
+<text  x="246.57" y="463.5" ></text>
+</g>
+<g >
+<title>std::tuple_element&lt;1ul, std::tuple&lt;ns3::LteUePhy*, unsigned int, unsigned int&gt; &gt;::type&amp; std::get&lt;1ul, ns3::LteUePhy*, unsigned int, unsigned int&gt; (345,321 samples, 0.04%)</title><rect x="754.8" y="597" width="0.3" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="757.78" y="607.5" ></text>
+</g>
+<g >
+<title>double* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, double*&gt; (418,403 samples, 0.04%)</title><rect x="654.6" y="453" width="0.3" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="657.59" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;4ul, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::_Tuple_impl&lt;ns3::Ptr&lt;ns3::SpectrumPhy&gt;&amp;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;&amp;, void&gt; (395,163 samples, 0.04%)</title><rect x="666.9" y="357" width="0.4" height="15.0" fill="rgb(208,17,4)" rx="2" ry="2" />
+<text  x="669.95" y="367.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt;::find (1,318,462 samples, 0.14%)</title><rect x="455.5" y="309" width="1.0" height="15.0" fill="rgb(235,142,33)" rx="2" ry="2" />
+<text  x="458.47" y="319.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider::ReportBufferStatusParameters&gt; &gt;::_M_ptr (283,636 samples, 0.03%)</title><rect x="570.5" y="245" width="0.2" height="15.0" fill="rgb(234,136,32)" rx="2" ry="2" />
+<text  x="573.50" y="255.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::find (146,964 samples, 0.02%)</title><rect x="99.3" y="453" width="0.1" height="15.0" fill="rgb(205,3,0)" rx="2" ry="2" />
+<text  x="102.32" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumPhy&gt; ns3::Object::GetObject&lt;ns3::SpectrumPhy&gt; (506,061 samples, 0.05%)</title><rect x="89.8" y="533" width="0.4" height="15.0" fill="rgb(214,45,10)" rx="2" ry="2" />
+<text  x="92.81" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt;::operator= (418,721 samples, 0.04%)</title><rect x="119.8" y="405" width="0.4" height="15.0" fill="rgb(219,65,15)" rx="2" ry="2" />
+<text  x="122.84" y="415.5" ></text>
+</g>
+<g >
+<title>std::_List_node&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt;::_M_valptr (136,464 samples, 0.01%)</title><rect x="501.0" y="517" width="0.1" height="15.0" fill="rgb(254,226,54)" rx="2" ry="2" />
+<text  x="503.99" y="527.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::CqiListElement_s*, ns3::CqiListElement_s&gt; (416,767 samples, 0.04%)</title><rect x="106.8" y="453" width="0.3" height="15.0" fill="rgb(225,92,22)" rx="2" ry="2" />
+<text  x="109.77" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::UlDciLteControlMessage::UlDciLteControlMessage (388,309 samples, 0.04%)</title><rect x="288.1" y="421" width="0.3" height="15.0" fill="rgb(206,8,1)" rx="2" ry="2" />
+<text  x="291.08" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::VendorSpecificListElement_s* std::__do_uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::VendorSpecificListElement_s const*, std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt; &gt;, ns3::VendorSpecificListElement_s*&gt; (156,843 samples, 0.02%)</title><rect x="228.7" y="389" width="0.2" height="15.0" fill="rgb(219,66,15)" rx="2" ry="2" />
+<text  x="231.73" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Bit_iterator::operator* (166,567 samples, 0.02%)</title><rect x="234.5" y="485" width="0.2" height="15.0" fill="rgb(219,65,15)" rx="2" ry="2" />
+<text  x="237.54" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::BsrLteControlMessage&gt;::operator (142,163 samples, 0.01%)</title><rect x="689.1" y="501" width="0.1" height="15.0" fill="rgb(210,26,6)" rx="2" ry="2" />
+<text  x="692.06" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Function_base::_Base_manager&lt;void  (405,896 samples, 0.04%)</title><rect x="517.5" y="405" width="0.3" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="520.49" y="415.5" ></text>
+</g>
+<g >
+<title>operator new (239,912 samples, 0.02%)</title><rect x="404.3" y="389" width="0.2" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="407.28" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Bind&lt;void  (1,111,745 samples, 0.11%)</title><rect x="42.4" y="645" width="0.9" height="15.0" fill="rgb(253,221,52)" rx="2" ry="2" />
+<text  x="45.42" y="655.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned int, std::allocator&lt;unsigned int&gt; &gt;::_S_check_init_len (571,492 samples, 0.06%)</title><rect x="696.4" y="485" width="0.5" height="15.0" fill="rgb(223,85,20)" rx="2" ry="2" />
+<text  x="699.44" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt;::operator* (248,472 samples, 0.03%)</title><rect x="567.5" y="293" width="0.2" height="15.0" fill="rgb(243,177,42)" rx="2" ry="2" />
+<text  x="570.46" y="303.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, double&gt; &gt;::_M_valptr (567,548 samples, 0.06%)</title><rect x="295.3" y="469" width="0.4" height="15.0" fill="rgb(254,229,54)" rx="2" ry="2" />
+<text  x="298.25" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;::operator-- (195,924 samples, 0.02%)</title><rect x="662.4" y="389" width="0.2" height="15.0" fill="rgb(223,86,20)" rx="2" ry="2" />
+<text  x="665.45" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_M_create_storage (507,018 samples, 0.05%)</title><rect x="325.4" y="437" width="0.4" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="328.35" y="447.5" ></text>
+</g>
+<g >
+<title>int* std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;int const*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt;, int*&gt; (468,442 samples, 0.05%)</title><rect x="573.9" y="277" width="0.4" height="15.0" fill="rgb(229,111,26)" rx="2" ry="2" />
+<text  x="576.94" y="287.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;unsigned char&gt;::deallocate (194,524 samples, 0.02%)</title><rect x="216.5" y="405" width="0.1" height="15.0" fill="rgb(209,19,4)" rx="2" ry="2" />
+<text  x="219.49" y="415.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;bool, std::allocator&lt;bool&gt; &gt;::operator= (842,802 samples, 0.09%)</title><rect x="195.8" y="485" width="0.7" height="15.0" fill="rgb(217,57,13)" rx="2" ry="2" />
+<text  x="198.83" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt;::~vector (629,475 samples, 0.06%)</title><rect x="24.8" y="325" width="0.6" height="15.0" fill="rgb(254,227,54)" rx="2" ry="2" />
+<text  x="27.85" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::LteMacSapUser::TxOpportunityParameters::TxOpportunityParameters (163,135 samples, 0.02%)</title><rect x="536.4" y="325" width="0.1" height="15.0" fill="rgb(213,39,9)" rx="2" ry="2" />
+<text  x="539.35" y="335.5" ></text>
+</g>
+<g >
+<title>std::_List_const_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;::operator* (275,268 samples, 0.03%)</title><rect x="733.7" y="437" width="0.2" height="15.0" fill="rgb(254,229,54)" rx="2" ry="2" />
+<text  x="736.69" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::lower_bound (238,325 samples, 0.02%)</title><rect x="332.8" y="469" width="0.2" height="15.0" fill="rgb(234,137,32)" rx="2" ry="2" />
+<text  x="335.80" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue const&gt;::Ptr&lt;ns3::SpectrumValue&gt; (235,951 samples, 0.02%)</title><rect x="324.5" y="501" width="0.2" height="15.0" fill="rgb(249,202,48)" rx="2" ry="2" />
+<text  x="327.51" y="511.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::map (263,384 samples, 0.03%)</title><rect x="657.3" y="517" width="0.2" height="15.0" fill="rgb(242,171,40)" rx="2" ry="2" />
+<text  x="660.28" y="527.5" ></text>
+</g>
+<g >
+<title>void std::fill&lt;unsigned short*, unsigned short&gt; (157,918 samples, 0.02%)</title><rect x="253.6" y="453" width="0.2" height="15.0" fill="rgb(210,24,5)" rx="2" ry="2" />
+<text  x="256.65" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumModel const&gt;::Acquire (223,430 samples, 0.02%)</title><rect x="411.6" y="485" width="0.2" height="15.0" fill="rgb(222,80,19)" rx="2" ry="2" />
+<text  x="414.65" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::BuildDataListElement_s, std::allocator&lt;ns3::BuildDataListElement_s&gt; &gt;::_Vector_impl_data::_Vector_impl_data (199,981 samples, 0.02%)</title><rect x="174.3" y="421" width="0.2" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="177.34" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::NixVector&gt;::Acquire (191,450 samples, 0.02%)</title><rect x="625.2" y="469" width="0.1" height="15.0" fill="rgb(238,156,37)" rx="2" ry="2" />
+<text  x="628.19" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::resize (343,043 samples, 0.04%)</title><rect x="106.1" y="469" width="0.3" height="15.0" fill="rgb(227,101,24)" rx="2" ry="2" />
+<text  x="109.10" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::TagBuffer::ReadU8 (154,581 samples, 0.02%)</title><rect x="436.7" y="165" width="0.1" height="15.0" fill="rgb(242,174,41)" rx="2" ry="2" />
+<text  x="439.68" y="175.5" ></text>
+</g>
+<g >
+<title>std::_List_const_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;::operator* (644,591 samples, 0.07%)</title><rect x="500.2" y="517" width="0.5" height="15.0" fill="rgb(254,229,54)" rx="2" ry="2" />
+<text  x="503.16" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::BsrLteControlMessage&gt; ns3::Create&lt;ns3::BsrLteControlMessage&gt; (556,282 samples, 0.06%)</title><rect x="688.6" y="501" width="0.5" height="15.0" fill="rgb(220,69,16)" rx="2" ry="2" />
+<text  x="691.62" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::BuildDataListElement_s::BuildDataListElement_s (189,091 samples, 0.02%)</title><rect x="100.8" y="405" width="0.2" height="15.0" fill="rgb(229,111,26)" rx="2" ry="2" />
+<text  x="103.84" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt; &gt;::_M_mbegin (398,471 samples, 0.04%)</title><rect x="180.0" y="421" width="0.3" height="15.0" fill="rgb(239,159,38)" rx="2" ry="2" />
+<text  x="182.95" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteEnbPhy&gt;::Ptr (308,737 samples, 0.03%)</title><rect x="469.1" y="405" width="0.3" height="15.0" fill="rgb(254,225,53)" rx="2" ry="2" />
+<text  x="472.13" y="415.5" ></text>
+</g>
+<g >
+<title>void std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_M_construct_node&lt;std::pair&lt;int const, double&gt; const&amp;&gt; (205,403 samples, 0.02%)</title><rect x="59.7" y="389" width="0.1" height="15.0" fill="rgb(210,23,5)" rx="2" ry="2" />
+<text  x="62.68" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt;::_Vector_impl::_Vector_impl (165,586 samples, 0.02%)</title><rect x="420.9" y="277" width="0.1" height="15.0" fill="rgb(229,112,26)" rx="2" ry="2" />
+<text  x="423.86" y="287.5" ></text>
+</g>
+<g >
+<title>std::less&lt;ns3::Scheduler::EventKey&gt;::operator (529,361 samples, 0.05%)</title><rect x="663.9" y="389" width="0.4" height="15.0" fill="rgb(234,137,32)" rx="2" ry="2" />
+<text  x="666.92" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteControlMessage&gt;::Acquire (234,941 samples, 0.02%)</title><rect x="149.6" y="309" width="0.2" height="15.0" fill="rgb(212,36,8)" rx="2" ry="2" />
+<text  x="152.59" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue&gt;::operator= (291,061 samples, 0.03%)</title><rect x="78.8" y="517" width="0.3" height="15.0" fill="rgb(220,71,17)" rx="2" ry="2" />
+<text  x="81.83" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, double&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, double&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, double&gt; &gt; &gt;::_M_end (151,821 samples, 0.02%)</title><rect x="294.8" y="501" width="0.2" height="15.0" fill="rgb(239,157,37)" rx="2" ry="2" />
+<text  x="297.85" y="511.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::_M_check_len (563,247 samples, 0.06%)</title><rect x="219.2" y="437" width="0.5" height="15.0" fill="rgb(234,133,31)" rx="2" ry="2" />
+<text  x="222.21" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumValueHelper::GetSpectrumModel (2,320,104 samples, 0.24%)</title><rect x="674.7" y="501" width="1.9" height="15.0" fill="rgb(207,12,3)" rx="2" ry="2" />
+<text  x="677.71" y="511.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; (307,652 samples, 0.03%)</title><rect x="114.0" y="357" width="0.3" height="15.0" fill="rgb(212,35,8)" rx="2" ry="2" />
+<text  x="117.02" y="367.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt; &gt;::_M_ptr (234,295 samples, 0.02%)</title><rect x="157.0" y="373" width="0.2" height="15.0" fill="rgb(207,9,2)" rx="2" ry="2" />
+<text  x="160.02" y="383.5" ></text>
+</g>
+<g >
+<title>std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;* std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_create_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;&amp;&gt; (498,015 samples, 0.05%)</title><rect x="721.7" y="437" width="0.4" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="724.75" y="447.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_M_check_len (747,839 samples, 0.08%)</title><rect x="597.2" y="245" width="0.6" height="15.0" fill="rgb(220,70,16)" rx="2" ry="2" />
+<text  x="600.15" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::Angles::CheckIfValid (149,412 samples, 0.02%)</title><rect x="642.2" y="469" width="0.1" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="645.17" y="479.5" ></text>
+</g>
+<g >
+<title>void  (325,947 samples, 0.03%)</title><rect x="517.5" y="389" width="0.3" height="15.0" fill="rgb(253,221,53)" rx="2" ry="2" />
+<text  x="520.55" y="399.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::_M_init (154,782 samples, 0.02%)</title><rect x="164.5" y="357" width="0.1" height="15.0" fill="rgb(253,222,53)" rx="2" ry="2" />
+<text  x="167.51" y="367.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_M_deallocate (149,822 samples, 0.02%)</title><rect x="139.4" y="421" width="0.1" height="15.0" fill="rgb(208,14,3)" rx="2" ry="2" />
+<text  x="142.35" y="431.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;is_invocable_r_v&lt;void, std::_Bind&lt;void  (22,443,594 samples, 2.31%)</title><rect x="17.2" y="693" width="18.0" height="15.0" fill="rgb(243,178,42)" rx="2" ry="2" />
+<text  x="20.17" y="703.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned short const, unsigned char&gt; &gt;::_Rb_tree_iterator (238,804 samples, 0.02%)</title><rect x="194.0" y="453" width="0.2" height="15.0" fill="rgb(224,87,20)" rx="2" ry="2" />
+<text  x="196.98" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue&gt; ns3::Create&lt;ns3::SpectrumValue, ns3::Ptr&lt;ns3::SpectrumModel const&gt; const&amp;&gt; (1,704,960 samples, 0.18%)</title><rect x="315.2" y="421" width="1.4" height="15.0" fill="rgb(246,189,45)" rx="2" ry="2" />
+<text  x="318.19" y="431.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;::_M_addr (162,805 samples, 0.02%)</title><rect x="663.6" y="341" width="0.1" height="15.0" fill="rgb(223,85,20)" rx="2" ry="2" />
+<text  x="666.60" y="351.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::LteSpectrumModelId, std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt;, std::_Select1st&lt;std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt; &gt;, std::less&lt;ns3::LteSpectrumModelId&gt;, std::allocator&lt;std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt; &gt; &gt;::find (220,015 samples, 0.02%)</title><rect x="111.4" y="437" width="0.2" height="15.0" fill="rgb(254,226,54)" rx="2" ry="2" />
+<text  x="114.45" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::LteRlcSm::ReportBufferStatus (6,485,597 samples, 0.67%)</title><rect x="24.3" y="421" width="5.2" height="15.0" fill="rgb(224,89,21)" rx="2" ry="2" />
+<text  x="27.28" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt; &gt; &gt;::begin (210,507 samples, 0.02%)</title><rect x="186.2" y="469" width="0.2" height="15.0" fill="rgb(226,100,24)" rx="2" ry="2" />
+<text  x="189.19" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::LteAmc::GetUlTbSizeFromMcs (193,747 samples, 0.02%)</title><rect x="232.1" y="485" width="0.2" height="15.0" fill="rgb(248,198,47)" rx="2" ry="2" />
+<text  x="235.10" y="495.5" ></text>
+</g>
+<g >
+<title>decltype  (2,563,971 samples, 0.26%)</title><rect x="203.3" y="437" width="2.0" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="206.25" y="447.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;is_invocable_r_v&lt;void, ns3::Callback&lt;void, ns3::UlInfoListElement_s&gt;::Callback&lt;void  (2,054,238 samples, 0.21%)</title><rect x="439.3" y="485" width="1.6" height="15.0" fill="rgb(234,133,31)" rx="2" ry="2" />
+<text  x="442.29" y="495.5" ></text>
+</g>
+<g >
+<title>[libc.so.6] (5,321,712 samples, 0.55%)</title><rect x="11.2" y="821" width="4.3" height="15.0" fill="rgb(223,84,20)" rx="2" ry="2" />
+<text  x="14.17" y="831.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::_M_clear (424,329 samples, 0.04%)</title><rect x="612.9" y="453" width="0.3" height="15.0" fill="rgb(217,56,13)" rx="2" ry="2" />
+<text  x="615.88" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_lower_bound (1,465,798 samples, 0.15%)</title><rect x="84.9" y="405" width="1.2" height="15.0" fill="rgb(229,113,27)" rx="2" ry="2" />
+<text  x="87.93" y="415.5" ></text>
+</g>
+<g >
+<title> (126,110 samples, 0.01%)</title><rect x="402.8" y="469" width="0.1" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="405.85" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::GetTypeId (273,306 samples, 0.03%)</title><rect x="163.6" y="421" width="0.2" height="15.0" fill="rgb(216,54,13)" rx="2" ry="2" />
+<text  x="166.58" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::TbId_t, std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::_Select1st&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::find (814,139 samples, 0.08%)</title><rect x="386.6" y="517" width="0.6" height="15.0" fill="rgb(215,50,12)" rx="2" ry="2" />
+<text  x="389.59" y="527.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_insert&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; const&amp;&gt; (564,216 samples, 0.06%)</title><rect x="318.8" y="357" width="0.5" height="15.0" fill="rgb(210,27,6)" rx="2" ry="2" />
+<text  x="321.81" y="367.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::_S_relocate (124,634 samples, 0.01%)</title><rect x="591.4" y="245" width="0.1" height="15.0" fill="rgb(238,154,37)" rx="2" ry="2" />
+<text  x="594.36" y="255.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;ns3::BuildDataListElement_s&gt; &gt;::construct&lt;ns3::BuildDataListElement_s, ns3::BuildDataListElement_s const&amp;&gt; (189,091 samples, 0.02%)</title><rect x="100.8" y="437" width="0.2" height="15.0" fill="rgb(226,98,23)" rx="2" ry="2" />
+<text  x="103.84" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::EventId::~EventId (866,210 samples, 0.09%)</title><rect x="39.4" y="725" width="0.7" height="15.0" fill="rgb(242,170,40)" rx="2" ry="2" />
+<text  x="42.36" y="735.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned char const, ns3::LteUeMac::LcInfo&gt; &gt;::_M_valptr (126,661 samples, 0.01%)</title><rect x="569.1" y="309" width="0.1" height="15.0" fill="rgb(221,77,18)" rx="2" ry="2" />
+<text  x="572.12" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::Buffer::Initialize (535,246 samples, 0.06%)</title><rect x="14.1" y="357" width="0.5" height="15.0" fill="rgb(211,31,7)" rx="2" ry="2" />
+<text  x="17.13" y="367.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;ns3::LteFlowId_t const, ns3::FfMacSchedSapProvider::SchedDlRlcBufferReqParameters&gt; &gt;::operator* (195,770 samples, 0.02%)</title><rect x="177.5" y="469" width="0.1" height="15.0" fill="rgb(243,175,42)" rx="2" ry="2" />
+<text  x="180.45" y="479.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::allocate (313,319 samples, 0.03%)</title><rect x="626.6" y="421" width="0.2" height="15.0" fill="rgb(238,153,36)" rx="2" ry="2" />
+<text  x="629.59" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::LteMacSapUser::ReceivePduParameters::ReceivePduParameters (154,503 samples, 0.02%)</title><rect x="435.1" y="325" width="0.1" height="15.0" fill="rgb(249,204,48)" rx="2" ry="2" />
+<text  x="438.09" y="335.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::operator= (814,123 samples, 0.08%)</title><rect x="346.4" y="517" width="0.6" height="15.0" fill="rgb(251,215,51)" rx="2" ry="2" />
+<text  x="349.38" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::UlInfoListElement_s, std::allocator&lt;ns3::UlInfoListElement_s&gt; &gt;::~_Vector_base (160,392 samples, 0.02%)</title><rect x="134.0" y="485" width="0.2" height="15.0" fill="rgb(242,173,41)" rx="2" ry="2" />
+<text  x="137.03" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::MacCeListElement_s::~MacCeListElement_s (457,826 samples, 0.05%)</title><rect x="688.2" y="501" width="0.4" height="15.0" fill="rgb(209,20,4)" rx="2" ry="2" />
+<text  x="691.25" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::SpectrumConverter&gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::SpectrumConverter&gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::SpectrumConverter&gt; &gt; &gt;::find (738,382 samples, 0.08%)</title><rect x="81.1" y="501" width="0.6" height="15.0" fill="rgb(243,177,42)" rx="2" ry="2" />
+<text  x="84.12" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteCcmMacSapProvider*&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteCcmMacSapProvider*&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteCcmMacSapProvider*&gt; &gt; &gt;::_M_end (200,561 samples, 0.02%)</title><rect x="458.2" y="245" width="0.2" height="15.0" fill="rgb(205,4,1)" rx="2" ry="2" />
+<text  x="461.21" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::~SpectrumValue (392,749 samples, 0.04%)</title><rect x="716.7" y="437" width="0.3" height="15.0" fill="rgb(247,193,46)" rx="2" ry="2" />
+<text  x="719.67" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Time::GetNanoSeconds (191,170 samples, 0.02%)</title><rect x="14.0" y="373" width="0.1" height="15.0" fill="rgb(241,166,39)" rx="2" ry="2" />
+<text  x="16.98" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_Vector_base (194,555 samples, 0.02%)</title><rect x="519.0" y="325" width="0.2" height="15.0" fill="rgb(205,2,0)" rx="2" ry="2" />
+<text  x="522.00" y="335.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::list (368,722 samples, 0.04%)</title><rect x="538.7" y="293" width="0.3" height="15.0" fill="rgb(252,216,51)" rx="2" ry="2" />
+<text  x="541.66" y="303.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;* std::__copy_move_a1&lt;true, std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;*, std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;*&gt; (1,663,604 samples, 0.17%)</title><rect x="290.1" y="469" width="1.3" height="15.0" fill="rgb(252,216,51)" rx="2" ry="2" />
+<text  x="293.06" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::EventImpl&gt;::Ptr (195,822 samples, 0.02%)</title><rect x="305.5" y="469" width="0.2" height="15.0" fill="rgb(239,157,37)" rx="2" ry="2" />
+<text  x="308.50" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::SbMeasResult_s&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::SbMeasResult_s&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::SbMeasResult_s&gt; &gt; &gt;::_M_mbegin (155,977 samples, 0.02%)</title><rect x="185.4" y="437" width="0.2" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="188.43" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::Ptr&lt;ns3::Object&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Object&gt; &gt; &gt;::~_Vector_base (148,451 samples, 0.02%)</title><rect x="635.3" y="293" width="0.1" height="15.0" fill="rgb(221,76,18)" rx="2" ry="2" />
+<text  x="638.25" y="303.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::vector (165,594 samples, 0.02%)</title><rect x="440.5" y="261" width="0.2" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="443.54" y="271.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;::_M_initialize_dispatch&lt;std::_List_const_iterator&lt;ns3::UlDciLteControlMessage&gt; &gt; (3,076,347 samples, 0.32%)</title><rect x="286.4" y="517" width="2.5" height="15.0" fill="rgb(236,145,34)" rx="2" ry="2" />
+<text  x="289.38" y="527.5" ></text>
+</g>
+<g >
+<title>std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;::_M_valptr (234,399 samples, 0.02%)</title><rect x="733.7" y="421" width="0.2" height="15.0" fill="rgb(207,10,2)" rx="2" ry="2" />
+<text  x="736.72" y="431.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::~_List_base (309,041 samples, 0.03%)</title><rect x="775.6" y="373" width="0.3" height="15.0" fill="rgb(221,74,17)" rx="2" ry="2" />
+<text  x="778.63" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned short const, unsigned char&gt; &gt;::operator* (714,872 samples, 0.07%)</title><rect x="184.6" y="485" width="0.6" height="15.0" fill="rgb(234,134,32)" rx="2" ry="2" />
+<text  x="187.60" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;::begin (261,627 samples, 0.03%)</title><rect x="514.5" y="533" width="0.2" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="517.51" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::SpectrumValue (826,746 samples, 0.09%)</title><rect x="718.3" y="469" width="0.6" height="15.0" fill="rgb(211,27,6)" rx="2" ry="2" />
+<text  x="721.26" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::SpectrumValue (332,272 samples, 0.03%)</title><rect x="593.7" y="293" width="0.3" height="15.0" fill="rgb(211,27,6)" rx="2" ry="2" />
+<text  x="596.71" y="303.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::at (377,393 samples, 0.04%)</title><rect x="575.6" y="357" width="0.3" height="15.0" fill="rgb(238,152,36)" rx="2" ry="2" />
+<text  x="578.59" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Object&gt;::Ptr&lt;ns3::AntennaModel&gt; (485,174 samples, 0.05%)</title><rect x="703.9" y="533" width="0.4" height="15.0" fill="rgb(225,96,23)" rx="2" ry="2" />
+<text  x="706.87" y="543.5" ></text>
+</g>
+<g >
+<title>decltype  (398,640 samples, 0.04%)</title><rect x="473.8" y="261" width="0.4" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="476.84" y="271.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt; &gt;::_Rb_tree_impl&lt;std::less&lt;unsigned short&gt;, true&gt;::_Rb_tree_impl (313,901 samples, 0.03%)</title><rect x="509.2" y="517" width="0.2" height="15.0" fill="rgb(239,158,37)" rx="2" ry="2" />
+<text  x="512.15" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::Packet::Packet (1,604,788 samples, 0.17%)</title><rect x="14.1" y="389" width="1.3" height="15.0" fill="rgb(230,115,27)" rx="2" ry="2" />
+<text  x="17.13" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::operator= (1,064,743 samples, 0.11%)</title><rect x="730.4" y="485" width="0.8" height="15.0" fill="rgb(243,177,42)" rx="2" ry="2" />
+<text  x="733.38" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteUeMac::LcInfo&gt; &gt;::operator (151,315 samples, 0.02%)</title><rect x="691.6" y="437" width="0.1" height="15.0" fill="rgb(254,226,54)" rx="2" ry="2" />
+<text  x="694.63" y="447.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; &gt; &gt;::find (2,994,899 samples, 0.31%)</title><rect x="522.5" y="341" width="2.4" height="15.0" fill="rgb(223,83,20)" rx="2" ry="2" />
+<text  x="525.47" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::PacketTagList::~PacketTagList (323,410 samples, 0.03%)</title><rect x="453.6" y="101" width="0.2" height="15.0" fill="rgb(223,87,20)" rx="2" ry="2" />
+<text  x="456.57" y="111.5" ></text>
+</g>
+<g >
+<title>ns3::EnbMacMemberLteEnbPhySapUser::SubframeIndication (415,834 samples, 0.04%)</title><rect x="15.5" y="533" width="0.3" height="15.0" fill="rgb(252,216,51)" rx="2" ry="2" />
+<text  x="18.45" y="543.5" ></text>
+</g>
+<g >
+<title>void std::_Function_base::_Base_manager&lt;std::_Bind&lt;void  (188,902 samples, 0.02%)</title><rect x="109.8" y="469" width="0.2" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="112.84" y="479.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_clear (191,802 samples, 0.02%)</title><rect x="344.3" y="405" width="0.1" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="347.27" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::MemberLteEnbRrcSapUser&lt;ns3::LteEnbRrcProtocolIdeal&gt;::SendSystemInformation (188,903 samples, 0.02%)</title><rect x="400.5" y="549" width="0.1" height="15.0" fill="rgb(215,47,11)" rx="2" ry="2" />
+<text  x="403.49" y="559.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;* std::__copy_move&lt;true, false, std::random_access_iterator_tag&gt;::__copy_m&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;*, std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;*&gt; (148,381 samples, 0.02%)</title><rect x="117.1" y="421" width="0.1" height="15.0" fill="rgb(214,44,10)" rx="2" ry="2" />
+<text  x="120.11" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::ObjectBase::~ObjectBase (189,056 samples, 0.02%)</title><rect x="454.1" y="181" width="0.1" height="15.0" fill="rgb(232,126,30)" rx="2" ry="2" />
+<text  x="457.08" y="191.5" ></text>
+</g>
+<g >
+<title>malloc (168,940 samples, 0.02%)</title><rect x="78.5" y="357" width="0.2" height="15.0" fill="rgb(230,119,28)" rx="2" ry="2" />
+<text  x="81.52" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt; ns3::CompleteConstruct&lt;ns3::PacketBurst&gt; (4,210,057 samples, 0.43%)</title><rect x="447.5" y="293" width="3.4" height="15.0" fill="rgb(212,33,7)" rx="2" ry="2" />
+<text  x="450.48" y="303.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, unsigned int&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt; &gt;::begin (162,137 samples, 0.02%)</title><rect x="234.1" y="453" width="0.1" height="15.0" fill="rgb(218,62,14)" rx="2" ry="2" />
+<text  x="237.06" y="463.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::end (158,022 samples, 0.02%)</title><rect x="464.0" y="517" width="0.2" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="467.03" y="527.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::CeBitmap_e const*, std::vector&lt;ns3::CeBitmap_e, std::allocator&lt;ns3::CeBitmap_e&gt; &gt; &gt;::__normal_iterator (148,109 samples, 0.02%)</title><rect x="204.6" y="373" width="0.1" height="15.0" fill="rgb(230,116,27)" rx="2" ry="2" />
+<text  x="207.55" y="383.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;::_M_move_assign (2,021,899 samples, 0.21%)</title><rect x="350.0" y="405" width="1.7" height="15.0" fill="rgb(215,47,11)" rx="2" ry="2" />
+<text  x="353.05" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue&gt; ns3::Create&lt;ns3::SpectrumValue, ns3::Ptr&lt;ns3::SpectrumModel const&gt; const&amp;&gt; (159,012 samples, 0.02%)</title><rect x="326.9" y="485" width="0.1" height="15.0" fill="rgb(246,189,45)" rx="2" ry="2" />
+<text  x="329.89" y="495.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, std::vector&lt;double, std::allocator&lt;double&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::~map (231,712 samples, 0.02%)</title><rect x="103.9" y="453" width="0.2" height="15.0" fill="rgb(235,140,33)" rx="2" ry="2" />
+<text  x="106.93" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::Ptr&lt;ns3::Object&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Object&gt; &gt; &gt;::_Vector_base (200,921 samples, 0.02%)</title><rect x="538.5" y="261" width="0.2" height="15.0" fill="rgb(235,141,33)" rx="2" ry="2" />
+<text  x="541.50" y="271.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_initialize_dispatch&lt;std::_List_const_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; (1,272,114 samples, 0.13%)</title><rect x="610.8" y="533" width="1.0" height="15.0" fill="rgb(215,50,12)" rx="2" ry="2" />
+<text  x="613.82" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Bind&lt;void  (410,482 samples, 0.04%)</title><rect x="63.2" y="469" width="0.3" height="15.0" fill="rgb(253,221,52)" rx="2" ry="2" />
+<text  x="66.19" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::AttributeConstructionList::~AttributeConstructionList (332,038 samples, 0.03%)</title><rect x="540.1" y="293" width="0.2" height="15.0" fill="rgb(217,58,13)" rx="2" ry="2" />
+<text  x="543.06" y="303.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;::_M_move_assign (148,381 samples, 0.02%)</title><rect x="117.1" y="389" width="0.1" height="15.0" fill="rgb(215,47,11)" rx="2" ry="2" />
+<text  x="120.11" y="399.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::MacCeListElement_s, std::allocator&lt;ns3::MacCeListElement_s&gt; &gt;::at (309,993 samples, 0.03%)</title><rect x="225.8" y="485" width="0.2" height="15.0" fill="rgb(251,212,50)" rx="2" ry="2" />
+<text  x="228.77" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;::_Vector_base (550,304 samples, 0.06%)</title><rect x="350.7" y="373" width="0.5" height="15.0" fill="rgb(247,197,47)" rx="2" ry="2" />
+<text  x="353.74" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt;::_Rb_tree_iterator (124,409 samples, 0.01%)</title><rect x="508.5" y="517" width="0.1" height="15.0" fill="rgb(209,20,4)" rx="2" ry="2" />
+<text  x="511.46" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::TimeStep (329,548 samples, 0.03%)</title><rect x="278.8" y="501" width="0.3" height="15.0" fill="rgb(242,171,41)" rx="2" ry="2" />
+<text  x="281.79" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_Vector_impl_data::_Vector_impl_data (148,226 samples, 0.02%)</title><rect x="125.3" y="213" width="0.2" height="15.0" fill="rgb(251,215,51)" rx="2" ry="2" />
+<text  x="128.35" y="223.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt; &gt; &gt;::_M_ptr (155,635 samples, 0.02%)</title><rect x="171.8" y="373" width="0.1" height="15.0" fill="rgb(226,97,23)" rx="2" ry="2" />
+<text  x="174.77" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;* std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_M_clone_node&lt;false, std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_Alloc_node&gt; (347,372 samples, 0.04%)</title><rect x="104.5" y="389" width="0.3" height="15.0" fill="rgb(241,167,40)" rx="2" ry="2" />
+<text  x="107.52" y="399.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt; &gt;::destroy&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; (193,911 samples, 0.02%)</title><rect x="104.0" y="357" width="0.1" height="15.0" fill="rgb(235,141,33)" rx="2" ry="2" />
+<text  x="106.96" y="367.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::SpectrumConverter&gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::SpectrumConverter&gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::SpectrumConverter&gt; &gt; &gt;::_S_key (240,712 samples, 0.02%)</title><rect x="330.8" y="453" width="0.2" height="15.0" fill="rgb(248,199,47)" rx="2" ry="2" />
+<text  x="333.79" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::LteControlMessage, ns3::Empty, ns3::DefaultDeleter&lt;ns3::LteControlMessage&gt; &gt;::SimpleRefCount (152,002 samples, 0.02%)</title><rect x="159.9" y="405" width="0.2" height="15.0" fill="rgb(208,15,3)" rx="2" ry="2" />
+<text  x="162.94" y="415.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;::_M_ptr (204,057 samples, 0.02%)</title><rect x="528.1" y="245" width="0.1" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="531.08" y="255.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;::operator* (791,920 samples, 0.08%)</title><rect x="496.5" y="549" width="0.6" height="15.0" fill="rgb(239,157,37)" rx="2" ry="2" />
+<text  x="499.50" y="559.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::CqiListElement_s, std::allocator&lt;ns3::CqiListElement_s&gt; &gt;::push_back (234,240 samples, 0.02%)</title><rect x="461.6" y="309" width="0.1" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="464.55" y="319.5" ></text>
+</g>
+<g >
+<title>int* std::__uninitialized_copy&lt;true&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;int const*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt;, int*&gt; (833,507 samples, 0.09%)</title><rect x="698.5" y="501" width="0.7" height="15.0" fill="rgb(207,11,2)" rx="2" ry="2" />
+<text  x="701.48" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Head_base&lt;1ul, double const&amp;, false&gt;::_M_head (200,778 samples, 0.02%)</title><rect x="748.3" y="421" width="0.1" height="15.0" fill="rgb(250,208,49)" rx="2" ry="2" />
+<text  x="751.28" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::operator* (1,238,991 samples, 0.13%)</title><rect x="407.3" y="517" width="1.0" height="15.0" fill="rgb(251,212,50)" rx="2" ry="2" />
+<text  x="410.31" y="527.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::vector (344,519 samples, 0.04%)</title><rect x="592.8" y="245" width="0.2" height="15.0" fill="rgb(206,9,2)" rx="2" ry="2" />
+<text  x="595.76" y="255.5" ></text>
+</g>
+<g >
+<title>double* std::__copy_move_a1&lt;false, double const*, double*&gt; (200,338 samples, 0.02%)</title><rect x="238.8" y="197" width="0.2" height="15.0" fill="rgb(239,156,37)" rx="2" ry="2" />
+<text  x="241.83" y="207.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;unsigned short&gt; &gt;::allocate (378,466 samples, 0.04%)</title><rect x="218.8" y="421" width="0.3" height="15.0" fill="rgb(250,209,50)" rx="2" ry="2" />
+<text  x="221.77" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::MatrixArray&lt;std::complex&lt;double&gt; &gt; const&gt;::Acquire (192,272 samples, 0.02%)</title><rect x="314.6" y="421" width="0.2" height="15.0" fill="rgb(234,134,32)" rx="2" ry="2" />
+<text  x="317.64" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue const&gt;::Ptr (396,945 samples, 0.04%)</title><rect x="737.4" y="533" width="0.3" height="15.0" fill="rgb(254,229,54)" rx="2" ry="2" />
+<text  x="740.39" y="543.5" ></text>
+</g>
+<g >
+<title>void std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_construct_node&lt;std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (405,977 samples, 0.04%)</title><rect x="83.2" y="373" width="0.3" height="15.0" fill="rgb(231,122,29)" rx="2" ry="2" />
+<text  x="86.21" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::LtePhy::GetControlMessages[abi:cxx11] (5,327,384 samples, 0.55%)</title><rect x="354.4" y="549" width="4.3" height="15.0" fill="rgb(250,208,49)" rx="2" ry="2" />
+<text  x="357.43" y="559.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumModel const&gt;::operator= (252,993 samples, 0.03%)</title><rect x="604.1" y="309" width="0.2" height="15.0" fill="rgb(232,124,29)" rx="2" ry="2" />
+<text  x="607.07" y="319.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::operator= (127,305 samples, 0.01%)</title><rect x="593.2" y="261" width="0.1" height="15.0" fill="rgb(211,28,6)" rx="2" ry="2" />
+<text  x="596.21" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::DlInfoListElement_s (152,454 samples, 0.02%)</title><rect x="456.7" y="261" width="0.1" height="15.0" fill="rgb(231,119,28)" rx="2" ry="2" />
+<text  x="459.65" y="271.5" ></text>
+</g>
+<g >
+<title>void ns3::Callback&lt;void, std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt;::Callback&lt;void  (74,700,874 samples, 7.70%)</title><rect x="516.5" y="453" width="60.1" height="15.0" fill="rgb(234,135,32)" rx="2" ry="2" />
+<text  x="519.51" y="463.5" >void n..</text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::~_List_base (343,413 samples, 0.04%)</title><rect x="654.2" y="421" width="0.2" height="15.0" fill="rgb(221,74,17)" rx="2" ry="2" />
+<text  x="657.16" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt;::Ptr (203,782 samples, 0.02%)</title><rect x="750.3" y="565" width="0.1" height="15.0" fill="rgb(219,67,16)" rx="2" ry="2" />
+<text  x="753.27" y="575.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::AttributeConstructionList::Item, std::allocator&lt;ns3::AttributeConstructionList::Item&gt; &gt;::_List_impl::_List_impl (374,981 samples, 0.04%)</title><rect x="162.5" y="373" width="0.3" height="15.0" fill="rgb(210,27,6)" rx="2" ry="2" />
+<text  x="165.45" y="383.5" ></text>
+</g>
+<g >
+<title>unsigned long* std::copy&lt;unsigned long*, unsigned long*&gt; (260,141 samples, 0.03%)</title><rect x="248.3" y="421" width="0.2" height="15.0" fill="rgb(236,144,34)" rx="2" ry="2" />
+<text  x="251.30" y="431.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::map (719,320 samples, 0.07%)</title><rect x="668.3" y="501" width="0.6" height="15.0" fill="rgb(242,171,40)" rx="2" ry="2" />
+<text  x="671.32" y="511.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::DlInfoListElement_s::HarqStatus_e*, ns3::DlInfoListElement_s::HarqStatus_e&gt; (305,928 samples, 0.03%)</title><rect x="256.7" y="373" width="0.2" height="15.0" fill="rgb(249,204,48)" rx="2" ry="2" />
+<text  x="259.69" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;int const, double&gt; &gt;* std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_M_create_node&lt;std::pair&lt;int, double&gt; &gt; (461,183 samples, 0.05%)</title><rect x="293.1" y="469" width="0.4" height="15.0" fill="rgb(206,5,1)" rx="2" ry="2" />
+<text  x="296.13" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::MacCeListElement_s, std::allocator&lt;ns3::MacCeListElement_s&gt; &gt;::_M_erase_at_end (796,900 samples, 0.08%)</title><rect x="264.8" y="485" width="0.6" height="15.0" fill="rgb(229,111,26)" rx="2" ry="2" />
+<text  x="267.80" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;* std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_copy&lt;false, std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_Alloc_node&gt; (878,011 samples, 0.09%)</title><rect x="341.6" y="437" width="0.7" height="15.0" fill="rgb(251,212,50)" rx="2" ry="2" />
+<text  x="344.64" y="447.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;::_M_ptr (461,464 samples, 0.05%)</title><rect x="759.8" y="661" width="0.4" height="15.0" fill="rgb(219,66,15)" rx="2" ry="2" />
+<text  x="762.84" y="671.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;* std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_copy&lt;false, std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_Alloc_node&gt; (688,048 samples, 0.07%)</title><rect x="341.8" y="421" width="0.5" height="15.0" fill="rgb(251,212,50)" rx="2" ry="2" />
+<text  x="344.79" y="431.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt;::at (152,411 samples, 0.02%)</title><rect x="173.6" y="453" width="0.1" height="15.0" fill="rgb(208,14,3)" rx="2" ry="2" />
+<text  x="176.56" y="463.5" ></text>
+</g>
+<g >
+<title>double std::reduce&lt;__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, double, std::plus&lt;void&gt; &gt; (650,475 samples, 0.07%)</title><rect x="602.3" y="309" width="0.5" height="15.0" fill="rgb(221,77,18)" rx="2" ry="2" />
+<text  x="605.31" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultDeleter&lt;ns3::SpectrumValue&gt;::Delete (189,290 samples, 0.02%)</title><rect x="112.2" y="453" width="0.2" height="15.0" fill="rgb(222,79,19)" rx="2" ry="2" />
+<text  x="115.24" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::SbMeasResult_s&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::SbMeasResult_s&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::SbMeasResult_s&gt; &gt; &gt;::find (231,252 samples, 0.02%)</title><rect x="94.1" y="453" width="0.2" height="15.0" fill="rgb(219,65,15)" rx="2" ry="2" />
+<text  x="97.09" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::Begin (649,187 samples, 0.07%)</title><rect x="491.3" y="549" width="0.5" height="15.0" fill="rgb(212,32,7)" rx="2" ry="2" />
+<text  x="494.27" y="559.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; std::_Rb_tree&lt;ns3::TbId_t, std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::_Select1st&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::_M_emplace_hint_unique&lt;std::pair&lt;ns3::TbId_t, ns3::tbInfo_t&gt; &gt; (2,868,330 samples, 0.30%)</title><rect x="526.4" y="309" width="2.3" height="15.0" fill="rgb(216,50,12)" rx="2" ry="2" />
+<text  x="529.36" y="319.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::vector (302,989 samples, 0.03%)</title><rect x="203.5" y="389" width="0.2" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="206.48" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt; &gt;::operator (234,452 samples, 0.02%)</title><rect x="297.6" y="469" width="0.2" height="15.0" fill="rgb(214,43,10)" rx="2" ry="2" />
+<text  x="300.59" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Bvector_base&lt;std::allocator&lt;bool&gt; &gt;::_Bvector_impl_data::_M_reset (153,274 samples, 0.02%)</title><rect x="196.3" y="437" width="0.1" height="15.0" fill="rgb(233,129,31)" rx="2" ry="2" />
+<text  x="199.26" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::LteSpectrumModelId, std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt;, std::_Select1st&lt;std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt; &gt;, std::less&lt;ns3::LteSpectrumModelId&gt;, std::allocator&lt;std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt; &gt; &gt;::_S_key (418,561 samples, 0.04%)</title><rect x="298.2" y="421" width="0.3" height="15.0" fill="rgb(209,19,4)" rx="2" ry="2" />
+<text  x="301.19" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter&gt;::GetReferenceCount (169,529 samples, 0.02%)</title><rect x="450.5" y="245" width="0.2" height="15.0" fill="rgb(218,61,14)" rx="2" ry="2" />
+<text  x="453.55" y="255.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;int const, double&gt; &gt; &gt;::allocate (199,176 samples, 0.02%)</title><rect x="293.2" y="421" width="0.1" height="15.0" fill="rgb(226,97,23)" rx="2" ry="2" />
+<text  x="296.16" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Any_data::_M_access (231,298 samples, 0.02%)</title><rect x="43.1" y="629" width="0.2" height="15.0" fill="rgb(219,68,16)" rx="2" ry="2" />
+<text  x="46.13" y="639.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::MacCeListElement_s*, std::vector&lt;ns3::MacCeListElement_s, std::allocator&lt;ns3::MacCeListElement_s&gt; &gt; &gt; std::vector&lt;ns3::MacCeListElement_s, std::allocator&lt;ns3::MacCeListElement_s&gt; &gt;::insert&lt;__gnu_cxx::__normal_iterator&lt;ns3::MacCeListElement_s*, std::vector&lt;ns3::MacCeListElement_s, std::allocator&lt;ns3::MacCeListElement_s&gt; &gt; &gt;, void&gt; (2,564,176 samples, 0.26%)</title><rect x="128.3" y="517" width="2.1" height="15.0" fill="rgb(223,85,20)" rx="2" ry="2" />
+<text  x="131.32" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultSimulatorImpl::Schedule (1,482,842 samples, 0.15%)</title><rect x="108.3" y="501" width="1.2" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="111.32" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter&gt;::Unref (8,236,952 samples, 0.85%)</title><rect x="544.5" y="309" width="6.6" height="15.0" fill="rgb(221,78,18)" rx="2" ry="2" />
+<text  x="547.49" y="319.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::AttributeConstructionList::Item, std::allocator&lt;ns3::AttributeConstructionList::Item&gt; &gt;::~_List_base (248,847 samples, 0.03%)</title><rect x="540.1" y="261" width="0.2" height="15.0" fill="rgb(237,148,35)" rx="2" ry="2" />
+<text  x="543.13" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::Node::GetId (131,119 samples, 0.01%)</title><rect x="651.3" y="517" width="0.1" height="15.0" fill="rgb(234,135,32)" rx="2" ry="2" />
+<text  x="654.29" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::EventImpl::Invoke (2,105,662 samples, 0.22%)</title><rect x="15.5" y="725" width="1.6" height="15.0" fill="rgb(209,20,4)" rx="2" ry="2" />
+<text  x="18.45" y="735.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt; &gt; &gt;::_M_mbegin (194,122 samples, 0.02%)</title><rect x="169.8" y="405" width="0.2" height="15.0" fill="rgb(213,39,9)" rx="2" ry="2" />
+<text  x="172.80" y="415.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;is_invocable_r_v&lt;void, void  (73,085,767 samples, 7.54%)</title><rect x="517.8" y="405" width="58.8" height="15.0" fill="rgb(243,178,42)" rx="2" ry="2" />
+<text  x="520.81" y="415.5" >std::e..</text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::max_size (128,242 samples, 0.01%)</title><rect x="590.7" y="213" width="0.1" height="15.0" fill="rgb(242,171,41)" rx="2" ry="2" />
+<text  x="593.71" y="223.5" ></text>
+</g>
+<g >
+<title>ns3::ByteTagList::Add (831,259 samples, 0.09%)</title><rect x="13.1" y="389" width="0.7" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="16.10" y="399.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_insert&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; const&amp;&gt; (1,452,841 samples, 0.15%)</title><rect x="499.0" y="501" width="1.2" height="15.0" fill="rgb(210,27,6)" rx="2" ry="2" />
+<text  x="501.99" y="511.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_initialize_dispatch&lt;std::_List_const_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; (1,343,666 samples, 0.14%)</title><rect x="355.2" y="517" width="1.1" height="15.0" fill="rgb(215,50,12)" rx="2" ry="2" />
+<text  x="358.17" y="527.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; const*, std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt; &gt;::difference_type __gnu_cxx::operator-&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; const*, std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt; &gt; (346,160 samples, 0.04%)</title><rect x="356.5" y="517" width="0.3" height="15.0" fill="rgb(252,220,52)" rx="2" ry="2" />
+<text  x="359.54" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;2ul, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::_Tuple_impl (552,616 samples, 0.06%)</title><rect x="667.5" y="357" width="0.5" height="15.0" fill="rgb(231,121,29)" rx="2" ry="2" />
+<text  x="670.51" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt;::operator= (229,336 samples, 0.02%)</title><rect x="96.9" y="437" width="0.2" height="15.0" fill="rgb(219,65,15)" rx="2" ry="2" />
+<text  x="99.94" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;* std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_M_copy&lt;false, std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_Alloc_node&gt; (425,223 samples, 0.04%)</title><rect x="104.5" y="421" width="0.3" height="15.0" fill="rgb(236,146,34)" rx="2" ry="2" />
+<text  x="107.45" y="431.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::FfMacSchedSapProvider::SchedUlCqiInfoReqParameters, std::allocator&lt;ns3::FfMacSchedSapProvider::SchedUlCqiInfoReqParameters&gt; &gt;::clear (1,175,215 samples, 0.12%)</title><rect x="263.1" y="517" width="1.0" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="266.12" y="527.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;unsigned short*&gt; (155,477 samples, 0.02%)</title><rect x="473.1" y="245" width="0.2" height="15.0" fill="rgb(237,148,35)" rx="2" ry="2" />
+<text  x="476.13" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::MapScheduler::Insert (1,924,172 samples, 0.20%)</title><rect x="706.3" y="469" width="1.5" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="709.29" y="479.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt;::allocate (145,308 samples, 0.01%)</title><rect x="261.1" y="293" width="0.1" height="15.0" fill="rgb(209,19,4)" rx="2" ry="2" />
+<text  x="264.05" y="303.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Callback&lt;void, ns3::Ptr&lt;ns3::SpectrumPhy const&gt;, ns3::Ptr&lt;ns3::SpectrumPhy const&gt;, double&gt;, std::allocator&lt;ns3::Callback&lt;void, ns3::Ptr&lt;ns3::SpectrumPhy const&gt;, ns3::Ptr&lt;ns3::SpectrumPhy const&gt;, double&gt; &gt; &gt;::end (161,602 samples, 0.02%)</title><rect x="746.7" y="533" width="0.1" height="15.0" fill="rgb(229,113,27)" rx="2" ry="2" />
+<text  x="749.70" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::MultiModelSpectrumChannel::FindAndEventuallyAddTxSpectrumModel (2,239,555 samples, 0.23%)</title><rect x="649.5" y="517" width="1.8" height="15.0" fill="rgb(212,32,7)" rx="2" ry="2" />
+<text  x="652.49" y="527.5" ></text>
+</g>
+<g >
+<title>unsigned short* std::__copy_move_a1&lt;true, unsigned short*, unsigned short*&gt; (140,404 samples, 0.01%)</title><rect x="253.5" y="357" width="0.1" height="15.0" fill="rgb(237,147,35)" rx="2" ry="2" />
+<text  x="256.47" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::~SpectrumValue (431,105 samples, 0.04%)</title><rect x="409.2" y="533" width="0.3" height="15.0" fill="rgb(247,193,46)" rx="2" ry="2" />
+<text  x="412.18" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Bit_iterator std::__copy_move_a&lt;false, std::_Bit_iterator, std::_Bit_iterator&gt; (749,593 samples, 0.08%)</title><rect x="197.4" y="421" width="0.6" height="15.0" fill="rgb(247,193,46)" rx="2" ry="2" />
+<text  x="200.38" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::ConstantPositionMobilityModel::DoGetPosition (233,482 samples, 0.02%)</title><rect x="319.8" y="485" width="0.2" height="15.0" fill="rgb(212,32,7)" rx="2" ry="2" />
+<text  x="322.82" y="495.5" ></text>
+</g>
+<g >
+<title>std::_List_iterator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt;::_List_iterator (155,009 samples, 0.02%)</title><rect x="165.5" y="341" width="0.1" height="15.0" fill="rgb(231,119,28)" rx="2" ry="2" />
+<text  x="168.51" y="351.5" ></text>
+</g>
+<g >
+<title>__dynamic_cast (157,542 samples, 0.02%)</title><rect x="735.1" y="517" width="0.1" height="15.0" fill="rgb(227,102,24)" rx="2" ry="2" />
+<text  x="738.07" y="527.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__enable_if&lt;std::__is_scalar&lt;double&gt;::__value, void&gt;::__type std::__fill_a1&lt;double*, double&gt; (229,101 samples, 0.02%)</title><rect x="301.6" y="325" width="0.1" height="15.0" fill="rgb(237,149,35)" rx="2" ry="2" />
+<text  x="304.55" y="335.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::splice (416,066 samples, 0.04%)</title><rect x="346.6" y="469" width="0.4" height="15.0" fill="rgb(220,70,16)" rx="2" ry="2" />
+<text  x="349.64" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::LogComponent::IsEnabled (147,616 samples, 0.02%)</title><rect x="34.3" y="389" width="0.1" height="15.0" fill="rgb(214,43,10)" rx="2" ry="2" />
+<text  x="37.30" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::HarqStatus_e* std::copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::DlInfoListElement_s::HarqStatus_e const*, std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt; &gt;, ns3::DlInfoListElement_s::HarqStatus_e*&gt; (234,294 samples, 0.02%)</title><rect x="510.0" y="453" width="0.2" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="512.98" y="463.5" ></text>
+</g>
+<g >
+<title>std::__detail::_List_node_header::_List_node_header (627,016 samples, 0.06%)</title><rect x="539.6" y="229" width="0.5" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="542.55" y="239.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt;::_M_allocate (311,673 samples, 0.03%)</title><rect x="210.8" y="453" width="0.3" height="15.0" fill="rgb(215,47,11)" rx="2" ry="2" />
+<text  x="213.83" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::operator= (872,797 samples, 0.09%)</title><rect x="482.4" y="325" width="0.7" height="15.0" fill="rgb(243,177,42)" rx="2" ry="2" />
+<text  x="485.35" y="335.5" ></text>
+</g>
+<g >
+<title>double* std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, double*&gt; (433,103 samples, 0.04%)</title><rect x="325.0" y="389" width="0.3" height="15.0" fill="rgb(210,23,5)" rx="2" ry="2" />
+<text  x="327.97" y="399.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::Callback&lt;void, ns3::SpectrumValue const&amp;&gt;*, std::vector&lt;ns3::Callback&lt;void, ns3::SpectrumValue const&amp;&gt;, std::allocator&lt;ns3::Callback&lt;void, ns3::SpectrumValue const&amp;&gt; &gt; &gt; &gt;::operator* (125,378 samples, 0.01%)</title><rect x="576.9" y="517" width="0.1" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="579.86" y="527.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_S_max_size (166,200 samples, 0.02%)</title><rect x="597.5" y="213" width="0.1" height="15.0" fill="rgb(219,65,15)" rx="2" ry="2" />
+<text  x="600.46" y="223.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_M_check_len (802,727 samples, 0.08%)</title><rect x="693.4" y="453" width="0.6" height="15.0" fill="rgb(220,70,16)" rx="2" ry="2" />
+<text  x="696.39" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultSimulatorImpl::Now (234,121 samples, 0.02%)</title><rect x="408.6" y="501" width="0.2" height="15.0" fill="rgb(213,40,9)" rx="2" ry="2" />
+<text  x="411.63" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::~_Vector_base (233,971 samples, 0.02%)</title><rect x="483.9" y="485" width="0.2" height="15.0" fill="rgb(223,86,20)" rx="2" ry="2" />
+<text  x="486.91" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt;::_Vector_impl::_Vector_impl (396,334 samples, 0.04%)</title><rect x="261.2" y="357" width="0.3" height="15.0" fill="rgb(229,112,26)" rx="2" ry="2" />
+<text  x="264.17" y="367.5" ></text>
+</g>
+<g >
+<title>std::_Bind&lt;void  (495,402 samples, 0.05%)</title><rect x="340.8" y="405" width="0.4" height="15.0" fill="rgb(253,221,52)" rx="2" ry="2" />
+<text  x="343.78" y="415.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;std::_List_node&lt;ns3::UlDciLteControlMessage&gt; &gt; &gt;::deallocate (278,972 samples, 0.03%)</title><rect x="291.0" y="341" width="0.2" height="15.0" fill="rgb(221,74,17)" rx="2" ry="2" />
+<text  x="293.95" y="351.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::Ptr&lt;ns3::UeManager&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::Ptr&lt;ns3::UeManager&gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::Ptr&lt;ns3::UeManager&gt; &gt; &gt; &gt;::_M_end (344,004 samples, 0.04%)</title><rect x="28.4" y="309" width="0.3" height="15.0" fill="rgb(208,15,3)" rx="2" ry="2" />
+<text  x="31.38" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleUeComponentCarrierManager::DoReceivePdu (2,187,838 samples, 0.23%)</title><rect x="435.7" y="309" width="1.8" height="15.0" fill="rgb(213,40,9)" rx="2" ry="2" />
+<text  x="438.71" y="319.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Buffer::Data*, std::allocator&lt;ns3::Buffer::Data*&gt; &gt;::push_back (465,302 samples, 0.05%)</title><rect x="546.0" y="85" width="0.4" height="15.0" fill="rgb(234,137,32)" rx="2" ry="2" />
+<text  x="549.01" y="95.5" ></text>
+</g>
+<g >
+<title>ns3::Packet::Copy (174,202 samples, 0.02%)</title><rect x="644.7" y="453" width="0.1" height="15.0" fill="rgb(250,211,50)" rx="2" ry="2" />
+<text  x="647.66" y="463.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt;::construct&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; const&amp;&gt; (2,568,842 samples, 0.26%)</title><rect x="352.4" y="517" width="2.0" height="15.0" fill="rgb(221,77,18)" rx="2" ry="2" />
+<text  x="355.36" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Head_base&lt;1ul, ns3::Ptr&lt;ns3::PacketBurst&gt;, false&gt;::~_Head_base (267,500 samples, 0.03%)</title><rect x="281.4" y="437" width="0.2" height="15.0" fill="rgb(207,9,2)" rx="2" ry="2" />
+<text  x="284.38" y="447.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, unsigned char*, unsigned char&gt; (662,282 samples, 0.07%)</title><rect x="126.8" y="373" width="0.5" height="15.0" fill="rgb(226,96,23)" rx="2" ry="2" />
+<text  x="129.80" y="383.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_put_node (124,394 samples, 0.01%)</title><rect x="776.2" y="341" width="0.1" height="15.0" fill="rgb(235,141,33)" rx="2" ry="2" />
+<text  x="779.16" y="351.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;is_invocable_r_v&lt;void, void  (1,098,325 samples, 0.11%)</title><rect x="440.1" y="405" width="0.8" height="15.0" fill="rgb(243,178,42)" rx="2" ry="2" />
+<text  x="443.05" y="415.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned short const, unsigned char&gt; &gt;::_M_ptr (154,865 samples, 0.02%)</title><rect x="245.0" y="405" width="0.2" height="15.0" fill="rgb(219,68,16)" rx="2" ry="2" />
+<text  x="248.03" y="415.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::operator= (879,906 samples, 0.09%)</title><rect x="621.8" y="421" width="0.7" height="15.0" fill="rgb(251,215,51)" rx="2" ry="2" />
+<text  x="624.76" y="431.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::FfMacSchedSapProvider::SchedUlCqiInfoReqParameters*, ns3::FfMacSchedSapProvider::SchedUlCqiInfoReqParameters&gt; (1,058,935 samples, 0.11%)</title><rect x="263.2" y="485" width="0.9" height="15.0" fill="rgb(217,59,14)" rx="2" ry="2" />
+<text  x="266.21" y="495.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt;::construct&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, ns3::Ptr&lt;ns3::LteControlMessage&gt; const&amp;&gt; (603,034 samples, 0.06%)</title><rect x="499.6" y="469" width="0.5" height="15.0" fill="rgb(231,120,28)" rx="2" ry="2" />
+<text  x="502.64" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;* std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_M_create_node&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; const&amp;&gt; (310,137 samples, 0.03%)</title><rect x="104.5" y="357" width="0.3" height="15.0" fill="rgb(235,139,33)" rx="2" ry="2" />
+<text  x="107.52" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::PhichListElement_s* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;ns3::PhichListElement_s const*, std::vector&lt;ns3::PhichListElement_s, std::allocator&lt;ns3::PhichListElement_s&gt; &gt; &gt;, ns3::PhichListElement_s*, ns3::PhichListElement_s&gt; (202,017 samples, 0.02%)</title><rect x="227.5" y="437" width="0.2" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="230.50" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumSignalParametersDlCtrlFrame::LteSpectrumSignalParametersDlCtrlFrame (729,950 samples, 0.08%)</title><rect x="113.8" y="453" width="0.6" height="15.0" fill="rgb(234,133,32)" rx="2" ry="2" />
+<text  x="116.83" y="463.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::AttributeConstructionList::Item, std::allocator&lt;ns3::AttributeConstructionList::Item&gt; &gt;::~_List_base (194,036 samples, 0.02%)</title><rect x="372.1" y="469" width="0.1" height="15.0" fill="rgb(237,148,35)" rx="2" ry="2" />
+<text  x="375.07" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::end (233,069 samples, 0.02%)</title><rect x="218.1" y="453" width="0.2" height="15.0" fill="rgb(218,63,15)" rx="2" ry="2" />
+<text  x="221.06" y="463.5" ></text>
+</g>
+<g >
+<title>std::tuple&lt;ns3::LteEnbPhy*, ns3::Ptr&lt;ns3::PacketBurst&gt; &gt;::~tuple (384,441 samples, 0.04%)</title><rect x="281.3" y="485" width="0.3" height="15.0" fill="rgb(221,75,18)" rx="2" ry="2" />
+<text  x="284.29" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt; &gt;::_M_lower_bound (741,372 samples, 0.08%)</title><rect x="566.0" y="197" width="0.6" height="15.0" fill="rgb(245,188,44)" rx="2" ry="2" />
+<text  x="568.96" y="207.5" ></text>
+</g>
+<g >
+<title>ns3::LteUeMac::DoReceiveLteControlMessage (45,310,234 samples, 4.67%)</title><rect x="535.5" y="341" width="36.4" height="15.0" fill="rgb(216,54,13)" rx="2" ry="2" />
+<text  x="538.47" y="351.5" >ns3..</text>
+</g>
+<g >
+<title>std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::map (155,456 samples, 0.02%)</title><rect x="341.2" y="469" width="0.2" height="15.0" fill="rgb(242,171,40)" rx="2" ry="2" />
+<text  x="344.24" y="479.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::~list (757,885 samples, 0.08%)</title><rect x="391.9" y="549" width="0.6" height="15.0" fill="rgb(222,80,19)" rx="2" ry="2" />
+<text  x="394.90" y="559.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt;::_S_right (160,926 samples, 0.02%)</title><rect x="169.0" y="405" width="0.1" height="15.0" fill="rgb(248,201,48)" rx="2" ry="2" />
+<text  x="171.96" y="415.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::_M_put_node (503,112 samples, 0.05%)</title><rect x="378.0" y="309" width="0.4" height="15.0" fill="rgb(251,213,51)" rx="2" ry="2" />
+<text  x="381.00" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumPhy::StartTxDlCtrlFrame (5,343,400 samples, 0.55%)</title><rect x="112.5" y="517" width="4.3" height="15.0" fill="rgb(230,118,28)" rx="2" ry="2" />
+<text  x="115.48" y="527.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned int, ns3::RxSpectrumModelInfo, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::RxSpectrumModelInfo&gt; &gt; &gt;::begin (295,643 samples, 0.03%)</title><rect x="329.8" y="501" width="0.2" height="15.0" fill="rgb(238,153,36)" rx="2" ry="2" />
+<text  x="332.77" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::MacCeValue_u::MacCeValue_u (300,339 samples, 0.03%)</title><rect x="688.8" y="453" width="0.2" height="15.0" fill="rgb(219,65,15)" rx="2" ry="2" />
+<text  x="691.79" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::HarqProcessInfoElement_t* std::__copy_move_a1&lt;false, ns3::HarqProcessInfoElement_t const*, ns3::HarqProcessInfoElement_t*&gt; (124,767 samples, 0.01%)</title><rect x="591.7" y="181" width="0.1" height="15.0" fill="rgb(229,112,26)" rx="2" ry="2" />
+<text  x="594.70" y="191.5" ></text>
+</g>
+<g >
+<title>std::_Function_handler&lt;void  (488,113 samples, 0.05%)</title><rect x="640.5" y="405" width="0.4" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="643.55" y="415.5" ></text>
+</g>
+<g >
+<title>unsigned short* std::__miter_base&lt;unsigned short*&gt; (233,316 samples, 0.02%)</title><rect x="253.3" y="357" width="0.1" height="15.0" fill="rgb(249,204,48)" rx="2" ry="2" />
+<text  x="256.26" y="367.5" ></text>
+</g>
+<g >
+<title>double* std::__uninitialized_default_n_a&lt;double*, unsigned long, double&gt; (267,489 samples, 0.03%)</title><rect x="111.9" y="405" width="0.2" height="15.0" fill="rgb(248,199,47)" rx="2" ry="2" />
+<text  x="114.93" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::Simulator::Run (22,443,594 samples, 2.31%)</title><rect x="17.2" y="805" width="18.0" height="15.0" fill="rgb(234,134,32)" rx="2" ry="2" />
+<text  x="20.17" y="815.5" ></text>
+</g>
+<g >
+<title>ns3::LteInterference::EndRx (38,592,765 samples, 3.98%)</title><rect x="576.7" y="549" width="31.0" height="15.0" fill="rgb(208,17,4)" rx="2" ry="2" />
+<text  x="579.70" y="559.5" >ns..</text>
+</g>
+<g >
+<title>std::__is_constant_evaluated (235,304 samples, 0.02%)</title><rect x="270.3" y="357" width="0.2" height="15.0" fill="rgb(234,137,32)" rx="2" ry="2" />
+<text  x="273.32" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::MakeEvent&lt;void  (8,821,901 samples, 0.91%)</title><rect x="770.2" y="693" width="7.1" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="773.19" y="703.5" ></text>
+</g>
+<g >
+<title>ns3::EventId::operator= (817,259 samples, 0.08%)</title><rect x="307.9" y="517" width="0.7" height="15.0" fill="rgb(241,165,39)" rx="2" ry="2" />
+<text  x="310.92" y="527.5" ></text>
+</g>
+<g >
+<title>std::function&lt;void  (563,988 samples, 0.06%)</title><rect x="640.5" y="437" width="0.4" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="643.49" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::BuildRarListElement_s, std::allocator&lt;ns3::BuildRarListElement_s&gt; &gt;::_Vector_base (274,244 samples, 0.03%)</title><rect x="174.5" y="453" width="0.2" height="15.0" fill="rgb(222,81,19)" rx="2" ry="2" />
+<text  x="177.50" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbMac::DoSubframeIndication (20,436,391 samples, 2.11%)</title><rect x="91.8" y="517" width="16.5" height="15.0" fill="rgb(248,200,47)" rx="2" ry="2" />
+<text  x="94.81" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Bit_iterator std::__copy_move_a1&lt;false, std::_Bit_const_iterator, std::_Bit_iterator&gt; (419,348 samples, 0.04%)</title><rect x="199.3" y="389" width="0.3" height="15.0" fill="rgb(207,11,2)" rx="2" ry="2" />
+<text  x="202.27" y="399.5" ></text>
+</g>
+<g >
+<title>void std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_M_construct_node&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; const&amp;&gt; (2,970,837 samples, 0.31%)</title><rect x="237.9" y="357" width="2.4" height="15.0" fill="rgb(231,119,28)" rx="2" ry="2" />
+<text  x="240.93" y="367.5" ></text>
+</g>
+<g >
+<title>std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;* std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_create_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; const&amp;&gt; (186,142 samples, 0.02%)</title><rect x="648.9" y="357" width="0.1" height="15.0" fill="rgb(230,116,27)" rx="2" ry="2" />
+<text  x="651.88" y="367.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_M_drop_node (239,459 samples, 0.02%)</title><rect x="232.9" y="421" width="0.2" height="15.0" fill="rgb(217,55,13)" rx="2" ry="2" />
+<text  x="235.92" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;3ul, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::_Tuple_impl (340,851 samples, 0.04%)</title><rect x="340.9" y="325" width="0.3" height="15.0" fill="rgb(218,59,14)" rx="2" ry="2" />
+<text  x="343.90" y="335.5" ></text>
+</g>
+<g >
+<title>double* std::__fill_n_a&lt;double*, unsigned long, double&gt; (203,543 samples, 0.02%)</title><rect x="730.0" y="357" width="0.2" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="732.99" y="367.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, unsigned short, std::_Identity&lt;unsigned short&gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;unsigned short&gt; &gt;::find (417,874 samples, 0.04%)</title><rect x="245.9" y="469" width="0.4" height="15.0" fill="rgb(238,154,36)" rx="2" ry="2" />
+<text  x="248.94" y="479.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::map (510,421 samples, 0.05%)</title><rect x="329.3" y="501" width="0.4" height="15.0" fill="rgb(242,171,40)" rx="2" ry="2" />
+<text  x="332.33" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Time::GetMilliSeconds (370,485 samples, 0.04%)</title><rect x="493.6" y="549" width="0.3" height="15.0" fill="rgb(250,207,49)" rx="2" ry="2" />
+<text  x="496.61" y="559.5" ></text>
+</g>
+<g >
+<title>void ns3::Simulator::ScheduleWithContext&lt;void  (302,319 samples, 0.03%)</title><rect x="614.1" y="517" width="0.3" height="15.0" fill="rgb(222,78,18)" rx="2" ry="2" />
+<text  x="617.11" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;::operator (158,234 samples, 0.02%)</title><rect x="737.3" y="533" width="0.1" height="15.0" fill="rgb(243,179,42)" rx="2" ry="2" />
+<text  x="740.27" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt;::~Ptr (1,871,525 samples, 0.19%)</title><rect x="501.4" y="485" width="1.5" height="15.0" fill="rgb(205,3,0)" rx="2" ry="2" />
+<text  x="504.42" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Simulator::Now (232,342 samples, 0.02%)</title><rect x="391.0" y="549" width="0.2" height="15.0" fill="rgb(240,164,39)" rx="2" ry="2" />
+<text  x="394.02" y="559.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue const&gt;&amp; std::__get_helper&lt;1ul, ns3::Ptr&lt;ns3::SpectrumValue const&gt;, unsigned int&gt; (437,377 samples, 0.05%)</title><rect x="754.4" y="581" width="0.4" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="757.42" y="591.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue&gt;::Ptr (158,937 samples, 0.02%)</title><rect x="716.4" y="485" width="0.2" height="15.0" fill="rgb(220,73,17)" rx="2" ry="2" />
+<text  x="719.45" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_Auto_node::_Auto_node&lt;std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (461,688 samples, 0.05%)</title><rect x="108.5" y="421" width="0.4" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="111.50" y="431.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::allocate (258,278 samples, 0.03%)</title><rect x="334.5" y="325" width="0.2" height="15.0" fill="rgb(236,145,34)" rx="2" ry="2" />
+<text  x="337.53" y="335.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;bool, std::allocator&lt;bool&gt; &gt;::begin (144,500 samples, 0.01%)</title><rect x="200.0" y="437" width="0.2" height="15.0" fill="rgb(230,118,28)" rx="2" ry="2" />
+<text  x="203.04" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::LteHelper::InstallEnbDevice (397,186 samples, 0.04%)</title><rect x="35.8" y="773" width="0.3" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="38.80" y="783.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt; &gt; &gt;::_M_lower_bound (1,161,944 samples, 0.12%)</title><rect x="235.7" y="453" width="0.9" height="15.0" fill="rgb(243,176,42)" rx="2" ry="2" />
+<text  x="238.67" y="463.5" ></text>
+</g>
+<g >
+<title>signed char&amp; std::vector&lt;signed char, std::allocator&lt;signed char&gt; &gt;::emplace_back&lt;signed char&gt; (645,216 samples, 0.07%)</title><rect x="533.0" y="325" width="0.6" height="15.0" fill="rgb(252,219,52)" rx="2" ry="2" />
+<text  x="536.04" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::MemberSchedSapProvider&lt;ns3::PfFfMacScheduler&gt;::SchedUlMacCtrlInfoReq (867,311 samples, 0.09%)</title><rect x="225.5" y="517" width="0.7" height="15.0" fill="rgb(226,97,23)" rx="2" ry="2" />
+<text  x="228.49" y="527.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, unsigned char*, unsigned char&gt; (190,052 samples, 0.02%)</title><rect x="443.8" y="309" width="0.1" height="15.0" fill="rgb(226,96,23)" rx="2" ry="2" />
+<text  x="446.80" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::EnbMacMemberFfMacSchedSapUser::SchedUlConfigInd (5,236,229 samples, 0.54%)</title><rect x="227.4" y="485" width="4.2" height="15.0" fill="rgb(231,121,29)" rx="2" ry="2" />
+<text  x="230.35" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::BuildBroadcastListElement_s, std::allocator&lt;ns3::BuildBroadcastListElement_s&gt; &gt;::vector (853,778 samples, 0.09%)</title><rect x="140.9" y="453" width="0.6" height="15.0" fill="rgb(237,151,36)" rx="2" ry="2" />
+<text  x="143.86" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;0ul, double const&amp;, double const&amp;, double const&amp;&gt;::_Tuple_impl (1,012,471 samples, 0.10%)</title><rect x="749.2" y="485" width="0.8" height="15.0" fill="rgb(205,1,0)" rx="2" ry="2" />
+<text  x="752.17" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;bool, std::allocator&lt;bool&gt; &gt;::begin (264,203 samples, 0.03%)</title><rect x="195.4" y="437" width="0.2" height="15.0" fill="rgb(230,118,28)" rx="2" ry="2" />
+<text  x="198.39" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::Ptr&lt;ns3::Object&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Object&gt; &gt; &gt;::_Vector_base (386,549 samples, 0.04%)</title><rect x="161.7" y="389" width="0.3" height="15.0" fill="rgb(235,141,33)" rx="2" ry="2" />
+<text  x="164.70" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;* std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_M_clone_node&lt;false, std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_Alloc_node&gt; (3,678,586 samples, 0.38%)</title><rect x="237.4" y="405" width="2.9" height="15.0" fill="rgb(241,167,40)" rx="2" ry="2" />
+<text  x="240.39" y="415.5" ></text>
+</g>
+<g >
+<title>double* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, double*, double&gt; (1,019,777 samples, 0.11%)</title><rect x="412.1" y="485" width="0.9" height="15.0" fill="rgb(222,79,19)" rx="2" ry="2" />
+<text  x="415.13" y="495.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;::~list (1,583,725 samples, 0.16%)</title><rect x="392.5" y="549" width="1.3" height="15.0" fill="rgb(217,57,13)" rx="2" ry="2" />
+<text  x="395.54" y="559.5" ></text>
+</g>
+<g >
+<title>ns3::PfFfMacScheduler::RefreshHarqProcesses (2,902,711 samples, 0.30%)</title><rect x="178.9" y="485" width="2.3" height="15.0" fill="rgb(247,193,46)" rx="2" ry="2" />
+<text  x="181.89" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::LtePhy::SetControlMessages (654,203 samples, 0.07%)</title><rect x="230.2" y="421" width="0.5" height="15.0" fill="rgb(247,193,46)" rx="2" ry="2" />
+<text  x="233.16" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumSignalParametersDlCtrlFrame::LteSpectrumSignalParametersDlCtrlFrame (1,452,066 samples, 0.15%)</title><rect x="342.7" y="501" width="1.2" height="15.0" fill="rgb(234,133,32)" rx="2" ry="2" />
+<text  x="345.69" y="511.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;std::is_constructible&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt;::value, std::pair&lt;std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, bool&gt; &gt;::type std::map&lt;ns3::Scheduler::EventKey, ns3::EventImpl*, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::insert&lt;std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (153,997 samples, 0.02%)</title><rect x="637.7" y="469" width="0.1" height="15.0" fill="rgb(211,29,7)" rx="2" ry="2" />
+<text  x="640.66" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Object::Check (252,008 samples, 0.03%)</title><rect x="543.1" y="277" width="0.2" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="546.14" y="287.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt; &gt; &gt;::_M_begin (466,586 samples, 0.05%)</title><rect x="169.6" y="421" width="0.4" height="15.0" fill="rgb(217,58,13)" rx="2" ry="2" />
+<text  x="172.58" y="431.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::deallocate (229,384 samples, 0.02%)</title><rect x="392.3" y="469" width="0.1" height="15.0" fill="rgb(232,125,29)" rx="2" ry="2" />
+<text  x="395.26" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::TypeId::GetAttributeN (1,401,356 samples, 0.14%)</title><rect x="540.9" y="261" width="1.1" height="15.0" fill="rgb(225,95,22)" rx="2" ry="2" />
+<text  x="543.86" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::BuildDataListElement_s* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::BuildDataListElement_s const*, std::vector&lt;ns3::BuildDataListElement_s, std::allocator&lt;ns3::BuildDataListElement_s&gt; &gt; &gt;, ns3::BuildDataListElement_s*&gt; (515,194 samples, 0.05%)</title><rect x="141.9" y="421" width="0.4" height="15.0" fill="rgb(249,206,49)" rx="2" ry="2" />
+<text  x="144.92" y="431.5" ></text>
+</g>
+<g >
+<title>void ns3::Callback&lt;void, unsigned short, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;::Callback&lt;void  (1,074,961 samples, 0.11%)</title><rect x="725.7" y="421" width="0.9" height="15.0" fill="rgb(226,97,23)" rx="2" ry="2" />
+<text  x="728.72" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::HarqStatus_e* std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;ns3::DlInfoListElement_s::HarqStatus_e const*, std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt; &gt;, ns3::DlInfoListElement_s::HarqStatus_e*&gt; (1,354,907 samples, 0.14%)</title><rect x="259.5" y="309" width="1.1" height="15.0" fill="rgb(212,36,8)" rx="2" ry="2" />
+<text  x="262.52" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::LteControlMessage::LteControlMessage (383,602 samples, 0.04%)</title><rect x="159.8" y="421" width="0.3" height="15.0" fill="rgb(214,43,10)" rx="2" ry="2" />
+<text  x="162.75" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Packet&gt; ns3::Create&lt;ns3::Packet, unsigned int&amp;&gt; (1,604,788 samples, 0.17%)</title><rect x="14.1" y="405" width="1.3" height="15.0" fill="rgb(253,223,53)" rx="2" ry="2" />
+<text  x="17.13" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_Vector_impl::_Vector_impl (157,826 samples, 0.02%)</title><rect x="126.6" y="357" width="0.1" height="15.0" fill="rgb(226,98,23)" rx="2" ry="2" />
+<text  x="129.55" y="367.5" ></text>
+</g>
+<g >
+<title>unsigned short const* std::__niter_base&lt;unsigned short const*, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; (245,405 samples, 0.03%)</title><rect x="475.0" y="197" width="0.2" height="15.0" fill="rgb(226,99,23)" rx="2" ry="2" />
+<text  x="478.00" y="207.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;is_member_pointer_v&lt;void  (1,068,378 samples, 0.11%)</title><rect x="87.2" y="501" width="0.9" height="15.0" fill="rgb(241,170,40)" rx="2" ry="2" />
+<text  x="90.23" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Function_base::~_Function_base (183,222 samples, 0.02%)</title><rect x="308.4" y="405" width="0.2" height="15.0" fill="rgb(221,74,17)" rx="2" ry="2" />
+<text  x="311.43" y="415.5" ></text>
+</g>
+<g >
+<title>__dynamic_cast (871,347 samples, 0.09%)</title><rect x="344.9" y="501" width="0.7" height="15.0" fill="rgb(227,102,24)" rx="2" ry="2" />
+<text  x="347.86" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultDeleter&lt;ns3::SpectrumValue&gt;::Delete (896,241 samples, 0.09%)</title><rect x="772.8" y="469" width="0.8" height="15.0" fill="rgb(222,79,19)" rx="2" ry="2" />
+<text  x="775.83" y="479.5" ></text>
+</g>
+<g >
+<title>void std::_Bind&lt;void  (885,817,061 samples, 91.34%)</title><rect x="45.7" y="629" width="712.5" height="15.0" fill="rgb(242,174,41)" rx="2" ry="2" />
+<text  x="48.74" y="639.5" >void std::_Bind&lt;void </text>
+</g>
+<g >
+<title>ns3::HigherLayerSelected_s* std::__uninitialized_copy&lt;false&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::HigherLayerSelected_s const*, std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt; &gt;, ns3::HigherLayerSelected_s*&gt; (749,843 samples, 0.08%)</title><rect x="125.0" y="325" width="0.6" height="15.0" fill="rgb(251,215,51)" rx="2" ry="2" />
+<text  x="127.95" y="335.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt;::_M_range_check (201,283 samples, 0.02%)</title><rect x="205.8" y="469" width="0.2" height="15.0" fill="rgb(210,24,5)" rx="2" ry="2" />
+<text  x="208.81" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Packet::GetSize (289,398 samples, 0.03%)</title><rect x="555.4" y="261" width="0.2" height="15.0" fill="rgb(240,163,39)" rx="2" ry="2" />
+<text  x="558.37" y="271.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;*, std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt; &gt;::base (188,865 samples, 0.02%)</title><rect x="354.5" y="517" width="0.2" height="15.0" fill="rgb(211,29,6)" rx="2" ry="2" />
+<text  x="357.52" y="527.5" ></text>
+</g>
+<g >
+<title>std::tuple_element&lt;0ul, std::tuple&lt;ns3::LteUePhy*, unsigned int, unsigned int&gt; &gt;::type&amp; std::get&lt;0ul, ns3::LteUePhy*, unsigned int, unsigned int&gt; (225,116 samples, 0.02%)</title><rect x="753.8" y="597" width="0.2" height="15.0" fill="rgb(227,101,24)" rx="2" ry="2" />
+<text  x="756.78" y="607.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::operator= (725,734 samples, 0.07%)</title><rect x="531.1" y="341" width="0.6" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="534.09" y="351.5" ></text>
+</g>
+<g >
+<title>operator new (195,774 samples, 0.02%)</title><rect x="210.9" y="389" width="0.2" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="213.92" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::_M_begin (157,856 samples, 0.02%)</title><rect x="189.4" y="453" width="0.1" height="15.0" fill="rgb(234,137,32)" rx="2" ry="2" />
+<text  x="192.39" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteUePhy&gt; ns3::CreateObject&lt;ns3::LteUePhy, ns3::Ptr&lt;ns3::LteSpectrumPhy&gt;&amp;, ns3::Ptr&lt;ns3::LteSpectrumPhy&gt;&amp;&gt; (126,589 samples, 0.01%)</title><rect x="36.4" y="741" width="0.1" height="15.0" fill="rgb(246,189,45)" rx="2" ry="2" />
+<text  x="39.40" y="751.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::LteSpectrumModelId, std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt;, std::_Select1st&lt;std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt; &gt;, std::less&lt;ns3::LteSpectrumModelId&gt;, std::allocator&lt;std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt; &gt; &gt;::_M_lower_bound (729,846 samples, 0.08%)</title><rect x="298.1" y="437" width="0.6" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="301.10" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::Copy (1,952,922 samples, 0.20%)</title><rect x="71.2" y="453" width="1.6" height="15.0" fill="rgb(241,167,40)" rx="2" ry="2" />
+<text  x="74.21" y="463.5" ></text>
+</g>
+<g >
+<title>std::move_iterator&lt;ns3::MacCeListElement_s*&gt;::move_iterator (159,225 samples, 0.02%)</title><rect x="129.9" y="453" width="0.2" height="15.0" fill="rgb(214,44,10)" rx="2" ry="2" />
+<text  x="132.93" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteSpectrumSignalParametersUlSrsFrame&gt;::~Ptr (198,752 samples, 0.02%)</title><rect x="737.1" y="533" width="0.2" height="15.0" fill="rgb(209,20,4)" rx="2" ry="2" />
+<text  x="740.11" y="543.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::allocate (380,371 samples, 0.04%)</title><rect x="363.3" y="405" width="0.3" height="15.0" fill="rgb(215,48,11)" rx="2" ry="2" />
+<text  x="366.34" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumModel const&gt;::Ptr (356,299 samples, 0.04%)</title><rect x="405.2" y="501" width="0.3" height="15.0" fill="rgb(232,125,30)" rx="2" ry="2" />
+<text  x="408.18" y="511.5" ></text>
+</g>
+<g >
+<title>double* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, double*&gt; (583,431 samples, 0.06%)</title><rect x="324.9" y="437" width="0.4" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="327.85" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::LogComponent::IsEnabled (323,506 samples, 0.03%)</title><rect x="759.1" y="709" width="0.2" height="15.0" fill="rgb(214,43,10)" rx="2" ry="2" />
+<text  x="762.06" y="719.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;double&gt;::allocate (187,232 samples, 0.02%)</title><rect x="300.7" y="373" width="0.1" height="15.0" fill="rgb(221,76,18)" rx="2" ry="2" />
+<text  x="303.67" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Packet const&gt;::Acquire (156,632 samples, 0.02%)</title><rect x="492.5" y="533" width="0.2" height="15.0" fill="rgb(254,228,54)" rx="2" ry="2" />
+<text  x="495.53" y="543.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;double&gt; &gt;::deallocate (164,716 samples, 0.02%)</title><rect x="728.4" y="373" width="0.2" height="15.0" fill="rgb(236,143,34)" rx="2" ry="2" />
+<text  x="731.43" y="383.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;std::is_constructible&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt;, std::pair&lt;unsigned short, ns3::DlInfoListElement_s&gt; &gt;::value, std::pair&lt;std::_Rb_tree_iterator&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt;, bool&gt; &gt;::type std::map&lt;unsigned short, ns3::DlInfoListElement_s, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt; &gt;::insert&lt;std::pair&lt;unsigned short, ns3::DlInfoListElement_s&gt; &gt; (2,356,316 samples, 0.24%)</title><rect x="503.0" y="549" width="1.9" height="15.0" fill="rgb(248,202,48)" rx="2" ry="2" />
+<text  x="506.02" y="559.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt; &gt; &gt;::_M_lower_bound (159,330 samples, 0.02%)</title><rect x="104.3" y="437" width="0.2" height="15.0" fill="rgb(243,176,42)" rx="2" ry="2" />
+<text  x="107.33" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Seconds (322,115 samples, 0.03%)</title><rect x="427.6" y="245" width="0.3" height="15.0" fill="rgb(236,145,34)" rx="2" ry="2" />
+<text  x="430.65" y="255.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_List_impl::_List_impl (313,999 samples, 0.03%)</title><rect x="354.7" y="501" width="0.3" height="15.0" fill="rgb(244,183,43)" rx="2" ry="2" />
+<text  x="357.73" y="511.5" ></text>
+</g>
+<g >
+<title>double* std::__uninitialized_copy&lt;true&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, double*&gt; (156,421 samples, 0.02%)</title><rect x="484.8" y="437" width="0.2" height="15.0" fill="rgb(238,153,36)" rx="2" ry="2" />
+<text  x="487.85" y="447.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;::vector (3,232,067 samples, 0.33%)</title><rect x="512.3" y="549" width="2.6" height="15.0" fill="rgb(249,203,48)" rx="2" ry="2" />
+<text  x="515.30" y="559.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteChunkProcessor&gt;::operator (151,530 samples, 0.02%)</title><rect x="717.1" y="501" width="0.1" height="15.0" fill="rgb(243,177,42)" rx="2" ry="2" />
+<text  x="720.11" y="511.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::max_size (408,133 samples, 0.04%)</title><rect x="480.5" y="245" width="0.3" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="483.49" y="255.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt;::construct&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, ns3::Ptr&lt;ns3::LteControlMessage&gt;&amp;&gt; (232,855 samples, 0.02%)</title><rect x="722.0" y="421" width="0.1" height="15.0" fill="rgb(247,194,46)" rx="2" ry="2" />
+<text  x="724.96" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt; &gt;::_M_lower_bound (592,305 samples, 0.06%)</title><rect x="11.8" y="341" width="0.4" height="15.0" fill="rgb(245,188,44)" rx="2" ry="2" />
+<text  x="14.77" y="351.5" ></text>
+</g>
+<g >
+<title>int* std::__uninitialized_copy&lt;true&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;int const*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt;, int*&gt; (711,242 samples, 0.07%)</title><rect x="573.7" y="309" width="0.6" height="15.0" fill="rgb(207,11,2)" rx="2" ry="2" />
+<text  x="576.75" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::Callback&lt;void, ns3::SpectrumValue const&amp;&gt;::operator (324,769 samples, 0.03%)</title><rect x="611.9" y="517" width="0.3" height="15.0" fill="rgb(215,50,12)" rx="2" ry="2" />
+<text  x="614.94" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::RlcTag::Deserialize (396,822 samples, 0.04%)</title><rect x="424.7" y="229" width="0.3" height="15.0" fill="rgb(235,140,33)" rx="2" ry="2" />
+<text  x="427.68" y="239.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::find (727,246 samples, 0.07%)</title><rect x="223.2" y="469" width="0.6" height="15.0" fill="rgb(205,3,0)" rx="2" ry="2" />
+<text  x="226.17" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::NoOpComponentCarrierManager::DoTransmitPdu (1,327,529 samples, 0.14%)</title><rect x="11.4" y="389" width="1.1" height="15.0" fill="rgb(228,110,26)" rx="2" ry="2" />
+<text  x="14.43" y="399.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;is_invocable_r_v&lt;void, void  (15,223,770 samples, 1.57%)</title><rect x="471.5" y="373" width="12.3" height="15.0" fill="rgb(243,178,42)" rx="2" ry="2" />
+<text  x="474.54" y="383.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Ptr&lt;ns3::Object&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Object&gt; &gt; &gt;::~vector (146,330 samples, 0.02%)</title><rect x="653.8" y="325" width="0.1" height="15.0" fill="rgb(223,83,19)" rx="2" ry="2" />
+<text  x="656.75" y="335.5" ></text>
+</g>
+<g >
+<title>malloc (598,171 samples, 0.06%)</title><rect x="655.0" y="357" width="0.5" height="15.0" fill="rgb(230,119,28)" rx="2" ry="2" />
+<text  x="658.04" y="367.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt;::_S_max_size (312,752 samples, 0.03%)</title><rect x="211.2" y="421" width="0.3" height="15.0" fill="rgb(227,104,25)" rx="2" ry="2" />
+<text  x="214.23" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_S_key (126,450 samples, 0.01%)</title><rect x="83.9" y="389" width="0.1" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="86.90" y="399.5" ></text>
+</g>
+<g >
+<title>std::_List_node&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt;* std::__cxx11::list&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;::_M_create_node&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; const&amp;&gt; (2,282,165 samples, 0.24%)</title><rect x="723.3" y="485" width="1.8" height="15.0" fill="rgb(218,61,14)" rx="2" ry="2" />
+<text  x="726.27" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumModel const&gt;::Acquire (219,194 samples, 0.02%)</title><rect x="705.1" y="517" width="0.1" height="15.0" fill="rgb(222,80,19)" rx="2" ry="2" />
+<text  x="708.06" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::_Auto_node::_M_insert (235,870 samples, 0.02%)</title><rect x="192.0" y="453" width="0.2" height="15.0" fill="rgb(209,22,5)" rx="2" ry="2" />
+<text  x="195.04" y="463.5" ></text>
+</g>
+<g >
+<title>decltype  (620,289 samples, 0.06%)</title><rect x="384.8" y="421" width="0.5" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="387.82" y="431.5" ></text>
+</g>
+<g >
+<title>void std::destroy_at&lt;ns3::MacCeListElement_s&gt; (679,734 samples, 0.07%)</title><rect x="264.9" y="405" width="0.5" height="15.0" fill="rgb(250,209,50)" rx="2" ry="2" />
+<text  x="267.90" y="415.5" ></text>
+</g>
+<g >
+<title>std::set&lt;unsigned short, std::less&lt;unsigned short&gt;, std::allocator&lt;unsigned short&gt; &gt;::end (241,739 samples, 0.02%)</title><rect x="462.6" y="357" width="0.2" height="15.0" fill="rgb(242,171,41)" rx="2" ry="2" />
+<text  x="465.62" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::PacketMetadata::PacketMetadata (1,833,242 samples, 0.19%)</title><rect x="557.4" y="229" width="1.4" height="15.0" fill="rgb(231,121,28)" rx="2" ry="2" />
+<text  x="560.37" y="239.5" ></text>
+</g>
+<g >
+<title>ns3::Object::~Object (1,513,714 samples, 0.16%)</title><rect x="549.2" y="229" width="1.2" height="15.0" fill="rgb(229,110,26)" rx="2" ry="2" />
+<text  x="552.20" y="239.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultDeleter&lt;ns3::SpectrumValue&gt;::Delete (127,422 samples, 0.01%)</title><rect x="61.4" y="485" width="0.1" height="15.0" fill="rgb(222,79,19)" rx="2" ry="2" />
+<text  x="64.37" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Bvector_base&lt;std::allocator&lt;bool&gt; &gt;::_M_deallocate (464,044 samples, 0.05%)</title><rect x="201.9" y="453" width="0.4" height="15.0" fill="rgb(237,149,35)" rx="2" ry="2" />
+<text  x="204.95" y="463.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::Ptr&lt;ns3::Object&gt;*, ns3::Ptr&lt;ns3::Object&gt; &gt; (194,998 samples, 0.02%)</title><rect x="165.3" y="325" width="0.1" height="15.0" fill="rgb(226,98,23)" rx="2" ry="2" />
+<text  x="168.29" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt; ns3::CreateObject&lt;ns3::PacketBurst&gt; (375,534 samples, 0.04%)</title><rect x="119.3" y="517" width="0.3" height="15.0" fill="rgb(205,4,0)" rx="2" ry="2" />
+<text  x="122.32" y="527.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt;::construct&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; const&amp;&gt; (228,459 samples, 0.02%)</title><rect x="358.5" y="517" width="0.2" height="15.0" fill="rgb(217,55,13)" rx="2" ry="2" />
+<text  x="361.53" y="527.5" ></text>
+</g>
+<g >
+<title> (316,802 samples, 0.03%)</title><rect x="675.1" y="469" width="0.3" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="678.11" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::MakeEvent&lt;void  (597,366 samples, 0.06%)</title><rect x="726.8" y="485" width="0.5" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="729.78" y="495.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::__uninitialized_default_n_1&lt;true&gt;::__uninit_default_n&lt;unsigned char*, unsigned long&gt; (918,885 samples, 0.09%)</title><rect x="460.3" y="213" width="0.7" height="15.0" fill="rgb(252,220,52)" rx="2" ry="2" />
+<text  x="463.26" y="223.5" ></text>
+</g>
+<g >
+<title>void std::__fill_a&lt;unsigned char*, unsigned char&gt; (539,616 samples, 0.06%)</title><rect x="460.5" y="165" width="0.4" height="15.0" fill="rgb(228,110,26)" rx="2" ry="2" />
+<text  x="463.50" y="175.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Scheduler&gt;::operator (200,105 samples, 0.02%)</title><rect x="778.3" y="741" width="0.2" height="15.0" fill="rgb(211,31,7)" rx="2" ry="2" />
+<text  x="781.35" y="751.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, unsigned char, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, unsigned char&gt; &gt; &gt;::find (1,200,654 samples, 0.12%)</title><rect x="244.5" y="485" width="0.9" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="247.47" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::FfMacSchedSapProvider::SchedUlTriggerReqParameters::~SchedUlTriggerReqParameters (511,776 samples, 0.05%)</title><rect x="133.9" y="517" width="0.4" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="136.87" y="527.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::VendorSpecificListElement_s*, ns3::VendorSpecificListElement_s&gt; (198,417 samples, 0.02%)</title><rect x="25.2" y="309" width="0.2" height="15.0" fill="rgb(207,12,3)" rx="2" ry="2" />
+<text  x="28.20" y="319.5" ></text>
+</g>
+<g >
+<title>void std::_Construct&lt;ns3::MacCeListElement_s, ns3::MacCeListElement_s&amp;&gt; (432,867 samples, 0.04%)</title><rect x="129.2" y="421" width="0.3" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="132.18" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_S_maximum (155,370 samples, 0.02%)</title><rect x="236.9" y="421" width="0.2" height="15.0" fill="rgb(242,174,41)" rx="2" ry="2" />
+<text  x="239.94" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::PfFfMacScheduler::DoSchedUlCqiInfoReq (6,622,886 samples, 0.68%)</title><rect x="220.2" y="501" width="5.3" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="223.16" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_Vector_base (495,697 samples, 0.05%)</title><rect x="686.9" y="453" width="0.4" height="15.0" fill="rgb(205,2,0)" rx="2" ry="2" />
+<text  x="689.93" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::NoOpComponentCarrierManager::DoTransmitPdu (5,821,892 samples, 0.60%)</title><rect x="19.6" y="405" width="4.7" height="15.0" fill="rgb(228,110,26)" rx="2" ry="2" />
+<text  x="22.60" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::EventImpl*&amp;&amp; std::forward&lt;ns3::EventImpl*&gt; (126,251 samples, 0.01%)</title><rect x="661.5" y="309" width="0.1" height="15.0" fill="rgb(208,15,3)" rx="2" ry="2" />
+<text  x="664.49" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy::StartFrame (2,983,151 samples, 0.31%)</title><rect x="17.2" y="597" width="2.4" height="15.0" fill="rgb(209,22,5)" rx="2" ry="2" />
+<text  x="20.17" y="607.5" ></text>
+</g>
+<g >
+<title>std::_Bind&lt;void  (825,096 samples, 0.09%)</title><rect x="306.2" y="453" width="0.7" height="15.0" fill="rgb(253,221,52)" rx="2" ry="2" />
+<text  x="309.19" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumConverter::Convert (1,680,933 samples, 0.17%)</title><rect x="326.2" y="501" width="1.3" height="15.0" fill="rgb(223,86,20)" rx="2" ry="2" />
+<text  x="329.17" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Function_handler&lt;void  (3,263,000 samples, 0.34%)</title><rect x="418.8" y="421" width="2.6" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="421.77" y="431.5" ></text>
+</g>
+<g >
+<title>int* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;int const*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt;, int*, int&gt; (831,586 samples, 0.09%)</title><rect x="573.6" y="341" width="0.7" height="15.0" fill="rgb(205,0,0)" rx="2" ry="2" />
+<text  x="576.65" y="351.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_M_create_storage (768,784 samples, 0.08%)</title><rect x="239.2" y="261" width="0.6" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="242.19" y="271.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;bool, std::allocator&lt;bool&gt; &gt;::resize (276,956 samples, 0.03%)</title><rect x="105.6" y="469" width="0.2" height="15.0" fill="rgb(219,68,16)" rx="2" ry="2" />
+<text  x="108.60" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::GetSize (4,408,653 samples, 0.45%)</title><rect x="367.2" y="533" width="3.5" height="15.0" fill="rgb(229,113,27)" rx="2" ry="2" />
+<text  x="370.18" y="543.5" ></text>
+</g>
+<g >
+<title>void std::destroy_at&lt;ns3::CqiListElement_s&gt; (416,767 samples, 0.04%)</title><rect x="106.8" y="389" width="0.3" height="15.0" fill="rgb(208,15,3)" rx="2" ry="2" />
+<text  x="109.77" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteSpectrumPhy&gt;::Ptr (660,447 samples, 0.07%)</title><rect x="578.4" y="405" width="0.5" height="15.0" fill="rgb(246,188,45)" rx="2" ry="2" />
+<text  x="581.35" y="415.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;unsigned char&gt;::allocate (352,577 samples, 0.04%)</title><rect x="692.8" y="421" width="0.3" height="15.0" fill="rgb(230,117,28)" rx="2" ry="2" />
+<text  x="695.85" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;0ul, ns3::LteEnbPhy*&gt;::_M_head (231,471 samples, 0.02%)</title><rect x="752.5" y="565" width="0.1" height="15.0" fill="rgb(253,222,53)" rx="2" ry="2" />
+<text  x="755.46" y="575.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::allocate (185,442 samples, 0.02%)</title><rect x="318.9" y="277" width="0.2" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="321.91" y="287.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Buffer::Data*, std::allocator&lt;ns3::Buffer::Data*&gt; &gt;::end (310,746 samples, 0.03%)</title><rect x="32.3" y="325" width="0.3" height="15.0" fill="rgb(223,86,20)" rx="2" ry="2" />
+<text  x="35.32" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::DlHarqFeedbackLteControlMessage&gt; ns3::DynamicCast&lt;ns3::DlHarqFeedbackLteControlMessage, ns3::LteControlMessage&gt; (124,981 samples, 0.01%)</title><rect x="462.3" y="357" width="0.1" height="15.0" fill="rgb(215,49,11)" rx="2" ry="2" />
+<text  x="465.26" y="367.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_S_key (153,333 samples, 0.02%)</title><rect x="616.0" y="421" width="0.1" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="618.99" y="431.5" ></text>
+</g>
+<g >
+<title>int* std::__copy_move_a2&lt;false, int const*, int*&gt; (275,574 samples, 0.03%)</title><rect x="698.9" y="437" width="0.3" height="15.0" fill="rgb(224,87,20)" rx="2" ry="2" />
+<text  x="701.93" y="447.5" ></text>
+</g>
+<g >
+<title>int* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;int const*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt;, int*&gt; (909,481 samples, 0.09%)</title><rect x="698.4" y="517" width="0.8" height="15.0" fill="rgb(251,216,51)" rx="2" ry="2" />
+<text  x="701.42" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::TimeStep (193,847 samples, 0.02%)</title><rect x="155.6" y="357" width="0.1" height="15.0" fill="rgb(242,171,41)" rx="2" ry="2" />
+<text  x="158.59" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::MultiModelSpectrumChannel::StartTx (4,243,524 samples, 0.44%)</title><rect x="113.1" y="501" width="3.4" height="15.0" fill="rgb(227,102,24)" rx="2" ry="2" />
+<text  x="116.09" y="511.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::__uninitialized_copy&lt;true&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, unsigned char*&gt; (459,117 samples, 0.05%)</title><rect x="214.2" y="421" width="0.4" height="15.0" fill="rgb(233,129,30)" rx="2" ry="2" />
+<text  x="217.24" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::Simulator::DoScheduleNow (382,100 samples, 0.04%)</title><rect x="53.0" y="533" width="0.3" height="15.0" fill="rgb(232,126,30)" rx="2" ry="2" />
+<text  x="55.95" y="543.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt; &gt;::destroy&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; (2,881,652 samples, 0.30%)</title><rect x="451.6" y="197" width="2.3" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="454.58" y="207.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned int, std::allocator&lt;unsigned int&gt; &gt;::~vector (686,206 samples, 0.07%)</title><rect x="696.9" y="501" width="0.5" height="15.0" fill="rgb(215,47,11)" rx="2" ry="2" />
+<text  x="699.90" y="511.5" ></text>
+</g>
+<g >
+<title>malloc (158,423 samples, 0.02%)</title><rect x="537.1" y="277" width="0.1" height="15.0" fill="rgb(230,119,28)" rx="2" ry="2" />
+<text  x="540.08" y="287.5" ></text>
+</g>
+<g >
+<title>std::tuple_element&lt;4ul, std::tuple&lt;ns3::MultiModelSpectrumChannel*, ns3::Ptr&lt;ns3::SpectrumValue&gt;, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt; &gt;::type&amp; std::get&lt;4ul, ns3::MultiModelSpectrumChannel*, ns3::Ptr&lt;ns3::SpectrumValue&gt;, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt; (350,980 samples, 0.04%)</title><rect x="757.1" y="597" width="0.3" height="15.0" fill="rgb(205,3,0)" rx="2" ry="2" />
+<text  x="760.12" y="607.5" ></text>
+</g>
+<g >
+<title>std::tuple_element&lt;0ul, std::tuple&lt;double const&amp;, double const&amp;, double const&amp;&gt; &gt;::type const&amp; std::get&lt;0ul, double const&amp;, double const&amp;, double const&amp;&gt; (744,395 samples, 0.08%)</title><rect x="748.4" y="485" width="0.6" height="15.0" fill="rgb(243,175,42)" rx="2" ry="2" />
+<text  x="751.44" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultDeleter&lt;ns3::EventImpl&gt;::Delete (489,663 samples, 0.05%)</title><rect x="308.2" y="469" width="0.4" height="15.0" fill="rgb(240,163,39)" rx="2" ry="2" />
+<text  x="311.19" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt;::vector (1,538,877 samples, 0.16%)</title><rect x="124.9" y="373" width="1.2" height="15.0" fill="rgb(248,198,47)" rx="2" ry="2" />
+<text  x="127.86" y="383.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt;::lower_bound (305,767 samples, 0.03%)</title><rect x="156.5" y="405" width="0.3" height="15.0" fill="rgb(223,85,20)" rx="2" ry="2" />
+<text  x="159.53" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbMac::DoSubframeIndication (2,983,151 samples, 0.31%)</title><rect x="17.2" y="549" width="2.4" height="15.0" fill="rgb(248,200,47)" rx="2" ry="2" />
+<text  x="20.17" y="559.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt;::_M_create_storage (156,029 samples, 0.02%)</title><rect x="228.9" y="421" width="0.1" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="231.92" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::LteChunkProcessor::End (324,769 samples, 0.03%)</title><rect x="611.9" y="533" width="0.3" height="15.0" fill="rgb(223,83,19)" rx="2" ry="2" />
+<text  x="614.94" y="543.5" ></text>
+</g>
+<g >
+<title>unsigned short* std::__uninitialized_copy_a&lt;std::move_iterator&lt;unsigned short*&gt;, unsigned short*, unsigned short&gt; (154,651 samples, 0.02%)</title><rect x="106.3" y="421" width="0.1" height="15.0" fill="rgb(225,96,22)" rx="2" ry="2" />
+<text  x="109.25" y="431.5" ></text>
+</g>
+<g >
+<title>std::function&lt;void  (1,212,692 samples, 0.13%)</title><rect x="306.9" y="469" width="1.0" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="309.95" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultDeleter&lt;ns3::Packet&gt;::Delete (4,346,874 samples, 0.45%)</title><rect x="545.6" y="149" width="3.5" height="15.0" fill="rgb(231,123,29)" rx="2" ry="2" />
+<text  x="548.61" y="159.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;::operator* (162,772 samples, 0.02%)</title><rect x="477.3" y="309" width="0.1" height="15.0" fill="rgb(249,203,48)" rx="2" ry="2" />
+<text  x="480.27" y="319.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;ns3::CqiListElement_s&gt; &gt;::construct&lt;ns3::CqiListElement_s, ns3::CqiListElement_s const&amp;&gt; (234,240 samples, 0.02%)</title><rect x="461.6" y="293" width="0.1" height="15.0" fill="rgb(240,165,39)" rx="2" ry="2" />
+<text  x="464.55" y="303.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_initialize_dispatch&lt;std::_List_const_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; (798,843 samples, 0.08%)</title><rect x="620.3" y="517" width="0.6" height="15.0" fill="rgb(215,50,12)" rx="2" ry="2" />
+<text  x="623.30" y="527.5" ></text>
+</g>
+<g >
+<title>std::tuple&lt;ns3::MultiModelSpectrumChannel*, ns3::Ptr&lt;ns3::SpectrumValue&gt;, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::tuple&lt;ns3::MultiModelSpectrumChannel*&amp;, ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp;, double&amp;, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;&amp;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;&amp;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;&amp;, true, true&gt; (245,362 samples, 0.03%)</title><rect x="87.4" y="437" width="0.2" height="15.0" fill="rgb(209,20,4)" rx="2" ry="2" />
+<text  x="90.39" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::operator+ (598,044 samples, 0.06%)</title><rect x="409.6" y="533" width="0.4" height="15.0" fill="rgb(244,182,43)" rx="2" ry="2" />
+<text  x="412.56" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt; &gt;::find (323,190 samples, 0.03%)</title><rect x="552.4" y="197" width="0.3" height="15.0" fill="rgb(225,93,22)" rx="2" ry="2" />
+<text  x="555.39" y="207.5" ></text>
+</g>
+<g >
+<title>ns3::PacketMetadata::Recycle (849,631 samples, 0.09%)</title><rect x="548.2" y="101" width="0.6" height="15.0" fill="rgb(238,154,37)" rx="2" ry="2" />
+<text  x="551.16" y="111.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::_M_insert_node (154,048 samples, 0.02%)</title><rect x="192.1" y="437" width="0.1" height="15.0" fill="rgb(215,46,11)" rx="2" ry="2" />
+<text  x="195.10" y="447.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Callback&lt;void, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt; &gt;, std::allocator&lt;ns3::Callback&lt;void, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt; &gt; &gt; &gt;::end (163,732 samples, 0.02%)</title><rect x="80.1" y="501" width="0.1" height="15.0" fill="rgb(217,56,13)" rx="2" ry="2" />
+<text  x="83.11" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt;::_Vector_base (341,838 samples, 0.04%)</title><rect x="503.7" y="373" width="0.3" height="15.0" fill="rgb(208,17,4)" rx="2" ry="2" />
+<text  x="506.72" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::UlDciListElement_s* std::__uninitialized_copy&lt;false&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::UlDciListElement_s const*, std::vector&lt;ns3::UlDciListElement_s, std::allocator&lt;ns3::UlDciListElement_s&gt; &gt; &gt;, ns3::UlDciListElement_s*&gt; (160,843 samples, 0.02%)</title><rect x="228.2" y="405" width="0.1" height="15.0" fill="rgb(231,121,29)" rx="2" ry="2" />
+<text  x="231.19" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt;* std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt; &gt;::_M_create_node&lt;std::pair&lt;unsigned short, ns3::DlInfoListElement_s&gt; &gt; (1,129,994 samples, 0.12%)</title><rect x="503.1" y="485" width="0.9" height="15.0" fill="rgb(241,168,40)" rx="2" ry="2" />
+<text  x="506.11" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::LogComponent::IsEnabled (201,088 samples, 0.02%)</title><rect x="343.0" y="469" width="0.2" height="15.0" fill="rgb(214,43,10)" rx="2" ry="2" />
+<text  x="346.04" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::ObjectBase::~ObjectBase (422,911 samples, 0.04%)</title><rect x="379.0" y="293" width="0.3" height="15.0" fill="rgb(232,126,30)" rx="2" ry="2" />
+<text  x="381.98" y="303.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;4ul, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::~_Tuple_impl (1,013,985 samples, 0.10%)</title><rect x="776.4" y="485" width="0.8" height="15.0" fill="rgb(249,206,49)" rx="2" ry="2" />
+<text  x="779.41" y="495.5" ></text>
+</g>
+<g >
+<title>int* std::copy&lt;__gnu_cxx::__normal_iterator&lt;int const*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt;, int*&gt; (730,011 samples, 0.08%)</title><rect x="398.8" y="485" width="0.6" height="15.0" fill="rgb(215,50,12)" rx="2" ry="2" />
+<text  x="401.81" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::vector (2,271,955 samples, 0.23%)</title><rect x="412.1" y="501" width="1.8" height="15.0" fill="rgb(239,156,37)" rx="2" ry="2" />
+<text  x="415.05" y="511.5" ></text>
+</g>
+<g >
+<title>std::_List_node&lt;ns3::UlDciLteControlMessage&gt;* std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;::_M_create_node&lt;ns3::UlDciLteControlMessage const&amp;&gt; (1,556,182 samples, 0.16%)</title><rect x="287.2" y="469" width="1.3" height="15.0" fill="rgb(220,70,16)" rx="2" ry="2" />
+<text  x="290.21" y="479.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::__niter_base&lt;unsigned char*&gt; (154,843 samples, 0.02%)</title><rect x="694.2" y="421" width="0.1" height="15.0" fill="rgb(229,111,26)" rx="2" ry="2" />
+<text  x="697.21" y="431.5" ></text>
+</g>
+<g >
+<title>void std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_construct_node&lt;std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (695,882 samples, 0.07%)</title><rect x="334.7" y="357" width="0.6" height="15.0" fill="rgb(231,122,29)" rx="2" ry="2" />
+<text  x="337.73" y="367.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::_M_allocate (417,726 samples, 0.04%)</title><rect x="520.1" y="293" width="0.3" height="15.0" fill="rgb(220,70,16)" rx="2" ry="2" />
+<text  x="523.09" y="303.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::LteFlowId_t, std::pair&lt;ns3::LteFlowId_t const, ns3::FfMacSchedSapProvider::SchedDlRlcBufferReqParameters&gt;, std::_Select1st&lt;std::pair&lt;ns3::LteFlowId_t const, ns3::FfMacSchedSapProvider::SchedDlRlcBufferReqParameters&gt; &gt;, std::less&lt;ns3::LteFlowId_t&gt;, std::allocator&lt;std::pair&lt;ns3::LteFlowId_t const, ns3::FfMacSchedSapProvider::SchedDlRlcBufferReqParameters&gt; &gt; &gt;::_M_lower_bound (856,900 samples, 0.09%)</title><rect x="181.8" y="437" width="0.6" height="15.0" fill="rgb(243,175,42)" rx="2" ry="2" />
+<text  x="184.76" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::HigherLayerSelected_s::~HigherLayerSelected_s (200,884 samples, 0.02%)</title><rect x="586.5" y="293" width="0.2" height="15.0" fill="rgb(237,150,35)" rx="2" ry="2" />
+<text  x="589.54" y="303.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::~vector (460,931 samples, 0.05%)</title><rect x="472.9" y="277" width="0.4" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="475.88" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbMac::DoSubframeIndication (178,609,510 samples, 18.42%)</title><rect x="123.4" y="533" width="143.7" height="15.0" fill="rgb(248,200,47)" rx="2" ry="2" />
+<text  x="126.39" y="543.5" >ns3::LteEnbMac::Do..</text>
+</g>
+<g >
+<title>ns3::LteRadioBearerTag::~LteRadioBearerTag (271,006 samples, 0.03%)</title><rect x="20.5" y="357" width="0.2" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="23.52" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy::DoSendMacPdu (663,786 samples, 0.07%)</title><rect x="19.8" y="341" width="0.5" height="15.0" fill="rgb(245,188,44)" rx="2" ry="2" />
+<text  x="22.79" y="351.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::~vector (127,422 samples, 0.01%)</title><rect x="61.4" y="453" width="0.1" height="15.0" fill="rgb(225,92,22)" rx="2" ry="2" />
+<text  x="64.37" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::EventId ns3::Simulator::Schedule&lt;void  (2,769,515 samples, 0.29%)</title><rect x="62.2" y="533" width="2.2" height="15.0" fill="rgb(253,224,53)" rx="2" ry="2" />
+<text  x="65.17" y="543.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt; &gt;::destroy&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; (827,732 samples, 0.09%)</title><rect x="774.0" y="277" width="0.7" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="777.05" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumModel const&gt;::Ptr (155,450 samples, 0.02%)</title><rect x="677.0" y="469" width="0.1" height="15.0" fill="rgb(232,125,30)" rx="2" ry="2" />
+<text  x="680.02" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::CqiListElement_s, std::allocator&lt;ns3::CqiListElement_s&gt; &gt;::_M_erase_at_end (1,008,706 samples, 0.10%)</title><rect x="254.9" y="485" width="0.8" height="15.0" fill="rgb(244,182,43)" rx="2" ry="2" />
+<text  x="257.91" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt;::~vector (264,265 samples, 0.03%)</title><rect x="461.2" y="277" width="0.3" height="15.0" fill="rgb(234,134,32)" rx="2" ry="2" />
+<text  x="464.25" y="287.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, unsigned char&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, unsigned char&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, unsigned char&gt; &gt; &gt;::_M_lower_bound (577,659 samples, 0.06%)</title><rect x="176.9" y="437" width="0.5" height="15.0" fill="rgb(226,99,23)" rx="2" ry="2" />
+<text  x="179.91" y="447.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::DlInfoListElement_s*&gt; (886,663 samples, 0.09%)</title><rect x="132.4" y="469" width="0.7" height="15.0" fill="rgb(215,49,11)" rx="2" ry="2" />
+<text  x="135.37" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::TypeId::GetAttributeN (231,508 samples, 0.02%)</title><rect x="19.4" y="405" width="0.1" height="15.0" fill="rgb(225,95,22)" rx="2" ry="2" />
+<text  x="22.36" y="415.5" ></text>
+</g>
+<g >
+<title>void std::_Bind&lt;void  (22,443,594 samples, 2.31%)</title><rect x="17.2" y="645" width="18.0" height="15.0" fill="rgb(242,174,41)" rx="2" ry="2" />
+<text  x="20.17" y="655.5" ></text>
+</g>
+<g >
+<title>decltype  (241,010 samples, 0.02%)</title><rect x="452.8" y="37" width="0.2" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="455.83" y="47.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;ns3::Buffer::Data*&gt; &gt;::construct&lt;ns3::Buffer::Data*, ns3::Buffer::Data* const&amp;&gt; (315,007 samples, 0.03%)</title><rect x="452.2" y="53" width="0.3" height="15.0" fill="rgb(251,213,50)" rx="2" ry="2" />
+<text  x="455.23" y="63.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::~_Rb_tree (231,712 samples, 0.02%)</title><rect x="103.9" y="437" width="0.2" height="15.0" fill="rgb(209,22,5)" rx="2" ry="2" />
+<text  x="106.93" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt; &gt;::_M_lower_bound (280,068 samples, 0.03%)</title><rect x="552.4" y="181" width="0.2" height="15.0" fill="rgb(245,188,44)" rx="2" ry="2" />
+<text  x="555.39" y="191.5" ></text>
+</g>
+<g >
+<title>[libc.so.6] (161,543 samples, 0.02%)</title><rect x="671.5" y="501" width="0.1" height="15.0" fill="rgb(223,84,20)" rx="2" ry="2" />
+<text  x="674.52" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned char const, ns3::LteUeMac::LcInfo&gt; &gt;::_M_valptr (240,927 samples, 0.02%)</title><rect x="691.4" y="437" width="0.2" height="15.0" fill="rgb(221,77,18)" rx="2" ry="2" />
+<text  x="694.43" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::PfFfMacScheduler::DoSchedUlTriggerReq (34,427,946 samples, 3.55%)</title><rect x="226.2" y="501" width="27.7" height="15.0" fill="rgb(205,0,0)" rx="2" ry="2" />
+<text  x="229.21" y="511.5" >n..</text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt; &gt;::find (1,004,495 samples, 0.10%)</title><rect x="241.7" y="469" width="0.8" height="15.0" fill="rgb(214,44,10)" rx="2" ry="2" />
+<text  x="244.69" y="479.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::~map (916,115 samples, 0.09%)</title><rect x="193.1" y="485" width="0.7" height="15.0" fill="rgb(248,201,48)" rx="2" ry="2" />
+<text  x="196.09" y="495.5" ></text>
+</g>
+<g >
+<title>std::isnan (190,930 samples, 0.02%)</title><rect x="703.1" y="501" width="0.1" height="15.0" fill="rgb(207,9,2)" rx="2" ry="2" />
+<text  x="706.08" y="511.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::operator= (904,852 samples, 0.09%)</title><rect x="594.3" y="293" width="0.7" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="597.30" y="303.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt;::construct&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, ns3::Ptr&lt;ns3::LteControlMessage&gt; const&amp;&gt; (240,418 samples, 0.02%)</title><rect x="611.3" y="469" width="0.2" height="15.0" fill="rgb(231,120,28)" rx="2" ry="2" />
+<text  x="614.35" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::MemberLteCcmMacSapUser&lt;ns3::NoOpComponentCarrierManager&gt;::UlReceiveMacCe (4,588,238 samples, 0.47%)</title><rect x="457.3" y="309" width="3.7" height="15.0" fill="rgb(235,141,33)" rx="2" ry="2" />
+<text  x="460.31" y="319.5" ></text>
+</g>
+<g >
+<title>std::map&lt;ns3::LteSpectrumModelId, ns3::Ptr&lt;ns3::SpectrumModel&gt;, std::less&lt;ns3::LteSpectrumModelId&gt;, std::allocator&lt;std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt; &gt; &gt;::find (1,471,073 samples, 0.15%)</title><rect x="675.4" y="485" width="1.2" height="15.0" fill="rgb(226,100,24)" rx="2" ry="2" />
+<text  x="678.40" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt; std::map&lt;unsigned short, ns3::DlInfoListElement_s, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt; &gt;::emplace_hint&lt;std::pair&lt;unsigned short, ns3::DlInfoListElement_s&gt; &gt; (2,130,125 samples, 0.22%)</title><rect x="503.1" y="533" width="1.7" height="15.0" fill="rgb(219,67,16)" rx="2" ry="2" />
+<text  x="506.08" y="543.5" ></text>
+</g>
+<g >
+<title>int* std::copy&lt;__gnu_cxx::__normal_iterator&lt;int const*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt;, int*&gt; (798,977 samples, 0.08%)</title><rect x="698.5" y="485" width="0.7" height="15.0" fill="rgb(215,50,12)" rx="2" ry="2" />
+<text  x="701.51" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::LteSpectrumModelId, std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt;, std::_Select1st&lt;std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt; &gt;, std::less&lt;ns3::LteSpectrumModelId&gt;, std::allocator&lt;std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt; &gt; &gt;::_M_mbegin (165,062 samples, 0.02%)</title><rect x="55.1" y="437" width="0.1" height="15.0" fill="rgb(229,111,26)" rx="2" ry="2" />
+<text  x="58.06" y="447.5" ></text>
+</g>
+<g >
+<title>std::_List_node&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt;* std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::_M_create_node&lt;ns3::Ptr&lt;ns3::Packet&gt; const&amp;&gt; (191,353 samples, 0.02%)</title><rect x="118.5" y="453" width="0.2" height="15.0" fill="rgb(211,30,7)" rx="2" ry="2" />
+<text  x="121.50" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;::vector (710,293 samples, 0.07%)</title><rect x="591.5" y="277" width="0.6" height="15.0" fill="rgb(249,203,48)" rx="2" ry="2" />
+<text  x="594.49" y="287.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt;::vector (4,008,340 samples, 0.41%)</title><rect x="258.7" y="389" width="3.2" height="15.0" fill="rgb(210,23,5)" rx="2" ry="2" />
+<text  x="261.70" y="399.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::CeBitmap_e, std::allocator&lt;ns3::CeBitmap_e&gt; &gt;::vector (1,179,363 samples, 0.12%)</title><rect x="203.7" y="405" width="1.0" height="15.0" fill="rgb(209,19,4)" rx="2" ry="2" />
+<text  x="206.72" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::CalculateDistance (630,060 samples, 0.06%)</title><rect x="739.8" y="501" width="0.5" height="15.0" fill="rgb(213,40,9)" rx="2" ry="2" />
+<text  x="742.81" y="511.5" ></text>
+</g>
+<g >
+<title>[libm.so.6] (270,399 samples, 0.03%)</title><rect x="227.1" y="453" width="0.2" height="15.0" fill="rgb(208,16,4)" rx="2" ry="2" />
+<text  x="230.10" y="463.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt; &gt;::_M_ptr (317,676 samples, 0.03%)</title><rect x="183.7" y="453" width="0.2" height="15.0" fill="rgb(242,170,40)" rx="2" ry="2" />
+<text  x="186.67" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Function_handler&lt;void  (4,103,031 samples, 0.42%)</title><rect x="418.1" y="501" width="3.3" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="421.09" y="511.5" ></text>
+</g>
+<g >
+<title>decltype  (426,539 samples, 0.04%)</title><rect x="335.0" y="325" width="0.3" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="337.95" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue&gt;::Ptr (205,997 samples, 0.02%)</title><rect x="61.5" y="533" width="0.1" height="15.0" fill="rgb(220,73,17)" rx="2" ry="2" />
+<text  x="64.47" y="543.5" ></text>
+</g>
+<g >
+<title>double* std::__uninitialized_default_n_a&lt;double*, unsigned long, double&gt; (363,863 samples, 0.04%)</title><rect x="718.5" y="421" width="0.3" height="15.0" fill="rgb(248,199,47)" rx="2" ry="2" />
+<text  x="721.54" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt; &gt; &gt;::_M_mbegin (279,426 samples, 0.03%)</title><rect x="433.2" y="277" width="0.3" height="15.0" fill="rgb(213,39,9)" rx="2" ry="2" />
+<text  x="436.23" y="287.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_M_deallocate (163,066 samples, 0.02%)</title><rect x="773.3" y="405" width="0.2" height="15.0" fill="rgb(240,162,38)" rx="2" ry="2" />
+<text  x="776.33" y="415.5" ></text>
+</g>
+<g >
+<title>decltype  (523,193 samples, 0.05%)</title><rect x="547.1" y="53" width="0.5" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="550.15" y="63.5" ></text>
+</g>
+<g >
+<title>std::tuple_element&lt;0ul, std::pair&lt;unsigned int const&amp;, ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp;&gt; &gt;::type&amp;&amp; std::get&lt;0ul, unsigned int const&amp;, ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp;&gt; (187,049 samples, 0.02%)</title><rect x="333.0" y="485" width="0.1" height="15.0" fill="rgb(232,124,29)" rx="2" ry="2" />
+<text  x="335.99" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::ByteTagList::Add (192,525 samples, 0.02%)</title><rect x="18.7" y="389" width="0.2" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="21.70" y="399.5" ></text>
+</g>
+<g >
+<title>malloc (195,119 samples, 0.02%)</title><rect x="284.6" y="501" width="0.2" height="15.0" fill="rgb(230,119,28)" rx="2" ry="2" />
+<text  x="287.60" y="511.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;::__normal_iterator (221,184 samples, 0.02%)</title><rect x="714.7" y="453" width="0.2" height="15.0" fill="rgb(215,50,12)" rx="2" ry="2" />
+<text  x="717.68" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::PhichListElement_s, std::allocator&lt;ns3::PhichListElement_s&gt; &gt;::_M_create_storage (228,237 samples, 0.02%)</title><rect x="227.7" y="421" width="0.2" height="15.0" fill="rgb(207,10,2)" rx="2" ry="2" />
+<text  x="230.69" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::RlcTag::RlcTag (497,992 samples, 0.05%)</title><rect x="560.2" y="261" width="0.4" height="15.0" fill="rgb(228,109,26)" rx="2" ry="2" />
+<text  x="563.19" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumModel const&gt;::Ptr (510,728 samples, 0.05%)</title><rect x="411.5" y="501" width="0.4" height="15.0" fill="rgb(232,125,30)" rx="2" ry="2" />
+<text  x="414.48" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::PfFfMacScheduler::UpdateUlRlcBufferInfo (315,273 samples, 0.03%)</title><rect x="234.3" y="485" width="0.2" height="15.0" fill="rgb(235,140,33)" rx="2" ry="2" />
+<text  x="237.25" y="495.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::construct&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, unsigned int const&amp;, ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp;&gt; (466,275 samples, 0.05%)</title><rect x="658.8" y="421" width="0.4" height="15.0" fill="rgb(254,229,54)" rx="2" ry="2" />
+<text  x="661.79" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter&gt;::GetReferenceCount (169,090 samples, 0.02%)</title><rect x="543.2" y="261" width="0.1" height="15.0" fill="rgb(218,61,14)" rx="2" ry="2" />
+<text  x="546.21" y="271.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;0ul, ns3::LteInterference*, ns3::Ptr&lt;ns3::SpectrumValue const&gt;, unsigned int&gt;::_Tuple_impl (927,227 samples, 0.10%)</title><rect x="711.8" y="389" width="0.7" height="15.0" fill="rgb(212,36,8)" rx="2" ry="2" />
+<text  x="714.80" y="399.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_List_base (611,762 samples, 0.06%)</title><rect x="619.7" y="517" width="0.5" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="622.69" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::Divide (328,607 samples, 0.03%)</title><rect x="606.1" y="501" width="0.3" height="15.0" fill="rgb(239,160,38)" rx="2" ry="2" />
+<text  x="609.12" y="511.5" ></text>
+</g>
+<g >
+<title>std::less&lt;unsigned int&gt;::operator (139,969 samples, 0.01%)</title><rect x="650.9" y="453" width="0.1" height="15.0" fill="rgb(236,146,35)" rx="2" ry="2" />
+<text  x="653.91" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Angles::Angles (1,300,079 samples, 0.13%)</title><rect x="65.5" y="517" width="1.0" height="15.0" fill="rgb(254,226,54)" rx="2" ry="2" />
+<text  x="68.48" y="527.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;::_List_impl::_List_impl (264,942 samples, 0.03%)</title><rect x="110.0" y="485" width="0.2" height="15.0" fill="rgb(239,159,38)" rx="2" ry="2" />
+<text  x="113.00" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumSignalParameters::~SpectrumSignalParameters (209,441 samples, 0.02%)</title><rect x="775.5" y="389" width="0.1" height="15.0" fill="rgb(205,2,0)" rx="2" ry="2" />
+<text  x="778.46" y="399.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::~_List_base (199,131 samples, 0.02%)</title><rect x="381.0" y="309" width="0.2" height="15.0" fill="rgb(236,146,35)" rx="2" ry="2" />
+<text  x="384.03" y="319.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_clear (277,280 samples, 0.03%)</title><rect x="463.7" y="341" width="0.2" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="466.71" y="351.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;* std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_create_node&lt;std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (403,625 samples, 0.04%)</title><rect x="706.4" y="389" width="0.4" height="15.0" fill="rgb(217,56,13)" rx="2" ry="2" />
+<text  x="709.45" y="399.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt;::_M_range_check (157,947 samples, 0.02%)</title><rect x="420.3" y="325" width="0.1" height="15.0" fill="rgb(250,207,49)" rx="2" ry="2" />
+<text  x="423.31" y="335.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;, std::allocator&lt;std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt; &gt;::_M_range_check (125,858 samples, 0.01%)</title><rect x="457.0" y="293" width="0.1" height="15.0" fill="rgb(209,21,5)" rx="2" ry="2" />
+<text  x="459.99" y="303.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::SbMeasResult_s&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::SbMeasResult_s&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::SbMeasResult_s&gt; &gt; &gt;::_M_begin (155,977 samples, 0.02%)</title><rect x="185.4" y="453" width="0.2" height="15.0" fill="rgb(248,200,47)" rx="2" ry="2" />
+<text  x="188.43" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_S_key (198,414 samples, 0.02%)</title><rect x="332.3" y="437" width="0.2" height="15.0" fill="rgb(244,182,43)" rx="2" ry="2" />
+<text  x="335.33" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Packet::Packet (229,600 samples, 0.02%)</title><rect x="15.5" y="357" width="0.2" height="15.0" fill="rgb(230,115,27)" rx="2" ry="2" />
+<text  x="18.49" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue const&gt;::Ptr (156,961 samples, 0.02%)</title><rect x="706.0" y="501" width="0.1" height="15.0" fill="rgb(254,229,54)" rx="2" ry="2" />
+<text  x="708.97" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::CqiListElement_s* std::__do_uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::CqiListElement_s*, std::vector&lt;ns3::CqiListElement_s, std::allocator&lt;ns3::CqiListElement_s&gt; &gt; &gt;, ns3::CqiListElement_s*&gt; (3,635,299 samples, 0.37%)</title><rect x="124.4" y="437" width="3.0" height="15.0" fill="rgb(253,224,53)" rx="2" ry="2" />
+<text  x="127.44" y="447.5" ></text>
+</g>
+<g >
+<title>double* std::__copy_move_a2&lt;false, double const*, double*&gt; (193,414 samples, 0.02%)</title><rect x="719.4" y="405" width="0.2" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="722.44" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt;::operator= (707,699 samples, 0.07%)</title><rect x="612.8" y="549" width="0.5" height="15.0" fill="rgb(219,65,15)" rx="2" ry="2" />
+<text  x="615.78" y="559.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultDeleter&lt;ns3::LteControlMessage&gt;::Delete (269,841 samples, 0.03%)</title><rect x="497.4" y="453" width="0.2" height="15.0" fill="rgb(224,87,20)" rx="2" ry="2" />
+<text  x="500.37" y="463.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, bool&gt;::pair (270,035 samples, 0.03%)</title><rect x="338.4" y="437" width="0.2" height="15.0" fill="rgb(252,220,52)" rx="2" ry="2" />
+<text  x="341.42" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::HarqProcessInfoElement_t* std::copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::HarqProcessInfoElement_t const*, std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt;, ns3::HarqProcessInfoElement_t*&gt; (1,442,310 samples, 0.15%)</title><rect x="512.5" y="485" width="1.2" height="15.0" fill="rgb(247,195,46)" rx="2" ry="2" />
+<text  x="515.50" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;::_M_erase (576,036 samples, 0.06%)</title><rect x="119.7" y="501" width="0.5" height="15.0" fill="rgb(223,86,20)" rx="2" ry="2" />
+<text  x="122.74" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;5ul, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::_M_head (542,473 samples, 0.06%)</title><rect x="757.6" y="565" width="0.4" height="15.0" fill="rgb(252,219,52)" rx="2" ry="2" />
+<text  x="760.56" y="575.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::DlDciLteControlMessage&gt; ns3::Create&lt;ns3::DlDciLteControlMessage&gt; (1,498,907 samples, 0.15%)</title><rect x="158.9" y="453" width="1.3" height="15.0" fill="rgb(243,176,42)" rx="2" ry="2" />
+<text  x="161.95" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::~_Vector_base (195,505 samples, 0.02%)</title><rect x="409.4" y="501" width="0.1" height="15.0" fill="rgb(223,86,20)" rx="2" ry="2" />
+<text  x="412.36" y="511.5" ></text>
+</g>
+<g >
+<title>decltype  (460,852 samples, 0.05%)</title><rect x="595.7" y="181" width="0.4" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="598.69" y="191.5" ></text>
+</g>
+<g >
+<title>ns3::FfMacSchedSapProvider::SchedDlRlcBufferReqParameters::~SchedDlRlcBufferReqParameters (747,290 samples, 0.08%)</title><rect x="24.8" y="341" width="0.6" height="15.0" fill="rgb(226,97,23)" rx="2" ry="2" />
+<text  x="27.76" y="351.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_lower_bound (446,361 samples, 0.05%)</title><rect x="707.3" y="405" width="0.4" height="15.0" fill="rgb(229,113,27)" rx="2" ry="2" />
+<text  x="710.31" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultSimulatorImpl::Run (5,321,712 samples, 0.55%)</title><rect x="11.2" y="773" width="4.3" height="15.0" fill="rgb(207,11,2)" rx="2" ry="2" />
+<text  x="14.17" y="783.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, ns3::SbMeasResult_s, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::SbMeasResult_s&gt; &gt; &gt;::find (231,252 samples, 0.02%)</title><rect x="94.1" y="469" width="0.2" height="15.0" fill="rgb(242,171,40)" rx="2" ry="2" />
+<text  x="97.09" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::ByteTagList::Iterator::HasNext (195,833 samples, 0.02%)</title><rect x="424.5" y="229" width="0.1" height="15.0" fill="rgb(222,78,18)" rx="2" ry="2" />
+<text  x="427.46" y="239.5" ></text>
+</g>
+<g >
+<title>ns3::EventImpl* ns3::PeekPointer&lt;ns3::EventImpl&gt; (342,386 samples, 0.04%)</title><rect x="38.9" y="693" width="0.2" height="15.0" fill="rgb(242,171,40)" rx="2" ry="2" />
+<text  x="41.86" y="703.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::map (196,880 samples, 0.02%)</title><rect x="668.1" y="485" width="0.2" height="15.0" fill="rgb(242,171,40)" rx="2" ry="2" />
+<text  x="671.10" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt; &gt;::_S_key (490,279 samples, 0.05%)</title><rect x="566.0" y="181" width="0.4" height="15.0" fill="rgb(230,116,27)" rx="2" ry="2" />
+<text  x="569.02" y="191.5" ></text>
+</g>
+<g >
+<title>ns3::UlCqi_s::UlCqi_s (409,983 samples, 0.04%)</title><rect x="477.9" y="293" width="0.3" height="15.0" fill="rgb(243,175,41)" rx="2" ry="2" />
+<text  x="480.85" y="303.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt; &gt;::_M_end (160,556 samples, 0.02%)</title><rect x="650.2" y="469" width="0.1" height="15.0" fill="rgb(243,176,42)" rx="2" ry="2" />
+<text  x="653.18" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt; &gt;::_M_begin (529,260 samples, 0.05%)</title><rect x="320.4" y="453" width="0.5" height="15.0" fill="rgb(212,35,8)" rx="2" ry="2" />
+<text  x="323.44" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt;::Acquire (155,703 samples, 0.02%)</title><rect x="164.1" y="437" width="0.2" height="15.0" fill="rgb(209,22,5)" rx="2" ry="2" />
+<text  x="167.13" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::RlcPduListElement_s* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::RlcPduListElement_s const*, std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt;, ns3::RlcPduListElement_s*&gt; (214,687 samples, 0.02%)</title><rect x="101.6" y="373" width="0.2" height="15.0" fill="rgb(252,217,51)" rx="2" ry="2" />
+<text  x="104.59" y="383.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt; &gt;::allocate (270,834 samples, 0.03%)</title><rect x="108.6" y="373" width="0.2" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="111.56" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::HarqProcessInfoElement_t* std::__copy_move&lt;false, true, std::random_access_iterator_tag&gt;::__copy_m&lt;ns3::HarqProcessInfoElement_t const, ns3::HarqProcessInfoElement_t&gt; (219,081 samples, 0.02%)</title><rect x="353.6" y="357" width="0.1" height="15.0" fill="rgb(248,202,48)" rx="2" ry="2" />
+<text  x="356.57" y="367.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt; &gt;::_S_key (234,707 samples, 0.02%)</title><rect x="29.3" y="325" width="0.2" height="15.0" fill="rgb(230,116,27)" rx="2" ry="2" />
+<text  x="32.28" y="335.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned int const, ns3::RxSpectrumModelInfo&gt; &gt;::_M_ptr (218,859 samples, 0.02%)</title><rect x="657.0" y="469" width="0.1" height="15.0" fill="rgb(239,156,37)" rx="2" ry="2" />
+<text  x="659.95" y="479.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_get_Node_allocator (129,372 samples, 0.01%)</title><rect x="576.3" y="325" width="0.1" height="15.0" fill="rgb(232,126,30)" rx="2" ry="2" />
+<text  x="579.26" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultSimulatorImpl::ProcessOneEvent (2,105,662 samples, 0.22%)</title><rect x="15.5" y="741" width="1.6" height="15.0" fill="rgb(211,30,7)" rx="2" ry="2" />
+<text  x="18.45" y="751.5" ></text>
+</g>
+<g >
+<title>std::__detail::_List_node_header::_List_node_header (266,882 samples, 0.03%)</title><rect x="619.9" y="485" width="0.3" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="622.94" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;unsigned short&gt;::_M_valptr (317,657 samples, 0.03%)</title><rect x="395.6" y="485" width="0.2" height="15.0" fill="rgb(211,28,6)" rx="2" ry="2" />
+<text  x="398.56" y="495.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;unsigned long&gt;::allocate (271,783 samples, 0.03%)</title><rect x="198.0" y="389" width="0.3" height="15.0" fill="rgb(241,167,40)" rx="2" ry="2" />
+<text  x="201.04" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::MakeEvent&lt;void  (2,347,913 samples, 0.24%)</title><rect x="306.0" y="485" width="1.9" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="309.03" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::TagBuffer::Write (152,668 samples, 0.02%)</title><rect x="13.9" y="373" width="0.1" height="15.0" fill="rgb(229,114,27)" rx="2" ry="2" />
+<text  x="16.86" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt; ns3::CompleteConstruct&lt;ns3::PacketBurst&gt; (4,272,760 samples, 0.44%)</title><rect x="629.9" y="517" width="3.4" height="15.0" fill="rgb(212,33,7)" rx="2" ry="2" />
+<text  x="632.88" y="527.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, unsigned char*&gt; (500,842 samples, 0.05%)</title><rect x="214.2" y="437" width="0.4" height="15.0" fill="rgb(227,104,25)" rx="2" ry="2" />
+<text  x="217.21" y="447.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy_aux&lt;true&gt;::__destroy&lt;int*&gt; (161,562 samples, 0.02%)</title><rect x="575.3" y="309" width="0.1" height="15.0" fill="rgb(229,111,26)" rx="2" ry="2" />
+<text  x="578.30" y="319.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;bool, std::allocator&lt;bool&gt; &gt;::size (396,527 samples, 0.04%)</title><rect x="198.8" y="421" width="0.3" height="15.0" fill="rgb(208,17,4)" rx="2" ry="2" />
+<text  x="201.76" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::UlCqi_s::UlCqi_s (234,034 samples, 0.02%)</title><rect x="474.0" y="229" width="0.2" height="15.0" fill="rgb(243,175,41)" rx="2" ry="2" />
+<text  x="476.98" y="239.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::DlInfoListElement_s (285,025 samples, 0.03%)</title><rect x="420.8" y="325" width="0.2" height="15.0" fill="rgb(231,119,28)" rx="2" ry="2" />
+<text  x="423.77" y="335.5" ></text>
+</g>
+<g >
+<title>void std::__fill_a&lt;unsigned short*, unsigned short&gt; (375,815 samples, 0.04%)</title><rect x="252.4" y="373" width="0.3" height="15.0" fill="rgb(242,173,41)" rx="2" ry="2" />
+<text  x="255.44" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Packet&gt;::Ptr (235,499 samples, 0.02%)</title><rect x="551.8" y="245" width="0.1" height="15.0" fill="rgb(230,117,28)" rx="2" ry="2" />
+<text  x="554.75" y="255.5" ></text>
+</g>
+<g >
+<title>std::_Bind&lt;void  (411,266 samples, 0.04%)</title><rect x="87.6" y="421" width="0.4" height="15.0" fill="rgb(253,221,52)" rx="2" ry="2" />
+<text  x="90.62" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, double&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, double&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, double&gt; &gt; &gt;::_M_lower_bound (1,329,957 samples, 0.14%)</title><rect x="295.0" y="501" width="1.0" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="297.97" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::HarqProcessInfoElement_t* std::__uninitialized_copy&lt;true&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::HarqProcessInfoElement_t const*, std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt;, ns3::HarqProcessInfoElement_t*&gt; (489,523 samples, 0.05%)</title><rect x="524.9" y="293" width="0.4" height="15.0" fill="rgb(238,156,37)" rx="2" ry="2" />
+<text  x="527.94" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::Packet::RemovePacketTag (390,797 samples, 0.04%)</title><rect x="435.2" y="325" width="0.3" height="15.0" fill="rgb(227,103,24)" rx="2" ry="2" />
+<text  x="438.22" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::operator/ (819,512 samples, 0.08%)</title><rect x="413.9" y="533" width="0.7" height="15.0" fill="rgb(218,63,15)" rx="2" ry="2" />
+<text  x="416.91" y="543.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;::_M_clear (151,843 samples, 0.02%)</title><rect x="121.4" y="501" width="0.1" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="124.39" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::DoDispose (1,317,063 samples, 0.14%)</title><rect x="75.6" y="373" width="1.1" height="15.0" fill="rgb(242,172,41)" rx="2" ry="2" />
+<text  x="78.64" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::EventImpl&gt;::~Ptr (234,471 samples, 0.02%)</title><rect x="637.9" y="485" width="0.2" height="15.0" fill="rgb(225,92,22)" rx="2" ry="2" />
+<text  x="640.87" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::_M_check_len (230,064 samples, 0.02%)</title><rect x="102.2" y="421" width="0.2" height="15.0" fill="rgb(234,133,31)" rx="2" ry="2" />
+<text  x="105.23" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::_M_get_Tp_allocator (246,077 samples, 0.03%)</title><rect x="480.6" y="229" width="0.2" height="15.0" fill="rgb(208,16,4)" rx="2" ry="2" />
+<text  x="483.59" y="239.5" ></text>
+</g>
+<g >
+<title>[libc.so.6] (278,891 samples, 0.03%)</title><rect x="325.5" y="325" width="0.3" height="15.0" fill="rgb(223,84,20)" rx="2" ry="2" />
+<text  x="328.54" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::HarqProcessInfoElement_t* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;ns3::HarqProcessInfoElement_t const*, std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt;, ns3::HarqProcessInfoElement_t*, ns3::HarqProcessInfoElement_t&gt; (185,369 samples, 0.02%)</title><rect x="117.4" y="453" width="0.1" height="15.0" fill="rgb(252,220,52)" rx="2" ry="2" />
+<text  x="120.37" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;bool, std::allocator&lt;bool&gt; &gt;::_M_range_check (163,820 samples, 0.02%)</title><rect x="246.5" y="469" width="0.2" height="15.0" fill="rgb(246,188,45)" rx="2" ry="2" />
+<text  x="249.52" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::_S_check_init_len (173,024 samples, 0.02%)</title><rect x="57.5" y="453" width="0.1" height="15.0" fill="rgb(233,130,31)" rx="2" ry="2" />
+<text  x="60.46" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Packet&gt;::~Ptr (1,114,557 samples, 0.11%)</title><rect x="652.8" y="293" width="0.9" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="655.79" y="303.5" ></text>
+</g>
+<g >
+<title>cfree (311,874 samples, 0.03%)</title><rect x="770.2" y="677" width="0.3" height="15.0" fill="rgb(223,86,20)" rx="2" ry="2" />
+<text  x="773.23" y="687.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;::_M_ptr (164,853 samples, 0.02%)</title><rect x="507.9" y="469" width="0.1" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="510.87" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::PfFfMacScheduler::DoSchedDlTriggerReq (9,997,060 samples, 1.03%)</title><rect x="94.5" y="485" width="8.1" height="15.0" fill="rgb(214,45,10)" rx="2" ry="2" />
+<text  x="97.52" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Simulator::GetSystemId (350,974 samples, 0.04%)</title><rect x="154.3" y="357" width="0.2" height="15.0" fill="rgb(235,141,33)" rx="2" ry="2" />
+<text  x="157.26" y="367.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::at (220,871 samples, 0.02%)</title><rect x="216.7" y="485" width="0.2" height="15.0" fill="rgb(251,215,51)" rx="2" ry="2" />
+<text  x="219.75" y="495.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::DlInfoListElement_s&gt; (734,784 samples, 0.08%)</title><rect x="132.5" y="437" width="0.6" height="15.0" fill="rgb(237,147,35)" rx="2" ry="2" />
+<text  x="135.49" y="447.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::~list (200,616 samples, 0.02%)</title><rect x="77.9" y="437" width="0.2" height="15.0" fill="rgb(222,80,19)" rx="2" ry="2" />
+<text  x="80.92" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_M_erase (474,320 samples, 0.05%)</title><rect x="394.3" y="437" width="0.4" height="15.0" fill="rgb(227,102,24)" rx="2" ry="2" />
+<text  x="397.32" y="447.5" ></text>
+</g>
+<g >
+<title>decltype  (292,988 samples, 0.03%)</title><rect x="582.4" y="277" width="0.2" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="585.41" y="287.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;* std::__copy_move_a2&lt;true, std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;*, std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;*&gt; (148,381 samples, 0.02%)</title><rect x="117.1" y="437" width="0.1" height="15.0" fill="rgb(215,49,11)" rx="2" ry="2" />
+<text  x="120.11" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;0ul, ns3::LteEnbPhy*, ns3::Ptr&lt;ns3::PacketBurst&gt; &gt;::_Tuple_impl&lt;ns3::LteEnbPhy*&amp;, ns3::Ptr&lt;ns3::PacketBurst&gt;&amp;, void&gt; (814,172 samples, 0.08%)</title><rect x="282.1" y="453" width="0.7" height="15.0" fill="rgb(219,68,16)" rx="2" ry="2" />
+<text  x="285.10" y="463.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;std::__strip_reference_wrapper&lt;std::decay&lt;ns3::Scheduler::EventKey const&amp;&gt;::type&gt;::__type, std::__strip_reference_wrapper&lt;std::decay&lt;ns3::EventImpl* const&amp;&gt;::type&gt;::__type&gt; std::make_pair&lt;ns3::Scheduler::EventKey const&amp;, ns3::EventImpl* const&amp;&gt; (240,322 samples, 0.02%)</title><rect x="338.6" y="437" width="0.2" height="15.0" fill="rgb(235,141,33)" rx="2" ry="2" />
+<text  x="341.64" y="447.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::push_back (696,056 samples, 0.07%)</title><rect x="598.2" y="277" width="0.6" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="601.21" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::LteUePhy::SetSubChannelsForReception (725,734 samples, 0.07%)</title><rect x="531.1" y="357" width="0.6" height="15.0" fill="rgb(250,208,49)" rx="2" ry="2" />
+<text  x="534.09" y="367.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::_M_default_initialize (267,489 samples, 0.03%)</title><rect x="111.9" y="421" width="0.2" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="114.93" y="431.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::push_back (1,055,032 samples, 0.11%)</title><rect x="572.4" y="357" width="0.9" height="15.0" fill="rgb(225,94,22)" rx="2" ry="2" />
+<text  x="575.43" y="367.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::TbId_t, std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::_Select1st&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::_S_right (157,484 samples, 0.02%)</title><rect x="506.6" y="501" width="0.1" height="15.0" fill="rgb(244,183,43)" rx="2" ry="2" />
+<text  x="509.56" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Simulator::Now (240,092 samples, 0.02%)</title><rect x="485.3" y="501" width="0.2" height="15.0" fill="rgb(240,164,39)" rx="2" ry="2" />
+<text  x="488.33" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::HarqProcessInfoElement_t* std::__uninitialized_copy&lt;true&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::HarqProcessInfoElement_t const*, std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt;, ns3::HarqProcessInfoElement_t*&gt; (1,522,938 samples, 0.16%)</title><rect x="512.4" y="501" width="1.3" height="15.0" fill="rgb(238,156,37)" rx="2" ry="2" />
+<text  x="515.43" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;* std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_copy&lt;false, std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_Alloc_node&gt; (458,139 samples, 0.05%)</title><rect x="668.5" y="437" width="0.3" height="15.0" fill="rgb(251,212,50)" rx="2" ry="2" />
+<text  x="671.47" y="447.5" ></text>
+</g>
+<g >
+<title>std::_List_node&lt;ns3::UlDciLteControlMessage&gt;::_M_valptr (437,168 samples, 0.05%)</title><rect x="392.9" y="501" width="0.4" height="15.0" fill="rgb(233,129,30)" rx="2" ry="2" />
+<text  x="395.93" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Simulator::ScheduleWithContext (475,136 samples, 0.05%)</title><rect x="115.9" y="469" width="0.4" height="15.0" fill="rgb(230,116,27)" rx="2" ry="2" />
+<text  x="118.94" y="479.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned int, ns3::RxSpectrumModelInfo, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::RxSpectrumModelInfo&gt; &gt; &gt;::begin (243,486 samples, 0.03%)</title><rect x="80.7" y="517" width="0.2" height="15.0" fill="rgb(238,153,36)" rx="2" ry="2" />
+<text  x="83.70" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::NoOpComponentCarrierManager::DoNotifyTxOpportunity (2,715,978 samples, 0.28%)</title><rect x="17.2" y="453" width="2.2" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="20.17" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::LteRlcSm::DoNotifyTxOpportunity (192,143 samples, 0.02%)</title><rect x="96.2" y="389" width="0.2" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="99.20" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::Object::SetTypeId (397,305 samples, 0.04%)</title><rect x="632.7" y="501" width="0.3" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="635.68" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::HigherLayerSelected_s* std::__relocate_a_1&lt;ns3::HigherLayerSelected_s*, ns3::HigherLayerSelected_s*, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt; (1,090,256 samples, 0.11%)</title><rect x="595.3" y="229" width="0.9" height="15.0" fill="rgb(235,141,33)" rx="2" ry="2" />
+<text  x="598.35" y="239.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::SpectrumValue (3,551,632 samples, 0.37%)</title><rect x="299.4" y="469" width="2.9" height="15.0" fill="rgb(211,27,6)" rx="2" ry="2" />
+<text  x="302.45" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;ns3::UlDciListElement_s, std::allocator&lt;ns3::UlDciListElement_s&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;ns3::UlDciListElement_s, std::allocator&lt;ns3::UlDciListElement_s&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;ns3::UlDciListElement_s, std::allocator&lt;ns3::UlDciListElement_s&gt; &gt; &gt; &gt; &gt;::_M_begin (429,634 samples, 0.04%)</title><rect x="240.8" y="453" width="0.4" height="15.0" fill="rgb(253,221,52)" rx="2" ry="2" />
+<text  x="243.81" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt;::size (195,796 samples, 0.02%)</title><rect x="144.9" y="437" width="0.2" height="15.0" fill="rgb(213,39,9)" rx="2" ry="2" />
+<text  x="147.94" y="447.5" ></text>
+</g>
+<g >
+<title>unsigned short&amp; std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::emplace_back&lt;unsigned short&gt; (3,153,700 samples, 0.33%)</title><rect x="478.9" y="293" width="2.5" height="15.0" fill="rgb(214,44,10)" rx="2" ry="2" />
+<text  x="481.89" y="303.5" ></text>
+</g>
+<g >
+<title>std::_Function_base::~_Function_base (194,457 samples, 0.02%)</title><rect x="727.7" y="405" width="0.1" height="15.0" fill="rgb(221,74,17)" rx="2" ry="2" />
+<text  x="730.69" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::EnbMemberLteEnbPhySapProvider::SendLteControlMessage (851,386 samples, 0.09%)</title><rect x="230.2" y="453" width="0.6" height="15.0" fill="rgb(253,222,53)" rx="2" ry="2" />
+<text  x="233.16" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteSpectrumSignalParametersDlCtrlFrame&gt; ns3::Create&lt;ns3::LteSpectrumSignalParametersDlCtrlFrame, ns3::LteSpectrumSignalParametersDlCtrlFrame const&amp;&gt; (729,950 samples, 0.08%)</title><rect x="113.8" y="469" width="0.6" height="15.0" fill="rgb(242,171,41)" rx="2" ry="2" />
+<text  x="116.83" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::LteRadioBearerTag::~LteRadioBearerTag (181,554 samples, 0.02%)</title><rect x="561.2" y="197" width="0.2" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="564.24" y="207.5" ></text>
+</g>
+<g >
+<title>ns3::DlDciListElement_s::DlDciListElement_s (964,763 samples, 0.10%)</title><rect x="159.0" y="421" width="0.8" height="15.0" fill="rgb(233,129,30)" rx="2" ry="2" />
+<text  x="161.98" y="431.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;signed char, std::allocator&lt;signed char&gt; &gt;::push_back (934,973 samples, 0.10%)</title><rect x="532.8" y="341" width="0.8" height="15.0" fill="rgb(248,200,48)" rx="2" ry="2" />
+<text  x="535.84" y="351.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt; &gt;::find (270,008 samples, 0.03%)</title><rect x="17.7" y="357" width="0.2" height="15.0" fill="rgb(225,93,22)" rx="2" ry="2" />
+<text  x="20.67" y="367.5" ></text>
+</g>
+<g >
+<title>modff64x (194,496 samples, 0.02%)</title><rect x="684.1" y="469" width="0.1" height="15.0" fill="rgb(218,62,14)" rx="2" ry="2" />
+<text  x="687.05" y="479.5" ></text>
+</g>
+<g >
+<title>pthread_self (192,757 samples, 0.02%)</title><rect x="280.0" y="485" width="0.2" height="15.0" fill="rgb(241,169,40)" rx="2" ry="2" />
+<text  x="283.00" y="495.5" ></text>
+</g>
+<g >
+<title>std::map&lt;ns3::Scheduler::EventKey, ns3::EventImpl*, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::lower_bound (152,705 samples, 0.02%)</title><rect x="116.1" y="405" width="0.1" height="15.0" fill="rgb(238,153,36)" rx="2" ry="2" />
+<text  x="119.06" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumSignalParametersDataFrame::LteSpectrumSignalParametersDataFrame (1,650,971 samples, 0.17%)</title><rect x="669.3" y="517" width="1.3" height="15.0" fill="rgb(206,8,1)" rx="2" ry="2" />
+<text  x="672.26" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::Object::~Object (853,448 samples, 0.09%)</title><rect x="164.8" y="357" width="0.6" height="15.0" fill="rgb(229,110,26)" rx="2" ry="2" />
+<text  x="167.76" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::NoOpComponentCarrierManager::DoTransmitPdu (549,181 samples, 0.06%)</title><rect x="15.9" y="373" width="0.4" height="15.0" fill="rgb(228,110,26)" rx="2" ry="2" />
+<text  x="18.88" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::_Rb_tree_impl&lt;std::less&lt;unsigned short&gt;, true&gt;::_Rb_tree_impl (893,299 samples, 0.09%)</title><rect x="189.9" y="453" width="0.7" height="15.0" fill="rgb(233,129,30)" rx="2" ry="2" />
+<text  x="192.92" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbMac::DoDlInfoListElementHarqFeedback (13,820,039 samples, 1.43%)</title><rect x="446.0" y="325" width="11.1" height="15.0" fill="rgb(209,20,4)" rx="2" ry="2" />
+<text  x="448.97" y="335.5" ></text>
+</g>
+<g >
+<title>int* std::__uninitialized_copy&lt;true&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;int const*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt;, int*&gt; (268,424 samples, 0.03%)</title><rect x="91.1" y="501" width="0.2" height="15.0" fill="rgb(207,11,2)" rx="2" ry="2" />
+<text  x="94.12" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::MobilityModel&gt;::Acquire (151,917 samples, 0.02%)</title><rect x="643.9" y="485" width="0.1" height="15.0" fill="rgb(253,222,53)" rx="2" ry="2" />
+<text  x="646.92" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::vector (2,848,710 samples, 0.29%)</title><rect x="238.0" y="293" width="2.3" height="15.0" fill="rgb(239,156,37)" rx="2" ry="2" />
+<text  x="241.03" y="303.5" ></text>
+</g>
+<g >
+<title>unsigned long* std::__copy_move_a1&lt;false, unsigned long*, unsigned long*&gt; (267,936 samples, 0.03%)</title><rect x="199.7" y="389" width="0.2" height="15.0" fill="rgb(233,129,31)" rx="2" ry="2" />
+<text  x="202.67" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Head_base&lt;0ul, ns3::LteEnbPhy*, false&gt;::_M_head (157,244 samples, 0.02%)</title><rect x="752.5" y="549" width="0.1" height="15.0" fill="rgb(214,43,10)" rx="2" ry="2" />
+<text  x="755.52" y="559.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;* std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_M_clone_node&lt;false, std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_Alloc_node&gt; (282,988 samples, 0.03%)</title><rect x="232.5" y="389" width="0.3" height="15.0" fill="rgb(241,167,40)" rx="2" ry="2" />
+<text  x="235.54" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::CqiListElement_s::CqiListElement_s (874,922 samples, 0.09%)</title><rect x="592.3" y="261" width="0.7" height="15.0" fill="rgb(238,156,37)" rx="2" ry="2" />
+<text  x="595.33" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;::Ptr (148,039 samples, 0.02%)</title><rect x="323.6" y="501" width="0.2" height="15.0" fill="rgb(250,208,49)" rx="2" ry="2" />
+<text  x="326.64" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;* std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_copy&lt;false, std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_Alloc_node&gt; (155,456 samples, 0.02%)</title><rect x="341.2" y="405" width="0.2" height="15.0" fill="rgb(251,212,50)" rx="2" ry="2" />
+<text  x="344.24" y="415.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_clear (429,433 samples, 0.04%)</title><rect x="776.1" y="357" width="0.3" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="779.06" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::EventImpl, ns3::Empty, ns3::DefaultDeleter&lt;ns3::EventImpl&gt; &gt;::Unref (572,810 samples, 0.06%)</title><rect x="64.5" y="501" width="0.4" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="67.47" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;::_M_valptr (148,167 samples, 0.02%)</title><rect x="184.4" y="469" width="0.2" height="15.0" fill="rgb(213,39,9)" rx="2" ry="2" />
+<text  x="187.45" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::LteControlMessage, ns3::Empty, ns3::DefaultDeleter&lt;ns3::LteControlMessage&gt; &gt;::Unref (611,218 samples, 0.06%)</title><rect x="609.8" y="469" width="0.5" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="612.77" y="479.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt;::find (1,045,530 samples, 0.11%)</title><rect x="431.9" y="325" width="0.9" height="15.0" fill="rgb(228,106,25)" rx="2" ry="2" />
+<text  x="434.95" y="335.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::MacCeListElement_s, std::allocator&lt;ns3::MacCeListElement_s&gt; &gt;::begin (193,759 samples, 0.02%)</title><rect x="264.2" y="517" width="0.1" height="15.0" fill="rgb(237,149,35)" rx="2" ry="2" />
+<text  x="267.19" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::MacCeListElement_s* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;ns3::MacCeListElement_s*, std::vector&lt;ns3::MacCeListElement_s, std::allocator&lt;ns3::MacCeListElement_s&gt; &gt; &gt;, ns3::MacCeListElement_s*, ns3::MacCeListElement_s&gt; (996,997 samples, 0.10%)</title><rect x="128.7" y="485" width="0.8" height="15.0" fill="rgb(231,122,29)" rx="2" ry="2" />
+<text  x="131.72" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::find (1,211,425 samples, 0.12%)</title><rect x="221.3" y="469" width="1.0" height="15.0" fill="rgb(210,27,6)" rx="2" ry="2" />
+<text  x="224.31" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp; std::__pair_get&lt;1ul&gt;::__move_get&lt;unsigned int const&amp;, ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp;&gt; (152,590 samples, 0.02%)</title><rect x="660.1" y="485" width="0.1" height="15.0" fill="rgb(224,91,21)" rx="2" ry="2" />
+<text  x="663.11" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;bool, std::allocator&lt;bool&gt; &gt;::~vector (827,864 samples, 0.09%)</title><rect x="201.7" y="485" width="0.6" height="15.0" fill="rgb(249,204,48)" rx="2" ry="2" />
+<text  x="204.65" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteControlMessage&gt;&amp; std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::emplace_back&lt;ns3::Ptr&lt;ns3::Sib1LteControlMessage&gt;&amp;&gt; (149,493 samples, 0.02%)</title><rect x="388.6" y="549" width="0.1" height="15.0" fill="rgb(226,98,23)" rx="2" ry="2" />
+<text  x="391.57" y="559.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_M_allocate (707,146 samples, 0.07%)</title><rect x="655.0" y="437" width="0.5" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="657.96" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::MemberSchedSapProvider&lt;ns3::PfFfMacScheduler&gt;::SchedUlCqiInfoReq (821,265 samples, 0.08%)</title><rect x="102.6" y="501" width="0.6" height="15.0" fill="rgb(214,45,10)" rx="2" ry="2" />
+<text  x="105.56" y="511.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::allocate (393,182 samples, 0.04%)</title><rect x="237.6" y="309" width="0.3" height="15.0" fill="rgb(232,126,30)" rx="2" ry="2" />
+<text  x="240.61" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::MemberSchedSapProvider&lt;ns3::PfFfMacScheduler&gt;::SchedUlTriggerReq (3,881,896 samples, 0.40%)</title><rect x="103.3" y="501" width="3.1" height="15.0" fill="rgb(237,148,35)" rx="2" ry="2" />
+<text  x="106.25" y="511.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt; &gt;::deallocate (887,233 samples, 0.09%)</title><rect x="764.3" y="629" width="0.7" height="15.0" fill="rgb(251,212,50)" rx="2" ry="2" />
+<text  x="767.33" y="639.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::operator= (345,577 samples, 0.04%)</title><rect x="114.0" y="405" width="0.3" height="15.0" fill="rgb(243,177,42)" rx="2" ry="2" />
+<text  x="117.02" y="415.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::HigherLayerSelected_s*, ns3::HigherLayerSelected_s&gt; (151,525 samples, 0.02%)</title><rect x="255.6" y="341" width="0.1" height="15.0" fill="rgb(237,150,35)" rx="2" ry="2" />
+<text  x="258.57" y="351.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt;::construct&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; const&amp;&gt; (1,840,875 samples, 0.19%)</title><rect x="211.7" y="453" width="1.5" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="214.74" y="463.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt;::construct&lt;ns3::HigherLayerSelected_s, ns3::HigherLayerSelected_s const&amp;&gt; (366,550 samples, 0.04%)</title><rect x="596.3" y="261" width="0.3" height="15.0" fill="rgb(234,137,32)" rx="2" ry="2" />
+<text  x="599.30" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::MakeEvent&lt;void  (2,859,606 samples, 0.29%)</title><rect x="616.7" y="517" width="2.3" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="619.73" y="527.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;*, std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt; &gt; std::move&lt;__gnu_cxx::__normal_iterator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;*, std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;*, std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt; &gt; &gt; (1,552,993 samples, 0.16%)</title><rect x="621.5" y="501" width="1.2" height="15.0" fill="rgb(254,225,54)" rx="2" ry="2" />
+<text  x="624.49" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Time::GetNanoSeconds (204,211 samples, 0.02%)</title><rect x="555.2" y="229" width="0.2" height="15.0" fill="rgb(241,166,39)" rx="2" ry="2" />
+<text  x="558.21" y="239.5" ></text>
+</g>
+<g >
+<title>ns3::VendorSpecificListElement_s* std::__uninitialized_copy&lt;false&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::VendorSpecificListElement_s const*, std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt; &gt;, ns3::VendorSpecificListElement_s*&gt; (386,345 samples, 0.04%)</title><rect x="144.0" y="405" width="0.4" height="15.0" fill="rgb(227,101,24)" rx="2" ry="2" />
+<text  x="147.04" y="415.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::ByteTagListData*, std::allocator&lt;ns3::ByteTagListData*&gt; &gt;::begin (200,950 samples, 0.02%)</title><rect x="30.4" y="357" width="0.2" height="15.0" fill="rgb(207,12,3)" rx="2" ry="2" />
+<text  x="33.44" y="367.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt;::vector (183,894 samples, 0.02%)</title><rect x="95.3" y="437" width="0.1" height="15.0" fill="rgb(218,61,14)" rx="2" ry="2" />
+<text  x="98.28" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy::ReportInterference (992,797 samples, 0.10%)</title><rect x="481.4" y="341" width="0.8" height="15.0" fill="rgb(247,197,47)" rx="2" ry="2" />
+<text  x="484.43" y="351.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;ns3::DlDciListElement_s, std::allocator&lt;ns3::DlDciListElement_s&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;ns3::DlDciListElement_s, std::allocator&lt;ns3::DlDciListElement_s&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;ns3::DlDciListElement_s, std::allocator&lt;ns3::DlDciListElement_s&gt; &gt; &gt; &gt; &gt;::find (966,324 samples, 0.10%)</title><rect x="187.1" y="469" width="0.7" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="190.07" y="479.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;double&gt;::allocate (150,187 samples, 0.02%)</title><rect x="718.4" y="373" width="0.1" height="15.0" fill="rgb(221,76,18)" rx="2" ry="2" />
+<text  x="721.35" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::Angles::NormalizeAngles (468,955 samples, 0.05%)</title><rect x="311.0" y="469" width="0.4" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="314.04" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::LteUePhy::SendSrs (1,152,023 samples, 0.12%)</title><rect x="613.7" y="565" width="0.9" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="616.70" y="575.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::find (186,790 samples, 0.02%)</title><rect x="102.7" y="453" width="0.2" height="15.0" fill="rgb(210,27,6)" rx="2" ry="2" />
+<text  x="105.72" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;bool, std::allocator&lt;bool&gt; &gt;::capacity (268,073 samples, 0.03%)</title><rect x="200.2" y="437" width="0.2" height="15.0" fill="rgb(205,2,0)" rx="2" ry="2" />
+<text  x="203.16" y="447.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;int*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt; std::copy&lt;__gnu_cxx::__normal_iterator&lt;int const*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;int*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt; &gt; (330,607 samples, 0.03%)</title><rect x="531.2" y="325" width="0.3" height="15.0" fill="rgb(223,85,20)" rx="2" ry="2" />
+<text  x="534.19" y="335.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;::_M_insert&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; const&amp;&gt; (2,723,348 samples, 0.28%)</title><rect x="723.0" y="501" width="2.2" height="15.0" fill="rgb(251,215,51)" rx="2" ry="2" />
+<text  x="726.05" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::CallbackImplBase* ns3::PeekPointer&lt;ns3::CallbackImplBase&gt; (161,766 samples, 0.02%)</title><rect x="467.5" y="485" width="0.2" height="15.0" fill="rgb(246,188,45)" rx="2" ry="2" />
+<text  x="470.54" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Time::ToInteger (200,806 samples, 0.02%)</title><rect x="391.2" y="533" width="0.2" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="394.24" y="543.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;double&gt;::allocate (168,940 samples, 0.02%)</title><rect x="78.5" y="405" width="0.2" height="15.0" fill="rgb(221,76,18)" rx="2" ry="2" />
+<text  x="81.52" y="415.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_List_base (354,467 samples, 0.04%)</title><rect x="354.7" y="517" width="0.3" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="357.73" y="527.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt;::vector (1,942,143 samples, 0.20%)</title><rect x="475.4" y="309" width="1.6" height="15.0" fill="rgb(218,61,14)" rx="2" ry="2" />
+<text  x="478.39" y="319.5" ></text>
+</g>
+<g >
+<title>std::tuple&lt;ns3::LteSpectrumPhy*&gt;::tuple&lt;ns3::LteSpectrumPhy*&amp;, true, true&gt; (328,207 samples, 0.03%)</title><rect x="63.3" y="453" width="0.2" height="15.0" fill="rgb(249,204,48)" rx="2" ry="2" />
+<text  x="66.25" y="463.5" ></text>
+</g>
+<g >
+<title>int* std::copy&lt;int*, int*&gt; (218,802 samples, 0.02%)</title><rect x="530.6" y="325" width="0.2" height="15.0" fill="rgb(249,206,49)" rx="2" ry="2" />
+<text  x="533.58" y="335.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;2ul, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::~_Tuple_impl (297,048 samples, 0.03%)</title><rect x="666.3" y="405" width="0.2" height="15.0" fill="rgb(217,57,13)" rx="2" ry="2" />
+<text  x="669.27" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;::_M_create_storage (392,586 samples, 0.04%)</title><rect x="212.7" y="389" width="0.3" height="15.0" fill="rgb(242,173,41)" rx="2" ry="2" />
+<text  x="215.69" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::DlDciListElement_s::DlDciListElement_s (1,019,581 samples, 0.11%)</title><rect x="147.0" y="453" width="0.8" height="15.0" fill="rgb(233,129,30)" rx="2" ry="2" />
+<text  x="150.03" y="463.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; (351,126 samples, 0.04%)</title><rect x="335.0" y="309" width="0.3" height="15.0" fill="rgb(213,37,9)" rx="2" ry="2" />
+<text  x="338.01" y="319.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt; &gt; &gt;::at (603,079 samples, 0.06%)</title><rect x="288.9" y="533" width="0.5" height="15.0" fill="rgb(238,153,36)" rx="2" ry="2" />
+<text  x="291.91" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::EventId::EventId (1,141,333 samples, 0.12%)</title><rect x="268.2" y="501" width="1.0" height="15.0" fill="rgb(206,4,1)" rx="2" ry="2" />
+<text  x="271.24" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::NoOpComponentCarrierManager::DoNotifyTxOpportunity (538,351 samples, 0.06%)</title><rect x="96.2" y="421" width="0.4" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="99.20" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumSignalParameters::SpectrumSignalParameters (2,427,360 samples, 0.25%)</title><rect x="70.9" y="469" width="1.9" height="15.0" fill="rgb(219,67,16)" rx="2" ry="2" />
+<text  x="73.86" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Object::GetTypeId (154,300 samples, 0.02%)</title><rect x="161.1" y="405" width="0.1" height="15.0" fill="rgb(234,134,32)" rx="2" ry="2" />
+<text  x="164.09" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::Callback&lt;void, ns3::UlInfoListElement_s&gt;::operator (2,617,045 samples, 0.27%)</title><rect x="438.9" y="549" width="2.1" height="15.0" fill="rgb(227,104,24)" rx="2" ry="2" />
+<text  x="441.90" y="559.5" ></text>
+</g>
+<g >
+<title>ns3::LteRlcSm::DoNotifyTxOpportunity (4,972,136 samples, 0.51%)</title><rect x="11.4" y="421" width="4.0" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="14.43" y="431.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt; &gt; &gt;::find (155,011 samples, 0.02%)</title><rect x="97.5" y="437" width="0.2" height="15.0" fill="rgb(211,30,7)" rx="2" ry="2" />
+<text  x="100.53" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Head_base&lt;5ul, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;, false&gt;::_Head_base (152,827 samples, 0.02%)</title><rect x="667.8" y="293" width="0.2" height="15.0" fill="rgb(219,66,15)" rx="2" ry="2" />
+<text  x="670.83" y="303.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned int, std::allocator&lt;unsigned int&gt; &gt;::_S_max_size (385,945 samples, 0.04%)</title><rect x="696.6" y="469" width="0.3" height="15.0" fill="rgb(241,167,40)" rx="2" ry="2" />
+<text  x="699.59" y="479.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::push_back (1,437,463 samples, 0.15%)</title><rect x="625.7" y="501" width="1.2" height="15.0" fill="rgb(222,79,18)" rx="2" ry="2" />
+<text  x="628.71" y="511.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::list&lt;std::_List_const_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;, void&gt; (296,881 samples, 0.03%)</title><rect x="648.8" y="421" width="0.2" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="651.79" y="431.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::begin (458,783 samples, 0.05%)</title><rect x="369.8" y="517" width="0.4" height="15.0" fill="rgb(230,117,28)" rx="2" ry="2" />
+<text  x="372.81" y="527.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Callback&lt;void, ns3::SpectrumValue const&amp;&gt;, std::allocator&lt;ns3::Callback&lt;void, ns3::SpectrumValue const&amp;&gt; &gt; &gt;::begin (165,292 samples, 0.02%)</title><rect x="607.1" y="517" width="0.1" height="15.0" fill="rgb(224,91,21)" rx="2" ry="2" />
+<text  x="610.09" y="527.5" ></text>
+</g>
+<g >
+<title>[libc.so.6] (197,502 samples, 0.02%)</title><rect x="345.1" y="485" width="0.1" height="15.0" fill="rgb(223,84,20)" rx="2" ry="2" />
+<text  x="348.09" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::LteRlcSpecificLteMacSapUser::NotifyTxOpportunity (2,715,978 samples, 0.28%)</title><rect x="17.2" y="437" width="2.2" height="15.0" fill="rgb(249,204,48)" rx="2" ry="2" />
+<text  x="20.17" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Object::Object (2,382,251 samples, 0.25%)</title><rect x="364.4" y="485" width="2.0" height="15.0" fill="rgb(242,174,41)" rx="2" ry="2" />
+<text  x="367.44" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::_Vector_impl_data::_Vector_impl_data (208,562 samples, 0.02%)</title><rect x="520.5" y="293" width="0.2" height="15.0" fill="rgb(215,48,11)" rx="2" ry="2" />
+<text  x="523.53" y="303.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_M_deallocate (164,716 samples, 0.02%)</title><rect x="728.4" y="389" width="0.2" height="15.0" fill="rgb(240,162,38)" rx="2" ry="2" />
+<text  x="731.43" y="399.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::~_List_base (148,437 samples, 0.02%)</title><rect x="698.0" y="533" width="0.1" height="15.0" fill="rgb(221,74,17)" rx="2" ry="2" />
+<text  x="700.96" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;* std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_copy&lt;false, std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_Alloc_node&gt; (158,119 samples, 0.02%)</title><rect x="340.6" y="229" width="0.2" height="15.0" fill="rgb(251,212,50)" rx="2" ry="2" />
+<text  x="343.65" y="239.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt; &gt;::find (1,168,142 samples, 0.12%)</title><rect x="11.6" y="357" width="0.9" height="15.0" fill="rgb(225,93,22)" rx="2" ry="2" />
+<text  x="14.55" y="367.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned char, ns3::LteMacSapProvider*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt; &gt;::find (366,125 samples, 0.04%)</title><rect x="552.4" y="213" width="0.3" height="15.0" fill="rgb(248,200,47)" rx="2" ry="2" />
+<text  x="555.36" y="223.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumSignalParametersDataFrame::~LteSpectrumSignalParametersDataFrame (2,588,254 samples, 0.27%)</title><rect x="773.8" y="405" width="2.1" height="15.0" fill="rgb(242,174,41)" rx="2" ry="2" />
+<text  x="776.80" y="415.5" ></text>
+</g>
+<g >
+<title>decltype  (427,457 samples, 0.04%)</title><rect x="288.1" y="437" width="0.3" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="291.08" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::SbMeasResult_s::SbMeasResult_s (1,121,514 samples, 0.12%)</title><rect x="583.6" y="277" width="0.9" height="15.0" fill="rgb(235,141,33)" rx="2" ry="2" />
+<text  x="586.59" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::UeMemberLteUePhySapProvider::SendLteControlMessage (565,879 samples, 0.06%)</title><rect x="689.2" y="501" width="0.5" height="15.0" fill="rgb(228,110,26)" rx="2" ry="2" />
+<text  x="692.24" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, unsigned int&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt; &gt;::_S_key (328,502 samples, 0.03%)</title><rect x="137.2" y="437" width="0.3" height="15.0" fill="rgb(219,66,15)" rx="2" ry="2" />
+<text  x="140.21" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteHarqPhy&gt;::operator (155,643 samples, 0.02%)</title><rect x="388.9" y="549" width="0.2" height="15.0" fill="rgb(228,110,26)" rx="2" ry="2" />
+<text  x="391.94" y="559.5" ></text>
+</g>
+<g >
+<title>ns3::CallbackImpl&lt;void, ns3::SpectrumValue const&amp;&gt;::operator (34,942,247 samples, 3.60%)</title><rect x="577.3" y="501" width="28.1" height="15.0" fill="rgb(219,64,15)" rx="2" ry="2" />
+<text  x="580.26" y="511.5" >n..</text>
+</g>
+<g >
+<title>ns3::DefaultSimulatorImpl::Now (163,019 samples, 0.02%)</title><rect x="600.0" y="293" width="0.1" height="15.0" fill="rgb(213,40,9)" rx="2" ry="2" />
+<text  x="603.02" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::Packet::AddByteTag (2,931,180 samples, 0.30%)</title><rect x="553.0" y="261" width="2.4" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="556.01" y="271.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::TbId_t, std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::_Select1st&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::_M_begin (495,256 samples, 0.05%)</title><rect x="529.0" y="309" width="0.4" height="15.0" fill="rgb(245,184,44)" rx="2" ry="2" />
+<text  x="532.02" y="319.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteUeMac::LcInfo&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteUeMac::LcInfo&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteUeMac::LcInfo&gt; &gt; &gt;::_M_mbegin (150,034 samples, 0.02%)</title><rect x="691.1" y="453" width="0.1" height="15.0" fill="rgb(241,169,40)" rx="2" ry="2" />
+<text  x="694.09" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Bit_iterator std::__copy_move_a&lt;false, std::_Bit_iterator, std::_Bit_iterator&gt; (219,696 samples, 0.02%)</title><rect x="247.1" y="421" width="0.2" height="15.0" fill="rgb(247,193,46)" rx="2" ry="2" />
+<text  x="250.08" y="431.5" ></text>
+</g>
+<g >
+<title>unsigned char&amp; std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::emplace_back&lt;unsigned char&gt; (2,914,632 samples, 0.30%)</title><rect x="692.1" y="485" width="2.4" height="15.0" fill="rgb(237,147,35)" rx="2" ry="2" />
+<text  x="695.14" y="495.5" ></text>
+</g>
+<g >
+<title>void ns3::Simulator::ScheduleWithContext&lt;void  (7,199,277 samples, 0.74%)</title><rect x="82.7" y="517" width="5.8" height="15.0" fill="rgb(222,78,18)" rx="2" ry="2" />
+<text  x="85.69" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, unsigned char&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, unsigned char&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, unsigned char&gt; &gt; &gt;::begin (395,869 samples, 0.04%)</title><rect x="193.9" y="469" width="0.3" height="15.0" fill="rgb(210,23,5)" rx="2" ry="2" />
+<text  x="196.86" y="479.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::Buffer::Data* const*, std::vector&lt;ns3::Buffer::Data*, std::allocator&lt;ns3::Buffer::Data*&gt; &gt; &gt;::__normal_iterator (372,628 samples, 0.04%)</title><rect x="556.8" y="149" width="0.3" height="15.0" fill="rgb(205,0,0)" rx="2" ry="2" />
+<text  x="559.81" y="159.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::Packet, ns3::Empty, ns3::DefaultDeleter&lt;ns3::Packet&gt; &gt;::Ref (149,428 samples, 0.02%)</title><rect x="368.4" y="485" width="0.1" height="15.0" fill="rgb(231,122,29)" rx="2" ry="2" />
+<text  x="371.36" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy::ReceiveLteControlMessageList (27,232,853 samples, 2.81%)</title><rect x="441.7" y="373" width="21.9" height="15.0" fill="rgb(217,55,13)" rx="2" ry="2" />
+<text  x="444.71" y="383.5" >n..</text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::vector (380,581 samples, 0.04%)</title><rect x="595.8" y="149" width="0.3" height="15.0" fill="rgb(206,9,2)" rx="2" ry="2" />
+<text  x="598.76" y="159.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;bool, std::allocator&lt;bool&gt; &gt;::insert (2,500,355 samples, 0.26%)</title><rect x="246.8" y="469" width="2.0" height="15.0" fill="rgb(250,209,50)" rx="2" ry="2" />
+<text  x="249.83" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy::SendDataChannels (46,991,739 samples, 4.85%)</title><rect x="53.9" y="565" width="37.8" height="15.0" fill="rgb(247,193,46)" rx="2" ry="2" />
+<text  x="56.87" y="575.5" >ns3..</text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::_M_erase_aux (671,551 samples, 0.07%)</title><rect x="222.3" y="453" width="0.6" height="15.0" fill="rgb(242,173,41)" rx="2" ry="2" />
+<text  x="225.32" y="463.5" ></text>
+</g>
+<g >
+<title>std::function&lt;void  (2,105,662 samples, 0.22%)</title><rect x="15.5" y="693" width="1.6" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="18.45" y="703.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt; &gt;::_S_key (162,159 samples, 0.02%)</title><rect x="504.2" y="485" width="0.1" height="15.0" fill="rgb(216,55,13)" rx="2" ry="2" />
+<text  x="507.20" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;::operator (151,635 samples, 0.02%)</title><rect x="274.5" y="405" width="0.1" height="15.0" fill="rgb(245,186,44)" rx="2" ry="2" />
+<text  x="277.50" y="415.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::UlDciListElement_s, std::allocator&lt;ns3::UlDciListElement_s&gt; &gt;::at (232,176 samples, 0.02%)</title><rect x="249.1" y="485" width="0.2" height="15.0" fill="rgb(241,166,39)" rx="2" ry="2" />
+<text  x="252.09" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::IidManager::GetParent (228,334 samples, 0.02%)</title><rect x="374.2" y="453" width="0.2" height="15.0" fill="rgb(217,59,14)" rx="2" ry="2" />
+<text  x="377.23" y="463.5" ></text>
+</g>
+<g >
+<title>std::map&lt;ns3::Scheduler::EventKey, ns3::EventImpl*, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::lower_bound (294,424 samples, 0.03%)</title><rect x="615.9" y="469" width="0.3" height="15.0" fill="rgb(238,153,36)" rx="2" ry="2" />
+<text  x="618.93" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::BuildRarListElement_s, std::allocator&lt;ns3::BuildRarListElement_s&gt; &gt;::_M_get_Tp_allocator (191,995 samples, 0.02%)</title><rect x="143.3" y="437" width="0.2" height="15.0" fill="rgb(212,32,7)" rx="2" ry="2" />
+<text  x="146.32" y="447.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::~vector (149,670 samples, 0.02%)</title><rect x="347.6" y="533" width="0.1" height="15.0" fill="rgb(252,219,52)" rx="2" ry="2" />
+<text  x="350.56" y="543.5" ></text>
+</g>
+<g >
+<title>double* std::__uninitialized_default_n&lt;double*, unsigned long&gt; (153,593 samples, 0.02%)</title><rect x="316.3" y="341" width="0.1" height="15.0" fill="rgb(231,123,29)" rx="2" ry="2" />
+<text  x="319.25" y="351.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;2ul, unsigned int&gt;::_Tuple_impl&lt;unsigned int&amp;&gt; (359,595 samples, 0.04%)</title><rect x="709.9" y="389" width="0.3" height="15.0" fill="rgb(217,58,13)" rx="2" ry="2" />
+<text  x="712.89" y="399.5" ></text>
+</g>
+<g >
+<title>std::__detail::_List_node_header::_List_node_header (128,185 samples, 0.01%)</title><rect x="517.2" y="389" width="0.1" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="520.19" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::RlcPduListElement_s* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::RlcPduListElement_s const*, std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt;, ns3::RlcPduListElement_s*&gt; (980,187 samples, 0.10%)</title><rect x="211.8" y="389" width="0.8" height="15.0" fill="rgb(252,217,51)" rx="2" ry="2" />
+<text  x="214.84" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Bit_iterator std::copy&lt;std::_Bit_iterator, std::_Bit_iterator&gt; (219,696 samples, 0.02%)</title><rect x="247.1" y="437" width="0.2" height="15.0" fill="rgb(233,132,31)" rx="2" ry="2" />
+<text  x="250.08" y="447.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::BuildDataListElement_s&gt; (677,511 samples, 0.07%)</title><rect x="145.7" y="389" width="0.6" height="15.0" fill="rgb(236,143,34)" rx="2" ry="2" />
+<text  x="148.73" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::SpectrumValue, ns3::Empty, ns3::DefaultDeleter&lt;ns3::SpectrumValue&gt; &gt;::Unref (896,241 samples, 0.09%)</title><rect x="772.8" y="485" width="0.8" height="15.0" fill="rgb(246,189,45)" rx="2" ry="2" />
+<text  x="775.83" y="495.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt; &gt;::deallocate (181,716 samples, 0.02%)</title><rect x="378.3" y="293" width="0.1" height="15.0" fill="rgb(253,221,52)" rx="2" ry="2" />
+<text  x="381.26" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::UlDciLteControlMessage&amp; std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;::emplace_back&lt;ns3::UlDciLteControlMessage const&amp;&gt; (2,541,961 samples, 0.26%)</title><rect x="286.5" y="501" width="2.0" height="15.0" fill="rgb(207,11,2)" rx="2" ry="2" />
+<text  x="289.48" y="511.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::__uninitialized_fill_n&lt;true&gt;::__uninit_fill_n&lt;unsigned char*, unsigned long, unsigned char&gt; (378,589 samples, 0.04%)</title><rect x="216.0" y="421" width="0.3" height="15.0" fill="rgb(207,12,2)" rx="2" ry="2" />
+<text  x="218.97" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultSimulatorImpl::ScheduleNow (347,373 samples, 0.04%)</title><rect x="53.0" y="517" width="0.3" height="15.0" fill="rgb(211,32,7)" rx="2" ry="2" />
+<text  x="55.98" y="527.5" ></text>
+</g>
+<g >
+<title>operator new (404,041 samples, 0.04%)</title><rect x="32.7" y="341" width="0.4" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="35.73" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::LteHarqPhy::SubframeIndication (8,381,908 samples, 0.86%)</title><rect x="347.7" y="549" width="6.7" height="15.0" fill="rgb(229,112,26)" rx="2" ry="2" />
+<text  x="350.68" y="559.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned short const, std::vector&lt;ns3::DlDciListElement_s, std::allocator&lt;ns3::DlDciListElement_s&gt; &gt; &gt; &gt;::operator* (194,523 samples, 0.02%)</title><rect x="184.0" y="485" width="0.1" height="15.0" fill="rgb(243,175,42)" rx="2" ry="2" />
+<text  x="186.98" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::begin (161,967 samples, 0.02%)</title><rect x="600.2" y="293" width="0.1" height="15.0" fill="rgb(206,6,1)" rx="2" ry="2" />
+<text  x="603.21" y="303.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;int&gt;::deallocate (169,673 samples, 0.02%)</title><rect x="575.2" y="293" width="0.1" height="15.0" fill="rgb(236,147,35)" rx="2" ry="2" />
+<text  x="578.16" y="303.5" ></text>
+</g>
+<g >
+<title>void std::vector&lt;ns3::UlDciListElement_s, std::allocator&lt;ns3::UlDciListElement_s&gt; &gt;::_M_realloc_insert&lt;ns3::UlDciListElement_s const&amp;&gt; (193,533 samples, 0.02%)</title><rect x="105.9" y="453" width="0.1" height="15.0" fill="rgb(214,44,10)" rx="2" ry="2" />
+<text  x="108.88" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt;&amp; std::forward&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;&amp;&gt; (194,813 samples, 0.02%)</title><rect x="267.3" y="533" width="0.2" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="270.30" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::~SpectrumValue (209,498 samples, 0.02%)</title><rect x="605.4" y="517" width="0.2" height="15.0" fill="rgb(247,193,46)" rx="2" ry="2" />
+<text  x="608.40" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::MapScheduler::Insert (1,105,472 samples, 0.11%)</title><rect x="108.4" y="485" width="0.9" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="111.44" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::max_size (476,394 samples, 0.05%)</title><rect x="397.7" y="501" width="0.4" height="15.0" fill="rgb(242,171,41)" rx="2" ry="2" />
+<text  x="400.74" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_Rb_tree (164,996 samples, 0.02%)</title><rect x="88.0" y="469" width="0.1" height="15.0" fill="rgb(252,219,52)" rx="2" ry="2" />
+<text  x="90.95" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::~PacketBurst (1,309,427 samples, 0.14%)</title><rect x="76.8" y="357" width="1.1" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="79.80" y="367.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt;::allocate (283,919 samples, 0.03%)</title><rect x="444.9" y="261" width="0.2" height="15.0" fill="rgb(245,184,44)" rx="2" ry="2" />
+<text  x="447.88" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::ByteTagList::Iterator::Iterator (944,025 samples, 0.10%)</title><rect x="426.4" y="213" width="0.7" height="15.0" fill="rgb(248,198,47)" rx="2" ry="2" />
+<text  x="429.39" y="223.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__enable_if&lt;std::__is_scalar&lt;double&gt;::__value, void&gt;::__type std::__fill_a1&lt;double*, double&gt; (163,001 samples, 0.02%)</title><rect x="730.0" y="325" width="0.2" height="15.0" fill="rgb(237,149,35)" rx="2" ry="2" />
+<text  x="733.02" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::MapScheduler::Insert (6,361,819 samples, 0.66%)</title><rect x="333.7" y="453" width="5.1" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="336.71" y="463.5" ></text>
+</g>
+<g >
+<title>int* std::copy&lt;__gnu_cxx::__normal_iterator&lt;int const*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt;, int*&gt; (268,424 samples, 0.03%)</title><rect x="91.1" y="485" width="0.2" height="15.0" fill="rgb(215,50,12)" rx="2" ry="2" />
+<text  x="94.12" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy::StartSubFrame (345,416,065 samples, 35.62%)</title><rect x="122.5" y="565" width="277.8" height="15.0" fill="rgb(234,136,32)" rx="2" ry="2" />
+<text  x="125.51" y="575.5" >ns3::LteEnbPhy::StartSubFrame</text>
+</g>
+<g >
+<title>ns3::NodeListPriv::Delete (238,924 samples, 0.02%)</title><rect x="36.6" y="629" width="0.2" height="15.0" fill="rgb(213,39,9)" rx="2" ry="2" />
+<text  x="39.64" y="639.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;int&gt;::deallocate (169,673 samples, 0.02%)</title><rect x="575.2" y="277" width="0.1" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="578.16" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::ObjectDeleter::Delete (384,276 samples, 0.04%)</title><rect x="119.9" y="373" width="0.3" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="122.86" y="383.5" ></text>
+</g>
+<g >
+<title>std::function&lt;void  (416,320 samples, 0.04%)</title><rect x="53.5" y="501" width="0.4" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="56.54" y="511.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::BuildDataListElement_s, std::allocator&lt;ns3::BuildDataListElement_s&gt; &gt;::at (572,518 samples, 0.06%)</title><rect x="172.6" y="453" width="0.4" height="15.0" fill="rgb(206,9,2)" rx="2" ry="2" />
+<text  x="175.57" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::BuildDataListElement_s* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;ns3::BuildDataListElement_s const*, std::vector&lt;ns3::BuildDataListElement_s, std::allocator&lt;ns3::BuildDataListElement_s&gt; &gt; &gt;, ns3::BuildDataListElement_s*, ns3::BuildDataListElement_s&gt; (143,073 samples, 0.01%)</title><rect x="95.0" y="421" width="0.1" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="97.98" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt;::_M_valptr (165,214 samples, 0.02%)</title><rect x="567.5" y="277" width="0.2" height="15.0" fill="rgb(222,82,19)" rx="2" ry="2" />
+<text  x="570.52" y="287.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;::_M_ptr (163,699 samples, 0.02%)</title><rect x="497.0" y="517" width="0.1" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="500.01" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::PacketMetadata::PacketMetadata (473,227 samples, 0.05%)</title><rect x="153.5" y="357" width="0.4" height="15.0" fill="rgb(231,121,28)" rx="2" ry="2" />
+<text  x="156.48" y="367.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;0ul, ns3::LteInterference*, ns3::Ptr&lt;ns3::SpectrumValue const&gt;, unsigned int&gt;::_Tuple_impl&lt;ns3::LteInterference*&amp;, ns3::Ptr&lt;ns3::SpectrumValue const&gt;&amp;, unsigned int&amp;, void&gt; (1,419,200 samples, 0.15%)</title><rect x="709.1" y="421" width="1.1" height="15.0" fill="rgb(228,109,26)" rx="2" ry="2" />
+<text  x="712.10" y="431.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::_M_get_node (163,447 samples, 0.02%)</title><rect x="69.1" y="389" width="0.1" height="15.0" fill="rgb(212,36,8)" rx="2" ry="2" />
+<text  x="72.06" y="399.5" ></text>
+</g>
+<g >
+<title> (126,576 samples, 0.01%)</title><rect x="552.3" y="197" width="0.1" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="555.26" y="207.5" ></text>
+</g>
+<g >
+<title>void ns3::Callback&lt;void, ns3::SpectrumValue const&amp;&gt;::Callback&lt;void  (33,827,307 samples, 3.49%)</title><rect x="578.2" y="421" width="27.2" height="15.0" fill="rgb(221,75,18)" rx="2" ry="2" />
+<text  x="581.16" y="431.5" >v..</text>
+</g>
+<g >
+<title>std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt;::erase (213,559 samples, 0.02%)</title><rect x="117.1" y="517" width="0.2" height="15.0" fill="rgb(216,54,13)" rx="2" ry="2" />
+<text  x="120.11" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::ByteTagList::Allocate (1,324,752 samples, 0.14%)</title><rect x="553.4" y="229" width="1.0" height="15.0" fill="rgb(225,95,22)" rx="2" ry="2" />
+<text  x="556.35" y="239.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::_S_relocate (163,713 samples, 0.02%)</title><rect x="573.1" y="309" width="0.1" height="15.0" fill="rgb(238,154,37)" rx="2" ry="2" />
+<text  x="576.08" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::LteUePowerControl::CalculatePuschTxPower (1,080,040 samples, 0.11%)</title><rect x="681.2" y="533" width="0.9" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="684.20" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::PacketMetadata::DoAddHeader (167,176 samples, 0.02%)</title><rect x="558.7" y="213" width="0.1" height="15.0" fill="rgb(234,135,32)" rx="2" ry="2" />
+<text  x="561.71" y="223.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::begin (444,735 samples, 0.05%)</title><rect x="416.6" y="517" width="0.3" height="15.0" fill="rgb(206,6,1)" rx="2" ry="2" />
+<text  x="419.56" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::LteFlowId_t, std::pair&lt;ns3::LteFlowId_t const, ns3::FfMacSchedSapProvider::SchedDlRlcBufferReqParameters&gt;, std::_Select1st&lt;std::pair&lt;ns3::LteFlowId_t const, ns3::FfMacSchedSapProvider::SchedDlRlcBufferReqParameters&gt; &gt;, std::less&lt;ns3::LteFlowId_t&gt;, std::allocator&lt;std::pair&lt;ns3::LteFlowId_t const, ns3::FfMacSchedSapProvider::SchedDlRlcBufferReqParameters&gt; &gt; &gt;::find (652,951 samples, 0.07%)</title><rect x="26.9" y="293" width="0.5" height="15.0" fill="rgb(222,81,19)" rx="2" ry="2" />
+<text  x="29.92" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbMac::DoSchedDlConfigInd (4,972,136 samples, 0.51%)</title><rect x="11.4" y="485" width="4.0" height="15.0" fill="rgb(205,3,0)" rx="2" ry="2" />
+<text  x="14.43" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::lower_bound (1,730,701 samples, 0.18%)</title><rect x="336.7" y="405" width="1.4" height="15.0" fill="rgb(254,228,54)" rx="2" ry="2" />
+<text  x="339.70" y="415.5" ></text>
+</g>
+<g >
+<title>void std::destroy_at&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; (652,707 samples, 0.07%)</title><rect x="609.7" y="501" width="0.6" height="15.0" fill="rgb(216,52,12)" rx="2" ry="2" />
+<text  x="612.73" y="511.5" ></text>
+</g>
+<g >
+<title>std::_List_iterator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt;::_List_iterator (150,899 samples, 0.02%)</title><rect x="635.6" y="309" width="0.1" height="15.0" fill="rgb(231,119,28)" rx="2" ry="2" />
+<text  x="638.62" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::Packet::AddByteTag (557,108 samples, 0.06%)</title><rect x="152.1" y="389" width="0.5" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="155.12" y="399.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::vector (382,560 samples, 0.04%)</title><rect x="111.8" y="437" width="0.3" height="15.0" fill="rgb(239,156,37)" rx="2" ry="2" />
+<text  x="114.84" y="447.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;double&gt; &gt;::allocate (187,232 samples, 0.02%)</title><rect x="300.7" y="389" width="0.1" height="15.0" fill="rgb(234,136,32)" rx="2" ry="2" />
+<text  x="303.67" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::TypeId::GetParent (669,393 samples, 0.07%)</title><rect x="449.6" y="245" width="0.6" height="15.0" fill="rgb(211,29,7)" rx="2" ry="2" />
+<text  x="452.64" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::SpectrumValue, ns3::Empty, ns3::DefaultDeleter&lt;ns3::SpectrumValue&gt; &gt;::Unref (401,883 samples, 0.04%)</title><rect x="728.2" y="469" width="0.4" height="15.0" fill="rgb(246,189,45)" rx="2" ry="2" />
+<text  x="731.24" y="479.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_initialize_dispatch&lt;std::_List_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; (1,008,998 samples, 0.10%)</title><rect x="721.5" y="485" width="0.8" height="15.0" fill="rgb(239,156,37)" rx="2" ry="2" />
+<text  x="724.52" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt;::_Vector_base (272,688 samples, 0.03%)</title><rect x="130.8" y="485" width="0.2" height="15.0" fill="rgb(216,55,13)" rx="2" ry="2" />
+<text  x="133.81" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::back (228,016 samples, 0.02%)</title><rect x="692.2" y="469" width="0.2" height="15.0" fill="rgb(223,85,20)" rx="2" ry="2" />
+<text  x="695.21" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Packet::AddByteTag (356,272 samples, 0.04%)</title><rect x="16.4" y="389" width="0.3" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="19.41" y="399.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::Ptr&lt;ns3::Object&gt;*, ns3::Ptr&lt;ns3::Object&gt; &gt; (283,533 samples, 0.03%)</title><rect x="550.2" y="197" width="0.2" height="15.0" fill="rgb(226,98,23)" rx="2" ry="2" />
+<text  x="553.19" y="207.5" ></text>
+</g>
+<g >
+<title>std::_Head_base&lt;0ul, ns3::LteEnbPhy*, false&gt;::_M_head (165,500 samples, 0.02%)</title><rect x="752.1" y="549" width="0.1" height="15.0" fill="rgb(214,43,10)" rx="2" ry="2" />
+<text  x="755.11" y="559.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::_Auto_node::_Auto_node&lt;std::piecewise_construct_t const&amp;, std::tuple&lt;unsigned short const&amp;&gt;, std::tuple&lt;&gt; &gt; (264,662 samples, 0.03%)</title><rect x="99.5" y="437" width="0.2" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="102.47" y="447.5" ></text>
+</g>
+<g >
+<title>void std::_Function_base::_Base_manager&lt;std::_Bind&lt;void  (819,716 samples, 0.08%)</title><rect x="667.3" y="453" width="0.7" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="670.29" y="463.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::clear (391,980 samples, 0.04%)</title><rect x="497.3" y="549" width="0.3" height="15.0" fill="rgb(252,216,51)" rx="2" ry="2" />
+<text  x="500.30" y="559.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::LteEnbComponentCarrierManager::UeInfo&gt; &gt; &gt;::lower_bound (1,723,216 samples, 0.18%)</title><rect x="157.5" y="389" width="1.4" height="15.0" fill="rgb(213,37,8)" rx="2" ry="2" />
+<text  x="160.50" y="399.5" ></text>
+</g>
+<g >
+<title>void std::__fill_a&lt;unsigned int*, unsigned int&gt; (567,534 samples, 0.06%)</title><rect x="696.0" y="389" width="0.4" height="15.0" fill="rgb(251,212,50)" rx="2" ry="2" />
+<text  x="698.98" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::PacketTagList::RemoveAll (244,626 samples, 0.03%)</title><rect x="548.9" y="101" width="0.2" height="15.0" fill="rgb(226,99,23)" rx="2" ry="2" />
+<text  x="551.87" y="111.5" ></text>
+</g>
+<g >
+<title>ns3::CqiListElement_s::CqiListElement_s (2,022,367 samples, 0.21%)</title><rect x="583.5" y="293" width="1.6" height="15.0" fill="rgb(238,156,37)" rx="2" ry="2" />
+<text  x="586.49" y="303.5" ></text>
+</g>
+<g >
+<title>double* std::__fill_n_a&lt;double*, unsigned long, double&gt; (423,425 samples, 0.04%)</title><rect x="301.4" y="357" width="0.3" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="304.40" y="367.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; &gt;::_M_valptr (532,897 samples, 0.05%)</title><rect x="348.1" y="517" width="0.5" height="15.0" fill="rgb(213,39,9)" rx="2" ry="2" />
+<text  x="351.13" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::PacketBurst (1,593,239 samples, 0.16%)</title><rect x="446.2" y="293" width="1.3" height="15.0" fill="rgb(208,15,3)" rx="2" ry="2" />
+<text  x="449.20" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::ConstValuesEnd (157,751 samples, 0.02%)</title><rect x="583.0" y="293" width="0.2" height="15.0" fill="rgb(210,25,6)" rx="2" ry="2" />
+<text  x="586.03" y="303.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt; &gt;::construct&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (482,063 samples, 0.05%)</title><rect x="661.3" y="357" width="0.4" height="15.0" fill="rgb(231,122,29)" rx="2" ry="2" />
+<text  x="664.26" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::PacketMetadata::Allocate (495,360 samples, 0.05%)</title><rect x="557.9" y="197" width="0.4" height="15.0" fill="rgb(231,121,29)" rx="2" ry="2" />
+<text  x="560.86" y="207.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, unsigned char&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, unsigned char&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, unsigned char&gt; &gt; &gt;::_M_lower_bound (722,107 samples, 0.07%)</title><rect x="136.1" y="453" width="0.6" height="15.0" fill="rgb(226,99,23)" rx="2" ry="2" />
+<text  x="139.11" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::RlcTag::RlcTag (277,392 samples, 0.03%)</title><rect x="155.2" y="389" width="0.2" height="15.0" fill="rgb(228,109,26)" rx="2" ry="2" />
+<text  x="158.19" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::LteInterference::ConditionallyEvaluateChunk (281,840 samples, 0.03%)</title><rect x="485.3" y="533" width="0.2" height="15.0" fill="rgb(243,177,42)" rx="2" ry="2" />
+<text  x="488.29" y="543.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_move_assign (879,906 samples, 0.09%)</title><rect x="621.8" y="405" width="0.7" height="15.0" fill="rgb(213,40,9)" rx="2" ry="2" />
+<text  x="624.76" y="415.5" ></text>
+</g>
+<g >
+<title> (155,643 samples, 0.02%)</title><rect x="388.9" y="533" width="0.2" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="391.94" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Function_base::_Base_manager&lt;void  (242,907 samples, 0.03%)</title><rect x="418.8" y="405" width="0.2" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="421.83" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::Object::~Object (423,388 samples, 0.04%)</title><rect x="774.8" y="293" width="0.3" height="15.0" fill="rgb(229,110,26)" rx="2" ry="2" />
+<text  x="777.81" y="303.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned char const, ns3::LteUeMac::LcInfo&gt; &gt;::_M_valptr (354,247 samples, 0.04%)</title><rect x="438.1" y="261" width="0.2" height="15.0" fill="rgb(221,77,18)" rx="2" ry="2" />
+<text  x="441.05" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::Object::~Object (190,190 samples, 0.02%)</title><rect x="166.4" y="357" width="0.2" height="15.0" fill="rgb(229,110,26)" rx="2" ry="2" />
+<text  x="169.42" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::EnbMacMemberFfMacSchedSapUser::SchedDlConfigInd (4,972,136 samples, 0.51%)</title><rect x="11.4" y="501" width="4.0" height="15.0" fill="rgb(241,166,39)" rx="2" ry="2" />
+<text  x="14.43" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt; ns3::CompleteConstruct&lt;ns3::PacketBurst&gt; (2,205,090 samples, 0.23%)</title><rect x="33.3" y="469" width="1.8" height="15.0" fill="rgb(212,33,7)" rx="2" ry="2" />
+<text  x="36.34" y="479.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;double&gt;::allocate (525,645 samples, 0.05%)</title><rect x="407.7" y="389" width="0.4" height="15.0" fill="rgb(248,201,48)" rx="2" ry="2" />
+<text  x="410.65" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;* std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_create_node&lt;std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (382,281 samples, 0.04%)</title><rect x="108.6" y="405" width="0.3" height="15.0" fill="rgb(217,56,13)" rx="2" ry="2" />
+<text  x="111.56" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::Simulator::Now (287,971 samples, 0.03%)</title><rect x="600.0" y="309" width="0.2" height="15.0" fill="rgb(240,164,39)" rx="2" ry="2" />
+<text  x="602.95" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::MemberLteCcmMacSapUser&lt;ns3::NoOpComponentCarrierManager&gt;::NotifyTxOpportunity (4,972,136 samples, 0.51%)</title><rect x="11.4" y="469" width="4.0" height="15.0" fill="rgb(205,3,0)" rx="2" ry="2" />
+<text  x="14.43" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;::~Ptr (3,402,650 samples, 0.35%)</title><rect x="773.7" y="469" width="2.7" height="15.0" fill="rgb(236,143,34)" rx="2" ry="2" />
+<text  x="776.67" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::AddPacket (1,515,978 samples, 0.16%)</title><rect x="625.7" y="517" width="1.2" height="15.0" fill="rgb(207,10,2)" rx="2" ry="2" />
+<text  x="628.65" y="527.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;std::_Rb_tree_node_base*, std::_Rb_tree_node_base*&gt;::pair&lt;std::_Rb_tree_node&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;*&amp;, std::_Rb_tree_node_base*&amp;&gt; (199,710 samples, 0.02%)</title><rect x="386.0" y="453" width="0.2" height="15.0" fill="rgb(207,9,2)" rx="2" ry="2" />
+<text  x="389.02" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;::~vector (196,954 samples, 0.02%)</title><rect x="575.4" y="357" width="0.2" height="15.0" fill="rgb(235,139,33)" rx="2" ry="2" />
+<text  x="578.43" y="367.5" ></text>
+</g>
+<g >
+<title>std::_Bit_iterator_base::_Bit_iterator_base (157,638 samples, 0.02%)</title><rect x="201.4" y="421" width="0.1" height="15.0" fill="rgb(234,136,32)" rx="2" ry="2" />
+<text  x="204.37" y="431.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::ByteTagListData*, std::allocator&lt;ns3::ByteTagListData*&gt; &gt;::end (256,004 samples, 0.03%)</title><rect x="553.8" y="197" width="0.2" height="15.0" fill="rgb(238,154,36)" rx="2" ry="2" />
+<text  x="556.78" y="207.5" ></text>
+</g>
+<g >
+<title>ns3::LteHarqPhy::ResetDlHarqProcessStatus (597,412 samples, 0.06%)</title><rect x="464.5" y="549" width="0.5" height="15.0" fill="rgb(230,118,28)" rx="2" ry="2" />
+<text  x="467.50" y="559.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::_S_max_size (204,572 samples, 0.02%)</title><rect x="404.6" y="453" width="0.1" height="15.0" fill="rgb(251,212,50)" rx="2" ry="2" />
+<text  x="407.57" y="463.5" ></text>
+</g>
+<g >
+<title>unsigned short* std::__fill_n_a&lt;unsigned short*, unsigned long, unsigned short&gt; (459,034 samples, 0.05%)</title><rect x="252.4" y="389" width="0.3" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="255.37" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;int, std::allocator&lt;int&gt; &gt;::_Vector_impl::_Vector_impl (166,957 samples, 0.02%)</title><rect x="385.2" y="341" width="0.1" height="15.0" fill="rgb(236,142,34)" rx="2" ry="2" />
+<text  x="388.18" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::LtePhy::GetDevice (325,125 samples, 0.03%)</title><rect x="582.6" y="309" width="0.3" height="15.0" fill="rgb(234,134,32)" rx="2" ry="2" />
+<text  x="585.65" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::~PacketBurst (650,228 samples, 0.07%)</title><rect x="502.4" y="421" width="0.5" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="505.40" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::MobilityModel&gt;::Acquire (190,764 samples, 0.02%)</title><rect x="704.7" y="517" width="0.1" height="15.0" fill="rgb(253,222,53)" rx="2" ry="2" />
+<text  x="707.65" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::HarqStatus_e* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::DlInfoListElement_s::HarqStatus_e const*, std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt; &gt;, ns3::DlInfoListElement_s::HarqStatus_e*&gt; (234,294 samples, 0.02%)</title><rect x="510.0" y="485" width="0.2" height="15.0" fill="rgb(235,140,33)" rx="2" ry="2" />
+<text  x="512.98" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt;::_Vector_impl::_Vector_impl (431,145 samples, 0.04%)</title><rect x="131.7" y="469" width="0.3" height="15.0" fill="rgb(247,193,46)" rx="2" ry="2" />
+<text  x="134.68" y="479.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt;::construct&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; const&amp;&gt; (338,177 samples, 0.03%)</title><rect x="117.3" y="501" width="0.3" height="15.0" fill="rgb(221,77,18)" rx="2" ry="2" />
+<text  x="120.31" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Packet&gt;::~Ptr (439,896 samples, 0.05%)</title><rect x="502.0" y="341" width="0.3" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="504.99" y="351.5" ></text>
+</g>
+<g >
+<title>std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;* std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_create_node&lt;ns3::Ptr&lt;ns3::MibLteControlMessage&gt;&amp;&gt; (190,229 samples, 0.02%)</title><rect x="122.3" y="517" width="0.2" height="15.0" fill="rgb(237,150,36)" rx="2" ry="2" />
+<text  x="125.33" y="527.5" ></text>
+</g>
+<g >
+<title>std::function&lt;void  (1,320,674 samples, 0.14%)</title><rect x="725.6" y="485" width="1.1" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="728.60" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::operator+= (1,512,778 samples, 0.16%)</title><rect x="713.7" y="501" width="1.2" height="15.0" fill="rgb(215,49,11)" rx="2" ry="2" />
+<text  x="716.72" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::~_Rb_tree (1,100,157 samples, 0.11%)</title><rect x="232.9" y="453" width="0.8" height="15.0" fill="rgb(209,22,5)" rx="2" ry="2" />
+<text  x="235.86" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::~_Vector_base (206,667 samples, 0.02%)</title><rect x="728.4" y="405" width="0.2" height="15.0" fill="rgb(223,86,20)" rx="2" ry="2" />
+<text  x="731.39" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy::EndSubFrame (1,332,546 samples, 0.14%)</title><rect x="52.8" y="565" width="1.1" height="15.0" fill="rgb(230,116,27)" rx="2" ry="2" />
+<text  x="55.80" y="575.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumModel const&gt;::operator (311,768 samples, 0.03%)</title><rect x="299.7" y="453" width="0.3" height="15.0" fill="rgb(226,96,23)" rx="2" ry="2" />
+<text  x="302.70" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt; &gt;::_M_mbegin (153,550 samples, 0.02%)</title><rect x="508.9" y="501" width="0.1" height="15.0" fill="rgb(237,147,35)" rx="2" ry="2" />
+<text  x="511.90" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt; &gt;::_M_begin (556,533 samples, 0.06%)</title><rect x="179.8" y="437" width="0.5" height="15.0" fill="rgb(243,178,42)" rx="2" ry="2" />
+<text  x="182.83" y="447.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider::ReportBufferStatusParameters&gt; &gt;::_M_ptr (148,477 samples, 0.02%)</title><rect x="689.9" y="453" width="0.2" height="15.0" fill="rgb(234,136,32)" rx="2" ry="2" />
+<text  x="692.94" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;* std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_M_copy&lt;false, std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_Alloc_node&gt; (361,417 samples, 0.04%)</title><rect x="232.5" y="405" width="0.3" height="15.0" fill="rgb(236,146,34)" rx="2" ry="2" />
+<text  x="235.54" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::AddPacket (729,577 samples, 0.08%)</title><rect x="68.8" y="453" width="0.5" height="15.0" fill="rgb(207,10,2)" rx="2" ry="2" />
+<text  x="71.76" y="463.5" ></text>
+</g>
+<g >
+<title>std::operator== (159,203 samples, 0.02%)</title><rect x="746.8" y="533" width="0.2" height="15.0" fill="rgb(229,110,26)" rx="2" ry="2" />
+<text  x="749.83" y="543.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt;::construct&lt;ns3::DlInfoListElement_s, ns3::DlInfoListElement_s const&amp;&gt; (233,530 samples, 0.02%)</title><rect x="456.6" y="293" width="0.2" height="15.0" fill="rgb(228,110,26)" rx="2" ry="2" />
+<text  x="459.59" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue const&gt;::operator (353,348 samples, 0.04%)</title><rect x="717.2" y="501" width="0.3" height="15.0" fill="rgb(248,200,47)" rx="2" ry="2" />
+<text  x="720.23" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::~_Rb_tree (148,912 samples, 0.02%)</title><rect x="99.7" y="453" width="0.2" height="15.0" fill="rgb(254,228,54)" rx="2" ry="2" />
+<text  x="102.75" y="463.5" ></text>
+</g>
+<g >
+<title>double* std::__copy_move_a2&lt;false, double const*, double*&gt; (158,087 samples, 0.02%)</title><rect x="238.9" y="181" width="0.1" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="241.87" y="191.5" ></text>
+</g>
+<g >
+<title>ns3::MultiModelSpectrumChannel::FindAndEventuallyAddTxSpectrumModel (3,241,661 samples, 0.33%)</title><rect x="320.0" y="501" width="2.6" height="15.0" fill="rgb(212,32,7)" rx="2" ry="2" />
+<text  x="323.01" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt;::~_Vector_base (187,024 samples, 0.02%)</title><rect x="132.8" y="373" width="0.2" height="15.0" fill="rgb(244,183,43)" rx="2" ry="2" />
+<text  x="135.84" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s* std::__do_uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::DlInfoListElement_s const*, std::vector&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt; &gt;, ns3::DlInfoListElement_s*&gt; (4,706,249 samples, 0.49%)</title><rect x="258.1" y="437" width="3.8" height="15.0" fill="rgb(217,58,13)" rx="2" ry="2" />
+<text  x="261.14" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s* std::__uninitialized_copy_a&lt;ns3::DlInfoListElement_s*, ns3::DlInfoListElement_s*, ns3::DlInfoListElement_s&gt; (632,143 samples, 0.07%)</title><rect x="206.4" y="469" width="0.5" height="15.0" fill="rgb(210,27,6)" rx="2" ry="2" />
+<text  x="209.43" y="479.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned int, ns3::TxSpectrumModelInfo, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt; &gt;::find (188,402 samples, 0.02%)</title><rect x="114.5" y="469" width="0.2" height="15.0" fill="rgb(208,16,3)" rx="2" ry="2" />
+<text  x="117.51" y="479.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;int*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt; std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;int const*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;int*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt; &gt; (489,292 samples, 0.05%)</title><rect x="680.1" y="501" width="0.4" height="15.0" fill="rgb(236,146,35)" rx="2" ry="2" />
+<text  x="683.09" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;* std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_copy&lt;false, std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_Alloc_node&gt; (156,128 samples, 0.02%)</title><rect x="667.1" y="245" width="0.1" height="15.0" fill="rgb(251,212,50)" rx="2" ry="2" />
+<text  x="670.07" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::Time::FromInteger (159,767 samples, 0.02%)</title><rect x="424.8" y="197" width="0.1" height="15.0" fill="rgb(206,6,1)" rx="2" ry="2" />
+<text  x="427.78" y="207.5" ></text>
+</g>
+<g >
+<title>ns3::LteNetDevice::GetNode (153,775 samples, 0.02%)</title><rect x="113.5" y="485" width="0.1" height="15.0" fill="rgb(229,112,26)" rx="2" ry="2" />
+<text  x="116.52" y="495.5" ></text>
+</g>
+<g >
+<title>double* std::__uninitialized_default_n_1&lt;true&gt;::__uninit_default_n&lt;double*, unsigned long&gt; (455,698 samples, 0.05%)</title><rect x="677.6" y="405" width="0.4" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="680.60" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Bind&lt;void  (624,065 samples, 0.06%)</title><rect x="340.3" y="437" width="0.5" height="15.0" fill="rgb(253,221,52)" rx="2" ry="2" />
+<text  x="343.27" y="447.5" ></text>
+</g>
+<g >
+<title>operator new (169,720 samples, 0.02%)</title><rect x="70.0" y="437" width="0.1" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="73.01" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, unsigned char&gt; &gt;::_M_valptr (226,643 samples, 0.02%)</title><rect x="136.2" y="421" width="0.1" height="15.0" fill="rgb(213,40,9)" rx="2" ry="2" />
+<text  x="139.17" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;::_M_valptr (320,775 samples, 0.03%)</title><rect x="663.5" y="373" width="0.2" height="15.0" fill="rgb(213,38,9)" rx="2" ry="2" />
+<text  x="666.47" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::MemberLteCcmMacSapUser&lt;ns3::NoOpComponentCarrierManager&gt;::NotifyTxOpportunity (17,080,246 samples, 1.76%)</title><rect x="19.6" y="485" width="13.7" height="15.0" fill="rgb(205,3,0)" rx="2" ry="2" />
+<text  x="22.60" y="495.5" ></text>
+</g>
+<g >
+<title>std::map&lt;int, double, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::clear (1,170,710 samples, 0.12%)</title><rect x="393.8" y="549" width="1.0" height="15.0" fill="rgb(233,132,31)" rx="2" ry="2" />
+<text  x="396.82" y="559.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;int const, double&gt; &gt; &gt; &gt;::construct&lt;std::pair&lt;int const, double&gt;, std::pair&lt;int, double&gt; &gt; (184,474 samples, 0.02%)</title><rect x="293.3" y="437" width="0.2" height="15.0" fill="rgb(250,207,49)" rx="2" ry="2" />
+<text  x="296.35" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteUePhy&gt;::Acquire (125,424 samples, 0.01%)</title><rect x="516.6" y="421" width="0.1" height="15.0" fill="rgb(232,124,29)" rx="2" ry="2" />
+<text  x="519.65" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::UeMemberLteUePhySapUser::SubframeIndication (16,576,198 samples, 1.71%)</title><rect x="684.3" y="549" width="13.4" height="15.0" fill="rgb(241,167,39)" rx="2" ry="2" />
+<text  x="687.33" y="559.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_Rb_tree_impl&lt;std::less&lt;unsigned short&gt;, true&gt;::_Rb_tree_impl (160,812 samples, 0.02%)</title><rect x="240.5" y="453" width="0.1" height="15.0" fill="rgb(238,152,36)" rx="2" ry="2" />
+<text  x="243.47" y="463.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned char const, ns3::LteUeMac::LcInfo&gt; &gt;::_M_ptr (158,124 samples, 0.02%)</title><rect x="691.5" y="421" width="0.1" height="15.0" fill="rgb(228,105,25)" rx="2" ry="2" />
+<text  x="694.50" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbRrc::DoAllocateTemporaryCellRnti (285,958 samples, 0.03%)</title><rect x="130.4" y="501" width="0.2" height="15.0" fill="rgb(218,60,14)" rx="2" ry="2" />
+<text  x="133.38" y="511.5" ></text>
+</g>
+<g >
+<title>bool std::operator==&lt;ns3::MacCeListElement_s*&gt; (157,395 samples, 0.02%)</title><rect x="129.7" y="405" width="0.2" height="15.0" fill="rgb(236,145,34)" rx="2" ry="2" />
+<text  x="132.74" y="415.5" ></text>
+</g>
+<g >
+<title> (368,315 samples, 0.04%)</title><rect x="656.8" y="501" width="0.3" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="659.83" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;1ul, ns3::Ptr&lt;ns3::SpectrumValue&gt;, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::_Tuple_impl&lt;ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp;, double&amp;, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;&amp;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;&amp;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;&amp;, void&gt; (433,048 samples, 0.04%)</title><rect x="340.4" y="389" width="0.4" height="15.0" fill="rgb(237,151,36)" rx="2" ry="2" />
+<text  x="343.43" y="399.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;is_invocable_r_v&lt;void, ns3::Callback&lt;void, ns3::SpectrumValue const&amp;&gt;::Callback&lt;void  (19,222,845 samples, 1.98%)</title><rect x="468.3" y="453" width="15.5" height="15.0" fill="rgb(222,79,18)" rx="2" ry="2" />
+<text  x="471.32" y="463.5" ></text>
+</g>
+<g >
+<title>double* std::__uninitialized_copy&lt;true&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, double*&gt; (381,898 samples, 0.04%)</title><rect x="654.6" y="437" width="0.3" height="15.0" fill="rgb(238,153,36)" rx="2" ry="2" />
+<text  x="657.62" y="447.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;double&gt;::allocate (168,940 samples, 0.02%)</title><rect x="78.5" y="389" width="0.2" height="15.0" fill="rgb(248,201,48)" rx="2" ry="2" />
+<text  x="81.52" y="399.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::Ptr&lt;ns3::Object&gt;*, ns3::Ptr&lt;ns3::Object&gt; &gt; (209,811 samples, 0.02%)</title><rect x="77.5" y="309" width="0.2" height="15.0" fill="rgb(226,98,23)" rx="2" ry="2" />
+<text  x="80.53" y="319.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt;::_M_create_storage (226,584 samples, 0.02%)</title><rect x="125.6" y="341" width="0.2" height="15.0" fill="rgb(244,180,43)" rx="2" ry="2" />
+<text  x="128.61" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::DlDciLteControlMessage&gt;::Acquire (148,949 samples, 0.02%)</title><rect x="388.4" y="517" width="0.1" height="15.0" fill="rgb(218,63,15)" rx="2" ry="2" />
+<text  x="391.36" y="527.5" ></text>
+</g>
+<g >
+<title>void std::_Function_base::_Base_manager&lt;std::_Bind&lt;void  (635,851 samples, 0.07%)</title><rect x="307.4" y="437" width="0.5" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="310.41" y="447.5" ></text>
+</g>
+<g >
+<title>void std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt;::_M_realloc_insert&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; const&amp;&gt; (290,247 samples, 0.03%)</title><rect x="101.6" y="453" width="0.2" height="15.0" fill="rgb(226,98,23)" rx="2" ry="2" />
+<text  x="104.56" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_S_max_size (200,229 samples, 0.02%)</title><rect x="215.2" y="405" width="0.2" height="15.0" fill="rgb(219,65,15)" rx="2" ry="2" />
+<text  x="218.23" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt;, std::allocator&lt;std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt;::operator* (194,762 samples, 0.02%)</title><rect x="184.1" y="485" width="0.2" height="15.0" fill="rgb(216,54,13)" rx="2" ry="2" />
+<text  x="187.14" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::DlInfoListElement_s (158,074 samples, 0.02%)</title><rect x="206.8" y="389" width="0.1" height="15.0" fill="rgb(231,119,28)" rx="2" ry="2" />
+<text  x="209.81" y="399.5" ></text>
+</g>
+<g >
+<title>std::__detail::_List_node_header::_M_move_nodes (255,202 samples, 0.03%)</title><rect x="290.6" y="373" width="0.2" height="15.0" fill="rgb(241,169,40)" rx="2" ry="2" />
+<text  x="293.62" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt; &gt;::_M_insert_node (177,353 samples, 0.02%)</title><rect x="504.1" y="485" width="0.1" height="15.0" fill="rgb(221,75,17)" rx="2" ry="2" />
+<text  x="507.06" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;::_M_create_storage (390,330 samples, 0.04%)</title><rect x="513.9" y="517" width="0.4" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="516.95" y="527.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt;::_M_range_check (238,739 samples, 0.02%)</title><rect x="208.4" y="469" width="0.2" height="15.0" fill="rgb(230,118,28)" rx="2" ry="2" />
+<text  x="211.45" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_M_allocate (525,645 samples, 0.05%)</title><rect x="407.7" y="437" width="0.4" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="410.65" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::HigherLayerSelected_s* std::__relocate_a&lt;ns3::HigherLayerSelected_s*, ns3::HigherLayerSelected_s*, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt; (1,169,244 samples, 0.12%)</title><rect x="595.3" y="245" width="0.9" height="15.0" fill="rgb(215,50,12)" rx="2" ry="2" />
+<text  x="598.29" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::MakeEvent&lt;void  (1,764,218 samples, 0.18%)</title><rect x="62.9" y="501" width="1.4" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="65.92" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::PfFfMacScheduler::UpdateHarqProcessId (239,156 samples, 0.02%)</title><rect x="182.5" y="485" width="0.2" height="15.0" fill="rgb(222,80,19)" rx="2" ry="2" />
+<text  x="185.50" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, unsigned short, std::_Identity&lt;unsigned short&gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;unsigned short&gt; &gt;::_S_key (358,882 samples, 0.04%)</title><rect x="463.0" y="309" width="0.3" height="15.0" fill="rgb(243,177,42)" rx="2" ry="2" />
+<text  x="466.00" y="319.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt;::~vector (374,665 samples, 0.04%)</title><rect x="255.4" y="357" width="0.3" height="15.0" fill="rgb(234,134,32)" rx="2" ry="2" />
+<text  x="258.39" y="367.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt; &gt;::destroy&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; (4,680,368 samples, 0.48%)</title><rect x="545.3" y="213" width="3.8" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="548.34" y="223.5" ></text>
+</g>
+<g >
+<title>ns3::CeBitmap_e* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;ns3::CeBitmap_e const*, std::vector&lt;ns3::CeBitmap_e, std::allocator&lt;ns3::CeBitmap_e&gt; &gt; &gt;, ns3::CeBitmap_e*, ns3::CeBitmap_e&gt; (492,021 samples, 0.05%)</title><rect x="203.8" y="389" width="0.4" height="15.0" fill="rgb(233,128,30)" rx="2" ry="2" />
+<text  x="206.84" y="399.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::vector (2,627,460 samples, 0.27%)</title><rect x="300.2" y="453" width="2.1" height="15.0" fill="rgb(239,156,37)" rx="2" ry="2" />
+<text  x="303.19" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Node&gt;::operator (199,807 samples, 0.02%)</title><rect x="322.9" y="501" width="0.2" height="15.0" fill="rgb(230,118,28)" rx="2" ry="2" />
+<text  x="325.91" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::CallbackImpl&lt;void, std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt;::operator (28,473,128 samples, 2.94%)</title><rect x="441.0" y="533" width="22.9" height="15.0" fill="rgb(232,124,29)" rx="2" ry="2" />
+<text  x="444.04" y="543.5" >n..</text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteSpectrumSignalParametersDlCtrlFrame&gt;::operator (233,577 samples, 0.02%)</title><rect x="344.0" y="517" width="0.2" height="15.0" fill="rgb(226,97,23)" rx="2" ry="2" />
+<text  x="347.01" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteUeMac::LcInfo&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteUeMac::LcInfo&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteUeMac::LcInfo&gt; &gt; &gt;::find (1,422,685 samples, 0.15%)</title><rect x="690.8" y="485" width="1.2" height="15.0" fill="rgb(216,54,13)" rx="2" ry="2" />
+<text  x="693.84" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultSimulatorImpl::Schedule (273,170 samples, 0.03%)</title><rect x="53.0" y="501" width="0.2" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="56.01" y="511.5" ></text>
+</g>
+<g >
+<title>unsigned short* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;unsigned short const*, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, unsigned short*&gt; (584,765 samples, 0.06%)</title><rect x="217.4" y="437" width="0.5" height="15.0" fill="rgb(212,32,7)" rx="2" ry="2" />
+<text  x="220.44" y="447.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;int&gt; &gt;::allocate (127,251 samples, 0.01%)</title><rect x="573.4" y="325" width="0.1" height="15.0" fill="rgb(248,200,47)" rx="2" ry="2" />
+<text  x="576.38" y="335.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::FfMacSchedSapProvider::SchedUlCqiInfoReqParameters, std::allocator&lt;ns3::FfMacSchedSapProvider::SchedUlCqiInfoReqParameters&gt; &gt;::size (152,504 samples, 0.02%)</title><rect x="264.1" y="517" width="0.1" height="15.0" fill="rgb(223,86,20)" rx="2" ry="2" />
+<text  x="267.06" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::BuildDataListElement_s::~BuildDataListElement_s (871,986 samples, 0.09%)</title><rect x="139.3" y="485" width="0.7" height="15.0" fill="rgb(215,47,11)" rx="2" ry="2" />
+<text  x="142.26" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::DoDispose (1,332,739 samples, 0.14%)</title><rect x="652.6" y="373" width="1.1" height="15.0" fill="rgb(242,172,41)" rx="2" ry="2" />
+<text  x="655.61" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::Object::GetTypeId (626,440 samples, 0.06%)</title><rect x="364.8" y="469" width="0.5" height="15.0" fill="rgb(234,134,32)" rx="2" ry="2" />
+<text  x="367.76" y="479.5" ></text>
+</g>
+<g >
+<title>double* std::__uninitialized_default_n_1&lt;true&gt;::__uninit_default_n&lt;double*, unsigned long&gt; (854,790 samples, 0.09%)</title><rect x="301.2" y="389" width="0.7" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="304.24" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::Seconds (1,997,083 samples, 0.21%)</title><rect x="389.4" y="549" width="1.6" height="15.0" fill="rgb(236,145,34)" rx="2" ry="2" />
+<text  x="392.41" y="559.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;::at (190,464 samples, 0.02%)</title><rect x="23.8" y="357" width="0.1" height="15.0" fill="rgb(233,131,31)" rx="2" ry="2" />
+<text  x="26.75" y="367.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt; &gt;::end (163,346 samples, 0.02%)</title><rect x="242.4" y="453" width="0.1" height="15.0" fill="rgb(249,204,48)" rx="2" ry="2" />
+<text  x="245.36" y="463.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_move_nodes (220,549 samples, 0.02%)</title><rect x="357.3" y="389" width="0.1" height="15.0" fill="rgb(235,141,33)" rx="2" ry="2" />
+<text  x="360.25" y="399.5" ></text>
+</g>
+<g >
+<title>std::operator== (384,996 samples, 0.04%)</title><rect x="370.4" y="517" width="0.3" height="15.0" fill="rgb(229,110,26)" rx="2" ry="2" />
+<text  x="373.42" y="527.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::Callback&lt;void, ns3::SpectrumValue const&amp;&gt;*, std::vector&lt;ns3::Callback&lt;void, ns3::SpectrumValue const&amp;&gt;, std::allocator&lt;ns3::Callback&lt;void, ns3::SpectrumValue const&amp;&gt; &gt; &gt; &gt;::operator* (196,136 samples, 0.02%)</title><rect x="467.2" y="517" width="0.2" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="470.25" y="527.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::CqiListElement_s*&gt; (183,284 samples, 0.02%)</title><rect x="128.1" y="469" width="0.2" height="15.0" fill="rgb(219,67,16)" rx="2" ry="2" />
+<text  x="131.14" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::LteUePhy::GetSubChannelsForTransmission (198,351 samples, 0.02%)</title><rect x="679.1" y="517" width="0.2" height="15.0" fill="rgb(247,195,46)" rx="2" ry="2" />
+<text  x="682.10" y="527.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::~vector (190,332 samples, 0.02%)</title><rect x="674.2" y="453" width="0.1" height="15.0" fill="rgb(225,92,22)" rx="2" ry="2" />
+<text  x="677.16" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::_M_allocate (565,924 samples, 0.06%)</title><rect x="218.6" y="437" width="0.5" height="15.0" fill="rgb(220,70,16)" rx="2" ry="2" />
+<text  x="221.62" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;::_Vector_impl_data::_Vector_impl_data (274,833 samples, 0.03%)</title><rect x="351.0" y="341" width="0.2" height="15.0" fill="rgb(244,180,43)" rx="2" ry="2" />
+<text  x="353.96" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::MemberSchedSapProvider&lt;ns3::PfFfMacScheduler&gt;::SchedDlCqiInfoReq (4,461,995 samples, 0.46%)</title><rect x="134.3" y="517" width="3.6" height="15.0" fill="rgb(224,91,21)" rx="2" ry="2" />
+<text  x="137.31" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::TagBuffer::WriteU32 (368,447 samples, 0.04%)</title><rect x="554.5" y="229" width="0.3" height="15.0" fill="rgb(228,107,25)" rx="2" ry="2" />
+<text  x="557.52" y="239.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt; &gt;::_M_get_node (205,320 samples, 0.02%)</title><rect x="503.1" y="469" width="0.2" height="15.0" fill="rgb(224,87,21)" rx="2" ry="2" />
+<text  x="506.15" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;int const, double&gt; &gt;* std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_M_copy&lt;false, std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_Alloc_node&gt; (254,628 samples, 0.03%)</title><rect x="60.2" y="405" width="0.2" height="15.0" fill="rgb(224,87,21)" rx="2" ry="2" />
+<text  x="63.18" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;int, std::allocator&lt;int&gt; &gt;::_M_create_storage (336,936 samples, 0.03%)</title><rect x="574.4" y="325" width="0.3" height="15.0" fill="rgb(212,35,8)" rx="2" ry="2" />
+<text  x="577.42" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::PacketBurst (3,093,540 samples, 0.32%)</title><rect x="364.4" y="501" width="2.5" height="15.0" fill="rgb(208,15,3)" rx="2" ry="2" />
+<text  x="367.38" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_Vector_base (448,289 samples, 0.05%)</title><rect x="126.3" y="373" width="0.4" height="15.0" fill="rgb(205,2,0)" rx="2" ry="2" />
+<text  x="129.32" y="383.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::deallocate (181,716 samples, 0.02%)</title><rect x="378.3" y="277" width="0.1" height="15.0" fill="rgb(240,161,38)" rx="2" ry="2" />
+<text  x="381.26" y="287.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;double&gt;::allocate (126,483 samples, 0.01%)</title><rect x="606.9" y="405" width="0.1" height="15.0" fill="rgb(221,76,18)" rx="2" ry="2" />
+<text  x="609.92" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::NixVector&gt;::Acquire (185,459 samples, 0.02%)</title><rect x="118.2" y="453" width="0.1" height="15.0" fill="rgb(238,156,37)" rx="2" ry="2" />
+<text  x="121.20" y="463.5" ></text>
+</g>
+<g >
+<title>double* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, double*, double&gt; (1,091,128 samples, 0.11%)</title><rect x="238.1" y="277" width="0.9" height="15.0" fill="rgb(222,79,19)" rx="2" ry="2" />
+<text  x="241.15" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumModel&gt;::Ptr (197,437 samples, 0.02%)</title><rect x="54.6" y="485" width="0.2" height="15.0" fill="rgb(248,200,47)" rx="2" ry="2" />
+<text  x="57.64" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;bool, std::allocator&lt;bool&gt; &gt;::end (200,433 samples, 0.02%)</title><rect x="201.5" y="453" width="0.2" height="15.0" fill="rgb(211,29,7)" rx="2" ry="2" />
+<text  x="204.49" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::DlInfoListElement_s (485,819 samples, 0.05%)</title><rect x="510.0" y="533" width="0.4" height="15.0" fill="rgb(231,119,28)" rx="2" ry="2" />
+<text  x="512.98" y="543.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::~vector (190,389 samples, 0.02%)</title><rect x="461.1" y="261" width="0.1" height="15.0" fill="rgb(243,174,41)" rx="2" ry="2" />
+<text  x="464.10" y="271.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;unsigned int&gt;::deallocate (227,074 samples, 0.02%)</title><rect x="697.2" y="421" width="0.2" height="15.0" fill="rgb(245,186,44)" rx="2" ry="2" />
+<text  x="700.18" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::LogComponent::IsEnabled (145,431 samples, 0.01%)</title><rect x="490.0" y="517" width="0.1" height="15.0" fill="rgb(214,43,10)" rx="2" ry="2" />
+<text  x="492.98" y="527.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::clear (5,452,785 samples, 0.56%)</title><rect x="544.8" y="245" width="4.3" height="15.0" fill="rgb(217,58,13)" rx="2" ry="2" />
+<text  x="547.75" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::Packet::FindFirstMatchingByteTag (3,774,692 samples, 0.39%)</title><rect x="424.4" y="261" width="3.0" height="15.0" fill="rgb(226,98,23)" rx="2" ry="2" />
+<text  x="427.40" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::Time::~Time (269,324 samples, 0.03%)</title><rect x="665.0" y="469" width="0.2" height="15.0" fill="rgb(212,36,8)" rx="2" ry="2" />
+<text  x="667.98" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::PacketMetadata::Create (987,265 samples, 0.10%)</title><rect x="14.6" y="357" width="0.8" height="15.0" fill="rgb(231,122,29)" rx="2" ry="2" />
+<text  x="17.57" y="367.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;ns3::RlcPduListElement_s&gt;::allocate (190,161 samples, 0.02%)</title><rect x="212.9" y="325" width="0.1" height="15.0" fill="rgb(252,219,52)" rx="2" ry="2" />
+<text  x="215.85" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::HarqProcessInfoElement_t* std::__niter_wrap&lt;ns3::HarqProcessInfoElement_t*&gt; (124,684 samples, 0.01%)</title><rect x="525.2" y="245" width="0.1" height="15.0" fill="rgb(221,74,17)" rx="2" ry="2" />
+<text  x="528.24" y="255.5" ></text>
+</g>
+<g >
+<title>double* std::__fill_n_a&lt;double*, unsigned long, double&gt; (248,267 samples, 0.03%)</title><rect x="718.6" y="357" width="0.2" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="721.60" y="367.5" ></text>
+</g>
+<g >
+<title>void std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_M_construct_node&lt;std::pair&lt;int, double&gt; &gt; (224,432 samples, 0.02%)</title><rect x="293.3" y="453" width="0.2" height="15.0" fill="rgb(231,119,28)" rx="2" ry="2" />
+<text  x="296.32" y="463.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, std::vector&lt;double, std::allocator&lt;double&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::map (400,356 samples, 0.04%)</title><rect x="232.5" y="469" width="0.3" height="15.0" fill="rgb(249,204,48)" rx="2" ry="2" />
+<text  x="235.50" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue const&gt;::operator (124,716 samples, 0.01%)</title><rect x="728.6" y="501" width="0.1" height="15.0" fill="rgb(248,200,47)" rx="2" ry="2" />
+<text  x="731.63" y="511.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::list (214,722 samples, 0.02%)</title><rect x="623.7" y="485" width="0.1" height="15.0" fill="rgb(236,145,34)" rx="2" ry="2" />
+<text  x="626.67" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;0ul, ns3::LteEnbPhy*, ns3::Ptr&lt;ns3::PacketBurst&gt; &gt;::~_Tuple_impl (343,746 samples, 0.04%)</title><rect x="281.3" y="469" width="0.3" height="15.0" fill="rgb(218,61,14)" rx="2" ry="2" />
+<text  x="284.32" y="479.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::__uninitialized_fill_n_a&lt;unsigned char*, unsigned long, unsigned char, unsigned char&gt; (189,712 samples, 0.02%)</title><rect x="102.0" y="437" width="0.1" height="15.0" fill="rgb(245,186,44)" rx="2" ry="2" />
+<text  x="104.98" y="447.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt; const*, std::vector&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt; &gt; &gt; &gt;::difference_type __gnu_cxx::operator-&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt; const*, std::vector&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt; &gt; &gt; &gt; (232,766 samples, 0.02%)</title><rect x="289.6" y="517" width="0.1" height="15.0" fill="rgb(222,79,19)" rx="2" ry="2" />
+<text  x="292.56" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_lower_bound (257,394 samples, 0.03%)</title><rect x="616.0" y="437" width="0.2" height="15.0" fill="rgb(229,113,27)" rx="2" ry="2" />
+<text  x="618.96" y="447.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;unsigned char*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; std::copy&lt;__gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;unsigned char*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt; (155,513 samples, 0.02%)</title><rect x="134.6" y="437" width="0.1" height="15.0" fill="rgb(230,115,27)" rx="2" ry="2" />
+<text  x="137.58" y="447.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::push_back (2,004,725 samples, 0.21%)</title><rect x="589.8" y="277" width="1.7" height="15.0" fill="rgb(225,94,22)" rx="2" ry="2" />
+<text  x="592.85" y="287.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_insert&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; const&amp;&gt; (1,464,277 samples, 0.15%)</title><rect x="148.7" y="389" width="1.1" height="15.0" fill="rgb(210,27,6)" rx="2" ry="2" />
+<text  x="151.66" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::operator- (384,216 samples, 0.04%)</title><rect x="311.9" y="485" width="0.3" height="15.0" fill="rgb(231,122,29)" rx="2" ry="2" />
+<text  x="314.86" y="495.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; const*, std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt; &gt;::__normal_iterator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;*, void&gt; (177,392 samples, 0.02%)</title><rect x="619.2" y="533" width="0.2" height="15.0" fill="rgb(207,10,2)" rx="2" ry="2" />
+<text  x="622.24" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::Buffer::Buffer (424,494 samples, 0.04%)</title><rect x="624.2" y="485" width="0.3" height="15.0" fill="rgb(254,226,54)" rx="2" ry="2" />
+<text  x="627.19" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::_M_default_initialize (197,197 samples, 0.02%)</title><rect x="646.6" y="389" width="0.2" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="649.59" y="399.5" ></text>
+</g>
+<g >
+<title>void std::_Function_base::_Base_manager&lt;std::_Bind&lt;void  (494,131 samples, 0.05%)</title><rect x="618.6" y="469" width="0.4" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="621.63" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue const&gt;::~Ptr (896,241 samples, 0.09%)</title><rect x="772.8" y="501" width="0.8" height="15.0" fill="rgb(240,165,39)" rx="2" ry="2" />
+<text  x="775.83" y="511.5" ></text>
+</g>
+<g >
+<title>double* std::__uninitialized_default_n_a&lt;double*, unsigned long, double&gt; (396,416 samples, 0.04%)</title><rect x="57.0" y="437" width="0.3" height="15.0" fill="rgb(248,199,47)" rx="2" ry="2" />
+<text  x="60.01" y="447.5" ></text>
+</g>
+<g >
+<title>std::less&lt;unsigned char&gt;::operator (261,389 samples, 0.03%)</title><rect x="169.1" y="405" width="0.2" height="15.0" fill="rgb(250,210,50)" rx="2" ry="2" />
+<text  x="172.09" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy::StartSubFrame (1,650,854 samples, 0.17%)</title><rect x="15.8" y="565" width="1.3" height="15.0" fill="rgb(234,136,32)" rx="2" ry="2" />
+<text  x="18.79" y="575.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapProvider::ReportBufferStatusParameters&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider::ReportBufferStatusParameters&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider::ReportBufferStatusParameters&gt; &gt; &gt;::_S_left (126,198 samples, 0.01%)</title><rect x="570.7" y="277" width="0.1" height="15.0" fill="rgb(208,15,3)" rx="2" ry="2" />
+<text  x="573.73" y="287.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt;::vector (247,613 samples, 0.03%)</title><rect x="420.8" y="309" width="0.2" height="15.0" fill="rgb(210,23,5)" rx="2" ry="2" />
+<text  x="423.80" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy*&amp; std::__get_helper&lt;0ul, ns3::LteEnbPhy*, ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; (368,229 samples, 0.04%)</title><rect x="752.0" y="581" width="0.2" height="15.0" fill="rgb(237,147,35)" rx="2" ry="2" />
+<text  x="754.95" y="591.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;::push_back (279,441 samples, 0.03%)</title><rect x="296.4" y="533" width="0.3" height="15.0" fill="rgb(251,213,51)" rx="2" ry="2" />
+<text  x="299.44" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::DlDciLteControlMessage&gt;::Acquire (124,599 samples, 0.01%)</title><rect x="534.0" y="325" width="0.1" height="15.0" fill="rgb(218,63,15)" rx="2" ry="2" />
+<text  x="537.04" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::MakeEvent&lt;&gt; (238,924 samples, 0.02%)</title><rect x="36.6" y="725" width="0.2" height="15.0" fill="rgb(205,0,0)" rx="2" ry="2" />
+<text  x="39.64" y="735.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;int const, double&gt; &gt;* std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_M_copy&lt;false, std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_Alloc_node&gt; (1,456,622 samples, 0.15%)</title><rect x="59.2" y="453" width="1.2" height="15.0" fill="rgb(224,87,21)" rx="2" ry="2" />
+<text  x="62.21" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::HarqProcessInfoElement_t* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;ns3::HarqProcessInfoElement_t const*, std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt;, ns3::HarqProcessInfoElement_t*, ns3::HarqProcessInfoElement_t&gt; (1,606,901 samples, 0.17%)</title><rect x="352.7" y="469" width="1.3" height="15.0" fill="rgb(252,220,52)" rx="2" ry="2" />
+<text  x="355.70" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::HarqProcessInfoElement_t* std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;ns3::HarqProcessInfoElement_t const*, std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt;, ns3::HarqProcessInfoElement_t*&gt; (368,668 samples, 0.04%)</title><rect x="525.0" y="261" width="0.3" height="15.0" fill="rgb(210,26,6)" rx="2" ry="2" />
+<text  x="528.04" y="271.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::vector (1,820,097 samples, 0.19%)</title><rect x="686.8" y="469" width="1.4" height="15.0" fill="rgb(206,9,2)" rx="2" ry="2" />
+<text  x="689.78" y="479.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::DlInfoListElement_s::HarqStatus_e*&gt; (305,928 samples, 0.03%)</title><rect x="256.7" y="357" width="0.2" height="15.0" fill="rgb(231,124,29)" rx="2" ry="2" />
+<text  x="259.69" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::End (439,641 samples, 0.05%)</title><rect x="491.8" y="549" width="0.3" height="15.0" fill="rgb(242,174,41)" rx="2" ry="2" />
+<text  x="494.79" y="559.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, unsigned int, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt; &gt;::find (147,114 samples, 0.02%)</title><rect x="94.4" y="469" width="0.1" height="15.0" fill="rgb(239,156,37)" rx="2" ry="2" />
+<text  x="97.40" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt;::size (156,294 samples, 0.02%)</title><rect x="262.6" y="501" width="0.1" height="15.0" fill="rgb(222,82,19)" rx="2" ry="2" />
+<text  x="265.61" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_Auto_node::_M_key (314,000 samples, 0.03%)</title><rect x="332.2" y="453" width="0.3" height="15.0" fill="rgb(238,154,36)" rx="2" ry="2" />
+<text  x="335.23" y="463.5" ></text>
+</g>
+<g >
+<title>void std::_Construct&lt;ns3::UlInfoListElement_s, ns3::UlInfoListElement_s const&amp;&gt; (496,472 samples, 0.05%)</title><rect x="266.5" y="421" width="0.4" height="15.0" fill="rgb(242,172,41)" rx="2" ry="2" />
+<text  x="269.47" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::Multiply (372,175 samples, 0.04%)</title><rect x="493.3" y="533" width="0.3" height="15.0" fill="rgb(215,46,11)" rx="2" ry="2" />
+<text  x="496.27" y="543.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;::_M_get_node (539,388 samples, 0.06%)</title><rect x="287.6" y="453" width="0.5" height="15.0" fill="rgb(242,171,40)" rx="2" ry="2" />
+<text  x="290.65" y="463.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::Buffer::Data**, std::vector&lt;ns3::Buffer::Data*, std::allocator&lt;ns3::Buffer::Data*&gt; &gt; &gt;::operator- (234,189 samples, 0.02%)</title><rect x="31.5" y="325" width="0.2" height="15.0" fill="rgb(251,212,50)" rx="2" ry="2" />
+<text  x="34.55" y="335.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt;::_M_valptr (407,755 samples, 0.04%)</title><rect x="321.5" y="421" width="0.3" height="15.0" fill="rgb(220,69,16)" rx="2" ry="2" />
+<text  x="324.47" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumPhy&gt;::Ptr (158,076 samples, 0.02%)</title><rect x="671.9" y="517" width="0.1" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="674.91" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::Singleton&lt;ns3::IidManager&gt;::Get (156,696 samples, 0.02%)</title><rect x="34.5" y="405" width="0.1" height="15.0" fill="rgb(222,79,19)" rx="2" ry="2" />
+<text  x="37.48" y="415.5" ></text>
+</g>
+<g >
+<title>atan2f32x (411,872 samples, 0.04%)</title><rect x="702.6" y="517" width="0.3" height="15.0" fill="rgb(240,164,39)" rx="2" ry="2" />
+<text  x="705.62" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::EnbMacMemberLteMacSapProvider&lt;ns3::NoOpComponentCarrierManager&gt;::TransmitPdu (886,429 samples, 0.09%)</title><rect x="17.2" y="405" width="0.7" height="15.0" fill="rgb(247,196,47)" rx="2" ry="2" />
+<text  x="20.17" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::SbMeasResult_s::SbMeasResult_s (321,656 samples, 0.03%)</title><rect x="592.5" y="245" width="0.3" height="15.0" fill="rgb(235,141,33)" rx="2" ry="2" />
+<text  x="595.50" y="255.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::vector (1,066,574 samples, 0.11%)</title><rect x="56.7" y="469" width="0.9" height="15.0" fill="rgb(239,156,37)" rx="2" ry="2" />
+<text  x="59.74" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Bind_helper&lt;std::__or_&lt;std::is_integral&lt;std::decay&lt;void  (1,915,952 samples, 0.20%)</title><rect x="708.8" y="469" width="1.5" height="15.0" fill="rgb(237,148,35)" rx="2" ry="2" />
+<text  x="711.79" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;2ul, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::_M_head (241,699 samples, 0.02%)</title><rect x="756.7" y="565" width="0.2" height="15.0" fill="rgb(212,36,8)" rx="2" ry="2" />
+<text  x="759.73" y="575.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::_M_fill_insert (3,063,118 samples, 0.32%)</title><rect x="251.3" y="469" width="2.5" height="15.0" fill="rgb(236,146,34)" rx="2" ry="2" />
+<text  x="254.31" y="479.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;is_invocable_r_v&lt;void, ns3::Callback&lt;void, std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt;::Callback&lt;void  (75,064,377 samples, 7.74%)</title><rect x="516.2" y="485" width="60.4" height="15.0" fill="rgb(235,139,33)" rx="2" ry="2" />
+<text  x="519.22" y="495.5" >std::e..</text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;1ul, unsigned int, unsigned int&gt;::_M_head (151,872 samples, 0.02%)</title><rect x="754.9" y="565" width="0.2" height="15.0" fill="rgb(248,198,47)" rx="2" ry="2" />
+<text  x="757.93" y="575.5" ></text>
+</g>
+<g >
+<title>void std::_Function_base::_Base_manager&lt;std::_Bind&lt;void  (411,266 samples, 0.04%)</title><rect x="87.6" y="437" width="0.4" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="90.62" y="447.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::list&lt;std::_List_const_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;, void&gt; (214,595 samples, 0.02%)</title><rect x="346.5" y="469" width="0.1" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="349.47" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy::QueueUlDci (398,861 samples, 0.04%)</title><rect x="296.4" y="549" width="0.3" height="15.0" fill="rgb(235,142,34)" rx="2" ry="2" />
+<text  x="299.41" y="559.5" ></text>
+</g>
+<g >
+<title>int&amp; std::vector&lt;int, std::allocator&lt;int&gt; &gt;::emplace_back&lt;int&gt; (463,033 samples, 0.05%)</title><rect x="396.5" y="533" width="0.4" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="399.55" y="543.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::vector (234,309 samples, 0.02%)</title><rect x="385.1" y="373" width="0.2" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="388.13" y="383.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;int&gt; &gt;::allocate (152,677 samples, 0.02%)</title><rect x="397.5" y="501" width="0.1" height="15.0" fill="rgb(248,200,47)" rx="2" ry="2" />
+<text  x="400.46" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteSpectrumSignalParametersDataFrame&gt; ns3::Create&lt;ns3::LteSpectrumSignalParametersDataFrame&gt; (1,650,971 samples, 0.17%)</title><rect x="669.3" y="533" width="1.3" height="15.0" fill="rgb(223,86,20)" rx="2" ry="2" />
+<text  x="672.26" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::LteInterference::EndRx (324,769 samples, 0.03%)</title><rect x="611.9" y="549" width="0.3" height="15.0" fill="rgb(208,17,4)" rx="2" ry="2" />
+<text  x="614.94" y="559.5" ></text>
+</g>
+<g >
+<title>double* std::__copy_move&lt;false, true, std::random_access_iterator_tag&gt;::__copy_m&lt;double const, double&gt; (242,020 samples, 0.02%)</title><rect x="412.7" y="373" width="0.2" height="15.0" fill="rgb(208,16,3)" rx="2" ry="2" />
+<text  x="415.73" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::ObjectDeleter::Delete (191,238 samples, 0.02%)</title><rect x="97.0" y="405" width="0.1" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="99.98" y="415.5" ></text>
+</g>
+<g >
+<title>double* std::__copy_move_a2&lt;false, double const*, double*&gt; (326,485 samples, 0.03%)</title><rect x="412.7" y="389" width="0.2" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="415.66" y="399.5" ></text>
+</g>
+<g >
+<title>operator new (249,753 samples, 0.03%)</title><rect x="72.8" y="485" width="0.2" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="75.85" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::Copy (3,250,861 samples, 0.34%)</title><rect x="645.9" y="453" width="2.6" height="15.0" fill="rgb(241,167,40)" rx="2" ry="2" />
+<text  x="648.86" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;int const, double&gt; &gt; std::map&lt;int, double, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::emplace_hint&lt;std::pair&lt;int, double&gt; &gt; (385,367 samples, 0.04%)</title><rect x="110.9" y="501" width="0.3" height="15.0" fill="rgb(232,126,30)" rx="2" ry="2" />
+<text  x="113.86" y="511.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::FfMacSchedSapProvider::SchedUlCqiInfoReqParameters&gt; (745,848 samples, 0.08%)</title><rect x="263.5" y="437" width="0.6" height="15.0" fill="rgb(212,34,8)" rx="2" ry="2" />
+<text  x="266.46" y="447.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, ns3::LteUePhy::UeMeasurementsElement, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::LteUePhy::UeMeasurementsElement&gt; &gt; &gt;::find (162,761 samples, 0.02%)</title><rect x="601.2" y="309" width="0.1" height="15.0" fill="rgb(235,141,33)" rx="2" ry="2" />
+<text  x="604.21" y="319.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt;::_M_deallocate (157,246 samples, 0.02%)</title><rect x="25.0" y="293" width="0.1" height="15.0" fill="rgb(219,66,16)" rx="2" ry="2" />
+<text  x="28.01" y="303.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;::_M_ptr (158,716 samples, 0.02%)</title><rect x="274.4" y="389" width="0.1" height="15.0" fill="rgb(219,66,15)" rx="2" ry="2" />
+<text  x="277.37" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::operator= (248,954 samples, 0.03%)</title><rect x="581.6" y="325" width="0.2" height="15.0" fill="rgb(243,177,42)" rx="2" ry="2" />
+<text  x="584.63" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::~PacketBurst (776,679 samples, 0.08%)</title><rect x="774.8" y="309" width="0.6" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="777.81" y="319.5" ></text>
+</g>
+<g >
+<title>decltype  (564,633 samples, 0.06%)</title><rect x="499.7" y="453" width="0.4" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="502.67" y="463.5" ></text>
+</g>
+<g >
+<title>int* std::copy&lt;__gnu_cxx::__normal_iterator&lt;int const*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt;, int*&gt; (627,364 samples, 0.06%)</title><rect x="573.8" y="293" width="0.5" height="15.0" fill="rgb(215,50,12)" rx="2" ry="2" />
+<text  x="576.81" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::HarqProcessInfoElement_t* std::__copy_move_a2&lt;false, ns3::HarqProcessInfoElement_t const*, ns3::HarqProcessInfoElement_t*&gt; (437,467 samples, 0.05%)</title><rect x="513.1" y="437" width="0.4" height="15.0" fill="rgb(222,82,19)" rx="2" ry="2" />
+<text  x="516.12" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::operator[] (524,698 samples, 0.05%)</title><rect x="678.2" y="501" width="0.4" height="15.0" fill="rgb(248,202,48)" rx="2" ry="2" />
+<text  x="681.19" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::TracedCallback&lt;ns3::Ptr&lt;ns3::PacketBurst const&gt; &gt;::operator (283,255 samples, 0.03%)</title><rect x="613.3" y="549" width="0.3" height="15.0" fill="rgb(231,121,28)" rx="2" ry="2" />
+<text  x="616.35" y="559.5" ></text>
+</g>
+<g >
+<title>ns3::DlDciListElement_s::operator= (501,657 samples, 0.05%)</title><rect x="147.9" y="437" width="0.4" height="15.0" fill="rgb(254,228,54)" rx="2" ry="2" />
+<text  x="150.88" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Vector3D::Vector3D (126,463 samples, 0.01%)</title><rect x="740.2" y="469" width="0.1" height="15.0" fill="rgb(243,178,42)" rx="2" ry="2" />
+<text  x="743.21" y="479.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::Ptr&lt;ns3::Object&gt;*&gt; (158,025 samples, 0.02%)</title><rect x="502.6" y="341" width="0.1" height="15.0" fill="rgb(248,201,48)" rx="2" ry="2" />
+<text  x="505.61" y="351.5" ></text>
+</g>
+<g >
+<title>std::map&lt;ns3::TbId_t, ns3::tbInfo_t, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::find (930,818 samples, 0.10%)</title><rect x="386.5" y="533" width="0.7" height="15.0" fill="rgb(224,87,20)" rx="2" ry="2" />
+<text  x="389.49" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteHarqPhy&gt;::operator (199,830 samples, 0.02%)</title><rect x="492.1" y="549" width="0.2" height="15.0" fill="rgb(228,110,26)" rx="2" ry="2" />
+<text  x="495.14" y="559.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;::_M_ptr (164,453 samples, 0.02%)</title><rect x="222.0" y="405" width="0.1" height="15.0" fill="rgb(238,152,36)" rx="2" ry="2" />
+<text  x="224.96" y="415.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::vector (1,886,775 samples, 0.19%)</title><rect x="573.6" y="357" width="1.5" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="576.55" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter&gt;::~SimpleRefCount (491,149 samples, 0.05%)</title><rect x="378.9" y="309" width="0.4" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="381.93" y="319.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::PacketMetadata::Data*, std::allocator&lt;ns3::PacketMetadata::Data*&gt; &gt;::empty (561,769 samples, 0.06%)</title><rect x="558.3" y="197" width="0.4" height="15.0" fill="rgb(248,202,48)" rx="2" ry="2" />
+<text  x="561.26" y="207.5" ></text>
+</g>
+<g >
+<title>[libc.so.6] (2,105,662 samples, 0.22%)</title><rect x="15.5" y="805" width="1.6" height="15.0" fill="rgb(223,84,20)" rx="2" ry="2" />
+<text  x="18.45" y="815.5" ></text>
+</g>
+<g >
+<title>void  (160,326 samples, 0.02%)</title><rect x="418.9" y="389" width="0.1" height="15.0" fill="rgb(253,221,53)" rx="2" ry="2" />
+<text  x="421.90" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::_M_end (236,415 samples, 0.02%)</title><rect x="189.5" y="453" width="0.2" height="15.0" fill="rgb(215,49,11)" rx="2" ry="2" />
+<text  x="192.51" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;::operator (230,158 samples, 0.02%)</title><rect x="323.8" y="501" width="0.1" height="15.0" fill="rgb(243,179,42)" rx="2" ry="2" />
+<text  x="326.75" y="511.5" ></text>
+</g>
+<g >
+<title> (200,105 samples, 0.02%)</title><rect x="778.3" y="725" width="0.2" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="781.35" y="735.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, unsigned int&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt; &gt;::find (1,368,772 samples, 0.14%)</title><rect x="223.8" y="469" width="1.1" height="15.0" fill="rgb(214,44,10)" rx="2" ry="2" />
+<text  x="226.75" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::vector (1,044,098 samples, 0.11%)</title><rect x="677.3" y="469" width="0.8" height="15.0" fill="rgb(239,156,37)" rx="2" ry="2" />
+<text  x="680.26" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::BuildDataListElement_s* std::__do_uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::BuildDataListElement_s const*, std::vector&lt;ns3::BuildDataListElement_s, std::allocator&lt;ns3::BuildDataListElement_s&gt; &gt; &gt;, ns3::BuildDataListElement_s*&gt; (515,194 samples, 0.05%)</title><rect x="141.9" y="389" width="0.4" height="15.0" fill="rgb(213,38,9)" rx="2" ry="2" />
+<text  x="144.92" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt; &gt;::_S_key (411,593 samples, 0.04%)</title><rect x="241.9" y="437" width="0.3" height="15.0" fill="rgb(219,66,15)" rx="2" ry="2" />
+<text  x="244.91" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s::HarqStatus_e const* std::__niter_base&lt;ns3::DlInfoListElement_s::HarqStatus_e const*, std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt; &gt; (383,145 samples, 0.04%)</title><rect x="259.6" y="293" width="0.3" height="15.0" fill="rgb(205,1,0)" rx="2" ry="2" />
+<text  x="262.60" y="303.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::_Vector_base (204,699 samples, 0.02%)</title><rect x="478.0" y="261" width="0.2" height="15.0" fill="rgb(219,65,15)" rx="2" ry="2" />
+<text  x="481.02" y="271.5" ></text>
+</g>
+<g >
+<title>std::less&lt;unsigned short&gt;::operator (441,975 samples, 0.05%)</title><rect x="434.3" y="277" width="0.4" height="15.0" fill="rgb(207,11,2)" rx="2" ry="2" />
+<text  x="437.30" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumModel const&gt;::Ptr (161,203 samples, 0.02%)</title><rect x="327.0" y="469" width="0.2" height="15.0" fill="rgb(232,125,30)" rx="2" ry="2" />
+<text  x="330.02" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt; &gt;::_M_erase (234,910 samples, 0.02%)</title><rect x="509.5" y="517" width="0.2" height="15.0" fill="rgb(220,70,16)" rx="2" ry="2" />
+<text  x="512.50" y="527.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt; &gt;::construct&lt;ns3::Ptr&lt;ns3::Packet&gt;, ns3::Ptr&lt;ns3::Packet&gt; const&amp;&gt; (274,733 samples, 0.03%)</title><rect x="23.2" y="293" width="0.3" height="15.0" fill="rgb(254,228,54)" rx="2" ry="2" />
+<text  x="26.25" y="303.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::VendorSpecificListElement_s*, std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt; &gt; std::__niter_wrap&lt;__gnu_cxx::__normal_iterator&lt;ns3::VendorSpecificListElement_s*, std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt; &gt;, ns3::VendorSpecificListElement_s*&gt; (150,740 samples, 0.02%)</title><rect x="25.8" y="245" width="0.1" height="15.0" fill="rgb(208,15,3)" rx="2" ry="2" />
+<text  x="28.78" y="255.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt; &gt; &gt;::erase (483,013 samples, 0.05%)</title><rect x="110.4" y="517" width="0.4" height="15.0" fill="rgb(253,223,53)" rx="2" ry="2" />
+<text  x="113.44" y="527.5" ></text>
+</g>
+<g >
+<title>void std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;::_M_realloc_insert&lt;ns3::RlcPduListElement_s const&amp;&gt; (943,698 samples, 0.10%)</title><rect x="209.4" y="469" width="0.8" height="15.0" fill="rgb(219,68,16)" rx="2" ry="2" />
+<text  x="212.41" y="479.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_assign_dispatch&lt;std::_List_const_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; (804,377 samples, 0.08%)</title><rect x="318.7" y="437" width="0.7" height="15.0" fill="rgb(237,148,35)" rx="2" ry="2" />
+<text  x="321.72" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::SpectrumValue, ns3::Empty, ns3::DefaultDeleter&lt;ns3::SpectrumValue&gt; &gt;::Ref (201,883 samples, 0.02%)</title><rect x="751.4" y="533" width="0.2" height="15.0" fill="rgb(212,35,8)" rx="2" ry="2" />
+<text  x="754.40" y="543.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::~list (221,766 samples, 0.02%)</title><rect x="324.3" y="421" width="0.2" height="15.0" fill="rgb(222,80,19)" rx="2" ry="2" />
+<text  x="327.31" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::MakeEvent&lt;void  (8,388,558 samples, 0.87%)</title><rect x="770.5" y="677" width="6.7" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="773.48" y="687.5" ></text>
+</g>
+<g >
+<title>malloc (195,774 samples, 0.02%)</title><rect x="210.9" y="373" width="0.2" height="15.0" fill="rgb(230,119,28)" rx="2" ry="2" />
+<text  x="213.92" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::EventImpl::EventImpl (513,449 samples, 0.05%)</title><rect x="280.8" y="501" width="0.5" height="15.0" fill="rgb(247,195,46)" rx="2" ry="2" />
+<text  x="283.84" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Packet&gt;::Ptr (267,680 samples, 0.03%)</title><rect x="628.1" y="517" width="0.2" height="15.0" fill="rgb(230,117,28)" rx="2" ry="2" />
+<text  x="631.07" y="527.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt; &gt; &gt; &gt; &gt;::end (265,362 samples, 0.03%)</title><rect x="349.0" y="533" width="0.2" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="352.01" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultDeleter&lt;ns3::SpectrumSignalParameters&gt;::Delete (601,254 samples, 0.06%)</title><rect x="324.0" y="469" width="0.5" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="327.00" y="479.5" ></text>
+</g>
+<g >
+<title>std::_List_node&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt;* std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::_M_create_node&lt;ns3::Ptr&lt;ns3::Packet&gt; const&amp;&gt; (1,367,896 samples, 0.14%)</title><rect x="563.3" y="149" width="1.1" height="15.0" fill="rgb(211,30,7)" rx="2" ry="2" />
+<text  x="566.30" y="159.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;bool, std::allocator&lt;bool&gt; &gt;::_M_fill_insert (533,523 samples, 0.06%)</title><rect x="100.2" y="437" width="0.4" height="15.0" fill="rgb(229,112,26)" rx="2" ry="2" />
+<text  x="103.19" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_copy (158,119 samples, 0.02%)</title><rect x="340.6" y="261" width="0.2" height="15.0" fill="rgb(246,192,46)" rx="2" ry="2" />
+<text  x="343.65" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumSignalParameters::SpectrumSignalParameters (821,477 samples, 0.08%)</title><rect x="88.8" y="501" width="0.6" height="15.0" fill="rgb(219,67,16)" rx="2" ry="2" />
+<text  x="91.76" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::AntennaModel&gt; ns3::DynamicCast&lt;ns3::AntennaModel, ns3::Object&gt; (814,268 samples, 0.08%)</title><rect x="741.5" y="549" width="0.7" height="15.0" fill="rgb(243,176,42)" rx="2" ry="2" />
+<text  x="744.53" y="559.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::Packet, ns3::Empty, ns3::DefaultDeleter&lt;ns3::Packet&gt; &gt;::Unref (4,472,125 samples, 0.46%)</title><rect x="545.5" y="165" width="3.6" height="15.0" fill="rgb(215,47,11)" rx="2" ry="2" />
+<text  x="548.51" y="175.5" ></text>
+</g>
+<g >
+<title>ns3::LteInterference*&amp; std::__get_helper&lt;0ul, ns3::LteInterference*, ns3::Ptr&lt;ns3::SpectrumValue const&gt;, unsigned int&gt; (491,189 samples, 0.05%)</title><rect x="752.8" y="581" width="0.4" height="15.0" fill="rgb(254,225,53)" rx="2" ry="2" />
+<text  x="755.81" y="591.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Packet&gt; ns3::Create&lt;ns3::Packet, unsigned int&amp;&gt; (229,600 samples, 0.02%)</title><rect x="15.5" y="373" width="0.2" height="15.0" fill="rgb(253,223,53)" rx="2" ry="2" />
+<text  x="18.49" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_insert_and_rebalance (153,387 samples, 0.02%)</title><rect x="527.8" y="261" width="0.2" height="15.0" fill="rgb(225,94,22)" rx="2" ry="2" />
+<text  x="530.84" y="271.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;4ul, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::~_Tuple_impl (258,906 samples, 0.03%)</title><rect x="666.3" y="373" width="0.2" height="15.0" fill="rgb(249,206,49)" rx="2" ry="2" />
+<text  x="669.30" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt;::_Vector_impl::_Vector_impl (227,726 samples, 0.02%)</title><rect x="125.8" y="341" width="0.2" height="15.0" fill="rgb(217,58,13)" rx="2" ry="2" />
+<text  x="128.80" y="351.5" ></text>
+</g>
+<g >
+<title>decltype  (194,069 samples, 0.02%)</title><rect x="104.6" y="309" width="0.2" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="107.61" y="319.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::at (127,693 samples, 0.01%)</title><rect x="575.9" y="357" width="0.1" height="15.0" fill="rgb(251,215,51)" rx="2" ry="2" />
+<text  x="578.89" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::LteUePhy* ns3::PeekPointer&lt;ns3::LteUePhy&gt; (477,176 samples, 0.05%)</title><rect x="579.0" y="389" width="0.4" height="15.0" fill="rgb(247,196,46)" rx="2" ry="2" />
+<text  x="582.01" y="399.5" ></text>
+</g>
+<g >
+<title>decltype  (323,441 samples, 0.03%)</title><rect x="596.3" y="245" width="0.3" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="599.30" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::Packet&gt;::operator (367,419 samples, 0.04%)</title><rect x="492.8" y="549" width="0.3" height="15.0" fill="rgb(224,88,21)" rx="2" ry="2" />
+<text  x="495.78" y="559.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt;::construct&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, ns3::Ptr&lt;ns3::LteControlMessage&gt; const&amp;&gt; (266,180 samples, 0.03%)</title><rect x="319.1" y="325" width="0.2" height="15.0" fill="rgb(231,120,28)" rx="2" ry="2" />
+<text  x="322.05" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::Add (367,754 samples, 0.04%)</title><rect x="410.2" y="517" width="0.3" height="15.0" fill="rgb(234,136,32)" rx="2" ry="2" />
+<text  x="413.16" y="527.5" ></text>
+</g>
+<g >
+<title>[ld-linux-x86-64.so.2] (147,352 samples, 0.02%)</title><rect x="10.1" y="741" width="0.1" height="15.0" fill="rgb(243,178,42)" rx="2" ry="2" />
+<text  x="13.10" y="751.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;std::is_constructible&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt;::value, std::pair&lt;std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, bool&gt; &gt;::type std::map&lt;ns3::Scheduler::EventKey, ns3::EventImpl*, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::insert&lt;std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (4,750,006 samples, 0.49%)</title><rect x="660.7" y="453" width="3.8" height="15.0" fill="rgb(211,29,7)" rx="2" ry="2" />
+<text  x="663.71" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::tbInfo_t::~tbInfo_t (865,871 samples, 0.09%)</title><rect x="505.6" y="421" width="0.7" height="15.0" fill="rgb(210,26,6)" rx="2" ry="2" />
+<text  x="508.58" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteUeMac::LcInfo&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteUeMac::LcInfo&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteUeMac::LcInfo&gt; &gt; &gt;::end (200,190 samples, 0.02%)</title><rect x="571.6" y="309" width="0.1" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="574.58" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumChannel&gt;::operator (153,603 samples, 0.02%)</title><rect x="671.1" y="533" width="0.1" height="15.0" fill="rgb(250,207,49)" rx="2" ry="2" />
+<text  x="674.08" y="543.5" ></text>
+</g>
+<g >
+<title>bool __gnu_cxx::operator==&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; (361,717 samples, 0.04%)</title><rect x="416.0" y="517" width="0.3" height="15.0" fill="rgb(205,3,0)" rx="2" ry="2" />
+<text  x="419.03" y="527.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Ptr&lt;ns3::Object&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Object&gt; &gt; &gt;::~vector (893,699 samples, 0.09%)</title><rect x="549.7" y="213" width="0.7" height="15.0" fill="rgb(223,83,19)" rx="2" ry="2" />
+<text  x="552.70" y="223.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::FfMacSchedSapProvider::SchedUlCqiInfoReqParameters, std::allocator&lt;ns3::FfMacSchedSapProvider::SchedUlCqiInfoReqParameters&gt; &gt;::at (476,232 samples, 0.05%)</title><rect x="262.7" y="517" width="0.4" height="15.0" fill="rgb(209,20,4)" rx="2" ry="2" />
+<text  x="265.73" y="527.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::end (165,055 samples, 0.02%)</title><rect x="493.4" y="517" width="0.2" height="15.0" fill="rgb(237,147,35)" rx="2" ry="2" />
+<text  x="496.44" y="527.5" ></text>
+</g>
+<g >
+<title>malloc (165,510 samples, 0.02%)</title><rect x="562.3" y="149" width="0.1" height="15.0" fill="rgb(230,119,28)" rx="2" ry="2" />
+<text  x="565.26" y="159.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt;::operator (167,770 samples, 0.02%)</title><rect x="565.2" y="229" width="0.2" height="15.0" fill="rgb(249,206,49)" rx="2" ry="2" />
+<text  x="568.23" y="239.5" ></text>
+</g>
+<g >
+<title>std::_List_const_iterator&lt;ns3::Callback&lt;void, unsigned short, unsigned char, unsigned int&gt; &gt;::_List_const_iterator (127,995 samples, 0.01%)</title><rect x="567.2" y="229" width="0.1" height="15.0" fill="rgb(237,151,36)" rx="2" ry="2" />
+<text  x="570.15" y="239.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;::pair&lt;unsigned int const&amp;, ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp;&gt; (151,208 samples, 0.02%)</title><rect x="658.9" y="389" width="0.2" height="15.0" fill="rgb(213,40,9)" rx="2" ry="2" />
+<text  x="661.95" y="399.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;unsigned char*&gt; (237,950 samples, 0.02%)</title><rect x="686.4" y="421" width="0.1" height="15.0" fill="rgb(230,116,27)" rx="2" ry="2" />
+<text  x="689.35" y="431.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_move_nodes (452,596 samples, 0.05%)</title><rect x="621.9" y="389" width="0.3" height="15.0" fill="rgb(235,141,33)" rx="2" ry="2" />
+<text  x="624.86" y="399.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::operator= (528,635 samples, 0.05%)</title><rect x="140.3" y="469" width="0.4" height="15.0" fill="rgb(224,91,21)" rx="2" ry="2" />
+<text  x="143.28" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::MemberSchedSapProvider&lt;ns3::PfFfMacScheduler&gt;::SchedDlTriggerReq (415,834 samples, 0.04%)</title><rect x="15.5" y="501" width="0.3" height="15.0" fill="rgb(247,193,46)" rx="2" ry="2" />
+<text  x="18.45" y="511.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;signed char, std::allocator&lt;signed char&gt; &gt;::at (282,384 samples, 0.03%)</title><rect x="532.0" y="341" width="0.3" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="535.05" y="351.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;::_M_clear (1,220,101 samples, 0.13%)</title><rect x="392.8" y="517" width="1.0" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="395.84" y="527.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;unsigned char&gt; &gt;::allocate (157,055 samples, 0.02%)</title><rect x="214.0" y="437" width="0.2" height="15.0" fill="rgb(243,177,42)" rx="2" ry="2" />
+<text  x="217.05" y="447.5" ></text>
+</g>
+<g >
+<title>void std::destroy_at&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt; &gt; (234,294 samples, 0.02%)</title><rect x="291.8" y="485" width="0.2" height="15.0" fill="rgb(240,164,39)" rx="2" ry="2" />
+<text  x="294.83" y="495.5" ></text>
+</g>
+<g >
+<title>void std::__invoke_impl&lt;void, ns3::Callback&lt;void, std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt;::Callback&lt;void  (74,776,631 samples, 7.71%)</title><rect x="516.5" y="469" width="60.1" height="15.0" fill="rgb(208,15,3)" rx="2" ry="2" />
+<text  x="519.45" y="479.5" >void s..</text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt;::_M_ptr (229,970 samples, 0.02%)</title><rect x="451.4" y="181" width="0.2" height="15.0" fill="rgb(215,48,11)" rx="2" ry="2" />
+<text  x="454.39" y="191.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;bool, std::allocator&lt;bool&gt; &gt;::operator= (188,428 samples, 0.02%)</title><rect x="246.7" y="485" width="0.1" height="15.0" fill="rgb(217,57,13)" rx="2" ry="2" />
+<text  x="249.68" y="495.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_insert&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; const&amp;&gt; (271,484 samples, 0.03%)</title><rect x="96.0" y="373" width="0.2" height="15.0" fill="rgb(210,27,6)" rx="2" ry="2" />
+<text  x="98.95" y="383.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::RachListElement_s, std::allocator&lt;ns3::RachListElement_s&gt; &gt;::clear (195,412 samples, 0.02%)</title><rect x="208.8" y="485" width="0.1" height="15.0" fill="rgb(236,146,34)" rx="2" ry="2" />
+<text  x="211.78" y="495.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; (474,207 samples, 0.05%)</title><rect x="730.6" y="437" width="0.4" height="15.0" fill="rgb(212,35,8)" rx="2" ry="2" />
+<text  x="733.60" y="447.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt;::~vector (456,474 samples, 0.05%)</title><rect x="139.6" y="469" width="0.4" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="142.60" y="479.5" ></text>
+</g>
+<g >
+<title>std::__detail::_List_node_header::_List_node_header (190,276 samples, 0.02%)</title><rect x="110.1" y="469" width="0.1" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="113.06" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, unsigned int&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, unsigned int&gt; &gt; &gt;::find (201,734 samples, 0.02%)</title><rect x="234.3" y="453" width="0.2" height="15.0" fill="rgb(214,44,10)" rx="2" ry="2" />
+<text  x="237.34" y="463.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, std::vector&lt;ns3::UlDciListElement_s, std::allocator&lt;ns3::UlDciListElement_s&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;ns3::UlDciListElement_s, std::allocator&lt;ns3::UlDciListElement_s&gt; &gt; &gt; &gt; &gt;::find (1,193,975 samples, 0.12%)</title><rect x="240.6" y="485" width="1.0" height="15.0" fill="rgb(251,215,51)" rx="2" ry="2" />
+<text  x="243.60" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;0ul, ns3::MultiModelSpectrumChannel*, ns3::Ptr&lt;ns3::SpectrumValue&gt;, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::~_Tuple_impl (361,973 samples, 0.04%)</title><rect x="666.2" y="437" width="0.3" height="15.0" fill="rgb(215,47,11)" rx="2" ry="2" />
+<text  x="669.22" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::MemberLteFfrSapProvider&lt;ns3::LteFrNoOpAlgorithm&gt;::GetAvailableUlRbg (157,176 samples, 0.02%)</title><rect x="176.2" y="485" width="0.1" height="15.0" fill="rgb(207,10,2)" rx="2" ry="2" />
+<text  x="179.22" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_S_relocate (197,721 samples, 0.02%)</title><rect x="215.5" y="437" width="0.2" height="15.0" fill="rgb(228,110,26)" rx="2" ry="2" />
+<text  x="218.54" y="447.5" ></text>
+</g>
+<g >
+<title>[libm.so.6] (198,109 samples, 0.02%)</title><rect x="226.9" y="485" width="0.2" height="15.0" fill="rgb(208,16,4)" rx="2" ry="2" />
+<text  x="229.94" y="495.5" ></text>
+</g>
+<g >
+<title>[libc.so.6] (276,224 samples, 0.03%)</title><rect x="153.6" y="341" width="0.2" height="15.0" fill="rgb(223,84,20)" rx="2" ry="2" />
+<text  x="156.58" y="351.5" ></text>
+</g>
+<g >
+<title>std::less&lt;unsigned short&gt;::operator (274,669 samples, 0.03%)</title><rect x="224.6" y="437" width="0.2" height="15.0" fill="rgb(207,11,2)" rx="2" ry="2" />
+<text  x="227.60" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::MacCeValue_u::~MacCeValue_u (162,616 samples, 0.02%)</title><rect x="457.7" y="245" width="0.2" height="15.0" fill="rgb(205,0,0)" rx="2" ry="2" />
+<text  x="460.72" y="255.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::_Auto_node::_Auto_node&lt;std::piecewise_construct_t const&amp;, std::tuple&lt;unsigned short const&amp;&gt;, std::tuple&lt;&gt; &gt; (993,807 samples, 0.10%)</title><rect x="242.6" y="453" width="0.8" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="245.62" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumPhy&gt;::operator bool (176,535 samples, 0.02%)</title><rect x="74.7" y="517" width="0.2" height="15.0" fill="rgb(210,27,6)" rx="2" ry="2" />
+<text  x="77.71" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::RxSpectrumModelInfo&gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::RxSpectrumModelInfo&gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::RxSpectrumModelInfo&gt; &gt; &gt;::begin (243,486 samples, 0.03%)</title><rect x="80.7" y="501" width="0.2" height="15.0" fill="rgb(226,97,23)" rx="2" ry="2" />
+<text  x="83.70" y="511.5" ></text>
+</g>
+<g >
+<title>std::function&lt;void  (796,462 samples, 0.08%)</title><rect x="618.4" y="501" width="0.6" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="621.39" y="511.5" ></text>
+</g>
+<g >
+<title>int* std::__relocate_a&lt;int*, int*, std::allocator&lt;int&gt; &gt; (192,628 samples, 0.02%)</title><rect x="398.4" y="501" width="0.2" height="15.0" fill="rgb(252,220,52)" rx="2" ry="2" />
+<text  x="401.44" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Bvector_base&lt;std::allocator&lt;bool&gt; &gt;::_Bvector_impl_data::_Bvector_impl_data (154,936 samples, 0.02%)</title><rect x="195.9" y="437" width="0.1" height="15.0" fill="rgb(214,45,10)" rx="2" ry="2" />
+<text  x="198.89" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::PacketBurst::~PacketBurst (815,660 samples, 0.08%)</title><rect x="774.8" y="325" width="0.7" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="777.81" y="335.5" ></text>
+</g>
+<g >
+<title>std::function&lt;void  (22,443,594 samples, 2.31%)</title><rect x="17.2" y="725" width="18.0" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="20.17" y="735.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; const*, std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt; &gt;::difference_type __gnu_cxx::operator-&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; const*, std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt; &gt; (150,492 samples, 0.02%)</title><rect x="621.2" y="517" width="0.1" height="15.0" fill="rgb(252,220,52)" rx="2" ry="2" />
+<text  x="624.23" y="527.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt;::vector (1,764,689 samples, 0.18%)</title><rect x="444.0" y="325" width="1.5" height="15.0" fill="rgb(210,23,5)" rx="2" ry="2" />
+<text  x="447.04" y="335.5" ></text>
+</g>
+<g >
+<title>void std::destroy_at&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; (2,842,730 samples, 0.29%)</title><rect x="451.6" y="181" width="2.3" height="15.0" fill="rgb(224,88,21)" rx="2" ry="2" />
+<text  x="454.61" y="191.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue&gt; ns3::Copy&lt;ns3::SpectrumValue&gt; (1,504,235 samples, 0.16%)</title><rect x="324.7" y="501" width="1.2" height="15.0" fill="rgb(223,83,19)" rx="2" ry="2" />
+<text  x="327.70" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::TracedCallback&lt;unsigned short, unsigned short, double, double, unsigned char&gt;::operator (698,650 samples, 0.07%)</title><rect x="600.5" y="309" width="0.5" height="15.0" fill="rgb(212,35,8)" rx="2" ry="2" />
+<text  x="603.48" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;::Acquire (357,119 samples, 0.04%)</title><rect x="750.8" y="549" width="0.3" height="15.0" fill="rgb(240,163,38)" rx="2" ry="2" />
+<text  x="753.79" y="559.5" ></text>
+</g>
+<g >
+<title>std::this_thread::get_id (258,683 samples, 0.03%)</title><rect x="339.7" y="453" width="0.3" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="342.75" y="463.5" ></text>
+</g>
+<g >
+<title>std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;* std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_create_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; const&amp;&gt; (441,158 samples, 0.05%)</title><rect x="733.3" y="405" width="0.4" height="15.0" fill="rgb(230,116,27)" rx="2" ry="2" />
+<text  x="736.30" y="415.5" ></text>
+</g>
+<g >
+<title>unsigned int const&amp; std::max&lt;unsigned int&gt; (164,916 samples, 0.02%)</title><rect x="76.3" y="197" width="0.2" height="15.0" fill="rgb(249,206,49)" rx="2" ry="2" />
+<text  x="79.34" y="207.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_drop_node (2,330,463 samples, 0.24%)</title><rect x="763.2" y="661" width="1.8" height="15.0" fill="rgb(215,48,11)" rx="2" ry="2" />
+<text  x="766.17" y="671.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_Auto_node::_M_insert (278,782 samples, 0.03%)</title><rect x="706.8" y="405" width="0.2" height="15.0" fill="rgb(213,38,9)" rx="2" ry="2" />
+<text  x="709.77" y="415.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::vector&lt;int, std::allocator&lt;int&gt; &gt;, std::allocator&lt;std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt; &gt;::operator[] (205,431 samples, 0.02%)</title><rect x="530.9" y="325" width="0.2" height="15.0" fill="rgb(215,46,11)" rx="2" ry="2" />
+<text  x="533.93" y="335.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt;::end (204,400 samples, 0.02%)</title><rect x="584.3" y="245" width="0.1" height="15.0" fill="rgb(246,189,45)" rx="2" ry="2" />
+<text  x="587.26" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::UlInfoListElement_s* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;ns3::UlInfoListElement_s const*, std::vector&lt;ns3::UlInfoListElement_s, std::allocator&lt;ns3::UlInfoListElement_s&gt; &gt; &gt;, ns3::UlInfoListElement_s*, ns3::UlInfoListElement_s&gt; (872,914 samples, 0.09%)</title><rect x="266.2" y="485" width="0.7" height="15.0" fill="rgb(229,111,26)" rx="2" ry="2" />
+<text  x="269.17" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt; &gt;::_S_left (226,586 samples, 0.02%)</title><rect x="322.1" y="437" width="0.2" height="15.0" fill="rgb(205,1,0)" rx="2" ry="2" />
+<text  x="325.08" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Angles::Angles (1,751,854 samples, 0.18%)</title><rect x="702.2" y="549" width="1.4" height="15.0" fill="rgb(254,226,54)" rx="2" ry="2" />
+<text  x="705.18" y="559.5" ></text>
+</g>
+<g >
+<title>ns3::EnbMacMemberLteMacSapProvider&lt;ns3::NoOpComponentCarrierManager&gt;::TransmitPdu (549,181 samples, 0.06%)</title><rect x="15.9" y="389" width="0.4" height="15.0" fill="rgb(247,196,47)" rx="2" ry="2" />
+<text  x="18.88" y="399.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::~_List_base (221,766 samples, 0.02%)</title><rect x="324.3" y="405" width="0.2" height="15.0" fill="rgb(221,74,17)" rx="2" ry="2" />
+<text  x="327.31" y="415.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;unsigned char*&gt; (220,248 samples, 0.02%)</title><rect x="255.2" y="309" width="0.2" height="15.0" fill="rgb(230,116,27)" rx="2" ry="2" />
+<text  x="258.22" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::UeSelected_s::~UeSelected_s (190,389 samples, 0.02%)</title><rect x="461.1" y="277" width="0.1" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="464.10" y="287.5" ></text>
+</g>
+<g >
+<title>int* std::copy&lt;int*, int*&gt; (195,561 samples, 0.02%)</title><rect x="304.3" y="501" width="0.1" height="15.0" fill="rgb(249,206,49)" rx="2" ry="2" />
+<text  x="307.29" y="511.5" ></text>
+</g>
+<g >
+<title>double* std::__copy_move_a1&lt;false, double const*, double*&gt; (447,358 samples, 0.05%)</title><rect x="647.6" y="373" width="0.3" height="15.0" fill="rgb(239,156,37)" rx="2" ry="2" />
+<text  x="650.56" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::LteUePhy::ReportDataInterference (740,140 samples, 0.08%)</title><rect x="483.1" y="341" width="0.6" height="15.0" fill="rgb(243,178,42)" rx="2" ry="2" />
+<text  x="486.06" y="351.5" ></text>
+</g>
+<g >
+<title>std::_Bit_iterator std::__copy_move_a&lt;false, std::_Bit_const_iterator, std::_Bit_iterator&gt; (454,947 samples, 0.05%)</title><rect x="199.2" y="405" width="0.4" height="15.0" fill="rgb(224,87,20)" rx="2" ry="2" />
+<text  x="202.24" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::DlCqiLteControlMessage::~DlCqiLteControlMessage (159,078 samples, 0.02%)</title><rect x="497.5" y="421" width="0.1" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="500.46" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::Packet::Packet (5,056,417 samples, 0.52%)</title><rect x="555.6" y="245" width="4.1" height="15.0" fill="rgb(230,115,27)" rx="2" ry="2" />
+<text  x="558.60" y="255.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;::at (156,958 samples, 0.02%)</title><rect x="173.4" y="453" width="0.2" height="15.0" fill="rgb(227,105,25)" rx="2" ry="2" />
+<text  x="176.43" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Now (627,315 samples, 0.06%)</title><rect x="408.3" y="533" width="0.5" height="15.0" fill="rgb(241,168,40)" rx="2" ry="2" />
+<text  x="411.34" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;::_Rb_tree_iterator (125,563 samples, 0.01%)</title><rect x="86.3" y="437" width="0.1" height="15.0" fill="rgb(223,85,20)" rx="2" ry="2" />
+<text  x="89.31" y="447.5" ></text>
+</g>
+<g >
+<title>operator new (277,002 samples, 0.03%)</title><rect x="649.1" y="485" width="0.2" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="652.06" y="495.5" ></text>
+</g>
+<g >
+<title>unsigned short&amp; std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::emplace_back&lt;unsigned short&gt; (2,449,232 samples, 0.25%)</title><rect x="218.0" y="469" width="2.0" height="15.0" fill="rgb(214,44,10)" rx="2" ry="2" />
+<text  x="221.00" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Ptr&lt;ns3::Object&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Object&gt; &gt; &gt;::~vector (234,790 samples, 0.02%)</title><rect x="775.0" y="277" width="0.1" height="15.0" fill="rgb(223,83,19)" rx="2" ry="2" />
+<text  x="777.96" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::PacketTagList::~PacketTagList (155,483 samples, 0.02%)</title><rect x="774.6" y="181" width="0.1" height="15.0" fill="rgb(223,87,20)" rx="2" ry="2" />
+<text  x="777.56" y="191.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::_M_get_node (475,198 samples, 0.05%)</title><rect x="626.5" y="453" width="0.3" height="15.0" fill="rgb(212,36,8)" rx="2" ry="2" />
+<text  x="629.46" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt;::_M_range_check (156,928 samples, 0.02%)</title><rect x="510.8" y="533" width="0.1" height="15.0" fill="rgb(242,173,41)" rx="2" ry="2" />
+<text  x="513.78" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::Add (1,307,991 samples, 0.13%)</title><rect x="713.9" y="485" width="1.0" height="15.0" fill="rgb(234,136,32)" rx="2" ry="2" />
+<text  x="716.88" y="495.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;::__normal_iterator (160,055 samples, 0.02%)</title><rect x="416.8" y="501" width="0.1" height="15.0" fill="rgb(215,50,12)" rx="2" ry="2" />
+<text  x="419.79" y="511.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::begin (339,771 samples, 0.04%)</title><rect x="317.6" y="389" width="0.3" height="15.0" fill="rgb(206,6,1)" rx="2" ry="2" />
+<text  x="320.63" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;2ul, unsigned int&gt;::_M_head (356,195 samples, 0.04%)</title><rect x="756.0" y="565" width="0.3" height="15.0" fill="rgb(239,158,37)" rx="2" ry="2" />
+<text  x="758.98" y="575.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteControlMessage&gt;&amp; std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::emplace_back&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; const&amp;&gt; (154,939 samples, 0.02%)</title><rect x="464.2" y="501" width="0.1" height="15.0" fill="rgb(224,89,21)" rx="2" ry="2" />
+<text  x="467.16" y="511.5" ></text>
+</g>
+<g >
+<title> (356,060 samples, 0.04%)</title><rect x="75.0" y="501" width="0.3" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="78.03" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_M_allocate (158,373 samples, 0.02%)</title><rect x="203.4" y="341" width="0.1" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
+<text  x="206.35" y="351.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt;::at (386,249 samples, 0.04%)</title><rect x="205.7" y="485" width="0.3" height="15.0" fill="rgb(208,17,4)" rx="2" ry="2" />
+<text  x="208.73" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumModel const&gt;::Ptr&lt;ns3::SpectrumModel&gt; (168,069 samples, 0.02%)</title><rect x="56.1" y="485" width="0.2" height="15.0" fill="rgb(254,225,53)" rx="2" ry="2" />
+<text  x="59.14" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node_base::_S_minimum (352,600 samples, 0.04%)</title><rect x="237.1" y="405" width="0.3" height="15.0" fill="rgb(238,153,36)" rx="2" ry="2" />
+<text  x="240.07" y="415.5" ></text>
+</g>
+<g >
+<title>double* std::__copy_move_a1&lt;false, double const*, double*&gt; (238,145 samples, 0.02%)</title><rect x="325.0" y="373" width="0.2" height="15.0" fill="rgb(239,156,37)" rx="2" ry="2" />
+<text  x="328.04" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_Rb_tree (326,142 samples, 0.03%)</title><rect x="88.2" y="485" width="0.2" height="15.0" fill="rgb(252,219,52)" rx="2" ry="2" />
+<text  x="91.19" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_erase_aux (5,384,995 samples, 0.56%)</title><rect x="762.5" y="677" width="4.4" height="15.0" fill="rgb(246,189,45)" rx="2" ry="2" />
+<text  x="765.53" y="687.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::NodeListPriv&gt;::operator= (238,924 samples, 0.02%)</title><rect x="36.6" y="613" width="0.2" height="15.0" fill="rgb(231,121,29)" rx="2" ry="2" />
+<text  x="39.64" y="623.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt;::vector (237,492 samples, 0.02%)</title><rect x="24.6" y="325" width="0.2" height="15.0" fill="rgb(218,61,14)" rx="2" ry="2" />
+<text  x="27.56" y="335.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::TbId_t, std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::_Select1st&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::_M_lower_bound (314,909 samples, 0.03%)</title><rect x="529.6" y="309" width="0.2" height="15.0" fill="rgb(236,144,34)" rx="2" ry="2" />
+<text  x="532.58" y="319.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, double&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, double&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, double&gt; &gt; &gt;::_M_begin (263,024 samples, 0.03%)</title><rect x="294.6" y="501" width="0.2" height="15.0" fill="rgb(208,15,3)" rx="2" ry="2" />
+<text  x="297.63" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultSimulatorImpl::Schedule (1,350,821 samples, 0.14%)</title><rect x="304.9" y="485" width="1.1" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="307.95" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::CqiListElement_s, std::allocator&lt;ns3::CqiListElement_s&gt; &gt;::end (162,948 samples, 0.02%)</title><rect x="254.7" y="517" width="0.2" height="15.0" fill="rgb(233,131,31)" rx="2" ry="2" />
+<text  x="257.75" y="527.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt; &gt;::destroy&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; (266,588 samples, 0.03%)</title><rect x="193.3" y="405" width="0.3" height="15.0" fill="rgb(249,202,48)" rx="2" ry="2" />
+<text  x="196.34" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, unsigned short, std::_Identity&lt;unsigned short&gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;unsigned short&gt; &gt;::find (148,308 samples, 0.02%)</title><rect x="121.8" y="517" width="0.1" height="15.0" fill="rgb(238,154,36)" rx="2" ry="2" />
+<text  x="124.79" y="527.5" ></text>
+</g>
+<g >
+<title>std::_List_node&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt;::_M_valptr (431,355 samples, 0.04%)</title><rect x="22.4" y="293" width="0.4" height="15.0" fill="rgb(215,46,11)" rx="2" ry="2" />
+<text  x="25.41" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::MobilityModel&gt;::Ptr (284,534 samples, 0.03%)</title><rect x="67.0" y="501" width="0.3" height="15.0" fill="rgb(213,37,8)" rx="2" ry="2" />
+<text  x="70.04" y="511.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::end (161,021 samples, 0.02%)</title><rect x="454.7" y="213" width="0.1" height="15.0" fill="rgb(211,29,6)" rx="2" ry="2" />
+<text  x="457.70" y="223.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;unsigned int&gt; &gt;::deallocate (227,074 samples, 0.02%)</title><rect x="697.2" y="453" width="0.2" height="15.0" fill="rgb(231,121,29)" rx="2" ry="2" />
+<text  x="700.18" y="463.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_M_allocate_and_copy&lt;__gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt; (698,551 samples, 0.07%)</title><rect x="214.0" y="469" width="0.6" height="15.0" fill="rgb(236,143,34)" rx="2" ry="2" />
+<text  x="217.05" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;2ul, double, ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::_Tuple_impl (326,828 samples, 0.03%)</title><rect x="87.7" y="357" width="0.3" height="15.0" fill="rgb(231,121,29)" rx="2" ry="2" />
+<text  x="90.69" y="367.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_drop_node (197,031 samples, 0.02%)</title><rect x="776.6" y="389" width="0.2" height="15.0" fill="rgb(245,188,45)" rx="2" ry="2" />
+<text  x="779.63" y="399.5" ></text>
+</g>
+<g >
+<title>void std::_Function_base::_Base_manager&lt;std::_Bind&lt;void  (489,748 samples, 0.05%)</title><rect x="639.6" y="453" width="0.4" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="642.61" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Packet::AddByteTag (307,844 samples, 0.03%)</title><rect x="18.7" y="405" width="0.3" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="21.70" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::SpectrumSignalParameters, ns3::Empty, ns3::DefaultDeleter&lt;ns3::SpectrumSignalParameters&gt; &gt;::Unref (155,066 samples, 0.02%)</title><rect x="670.6" y="517" width="0.1" height="15.0" fill="rgb(254,229,54)" rx="2" ry="2" />
+<text  x="673.62" y="527.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;std::_Rb_tree_iterator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, bool&gt; std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::emplace&lt;unsigned int const&amp;, ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp;&gt; (157,520 samples, 0.02%)</title><rect x="115.8" y="485" width="0.1" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="118.82" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::SbMeasResult_s&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::SbMeasResult_s&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::SbMeasResult_s&gt; &gt; &gt;::find (452,741 samples, 0.05%)</title><rect x="135.5" y="469" width="0.3" height="15.0" fill="rgb(219,65,15)" rx="2" ry="2" />
+<text  x="138.48" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue&gt; ns3::Copy&lt;ns3::SpectrumValue&gt; (759,296 samples, 0.08%)</title><rect x="78.2" y="517" width="0.6" height="15.0" fill="rgb(223,83,19)" rx="2" ry="2" />
+<text  x="81.15" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt;::_Vector_base (571,217 samples, 0.06%)</title><rect x="144.4" y="437" width="0.4" height="15.0" fill="rgb(216,55,13)" rx="2" ry="2" />
+<text  x="147.38" y="447.5" ></text>
+</g>
+<g >
+<title>std::_List_const_iterator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt;::operator* (243,270 samples, 0.03%)</title><rect x="70.2" y="453" width="0.2" height="15.0" fill="rgb(212,34,8)" rx="2" ry="2" />
+<text  x="73.18" y="463.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;int*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt; std::copy&lt;__gnu_cxx::__normal_iterator&lt;int const*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;int*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt; &gt; (248,988 samples, 0.03%)</title><rect x="61.7" y="517" width="0.2" height="15.0" fill="rgb(223,85,20)" rx="2" ry="2" />
+<text  x="64.70" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;int, std::allocator&lt;int&gt; &gt;::_Vector_base (330,983 samples, 0.03%)</title><rect x="527.3" y="165" width="0.3" height="15.0" fill="rgb(215,47,11)" rx="2" ry="2" />
+<text  x="530.34" y="175.5" ></text>
+</g>
+<g >
+<title>ns3::EventImpl::Invoke (238,924 samples, 0.02%)</title><rect x="36.6" y="741" width="0.2" height="15.0" fill="rgb(209,20,4)" rx="2" ry="2" />
+<text  x="39.64" y="751.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;* std::__uninitialized_copy&lt;false&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; const*, std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt; &gt;, std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;*&gt; (338,383 samples, 0.03%)</title><rect x="204.9" y="357" width="0.2" height="15.0" fill="rgb(205,1,0)" rx="2" ry="2" />
+<text  x="207.86" y="367.5" ></text>
+</g>
+<g >
+<title>[libm.so.6] (158,134 samples, 0.02%)</title><rect x="702.3" y="517" width="0.2" height="15.0" fill="rgb(208,16,4)" rx="2" ry="2" />
+<text  x="705.33" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::BuildDataListElement_s* std::__uninitialized_copy&lt;false&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::BuildDataListElement_s const*, std::vector&lt;ns3::BuildDataListElement_s, std::allocator&lt;ns3::BuildDataListElement_s&gt; &gt; &gt;, ns3::BuildDataListElement_s*&gt; (515,194 samples, 0.05%)</title><rect x="141.9" y="405" width="0.4" height="15.0" fill="rgb(220,73,17)" rx="2" ry="2" />
+<text  x="144.92" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::_M_drop_node (669,961 samples, 0.07%)</title><rect x="233.1" y="405" width="0.6" height="15.0" fill="rgb(217,55,13)" rx="2" ry="2" />
+<text  x="236.11" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::ObjectDeleter::Delete (4,998,634 samples, 0.52%)</title><rect x="377.4" y="389" width="4.0" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="380.39" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::MacCeListElement_s::operator= (1,023,273 samples, 0.11%)</title><rect x="685.7" y="485" width="0.8" height="15.0" fill="rgb(249,206,49)" rx="2" ry="2" />
+<text  x="688.72" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::BuildBroadcastListElement_s, std::allocator&lt;ns3::BuildBroadcastListElement_s&gt; &gt;::~_Vector_base (193,710 samples, 0.02%)</title><rect x="145.1" y="437" width="0.2" height="15.0" fill="rgb(222,81,19)" rx="2" ry="2" />
+<text  x="148.13" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_S_maximum (160,901 samples, 0.02%)</title><rect x="59.1" y="453" width="0.1" height="15.0" fill="rgb(251,212,50)" rx="2" ry="2" />
+<text  x="62.08" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::map&lt;unsigned char, ns3::LteMacSapUser*, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt; &gt; &gt; &gt;::_M_end (157,738 samples, 0.02%)</title><rect x="433.5" y="293" width="0.1" height="15.0" fill="rgb(248,199,47)" rx="2" ry="2" />
+<text  x="436.45" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::NoOpComponentCarrierManager::DoNotifyTxOpportunity (10,110,654 samples, 1.04%)</title><rect x="150.8" y="437" width="8.1" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="153.82" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::TracedCallback&lt;unsigned short, unsigned short, double&gt;::operator (430,115 samples, 0.04%)</title><rect x="682.1" y="533" width="0.3" height="15.0" fill="rgb(239,160,38)" rx="2" ry="2" />
+<text  x="685.07" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue&gt; ns3::Create&lt;ns3::SpectrumValue, ns3::Ptr&lt;ns3::SpectrumModel const&gt; &gt; (3,855,019 samples, 0.40%)</title><rect x="401.7" y="517" width="3.1" height="15.0" fill="rgb(251,211,50)" rx="2" ry="2" />
+<text  x="404.67" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbMac::DoSchedDlConfigInd (2,983,151 samples, 0.31%)</title><rect x="17.2" y="485" width="2.4" height="15.0" fill="rgb(205,3,0)" rx="2" ry="2" />
+<text  x="20.17" y="495.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;std::is_constructible&lt;std::pair&lt;int const, double&gt;, std::pair&lt;int, double&gt; &gt;::value, std::pair&lt;std::_Rb_tree_iterator&lt;std::pair&lt;int const, double&gt; &gt;, bool&gt; &gt;::type std::map&lt;int, double, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::insert&lt;std::pair&lt;int, double&gt; &gt; (574,148 samples, 0.06%)</title><rect x="110.8" y="517" width="0.5" height="15.0" fill="rgb(219,65,15)" rx="2" ry="2" />
+<text  x="113.83" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::LtePhy::SetControlMessages (378,472 samples, 0.04%)</title><rect x="689.3" y="469" width="0.3" height="15.0" fill="rgb(247,193,46)" rx="2" ry="2" />
+<text  x="692.30" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt;::Ptr (157,831 samples, 0.02%)</title><rect x="383.3" y="469" width="0.1" height="15.0" fill="rgb(219,67,16)" rx="2" ry="2" />
+<text  x="386.26" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::SbMeasResult_s::~SbMeasResult_s (859,795 samples, 0.09%)</title><rect x="255.0" y="373" width="0.7" height="15.0" fill="rgb(221,77,18)" rx="2" ry="2" />
+<text  x="258.00" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::EnbMacMemberLteMacSapProvider&lt;ns3::NoOpComponentCarrierManager&gt;::TransmitPdu (1,327,529 samples, 0.14%)</title><rect x="11.4" y="405" width="1.1" height="15.0" fill="rgb(247,196,47)" rx="2" ry="2" />
+<text  x="14.43" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Bind_helper&lt;std::__or_&lt;std::is_integral&lt;std::decay&lt;void  (661,742 samples, 0.07%)</title><rect x="63.1" y="485" width="0.5" height="15.0" fill="rgb(237,148,35)" rx="2" ry="2" />
+<text  x="66.05" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Bind_helper&lt;std::__or_&lt;std::is_integral&lt;std::decay&lt;void  (1,023,427 samples, 0.11%)</title><rect x="306.1" y="469" width="0.8" height="15.0" fill="rgb(237,148,35)" rx="2" ry="2" />
+<text  x="309.12" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::SbMeasResult_s&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::SbMeasResult_s&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::SbMeasResult_s&gt; &gt; &gt;::_M_lower_bound (559,810 samples, 0.06%)</title><rect x="185.6" y="453" width="0.4" height="15.0" fill="rgb(239,160,38)" rx="2" ry="2" />
+<text  x="188.58" y="463.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;::deallocate (158,232 samples, 0.02%)</title><rect x="501.2" y="469" width="0.1" height="15.0" fill="rgb(206,6,1)" rx="2" ry="2" />
+<text  x="504.20" y="479.5" ></text>
+</g>
+<g >
+<title>int const* std::__niter_base&lt;int const*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt; (127,383 samples, 0.01%)</title><rect x="574.0" y="261" width="0.1" height="15.0" fill="rgb(218,62,14)" rx="2" ry="2" />
+<text  x="577.04" y="271.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_S_key (163,045 samples, 0.02%)</title><rect x="707.3" y="389" width="0.2" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="710.34" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::Callback&lt;void, ns3::SpectrumValue const&amp;&gt;::DoPeekImpl (161,766 samples, 0.02%)</title><rect x="467.5" y="501" width="0.2" height="15.0" fill="rgb(208,17,4)" rx="2" ry="2" />
+<text  x="470.54" y="511.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt;::empty (825,740 samples, 0.09%)</title><rect x="256.9" y="517" width="0.7" height="15.0" fill="rgb(223,85,20)" rx="2" ry="2" />
+<text  x="259.94" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::Object::Object (305,763 samples, 0.03%)</title><rect x="370.8" y="501" width="0.2" height="15.0" fill="rgb(242,174,41)" rx="2" ry="2" />
+<text  x="373.79" y="511.5" ></text>
+</g>
+<g >
+<title>__log10_finite (314,933 samples, 0.03%)</title><rect x="681.4" y="517" width="0.3" height="15.0" fill="rgb(237,151,36)" rx="2" ry="2" />
+<text  x="684.42" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::IsotropicAntennaModel::GetGainDb (306,931 samples, 0.03%)</title><rect x="642.8" y="517" width="0.2" height="15.0" fill="rgb(208,17,4)" rx="2" ry="2" />
+<text  x="645.78" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::CqiListElement_s* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;ns3::CqiListElement_s*, std::vector&lt;ns3::CqiListElement_s, std::allocator&lt;ns3::CqiListElement_s&gt; &gt; &gt;, ns3::CqiListElement_s*, ns3::CqiListElement_s&gt; (3,635,299 samples, 0.37%)</title><rect x="124.4" y="485" width="3.0" height="15.0" fill="rgb(228,106,25)" rx="2" ry="2" />
+<text  x="127.44" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::SpectrumValue (1,413,703 samples, 0.15%)</title><rect x="677.0" y="485" width="1.1" height="15.0" fill="rgb(211,27,6)" rx="2" ry="2" />
+<text  x="679.96" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::PacketMetadata::PacketMetadata (584,751 samples, 0.06%)</title><rect x="360.1" y="485" width="0.5" height="15.0" fill="rgb(231,121,28)" rx="2" ry="2" />
+<text  x="363.08" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumModel const&gt;::operator (160,403 samples, 0.02%)</title><rect x="744.9" y="533" width="0.2" height="15.0" fill="rgb(226,96,23)" rx="2" ry="2" />
+<text  x="747.94" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::AttributeConstructionList::AttributeConstructionList (757,136 samples, 0.08%)</title><rect x="630.0" y="501" width="0.6" height="15.0" fill="rgb(231,122,29)" rx="2" ry="2" />
+<text  x="633.00" y="511.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt;::at (156,928 samples, 0.02%)</title><rect x="510.8" y="549" width="0.1" height="15.0" fill="rgb(241,166,39)" rx="2" ry="2" />
+<text  x="513.78" y="559.5" ></text>
+</g>
+<g >
+<title>void std::_Function_base::_Base_manager&lt;std::_Bind&lt;void  (414,048 samples, 0.04%)</title><rect x="64.0" y="453" width="0.3" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="67.01" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_Auto_node::_Auto_node&lt;unsigned int const&amp;, ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp;&gt; (420,658 samples, 0.04%)</title><rect x="81.8" y="469" width="0.4" height="15.0" fill="rgb(209,20,4)" rx="2" ry="2" />
+<text  x="84.81" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Time::~Time (269,802 samples, 0.03%)</title><rect x="278.6" y="501" width="0.2" height="15.0" fill="rgb(212,36,8)" rx="2" ry="2" />
+<text  x="281.58" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::EventImpl, ns3::Empty, ns3::DefaultDeleter&lt;ns3::EventImpl&gt; &gt;::Unref (240,387 samples, 0.02%)</title><rect x="39.9" y="693" width="0.2" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="42.86" y="703.5" ></text>
+</g>
+<g >
+<title>decltype  (252,039 samples, 0.03%)</title><rect x="101.6" y="421" width="0.2" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="104.59" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy::GenerateDataCqiReport (10,863,791 samples, 1.12%)</title><rect x="472.7" y="341" width="8.7" height="15.0" fill="rgb(249,203,48)" rx="2" ry="2" />
+<text  x="475.69" y="351.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt;::pair (349,723 samples, 0.04%)</title><rect x="277.3" y="469" width="0.3" height="15.0" fill="rgb(238,152,36)" rx="2" ry="2" />
+<text  x="280.30" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt;::find (1,293,049 samples, 0.13%)</title><rect x="567.7" y="277" width="1.1" height="15.0" fill="rgb(219,68,16)" rx="2" ry="2" />
+<text  x="570.72" y="287.5" ></text>
+</g>
+<g >
+<title>double* std::copy&lt;__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, double*&gt; (303,198 samples, 0.03%)</title><rect x="654.7" y="421" width="0.2" height="15.0" fill="rgb(246,192,46)" rx="2" ry="2" />
+<text  x="657.68" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_S_key (154,486 samples, 0.02%)</title><rect x="659.3" y="453" width="0.1" height="15.0" fill="rgb(244,182,43)" rx="2" ry="2" />
+<text  x="662.28" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::~SpectrumValue (447,563 samples, 0.05%)</title><rect x="303.6" y="453" width="0.3" height="15.0" fill="rgb(247,193,46)" rx="2" ry="2" />
+<text  x="306.56" y="463.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; const*, std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt; &gt;::base (148,134 samples, 0.02%)</title><rect x="356.7" y="501" width="0.1" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="359.69" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_erase (270,414 samples, 0.03%)</title><rect x="341.4" y="437" width="0.2" height="15.0" fill="rgb(247,197,47)" rx="2" ry="2" />
+<text  x="344.36" y="447.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; const*, std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt; &gt;::__normal_iterator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;*, void&gt; (228,797 samples, 0.02%)</title><rect x="354.5" y="533" width="0.2" height="15.0" fill="rgb(207,10,2)" rx="2" ry="2" />
+<text  x="357.49" y="543.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::lower_bound (238,325 samples, 0.02%)</title><rect x="332.8" y="485" width="0.2" height="15.0" fill="rgb(247,197,47)" rx="2" ry="2" />
+<text  x="335.80" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Function_handler&lt;void  (891,010,862 samples, 91.88%)</title><rect x="41.6" y="677" width="716.6" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="44.56" y="687.5" >std::_Function_handler&lt;void </text>
+</g>
+<g >
+<title>std::_Function_handler&lt;void  (194,457 samples, 0.02%)</title><rect x="727.7" y="389" width="0.1" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="730.69" y="399.5" ></text>
+</g>
+<g >
+<title>std::tuple&lt;ns3::LteSpectrumPhy*&gt;::tuple&lt;ns3::LteSpectrumPhy*&amp;, true, true&gt; (451,930 samples, 0.05%)</title><rect x="638.6" y="453" width="0.4" height="15.0" fill="rgb(249,204,48)" rx="2" ry="2" />
+<text  x="641.63" y="463.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt;::allocate (124,601 samples, 0.01%)</title><rect x="611.2" y="453" width="0.1" height="15.0" fill="rgb(243,178,42)" rx="2" ry="2" />
+<text  x="614.25" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt;::~vector (447,401 samples, 0.05%)</title><rect x="473.3" y="293" width="0.3" height="15.0" fill="rgb(254,227,54)" rx="2" ry="2" />
+<text  x="476.25" y="303.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::ByteTagListData*, std::allocator&lt;ns3::ByteTagListData*&gt; &gt;::back (538,428 samples, 0.06%)</title><rect x="553.6" y="213" width="0.4" height="15.0" fill="rgb(207,9,2)" rx="2" ry="2" />
+<text  x="556.55" y="223.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::EventImpl&gt;::Acquire (243,600 samples, 0.03%)</title><rect x="277.9" y="485" width="0.2" height="15.0" fill="rgb(229,112,26)" rx="2" ry="2" />
+<text  x="280.86" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumSignalParametersDlCtrlFrame::~LteSpectrumSignalParametersDlCtrlFrame (493,631 samples, 0.05%)</title><rect x="324.1" y="453" width="0.4" height="15.0" fill="rgb(220,69,16)" rx="2" ry="2" />
+<text  x="327.09" y="463.5" ></text>
+</g>
+<g >
+<title>double* std::__copy_move&lt;false, true, std::random_access_iterator_tag&gt;::__copy_m&lt;double const, double&gt; (157,987 samples, 0.02%)</title><rect x="325.1" y="341" width="0.1" height="15.0" fill="rgb(208,16,3)" rx="2" ry="2" />
+<text  x="328.10" y="351.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; &gt; &gt;::push_back (266,576 samples, 0.03%)</title><rect x="358.5" y="533" width="0.2" height="15.0" fill="rgb(226,98,23)" rx="2" ry="2" />
+<text  x="361.50" y="543.5" ></text>
+</g>
+<g >
+<title>std::_List_node&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt;::_M_valptr (268,362 samples, 0.03%)</title><rect x="451.4" y="197" width="0.2" height="15.0" fill="rgb(215,46,11)" rx="2" ry="2" />
+<text  x="454.36" y="207.5" ></text>
+</g>
+<g >
+<title>void std::__invoke_impl&lt;void, ns3::Callback&lt;void, ns3::UlInfoListElement_s&gt;::Callback&lt;void  (2,014,597 samples, 0.21%)</title><rect x="439.3" y="469" width="1.6" height="15.0" fill="rgb(206,9,2)" rx="2" ry="2" />
+<text  x="442.32" y="479.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::_M_insert&lt;ns3::Ptr&lt;ns3::Packet&gt; const&amp;&gt; (1,698,937 samples, 0.18%)</title><rect x="563.1" y="165" width="1.4" height="15.0" fill="rgb(234,135,32)" rx="2" ry="2" />
+<text  x="566.13" y="175.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::DlInfoListElement_s*, ns3::DlInfoListElement_s&gt; (886,663 samples, 0.09%)</title><rect x="132.4" y="485" width="0.7" height="15.0" fill="rgb(217,55,13)" rx="2" ry="2" />
+<text  x="135.37" y="495.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;::_M_ptr (239,221 samples, 0.02%)</title><rect x="663.5" y="357" width="0.2" height="15.0" fill="rgb(219,66,15)" rx="2" ry="2" />
+<text  x="666.54" y="367.5" ></text>
+</g>
+<g >
+<title>std::function&lt;void  (261,260 samples, 0.03%)</title><rect x="308.4" y="421" width="0.2" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="311.37" y="431.5" ></text>
+</g>
+<g >
+<title>std::operator== (197,446 samples, 0.02%)</title><rect x="509.7" y="549" width="0.1" height="15.0" fill="rgb(229,110,26)" rx="2" ry="2" />
+<text  x="512.69" y="559.5" ></text>
+</g>
+<g >
+<title>std::map&lt;int, double, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::lower_bound (147,572 samples, 0.02%)</title><rect x="294.2" y="517" width="0.1" height="15.0" fill="rgb(238,151,36)" rx="2" ry="2" />
+<text  x="297.21" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::UlCqi_s::~UlCqi_s (502,449 samples, 0.05%)</title><rect x="472.9" y="293" width="0.4" height="15.0" fill="rgb(229,111,26)" rx="2" ry="2" />
+<text  x="475.85" y="303.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::PacketMetadata::Data*, std::allocator&lt;ns3::PacketMetadata::Data*&gt; &gt;::empty (674,989 samples, 0.07%)</title><rect x="14.8" y="341" width="0.6" height="15.0" fill="rgb(248,202,48)" rx="2" ry="2" />
+<text  x="17.82" y="351.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_M_deallocate (199,701 samples, 0.02%)</title><rect x="716.8" y="389" width="0.2" height="15.0" fill="rgb(240,162,38)" rx="2" ry="2" />
+<text  x="719.83" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbMac::DoSchedDlConfigInd (19,285,336 samples, 1.99%)</title><rect x="19.6" y="501" width="15.5" height="15.0" fill="rgb(205,3,0)" rx="2" ry="2" />
+<text  x="22.60" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;* std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_copy&lt;false, std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_Alloc_node&gt; (158,119 samples, 0.02%)</title><rect x="340.6" y="245" width="0.2" height="15.0" fill="rgb(251,212,50)" rx="2" ry="2" />
+<text  x="343.65" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::SimpleRefCount&lt;ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter&gt;::Unref (707,699 samples, 0.07%)</title><rect x="612.8" y="533" width="0.5" height="15.0" fill="rgb(221,78,18)" rx="2" ry="2" />
+<text  x="615.78" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::FfMacSchedSapProvider::SchedUlCqiInfoReqParameters::~SchedUlCqiInfoReqParameters (949,850 samples, 0.10%)</title><rect x="472.9" y="309" width="0.7" height="15.0" fill="rgb(219,67,16)" rx="2" ry="2" />
+<text  x="475.85" y="319.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::RarLteControlMessage::Rar, std::allocator&lt;ns3::RarLteControlMessage::Rar&gt; &gt;::~list (430,365 samples, 0.04%)</title><rect x="167.1" y="373" width="0.4" height="15.0" fill="rgb(205,2,0)" rx="2" ry="2" />
+<text  x="170.12" y="383.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::MacCeListElement_s*, std::vector&lt;ns3::MacCeListElement_s, std::allocator&lt;ns3::MacCeListElement_s&gt; &gt; &gt;::operator+ (159,119 samples, 0.02%)</title><rect x="128.5" y="501" width="0.1" height="15.0" fill="rgb(230,116,27)" rx="2" ry="2" />
+<text  x="131.47" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::EventId ns3::Simulator::Schedule&lt;void  (3,688,502 samples, 0.38%)</title><rect x="637.1" y="533" width="2.9" height="15.0" fill="rgb(253,224,53)" rx="2" ry="2" />
+<text  x="640.07" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::HarqProcessInfoElement_t* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;ns3::HarqProcessInfoElement_t const*, std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt; &gt;, ns3::HarqProcessInfoElement_t*, ns3::HarqProcessInfoElement_t&gt; (1,566,463 samples, 0.16%)</title><rect x="512.4" y="533" width="1.3" height="15.0" fill="rgb(252,220,52)" rx="2" ry="2" />
+<text  x="515.43" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Function_handler&lt;void  (5,321,712 samples, 0.55%)</title><rect x="11.2" y="693" width="4.3" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="14.17" y="703.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::~_Vector_base (168,609 samples, 0.02%)</title><rect x="521.7" y="325" width="0.2" height="15.0" fill="rgb(205,1,0)" rx="2" ry="2" />
+<text  x="524.72" y="335.5" ></text>
+</g>
+<g >
+<title>std::_List_node&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt;* std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::_M_create_node&lt;ns3::Ptr&lt;ns3::Packet&gt; const&amp;&gt; (443,816 samples, 0.05%)</title><rect x="68.9" y="405" width="0.4" height="15.0" fill="rgb(211,30,7)" rx="2" ry="2" />
+<text  x="71.93" y="415.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::BuildRarListElement_s, std::allocator&lt;ns3::BuildRarListElement_s&gt; &gt;::size (155,525 samples, 0.02%)</title><rect x="143.8" y="437" width="0.1" height="15.0" fill="rgb(219,66,15)" rx="2" ry="2" />
+<text  x="146.76" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_M_get_Tp_allocator (386,559 samples, 0.04%)</title><rect x="693.7" y="421" width="0.3" height="15.0" fill="rgb(244,183,43)" rx="2" ry="2" />
+<text  x="696.69" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::HigherLayerSelected_s* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;ns3::HigherLayerSelected_s const*, std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt; &gt;, ns3::HigherLayerSelected_s*, ns3::HigherLayerSelected_s&gt; (151,182 samples, 0.02%)</title><rect x="92.3" y="341" width="0.1" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
+<text  x="95.31" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::LteRadioBearerTag::GetInstanceTypeId (266,218 samples, 0.03%)</title><rect x="21.1" y="325" width="0.2" height="15.0" fill="rgb(244,181,43)" rx="2" ry="2" />
+<text  x="24.08" y="335.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::vector (333,368 samples, 0.03%)</title><rect x="125.3" y="261" width="0.3" height="15.0" fill="rgb(206,9,2)" rx="2" ry="2" />
+<text  x="128.29" y="271.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::DlInfoListElement_s*&gt; (1,227,211 samples, 0.13%)</title><rect x="256.0" y="469" width="0.9" height="15.0" fill="rgb(215,49,11)" rx="2" ry="2" />
+<text  x="258.95" y="479.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::RlcPduListElement_s const*, std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt;::base (155,263 samples, 0.02%)</title><rect x="212.4" y="325" width="0.1" height="15.0" fill="rgb(235,142,33)" rx="2" ry="2" />
+<text  x="215.41" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::EnbMacMemberLteMacSapProvider&lt;ns3::LteEnbMac&gt;::TransmitPdu (579,238 samples, 0.06%)</title><rect x="17.2" y="373" width="0.4" height="15.0" fill="rgb(239,157,37)" rx="2" ry="2" />
+<text  x="20.17" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::Divide (438,578 samples, 0.05%)</title><rect x="484.5" y="501" width="0.3" height="15.0" fill="rgb(239,160,38)" rx="2" ry="2" />
+<text  x="487.49" y="511.5" ></text>
+</g>
+<g >
+<title>double* std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, double*&gt; (700,030 samples, 0.07%)</title><rect x="412.4" y="421" width="0.6" height="15.0" fill="rgb(210,23,5)" rx="2" ry="2" />
+<text  x="415.39" y="431.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;::__normal_iterator (202,662 samples, 0.02%)</title><rect x="416.6" y="501" width="0.2" height="15.0" fill="rgb(249,206,49)" rx="2" ry="2" />
+<text  x="419.62" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;* std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_Alloc_node::operator (156,128 samples, 0.02%)</title><rect x="667.1" y="213" width="0.1" height="15.0" fill="rgb(217,55,13)" rx="2" ry="2" />
+<text  x="670.07" y="223.5" ></text>
+</g>
+<g >
+<title>ns3::EnbMacMemberLteEnbPhySapUser::ReceiveLteControlMessage (20,400,169 samples, 2.10%)</title><rect x="445.5" y="357" width="16.4" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="448.46" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::SpectrumValue (361,724 samples, 0.04%)</title><rect x="71.6" y="421" width="0.3" height="15.0" fill="rgb(211,27,6)" rx="2" ry="2" />
+<text  x="74.62" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Function_base::~_Function_base (7,196,969 samples, 0.74%)</title><rect x="771.4" y="645" width="5.8" height="15.0" fill="rgb(221,74,17)" rx="2" ry="2" />
+<text  x="774.44" y="655.5" ></text>
+</g>
+<g >
+<title>double&amp; std::forward&lt;double&amp;&gt; (151,412 samples, 0.02%)</title><rect x="666.5" y="453" width="0.1" height="15.0" fill="rgb(246,188,45)" rx="2" ry="2" />
+<text  x="669.51" y="463.5" ></text>
+</g>
+<g >
+<title>int* std::__copy_move_a1&lt;false, int const*, int*&gt; (394,757 samples, 0.04%)</title><rect x="698.8" y="453" width="0.4" height="15.0" fill="rgb(230,117,28)" rx="2" ry="2" />
+<text  x="701.83" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::LteControlMessage&gt;&amp; std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::emplace_back&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;&amp;&gt; (731,821 samples, 0.08%)</title><rect x="721.6" y="469" width="0.6" height="15.0" fill="rgb(240,163,39)" rx="2" ry="2" />
+<text  x="724.59" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;::_M_valptr (153,808 samples, 0.02%)</title><rect x="336.4" y="405" width="0.1" height="15.0" fill="rgb(213,38,9)" rx="2" ry="2" />
+<text  x="339.39" y="415.5" ></text>
+</g>
+<g >
+<title>std::operator== (310,383 samples, 0.03%)</title><rect x="194.4" y="485" width="0.2" height="15.0" fill="rgb(229,110,26)" rx="2" ry="2" />
+<text  x="197.40" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Function_handler&lt;void  (19,577,698 samples, 2.02%)</title><rect x="423.0" y="421" width="15.7" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="425.96" y="431.5" ></text>
+</g>
+<g >
+<title> (275,175 samples, 0.03%)</title><rect x="292.6" y="517" width="0.2" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="295.56" y="527.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::clear (977,631 samples, 0.10%)</title><rect x="774.0" y="309" width="0.8" height="15.0" fill="rgb(217,58,13)" rx="2" ry="2" />
+<text  x="777.02" y="319.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt; const*, std::vector&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt; &gt; &gt; &gt;::__normal_iterator (156,097 samples, 0.02%)</title><rect x="292.1" y="501" width="0.2" height="15.0" fill="rgb(205,2,0)" rx="2" ry="2" />
+<text  x="295.14" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Bind&lt;void  (191,013 samples, 0.02%)</title><rect x="53.4" y="485" width="0.1" height="15.0" fill="rgb(253,221,52)" rx="2" ry="2" />
+<text  x="56.38" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_emplace_hint_unique&lt;std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (1,422,790 samples, 0.15%)</title><rect x="83.0" y="421" width="1.2" height="15.0" fill="rgb(248,201,48)" rx="2" ry="2" />
+<text  x="86.02" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy::CreateTxPowerSpectralDensityWithPowerAllocation (9,112,338 samples, 0.94%)</title><rect x="53.9" y="533" width="7.4" height="15.0" fill="rgb(247,195,46)" rx="2" ry="2" />
+<text  x="56.94" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::BsrLteControlMessage::SetBsr (1,023,273 samples, 0.11%)</title><rect x="685.7" y="501" width="0.8" height="15.0" fill="rgb(248,201,48)" rx="2" ry="2" />
+<text  x="688.72" y="511.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt;::operator= (234,084 samples, 0.02%)</title><rect x="419.3" y="325" width="0.2" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="422.30" y="335.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt; &gt;::_M_get_insert_unique_pos (344,616 samples, 0.04%)</title><rect x="504.5" y="485" width="0.2" height="15.0" fill="rgb(236,144,34)" rx="2" ry="2" />
+<text  x="507.45" y="495.5" ></text>
+</g>
+<g >
+<title> (311,768 samples, 0.03%)</title><rect x="299.7" y="437" width="0.3" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="302.70" y="447.5" ></text>
+</g>
+<g >
+<title>int* std::__uninitialized_copy_a&lt;__gnu_cxx::__normal_iterator&lt;int const*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt;, int*, int&gt; (310,256 samples, 0.03%)</title><rect x="91.1" y="533" width="0.2" height="15.0" fill="rgb(205,0,0)" rx="2" ry="2" />
+<text  x="94.09" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;* std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_M_clone_node&lt;false, std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::_Alloc_node&gt; (421,993 samples, 0.04%)</title><rect x="668.5" y="421" width="0.3" height="15.0" fill="rgb(205,4,0)" rx="2" ry="2" />
+<text  x="671.50" y="431.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;::empty (163,295 samples, 0.02%)</title><rect x="589.4" y="261" width="0.1" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
+<text  x="592.42" y="271.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::BuildDataListElement_s, std::allocator&lt;ns3::BuildDataListElement_s&gt; &gt;::~_Vector_base (195,366 samples, 0.02%)</title><rect x="145.5" y="437" width="0.1" height="15.0" fill="rgb(210,25,6)" rx="2" ry="2" />
+<text  x="148.48" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::DlCqiLteControlMessage&gt; ns3::DynamicCast&lt;ns3::DlCqiLteControlMessage, ns3::LteControlMessage&gt; (201,818 samples, 0.02%)</title><rect x="462.1" y="357" width="0.2" height="15.0" fill="rgb(236,146,34)" rx="2" ry="2" />
+<text  x="465.10" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultSimulatorImpl::ProcessOneEvent (920,121,348 samples, 94.88%)</title><rect x="37.2" y="741" width="740.1" height="15.0" fill="rgb(211,30,7)" rx="2" ry="2" />
+<text  x="40.22" y="751.5" >ns3::DefaultSimulatorImpl::ProcessOneEvent</text>
+</g>
+<g >
+<title>std::_Function_base::_Base_manager&lt;std::_Bind&lt;void  (200,664 samples, 0.02%)</title><rect x="64.8" y="389" width="0.1" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="67.77" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::TbId_t, std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::_Select1st&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::_S_key (325,721 samples, 0.03%)</title><rect x="507.7" y="501" width="0.3" height="15.0" fill="rgb(220,73,17)" rx="2" ry="2" />
+<text  x="510.74" y="511.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;unsigned char const*, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt;::base (220,377 samples, 0.02%)</title><rect x="127.0" y="277" width="0.2" height="15.0" fill="rgb(251,212,50)" rx="2" ry="2" />
+<text  x="129.97" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumSignalParametersDlCtrlFrame::~LteSpectrumSignalParametersDlCtrlFrame (656,172 samples, 0.07%)</title><rect x="775.9" y="421" width="0.5" height="15.0" fill="rgb(220,69,16)" rx="2" ry="2" />
+<text  x="778.88" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_M_deallocate (190,332 samples, 0.02%)</title><rect x="674.2" y="421" width="0.1" height="15.0" fill="rgb(240,162,38)" rx="2" ry="2" />
+<text  x="677.16" y="431.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::at (243,145 samples, 0.03%)</title><rect x="594.1" y="293" width="0.2" height="15.0" fill="rgb(247,196,47)" rx="2" ry="2" />
+<text  x="597.10" y="303.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_Vector_base (1,030,409 samples, 0.11%)</title><rect x="239.2" y="277" width="0.8" height="15.0" fill="rgb(237,150,35)" rx="2" ry="2" />
+<text  x="242.15" y="287.5" ></text>
+</g>
+<g >
+<title>std::map&lt;int, double, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::find (922,442 samples, 0.10%)</title><rect x="57.8" y="501" width="0.7" height="15.0" fill="rgb(242,173,41)" rx="2" ry="2" />
+<text  x="60.77" y="511.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumPhy&gt;::operator bool (183,160 samples, 0.02%)</title><rect x="651.8" y="517" width="0.2" height="15.0" fill="rgb(210,27,6)" rx="2" ry="2" />
+<text  x="654.84" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::Seconds (2,151,776 samples, 0.22%)</title><rect x="682.5" y="549" width="1.7" height="15.0" fill="rgb(236,145,34)" rx="2" ry="2" />
+<text  x="685.48" y="559.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::EventImpl&gt;::Ptr (165,554 samples, 0.02%)</title><rect x="62.3" y="469" width="0.1" height="15.0" fill="rgb(239,157,37)" rx="2" ry="2" />
+<text  x="65.27" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::LteSpectrumModelId, std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt;, std::_Select1st&lt;std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt; &gt;, std::less&lt;ns3::LteSpectrumModelId&gt;, std::allocator&lt;std::pair&lt;ns3::LteSpectrumModelId const, ns3::Ptr&lt;ns3::SpectrumModel&gt; &gt; &gt; &gt;::find (1,347,788 samples, 0.14%)</title><rect x="55.0" y="469" width="1.1" height="15.0" fill="rgb(254,226,54)" rx="2" ry="2" />
+<text  x="57.99" y="479.5" ></text>
+</g>
+<g >
+<title>std::_Function_base::_Base_manager&lt;void  (601,990 samples, 0.06%)</title><rect x="471.1" y="373" width="0.4" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="474.05" y="383.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned int, ns3::SpectrumConverter, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::SpectrumConverter&gt; &gt; &gt;::find (738,382 samples, 0.08%)</title><rect x="81.1" y="517" width="0.6" height="15.0" fill="rgb(231,123,29)" rx="2" ry="2" />
+<text  x="84.12" y="527.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_initialize_dispatch&lt;std::_List_const_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt; (267,551 samples, 0.03%)</title><rect x="464.2" y="517" width="0.2" height="15.0" fill="rgb(215,50,12)" rx="2" ry="2" />
+<text  x="467.16" y="527.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, ns3::Ptr&lt;ns3::UeManager&gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::Ptr&lt;ns3::UeManager&gt; &gt; &gt; &gt;::find (225,392 samples, 0.02%)</title><rect x="18.5" y="325" width="0.2" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="21.49" y="335.5" ></text>
+</g>
+<g >
+<title>std::_Bvector_base&lt;std::allocator&lt;bool&gt; &gt;::_M_allocate (308,272 samples, 0.03%)</title><rect x="198.0" y="437" width="0.3" height="15.0" fill="rgb(235,141,33)" rx="2" ry="2" />
+<text  x="201.01" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;1ul, unsigned int, unsigned int&gt;::_Tuple_impl&lt;unsigned int&amp;, unsigned int&amp;, void&gt; (825,750 samples, 0.09%)</title><rect x="617.5" y="437" width="0.7" height="15.0" fill="rgb(238,153,36)" rx="2" ry="2" />
+<text  x="620.51" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Packet::AddPacketTag (190,338 samples, 0.02%)</title><rect x="17.2" y="341" width="0.2" height="15.0" fill="rgb(233,131,31)" rx="2" ry="2" />
+<text  x="20.23" y="351.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;unsigned short&gt;::allocate (163,524 samples, 0.02%)</title><rect x="474.0" y="133" width="0.2" height="15.0" fill="rgb(237,149,35)" rx="2" ry="2" />
+<text  x="477.03" y="143.5" ></text>
+</g>
+<g >
+<title>std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;::pair&lt;unsigned short const&amp;&gt; (483,178 samples, 0.05%)</title><rect x="242.9" y="373" width="0.4" height="15.0" fill="rgb(236,144,34)" rx="2" ry="2" />
+<text  x="245.87" y="383.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, ns3::DlInfoListElement_s, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt; &gt;::find (353,675 samples, 0.04%)</title><rect x="508.8" y="549" width="0.3" height="15.0" fill="rgb(237,148,35)" rx="2" ry="2" />
+<text  x="511.84" y="559.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt;::_Vector_base (165,586 samples, 0.02%)</title><rect x="420.9" y="293" width="0.1" height="15.0" fill="rgb(208,17,4)" rx="2" ry="2" />
+<text  x="423.86" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::MemberLteCcmRrcSapUser&lt;ns3::LteEnbRrc&gt;::GetUeManager (2,186,317 samples, 0.23%)</title><rect x="27.4" y="373" width="1.8" height="15.0" fill="rgb(228,107,25)" rx="2" ry="2" />
+<text  x="30.44" y="383.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::deallocate (731,414 samples, 0.08%)</title><rect x="764.5" y="597" width="0.5" height="15.0" fill="rgb(215,47,11)" rx="2" ry="2" />
+<text  x="767.45" y="607.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::_Rb_tree (934,328 samples, 0.10%)</title><rect x="189.9" y="469" width="0.7" height="15.0" fill="rgb(218,63,15)" rx="2" ry="2" />
+<text  x="192.89" y="479.5" ></text>
+</g>
+<g >
+<title>std::__detail::_List_node_base::_M_hook (128,267 samples, 0.01%)</title><rect x="564.4" y="149" width="0.1" height="15.0" fill="rgb(244,179,42)" rx="2" ry="2" />
+<text  x="567.40" y="159.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_increment (502,296 samples, 0.05%)</title><rect x="767.6" y="661" width="0.4" height="15.0" fill="rgb(247,196,46)" rx="2" ry="2" />
+<text  x="770.55" y="671.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::vector (1,986,872 samples, 0.20%)</title><rect x="403.1" y="485" width="1.6" height="15.0" fill="rgb(239,156,37)" rx="2" ry="2" />
+<text  x="406.14" y="495.5" ></text>
+</g>
+<g >
+<title>std::map&lt;ns3::Scheduler::EventKey, ns3::EventImpl*, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::end (1,104,797 samples, 0.11%)</title><rect x="761.4" y="709" width="0.9" height="15.0" fill="rgb(227,104,25)" rx="2" ry="2" />
+<text  x="764.38" y="719.5" ></text>
+</g>
+<g >
+<title>void std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::_M_realloc_insert&lt;unsigned char&gt; (975,393 samples, 0.10%)</title><rect x="214.9" y="453" width="0.8" height="15.0" fill="rgb(246,191,45)" rx="2" ry="2" />
+<text  x="217.95" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::RlcPduListElement_s* std::__relocate_a&lt;ns3::RlcPduListElement_s*, ns3::RlcPduListElement_s*, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; (319,205 samples, 0.03%)</title><rect x="209.9" y="437" width="0.3" height="15.0" fill="rgb(213,37,8)" rx="2" ry="2" />
+<text  x="212.91" y="447.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::allocate (155,343 samples, 0.02%)</title><rect x="331.7" y="389" width="0.1" height="15.0" fill="rgb(212,32,7)" rx="2" ry="2" />
+<text  x="334.66" y="399.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; std::copy&lt;__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; (665,489 samples, 0.07%)</title><rect x="719.1" y="453" width="0.5" height="15.0" fill="rgb(249,204,48)" rx="2" ry="2" />
+<text  x="722.09" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Tuple_impl&lt;4ul, ns3::Ptr&lt;ns3::SpectrumPhy&gt;, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt; &gt;::_Tuple_impl (263,591 samples, 0.03%)</title><rect x="667.7" y="325" width="0.3" height="15.0" fill="rgb(213,41,9)" rx="2" ry="2" />
+<text  x="670.74" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::TracedCallback&lt;ns3::Ptr&lt;ns3::Packet const&gt; &gt;::operator (797,898 samples, 0.08%)</title><rect x="494.1" y="549" width="0.7" height="15.0" fill="rgb(242,171,40)" rx="2" ry="2" />
+<text  x="497.13" y="559.5" ></text>
+</g>
+<g >
+<title>std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt; &gt;::operator (148,217 samples, 0.02%)</title><rect x="186.9" y="421" width="0.1" height="15.0" fill="rgb(218,61,14)" rx="2" ry="2" />
+<text  x="189.92" y="431.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;std::vector&lt;int, std::allocator&lt;int&gt; &gt;, std::allocator&lt;std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt; &gt;::size (234,068 samples, 0.02%)</title><rect x="701.2" y="517" width="0.2" height="15.0" fill="rgb(250,210,50)" rx="2" ry="2" />
+<text  x="704.18" y="527.5" ></text>
+</g>
+<g >
+<title>void std::vector&lt;int, std::allocator&lt;int&gt; &gt;::_M_realloc_insert&lt;int&gt; (738,134 samples, 0.08%)</title><rect x="572.7" y="325" width="0.5" height="15.0" fill="rgb(211,28,6)" rx="2" ry="2" />
+<text  x="575.66" y="335.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::_Vector_impl::_Vector_impl (204,699 samples, 0.02%)</title><rect x="478.0" y="245" width="0.2" height="15.0" fill="rgb(240,161,38)" rx="2" ry="2" />
+<text  x="481.02" y="255.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::~_Vector_base (199,701 samples, 0.02%)</title><rect x="716.8" y="405" width="0.2" height="15.0" fill="rgb(223,86,20)" rx="2" ry="2" />
+<text  x="719.83" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::_Vector_base (1,034,686 samples, 0.11%)</title><rect x="519.9" y="325" width="0.8" height="15.0" fill="rgb(219,65,15)" rx="2" ry="2" />
+<text  x="522.86" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::Buffer::Initialize (1,901,878 samples, 0.20%)</title><rect x="31.2" y="373" width="1.5" height="15.0" fill="rgb(211,31,7)" rx="2" ry="2" />
+<text  x="34.17" y="383.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::~vector (231,358 samples, 0.02%)</title><rect x="530.3" y="309" width="0.2" height="15.0" fill="rgb(252,219,52)" rx="2" ry="2" />
+<text  x="533.27" y="319.5" ></text>
+</g>
+<g >
+<title>std::tuple&lt;unsigned short const&amp;&gt;::tuple&lt;true, true&gt; (148,271 samples, 0.02%)</title><rect x="244.4" y="469" width="0.1" height="15.0" fill="rgb(216,50,12)" rx="2" ry="2" />
+<text  x="247.35" y="479.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::list (367,412 samples, 0.04%)</title><rect x="697.7" y="549" width="0.3" height="15.0" fill="rgb(236,145,34)" rx="2" ry="2" />
+<text  x="700.67" y="559.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt;::_M_addr (199,850 samples, 0.02%)</title><rect x="179.2" y="421" width="0.1" height="15.0" fill="rgb(210,24,5)" rx="2" ry="2" />
+<text  x="182.17" y="431.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, ns3::DlInfoListElement_s, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::DlInfoListElement_s&gt; &gt; &gt;::~map (349,670 samples, 0.04%)</title><rect x="509.4" y="549" width="0.3" height="15.0" fill="rgb(212,36,8)" rx="2" ry="2" />
+<text  x="512.41" y="559.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbMac::DoSchedDlConfigInd (3,017,978 samples, 0.31%)</title><rect x="95.6" y="453" width="2.4" height="15.0" fill="rgb(205,3,0)" rx="2" ry="2" />
+<text  x="98.59" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::CqiListElement_s* std::uninitialized_copy&lt;std::move_iterator&lt;ns3::CqiListElement_s*&gt;, ns3::CqiListElement_s*&gt; (176,077 samples, 0.02%)</title><rect x="127.5" y="453" width="0.2" height="15.0" fill="rgb(218,60,14)" rx="2" ry="2" />
+<text  x="130.51" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;::operator* (194,601 samples, 0.02%)</title><rect x="336.4" y="421" width="0.1" height="15.0" fill="rgb(233,132,31)" rx="2" ry="2" />
+<text  x="339.36" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;::_M_allocate (190,161 samples, 0.02%)</title><rect x="212.9" y="373" width="0.1" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="215.85" y="383.5" ></text>
+</g>
+<g >
+<title>ns3::TracedCallback&lt;unsigned short, unsigned short, double&gt;::operator (259,684 samples, 0.03%)</title><rect x="680.9" y="533" width="0.2" height="15.0" fill="rgb(239,160,38)" rx="2" ry="2" />
+<text  x="683.91" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::TbId_t, std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt;, std::_Select1st&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt;, std::less&lt;ns3::TbId_t&gt;, std::allocator&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::_Auto_node::_M_key (394,901 samples, 0.04%)</title><rect x="528.0" y="293" width="0.3" height="15.0" fill="rgb(214,44,10)" rx="2" ry="2" />
+<text  x="530.96" y="303.5" ></text>
+</g>
+<g >
+<title>unsigned short&amp; std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::emplace_back&lt;unsigned short&gt; (376,292 samples, 0.04%)</title><rect x="102.2" y="453" width="0.3" height="15.0" fill="rgb(214,44,10)" rx="2" ry="2" />
+<text  x="105.17" y="463.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt;::_M_ptr (313,712 samples, 0.03%)</title><rect x="24.0" y="309" width="0.3" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="27.00" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::Object::Object (225,956 samples, 0.02%)</title><rect x="118.8" y="469" width="0.2" height="15.0" fill="rgb(242,174,41)" rx="2" ry="2" />
+<text  x="121.84" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::TypeId::TypeId (145,703 samples, 0.02%)</title><rect x="632.4" y="453" width="0.2" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
+<text  x="635.44" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::Object::~Object (1,068,725 samples, 0.11%)</title><rect x="76.8" y="341" width="0.9" height="15.0" fill="rgb(229,110,26)" rx="2" ry="2" />
+<text  x="79.84" y="351.5" ></text>
+</g>
+<g >
+<title>decltype  (443,190 samples, 0.05%)</title><rect x="661.3" y="341" width="0.3" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="664.26" y="351.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;is_member_pointer_v&lt;void  (5,295,295 samples, 0.55%)</title><rect x="280.5" y="533" width="4.3" height="15.0" fill="rgb(241,170,40)" rx="2" ry="2" />
+<text  x="283.50" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::EventImpl&gt;::Acquire (159,184 samples, 0.02%)</title><rect x="269.0" y="469" width="0.2" height="15.0" fill="rgb(229,112,26)" rx="2" ry="2" />
+<text  x="272.03" y="479.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::UlInfoListElement_s, std::allocator&lt;ns3::UlInfoListElement_s&gt; &gt;::~vector (390,357 samples, 0.04%)</title><rect x="133.9" y="501" width="0.3" height="15.0" fill="rgb(244,179,42)" rx="2" ry="2" />
+<text  x="136.93" y="511.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, double, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, double&gt; &gt; &gt;::find (2,045,789 samples, 0.21%)</title><rect x="294.5" y="533" width="1.7" height="15.0" fill="rgb(248,201,48)" rx="2" ry="2" />
+<text  x="297.51" y="543.5" ></text>
+</g>
+<g >
+<title>all (969,771,633 samples, 100%)</title><rect x="10.0" y="869" width="780.0" height="15.0" fill="rgb(213,39,9)" rx="2" ry="2" />
+<text  x="13.00" y="879.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;signed char, std::allocator&lt;signed char&gt; &gt;::erase (696,549 samples, 0.07%)</title><rect x="532.3" y="341" width="0.5" height="15.0" fill="rgb(235,142,34)" rx="2" ry="2" />
+<text  x="535.28" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue&gt;::operator= (196,986 samples, 0.02%)</title><rect x="326.0" y="501" width="0.1" height="15.0" fill="rgb(220,71,17)" rx="2" ry="2" />
+<text  x="328.98" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::SpectrumConverter&gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::SpectrumConverter&gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::SpectrumConverter&gt; &gt; &gt;::_S_key (330,075 samples, 0.03%)</title><rect x="81.3" y="469" width="0.3" height="15.0" fill="rgb(248,199,47)" rx="2" ry="2" />
+<text  x="84.29" y="479.5" ></text>
+</g>
+<g >
+<title>signed char&amp;&amp; std::forward&lt;signed char&gt; (164,128 samples, 0.02%)</title><rect x="533.0" y="309" width="0.2" height="15.0" fill="rgb(246,191,45)" rx="2" ry="2" />
+<text  x="536.04" y="319.5" ></text>
+</g>
+<g >
+<title>int* std::uninitialized_copy&lt;__gnu_cxx::__normal_iterator&lt;int const*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt;, int*&gt; (730,011 samples, 0.08%)</title><rect x="398.8" y="517" width="0.6" height="15.0" fill="rgb(251,216,51)" rx="2" ry="2" />
+<text  x="401.81" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue&gt;::operator* (201,247 samples, 0.02%)</title><rect x="409.0" y="533" width="0.2" height="15.0" fill="rgb(243,176,42)" rx="2" ry="2" />
+<text  x="412.01" y="543.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Callback&lt;void, unsigned short, unsigned char, unsigned int, unsigned long&gt;, std::allocator&lt;ns3::Callback&lt;void, unsigned short, unsigned char, unsigned int, unsigned long&gt; &gt; &gt;::end (200,942 samples, 0.02%)</title><rect x="428.5" y="245" width="0.2" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="431.53" y="255.5" ></text>
+</g>
+<g >
+<title>ns3::Time::IsPositive (216,700 samples, 0.02%)</title><rect x="278.4" y="501" width="0.2" height="15.0" fill="rgb(242,172,41)" rx="2" ry="2" />
+<text  x="281.40" y="511.5" ></text>
+</g>
+<g >
+<title>decltype  (266,180 samples, 0.03%)</title><rect x="319.1" y="309" width="0.2" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="322.05" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::Time::GetTimeStep (201,200 samples, 0.02%)</title><rect x="278.2" y="501" width="0.2" height="15.0" fill="rgb(205,0,0)" rx="2" ry="2" />
+<text  x="281.24" y="511.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;::~map (220,721 samples, 0.02%)</title><rect x="666.3" y="325" width="0.2" height="15.0" fill="rgb(228,107,25)" rx="2" ry="2" />
+<text  x="669.34" y="335.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::DlInfoListElement_s*, std::vector&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt; &gt;::base (193,728 samples, 0.02%)</title><rect x="207.6" y="405" width="0.2" height="15.0" fill="rgb(223,84,20)" rx="2" ry="2" />
+<text  x="210.63" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, unsigned short, std::_Identity&lt;unsigned short&gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;unsigned short&gt; &gt;::_S_key (668,940 samples, 0.07%)</title><rect x="395.3" y="501" width="0.5" height="15.0" fill="rgb(243,177,42)" rx="2" ry="2" />
+<text  x="398.28" y="511.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::vector (246,976 samples, 0.03%)</title><rect x="593.8" y="277" width="0.2" height="15.0" fill="rgb(239,156,37)" rx="2" ry="2" />
+<text  x="596.77" y="287.5" ></text>
+</g>
+<g >
+<title>[libc.so.6] (498,884 samples, 0.05%)</title><rect x="655.1" y="341" width="0.4" height="15.0" fill="rgb(223,84,20)" rx="2" ry="2" />
+<text  x="658.12" y="351.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;is_member_pointer_v&lt;void  (2,337,187 samples, 0.24%)</title><rect x="638.2" y="517" width="1.8" height="15.0" fill="rgb(241,170,40)" rx="2" ry="2" />
+<text  x="641.15" y="527.5" ></text>
+</g>
+<g >
+<title>std::enable_if&lt;is_invocable_r_v&lt;void, ns3::Callback&lt;void, unsigned short, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt;::Callback&lt;void  (1,199,098 samples, 0.12%)</title><rect x="725.6" y="453" width="1.0" height="15.0" fill="rgb(227,101,24)" rx="2" ry="2" />
+<text  x="728.62" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::CqiListElement_s, std::allocator&lt;ns3::CqiListElement_s&gt; &gt;::_M_check_len (453,445 samples, 0.05%)</title><rect x="127.8" y="485" width="0.3" height="15.0" fill="rgb(248,202,48)" rx="2" ry="2" />
+<text  x="130.77" y="495.5" ></text>
+</g>
+<g >
+<title>void std::_Construct&lt;ns3::HigherLayerSelected_s, ns3::HigherLayerSelected_s const&amp;&gt; (151,182 samples, 0.02%)</title><rect x="92.3" y="277" width="0.1" height="15.0" fill="rgb(232,127,30)" rx="2" ry="2" />
+<text  x="95.31" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::PacketTagList::RemoveWriter (241,075 samples, 0.02%)</title><rect x="431.0" y="277" width="0.2" height="15.0" fill="rgb(226,100,24)" rx="2" ry="2" />
+<text  x="434.05" y="287.5" ></text>
+</g>
+<g >
+<title>ns3::Callback&lt;void, ns3::DlInfoListElement_s&gt;::operator (4,295,691 samples, 0.44%)</title><rect x="418.0" y="549" width="3.5" height="15.0" fill="rgb(237,149,35)" rx="2" ry="2" />
+<text  x="421.00" y="559.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::size (188,602 samples, 0.02%)</title><rect x="700.4" y="533" width="0.2" height="15.0" fill="rgb(211,32,7)" rx="2" ry="2" />
+<text  x="703.45" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::SbMeasResult_s::~SbMeasResult_s (209,574 samples, 0.02%)</title><rect x="585.1" y="277" width="0.2" height="15.0" fill="rgb(221,77,18)" rx="2" ry="2" />
+<text  x="588.12" y="287.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::VendorSpecificListElement_s, std::allocator&lt;ns3::VendorSpecificListElement_s&gt; &gt;::end (189,409 samples, 0.02%)</title><rect x="476.7" y="293" width="0.2" height="15.0" fill="rgb(216,52,12)" rx="2" ry="2" />
+<text  x="479.70" y="303.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;bool, std::allocator&lt;bool&gt; &gt;::size (163,820 samples, 0.02%)</title><rect x="246.5" y="453" width="0.2" height="15.0" fill="rgb(208,17,4)" rx="2" ry="2" />
+<text  x="249.52" y="463.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; const*, std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt; &gt;::__normal_iterator (146,918 samples, 0.02%)</title><rect x="636.0" y="501" width="0.1" height="15.0" fill="rgb(223,84,20)" rx="2" ry="2" />
+<text  x="639.01" y="511.5" ></text>
+</g>
+<g >
+<title>decltype  (395,364 samples, 0.04%)</title><rect x="253.1" y="373" width="0.3" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="256.13" y="383.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::~list (354,715 samples, 0.04%)</title><rect x="380.9" y="325" width="0.3" height="15.0" fill="rgb(238,152,36)" rx="2" ry="2" />
+<text  x="383.91" y="335.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_begin (190,458 samples, 0.02%)</title><rect x="663.1" y="405" width="0.1" height="15.0" fill="rgb(238,154,36)" rx="2" ry="2" />
+<text  x="666.06" y="415.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;::_M_valptr (152,053 samples, 0.02%)</title><rect x="337.1" y="357" width="0.2" height="15.0" fill="rgb(213,38,9)" rx="2" ry="2" />
+<text  x="340.14" y="367.5" ></text>
+</g>
+<g >
+<title>double* std::__uninitialized_copy&lt;true&gt;::__uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, double*&gt; (542,531 samples, 0.06%)</title><rect x="324.9" y="421" width="0.4" height="15.0" fill="rgb(238,153,36)" rx="2" ry="2" />
+<text  x="327.89" y="431.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; std::__copy_move_a&lt;false, __gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; (327,851 samples, 0.03%)</title><rect x="604.6" y="277" width="0.3" height="15.0" fill="rgb(212,35,8)" rx="2" ry="2" />
+<text  x="607.65" y="287.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt;::_M_lower_bound (446,182 samples, 0.05%)</title><rect x="432.3" y="293" width="0.3" height="15.0" fill="rgb(240,162,38)" rx="2" ry="2" />
+<text  x="435.28" y="303.5" ></text>
+</g>
+<g >
+<title> (206,181 samples, 0.02%)</title><rect x="69.4" y="437" width="0.2" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="72.45" y="447.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, ns3::SbMeasResult_s, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::SbMeasResult_s&gt; &gt; &gt;::find (452,741 samples, 0.05%)</title><rect x="135.5" y="485" width="0.3" height="15.0" fill="rgb(242,171,40)" rx="2" ry="2" />
+<text  x="138.48" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::Simulator::ScheduleWithContext (8,077,942 samples, 0.83%)</title><rect x="333.5" y="485" width="6.5" height="15.0" fill="rgb(230,116,27)" rx="2" ry="2" />
+<text  x="336.46" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::PfFfMacScheduler::UpdateDlRlcBufferInfo (1,587,094 samples, 0.16%)</title><rect x="181.2" y="485" width="1.3" height="15.0" fill="rgb(245,186,44)" rx="2" ry="2" />
+<text  x="184.23" y="495.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::list (158,346 samples, 0.02%)</title><rect x="347.0" y="533" width="0.2" height="15.0" fill="rgb(236,145,34)" rx="2" ry="2" />
+<text  x="350.03" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, unsigned short, std::_Identity&lt;unsigned short&gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;unsigned short&gt; &gt;::end (201,544 samples, 0.02%)</title><rect x="245.7" y="469" width="0.2" height="15.0" fill="rgb(223,84,20)" rx="2" ry="2" />
+<text  x="248.72" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::EventId ns3::Simulator::Schedule&lt;void  (22,013,376 samples, 2.27%)</title><rect x="267.1" y="549" width="17.7" height="15.0" fill="rgb(253,224,53)" rx="2" ry="2" />
+<text  x="270.05" y="559.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, unsigned short, std::_Identity&lt;unsigned short&gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;unsigned short&gt; &gt;::_M_lower_bound (1,198,361 samples, 0.12%)</title><rect x="395.2" y="517" width="1.0" height="15.0" fill="rgb(209,18,4)" rx="2" ry="2" />
+<text  x="398.24" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Head_base&lt;5ul, std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;, false&gt;::_Head_base&lt;std::map&lt;unsigned int, ns3::Ptr&lt;ns3::SpectrumValue&gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::Ptr&lt;ns3::SpectrumValue&gt; &gt; &gt; &gt;&amp;&gt; (236,989 samples, 0.02%)</title><rect x="340.6" y="309" width="0.2" height="15.0" fill="rgb(218,60,14)" rx="2" ry="2" />
+<text  x="343.59" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::MemberLteCcmMacSapUser&lt;ns3::NoOpComponentCarrierManager&gt;::NotifyTxOpportunity (538,351 samples, 0.06%)</title><rect x="96.2" y="437" width="0.4" height="15.0" fill="rgb(205,3,0)" rx="2" ry="2" />
+<text  x="99.20" y="447.5" ></text>
+</g>
+<g >
+<title>std::_List_const_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;::operator* (232,619 samples, 0.02%)</title><rect x="356.0" y="501" width="0.2" height="15.0" fill="rgb(254,229,54)" rx="2" ry="2" />
+<text  x="359.01" y="511.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::end (195,672 samples, 0.02%)</title><rect x="380.8" y="325" width="0.1" height="15.0" fill="rgb(211,29,6)" rx="2" ry="2" />
+<text  x="383.75" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::Copy (2,719,189 samples, 0.28%)</title><rect x="729.0" y="501" width="2.2" height="15.0" fill="rgb(241,167,40)" rx="2" ry="2" />
+<text  x="732.05" y="511.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;ns3::BuildDataListElement_s&gt;::allocate (158,386 samples, 0.02%)</title><rect x="202.5" y="421" width="0.1" height="15.0" fill="rgb(215,46,11)" rx="2" ry="2" />
+<text  x="205.48" y="431.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::vector (489,793 samples, 0.05%)</title><rect x="92.5" y="373" width="0.4" height="15.0" fill="rgb(206,9,2)" rx="2" ry="2" />
+<text  x="95.54" y="383.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;int, std::allocator&lt;int&gt; &gt;::~_Vector_base (281,814 samples, 0.03%)</title><rect x="700.7" y="533" width="0.2" height="15.0" fill="rgb(251,213,51)" rx="2" ry="2" />
+<text  x="703.65" y="543.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_destroy_node (1,051,072 samples, 0.11%)</title><rect x="763.3" y="645" width="0.8" height="15.0" fill="rgb(212,35,8)" rx="2" ry="2" />
+<text  x="766.26" y="655.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;int, std::allocator&lt;int&gt; &gt;::end (162,051 samples, 0.02%)</title><rect x="574.9" y="341" width="0.1" height="15.0" fill="rgb(214,44,10)" rx="2" ry="2" />
+<text  x="577.92" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::PacketBurst&gt;::Ptr (314,646 samples, 0.03%)</title><rect x="543.8" y="293" width="0.2" height="15.0" fill="rgb(219,67,16)" rx="2" ry="2" />
+<text  x="546.78" y="303.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;::back (217,631 samples, 0.02%)</title><rect x="636.3" y="501" width="0.1" height="15.0" fill="rgb(219,64,15)" rx="2" ry="2" />
+<text  x="639.25" y="511.5" ></text>
+</g>
+<g >
+<title> (158,925 samples, 0.02%)</title><rect x="744.7" y="533" width="0.2" height="15.0" fill="rgb(232,128,30)" rx="2" ry="2" />
+<text  x="747.75" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::Packet::AddPacketTag (1,751,354 samples, 0.18%)</title><rect x="561.4" y="197" width="1.4" height="15.0" fill="rgb(233,131,31)" rx="2" ry="2" />
+<text  x="564.38" y="207.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; std::map&lt;ns3::Scheduler::EventKey, ns3::EventImpl*, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::emplace_hint&lt;std::pair&lt;ns3::Scheduler::EventKey, ns3::EventImpl*&gt; &gt; (2,897,473 samples, 0.30%)</title><rect x="334.0" y="421" width="2.4" height="15.0" fill="rgb(253,224,53)" rx="2" ry="2" />
+<text  x="337.03" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::EventImpl* ns3::PeekPointer&lt;ns3::EventImpl&gt; (357,408 samples, 0.04%)</title><rect x="268.7" y="469" width="0.3" height="15.0" fill="rgb(242,171,40)" rx="2" ry="2" />
+<text  x="271.75" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::FfMacSchedSapUser::SchedUlConfigIndParameters::SchedUlConfigIndParameters (2,391,271 samples, 0.25%)</title><rect x="227.4" y="469" width="1.9" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="230.38" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp; std::__pair_get&lt;1ul&gt;::__move_get&lt;unsigned int const&amp;, ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp;&gt; (161,945 samples, 0.02%)</title><rect x="333.1" y="469" width="0.2" height="15.0" fill="rgb(224,91,21)" rx="2" ry="2" />
+<text  x="336.14" y="479.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;int const*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt; std::__miter_base&lt;__gnu_cxx::__normal_iterator&lt;int const*, std::vector&lt;int, std::allocator&lt;int&gt; &gt; &gt; &gt; (158,922 samples, 0.02%)</title><rect x="573.8" y="277" width="0.1" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="576.81" y="287.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, ns3::pfsFlowPerf_t&gt; &gt; &gt;::_S_right (196,109 samples, 0.02%)</title><rect x="236.2" y="437" width="0.2" height="15.0" fill="rgb(251,215,51)" rx="2" ry="2" />
+<text  x="239.20" y="447.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; std::copy&lt;__gnu_cxx::__normal_iterator&lt;double const*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; (410,799 samples, 0.04%)</title><rect x="604.6" y="293" width="0.3" height="15.0" fill="rgb(249,204,48)" rx="2" ry="2" />
+<text  x="607.58" y="303.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::_M_erase (690,702 samples, 0.07%)</title><rect x="193.1" y="453" width="0.6" height="15.0" fill="rgb(213,41,9)" rx="2" ry="2" />
+<text  x="196.12" y="463.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::at (487,190 samples, 0.05%)</title><rect x="678.2" y="485" width="0.4" height="15.0" fill="rgb(220,69,16)" rx="2" ry="2" />
+<text  x="681.22" y="495.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::vector (1,402,431 samples, 0.14%)</title><rect x="474.3" y="293" width="1.1" height="15.0" fill="rgb(220,72,17)" rx="2" ry="2" />
+<text  x="477.26" y="303.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;* std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt; &gt; &gt; &gt;::_M_create_node&lt;std::piecewise_construct_t const&amp;, std::tuple&lt;unsigned short const&amp;&gt;, std::tuple&lt;&gt; &gt; (229,116 samples, 0.02%)</title><rect x="99.5" y="421" width="0.2" height="15.0" fill="rgb(231,123,29)" rx="2" ry="2" />
+<text  x="102.47" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;::operator-- (356,677 samples, 0.04%)</title><rect x="272.5" y="421" width="0.3" height="15.0" fill="rgb(223,86,20)" rx="2" ry="2" />
+<text  x="275.48" y="431.5" ></text>
+</g>
+<g >
+<title>std::allocator&lt;double&gt;::allocate (156,472 samples, 0.02%)</title><rect x="413.2" y="421" width="0.2" height="15.0" fill="rgb(221,76,18)" rx="2" ry="2" />
+<text  x="416.23" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::AntennaModel&gt;::Ptr (200,719 samples, 0.02%)</title><rect x="669.8" y="485" width="0.2" height="15.0" fill="rgb(215,49,11)" rx="2" ry="2" />
+<text  x="672.81" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::RngStream::RandU01 (646,005 samples, 0.07%)</title><rect x="495.4" y="517" width="0.5" height="15.0" fill="rgb(232,126,30)" rx="2" ry="2" />
+<text  x="498.41" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultDeleter&lt;ns3::EventImpl&gt;::Delete (9,050,608 samples, 0.93%)</title><rect x="770.0" y="709" width="7.3" height="15.0" fill="rgb(240,163,39)" rx="2" ry="2" />
+<text  x="773.01" y="719.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; &gt; &gt;::_M_valptr (354,218 samples, 0.04%)</title><rect x="180.6" y="405" width="0.3" height="15.0" fill="rgb(249,206,49)" rx="2" ry="2" />
+<text  x="183.62" y="415.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::DlInfoListElement_s::HarqStatus_e, std::allocator&lt;ns3::DlInfoListElement_s::HarqStatus_e&gt; &gt;::end (190,162 samples, 0.02%)</title><rect x="261.6" y="373" width="0.1" height="15.0" fill="rgb(208,14,3)" rx="2" ry="2" />
+<text  x="264.58" y="383.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;* std::__do_uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; const*, std::vector&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;, std::allocator&lt;std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt; &gt; &gt; &gt;, std::vector&lt;ns3::RlcPduListElement_s, std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;*&gt; (262,535 samples, 0.03%)</title><rect x="204.9" y="341" width="0.2" height="15.0" fill="rgb(247,196,47)" rx="2" ry="2" />
+<text  x="207.92" y="351.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned short const, std::vector&lt;ns3::DlDciListElement_s, std::allocator&lt;ns3::DlDciListElement_s&gt; &gt; &gt; &gt;::_M_ptr (194,523 samples, 0.02%)</title><rect x="184.0" y="453" width="0.1" height="15.0" fill="rgb(228,109,26)" rx="2" ry="2" />
+<text  x="186.98" y="463.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider*&gt; &gt; &gt;::find (1,655,067 samples, 0.17%)</title><rect x="565.5" y="213" width="1.3" height="15.0" fill="rgb(225,93,22)" rx="2" ry="2" />
+<text  x="568.49" y="223.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, unsigned char, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, unsigned char&gt; &gt; &gt;::find (152,374 samples, 0.02%)</title><rect x="94.3" y="469" width="0.1" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
+<text  x="97.28" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::LteUePowerControl::GetPuschTxPower (1,618,983 samples, 0.17%)</title><rect x="681.1" y="549" width="1.3" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
+<text  x="684.12" y="559.5" ></text>
+</g>
+<g >
+<title>std::function&lt;void  (4,103,031 samples, 0.42%)</title><rect x="418.1" y="517" width="3.3" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="421.09" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::MobilityModel::GetPosition (262,140 samples, 0.03%)</title><rect x="649.3" y="517" width="0.2" height="15.0" fill="rgb(217,59,14)" rx="2" ry="2" />
+<text  x="652.28" y="527.5" ></text>
+</g>
+<g >
+<title>ns3::DefaultSimulatorImpl::Now (240,092 samples, 0.02%)</title><rect x="485.3" y="485" width="0.2" height="15.0" fill="rgb(213,40,9)" rx="2" ry="2" />
+<text  x="488.33" y="495.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;ns3::MacCeListElement_s*, std::vector&lt;ns3::MacCeListElement_s, std::allocator&lt;ns3::MacCeListElement_s&gt; &gt; &gt; std::vector&lt;ns3::MacCeListElement_s, std::allocator&lt;ns3::MacCeListElement_s&gt; &gt;::insert&lt;__gnu_cxx::__normal_iterator&lt;ns3::MacCeListElement_s*, std::vector&lt;ns3::MacCeListElement_s, std::allocator&lt;ns3::MacCeListElement_s&gt; &gt; &gt;, void&gt; (271,036 samples, 0.03%)</title><rect x="93.2" y="501" width="0.2" height="15.0" fill="rgb(223,85,20)" rx="2" ry="2" />
+<text  x="96.17" y="511.5" ></text>
+</g>
+<g >
+<title>[libm.so.6] (281,723 samples, 0.03%)</title><rect x="477.0" y="309" width="0.3" height="15.0" fill="rgb(208,16,4)" rx="2" ry="2" />
+<text  x="480.05" y="319.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::_Temporary_value::_M_ptr (155,817 samples, 0.02%)</title><rect x="251.5" y="437" width="0.1" height="15.0" fill="rgb(251,212,50)" rx="2" ry="2" />
+<text  x="254.52" y="447.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumModel const&gt;::Ptr (138,401 samples, 0.01%)</title><rect x="315.4" y="405" width="0.2" height="15.0" fill="rgb(232,125,30)" rx="2" ry="2" />
+<text  x="318.45" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::LteAmc::GetMcsFromCqi (160,208 samples, 0.02%)</title><rect x="232.0" y="485" width="0.1" height="15.0" fill="rgb(234,135,32)" rx="2" ry="2" />
+<text  x="234.97" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_S_right (316,628 samples, 0.03%)</title><rect x="274.7" y="421" width="0.2" height="15.0" fill="rgb(238,153,36)" rx="2" ry="2" />
+<text  x="277.65" y="431.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::end (197,575 samples, 0.02%)</title><rect x="419.7" y="325" width="0.1" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
+<text  x="422.68" y="335.5" ></text>
+</g>
+<g >
+<title>void std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::_M_insert&lt;ns3::Ptr&lt;ns3::Packet&gt; const&amp;&gt; (1,745,012 samples, 0.18%)</title><rect x="22.2" y="325" width="1.4" height="15.0" fill="rgb(234,135,32)" rx="2" ry="2" />
+<text  x="25.19" y="335.5" ></text>
+</g>
+<g >
+<title>ns3::LogComponent::IsEnabled (301,297 samples, 0.03%)</title><rect x="643.0" y="517" width="0.3" height="15.0" fill="rgb(214,43,10)" rx="2" ry="2" />
+<text  x="646.03" y="527.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::end (245,937 samples, 0.03%)</title><rect x="479.2" y="277" width="0.2" height="15.0" fill="rgb(218,63,15)" rx="2" ry="2" />
+<text  x="482.24" y="287.5" ></text>
+</g>
+<g >
+<title>std::__new_allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;ns3::TbId_t const, ns3::tbInfo_t&gt; &gt; &gt;::allocate (264,767 samples, 0.03%)</title><rect x="384.5" y="405" width="0.2" height="15.0" fill="rgb(219,65,15)" rx="2" ry="2" />
+<text  x="387.48" y="415.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::vector (1,527,153 samples, 0.16%)</title><rect x="126.1" y="389" width="1.2" height="15.0" fill="rgb(206,9,2)" rx="2" ry="2" />
+<text  x="129.10" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::BuildDataListElement_s::~BuildDataListElement_s (596,141 samples, 0.06%)</title><rect x="145.8" y="357" width="0.5" height="15.0" fill="rgb(215,47,11)" rx="2" ry="2" />
+<text  x="148.79" y="367.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::vector (270,534 samples, 0.03%)</title><rect x="646.5" y="405" width="0.3" height="15.0" fill="rgb(239,156,37)" rx="2" ry="2" />
+<text  x="649.53" y="415.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue&gt;&amp; std::_Mu&lt;ns3::Ptr&lt;ns3::SpectrumValue&gt;, false, false&gt;::operator (158,589 samples, 0.02%)</title><rect x="50.1" y="597" width="0.1" height="15.0" fill="rgb(240,162,38)" rx="2" ry="2" />
+<text  x="53.11" y="607.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumValue&gt;::Acquire (152,792 samples, 0.02%)</title><rect x="304.0" y="501" width="0.2" height="15.0" fill="rgb(211,28,6)" rx="2" ry="2" />
+<text  x="307.04" y="511.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__aligned_membuf&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider::ReportBufferStatusParameters&gt; &gt;::_M_ptr (164,987 samples, 0.02%)</title><rect x="568.9" y="293" width="0.1" height="15.0" fill="rgb(234,136,32)" rx="2" ry="2" />
+<text  x="571.88" y="303.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::SpectrumSignalParameters&gt;::operator (309,905 samples, 0.03%)</title><rect x="652.2" y="517" width="0.2" height="15.0" fill="rgb(243,179,42)" rx="2" ry="2" />
+<text  x="655.18" y="527.5" ></text>
+</g>
+<g >
+<title>std::_List_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;* std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_create_node&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; const&amp;&gt; (271,484 samples, 0.03%)</title><rect x="96.0" y="357" width="0.2" height="15.0" fill="rgb(230,116,27)" rx="2" ry="2" />
+<text  x="98.95" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::MemberSchedSapProvider&lt;ns3::PfFfMacScheduler&gt;::SchedDlTriggerReq (19,285,336 samples, 1.99%)</title><rect x="19.6" y="549" width="15.5" height="15.0" fill="rgb(247,193,46)" rx="2" ry="2" />
+<text  x="22.60" y="559.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned int, std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt;, std::_Select1st&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt;, std::less&lt;unsigned int&gt;, std::allocator&lt;std::pair&lt;unsigned int const, ns3::TxSpectrumModelInfo&gt; &gt; &gt;::find (2,702,236 samples, 0.28%)</title><rect x="320.4" y="469" width="2.2" height="15.0" fill="rgb(233,130,31)" rx="2" ry="2" />
+<text  x="323.44" y="479.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::list&lt;std::_List_const_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;, void&gt; (222,211 samples, 0.02%)</title><rect x="673.0" y="485" width="0.2" height="15.0" fill="rgb(224,90,21)" rx="2" ry="2" />
+<text  x="676.00" y="495.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;::_M_get_node (504,501 samples, 0.05%)</title><rect x="724.4" y="469" width="0.4" height="15.0" fill="rgb(241,167,39)" rx="2" ry="2" />
+<text  x="727.39" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::LteAmc::GetDlTbSizeFromMcs (517,023 samples, 0.05%)</title><rect x="174.9" y="485" width="0.4" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
+<text  x="177.88" y="495.5" ></text>
+</g>
+<g >
+<title>std::map&lt;unsigned short, std::vector&lt;double, std::allocator&lt;double&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt;::find (186,790 samples, 0.02%)</title><rect x="102.7" y="469" width="0.2" height="15.0" fill="rgb(209,22,5)" rx="2" ry="2" />
+<text  x="105.72" y="479.5" ></text>
+</g>
+<g >
+<title>void std::allocator_traits&lt;std::allocator&lt;std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; &gt; &gt;::destroy&lt;std::pair&lt;unsigned short const, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt; (198,551 samples, 0.02%)</title><rect x="233.0" y="389" width="0.1" height="15.0" fill="rgb(235,141,33)" rx="2" ry="2" />
+<text  x="235.95" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_iterator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;::operator (1,100,918 samples, 0.11%)</title><rect x="759.3" y="709" width="0.9" height="15.0" fill="rgb(205,0,0)" rx="2" ry="2" />
+<text  x="762.32" y="719.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_lower_bound (1,305,876 samples, 0.13%)</title><rect x="337.0" y="389" width="1.1" height="15.0" fill="rgb(229,113,27)" rx="2" ry="2" />
+<text  x="340.04" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned short, std::allocator&lt;unsigned short&gt; &gt;::_M_allocate (192,396 samples, 0.02%)</title><rect x="474.0" y="165" width="0.2" height="15.0" fill="rgb(220,70,16)" rx="2" ry="2" />
+<text  x="477.01" y="175.5" ></text>
+</g>
+<g >
+<title>ns3::TracedCallback&lt;ns3::PhyTransmissionStatParameters&gt;::operator (297,993 samples, 0.03%)</title><rect x="535.2" y="357" width="0.2" height="15.0" fill="rgb(254,228,54)" rx="2" ry="2" />
+<text  x="538.16" y="367.5" ></text>
+</g>
+<g >
+<title>ns3::Ptr&lt;ns3::MobilityModel const&gt;::Acquire (155,636 samples, 0.02%)</title><rect x="742.6" y="533" width="0.2" height="15.0" fill="rgb(237,148,35)" rx="2" ry="2" />
+<text  x="745.64" y="543.5" ></text>
+</g>
+<g >
+<title>ns3::DlInfoListElement_s* std::vector&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt;::_M_allocate_and_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::DlInfoListElement_s const*, std::vector&lt;ns3::DlInfoListElement_s, std::allocator&lt;ns3::DlInfoListElement_s&gt; &gt; &gt; &gt; (488,321 samples, 0.05%)</title><rect x="107.3" y="485" width="0.4" height="15.0" fill="rgb(248,198,47)" rx="2" ry="2" />
+<text  x="110.26" y="495.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::~_List_base (191,802 samples, 0.02%)</title><rect x="344.3" y="421" width="0.1" height="15.0" fill="rgb(221,74,17)" rx="2" ry="2" />
+<text  x="347.27" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt;::~_Vector_base (149,822 samples, 0.02%)</title><rect x="139.4" y="437" width="0.1" height="15.0" fill="rgb(241,168,40)" rx="2" ry="2" />
+<text  x="142.35" y="447.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;double, std::allocator&lt;double&gt; &gt;::_M_create_storage (423,769 samples, 0.04%)</title><rect x="300.5" y="421" width="0.3" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
+<text  x="303.48" y="431.5" ></text>
+</g>
+<g >
+<title>std::_Vector_base&lt;int, std::allocator&lt;int&gt; &gt;::_M_allocate (251,714 samples, 0.03%)</title><rect x="574.5" y="309" width="0.2" height="15.0" fill="rgb(216,52,12)" rx="2" ry="2" />
+<text  x="577.48" y="319.5" ></text>
+</g>
+<g >
+<title>ns3::operator/ (1,197,630 samples, 0.12%)</title><rect x="606.1" y="517" width="1.0" height="15.0" fill="rgb(218,63,15)" rx="2" ry="2" />
+<text  x="609.12" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapProvider::ReportBufferStatusParameters&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider::ReportBufferStatusParameters&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapProvider::ReportBufferStatusParameters&gt; &gt; &gt;::empty (151,905 samples, 0.02%)</title><rect x="690.3" y="485" width="0.2" height="15.0" fill="rgb(219,65,15)" rx="2" ry="2" />
+<text  x="693.34" y="495.5" ></text>
+</g>
+<g >
+<title>ns3::LteSpectrumValueHelper::GetSpectrumModel (2,046,878 samples, 0.21%)</title><rect x="297.1" y="485" width="1.6" height="15.0" fill="rgb(207,12,3)" rx="2" ry="2" />
+<text  x="300.07" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned short, std::pair&lt;unsigned short const, unsigned char&gt;, std::_Select1st&lt;std::pair&lt;unsigned short const, unsigned char&gt; &gt;, std::less&lt;unsigned short&gt;, std::allocator&lt;std::pair&lt;unsigned short const, unsigned char&gt; &gt; &gt;::find (848,294 samples, 0.09%)</title><rect x="176.7" y="453" width="0.7" height="15.0" fill="rgb(206,4,1)" rx="2" ry="2" />
+<text  x="179.75" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::NanoSeconds (241,154 samples, 0.02%)</title><rect x="424.7" y="213" width="0.2" height="15.0" fill="rgb(228,108,25)" rx="2" ry="2" />
+<text  x="427.72" y="223.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::clear (940,478 samples, 0.10%)</title><rect x="609.5" y="549" width="0.8" height="15.0" fill="rgb(252,216,51)" rx="2" ry="2" />
+<text  x="612.50" y="559.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::end (285,022 samples, 0.03%)</title><rect x="411.2" y="501" width="0.2" height="15.0" fill="rgb(237,147,35)" rx="2" ry="2" />
+<text  x="414.19" y="511.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree_node&lt;std::pair&lt;unsigned short const, std::vector&lt;ns3::DlDciListElement_s, std::allocator&lt;ns3::DlDciListElement_s&gt; &gt; &gt; &gt;::_M_valptr (194,523 samples, 0.02%)</title><rect x="184.0" y="469" width="0.1" height="15.0" fill="rgb(222,81,19)" rx="2" ry="2" />
+<text  x="186.98" y="479.5" ></text>
+</g>
+<g >
+<title>operator new (168,940 samples, 0.02%)</title><rect x="78.5" y="373" width="0.2" height="15.0" fill="rgb(216,51,12)" rx="2" ry="2" />
+<text  x="81.52" y="383.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::_M_clear (154,447 samples, 0.02%)</title><rect x="622.3" y="373" width="0.1" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
+<text  x="625.28" y="383.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::fill_n&lt;unsigned char*, unsigned long, unsigned char&gt; (149,553 samples, 0.02%)</title><rect x="102.0" y="389" width="0.1" height="15.0" fill="rgb(211,28,6)" rx="2" ry="2" />
+<text  x="105.01" y="399.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;unsigned char, std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt;, std::_Select1st&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt;, std::less&lt;unsigned char&gt;, std::allocator&lt;std::pair&lt;unsigned char const, ns3::LteMacSapUser*&gt; &gt; &gt;::_M_begin (307,839 samples, 0.03%)</title><rect x="168.1" y="421" width="0.2" height="15.0" fill="rgb(249,203,48)" rx="2" ry="2" />
+<text  x="171.10" y="431.5" ></text>
+</g>
+<g >
+<title>ns3::TypeId::GetParent (912,142 samples, 0.09%)</title><rect x="542.0" y="261" width="0.7" height="15.0" fill="rgb(211,29,7)" rx="2" ry="2" />
+<text  x="544.99" y="271.5" ></text>
+</g>
+<g >
+<title>ns3::HigherLayerSelected_s* std::__do_uninit_copy&lt;__gnu_cxx::__normal_iterator&lt;ns3::HigherLayerSelected_s const*, std::vector&lt;ns3::HigherLayerSelected_s, std::allocator&lt;ns3::HigherLayerSelected_s&gt; &gt; &gt;, ns3::HigherLayerSelected_s*&gt; (128,621 samples, 0.01%)</title><rect x="583.8" y="197" width="0.1" height="15.0" fill="rgb(244,179,43)" rx="2" ry="2" />
+<text  x="586.76" y="207.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;bool, std::allocator&lt;bool&gt; &gt;::_M_fill_insert (2,342,912 samples, 0.24%)</title><rect x="246.9" y="453" width="1.8" height="15.0" fill="rgb(229,112,26)" rx="2" ry="2" />
+<text  x="249.86" y="463.5" ></text>
+</g>
+<g >
+<title>ns3::LteMacSapProvider::TransmitPduParameters::TransmitPduParameters (537,941 samples, 0.06%)</title><rect x="151.6" y="389" width="0.4" height="15.0" fill="rgb(237,147,35)" rx="2" ry="2" />
+<text  x="154.59" y="399.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::splice (536,019 samples, 0.06%)</title><rect x="673.2" y="469" width="0.4" height="15.0" fill="rgb(220,70,16)" rx="2" ry="2" />
+<text  x="676.20" y="479.5" ></text>
+</g>
+<g >
+<title>decltype  (273,321 samples, 0.03%)</title><rect x="331.9" y="389" width="0.2" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="334.88" y="399.5" ></text>
+</g>
+<g >
+<title>ns3::EnbMacMemberLteMacSapProvider&lt;ns3::LteEnbMac&gt;::TransmitPdu (5,428,262 samples, 0.56%)</title><rect x="19.6" y="389" width="4.4" height="15.0" fill="rgb(239,157,37)" rx="2" ry="2" />
+<text  x="22.60" y="399.5" ></text>
+</g>
+<g >
+<title>__gnu_cxx::__normal_iterator&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;*, std::vector&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt; &gt; &gt; &gt; std::__copy_move_a&lt;true, __gnu_cxx::__normal_iterator&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;*, std::vector&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt; &gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;*, std::vector&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt;, std::allocator&lt;std::__cxx11::list&lt;ns3::UlDciLteControlMessage, std::allocator&lt;ns3::UlDciLteControlMessage&gt; &gt; &gt; &gt; &gt; &gt; (253,831 samples, 0.03%)</title><rect x="110.5" y="469" width="0.2" height="15.0" fill="rgb(230,116,27)" rx="2" ry="2" />
+<text  x="113.50" y="479.5" ></text>
+</g>
+<g >
+<title>ns3::IidManager::GetParent (351,090 samples, 0.04%)</title><rect x="632.1" y="453" width="0.3" height="15.0" fill="rgb(217,59,14)" rx="2" ry="2" />
+<text  x="635.09" y="463.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Callback&lt;void, unsigned short, unsigned char, unsigned int&gt;, std::allocator&lt;ns3::Callback&lt;void, unsigned short, unsigned char, unsigned int&gt; &gt; &gt;::end (164,697 samples, 0.02%)</title><rect x="567.3" y="245" width="0.1" height="15.0" fill="rgb(217,56,13)" rx="2" ry="2" />
+<text  x="570.26" y="255.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::Buffer::Data*, std::allocator&lt;ns3::Buffer::Data*&gt; &gt;::end (540,003 samples, 0.06%)</title><rect x="556.7" y="165" width="0.4" height="15.0" fill="rgb(223,86,20)" rx="2" ry="2" />
+<text  x="559.68" y="175.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_M_get_node (270,834 samples, 0.03%)</title><rect x="108.6" y="389" width="0.2" height="15.0" fill="rgb(221,75,17)" rx="2" ry="2" />
+<text  x="111.56" y="399.5" ></text>
+</g>
+<g >
+<title>unsigned char* std::__copy_move&lt;false, true, std::random_access_iterator_tag&gt;::__copy_m&lt;unsigned char const, unsigned char&gt; (185,914 samples, 0.02%)</title><rect x="688.0" y="341" width="0.2" height="15.0" fill="rgb(235,140,33)" rx="2" ry="2" />
+<text  x="691.03" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::LteEnbPhy::SendControlChannels (6,963,923 samples, 0.72%)</title><rect x="111.4" y="533" width="5.6" height="15.0" fill="rgb(227,105,25)" rx="2" ry="2" />
+<text  x="114.35" y="543.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::list&lt;ns3::Ptr&lt;ns3::Packet&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::Packet&gt; &gt; &gt;::clear (1,317,063 samples, 0.14%)</title><rect x="75.6" y="357" width="1.1" height="15.0" fill="rgb(217,58,13)" rx="2" ry="2" />
+<text  x="78.64" y="367.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy_aux&lt;true&gt;::__destroy&lt;ns3::DlInfoListElement_s::HarqStatus_e*&gt; (190,409 samples, 0.02%)</title><rect x="256.8" y="341" width="0.1" height="15.0" fill="rgb(226,96,23)" rx="2" ry="2" />
+<text  x="259.78" y="351.5" ></text>
+</g>
+<g >
+<title>ns3::SpectrumValue::operator= (140,552 samples, 0.01%)</title><rect x="601.4" y="325" width="0.2" height="15.0" fill="rgb(243,177,42)" rx="2" ry="2" />
+<text  x="604.44" y="335.5" ></text>
+</g>
+<g >
+<title>std::allocator_traits&lt;std::allocator&lt;ns3::RlcPduListElement_s&gt; &gt;::allocate (190,161 samples, 0.02%)</title><rect x="212.9" y="357" width="0.1" height="15.0" fill="rgb(238,154,36)" rx="2" ry="2" />
+<text  x="215.85" y="367.5" ></text>
+</g>
+<g >
+<title>std::_List_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; std::__cxx11::list&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt; &gt;::insert&lt;std::_List_const_iterator&lt;ns3::Ptr&lt;ns3::LteControlMessage&gt; &gt;, void&gt; (704,280 samples, 0.07%)</title><rect x="346.4" y="485" width="0.6" height="15.0" fill="rgb(210,23,5)" rx="2" ry="2" />
+<text  x="349.44" y="495.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;ns3::Scheduler::EventKey, std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt;, std::_Select1st&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt;, std::less&lt;ns3::Scheduler::EventKey&gt;, std::allocator&lt;std::pair&lt;ns3::Scheduler::EventKey const, ns3::EventImpl*&gt; &gt; &gt;::_S_key (161,364 samples, 0.02%)</title><rect x="271.6" y="405" width="0.1" height="15.0" fill="rgb(214,42,10)" rx="2" ry="2" />
+<text  x="274.61" y="415.5" ></text>
+</g>
+<g >
+<title>std::__cxx11::_List_base&lt;ns3::Ptr&lt;ns3::PacketBurst&gt;, std::allocator&lt;ns3::Ptr&lt;ns3::PacketBurst&gt; &gt; &gt;::_M_put_node (158,232 samples, 0.02%)</title><rect x="501.2" y="517" width="0.1" height="15.0" fill="rgb(229,114,27)" rx="2" ry="2" />
+<text  x="504.20" y="527.5" ></text>
+</g>
+<g >
+<title>std::_Rb_tree&lt;int, std::pair&lt;int const, double&gt;, std::_Select1st&lt;std::pair&lt;int const, double&gt; &gt;, std::less&lt;int&gt;, std::allocator&lt;std::pair&lt;int const, double&gt; &gt; &gt;::_M_erase (598,182 samples, 0.06%)</title><rect x="60.6" y="437" width="0.5" height="15.0" fill="rgb(227,102,24)" rx="2" ry="2" />
+<text  x="63.62" y="447.5" ></text>
+</g>
+<g >
+<title>void std::_Destroy&lt;ns3::Ptr&lt;ns3::Object&gt;*, ns3::Ptr&lt;ns3::Object&gt; &gt; (154,688 samples, 0.02%)</title><rect x="635.4" y="293" width="0.1" height="15.0" fill="rgb(226,98,23)" rx="2" ry="2" />
+<text  x="638.37" y="303.5" ></text>
+</g>
+<g >
+<title>std::vector&lt;ns3::HarqProcessInfoElement_t, std::allocator&lt;ns3::HarqProcessInfoElement_t&gt; &gt;::operator= (2,176,138 samples, 0.22%)</title><rect x="349.9" y="421" width="1.8" height="15.0" fill="rgb(253,222,53)" rx="2" ry="2" />
+<text  x="352.92" y="431.5" ></text>
+</g>
+</g>
+</svg>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/doc/manual/source/profiling.rst ns-3.45/doc/manual/source/profiling.rst
--- ns-3.44/doc/manual/source/profiling.rst	2025-03-09 16:55:49.271370600 -0700
+++ ns-3.45/doc/manual/source/profiling.rst	2025-06-01 20:34:45.237701000 -0700
@@ -489,6 +489,167 @@
 An overview on how to use `Perf`_ with `Hotspot`_, `AMD uProf`_ and
 `Intel VTune`_ is provided in the following sections.
 
+.. _Profiling and optimization :
+
+Profiling and optimization
+++++++++++++++++++++++++++
+
+While profilers will help point out interest hotspots, they won't help fixing the issues.
+At least for now...
+
+After profiling, optimization should be done following the Pareto principle.
+Focus first on least amount of work that can provide most benefits.
+Let us see an example, based on ``lte-frequency-reuse``. In the example
+below you will see a flamegraph generated from the CPU-``cycles`` metrics
+collected by perf for this LTE example.
+
+.. image:: figures/perf-lte-frequency-reuse.png
+
+The vertical axis contain stacked bars. Every bar corresponds to a function.
+The stack itself represents the call stack (when a function call other,
+and other, etc). The width of each bar corresponds to the time it takes to
+execute the function itself and the functions it calls (bars on top of it).
+This is where we start looking for bottlenecks. Start looking at widest
+columns at the top, and move down. As an example, we can select
+``LteChunkProcessor::End()`` (highlighted in purple).
+
+.. image:: figures/perf-chunk-processor.png
+
+If we click on the ``LteChunkProcessor::End()``, we have a closer view of
+where it is actually spending time on. We can see many bars related to callback
+indirections. Note that each  bar is slightly shorter and offset to the right.
+This small difference is the overhead of each function call. When everything
+is added together, it corresponds to about 35% of total time of
+``LteChunkProcessor::End()``. Yes, callbacks are really expensive,
+even in optimized builds. Now, let us take a look at the big gap and big
+``LteAmc`` function being called by this callback.
+
+.. image:: figures/perf-detail.png
+
+Now that we are closed to the top of the stack, we have a better idea of
+what is actually happening and can optimize more easily.
+
+For example, notice that about 14% of ``LteAmc::CreateCqiFeedbacks()`` is
+spent on itself (gap on top of bar). This usually means one of the following:
+
+- many conditional operations (if-else, switches), causing instruction cache-misses or pipeline stalls in case of wrong branch prediction
+- accessing data in erratic patterns, causing data cache-misses
+- waiting for a value to be computed at a congested CPU unit (e.g. slow division, trigonometric), causing pipeline stalls
+- a lot of actual work, also known as retired instructions
+
+To check which case it really is, instead of CPU-``cycles``, one can collect complementary metrics
+such as ``cache-misses``, ``branch-misses``, ``stalled-cycles-frontend``, ``stalled-cycles-backend``.
+It is easy to spot which one of them is the actual culprit, because its bar will be wider.
+After figuring out the issue, you need to look at the code to locate the source of the issue.
+Some profilers, such as `Intel VTune`_ and `AMD uProf`_ can give you the rough location of the
+instructions (line of code) causing these misses and stalls.
+
+We also see that 86% of the time is spent elsewhere. In LteMiErrorModel, and some vector related calls.
+One of these vector calls is ``push_back``, which takes incredible 30% of the time.
+Now let us look at the code to see where we can improve it.
+
+.. sourcecode:: cpp
+
+    std::vector<int>
+    LteAmc::CreateCqiFeedbacks(const SpectrumValue& sinr, uint8_t rbgSize)
+    {
+        NS_LOG_FUNCTION(this);
+
+        std::vector<int> cqi;
+
+        if (m_amcModel == MiErrorModel)
+        {
+            NS_LOG_DEBUG(this << " AMC-VIENNA RBG size " << (uint16_t)rbgSize);
+            NS_ASSERT_MSG(rbgSize > 0, " LteAmc-Vienna: RBG size must be greater than 0");
+            std::vector<int> rbgMap;
+            int rbId = 0;
+            for (auto it = sinr.ConstValuesBegin(); it != sinr.ConstValuesEnd(); it++)
+            {
+                /// WE CAN CUT 30% OF TIME BY AVOIDING THESE REALLOCATIONS WITH rbgMap.resize(rbgSize) AT BEGINNING
+                /// THEN USING std::iota(rbgMap.begin(), rbgMap.end(),rbId+1-rbgSize) INSIDE THE NEXT IF
+                rbgMap.push_back(rbId++);
+                if ((rbId % rbgSize == 0) || ((it + 1) == sinr.ConstValuesEnd()))
+                {
+                    uint8_t mcs = 0;
+                    TbStats_t tbStats;
+                    while (mcs <= 28)
+                    {
+                        HarqProcessInfoList_t harqInfoList;
+                        tbStats = LteMiErrorModel::GetTbDecodificationStats(
+                            sinr,
+                            rbgMap,
+                            (uint16_t)GetDlTbSizeFromMcs(mcs, rbgSize) / 8, /// DIVISIONS ARE EXPENSIVE. OPTIMIZER WILL
+                                                                            /// REPLACE THIS TRIVIAL CASE WITH >> 3,
+                                                                            /// BUT THIS ISN'T ALWAYS THE CASE.
+                                                                            /// IF THE DIVISION IS BY A LOOP INVARIANT,
+                                                                            /// THEN COMPUTE ITS INVERSE OUTSIDE
+                                                                            /// THE LOOP TO REPLACE THE DIVISION WITH
+                                                                            /// A MULTIPLICATION.
+                            mcs,
+                            harqInfoList);
+                        if (tbStats.tbler > 0.1)
+                        {
+                            break;
+                        }
+                        mcs++;
+                    }
+                    if (mcs > 0)
+                    {
+                        mcs--;
+                    }
+                    NS_LOG_DEBUG(this << "\t RBG " << rbId << " MCS " << (uint16_t)mcs << " TBLER "
+                                      << tbStats.tbler);
+                    int rbgCqi = 0;
+                    if ((tbStats.tbler > 0.1) && (mcs == 0))
+                    {
+                        rbgCqi = 0; // any MCS can guarantee the 10 % of BER
+                    }
+                    else if (mcs == 28)
+                    {
+                        rbgCqi = 15; // all MCSs can guarantee the 10 % of BER
+                    }
+                    else
+                    {
+                        double s = SpectralEfficiencyForMcs[mcs];
+                        rbgCqi = 0;
+                        while ((rbgCqi < 15) && (SpectralEfficiencyForCqi[rbgCqi + 1] < s))
+                        {
+                            ++rbgCqi;
+                        }
+                    }
+                    NS_LOG_DEBUG(this << "\t MCS " << (uint16_t)mcs << "-> CQI " << rbgCqi);
+                    // fill the cqi vector (per RB basis)
+                    /// WE CAN CUT 30% OF TIME BY AVOIDING THESE REALLOCATIONS WITH cqi.resize(cqi.size()+rbgSize)
+                    /// THEN std::fill(cqi.rbegin(), cqi.rbegin()+rbgSize, rbgCqi)
+                    for (uint8_t j = 0; j < rbgSize; j++)
+                    {
+                        cqi.push_back(rbgCqi);
+                    }
+                    rbgMap.clear();
+                }
+            }
+        }
+
+        return cqi;
+    }
+
+
+Try to explore by yourself with the interactive flamegraph below
+(only available for html-based documentation).
+
+.. raw:: html
+    :file: figures/perf.svg
+
+Note: interactive flamegraph SVGs were generated with `perf.data` output exported by Linux Perf,
+then transformed to text and finally rendered as SVG.
+
+.. sourcecode:: console
+
+    git clone https://github.com/brendangregg/FlameGraph
+    ./FlameGraph/stackcollapse-perf.pl perf.data > perf.folded
+    ./FlameGraph/flamegraph.pl perf.folded --width=800 > perf.svg
+
+
 .. _Linux Perf and Hotspot GUI :
 
 Linux Perf and Hotspot GUI
@@ -646,7 +807,11 @@
 
 .. sourcecode:: console
 
-    apt install flex bison
+    sudo apt install git flex bison libdwarf-dev libelf-dev libnuma-dev \
+             libunwind-dev libnewt-dev libdwarf++0 libelf++0 libdw-dev \
+             libbfb0-dev systemtap-sdt-dev libssl-dev libperl-dev \
+             python-dev-is-python3 binutils-dev libiberty-dev libzstd-dev \
+             libcap-dev libbabeltrace-dev libpfm4-dev libtraceevent-dev pkg-config
     git clone https://github.com/microsoft/WSL2-Linux-Kernel --depth 1
     cd WSL2-Linux-Kernel/tools/perf
     make -j8
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/doc/manual/source/python.rst ns-3.45/doc/manual/source/python.rst
--- ns-3.44/doc/manual/source/python.rst	2025-03-09 16:55:49.271370600 -0700
+++ ns-3.45/doc/manual/source/python.rst	2025-06-01 20:34:45.237701000 -0700
@@ -173,9 +173,9 @@
 Running Python Scripts
 **********************
 
-For users that want to change upstream modules in C++ and got a copy of
-ns-3 by Git cloning the ns-3-dev repository, or downloaded the
-ns3-allinone package, or is using bake, continue to the next section.
+For users who want to change upstream modules in C++ and who obtained a copy of
+ns-3 by Git cloning the ns-3-dev repository, or by downloading a released
+source archive, continue to the next section.
 
 `Note: models implemented in Python are not available from C++. If you want
 your model to be available for both C++ and Python users, you must implement
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/doc/models/Makefile ns-3.45/doc/models/Makefile
--- ns-3.44/doc/models/Makefile	2025-03-09 16:55:49.275370600 -0700
+++ ns-3.45/doc/models/Makefile	2025-06-01 20:34:45.239701000 -0700
@@ -118,6 +118,8 @@
 	$(SRC)/applications/doc/http-num-of-embedded-objects.png \
 	$(SRC)/applications/doc/http-parsing-time.png \
 	$(SRC)/applications/doc/http-reading-time.png \
+	$(SRC)/dsr/doc/figures/dsrRreq.dia \
+	$(SRC)/dsr/doc/figures/dsrRrep.dia \
 	$(SRC)/network/doc/packet.dia \
 	$(SRC)/network/doc/node.dia \
 	$(SRC)/network/doc/buffer.dia \
@@ -367,6 +369,7 @@
 	$(SRC)/lr-wpan/doc/802-15-4-ber.eps \
 	$(SRC)/lr-wpan/doc/802-15-4-per-sens.eps \
 	$(SRC)/lr-wpan/doc/802-15-4-psr-distance.eps \
+	$(SRC)/flow-monitor/doc/figures/flowmonitorArq.dia \
 	$(SRC)/energy/doc/figures/dischargeCurve.png \
 	$(SRC)/energy/doc/figures/energyFramework.dia \
 	$(SRC)/energy/doc/figures/leadacid.png \
@@ -375,7 +378,9 @@
 	$(SRC)/energy/doc/figures/nimh.png \
 	$(SRC)/zigbee/doc/figures/zigbeeStackArch.dia \
 	$(SRC)/zigbee/doc/figures/manyToOne.dia \
-	$(SRC)/zigbee/doc/figures/mesh.dia
+	$(SRC)/zigbee/doc/figures/mesh.dia \
+	$(SRC)/internet-apps/doc/figures/dhcpv6-message-exchange.dia \
+	$(SRC)/internet-apps/doc/figures/stateful-dhcpv6-format.dia
 
 # specify figures from which .png and .pdf figures need to be
 # generated (all dia and eps figures)
@@ -474,6 +479,9 @@
 	$(FIGURES)/802-15-4-per-sens.eps \
 	$(FIGURES)/802-15-4-psr-distance.eps \
 	$(FIGURES)/energyFramework.eps \
+	$(FIGURES)/flowmonitorArq.eps \
+	$(FIGURES)/dsrRreq.eps \
+	$(FIGURES)/dsrRrep.eps \
 	$(FIGURES)/clear-channel.eps \
 	$(FIGURES)/assoc-manager.eps \
 	$(FIGURES)/emlsr-dl-txop.eps \
@@ -500,7 +508,10 @@
 	$(FIGURES)/lena-radio-link-failure-two-enb.eps \
 	$(FIGURES)/zigbeeStackArch.eps \
 	$(FIGURES)/manyToOne.eps \
-	$(FIGURES)/mesh.eps
+	$(FIGURES)/mesh.eps \
+	$(FIGURES)/dhcpv6-message-exchange.eps \
+	$(FIGURES)/stateful-dhcpv6-format.eps
+
 
 # rescale pdf figures as necessary
 $(FIGURES)/testbed.pdf_width = 5in
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/doc/models/source/conf.py ns-3.45/doc/models/source/conf.py
--- ns-3.44/doc/models/source/conf.py	2025-03-09 16:56:09.315445400 -0700
+++ ns-3.45/doc/models/source/conf.py	2025-06-01 20:35:04.008764000 -0700
@@ -74,9 +74,9 @@
 # built documents.
 #
 # The short X.Y version.
-version = "ns-3.44"
+version = "ns-3.45"
 # The full version, including alpha/beta/rc tags.
-release = "ns-3.44"
+release = "ns-3.45"
 
 # The language for content autogenerated by Sphinx. Refer to documentation
 # for a list of supported languages.
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/doc/release_steps.txt ns-3.45/doc/release_steps.txt
--- ns-3.44/doc/release_steps.txt	2025-03-09 16:55:49.275370600 -0700
+++ ns-3.45/doc/release_steps.txt	2025-06-01 20:34:45.240701000 -0700
@@ -1,14 +1,22 @@
 Steps in doing an ns-3 release
 
-We typically post release candidates for testing at the following URL:
-https://www.nsnam.org/release/ns-allinone-3.X.rcX.tar.bz2
+Starting with ns-3.45, there are two release versions-- the "mainline"
+release (ns-3-dev by itself) and the "allinone" release (ns-3 plus
+compatible app store modules).
 
-This overview covers the following release stages:
+We typically post release candidates for testing at the following URLs:
+
+(mainline): https://www.nsnam.org/release/ns-3.X.rcX.tar.bz2
+(allinone): https://www.nsnam.org/release/ns-allinone-3.X.rcX.tar.bz2
+
+This overview covers the following release stages for the mainline release:
 1) new feature additions and bug fixing
 2) preparing release candidates for testing
 3) making the actual release
 4) maintaining the release
 
+Some additional notes for the allinone release are also included.
+
 1) new feature additions and bug fixing
 ---------------------------------------
 
@@ -26,48 +34,41 @@
 -------------------------------------------
 
 This step presumes that you have a reasonably solid ns-3-dev that you
-and/or the buildbots have been testing
+and/or the CI have been testing
    - building static, optimized, and debug versions
    - try Python visualizer (not tested by buildbots)
       -- ./ns3 run src/flow-monitor/examples/wifi-olsr-flowmon.py --vis
-   - ensure that tests pass (./test.py -g) and make sure that the buildbots
+   - ensure that tests pass (./test.py -g) and make sure that the CI scripts
      are reporting 'pass' state, based on the tip of the repository
    - revise and check in AUTHORS, RELEASE_NOTES.md, and CHANGES.html
    - required versions for related libraries (netanim, cppyy)
      are correct
    - confirm that Doxygen builds cleanly (./ns3 doxygen),
-   - confirm that the new bake configurations for the release work correctly
    - confirm all documents build:  './ns3 docs' and check outputs
 
 2.1)  Update the tutorial "Getting Started" and "Quick Start" pages to use the new release number.
 
 An example commit (July 14, 2021) to review is 9df8ef4b2.
 
-2.2) Prepare some bakeconf.xml updates for the new release.  Note that the
-new release 'ns-3.x' will not be yet available as a tagged release, so
-the 'ns-3.x' module may need some indirection to fetch ns-3-dev in its place.
-
-2.3) Check out a clean ns-3-dev somewhere using ns-3-allinone
+2.2) Check out a clean ns-3-dev somewhere using ns-3-allinone
    - git clone https://gitlab.com/nsnam/ns-3-allinone.git
    - cd ns-3-allinone
-   - ./download.py
+   - git clone https://gitlab.com/nsnam/ns-3-dev.git
    - cd ns-3-dev
-   - edit VERSION such as "ns-3.31.rc1" (DO NOT commit this change to ns-3-dev)
+   - edit VERSION such as "ns-3.45.rc1" (DO NOT commit this change to ns-3-dev)
    - generate a version.cache file via './ns3 configure --enable-build-version'
    - remove other files generated by the previous step ('./ns3 clean')
-   - cd ../bake
-   - copy over the modified bakeconf.xml that is being tested
    - cd ..
    - ./dist.py
 
-This should yield a compressed tarfile, such as:  ns-allinone-3.31.rc1.tar.bz2
+This should yield a compressed tarfile, such as:  ns-3.45.rc1.tar.bz2
 Test this, and when satisfied, upload it to
 www.nsnam.org:/var/www/html/releases/ (with apache:apache file ownership)
 
 Release candidates from previous releases can be deleted at this point.
 
 Announce the release candidate to ns-developers as:
-https://www.nsnam.org/release/ns-allinone-3.31.rc1.tar.bz2
+https://www.nsnam.org/release/ns-3.45.rc1.tar.bz2
 
 Iterate the above as needed during the release testing phase.
 
@@ -95,31 +96,25 @@
 
 $ git log --graph --decorate --oneline --all
 * 4b27025 (master) Update release files to start next release
-*   fd075f6 Merge ns-3.34-release branch
+*   fd075f6 Merge ns-3.45-release branch
 |\
-| * 3fab3cf (HEAD, tag: ns-3.34) Update availability in RELEASE_NOTES
-| * c50aaf7 Update VERSION and documentation tags for ns-3.34 release
+| * 3fab3cf (HEAD, tag: ns-3.45) Update availability in RELEASE_NOTES
+| * c50aaf7 Update VERSION and documentation tags for ns-3.45 release
 |/
 * 9df8ef4 doc: Update ns-3 version in tutorial examples
 * 9319cdd (origin/master, origin/HEAD) Update CHANGES.html and RELEASE_NOTES
 
-2.  Create a final bakeconf.xml and commit it.
-
-Now that the ns-3.34 tagged release is available, a final bakeconf.xml with
-final release components can be committed.  For a sample commit, view
-bake commit ba47854c (July 14, 2021).
-
-3.  Create a final distribution tarball
+2.  Create a final distribution tarball (here, 'nn' stands for the version number):
    - git clone https://gitlab.com/nsnam/ns-3-allinone.git
    - cd ns-3-allinone
    - ./download.py
    - cd ns-3-dev
-   - git checkout -b 'ns-3.x-release' ns-3.x
+   - git checkout -b 'ns-3.nn-release' ns-3.nn
    - ./ns3 configure --enable-build-version
    - ./ns3 clean
    - cd ../
    - ./dist.py (notice we did not build here)
-   - this will create an ns-allinone-3.x.tar.bz2 tarball
+   - this will create an ns-3.nn.tar.bz2 tarball
 
 Make sure that the version.cache file included in the source archive looks
 something like the below example:
@@ -135,32 +130,28 @@
 VERSION_TAG_DISTANCE = '0'
 VERSION_BUILD_PROFILE = 'default'
 
-4.  Test this tarball on at least one system
-   - check that ns-3-allinone build.py works
-   - check that bake ns-3.x and ns-allinone-3.x targets work
+4.  Test this tarball works on at least one system
 
-5. upload "ns-allinone-3.x.tar.bz2" to the /var/www/html/releases/ directory on
+5. upload "ns-3.nn.tar.bz2" to the /var/www/html/releases/ directory on
    the www.nsnam.org server
-   - scp ns-allinone-3.x.tar.bz2 www.nsnam.org:~
+   - scp ns-3.nn.tar.bz2 www.nsnam.org:~
    - ssh www.nsnam.org
-   - sudo cp ns-allinone-3.x.tar.bz2 /var/www/html/releases
+   - sudo cp ns-3.nn.tar.bz2 /var/www/html/releases
    - cd !$
 
 6. give it 644 file permissions, and user/group = apache if it is not already
-   - sudo chown apache:apache ns-allinone-3.x.tar.bz2
-   - sudo chmod 644 ns-allinone-3.x.tar.bz2
+   - sudo chown apache:apache ns-3.nn.tar.bz2
+   - sudo chmod 644 ns-3.nn.tar.bz2
 
 7. Create a patch file for the releases/patches directory, and upload it
    to the server.  The main idea is to extract the previous release's
-   ns-3.(x-1) directory and the new ns-3.x directory, and run a diff over it.
+   ns-3.(nn-1) directory and the new ns-3.nn directory, and run a diff over it.
    - mkdir patchdir && cd patchdir
-   - wget https://www.nsnam.org/releases/ns-allinone-3.(x-1).tar.bz2
-   - tar xjf ns-allinone-3.(x-1).tar.bz2
-   - mv ns-allinone-3.(x-1)/ns-3.(x-1) .
-   - wget https://www.nsnam.org/releases/ns-allinone-3.x.tar.bz2
-   - tar xjf ns-allinone-3.x.tar.bz2
-   - mv ns-allinone-3.x/ns-3.x .
-   - diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.(x-1) ns-3.x > ns-3.(x-1)-to-ns-3.x.patch
+   - wget https://www.nsnam.org/releases/ns-3.(nn-1).tar.bz2
+   - tar xjf ns-3.(nn-1).tar.bz2
+   - wget https://www.nsnam.org/releases/ns-3.nn.tar.bz2
+   - tar xjf ns-3.nn.tar.bz2
+   - diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.(nn-1) ns-3.nn > ns-3.(nn-1)-to-ns-3.nn.patch
 
 preparing the documentation
 ----------------------------
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/doc/tutorial/source/building-topologies.rst ns-3.45/doc/tutorial/source/building-topologies.rst
--- ns-3.44/doc/tutorial/source/building-topologies.rst	2025-03-09 16:55:49.327371000 -0700
+++ ns-3.45/doc/tutorial/source/building-topologies.rst	2025-06-01 20:34:45.267701100 -0700
@@ -105,10 +105,10 @@
   cmd.Parse(argc, argv);
 
   if (verbose)
-    {
+  {
       LogComponentEnable("UdpEchoClientApplication", LOG_LEVEL_INFO);
       LogComponentEnable("UdpEchoServerApplication", LOG_LEVEL_INFO);
-    }
+  }
 
   nCsma = nCsma == 0 ? 1 : nCsma;
 
@@ -892,10 +892,10 @@
   cmd.Parse(argc,argv);
 
   if (verbose)
-    {
+  {
       LogComponentEnable("UdpEchoClientApplication", LOG_LEVEL_INFO);
       LogComponentEnable("UdpEchoServerApplication", LOG_LEVEL_INFO);
-    }
+  }
 
 Just as in all of the previous examples, the next step is to create two nodes
 that we will connect via the point-to-point link.
@@ -1359,9 +1359,9 @@
   void
   CourseChange(std::string context, Ptr<const MobilityModel> model)
   {
-    Vector position = model->GetPosition();
-    NS_LOG_UNCOND(context <<
-                " x = " << position.x << ", y = " << position.y);
+      Vector position = model->GetPosition();
+      NS_LOG_UNCOND(context <<
+                    " x = " << position.x << ", y = " << position.y);
   }
 
 This code just pulls the position information from the mobility model and
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/doc/tutorial/source/conf.py ns-3.45/doc/tutorial/source/conf.py
--- ns-3.44/doc/tutorial/source/conf.py	2025-03-09 16:56:09.315445400 -0700
+++ ns-3.45/doc/tutorial/source/conf.py	2025-06-01 20:35:04.008764000 -0700
@@ -71,9 +71,9 @@
 # built documents.
 #
 # The short X.Y version.
-version = "ns-3.44"
+version = "ns-3.45"
 # The full version, including alpha/beta/rc tags.
-release = "ns-3.44"
+release = "ns-3.45"
 
 # The language for content autogenerated by Sphinx. Refer to documentation
 # for a list of supported languages.
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/doc/tutorial/source/data-collection.rst ns-3.45/doc/tutorial/source/data-collection.rst
--- ns-3.44/doc/tutorial/source/data-collection.rst	2025-03-09 16:55:49.327371000 -0700
+++ ns-3.45/doc/tutorial/source/data-collection.rst	2025-06-01 20:34:45.267701100 -0700
@@ -349,37 +349,37 @@
 
 The following traced values are supported with Probes as of this writing:
 
-  +------------------+-------------------+------------------------------------+
-  | TracedValue type |   Probe type      |  File                              |
-  +==================+=========+=========+====================================+
-  | double           | DoubleProbe       | stats/model/double-probe.h         |
-  +------------------+-------------------+------------------------------------+
-  | uint8_t          | Uinteger8Probe    | stats/model/uinteger-8-probe.h     |
-  +------------------+-------------------+------------------------------------+
-  | uint16_t         | Uinteger16Probe   | stats/model/uinteger-16-probe.h    |
-  +------------------+-------------------+------------------------------------+
-  | uint32_t         | Uinteger32Probe   | stats/model/uinteger-32-probe.h    |
-  +------------------+-------------------+------------------------------------+
-  | bool             | BooleanProbe      | stats/model/uinteger-16-probe.h    |
-  +------------------+-------------------+------------------------------------+
-  | ns3::Time        | TimeProbe         | stats/model/time-probe.h           |
-  +------------------+-------------------+------------------------------------+
++------------------+-------------------+------------------------------------+
+| TracedValue type |   Probe type      |  File                              |
++==================+=========+=========+====================================+
+| double           | DoubleProbe       | stats/model/double-probe.h         |
++------------------+-------------------+------------------------------------+
+| uint8_t          | Uinteger8Probe    | stats/model/uinteger-8-probe.h     |
++------------------+-------------------+------------------------------------+
+| uint16_t         | Uinteger16Probe   | stats/model/uinteger-16-probe.h    |
++------------------+-------------------+------------------------------------+
+| uint32_t         | Uinteger32Probe   | stats/model/uinteger-32-probe.h    |
++------------------+-------------------+------------------------------------+
+| bool             | BooleanProbe      | stats/model/uinteger-16-probe.h    |
++------------------+-------------------+------------------------------------+
+| ns3::Time        | TimeProbe         | stats/model/time-probe.h           |
++------------------+-------------------+------------------------------------+
 
 The following TraceSource types are supported by Probes as of this writing:
 
-  +------------------------------------------+------------------------+---------------+----------------------------------------------------+
-  | TracedSource type                        |   Probe type           | Probe outputs |  File                                              |
-  +==========================================+========================+===============+====================================================+
-  | Ptr<const Packet>                        | PacketProbe            | OutputBytes   | network/utils/packet-probe.h                       |
-  +------------------------------------------+------------------------+---------------+----------------------------------------------------+
-  | Ptr<const Packet>, Ptr<Ipv4>, uint32_t   | Ipv4PacketProbe        | OutputBytes   | internet/model/ipv4-packet-probe.h                 |
-  +------------------------------------------+------------------------+---------------+----------------------------------------------------+
-  | Ptr<const Packet>, Ptr<Ipv6>, uint32_t   | Ipv6PacketProbe        | OutputBytes   | internet/model/ipv6-packet-probe.h                 |
-  +------------------------------------------+------------------------+---------------+----------------------------------------------------+
-  | Ptr<const Packet>, Ptr<Ipv6>, uint32_t   | Ipv6PacketProbe        | OutputBytes   | internet/model/ipv6-packet-probe.h                 |
-  +------------------------------------------+------------------------+---------------+----------------------------------------------------+
-  | Ptr<const Packet>, const Address&        | ApplicationPacketProbe | OutputBytes   | applications/model/application-packet-probe.h      |
-  +------------------------------------------+------------------------+---------------+----------------------------------------------------+
++------------------------------------------+------------------------+---------------+----------------------------------------------------+
+| TracedSource type                        |   Probe type           | Probe outputs |  File                                              |
++==========================================+========================+===============+====================================================+
+| Ptr<const Packet>                        | PacketProbe            | OutputBytes   | network/utils/packet-probe.h                       |
++------------------------------------------+------------------------+---------------+----------------------------------------------------+
+| Ptr<const Packet>, Ptr<Ipv4>, uint32_t   | Ipv4PacketProbe        | OutputBytes   | internet/model/ipv4-packet-probe.h                 |
++------------------------------------------+------------------------+---------------+----------------------------------------------------+
+| Ptr<const Packet>, Ptr<Ipv6>, uint32_t   | Ipv6PacketProbe        | OutputBytes   | internet/model/ipv6-packet-probe.h                 |
++------------------------------------------+------------------------+---------------+----------------------------------------------------+
+| Ptr<const Packet>, Ptr<Ipv6>, uint32_t   | Ipv6PacketProbe        | OutputBytes   | internet/model/ipv6-packet-probe.h                 |
++------------------------------------------+------------------------+---------------+----------------------------------------------------+
+| Ptr<const Packet>, const Address&        | ApplicationPacketProbe | OutputBytes   | applications/model/application-packet-probe.h      |
++------------------------------------------+------------------------+---------------+----------------------------------------------------+
 
 As can be seen, only a few trace sources are supported, and they are all
 oriented towards outputting the Packet size (in bytes).  However,
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/doc/tutorial/source/getting-started.rst ns-3.45/doc/tutorial/source/getting-started.rst
--- ns-3.44/doc/tutorial/source/getting-started.rst	2025-03-09 16:55:49.327371000 -0700
+++ ns-3.45/doc/tutorial/source/getting-started.rst	2025-06-01 20:34:45.267701100 -0700
@@ -91,7 +91,7 @@
 .. sourcecode:: console
 
   $ pwd
-  /home/user/5G simulations/ns-3-allinone/ns-3-dev
+  /home/user/5G simulations/ns-3-dev
 
 Downloading a release of ns-3 as a source archive
 +++++++++++++++++++++++++++++++++++++++++++++++++
@@ -116,22 +116,14 @@
   $ cd
   $ mkdir workspace
   $ cd workspace
-  $ wget https://www.nsnam.org/release/ns-allinone-3.44.tar.bz2
-  $ tar xjf ns-allinone-3.44.tar.bz2
+  $ wget https://www.nsnam.org/release/ns-allinone-3.45.tar.bz2
+  $ tar xjf ns-allinone-3.45.tar.bz2
 
 Notice the use above of the ``wget`` utility, which is a command-line
 tool to fetch objects from the web; if you do not have this installed,
 you can use a browser for this step.
 
-Following these steps, if you change into the directory
-``ns-allinone-3.44``, you should see a number of files and directories
-
-.. sourcecode:: text
-
-  $ cd ns-allinone-3.44
-  $ ls
-  bake  build.py  constants.py  netanim-3.109 ns-3.44  README.md  util.py
-
+Following these steps, you should change into the directory ``ns-3.45``.
 You are now ready to build the base |ns3| distribution and may skip ahead
 to the section on building |ns3|.
 
@@ -143,9 +135,8 @@
 various repositories used by the open source project.
 
 The simplest way to get started using Git repositories is to fork or clone
-the ``ns-3-allinone`` environment.  This is a set of scripts that manages the
-downloading and building of the most commonly used subsystems of |ns3|
-for you.  If you are new to Git, the terminology of ``fork`` and ``clone``
+the ``ns-3-dev`` repository.
+If you are new to Git, the terminology of ``fork`` and ``clone``
 may be foreign to you; if so, we recommend that you simply ``clone``
 (create your own replica) of the repository found on GitLab.com, as
 follows:
@@ -155,301 +146,24 @@
   $ cd
   $ mkdir workspace
   $ cd workspace
-  $ git clone https://gitlab.com/nsnam/ns-3-allinone.git
-  $ cd ns-3-allinone
-
-At this point, your view of the ns-3-allinone directory is slightly
-different than described above with a release archive; it should look
-something like this:
-
-.. sourcecode:: console
-
-  $ ls
-  build.py  constants.py   download.py  README.md  util.py
-
-Note the presence of the ``download.py`` script, which will further fetch
-the |ns3| and related sourcecode.  At this point, you have a choice, to
-either download the most recent development snapshot of |ns3|:
-
-.. sourcecode:: console
-
-  $ python3 download.py
-
-or to specify a release of |ns3|, using the ``-n`` flag to specify a
-release number:
-
-.. sourcecode:: console
-
-  $ python3 download.py -n ns-3.44
-
-After this step, the additional repositories of |ns3|, bake, pybindgen,
-and netanim will be downloaded to the ``ns-3-allinone`` directory.
-
-Downloading ns-3 Using Bake
-+++++++++++++++++++++++++++
-
-The above two techniques (source archive, or ns-3-allinone repository
-via Git) are useful to get the most basic installation of |ns3| with a
-few addons (pybindgen for generating Python bindings, and netanim
-for network animations).  The third repository provided by default in
-ns-3-allinone is called ``bake``.
-
-Bake is a tool for coordinated software building from multiple repositories,
-developed for the |ns3| project. Bake can be used to fetch development
-versions of the |ns3| software, and to download and build extensions to the
-base |ns3| distribution, such as the Direct Code Execution environment,
-Network Simulation Cradle, ability to create new Python bindings, and
-various |ns3| "apps".  If you envision that your |ns3| installation may
-use advanced or optional features, you may wish to follow this installation
-path.
-
-In recent |ns3| releases, Bake has been included in the release
-tarball.  The configuration file included in the released version
-will allow one to download any software that was current at the
-time of the release.  That is, for example, the version of Bake that
-is distributed with the ``ns-3.30`` release can be used to fetch components
-for that |ns3| release or earlier, but can't be used to fetch components
-for later releases (unless the ``bakeconf.xml`` package description file
-is updated).
-
-You can also get the most recent copy of ``bake`` by typing the
-following into your Linux shell (assuming you have installed Git)::
-
-  $ cd
-  $ mkdir workspace
-  $ cd workspace
-  $ git clone https://gitlab.com/nsnam/bake.git
-
-As the git command executes, you should see something like the
-following displayed:
-
-.. sourcecode:: console
-
-  Cloning into 'bake'...
-  remote: Enumerating objects: 2086, done.
-  remote: Counting objects: 100% (2086/2086), done.
-  remote: Compressing objects: 100% (649/649), done.
-  remote: Total 2086 (delta 1404), reused 2078 (delta 1399)
-  Receiving objects: 100% (2086/2086), 2.68 MiB | 3.82 MiB/s, done.
-  Resolving deltas: 100% (1404/1404), done.
-
-After the clone command completes, you should have a directory called
-``bake``, the contents of which should look something like the following:
-
-.. sourcecode:: console
-
-  $ cd bake
-  $ ls
-  bake  bakeconf.xml  bake.py  doc  examples  generate-binary.py  test  TODO
-
-Notice that you have downloaded some Python scripts, a Python
-module called ``bake``, and an XML configuration file.  The next step
-will be to use those scripts to download and build the |ns3|
-distribution of your choice.
-
-There are a few configuration targets available:
-
-1.  ``ns-3.44``:  the code corresponding to the release
-2.  ``ns-3-dev``:  a similar module but using the development code tree
-3.  ``ns-allinone-3.44``:  the module that includes other optional features
-    such as bake build system, netanim animator, and pybindgen
-4.  ``ns-3-allinone``:  similar to the released version of the allinone
-    module, but for development code.
-
-The current development snapshot (unreleased) of |ns3| may be found
-and cloned from https://gitlab.com/nsnam/ns-3-dev.git.  The
-developers attempt to keep these repositories in consistent, working states but
-they are in a development area with unreleased code present, so you may want
-to consider staying with an official release if you do not need newly-
-introduced features.
-
-You can find the latest version  of the
-code either by inspection of the repository list or by going to the
-`"ns-3 Releases"
-<https://www.nsnam.org/releases>`_
-web page and clicking on the latest release link.  We'll proceed in
-this tutorial example with ``ns-3.44``.
-
-We are now going to use the bake tool to pull down the various pieces of
-|ns3| you will be using.  First, we'll say a word about running bake.
-
-Bake works by downloading source packages into a source directory,
-and installing libraries into a build directory.  bake can be run
-by referencing the binary, but if one chooses to run bake from
-outside of the directory it was downloaded into, it is advisable
-to put bake into your path, such as follows (Linux bash shell example).
-First, change into the 'bake' directory, and then set the following
-environment variables:
-
-.. sourcecode:: console
-
-  $ export BAKE_HOME=`pwd`
-  $ export PATH=$PATH:$BAKE_HOME/build/bin
-  $ export PYTHONPATH=$BAKE_HOME/build/lib
-  $ export LD_LIBRARY_PATH=$BAKE_HOME/build/lib
-
-This will put the bake.py program into the shell's path, and will allow
-other programs to find executables and libraries created by bake.  Although
-several bake use cases do not require setting PATH and PYTHONPATH as above,
-full builds of ns-3-allinone (with the optional packages) typically do.
-
-Step into the workspace directory and type the following into your shell:
-
-.. sourcecode:: console
-
-  $ ./bake.py configure -e ns-allinone-3.44
-
-Next, we'll ask bake to check whether we have enough tools to download
-various components.  Type:
-
-.. sourcecode:: console
-
-  $ ./bake.py check
-
-You should see something like the following:
-
-.. sourcecode:: text
-
-  > Python - OK
-  > GNU C++ compiler - OK
-  > Git - OK
-  > Tar tool - OK
-  > Unzip tool - OK
-  > Make - OK
-  > cMake - OK
-  > patch tool - OK
-  > Path searched for tools: /usr/local/sbin /usr/local/bin /usr/sbin /usr/bin /sbin /bin ...
-
-Please install missing tools at this stage, in the usual
-way for your system (if you are able to), or contact your system
-administrator as needed to install these tools.
-
-Next, try to download the software:
-
-.. sourcecode:: console
-
-  $ ./bake.py download
-
-should yield something like:
-
-.. sourcecode:: text
-
-  >> Searching for system dependency libxml2-dev - OK
-  >> Searching for system dependency gi-cairo - OK
-  >> Searching for system dependency gir-bindings - OK
-  >> Searching for system dependency pygobject - OK
-  >> Searching for system dependency pygraphviz - OK
-  >> Searching for system dependency python3-dev - OK
-  >> Searching for system dependency qt - OK
-  >> Searching for system dependency g++ - OK
-  >> Searching for system dependency cmake - OK
-  >> Downloading netanim-3.109 - OK
-  >> Downloading click-ns-3.37 - OK
-  >> Downloading BRITE - OK
-  >> Downloading openflow-dev - OK
-  >> Downloading ns-3.44 (target directory:ns-3.44) - OK
-
-The above suggests that three sources have been downloaded.  Check the
-``source`` directory now and type ``ls``; one should see:
-
-.. sourcecode:: console
-
-  $ cd source
-  $ ls
-  BRITE  click-ns-3.37  netanim-3.109  ns-3.44  openflow-dev
-
-You are now ready to build the |ns3| distribution.
+  $ git clone https://gitlab.com/nsnam/ns-3-dev.git
+  $ cd ns-3-dev
 
 Building ns-3
 *************
 
-As with downloading |ns3|, there are a few ways to build |ns3|.  The main
-thing that we wish to emphasize is the following.  |ns3| is built with
+|ns3| is built with
 a build tool called ``CMake``, described below.  Most users will end up
 working most directly with the ns3 command-line wrapper for CMake, for the sake
-of convenience.  Therefore, please have a look at ``build.py`` and building
-with ``bake``, before reading about CMake and the ns3 wrapper below.
-
-Building with ``build.py``
-++++++++++++++++++++++++++
-
-**Note:** This build step is only available from a source archive release
-described above; not from downloading via git or bake.
-
-When working from a released tarball, a convenience script available as
-part of ``ns-3-allinone`` can orchestrate a simple build of components.
-This program is called ``build.py``.  This
-program will get the project configured for you
-in the most commonly useful way.  However, please note that more advanced
-configuration and work with |ns3| will typically involve using the
-native |ns3| build system, CMake, to be introduced later in this tutorial.
-
-If you downloaded
-using a tarball you should have a directory called something like
-``ns-allinone-3.44`` under your ``~/workspace`` directory.
-Type the following:
-
-.. sourcecode:: console
-
-  $ ./build.py --enable-examples --enable-tests
-
-Because we are working with examples and tests in this tutorial, and
-because they are not built by default in |ns3|, the arguments for
-build.py tells it to build them for us.  The program also defaults to
-building all available modules.  Later, you can build
-|ns3| without examples and tests, or eliminate the modules that
-are not necessary for your work, if you wish.
-
-You will see lots of compiler output messages displayed as the build
-script builds the various pieces you downloaded.  First, the script will
-attempt to build the netanim animator, and then |ns3|.
-
-Building with bake
-++++++++++++++++++
-
-If you used bake above to fetch source code from project repositories, you
-may continue to use it to build |ns3|.  Type:
-
-.. sourcecode:: console
-
-  $ ./bake.py build
-
-and you should see something like:
-
-.. sourcecode:: text
-
-  >> Building netanim-3.109 - OK
-  >> Building ns-3.44 - OK
-
-There may be failures to build all components, but the build will proceed
-anyway if the component is optional.
-
-If there happens to be a failure, please have a look at what the following
-command tells you; it may give a hint as to a missing dependency:
-
-.. sourcecode:: console
-
-  $ ./bake.py show
-
-This will list out the various dependencies of the packages you are
-trying to build.
+of convenience.
 
 Building with the ns3 CMake wrapper
 +++++++++++++++++++++++++++++++++++
 
-Up to this point, we have used either the `build.py` script, or the
-`bake` tool, to get started with building |ns3|.  These tools are useful
-for building |ns3| and supporting libraries, and they call into
-the |ns3| directory to call the CMake build tool to do the actual building.
-CMake needs to be installed before building |ns3|.
-So, to proceed, please change your working directory to
-the |ns3| directory that you have initially built.
-
-It's not
-strictly required at this point, but it will be valuable to take a slight
-detour and look at how to make changes to the configuration of the project.
-Probably the most useful configuration change you can make will be to
-build the optimized version of the code. The project will be configured
+The build process consists of two steps: a configuration stage, and then the
+actual compilation.  The configuration stage is used to enable and disable
+compiler optimizations and other options and to control the scope of the build.
+The project will be configured
 by default using the ``default`` build profile, which is an optimized
 build with debug information (CMAKE_BUILD_TYPE=relwithdebinfo) version.
 Let's tell the project to make an optimized build.
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/doc/tutorial/source/quick-start.rst ns-3.45/doc/tutorial/source/quick-start.rst
--- ns-3.44/doc/tutorial/source/quick-start.rst	2025-03-09 16:55:49.327371000 -0700
+++ ns-3.45/doc/tutorial/source/quick-start.rst	2025-06-01 20:34:45.267701100 -0700
@@ -60,21 +60,28 @@
 
 1) Download the latest release from https://www.nsnam.org/releases/latest
 
-2) Unpack it in a working directory of your choice.
+The latest release is available in two versions, as |ns3| by itself (as
+maintained by the open source project) or an ``allinone`` archive that
+contains |ns3| and additional third-party contributed modules.  Note that
+the main |ns3| release can always be later extended by adding contributing
+modules of your choice
+
+2) Unpack either archive version in a working directory of your choice.
 
    ::
 
-    $ tar xjf ns-allinone-3.44.tar.bz2
+    $ tar xjf ns-3.45.tar.bz2
+
+or
+   ::
+
+    $ tar xjf ns-allinone-3.45.tar.bz2
 
 3) Change into the |ns3| directory directly; e.g.
 
    ::
 
-    $ cd ns-allinone-3.44/ns-3.44
-
-The ns-allinone directory has some additional components but we are skipping
-over them here; one can work directly from the |ns3| source code directory.
-The rest of the tutorial describes the additional components.
+    $ cd ns-3.45
 
 Cloning ns-3 from GitLab.com
 ++++++++++++++++++++++++++++
@@ -92,12 +99,12 @@
 
   $ cd ns-3-dev
 
-If instead you want to try the most recent release (version 3.44 as of this
+If instead you want to try the most recent release (version 3.45 as of this
 writing), you can checkout a branch corresponding to that git tag:
 
 ::
 
-  $ git checkout -b ns-3.44-branch ns-3.44
+  $ git checkout -b ns-3.45-branch ns-3.45
 
 Building and testing ns-3
 *************************
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/doc/tutorial/source/tracing.rst ns-3.45/doc/tutorial/source/tracing.rst
--- ns-3.44/doc/tutorial/source/tracing.rst	2025-03-09 16:55:49.327371000 -0700
+++ ns-3.45/doc/tutorial/source/tracing.rst	2025-06-01 20:34:45.268701000 -0700
@@ -120,24 +120,26 @@
     ...
 
     else if (tcpflags == (TcpHeader::SYN | TcpHeader::ACK))
-      { // No action for received SYN+ACK, it is probably a duplicated packet
-      }
+    {
+      // No action for received SYN+ACK, it is probably a duplicated packet
+    }
     ...
 
 To log the SYN+ACK case, you can add a new ``NS_LOG_LOGIC`` in the
 ``if`` statement body::
 
   /* Received a packet upon ESTABLISHED state. This function is mimicking the
-      role of tcp_rcv_established() in tcp_input.c in Linux kernel. */
+     role of tcp_rcv_established() in tcp_input.c in Linux kernel. */
   void
   TcpSocketBase::ProcessEstablished(Ptr<Packet> packet, const TcpHeader& tcpHeader)
   {
     NS_LOG_FUNCTION(this << tcpHeader);
     ...
     else if (tcpflags == (TcpHeader::SYN | TcpHeader::ACK))
-      { // No action for received SYN+ACK, it is probably a duplicated packet
-        NS_LOG_LOGIC("TcpSocketBase " << this << " ignoring SYN+ACK");
-      }
+    {
+      // No action for received SYN+ACK, it is probably a duplicated packet
+      NS_LOG_LOGIC("TcpSocketBase " << this << " ignoring SYN+ACK");
+    }
     ...
 
 This may seem fairly simple and satisfying at first glance, but
@@ -452,7 +454,7 @@
 
 Finally, the line assigning a value to ``m_myInt``::
 
-   myObject->m_myInt = 1234;
+  myObject->m_myInt = 1234;
 
 should be interpreted as an invocation of ``operator=`` on the member
 variable ``m_myInt`` with the integer ``1234`` passed as a parameter.
@@ -712,12 +714,12 @@
 
 In the sidebar you should see a hierarchy that begins
 
-*  ns-3
+* ns-3
 
-  *  ns-3 Documentation
-  *  All TraceSources
-  *  All Attributes
-  *  All GlobalValues
+  * ns-3 Documentation
+  * All TraceSources
+  * All Attributes
+  * All GlobalValues
 
 The list of interest to us here is "All TraceSources".  Go ahead and
 select that link.  You will see, perhaps not too surprisingly, a list
@@ -1168,23 +1170,23 @@
 extend that requirement to include the full set of assignment-style
 operators that are pre-defined for plain-old-data (POD) types:
 
-  +---------------------+---------------------+
-  | ``operator=`` (assignment)                |
-  +---------------------+---------------------+
-  | ``operator*=``      | ``operator/=``      |
-  +---------------------+---------------------+
-  | ``operator+=``      | ``operator-=``      |
-  +---------------------+---------------------+
-  | ``operator++`` (both prefix and postfix)  |
-  +---------------------+---------------------+
-  | ``operator--`` (both prefix and postfix)  |
-  +---------------------+---------------------+
-  | ``operator<<=``     | ``operator>>=``     |
-  +---------------------+---------------------+
-  | ``operator&=``      | ``operator|=``      |
-  +---------------------+---------------------+
-  | ``operator%=``      | ``operator^=``      |
-  +---------------------+---------------------+
++---------------------+---------------------+
+| ``operator=`` (assignment)                |
++---------------------+---------------------+
+| ``operator*=``      | ``operator/=``      |
++---------------------+---------------------+
+| ``operator+=``      | ``operator-=``      |
++---------------------+---------------------+
+| ``operator++`` (both prefix and postfix)  |
++---------------------+---------------------+
+| ``operator--`` (both prefix and postfix)  |
++---------------------+---------------------+
+| ``operator<<=``     | ``operator>>=``     |
++---------------------+---------------------+
+| ``operator&=``      | ``operator|=``      |
++---------------------+---------------------+
+| ``operator%=``      | ``operator^=``      |
++---------------------+---------------------+
 
 What this all really means is that you will be able to trace all
 changes made using those operators to a C++ object which has value
@@ -1620,13 +1622,13 @@
   void
   Application::DoInitialize()
   {
-    NS_LOG_FUNCTION(this);
-    m_startEvent = Simulator::Schedule(m_startTime, &Application::StartApplication, this);
-    if (m_stopTime != TimeStep(0))
+      NS_LOG_FUNCTION(this);
+      m_startEvent = Simulator::Schedule(m_startTime, &Application::StartApplication, this);
+      if (m_stopTime != TimeStep(0))
       {
-        m_stopEvent = Simulator::Schedule(m_stopTime, &Application::StopApplication, this);
+          m_stopEvent = Simulator::Schedule(m_stopTime, &Application::StopApplication, this);
       }
-    Object::DoInitialize();
+      Object::DoInitialize();
   }
 
 Here, we finally come to the end of the trail.  If you have kept it
@@ -2424,13 +2426,13 @@
 similarly as possible; and whenever possible there are analogs for all
 methods in all classes.
 
-  +-----------------+---------+---------+
-  |                 |  PCAP   |  ASCII  |
-  +=================+=========+=========+
-  | Device Helper   | |check| | |check| |
-  +-----------------+---------+---------+
-  | Protocol Helper | |check| | |check| |
-  +-----------------+---------+---------+
++-----------------+---------+---------+
+|                 |  PCAP   |  ASCII  |
++=================+=========+=========+
+| Device Helper   | |check| | |check| |
++-----------------+---------+---------+
+| Protocol Helper | |check| | |check| |
++-----------------+---------+---------+
 
 We use an approach called a ``mixin`` to add tracing functionality to
 our helper classes.  A ``mixin`` is a class that provides
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/examples/channel-models/three-gpp-v2v-channel-example.cc ns-3.45/examples/channel-models/three-gpp-v2v-channel-example.cc
--- ns-3.44/examples/channel-models/three-gpp-v2v-channel-example.cc	2025-03-09 16:55:49.331370800 -0700
+++ ns-3.45/examples/channel-models/three-gpp-v2v-channel-example.cc	2025-06-01 20:34:45.269701000 -0700
@@ -5,7 +5,7 @@
  *
  */
 
-/**
+/*
  * This is an example on how to configure the channel model classes to simulate
  * a vehicular environment.
  * The channel condition is determined using the model specified in [1], Table 6.2-1.
@@ -38,6 +38,7 @@
 
 using namespace ns3;
 
+/// the log component
 NS_LOG_COMPONENT_DEFINE("ThreeGppV2vChannelExample");
 
 static Ptr<ThreeGppPropagationLossModel>
@@ -46,7 +47,7 @@
     m_spectrumLossModel;                       //!< the SpectrumPropagationLossModel object
 static Ptr<ChannelConditionModel> m_condModel; //!< the ChannelConditionModel object
 
-/*
+/**
  * @brief A structure that holds the parameters for the ComputeSnr
  * function. In this way the problem with the limited
  * number of parameters of method Schedule is avoided.
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/examples/routing/manet-routing-compare.cc ns-3.45/examples/routing/manet-routing-compare.cc
--- ns-3.44/examples/routing/manet-routing-compare.cc	2025-03-09 16:55:49.331370800 -0700
+++ ns-3.45/examples/routing/manet-routing-compare.cc	2025-06-01 20:34:45.270701200 -0700
@@ -18,14 +18,14 @@
  */
 
 /*
- * This example program allows one to run ns-3 DSDV, AODV, or OLSR under
+ * This example program allows one to run ns-3 DSDV, DSR, AODV, or OLSR under
  * a typical random waypoint mobility model.
  *
  * By default, the simulation runs for 200 simulated seconds, of which
- * the first 50 are used for start-up time.  The number of nodes is 50.
+ * the first 100 are used for start-up time.  The number of nodes is 50.
  * Nodes move according to RandomWaypointMobilityModel with a speed of
  * 20 m/s and no pause time within a 300x1500 m region.  The WiFi is
- * in ad hoc mode with a 2 Mb/s rate (802.11b) and a Friis loss model.
+ * in ad hoc mode with a 11 Mb/s rate (802.11b) and a Friis loss model.
  * The transmit power is set to 7.5 dBm.
  *
  * It is possible to change the mobility and density of the network by
@@ -34,14 +34,13 @@
  * the transmit power (as power increases, the impact of mobility
  * decreases and the effective density increases).
  *
- * By default, OLSR is used, but specifying a value of 2 for the protocol
- * will cause AODV to be used, and specifying a value of 3 will cause
- * DSDV to be used.
+ * By default, AODV is used, but specifying a string of 'OLSR', 'DSDV', or
+ * 'DSR' to the protocol command-line argument will change the protocol.
  *
  * By default, there are 10 source/sink data pairs sending UDP data
  * at an application rate of 2.048 Kb/s each.    This is typically done
  * at a rate of 4 64-byte packets per second.  Application data is
- * started at a random time between 50 and 51 seconds and continues
+ * started at a random time between 100 and 101 seconds and continues
  * to the end of the simulation.
  *
  * The program outputs a few items:
@@ -49,6 +48,8 @@
  *   <timestamp> <node-id> received one packet from <src-address>
  * - each second, the data reception statistics are tabulated and output
  *   to a comma-separated value (csv) file
+ * - mobility traces of the nodes are printed to 'manet-routing-compare.mob';
+ *   this trace can be disabled using a command-line argument
  * - some tracing and flow monitor configuration that used to work is
  *   left commented inline in the program
  */
@@ -120,7 +121,7 @@
     int m_nSinks{10};                                      //!< Number of sink nodes.
     std::string m_protocolName{"AODV"};                    //!< Protocol name.
     double m_txp{7.5};                                     //!< Tx power.
-    bool m_traceMobility{false};                           //!< Enable mobility tracing.
+    bool m_traceMobility{true};                            //!< Enable mobility tracing.
     bool m_flowMonitor{false};                             //!< Enable FlowMonitor.
 };
 
@@ -388,7 +389,10 @@
     // Ptr<OutputStreamWrapper> osw = ascii.CreateFileStream(tr_name + ".tr");
     // wifiPhy.EnableAsciiAll(osw);
     AsciiTraceHelper ascii;
-    MobilityHelper::EnableAsciiAll(ascii.CreateFileStream(tr_name + ".mob"));
+    if (m_traceMobility)
+    {
+        MobilityHelper::EnableAsciiAll(ascii.CreateFileStream(tr_name + ".mob"));
+    }
 
     FlowMonitorHelper flowmonHelper;
     Ptr<FlowMonitor> flowmon;
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/examples/wireless/examples-to-run.py ns-3.45/examples/wireless/examples-to-run.py
--- ns-3.44/examples/wireless/examples-to-run.py	2025-03-09 16:55:49.335371000 -0700
+++ ns-3.45/examples/wireless/examples-to-run.py	2025-06-01 20:34:45.273701000 -0700
@@ -165,7 +165,7 @@
         "True",
     ),
     (
-        "wifi-eht-network --simulationTime=0.1s --frequency=5 --useRts=1 --minExpectedThroughput=6 --maxExpectedThroughput=660",
+        "wifi-eht-network --simulationTime=0.1s --frequency=6 --useRts=1 --minExpectedThroughput=5 --maxExpectedThroughput=800",
         "True",
         "True",
     ),
@@ -195,7 +195,7 @@
         "True",
     ),
     (
-        "wifi-eht-network --simulationTime=0.25s --udp=0 --downlink=0 --useRts=0 --nStations=4 --dlAckType=AGGR-MU-BAR --enableUlOfdma=1 --enableBsrp=1 --mpduBufferSize=1024 --mcs=8 --muSchedAccessReqInterval=45ms --frequency2=6 --minExpectedThroughput=50 --maxExpectedThroughput=550 --RngRun=7",
+        "wifi-eht-network --simulationTime=0.25s --udp=0 --downlink=0 --useRts=0 --nStations=4 --dlAckType=AGGR-MU-BAR --enableUlOfdma=1 --enableBsrp=1 --mpduBufferSize=1024 --mcs=8 --muSchedAccessReqInterval=45ms --frequency2=6 --minExpectedThroughput=50 --maxExpectedThroughput=550 --RngRun=3",
         "True",
         "True",
     ),
@@ -210,22 +210,22 @@
         "True",
     ),
     (
-        "wifi-eht-network --simulationTime=0.2s --frequency=2.4 --frequency2=5 --guardInterval=1600 --udp=0 --downlink=0 --useRts=0 --mpduBufferSize=512 --emlsrLinks=0,1 --emlsrPaddingDelay=0 --emlsrTransitionDelay=0 --channelSwitchDelay=1ns --emlsrMgrTypeId=ns3::AdvancedEmlsrManager --emlsrAuxSwitch=False --emlsrAuxTxCapable=False --minExpectedThroughput=5 --maxExpectedThroughput=40 --RngRun=7",
+        "wifi-eht-network --simulationTime=0.2s --frequency=2.4 --frequency2=5 --guardInterval=1600 --udp=0 --downlink=0 --useRts=0 --mpduBufferSize=512 --emlsrLinks=0,1 --emlsrPaddingDelay=0 --emlsrTransitionDelay=0 --channelSwitchDelay=1ns --emlsrMgrTypeId=ns3::AdvancedEmlsrManager --emlsrAuxSwitch=False --emlsrAuxTxCapable=False --minExpectedThroughput=5 --maxExpectedThroughput=40 --RngRun=9",
         "True",
         "True",
     ),
     (
-        "wifi-eht-network --simulationTime=0.3s --frequency=2.4 --frequency2=5 --frequency3=6 --guardInterval=1600 --udp=0 --downlink=1 --useRts=0 --mpduBufferSize=512 --emlsrLinks=0,1,2 --emlsrPaddingDelay=32 --emlsrTransitionDelay=32 --channelSwitchDelay=32us --emlsrAuxSwitch=True --emlsrAuxTxCapable=True --nStations=4 --dlAckType=AGGR-MU-BAR --enableUlOfdma=1 --enableBsrp=0 --mcs=0,3,5,9,10 --minExpectedThroughput=8 --maxExpectedThroughput=300 --RngRun=6",
+        "wifi-eht-network --simulationTime=0.3s --frequency=2.4 --frequency2=5 --frequency3=6 --guardInterval=1600 --udp=0 --downlink=1 --useRts=0 --mpduBufferSize=512 --emlsrLinks=0,1,2 --emlsrPaddingDelay=32 --emlsrTransitionDelay=32 --channelSwitchDelay=32us --emlsrAuxSwitch=True --emlsrAuxTxCapable=True --nStations=4 --dlAckType=AGGR-MU-BAR --enableUlOfdma=1 --enableBsrp=0 --mcs=0,3,5,9,10 --minExpectedThroughput=8 --maxExpectedThroughput=300",
         "True",
         "True",
     ),
     (
-        "wifi-eht-network --simulationTime=0.3s --frequency=2.4 --frequency2=5 --frequency3=6 --guardInterval=1600 --udp=0 --downlink=0 --useRts=1 --mpduBufferSize=512 --emlsrLinks=0,1,2 --emlsrPaddingDelay=64 --emlsrTransitionDelay=64 --channelSwitchDelay=64us --emlsrAuxSwitch=False --emlsrAuxTxCapable=True --nStations=4 --dlAckType=MU-BAR --enableUlOfdma=1 --enableBsrp=1 --mcs=1,4,8,11,13 --minExpectedThroughput=10 --maxExpectedThroughput=260 --RngRun=4",
+        "wifi-eht-network --simulationTime=0.3s --frequency=2.4 --frequency2=5 --frequency3=6 --guardInterval=1600 --udp=0 --downlink=0 --useRts=1 --mpduBufferSize=512 --emlsrLinks=0,1,2 --emlsrPaddingDelay=64 --emlsrTransitionDelay=64 --channelSwitchDelay=64us --emlsrAuxSwitch=False --emlsrAuxTxCapable=True --nStations=4 --dlAckType=MU-BAR --enableUlOfdma=1 --enableBsrp=1 --mcs=1,4,8,11,13 --minExpectedThroughput=10 --maxExpectedThroughput=260",
         "True",
         "True",
     ),
     (
-        "wifi-eht-network --simulationTime=0.3s --frequency=2.4 --frequency2=5 --frequency3=6 --guardInterval=1600 --udp=0 --downlink=0 --useRts=1 --mpduBufferSize=512 --emlsrLinks=0,1,2 --emlsrPaddingDelay=0 --emlsrTransitionDelay=0 --channelSwitchDelay=1ns --emlsrMgrTypeId=ns3::AdvancedEmlsrManager --emlsrAuxSwitch=False --emlsrAuxTxCapable=False --nStations=4 --dlAckType=ACK-SU-FORMAT --enableUlOfdma=1 --enableBsrp=1 --mcs=1,5,8,11 --minExpectedThroughput=8 --maxExpectedThroughput=288 --RngRun=5",
+        "wifi-eht-network --simulationTime=0.3s --frequency=2.4 --frequency2=5 --frequency3=6 --guardInterval=1600 --udp=0 --downlink=0 --useRts=1 --mpduBufferSize=512 --emlsrLinks=0,1,2 --emlsrPaddingDelay=0 --emlsrTransitionDelay=0 --channelSwitchDelay=1ns --emlsrMgrTypeId=ns3::AdvancedEmlsrManager --emlsrAuxSwitch=False --emlsrAuxTxCapable=False --nStations=4 --dlAckType=ACK-SU-FORMAT --enableUlOfdma=1 --enableBsrp=1 --mcs=1,5,8,11 --minExpectedThroughput=8 --maxExpectedThroughput=288",
         "True",
         "True",
     ),
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/examples/wireless/wifi-dsss-validation.cc ns-3.45/examples/wireless/wifi-dsss-validation.cc
--- ns-3.44/examples/wireless/wifi-dsss-validation.cc	2025-03-09 16:55:49.339371000 -0700
+++ ns-3.45/examples/wireless/wifi-dsss-validation.cc	2025-06-01 20:34:45.274701000 -0700
@@ -4,10 +4,10 @@
  * Author: Sébastien Deronne <sebastien.deronne@gmail.com>
  */
 
-// This example is used to validate error rate models for DSSS rates.
-//
-// It outputs plots of the Frame Success Rate versus the Signal-to-noise ratio
-// for the DSSS error rate models and for every DSSS mode.
+// This example is used to generate plots of the Frame Success Rate (FSR) versus the Signal-to-noise
+// ratio (SNR) for NIST, YANS and Table-based error rate models and for every DSSS rate. It also
+// performs a boundary check to ensure that the FSR is between 0 and 1. The results are finally
+// saved in files (.plt) per model which can be processed by gnuplot to generate the plots.
 
 #include "ns3/command-line.h"
 #include "ns3/gnuplot.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/examples/wireless/wifi-eht-network.cc ns-3.45/examples/wireless/wifi-eht-network.cc
--- ns-3.44/examples/wireless/wifi-eht-network.cc	2025-03-09 16:55:49.339371000 -0700
+++ ns-3.45/examples/wireless/wifi-eht-network.cc	2025-06-01 20:34:45.274701000 -0700
@@ -39,9 +39,10 @@
 // This is a simple example in order to show how to configure an IEEE 802.11be Wi-Fi network.
 //
 // It outputs the UDP or TCP goodput for every EHT MCS value, which depends on the MCS value (0 to
-// 13), the channel width (20, 40, 80 or 160 MHz) and the guard interval (800ns, 1600ns or 3200ns).
-// The PHY bitrate is constant over all the simulation run. The user can also specify the distance
-// between the access point and the station: the larger the distance the smaller the goodput.
+// 13), the channel width (20, 40, 80, 160 or 320 MHz) and the guard interval (800ns, 1600ns or
+// 3200ns). The PHY bitrate is constant over all the simulation run. The user can also specify the
+// distance between the access point and the station: the larger the distance the smaller the
+// goodput.
 //
 // The simulation assumes a configurable number of stations in an infrastructure network:
 //
@@ -236,8 +237,8 @@
         "list of comma separated MCS values to test; if unset, all MCS values (0-13) are tested",
         mcsStr);
     cmd.AddValue("channelWidth",
-                 "if set, limit testing to a specific channel width expressed in MHz (20, 40, 80 "
-                 "or 160 MHz)",
+                 "if set, limit testing to a specific channel width expressed in MHz (20, 40, 80, "
+                 "160 or 320 MHz)",
                  channelWidth);
     cmd.AddValue("guardInterval",
                  "if set, limit testing to a specific guard interval duration expressed in "
@@ -280,7 +281,7 @@
                      "AGGR-MU-BAR)");
     }
 
-    double prevThroughput[12] = {0};
+    double prevThroughput[15] = {0};
 
     std::cout << "MCS value"
               << "\t\t"
@@ -310,7 +311,15 @@
     }
 
     int minChannelWidth = 20;
-    int maxChannelWidth = (frequency != 2.4 && frequency2 != 2.4 && frequency3 != 2.4) ? 160 : 40;
+    int maxChannelWidth =
+        ((frequency != 2.4) && (frequency2 != 2.4) && (frequency3 != 2.4))
+            ? (((frequency == 6) && (frequency2 == 0) && (frequency3 == 0)) ? 320 : 160)
+            : 40;
+    if ((channelWidth != -1) &&
+        ((channelWidth < minChannelWidth) || (channelWidth > maxChannelWidth)))
+    {
+        NS_FATAL_ERROR("Invalid channel width: " << channelWidth << " MHz");
+    }
     if (channelWidth >= minChannelWidth && channelWidth <= maxChannelWidth)
     {
         minChannelWidth = channelWidth;
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/examples/wireless/wifi-he-network.cc ns-3.45/examples/wireless/wifi-he-network.cc
--- ns-3.44/examples/wireless/wifi-he-network.cc	2025-03-09 16:55:49.339371000 -0700
+++ ns-3.45/examples/wireless/wifi-he-network.cc	2025-06-01 20:34:45.274701000 -0700
@@ -206,6 +206,11 @@
 
     int minChannelWidth = 20;
     int maxChannelWidth = frequency == 2.4 ? 40 : 160;
+    if ((channelWidth != -1) &&
+        ((channelWidth < minChannelWidth) || (channelWidth > maxChannelWidth)))
+    {
+        NS_FATAL_ERROR("Invalid channel width: " << channelWidth << " MHz");
+    }
     if (channelWidth >= minChannelWidth && channelWidth <= maxChannelWidth)
     {
         minChannelWidth = channelWidth;
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/examples/wireless/wifi-ht-network.cc ns-3.45/examples/wireless/wifi-ht-network.cc
--- ns-3.44/examples/wireless/wifi-ht-network.cc	2025-03-09 16:55:49.339371000 -0700
+++ ns-3.45/examples/wireless/wifi-ht-network.cc	2025-06-01 20:34:45.274701000 -0700
@@ -135,6 +135,11 @@
 
     int minChannelWidth = 20;
     int maxChannelWidth = 40;
+    if ((channelWidth != -1) &&
+        ((channelWidth < minChannelWidth) || (channelWidth > maxChannelWidth)))
+    {
+        NS_FATAL_ERROR("Invalid channel width: " << channelWidth << " MHz");
+    }
     if (channelWidth >= minChannelWidth && channelWidth <= maxChannelWidth)
     {
         minChannelWidth = channelWidth;
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/examples/wireless/wifi-ofdm-eht-validation.cc ns-3.45/examples/wireless/wifi-ofdm-eht-validation.cc
--- ns-3.44/examples/wireless/wifi-ofdm-eht-validation.cc	2025-03-09 16:55:49.339371000 -0700
+++ ns-3.45/examples/wireless/wifi-ofdm-eht-validation.cc	2025-06-01 20:34:45.274701000 -0700
@@ -6,10 +6,10 @@
  * Author: Sébastien Deronne <sebastien.deronne@gmail.com>
  */
 
-// This example is used to validate NIST and YANS error rate models for EHT rates.
-//
-// It outputs plots of the Frame Success Rate versus the Signal-to-noise ratio for
-// Nist, Yans and Table-based error rate models and for every HT MCS value.
+// This example is used to generate plots of the Frame Success Rate (FSR) versus the Signal-to-noise
+// ratio (SNR) for NIST, YANS and Table-based error rate models and for every EHT MCS value. It also
+// performs a boundary check to ensure that the FSR is between 0 and 1. The results are finally
+// saved in files (.plt) per model which can be processed by gnuplot to generate the plots.
 
 #include "ns3/command-line.h"
 #include "ns3/gnuplot.h"
@@ -135,7 +135,6 @@
         plotExtra << "set style line " << (i + 1) << " linewidth 5 linecolor rgb \"" << colors[i]
                   << "\" \n";
     }
-    plotExtra << "set style increment user";
 
     yansplot.SetTerminal("postscript eps color enh \"Times-BoldItalic\"");
     yansplot.SetLegend("SNR(dB)", "Frame Success Rate");
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/examples/wireless/wifi-ofdm-he-validation.cc ns-3.45/examples/wireless/wifi-ofdm-he-validation.cc
--- ns-3.44/examples/wireless/wifi-ofdm-he-validation.cc	2025-03-09 16:55:49.339371000 -0700
+++ ns-3.45/examples/wireless/wifi-ofdm-he-validation.cc	2025-06-01 20:34:45.274701000 -0700
@@ -4,10 +4,10 @@
  * Author: Sébastien Deronne <sebastien.deronne@gmail.com>
  */
 
-// This example is used to validate Nist, Yans and Table-based error rate models for HE rates.
-//
-// It outputs plots of the Frame Success Rate versus the Signal-to-noise ratio for
-// Nist, Yans and Table-based error rate models and for every HE MCS value.
+// This example is used to generate plots of the Frame Success Rate (FSR) versus the Signal-to-noise
+// ratio (SNR) for NIST, YANS and Table-based error rate models and for every HE MCS value. It also
+// performs a boundary check to ensure that the FSR is between 0 and 1. The results are finally
+// saved in files (.plt) per model which can be processed by gnuplot to generate the plots.
 
 #include "ns3/command-line.h"
 #include "ns3/gnuplot.h"
@@ -118,8 +118,7 @@
 set style line 9 linewidth 5\n\
 set style line 10 linewidth 5\n\
 set style line 11 linewidth 5\n\
-set style line 12 linewidth 5\n\
-set style increment user");
+set style line 12 linewidth 5\n");
     yansplot.GenerateOutput(yansfile);
     yansfile.close();
 
@@ -138,8 +137,7 @@
 set style line 9 linewidth 5\n\
 set style line 10 linewidth 5\n\
 set style line 11 linewidth 5\n\
-set style line 12 linewidth 5\n\
-set style increment user");
+set style line 12 linewidth 5\n");
 
     nistplot.GenerateOutput(nistfile);
     nistfile.close();
@@ -159,8 +157,7 @@
 set style line 9 linewidth 5\n\
 set style line 10 linewidth 5\n\
 set style line 11 linewidth 5\n\
-set style line 12 linewidth 5\n\
-set style increment user");
+set style line 12 linewidth 5\n");
 
     tableplot.GenerateOutput(tablefile);
     tablefile.close();
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/examples/wireless/wifi-ofdm-ht-validation.cc ns-3.45/examples/wireless/wifi-ofdm-ht-validation.cc
--- ns-3.44/examples/wireless/wifi-ofdm-ht-validation.cc	2025-03-09 16:55:49.339371000 -0700
+++ ns-3.45/examples/wireless/wifi-ofdm-ht-validation.cc	2025-06-01 20:34:45.274701000 -0700
@@ -4,10 +4,10 @@
  * Author: Sébastien Deronne <sebastien.deronne@gmail.com>
  */
 
-// This example is used to validate Nist, Yans and Table-based error rate models for HT rates.
-//
-// It outputs plots of the Frame Success Rate versus the Signal-to-noise ratio for
-// Nist, Yans and Table-based error rate models and for every HT MCS value.
+// This example is used to generate plots of the Frame Success Rate (FSR) versus the Signal-to-noise
+// ratio (SNR) for NIST, YANS and Table-based error rate models and for every HT MCS value. It also
+// performs a boundary check to ensure that the FSR is between 0 and 1. The results are finally
+// saved in files (.plt) per model which can be processed by gnuplot to generate the plots.
 
 #include "ns3/command-line.h"
 #include "ns3/gnuplot.h"
@@ -110,8 +110,7 @@
 set style line 5 linewidth 5\n\
 set style line 6 linewidth 5\n\
 set style line 7 linewidth 5\n\
-set style line 8 linewidth 5\n\
-set style increment user");
+set style line 8 linewidth 5\n");
     yansplot.GenerateOutput(yansfile);
     yansfile.close();
 
@@ -126,8 +125,7 @@
 set style line 5 linewidth 5\n\
 set style line 6 linewidth 5\n\
 set style line 7 linewidth 5\n\
-set style line 8 linewidth 5\n\
-set style increment user");
+set style line 8 linewidth 5\n");
 
     nistplot.GenerateOutput(nistfile);
     nistfile.close();
@@ -143,8 +141,7 @@
 set style line 5 linewidth 5\n\
 set style line 6 linewidth 5\n\
 set style line 7 linewidth 5\n\
-set style line 8 linewidth 5\n\
-set style increment user");
+set style line 8 linewidth 5\n");
 
     tableplot.GenerateOutput(tablefile);
     tablefile.close();
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/examples/wireless/wifi-ofdm-validation.cc ns-3.45/examples/wireless/wifi-ofdm-validation.cc
--- ns-3.44/examples/wireless/wifi-ofdm-validation.cc	2025-03-09 16:55:49.339371000 -0700
+++ ns-3.45/examples/wireless/wifi-ofdm-validation.cc	2025-06-01 20:34:45.274701000 -0700
@@ -6,10 +6,10 @@
  * Author: Gary Pei <guangyu.pei@boeing.com>
  */
 
-// This example is used to validate Nist, Yans and Table-based error rate models for OFDM rates.
-//
-// It outputs plots of the Frame Success Rate versus the Signal-to-noise ratio for
-// Nist, Yans and Table-based error rate models and for every OFDM mode.
+// This example is used to generate plots of the Frame Success Rate (FSR) versus the Signal-to-noise
+// ratio (SNR) for NIST, YANS and Table-based error rate models and for every OFDM rate. It also
+// performs a boundary check to ensure that the FSR is between 0 and 1. The results are finally
+// saved in files (.plt) per model which can be processed by gnuplot to generate the plots.
 
 #include "ns3/command-line.h"
 #include "ns3/gnuplot.h"
@@ -112,8 +112,7 @@
 set style line 5 linewidth 5\n\
 set style line 6 linewidth 5\n\
 set style line 7 linewidth 5\n\
-set style line 8 linewidth 5\n\
-set style increment user");
+set style line 8 linewidth 5\n");
     yansplot.GenerateOutput(yansfile);
     yansfile.close();
 
@@ -128,8 +127,7 @@
 set style line 5 linewidth 5\n\
 set style line 6 linewidth 5\n\
 set style line 7 linewidth 5\n\
-set style line 8 linewidth 5\n\
-set style increment user");
+set style line 8 linewidth 5\n");
 
     nistplot.GenerateOutput(nistfile);
     nistfile.close();
@@ -145,8 +143,7 @@
 set style line 5 linewidth 5\n\
 set style line 6 linewidth 5\n\
 set style line 7 linewidth 5\n\
-set style line 8 linewidth 5\n\
-set style increment user");
+set style line 8 linewidth 5\n");
 
     tableplot.GenerateOutput(tablefile);
     tablefile.close();
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/examples/wireless/wifi-ofdm-vht-validation.cc ns-3.45/examples/wireless/wifi-ofdm-vht-validation.cc
--- ns-3.44/examples/wireless/wifi-ofdm-vht-validation.cc	2025-03-09 16:55:49.339371000 -0700
+++ ns-3.45/examples/wireless/wifi-ofdm-vht-validation.cc	2025-06-01 20:34:45.274701000 -0700
@@ -4,11 +4,11 @@
  * Author: Sébastien Deronne <sebastien.deronne@gmail.com>
  */
 
-// This example is used to validate Nist, Yans and Table-based error rate models for VHT rates.
-//
-// It outputs plots of the Frame Success Rate versus the Signal-to-noise ratio for
-// Nist, Yans and Table-based error rate models and for every VHT MCS value (MCS 9 is not
-// included since it is forbidden for 20 MHz channels).
+// This example is used to generate plots of the Frame Success Rate (FSR) versus the Signal-to-noise
+// ratio (SNR) for NIST, YANS and Table-based error rate models and for every VHT MCS value (MCS 9
+// is not included since it is forbidden for 20 MHz channels). It also performs a boundary check to
+// ensure that the FSR is between 0 and 1. The results are finally saved in files (.plt) per model
+// which can be processed by gnuplot to generate the plots.
 
 #include "ns3/command-line.h"
 #include "ns3/gnuplot.h"
@@ -113,8 +113,7 @@
 set style line 6 linewidth 5\n\
 set style line 7 linewidth 5\n\
 set style line 8 linewidth 5\n\
-set style line 9 linewidth 5\n\
-set style increment user");
+set style line 9 linewidth 5\n");
     yansplot.GenerateOutput(yansfile);
     yansfile.close();
 
@@ -130,8 +129,7 @@
 set style line 6 linewidth 5\n\
 set style line 7 linewidth 5\n\
 set style line 8 linewidth 5\n\
-set style line 9 linewidth 5\n\
-set style increment user");
+set style line 9 linewidth 5\n");
 
     nistplot.GenerateOutput(nistfile);
     nistfile.close();
@@ -148,8 +146,7 @@
 set style line 6 linewidth 5\n\
 set style line 7 linewidth 5\n\
 set style line 8 linewidth 5\n\
-set style line 9 linewidth 5\n\
-set style increment user");
+set style line 9 linewidth 5\n");
 
     tableplot.GenerateOutput(tablefile);
     tablefile.close();
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/examples/wireless/wifi-spatial-reuse.cc ns-3.45/examples/wireless/wifi-spatial-reuse.cc
--- ns-3.44/examples/wireless/wifi-spatial-reuse.cc	2025-03-09 16:55:49.339371000 -0700
+++ ns-3.45/examples/wireless/wifi-spatial-reuse.cc	2025-06-01 20:34:45.275701000 -0700
@@ -345,17 +345,20 @@
     Config::Connect("/NodeList/*/ApplicationList/*/$ns3::PacketSocketServer/Rx",
                     MakeCallback(&SocketRx));
 
-    // Obtain pointers to the ObssPdAlgorithm objects and hook trace sinks
-    // to the Reset trace source on each STA.  Note that this trace connection
-    // cannot be done through the Config path system, so pointers are used.
-    auto deviceA = staDeviceA.Get(0)->GetObject<WifiNetDevice>();
-    auto hePhyA = DynamicCast<HePhy>(deviceA->GetPhy()->GetPhyEntity(WIFI_MOD_CLASS_HE));
-    // Pass in the context string "1" to allow the trace to distinguish objects
-    hePhyA->GetObssPdAlgorithm()->TraceConnect("Reset", "1", MakeCallback(&ResetTrace));
-    auto deviceB = staDeviceB.Get(0)->GetObject<WifiNetDevice>();
-    auto hePhyB = DynamicCast<HePhy>(deviceB->GetPhy()->GetPhyEntity(WIFI_MOD_CLASS_HE));
-    // Pass in the context string "2" to allow the trace to distinguish objects
-    hePhyB->GetObssPdAlgorithm()->TraceConnect("Reset", "2", MakeCallback(&ResetTrace));
+    if (enableObssPd)
+    {
+        // Obtain pointers to the ObssPdAlgorithm objects and hook trace sinks
+        // to the Reset trace source on each STA.  Note that this trace connection
+        // cannot be done through the Config path system, so pointers are used.
+        auto deviceA = staDeviceA.Get(0)->GetObject<WifiNetDevice>();
+        auto hePhyA = DynamicCast<HePhy>(deviceA->GetPhy()->GetPhyEntity(WIFI_MOD_CLASS_HE));
+        // Pass in the context string "1" to allow the trace to distinguish objects
+        hePhyA->GetObssPdAlgorithm()->TraceConnect("Reset", "1", MakeCallback(&ResetTrace));
+        auto deviceB = staDeviceB.Get(0)->GetObject<WifiNetDevice>();
+        auto hePhyB = DynamicCast<HePhy>(deviceB->GetPhy()->GetPhyEntity(WIFI_MOD_CLASS_HE));
+        // Pass in the context string "2" to allow the trace to distinguish objects
+        hePhyB->GetObssPdAlgorithm()->TraceConnect("Reset", "2", MakeCallback(&ResetTrace));
+    }
 
     Simulator::Stop(duration);
     Simulator::Run();
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/examples/wireless/wifi-vht-network.cc ns-3.45/examples/wireless/wifi-vht-network.cc
--- ns-3.44/examples/wireless/wifi-vht-network.cc	2025-03-09 16:55:49.339371000 -0700
+++ ns-3.45/examples/wireless/wifi-vht-network.cc	2025-06-01 20:34:45.276701000 -0700
@@ -148,6 +148,11 @@
 
     int minChannelWidth = 20;
     int maxChannelWidth = 160;
+    if ((channelWidth != -1) &&
+        ((channelWidth < minChannelWidth) || (channelWidth > maxChannelWidth)))
+    {
+        NS_FATAL_ERROR("Invalid channel width: " << channelWidth << " MHz");
+    }
     if (channelWidth >= minChannelWidth && channelWidth <= maxChannelWidth)
     {
         minChannelWidth = channelWidth;
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/ns3 ns-3.45/ns3
--- ns-3.44/ns3	2025-03-09 16:55:49.339371000 -0700
+++ ns-3.45/ns3	2025-06-01 20:34:45.276701000 -0700
@@ -1506,7 +1506,11 @@
             if target_to_run in ["mpiexec", "mpirun"] and os.getenv("MPI_CI"):
                 if shutil.which("ompi_info"):
                     target_args = ["--oversubscribe"] + target_args
-                target_args = ["--allow-run-as-root"] + target_args
+                    try:
+                        subprocess.check_call([target_to_run, "--allow-run-as-root", "dir"])
+                        target_args = ["--allow-run-as-root"] + target_args
+                    except subprocess.CalledProcessError:
+                        pass
 
     program_arguments = [*debugging_software, target_to_run, *target_args]
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/pyproject.toml ns-3.45/pyproject.toml
--- ns-3.44/pyproject.toml	2025-03-09 16:55:49.339371000 -0700
+++ ns-3.45/pyproject.toml	2025-06-01 20:34:45.276701000 -0700
@@ -5,7 +5,7 @@
     "setuptools>=45",
     "setuptools_scm[toml]>=6.0",
     "cmake-build-extension>=0.4",
-    "cppyy==3.1.2",
+    "cppyy==3.5.0",
 ]
 
 [tool.setuptools_scm]
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/README.md ns-3.45/README.md
--- ns-3.44/README.md	2025-03-09 16:55:49.227370500 -0700
+++ ns-3.45/README.md	2025-06-01 20:34:45.176700800 -0700
@@ -14,6 +14,8 @@
 ## Table of Contents
 
 * [Overview](#overview-an-open-source-project)
+* [Software overview](#software-overview)
+* [Getting ns-3](#getting-ns-3)
 * [Building ns-3](#building-ns-3)
 * [Testing ns-3](#testing-ns-3)
 * [Running ns-3](#running-ns-3)
@@ -41,13 +43,60 @@
 tutorial that is maintained at:
 <https://www.nsnam.org/documentation/latest/>
 
-## Building ns-3
+## Software overview
+
+From a software perspective, ns-3 consists of a number of C++
+libraries organized around different topics and technologies.
+Programs that actually run simulations can be written in
+either C++ or Python; the use of Python is enabled by
+[runtime C++/Python bindings](https://cppyy.readthedocs.io/en/latest/).  Simulation programs will
+typically link or import the ns `core` library and any additional
+libraries that they need.  ns-3 requires a modern C++ compiler
+installation (g++ or clang++) and the [CMake](https://cmake.org) build system.
+Most ns-3 programs are single-threaded; there is some limited
+support for parallelization using the [MPI](https://www.nsnam.org/docs/models/html/distributed.html) framework.
+ns-3 can also run in a real-time emulation mode by binding to an
+Ethernet device on the host machine and generating and consuming
+packets on an actual network.  The ns-3 APIs are documented
+using [Doxygen](https://www.doxygen.nl).
 
 The code for the framework and the default models provided
-by ns-3 is built as a set of libraries. User simulations
-are expected to be written as simple programs that make
-use of these ns-3 libraries.
+by ns-3 is built as a set of libraries. The libraries maintained
+by the open source project can be found in the `src` directory.
+Users may extend ns-3 by adding libraries to the build;
+third-party libraries can be found on the [ns-3 App Store](https://www.nsnam.org)
+or elsewhere in public Git repositories, and are usually added to the `contrib` directory.
+
+## Getting ns-3
+
+ns-3 can be obtained by either downloading a released source
+archive, or by cloning the project's
+[Git repository](https://gitlab.com/nsnam/ns-3-dev.git).
+
+Starting with ns-3 release version 3.45, there are two versions
+of source archives that are published with each release:
+
+1. ns-3.##.tar.bz2
+1. ns-allinone-3.##.tar.bz2
+
+The first archive is simply a compressed archive of the same code
+that one can obtain by checking out the release tagged code from
+the ns-3-dev Git repository.  The second archive consists of
+ns-3 plus additional contributed modules that are maintained outside
+of the main ns-3 open source project but that have been reviewed
+by maintainers and lightly tested for compatibility with the
+release.  The contributed modules included in the `allinone` release
+will change over time as new third-party libraries emerge while others
+may lose compatibility with the ns-3 mainline (e.g., if they become
+unmaintained).
+
+## Building ns-3
 
+As mentioned above, ns-3 uses the CMake build system, but
+the project maintains a customized wrapper around CMake
+called the `ns3` tool.  This tool provides a
+[Waf-like](https://waf.io) API
+to the underlying CMake build manager.
 To build the set of default libraries and the example
 programs included in this package, you need to use the
 `ns3` tool. This tool provides a Waf-like API to the
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/RELEASE_NOTES.md ns-3.45/RELEASE_NOTES.md
--- ns-3.44/RELEASE_NOTES.md	2025-03-09 16:56:09.315445400 -0700
+++ ns-3.45/RELEASE_NOTES.md	2025-06-01 20:34:45.177700800 -0700
@@ -12,6 +12,54 @@
 and references prefixed by '!' refer to a
 [GitLab.com merge request](https://gitlab.com/nsnam/ns-3-dev/-/merge_requests) number.
 
+## Release 3.45
+
+This release is available from:
+<https://www.nsnam.org/release/ns-3.45.tar.bz2>
+
+### Supported platforms
+
+This release is intended to work on systems with the following minimal
+requirements (Note: not all ns-3 features are available on all systems):
+
+- g++-10.1 or later, or LLVM/clang++-11 or later
+- Python 3.8 or later
+- CMake 3.13 or later
+- (macOS only) Xcode 13.1.6 or later
+- (Windows only) Msys2/MinGW64 and Msys2/UCRT64 toolchains or WSL2
+
+Python API requires [Cppyy](https://cppyy.readthedocs.io/en/latest/installation.html) and has only
+been tested on Linux. As of this release, the latest known version to work with ns-3 is cppyy==3.5.0.
+
+The required Doxygen version for documentation generation is now version 1.13.
+
+Note that the ns-3 allinone archive has been redesigned for this release; the
+allinone release no longer contains the `netanim` animator or the `bake` build tools
+but instead contains ns-3 plus additional contributed ns-3 modules that are known
+to work with the release.
+
+### New user-visible features
+
+- (dsr) !2403 - Reformatted documentation and added a new concept figure.
+- (flow-monitor) !2387 - Reformatted documentation and added a new concept figure.
+- (internet-apps) !2084 - GSoC 2024 DHCPV6 application added.
+- (lr-wpan) - !2429 - Renamed example lr-wpan-mlme to lr-wpan-beacon-mode.
+- (lr-wpan) - !2429 - Documentation update and small reformat fixes.
+- (wifi) 320 MHz channel support was added to the 802.11be model
+- (wifi) Added the `ProtectSingleExchange` attribute to the `QosFrameExchangeManager` to choose whether the NAV protection should cover the entire TXOP or only the current frame exchange when the TXOP limit is non-zero. In that case, the Duration/ID field in frames establishing the protection is set to the time remaining until the end of the current frame exchange. It is also possible to select whether the NAV duration should be extended by an additional time to protect beyond end of the immediate frame exchange via the `SingleExchangeProtectionSurplus` attribute of the `QosFrameExchangeManager`.
+
+### Bugs fixed
+
+- (bindings) #1187 - Fix library filtering to skip non-ns-3 libraries with "ns3" in their names.
+- (flow-monitor) #1202 - Create XML file in text mode
+- (mobility) !2397 - Fix Rectangle::GetClosestSideOrCorner. It could assign the incorrect side when the checked position was outside the rectangle.
+- (wifi) #2368 - Fix various issues related to Content Channels and RU allocation. Fixes mostly covers cases where OFDMA is used with central 26 tones, where a single user is being assigned the whole PPDU bandwidth or where a RU is larger than 20 MHz.
+- (wifi) Various fixes to the EMLSR model have been made
+- (wifi) Fix the time the `NSlotsLeftAlert` trace source of `ChannelAccessManager` is fired (it cannot be earlier than the access grant start time)
+- (wifi) Fix the EIFS computation, which depends on the modulation class of the PPDU whose reception failed rather than on the latest standard supported by a device
+- (wifi) #1158 - Reintroduce WifiPpdu's destructor due to PIMPL
+- (zigbee) !2383 - Fix malformed RREP command with missing command options field.
+
 ## Release 3.44
 
 This release adds the zigbee module and otherwise contains maintenance and small feature updates
@@ -61,6 +109,8 @@
 - (wifi) 2009! - Added WifiTxStatsHelper for Wi-Fi MAC-level tracing.
 - (wifi) - Added support for 802.11aa groupcast with retries (GCR). Both unsolicited retries (GCR-UR) and Block Ack (GCR-BA) mechanisms are implemented.
 - (zigbee) Added a new Zigbee module.
+- (wifi) Trigger frames have been extended to support Special User Info field
+- (wifi) Added support for 802.11be STAs to operate on 320 MHz in 6 GHz band.
 
 ### Bugs fixed
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/setup.cfg ns-3.45/setup.cfg
--- ns-3.44/setup.cfg	2025-03-09 16:55:49.339371000 -0700
+++ ns-3.45/setup.cfg	2025-06-01 20:34:45.276701000 -0700
@@ -38,5 +38,5 @@
 zip_safe = False
 python_requires = >=3.8
 install_requires =
-    cppyy==3.1.2
+    cppyy==3.5.0
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/antenna/model/uniform-planar-array.cc ns-3.45/src/antenna/model/uniform-planar-array.cc
--- ns-3.44/src/antenna/model/uniform-planar-array.cc	2025-03-09 16:55:49.343371000 -0700
+++ ns-3.45/src/antenna/model/uniform-planar-array.cc	2025-06-01 20:34:45.277701100 -0700
@@ -138,28 +138,37 @@
 void
 UniformPlanarArray::SetAlpha(double alpha)
 {
-    m_alpha = alpha;
-    m_cosAlpha = cos(m_alpha);
-    m_sinAlpha = sin(m_alpha);
-    InvalidateChannels();
+    if (alpha != m_alpha)
+    {
+        m_alpha = alpha;
+        m_cosAlpha = cos(m_alpha);
+        m_sinAlpha = sin(m_alpha);
+        InvalidateChannels();
+    }
 }
 
 void
 UniformPlanarArray::SetBeta(double beta)
 {
-    m_beta = beta;
-    m_cosBeta = cos(m_beta);
-    m_sinBeta = sin(m_beta);
-    InvalidateChannels();
+    if (beta != m_beta)
+    {
+        m_beta = beta;
+        m_cosBeta = cos(m_beta);
+        m_sinBeta = sin(m_beta);
+        InvalidateChannels();
+    }
 }
 
 void
 UniformPlanarArray::SetPolSlant(double polSlant)
 {
-    m_polSlant = polSlant;
-    m_cosPolSlant[0] = cos(m_polSlant);
-    m_sinPolSlant[0] = sin(m_polSlant);
-    InvalidateChannels();
+    if (polSlant != m_polSlant)
+    {
+        m_polSlant = polSlant;
+        m_cosPolSlant[0] = cos(m_polSlant);
+        m_sinPolSlant[0] = sin(m_polSlant);
+        InvalidateChannels();
+    }
 }
 
 void
@@ -298,8 +307,11 @@
     NS_ASSERT_MSG(nPorts > 0, "Ports should be greater than 0");
     NS_ASSERT_MSG(((m_numRows % nPorts) == 0),
                   "The number of vertical ports must divide number of rows");
-    m_numVPorts = nPorts;
-    InvalidateChannels();
+    if (nPorts != m_numVPorts)
+    {
+        m_numVPorts = nPorts;
+        InvalidateChannels();
+    }
 }
 
 void
@@ -308,8 +320,11 @@
     NS_ASSERT_MSG(nPorts > 0, "Ports should be greater than 0");
     NS_ASSERT_MSG(((m_numColumns % nPorts) == 0),
                   "The number of horizontal ports must divide number of columns");
-    m_numHPorts = nPorts;
-    InvalidateChannels();
+    if (nPorts != m_numHPorts)
+    {
+        m_numHPorts = nPorts;
+        InvalidateChannels();
+    }
 }
 
 uint16_t
@@ -383,13 +398,16 @@
 void
 UniformPlanarArray::SetDualPol(bool isDualPol)
 {
-    m_isDualPolarized = isDualPol;
-    if (isDualPol)
+    if (isDualPol != m_isDualPolarized)
     {
-        m_cosPolSlant[1] = cos(m_polSlant - M_PI / 2);
-        m_sinPolSlant[1] = sin(m_polSlant - M_PI / 2);
+        m_isDualPolarized = isDualPol;
+        if (isDualPol)
+        {
+            m_cosPolSlant[1] = cos(m_polSlant - M_PI / 2);
+            m_sinPolSlant[1] = sin(m_polSlant - M_PI / 2);
+        }
+        InvalidateChannels();
     }
-    InvalidateChannels();
 }
 
 double
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/antenna/test/test-adjacency-matrix.cc ns-3.45/src/antenna/test/test-adjacency-matrix.cc
--- ns-3.44/src/antenna/test/test-adjacency-matrix.cc	2025-03-09 16:55:49.343371000 -0700
+++ ns-3.45/src/antenna/test/test-adjacency-matrix.cc	2025-06-01 20:34:45.278701000 -0700
@@ -23,7 +23,9 @@
      * The constructor of the test case
      */
     SymmetricAdjacencyMatrixTestCase()
-        : TestCase("SymmetricAdjacencyMatrix test case"){};
+        : TestCase("SymmetricAdjacencyMatrix test case")
+    {
+    }
 
   private:
     /**
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/antenna/test/test-cosine-antenna.cc ns-3.45/src/antenna/test/test-cosine-antenna.cc
--- ns-3.44/src/antenna/test/test-cosine-antenna.cc	2025-03-09 16:55:49.343371000 -0700
+++ ns-3.45/src/antenna/test/test-cosine-antenna.cc	2025-06-01 20:34:45.278701000 -0700
@@ -80,8 +80,7 @@
 {
     std::ostringstream oss;
     oss << "theta=" << a.GetInclination() << " , phi=" << a.GetAzimuth() << ", beamdwidth=" << b
-        << "deg"
-        << ", orientation=" << o << ", maxGain=" << g << " dB";
+        << "deg, orientation=" << o << ", maxGain=" << g << " dB";
     return oss.str();
 }
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/antenna/test/test-parabolic-antenna.cc ns-3.45/src/antenna/test/test-parabolic-antenna.cc
--- ns-3.44/src/antenna/test/test-parabolic-antenna.cc	2025-03-09 16:55:49.343371000 -0700
+++ ns-3.45/src/antenna/test/test-parabolic-antenna.cc	2025-06-01 20:34:45.278701000 -0700
@@ -81,8 +81,7 @@
 {
     std::ostringstream oss;
     oss << "theta=" << a.GetInclination() << " , phi=" << a.GetAzimuth() << ", beamdwidth=" << b
-        << "deg"
-        << ", orientation=" << o << ", maxAttenuation=" << g << " dB";
+        << "deg, orientation=" << o << ", maxAttenuation=" << g << " dB";
     return oss.str();
 }
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/antenna/test/test-uniform-planar-array.cc ns-3.45/src/antenna/test/test-uniform-planar-array.cc
--- ns-3.44/src/antenna/test/test-uniform-planar-array.cc	2025-03-09 16:55:49.343371000 -0700
+++ ns-3.45/src/antenna/test/test-uniform-planar-array.cc	2025-06-01 20:34:45.278701000 -0700
@@ -108,8 +108,7 @@
 {
     std::ostringstream oss;
     oss << "UPA=" << rows << "x" << cols << ", row spacing=" << rowSpace << "*lambda"
-        << ", col spacing=" << colSpace << "*lambda"
-        << ", bearing=" << RadiansToDegrees(alpha) << " deg"
+        << ", col spacing=" << colSpace << "*lambda, bearing=" << RadiansToDegrees(alpha) << " deg"
         << ", tilting=" << RadiansToDegrees(beta) << " deg"
         << ", element=" << element->GetInstanceTypeId().GetName() << ", direction=" << direction;
     return oss.str();
@@ -207,7 +206,9 @@
      */
     UpdateOnChangeTestCase(Ptr<AntennaModel> element, std::string name)
         : TestCase(name),
-          m_element(element){};
+          m_element(element)
+    {
+    }
 
   private:
     /**
@@ -257,6 +258,19 @@
         false,
         "Not expecting update, since the pair was just updated and no settings changed");
     ant->SetAlpha(DegreesToRadians(90));
+    NS_TEST_ASSERT_MSG_EQ(
+        ant->IsChannelOutOfDate(ant2),
+        false,
+        "Not expecting update, since the pair was just updated and angle was not changed");
+    ant->SetAlpha(DegreesToRadians(85));
+    NS_TEST_ASSERT_MSG_EQ(ant2->IsChannelOutOfDate(ant),
+                          true,
+                          "Expecting update, antenna parameter changed");
+    NS_TEST_ASSERT_MSG_EQ(
+        ant->IsChannelOutOfDate(ant2),
+        false,
+        "Not expecting update, since the pair was just updated and angle was not changed");
+    ant->SetAlpha(DegreesToRadians(80));
     NS_TEST_ASSERT_MSG_EQ(ant->IsChannelOutOfDate(ant2),
                           true,
                           "Expecting update, antenna parameter changed");
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/antenna/utils/symmetric-adjacency-matrix.h ns-3.45/src/antenna/utils/symmetric-adjacency-matrix.h
--- ns-3.44/src/antenna/utils/symmetric-adjacency-matrix.h	2025-03-09 16:55:49.343371000 -0700
+++ ns-3.45/src/antenna/utils/symmetric-adjacency-matrix.h	2025-06-01 20:34:45.278701000 -0700
@@ -126,7 +126,7 @@
  *
  * Then we set the weights from the nodes to themselves as 0
  * @code
- * for (size_t i=0; i < routeWeights.GetRows(); i++)
+ * for (std::size_t i=0; i < routeWeights.GetRows(); i++)
  * {
  *     routeWeights.SetValue(i, i, 0);
  * }
@@ -135,9 +135,9 @@
  * Create the known shortest paths
  * @code
  *  std::map<std::pair<int, int>, std::vector<int>> routeMap;
- *  for (size_t i = 0; i < routeWeights.GetRows(); i++)
+ *  for (std::size_t i = 0; i < routeWeights.GetRows(); i++)
  *  {
- *      for (size_t j = 0; j < routeWeights.GetRows(); j++)
+ *      for (std::size_t j = 0; j < routeWeights.GetRows(); j++)
  *      {
  *          if (routeWeights.GetValue(i, j) != maxFloat)
  *          {
@@ -158,11 +158,11 @@
  * and store them in a routing table. In this case, by brute-force
  *
  * @code
- * for (size_t bridgeNode = 0; bridgeNode < routeWeights.GetRows(); bridgeNode++)
+ * for (std::size_t bridgeNode = 0; bridgeNode < routeWeights.GetRows(); bridgeNode++)
  *  {
- *      for (size_t srcNode = 0; srcNode < routeWeights.GetRows(); srcNode++)
+ *      for (std::size_t srcNode = 0; srcNode < routeWeights.GetRows(); srcNode++)
  *      {
- *          for (size_t dstNode = 0; dstNode < routeWeights.GetRows(); dstNode++)
+ *          for (std::size_t dstNode = 0; dstNode < routeWeights.GetRows(); dstNode++)
  *          {
  *              auto weightA = routeWeights.GetValue(srcNode, bridgeNode);
  *              auto weightB = routeWeights.GetValue(bridgeNode, dstNode);
@@ -237,16 +237,16 @@
      * @param [in] numRows The number of rows in the matrix
      * @param [in] value The default initialization value of matrix
      */
-    SymmetricAdjacencyMatrix(size_t numRows = 0, T value = {})
+    SymmetricAdjacencyMatrix(std::size_t numRows = 0, T value = {})
     {
         m_rows = numRows;
         m_matrix.resize(m_rows * (m_rows + 1) / 2);
         std::fill(m_matrix.begin(), m_matrix.end(), value);
-        for (size_t i = 0; i < numRows; i++)
+        for (std::size_t i = 0; i < numRows; i++)
         {
             m_rowOffsets.push_back(i * (i + 1) / 2);
         }
-    };
+    }
 
     /**
      * @brief Retrieve the value of matrix (row, column) node
@@ -254,7 +254,7 @@
      * @param [in] column  The column of the matrix to retrieve the value
      * @return value retrieved from matrix (row, column) or matrix (column, row)
      */
-    T GetValue(size_t row, size_t column)
+    T GetValue(std::size_t row, std::size_t column)
     {
         // Highest id should be always row, since we have only half matrix
         const auto maxIndex = std::max(row, column);
@@ -268,7 +268,7 @@
      * @param [in] column The column of the matrix to set the value
      * @param [in] value value to be assigned to matrix (row, column) or matrix (column, row)
      */
-    void SetValue(size_t row, size_t column, T value)
+    void SetValue(std::size_t row, std::size_t column, T value)
     {
         // Highest id should be always row, since we have only half matrix
         const auto maxIndex = std::max(row, column);
@@ -282,18 +282,18 @@
      * @param [in] row The row of the matrix to set the value
      * @param [in] value Value to be assigned to matrix (row, column) or matrix (column, row)
      */
-    void SetValueAdjacent(size_t row, T value)
+    void SetValueAdjacent(std::size_t row, T value)
     {
         // Since we only store the lower-left half of the adjacency matrix,
         // we need to set the adjacent values in both rows and columns involving this row id
 
         // First set the columns of row m_id
-        for (size_t i = 0; i < row; i++)
+        for (std::size_t i = 0; i < row; i++)
         {
             m_matrix.at(m_rowOffsets.at(row) + i) = value;
         }
         // Then set the column m_id of rows >= m_id
-        for (size_t i = row; i < m_rows; i++)
+        for (std::size_t i = row; i < m_rows; i++)
         {
             m_matrix.at(m_rowOffsets.at(i) + row) = value;
         }
@@ -307,24 +307,24 @@
         m_rowOffsets.push_back(m_matrix.size());
         m_rows++;
         m_matrix.resize(m_matrix.size() + m_rows);
-    };
+    }
 
     /**
      * @brief Retrieve number of rows in the adjacency matrix
      * @return the number of rows
      */
-    size_t GetRows()
+    std::size_t GetRows()
     {
         return m_rows;
     }
 
   private:
-    size_t m_rows; //!< Number of rows in matrix
+    std::size_t m_rows; //!< Number of rows in matrix
     std::vector<T>
         m_matrix; //!< The adjacency matrix. For efficiency purposes, we store only lower
                   //!< left half, including the main diagonal. It also is stored as a vector
                   //!< not to introduce gaps between different rows or items (in case T = bool)
-    std::vector<size_t> m_rowOffsets; //!< Precomputed row starting offsets of m_matrix
+    std::vector<std::size_t> m_rowOffsets; //!< Precomputed row starting offsets of m_matrix
 };
 
 } // namespace ns3
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/aodv/model/aodv-packet.cc ns-3.45/src/aodv/model/aodv-packet.cc
--- ns-3.44/src/aodv/model/aodv-packet.cc	2025-03-09 16:55:49.343371000 -0700
+++ ns-3.45/src/aodv/model/aodv-packet.cc	2025-06-01 20:34:45.279701000 -0700
@@ -201,10 +201,10 @@
 void
 RreqHeader::Print(std::ostream& os) const
 {
-    os << "RREQ ID " << m_requestID << " destination: ipv4 " << m_dst << " sequence number "
-       << m_dstSeqNo << " source: ipv4 " << m_origin << " sequence number " << m_originSeqNo
-       << " flags:"
-       << " Gratuitous RREP " << (*this).GetGratuitousRrep() << " Destination only "
+    os << "RREQ ID " << m_requestID;
+    os << " destination: ipv4 " << m_dst << " sequence number " << m_dstSeqNo;
+    os << " source: ipv4 " << m_origin << " sequence number " << m_originSeqNo;
+    os << " flags: Gratuitous RREP " << (*this).GetGratuitousRrep() << " Destination only "
        << (*this).GetDestinationOnly() << " Unknown sequence number " << (*this).GetUnknownSeqno();
 }
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/aodv/test/aodv-regression.h ns-3.45/src/aodv/test/aodv-regression.h
--- ns-3.44/src/aodv/test/aodv-regression.h	2025-03-09 16:55:49.343371000 -0700
+++ ns-3.45/src/aodv/test/aodv-regression.h	2025-06-01 20:34:45.280701200 -0700
@@ -23,11 +23,13 @@
  *
  * This script creates 1-dimensional grid topology and then ping last node from the first one:
  */
+
 // clang-format off
 /**
  *     [10.1.1.1] <-- step --> [10.1.1.2] <-- step --> [10.1.1.3] <-- step --> [10.1.1.4] <-- step --> [10.1.1.5]
  */
 // clang-format on
+
 /**
  * Each node can hear only his right and his left neighbor, if they exist.
  * When one third of total time expired, central node moves away.
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/applications/model/three-gpp-http-client.cc ns-3.45/src/applications/model/three-gpp-http-client.cc
--- ns-3.44/src/applications/model/three-gpp-http-client.cc	2025-03-09 16:55:49.347370900 -0700
+++ ns-3.45/src/applications/model/three-gpp-http-client.cc	2025-06-01 20:34:45.281701000 -0700
@@ -59,6 +59,7 @@
                 PointerValue(),
                 MakePointerAccessor(&ThreeGppHttpClient::m_httpVariables),
                 MakePointerChecker<ThreeGppHttpVariables>())
+            // NS_DEPRECATED_3_44
             .AddAttribute("RemoteServerAddress",
                           "The address of the destination server.",
                           AddressValue(),
@@ -66,6 +67,7 @@
                           MakeAddressChecker(),
                           TypeId::SupportLevel::DEPRECATED,
                           "Replaced by Remote in ns-3.44.")
+            // NS_DEPRECATED_3_44
             .AddAttribute("RemoteServerPort",
                           "The destination port of the outbound packets.",
                           UintegerValue(80), // the default HTTP port
@@ -364,10 +366,8 @@
             NS_FATAL_ERROR("Invalid state " << GetStateString() << " for ReceivedData().");
             break;
         }
-
-    } // end of `while ((packet = socket->RecvFrom (from)))`
-
-} // end of `void ReceivedDataCallback (Ptr<Socket> socket)`
+    }
+}
 
 void
 ThreeGppHttpClient::OpenConnection()
@@ -435,7 +435,7 @@
                                 MakeCallback(&ThreeGppHttpClient::ErrorCloseCallback, this));
     m_socket->SetRecvCallback(MakeCallback(&ThreeGppHttpClient::ReceivedDataCallback, this));
     m_socket->SetAttribute("MaxSegLifetime", DoubleValue(0.02)); // 20 ms.
-} // end of `void OpenConnection ()`
+}
 
 void
 ThreeGppHttpClient::RequestMainObject()
@@ -472,8 +472,7 @@
         SwitchToState(EXPECTING_MAIN_OBJECT);
         m_pageLoadStartTs = Simulator::Now(); // start counting page loading time
     }
-
-} // end of `void RequestMainObject ()`
+}
 
 void
 ThreeGppHttpClient::RequestEmbeddedObject()
@@ -518,8 +517,7 @@
         m_embeddedObjectsToBeRequested--;
         SwitchToState(EXPECTING_EMBEDDED_OBJECT);
     }
-
-} // end of `void RequestEmbeddedObject ()`
+}
 
 void
 ThreeGppHttpClient::ReceiveMainObject(Ptr<Packet> packet, const Address& from)
@@ -573,7 +571,7 @@
     }
 
     EnterParsingTime();
-} // end of `void ReceiveMainObject (Ptr<Packet> packet)`
+}
 
 void
 ThreeGppHttpClient::ReceiveEmbeddedObject(Ptr<Packet> packet, const Address& from)
@@ -643,7 +641,7 @@
         FinishReceivingPage(); // trigger callback for page loading time
         EnterReadingTime();
     }
-} // end of `void ReceiveEmbeddedObject (Ptr<Packet> packet)`
+}
 
 void
 ThreeGppHttpClient::Receive(Ptr<Packet> packet)
@@ -680,11 +678,9 @@
      */
     if (m_objectBytesToBeReceived < contentSize)
     {
-        NS_LOG_WARN(this << " The received packet"
-                         << " (" << contentSize << " bytes of content)"
-                         << " is larger than"
-                         << " the content that we expected to receive"
-                         << " (" << m_objectBytesToBeReceived << " bytes).");
+        NS_LOG_WARN(this << " The received packet (" << contentSize << " bytes of content)"
+                         << " is larger than the content that we expected to receive ("
+                         << m_objectBytesToBeReceived << " bytes).");
         // Stop expecting any more packet of this object.
         m_objectBytesToBeReceived = 0;
         m_constructedPacket = nullptr;
@@ -698,8 +694,7 @@
             m_constructedPacket->AddAtEnd(packetCopy);
         }
     }
-
-} // end of `void Receive (packet)`
+}
 
 void
 ThreeGppHttpClient::EnterParsingTime()
@@ -754,8 +749,7 @@
         FinishReceivingPage(); // trigger callback for page loading time
         EnterReadingTime();
     }
-
-} // end of `void ParseMainObject ()`
+}
 
 void
 ThreeGppHttpClient::EnterReadingTime()
@@ -816,10 +810,9 @@
     {
         if (m_objectBytesToBeReceived > 0)
         {
-            NS_FATAL_ERROR("Cannot start a new receiving session"
-                           << " if the previous object"
-                           << " (" << m_objectBytesToBeReceived << " bytes)"
-                           << " is not completely received yet.");
+            NS_FATAL_ERROR("Cannot start a new receiving session if the previous object ("
+                           << m_objectBytesToBeReceived
+                           << " bytes) is not completely received yet.");
         }
     }
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/applications/model/three-gpp-http-client.h ns-3.45/src/applications/model/three-gpp-http-client.h
--- ns-3.44/src/applications/model/three-gpp-http-client.h	2025-03-09 16:55:49.347370900 -0700
+++ ns-3.45/src/applications/model/three-gpp-http-client.h	2025-06-01 20:34:45.282701000 -0700
@@ -437,8 +437,7 @@
      * elapsed.
      */
     EventId m_eventParseMainObject;
-
-}; // end of `class ThreeGppHttpClient`
+};
 
 } // namespace ns3
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/applications/model/three-gpp-http-header.h ns-3.45/src/applications/model/three-gpp-http-header.h
--- ns-3.44/src/applications/model/three-gpp-http-header.h	2025-03-09 16:55:49.347370900 -0700
+++ ns-3.45/src/applications/model/three-gpp-http-header.h	2025-06-01 20:34:45.282701000 -0700
@@ -119,8 +119,7 @@
     uint32_t m_contentLength; //!<" Content length field (in bytes unit).
     uint64_t m_clientTs;      //!<" Client time stamp field (in time step unit).
     uint64_t m_serverTs;      //!<" Server time stamp field (in time step unit).
-
-}; // end of `class ThreeGppHttpHeader`
+};
 
 } // namespace ns3
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/applications/model/three-gpp-http-server.cc ns-3.45/src/applications/model/three-gpp-http-server.cc
--- ns-3.44/src/applications/model/three-gpp-http-server.cc	2025-03-09 16:55:49.347370900 -0700
+++ ns-3.45/src/applications/model/three-gpp-http-server.cc	2025-06-01 20:34:45.282701000 -0700
@@ -59,6 +59,7 @@
                           PointerValue(),
                           MakePointerAccessor(&ThreeGppHttpServer::m_httpVariables),
                           MakePointerChecker<ThreeGppHttpVariables>())
+            // NS_DEPRECATED_3_44
             .AddAttribute("LocalAddress",
                           "The local address of the server, "
                           "i.e., the address on which to bind the Rx socket.",
@@ -67,6 +68,7 @@
                           MakeAddressChecker(),
                           TypeId::SupportLevel::DEPRECATED,
                           "Replaced by Local in ns-3.44.")
+            // NS_DEPRECATED_3_44
             .AddAttribute("LocalPort",
                           "Port on which the application listen for incoming packets.",
                           UintegerValue(80), // the default HTTP port
@@ -282,10 +284,10 @@
         m_initialSocket->SetRecvCallback(
             MakeCallback(&ThreeGppHttpServer::ReceivedDataCallback, this));
         m_initialSocket->SetSendCallback(MakeCallback(&ThreeGppHttpServer::SendCallback, this));
-    } // end of `if (m_initialSocket == 0)`
+    }
 
     SwitchToState(STARTED);
-} // end of `void StartApplication ()`
+}
 
 void
 ThreeGppHttpServer::StopApplication()
@@ -442,8 +444,8 @@
         {
         case ThreeGppHttpHeader::MAIN_OBJECT: {
             const auto processingDelay = m_httpVariables->GetMainObjectGenerationDelay();
-            NS_LOG_INFO(this << " Will finish generating a main object"
-                             << " in " << processingDelay.As(Time::S) << ".");
+            NS_LOG_INFO(this << " Will finish generating a main object in "
+                             << processingDelay.As(Time::S) << ".");
             m_txBuffer->RecordNextServe(socket,
                                         Simulator::Schedule(processingDelay,
                                                             &ThreeGppHttpServer::ServeNewMainObject,
@@ -454,8 +456,8 @@
         }
         case ThreeGppHttpHeader::EMBEDDED_OBJECT: {
             const auto processingDelay = m_httpVariables->GetEmbeddedObjectGenerationDelay();
-            NS_LOG_INFO(this << " Will finish generating an embedded object"
-                             << " in " << processingDelay.As(Time::S) << ".");
+            NS_LOG_INFO(this << " Will finish generating an embedded object in "
+                             << processingDelay.As(Time::S) << ".");
             m_txBuffer->RecordNextServe(
                 socket,
                 Simulator::Schedule(processingDelay,
@@ -469,10 +471,8 @@
             NS_FATAL_ERROR("Invalid packet.");
             break;
         }
-
-    } // end of `while ((packet = socket->RecvFrom (from)))`
-
-} // end of `void ReceivedDataCallback (Ptr<Socket> socket)`
+    }
+}
 
 void
 ThreeGppHttpServer::SendCallback(Ptr<Socket> socket, uint32_t availableBufferSize)
@@ -494,12 +494,12 @@
         switch (m_txBuffer->GetBufferContentType(socket))
         {
         case ThreeGppHttpHeader::MAIN_OBJECT:
-            NS_LOG_INFO(this << " Transmission of main object is suspended"
-                             << " after " << actualSent << " bytes.");
+            NS_LOG_INFO(this << " Transmission of main object is suspended after " << actualSent
+                             << " bytes.");
             break;
         case ThreeGppHttpHeader::EMBEDDED_OBJECT:
-            NS_LOG_INFO(this << " Transmission of embedded object is suspended"
-                             << " after " << actualSent << " bytes.");
+            NS_LOG_INFO(this << " Transmission of embedded object is suspended after " << actualSent
+                             << " bytes.");
             break;
         default:
             NS_FATAL_ERROR("Invalid Tx buffer content type.");
@@ -522,8 +522,7 @@
         }
     }
 #endif /* NS3_LOG_ENABLE */
-
-} // end of `void SendCallback (Ptr<Socket> socket, uint32_t availableBufferSize)`
+}
 
 void
 ThreeGppHttpServer::ServeNewMainObject(Ptr<Socket> socket)
@@ -538,8 +537,8 @@
 
     if (actualSent < objectSize)
     {
-        NS_LOG_INFO(this << " Transmission of main object is suspended"
-                         << " after " << actualSent << " bytes.");
+        NS_LOG_INFO(this << " Transmission of main object is suspended after " << actualSent
+                         << " bytes.");
     }
     else
     {
@@ -560,8 +559,8 @@
 
     if (actualSent < objectSize)
     {
-        NS_LOG_INFO(this << " Transmission of embedded object is suspended"
-                         << " after " << actualSent << " bytes.");
+        NS_LOG_INFO(this << " Transmission of embedded object is suspended after " << actualSent
+                         << " bytes.");
     }
     else
     {
@@ -636,14 +635,11 @@
     }
     else
     {
-        NS_LOG_INFO(this << " Failed to send object,"
-                         << " GetErrNo= " << socket->GetErrno() << ","
-                         << " suspending transmission"
-                         << " and waiting for another Tx opportunity.");
+        NS_LOG_INFO(this << " Failed to send object, GetErrNo= " << socket->GetErrno()
+                         << ", suspending transmission and waiting for another Tx opportunity.");
         return 0;
     }
-
-} // end of `uint32_t ServeFromTxBuffer (Ptr<Socket> socket)`
+}
 
 void
 ThreeGppHttpServer::SwitchToState(ThreeGppHttpServer::State_t state)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/applications/model/three-gpp-http-variables.cc ns-3.45/src/applications/model/three-gpp-http-variables.cc
--- ns-3.44/src/applications/model/three-gpp-http-variables.cc	2025-03-09 16:55:49.347370900 -0700
+++ ns-3.45/src/applications/model/three-gpp-http-variables.cc	2025-06-01 20:34:45.282701000 -0700
@@ -202,9 +202,8 @@
     // Validate parameters.
     if (m_mainObjectSizeMax <= m_mainObjectSizeMin)
     {
-        NS_FATAL_ERROR("`MainObjectSizeMax` attribute "
-                       << " must be greater than"
-                       << " the `MainObjectSizeMin` attribute.");
+        NS_FATAL_ERROR("`MainObjectSizeMax` attribute must be greater than the `MainObjectSizeMin` "
+                       "attribute.");
     }
 
     /*
@@ -233,9 +232,8 @@
     // Validate parameters.
     if (m_embeddedObjectSizeMax <= m_embeddedObjectSizeMin)
     {
-        NS_FATAL_ERROR("`EmbeddedObjectSizeMax` attribute "
-                       << " must be greater than"
-                       << " the `EmbeddedObjectSizeMin` attribute.");
+        NS_FATAL_ERROR("`EmbeddedObjectSizeMax` attribute must be greater than the "
+                       "`EmbeddedObjectSizeMin` attribute.");
     }
 
     /*
@@ -259,9 +257,8 @@
     const auto upperBound = static_cast<uint32_t>(m_numOfEmbeddedObjectsRng->GetBound());
     if (upperBound <= m_numOfEmbeddedObjectsScale)
     {
-        NS_FATAL_ERROR("`NumOfEmbeddedObjectsMax` attribute "
-                       << " must be greater than"
-                       << " the `NumOfEmbeddedObjectsScale` attribute.");
+        NS_FATAL_ERROR("`NumOfEmbeddedObjectsMax` attribute must be greater than the "
+                       "`NumOfEmbeddedObjectsScale` attribute.");
     }
 
     /*
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/applications/model/three-gpp-http-variables.h ns-3.45/src/applications/model/three-gpp-http-variables.h
--- ns-3.44/src/applications/model/three-gpp-http-variables.h	2025-03-09 16:55:49.347370900 -0700
+++ ns-3.45/src/applications/model/three-gpp-http-variables.h	2025-06-01 20:34:45.282701000 -0700
@@ -329,8 +329,7 @@
      * Random variable for determining the length of parsing time (in seconds).
      */
     Ptr<ExponentialRandomVariable> m_parsingTimeRng;
-
-}; // end of `class ThreeGppHttpVariables`
+};
 
 } // namespace ns3
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/applications/model/udp-client.cc ns-3.45/src/applications/model/udp-client.cc
--- ns-3.44/src/applications/model/udp-client.cc	2025-03-09 16:55:49.347370900 -0700
+++ ns-3.45/src/applications/model/udp-client.cc	2025-06-01 20:34:45.282701000 -0700
@@ -49,17 +49,19 @@
                           TimeValue(Seconds(1)),
                           MakeTimeAccessor(&UdpClient::m_interval),
                           MakeTimeChecker())
-            .AddAttribute("RemoteAddress",
-                          "The destination Address of the outbound packets",
-                          AddressValue(),
-                          MakeAddressAccessor(
-                              (void(UdpClient::*)(const Address&)) &
-                                  UdpClient::SetRemote, // this is needed to indicate which version
-                                                        // of the function overload to use
-                              &UdpClient::GetRemote),
-                          MakeAddressChecker(),
-                          TypeId::SupportLevel::DEPRECATED,
-                          "Replaced by Remote in ns-3.44.")
+            // NS_DEPRECATED_3_44
+            .AddAttribute(
+                "RemoteAddress",
+                "The destination Address of the outbound packets",
+                AddressValue(),
+                MakeAddressAccessor(
+                    // this is needed to indicate which version of the function overload to use
+                    static_cast<void (UdpClient::*)(const Address&)>(&UdpClient::SetRemote),
+                    &UdpClient::GetRemote),
+                MakeAddressChecker(),
+                TypeId::SupportLevel::DEPRECATED,
+                "Replaced by Remote in ns-3.44.")
+            // NS_DEPRECATED_3_44
             .AddAttribute("RemotePort",
                           "The destination port of the outbound packets",
                           UintegerValue(UdpClient::DEFAULT_PORT),
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/applications/model/udp-echo-client.cc ns-3.45/src/applications/model/udp-echo-client.cc
--- ns-3.44/src/applications/model/udp-echo-client.cc	2025-03-09 16:55:49.347370900 -0700
+++ ns-3.45/src/applications/model/udp-echo-client.cc	2025-06-01 20:34:45.282701000 -0700
@@ -41,18 +41,19 @@
                           TimeValue(Seconds(1)),
                           MakeTimeAccessor(&UdpEchoClient::m_interval),
                           MakeTimeChecker())
+            // NS_DEPRECATED_3_44
             .AddAttribute(
                 "RemoteAddress",
                 "The destination Address of the outbound packets",
                 AddressValue(),
                 MakeAddressAccessor(
-                    (void(UdpEchoClient::*)(const Address&)) &
-                        UdpEchoClient::SetRemote, // this is needed to indicate which version of the
-                                                  // function overload to use
+                    // this is needed to indicate which version of the function overload to use
+                    static_cast<void (UdpEchoClient::*)(const Address&)>(&UdpEchoClient::SetRemote),
                     &UdpEchoClient::GetRemote),
                 MakeAddressChecker(),
                 TypeId::SupportLevel::DEPRECATED,
                 "Replaced by Remote in ns-3.44.")
+            // NS_DEPRECATED_3_44
             .AddAttribute("RemotePort",
                           "The destination port of the outbound packets",
                           UintegerValue(UdpEchoClient::DEFAULT_PORT),
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/applications/model/udp-trace-client.cc ns-3.45/src/applications/model/udp-trace-client.cc
--- ns-3.44/src/applications/model/udp-trace-client.cc	2025-03-09 16:55:49.347370900 -0700
+++ ns-3.45/src/applications/model/udp-trace-client.cc	2025-06-01 20:34:45.282701000 -0700
@@ -56,24 +56,27 @@
             .SetParent<SourceApplication>()
             .SetGroupName("Applications")
             .AddConstructor<UdpTraceClient>()
-            .AddAttribute("RemoteAddress",
-                          "The destination Address of the outbound packets",
-                          AddressValue(),
-                          MakeAddressAccessor(
-                              (void(UdpTraceClient::*)(const Address&)) &
-                              UdpTraceClient::SetRemote), // this is needed to indicate which
-                                                          // version of the function overload to use
-                          MakeAddressChecker(),
-                          TypeId::SupportLevel::DEPRECATED,
-                          "Replaced by Remote in ns-3.44.")
+            // NS_DEPRECATED_3_44
+            .AddAttribute(
+                "RemoteAddress",
+                "The destination Address of the outbound packets",
+                AddressValue(),
+                MakeAddressAccessor(
+                    // this is needed to indicate which version of the function overload to use
+                    static_cast<void (UdpTraceClient::*)(const Address&)>(
+                        &UdpTraceClient::SetRemote)),
+                MakeAddressChecker(),
+                TypeId::SupportLevel::DEPRECATED,
+                "Replaced by Remote in ns-3.44.")
+            // NS_DEPRECATED_3_44
             .AddAttribute(
                 "RemotePort",
                 "The destination port of the outbound packets",
                 UintegerValue(UdpTraceClient::DEFAULT_PORT),
                 MakeAddressAccessor(
-                    (void(UdpTraceClient::*)(const Address&)) &
-                        UdpTraceClient::SetRemote, // this is needed to indicate which version of
-                                                   // the function overload to use
+                    // this is needed to indicate which version of the function overload to use
+                    static_cast<void (UdpTraceClient::*)(const Address&)>(
+                        &UdpTraceClient::SetRemote),
                     &UdpTraceClient::GetRemote),
                 MakeUintegerChecker<uint16_t>(),
                 TypeId::SupportLevel::DEPRECATED,
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/applications/test/three-gpp-http-client-server-test.cc ns-3.45/src/applications/test/three-gpp-http-client-server-test.cc
--- ns-3.44/src/applications/test/three-gpp-http-client-server-test.cc	2025-03-09 16:55:49.347370900 -0700
+++ ns-3.45/src/applications/test/three-gpp-http-client-server-test.cc	2025-06-01 20:34:45.283701200 -0700
@@ -579,11 +579,9 @@
                      << m_mainObjectTracker.GetNumOfObjectsReceived() << " object(s).");
     NS_LOG_INFO(this << " Total embedded objects received: "
                      << m_embeddedObjectTracker.GetNumOfObjectsReceived() << " object(s).");
-    NS_LOG_INFO(this << " One-trip delays:"
-                     << " average=" << m_delayCalculator->getMean() << " min="
+    NS_LOG_INFO(this << " One-trip delays: average=" << m_delayCalculator->getMean() << " min="
                      << m_delayCalculator->getMin() << " max=" << m_delayCalculator->getMax());
-    NS_LOG_INFO(this << " Round-trip delays:"
-                     << " average=" << m_rttCalculator->getMean() << " min="
+    NS_LOG_INFO(this << " Round-trip delays: average=" << m_rttCalculator->getMean() << " min="
                      << m_rttCalculator->getMin() << " max=" << m_rttCalculator->getMax());
     NS_LOG_INFO(this << " Number of packets dropped by the devices: " << m_numOfPacketDrops
                      << " packet(s).");
@@ -601,8 +599,7 @@
                           "Tracker of embedded objects detected irrelevant packet(s).");
 
     Simulator::Destroy();
-
-} // end of `void HttpClientServerTestCase::DoRun ()`
+}
 
 void
 ThreeGppHttpObjectTestCase::DoTeardown()
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/buildings/helper/building-position-allocator.cc ns-3.45/src/buildings/helper/building-position-allocator.cc
--- ns-3.44/src/buildings/helper/building-position-allocator.cc	2025-03-09 16:55:49.351371000 -0700
+++ ns-3.45/src/buildings/helper/building-position-allocator.cc	2025-06-01 20:34:45.285701000 -0700
@@ -283,10 +283,9 @@
     double y2 = box.yMin + rdy * r.roomy;
     double z1 = box.zMin + rdz * (r.floor - 1);
     double z2 = box.zMin + rdz * r.floor;
-    NS_LOG_LOGIC("randomly allocating position in "
-                 << " (" << x1 << "," << x2 << ") "
-                 << "x (" << y1 << "," << y2 << ") "
-                 << "x (" << z1 << "," << z2 << ") ");
+    NS_LOG_LOGIC("randomly allocating position in (" << x1 << "," << x2 << ") "
+                                                     << "x (" << y1 << "," << y2 << ") "
+                                                     << "x (" << z1 << "," << z2 << ") ");
 
     double x = m_rand->GetValue(x1, x2);
     double y = m_rand->GetValue(y1, y2);
@@ -374,10 +373,9 @@
     double y2 = box.yMin + rdy * roomy;
     double z1 = box.zMin + rdz * (floor - 1);
     double z2 = box.zMin + rdz * floor;
-    NS_LOG_LOGIC("randomly allocating position in "
-                 << " (" << x1 << "," << x2 << ") "
-                 << "x (" << y1 << "," << y2 << ") "
-                 << "x (" << z1 << "," << z2 << ") ");
+    NS_LOG_LOGIC("randomly allocating position in (" << x1 << "," << x2 << ") "
+                                                     << "x (" << y1 << "," << y2 << ") "
+                                                     << "x (" << z1 << "," << z2 << ") ");
 
     double x = m_rand->GetValue(x1, x2);
     double y = m_rand->GetValue(y1, y2);
@@ -435,10 +433,9 @@
     double y2 = box.yMin + rdy * roomy;
     double z1 = box.zMin + rdz * (floor - 1);
     double z2 = box.zMin + rdz * floor;
-    NS_LOG_LOGIC("randomly allocating position in "
-                 << " (" << x1 << "," << x2 << ") "
-                 << "x (" << y1 << "," << y2 << ") "
-                 << "x (" << z1 << "," << z2 << ") ");
+    NS_LOG_LOGIC("randomly allocating position in (" << x1 << "," << x2 << ") "
+                                                     << "x (" << y1 << "," << y2 << ") "
+                                                     << "x (" << z1 << "," << z2 << ") ");
 
     double x = m_rand->GetValue(x1, x2);
     double y = m_rand->GetValue(y1, y2);
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/buildings/model/hybrid-buildings-propagation-loss-model.cc ns-3.45/src/buildings/model/hybrid-buildings-propagation-loss-model.cc
--- ns-3.44/src/buildings/model/hybrid-buildings-propagation-loss-model.cc	2025-03-09 16:55:49.351371000 -0700
+++ ns-3.45/src/buildings/model/hybrid-buildings-propagation-loss-model.cc	2025-06-01 20:34:45.286701200 -0700
@@ -199,7 +199,7 @@
                 loss = ItuR1411(a, b) + ExternalWallLoss(b1) + HeightLoss(b1);
                 NS_LOG_INFO(this << " 0-I (<1000) ITUR1411 + BEL : " << loss);
             }
-        } // end b1->isIndoor ()
+        }
     }
     else
     {
@@ -242,8 +242,8 @@
                 loss = ItuR1411(a, b) + ExternalWallLoss(a1) + HeightLoss(a1);
                 NS_LOG_INFO(this << " I-O (<1000)  ITUR1411 + BEL + HG: " << loss);
             }
-        } // end if (isBIndoor)
-    }     // end if (!isAIndoor)
+        }
+    }
 
     loss = std::max(loss, 0.0);
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/buildings/model/hybrid-buildings-propagation-loss-model.h ns-3.45/src/buildings/model/hybrid-buildings-propagation-loss-model.h
--- ns-3.44/src/buildings/model/hybrid-buildings-propagation-loss-model.h	2025-03-09 16:55:49.351371000 -0700
+++ ns-3.45/src/buildings/model/hybrid-buildings-propagation-loss-model.h	2025-06-01 20:34:45.286701200 -0700
@@ -39,7 +39,7 @@
  *  - frequency: from 200 uo to 2600 MHz
  *  - short range communications vs long range communications
  *  - Node position respect to buildings: indoor, outdoor and hybrid (indoor <-> outdoor)
- *  - Building penetretation loss
+ *  - Building penetration loss
  *  - floors, etc...
  *
  *  @warning This model works only with MobilityBuildingInfo
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/buildings/model/oh-buildings-propagation-loss-model.cc ns-3.45/src/buildings/model/oh-buildings-propagation-loss-model.cc
--- ns-3.44/src/buildings/model/oh-buildings-propagation-loss-model.cc	2025-03-09 16:55:49.351371000 -0700
+++ ns-3.45/src/buildings/model/oh-buildings-propagation-loss-model.cc	2025-06-01 20:34:45.286701200 -0700
@@ -77,7 +77,7 @@
             // b indoor
             loss = m_okumuraHata->GetLoss(a, b) + ExternalWallLoss(b1);
             NS_LOG_INFO(this << " O-I : " << loss);
-        } // end b1->isIndoor ()
+        }
     }
     else
     {
@@ -101,8 +101,8 @@
         {
             loss = m_okumuraHata->GetLoss(a, b) + ExternalWallLoss(a1);
             NS_LOG_INFO(this << " I-O : " << loss);
-        } // end if (isBIndoor)
-    }     // end if (!isAIndoor)
+        }
+    }
 
     loss = std::max(0.0, loss);
     return loss;
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/config-store/model/config-store.cc ns-3.45/src/config-store/model/config-store.cc
--- ns-3.44/src/config-store/model/config-store.cc	2025-03-09 16:55:49.355371000 -0700
+++ ns-3.45/src/config-store/model/config-store.cc	2025-06-01 20:34:45.288701000 -0700
@@ -61,6 +61,7 @@
                 EnumValue(ConfigStore::RAW_TEXT),
                 MakeEnumAccessor<FileFormat>(&ConfigStore::SetFileFormat),
                 MakeEnumChecker(ConfigStore::RAW_TEXT, "RawText", ConfigStore::XML, "Xml"))
+            // NS_DEPRECATED_3_43
             .AddAttribute(
                 "SaveDeprecated",
                 "Save DEPRECATED attributes",
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/core/examples/hash-example.cc ns-3.45/src/core/examples/hash-example.cc
--- ns-3.44/src/core/examples/hash-example.cc	2025-03-09 16:55:49.355371000 -0700
+++ ns-3.45/src/core/examples/hash-example.cc	2025-06-01 20:34:45.289701200 -0700
@@ -248,7 +248,8 @@
     /** The list of collisions. */
     collision_t m_coll;
 
-}; // class Collider
+    // end of class Collider
+};
 
 /**
  * Word list and hashers to test.
@@ -412,7 +413,8 @@
     std::vector<Collider> m_hashes;   /**< List of hash Colliders. */
     std::vector<std::string> m_words; /**< List of unique words. */
 
-}; // class Dictionary
+    // end of class Dictionary
+};
 
 /**
  * Source word list files.
@@ -467,8 +469,7 @@
             dictStream.open(dictFile);
             if (!dictStream.is_open())
             {
-                std::cerr << "Failed to open dictionary file."
-                          << "'" << dictFile << "'" << std::endl;
+                std::cerr << "Failed to open dictionary file.'" << dictFile << "'" << std::endl;
                 continue;
             }
 
@@ -477,18 +478,17 @@
                 std::string phrase;
                 getline(dictStream, phrase);
                 dict.Add(phrase);
-            } // while
+            }
 
             dictStream.close();
-
-        } // for m_files
-
+        }
     } // ReadInto
 
   private:
     std::vector<std::string> m_files; /**< List of word files to use. */
 
-}; // class DictFiles
+    // end of class DictFiles
+};
 
 } // namespace Example
 
@@ -532,7 +532,7 @@
     if (timing)
     {
         dict.Time();
-    } // if (timing)
+    }
 
     return 0;
-} // main
+}
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/core/examples/length-example.cc ns-3.45/src/core/examples/length-example.cc
--- ns-3.44/src/core/examples/length-example.cc	2025-03-09 16:55:49.355371000 -0700
+++ ns-3.45/src/core/examples/length-example.cc	2025-06-01 20:34:45.289701200 -0700
@@ -35,16 +35,18 @@
     double input = 5;
     Length::Quantity quantity(input, Length::Unit::Meter);
 
-    std::cout << "\nConstructors:"
-              << "\nLength (" << input << ", Unit::Meter) = " << Length(input, Length::Unit::Meter)
-              << "\nLength (" << input << ", \"m\") = " << Length(input, "m") << "\nLength ("
-              << input << ", \"meter\") = " << Length(input, "meter") << "\nLength (Quantity("
-              << input << ", Unit::Meter)) = " << Length(quantity)
-              << "\nLength (\"5m\") = " << Length("5m") << "\nLength (\"5 m\") = " << Length("5 m")
-              << "\nLength (\"5meter\") = " << Length("5meter")
-              << "\nLength (\"5 meter\") = " << Length("5 meter")
-              << "\nLength (\"5meters\") = " << Length("5meters")
-              << "\nLength (\"5 meters\") = " << Length("5 meters") << std::endl;
+    std::cout << "\nConstructors:\n"
+              << "Length (" << input << ", Unit::Meter) = " << Length(input, Length::Unit::Meter)
+              << "\n"
+              << "Length (" << input << ", \"m\") = " << Length(input, "m") << "\n"
+              << "Length (" << input << ", \"meter\") = " << Length(input, "meter") << "\n"
+              << "Length (Quantity(" << input << ", Unit::Meter)) = " << Length(quantity) << "\n"
+              << "Length (\"5m\") = " << Length("5m") << "\n"
+              << "Length (\"5 m\") = " << Length("5 m") << "\n"
+              << "Length (\"5meter\") = " << Length("5meter") << "\n"
+              << "Length (\"5 meter\") = " << Length("5 meter") << "\n"
+              << "Length (\"5meters\") = " << Length("5meters") << "\n"
+              << "Length (\"5 meters\") = " << Length("5 meters") << std::endl;
 }
 
 /**
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/core/examples/sample-show-progress.cc ns-3.45/src/core/examples/sample-show-progress.cc
--- ns-3.44/src/core/examples/sample-show-progress.cc	2025-03-09 16:55:49.355371000 -0700
+++ ns-3.45/src/core/examples/sample-show-progress.cc	2025-06-01 20:34:45.290701200 -0700
@@ -92,7 +92,8 @@
     /** Time between switching workloads. */
     Time m_interval;
 
-}; // class HOLD
+    // end of class HOLD
+};
 
 } // unnamed namespace
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/core/helper/csv-reader.h ns-3.45/src/core/helper/csv-reader.h
--- ns-3.44/src/core/helper/csv-reader.h	2025-03-09 16:55:49.355371000 -0700
+++ ns-3.45/src/core/helper/csv-reader.h	2025-06-01 20:34:45.290701200 -0700
@@ -388,8 +388,7 @@
      * Pointer to the input stream containing the data.
      */
     std::istream* m_stream;
-
-}; // class CsvReader
+};
 
 /****************************************************
  *      Template implementations.
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/core/model/ascii-test.h ns-3.45/src/core/model/ascii-test.h
--- ns-3.44/src/core/model/ascii-test.h	2025-03-09 16:55:49.355371000 -0700
+++ ns-3.45/src/core/model/ascii-test.h	2025-06-01 20:34:45.291701000 -0700
@@ -14,6 +14,7 @@
 #include "ascii-file.h"
 #include "test.h"
 
+#include <filesystem>
 #include <stdint.h>
 
 /**
@@ -28,11 +29,19 @@
     do                                                                                             \
     {                                                                                              \
         uint64_t line(0);                                                                          \
-        bool diff = AsciiFile::Diff(gotFilename, expectedFilename, line);                          \
-        NS_TEST_EXPECT_MSG_EQ(diff,                                                                \
-                              false,                                                               \
-                              "ASCII traces " << gotFilename << " and " << expectedFilename        \
-                                              << " differ starting from line " << line);           \
+        bool fileExists = std::filesystem::exists(expectedFilename);                               \
+        if (fileExists)                                                                            \
+        {                                                                                          \
+            bool diff = AsciiFile::Diff(gotFilename, expectedFilename, line);                      \
+            NS_TEST_EXPECT_MSG_EQ(diff,                                                            \
+                                  false,                                                           \
+                                  "ASCII traces " << gotFilename << " and " << expectedFilename    \
+                                                  << " differ starting from line " << line);       \
+        }                                                                                          \
+        else                                                                                       \
+        {                                                                                          \
+            NS_TEST_EXPECT_MSG_EQ(fileExists, true, "File " << expectedFilename << " not found");  \
+        }                                                                                          \
     } while (false)
 
 #endif /* ASCII_TEST_H */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/core/model/attribute-accessor-helper.h ns-3.45/src/core/model/attribute-accessor-helper.h
--- ns-3.44/src/core/model/attribute-accessor-helper.h	2025-03-09 16:55:49.355371000 -0700
+++ ns-3.45/src/core/model/attribute-accessor-helper.h	2025-06-01 20:34:45.291701000 -0700
@@ -218,7 +218,8 @@
      */
     virtual bool DoGet(const T* object, U* v) const = 0;
 
-}; // class AccessorHelper
+    // end of class AccessorHelper
+};
 
 /**
  * @ingroup attributeimpl
@@ -232,9 +233,12 @@
  * @param [in]  memberVariable  The address of the data member.
  * @returns The AttributeAccessor.
  */
+// clang-format off
+// Clang-format guard needed for versions <= 18
 template <typename V, typename T, typename U>
 inline Ptr<const AttributeAccessor>
-DoMakeAccessorHelperOne(U T::*memberVariable)
+DoMakeAccessorHelperOne(U T::* memberVariable)
+// clang-format on
 {
     /* AttributeAccessor implementation for a class member variable. */
     class MemberVariable : public AccessorHelper<T, V>
@@ -244,7 +248,10 @@
          * Construct from a class data member address.
          * @param [in] memberVariable The class data member address.
          */
-        MemberVariable(U T::*memberVariable)
+        // clang-format off
+        // Clang-format guard needed for versions <= 18
+        MemberVariable(U T::* memberVariable)
+            // clang-format on
             : AccessorHelper<T, V>(),
               m_memberVariable(memberVariable)
         {
@@ -279,7 +286,10 @@
             return true;
         }
 
-        U T::*m_memberVariable; // Address of the class data member.
+        // clang-format off
+        // Clang-format guard needed for versions <= 18
+        U T::* m_memberVariable; // Address of the class data member.
+        // clang-format on
     };
 
     return Ptr<const AttributeAccessor>(new MemberVariable(memberVariable), false);
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/core/model/attribute-container.h ns-3.45/src/core/model/attribute-container.h
--- ns-3.44/src/core/model/attribute-container.h	2025-03-09 16:55:49.355371000 -0700
+++ ns-3.45/src/core/model/attribute-container.h	2025-06-01 20:34:45.291701000 -0700
@@ -180,10 +180,9 @@
      * @tparam ITER \deduced iterator type
      * \param[in] begin Points to first item to copy
      * \param[in] end Points to one after last item to copy
-     * @return This object with items copied.
      */
     template <class ITER>
-    inline Ptr<AttributeContainerValue<A, Sep, C>> CopyFrom(const ITER begin, const ITER end);
+    inline void CopyFrom(const ITER begin, const ITER end);
 
     container_type m_container; //!< Internal container
 };
@@ -572,14 +571,13 @@
 
 template <class A, char Sep, template <class...> class C>
 template <class ITER>
-Ptr<AttributeContainerValue<A, Sep, C>>
+void
 AttributeContainerValue<A, Sep, C>::CopyFrom(const ITER begin, const ITER end)
 {
     for (ITER iter = begin; iter != end; ++iter)
     {
         m_container.push_back(Create<A>(*iter));
     }
-    return this;
 }
 
 template <typename A, char Sep, template <typename...> class C, typename T1>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/core/model/attribute-helper.h ns-3.45/src/core/model/attribute-helper.h
--- ns-3.44/src/core/model/attribute-helper.h	2025-03-09 16:55:49.355371000 -0700
+++ ns-3.45/src/core/model/attribute-helper.h	2025-06-01 20:34:45.291701000 -0700
@@ -315,9 +315,7 @@
         iss.str(value);                                                                            \
         iss >> m_value;                                                                            \
         NS_ABORT_MSG_UNLESS(iss.eof(),                                                             \
-                            "Attribute value "                                                     \
-                                << "\"" << value << "\""                                           \
-                                << " is not properly formatted");                                  \
+                            "Attribute value \"" << value << "\" is not properly formatted");      \
         return !iss.bad() && !iss.fail();                                                          \
     }
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/core/model/command-line.h ns-3.45/src/core/model/command-line.h
--- ns-3.44/src/core/model/command-line.h	2025-03-09 16:55:49.355371000 -0700
+++ ns-3.45/src/core/model/command-line.h	2025-06-01 20:34:45.292701200 -0700
@@ -451,7 +451,9 @@
          * @return The default value
          */
         virtual std::string GetDefault() const = 0;
-    }; // class Item
+
+        // end of class Item
+    };
 
     /**
      * @ingroup commandline
@@ -468,7 +470,9 @@
 
         T* m_valuePtr;         /**< Pointer to the POD location */
         std::string m_default; /**< String representation of default value */
-    };                         // class UserItem
+
+        // end of class UserItem
+    };
 
     /**
      * @ingroup commandline
@@ -488,7 +492,9 @@
          * function is \c const in the base class Item.
          */
         mutable std::string m_value;
-    }; // class StringItem
+
+        // end of class StringItem
+    };
 
     /**
      * @ingroup commandline
@@ -508,7 +514,9 @@
         std::size_t m_size;
         /** The default value. */
         std::string m_default;
-    }; // class CharStarItem
+
+        // end of class CharStarItem
+    };
 
     /**
      * @ingroup commandline
@@ -524,7 +532,9 @@
 
         ns3::Callback<bool, const std::string&> m_callback; /**< The Callback */
         std::string m_default; /**< The default value, as a string, if it exists. */
-    };                         // class CallbackItem
+
+        // end of class CallbackItem
+    };
 
     /**
      * Tuple type returned by GetOptionName().
@@ -659,7 +669,8 @@
     /** The source file name (without `.cc`), as would be given to `ns3 run` */
     std::string m_shortName;
 
-}; // class CommandLine
+    // end of class CommandLine
+};
 
 /**
  * @ingroup commandline
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/core/model/config.cc ns-3.45/src/core/model/config.cc
--- ns-3.44/src/core/model/config.cc	2025-03-09 16:55:49.355371000 -0700
+++ ns-3.45/src/core/model/config.cc	2025-06-01 20:34:45.292701200 -0700
@@ -220,7 +220,8 @@
     /** The Config path element. */
     std::string m_element;
 
-}; // class ArrayMatcher
+    // end of class ArrayMatcher
+};
 
 ArrayMatcher::ArrayMatcher(std::string element)
     : m_element(element)
@@ -368,7 +369,8 @@
     /** The Config path. */
     std::string m_path;
 
-}; // class Resolver
+    // end of class Resolver
+};
 
 Resolver::Resolver(std::string path)
     : m_path(path)
@@ -672,7 +674,8 @@
     /** The list of Config path roots. */
     Roots m_roots;
 
-}; // class ConfigImpl
+    // end of class ConfigImpl
+};
 
 void
 ConfigImpl::ParsePath(std::string path, std::string* root, std::string* leaf) const
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/core/model/deprecated.h ns-3.45/src/core/model/deprecated.h
--- ns-3.44/src/core/model/deprecated.h	2025-03-09 16:55:49.359371000 -0700
+++ ns-3.45/src/core/model/deprecated.h	2025-06-01 20:34:45.292701200 -0700
@@ -85,6 +85,13 @@
 
 /**
  * @ingroup deprecation
+ * @def NS_DEPRECATED_3_45
+ * Tag for things deprecated in version ns-3.45.
+ */
+#define NS_DEPRECATED_3_45(msg) NS_DEPRECATED("Deprecated in ns-3.45: " msg)
+
+/**
+ * @ingroup deprecation
  * @def NS_DEPRECATED_3_44
  * Tag for things deprecated in version ns-3.44.
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/core/model/des-metrics.h ns-3.45/src/core/model/des-metrics.h
--- ns-3.44/src/core/model/des-metrics.h	2025-03-09 16:55:49.359371000 -0700
+++ ns-3.45/src/core/model/des-metrics.h	2025-06-01 20:34:45.292701200 -0700
@@ -149,8 +149,7 @@
 
     /** Mutex to control access to the output file. */
     std::mutex m_mutex;
-
-}; // class DesMetrics
+};
 
 } // namespace ns3
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/core/model/environment-variable.h ns-3.45/src/core/model/environment-variable.h
--- ns-3.44/src/core/model/environment-variable.h	2025-03-09 16:55:49.359371000 -0700
+++ ns-3.45/src/core/model/environment-variable.h	2025-06-01 20:34:45.292701200 -0700
@@ -154,7 +154,8 @@
         /** The key, value store. */
         KeyValueStore m_dict;
 
-    }; // class Dictionary
+        // end of class Dictionary
+    };
 
     /**
      * Set an environment variable.
@@ -214,7 +215,8 @@
     /** Clear the instance, forcing all new lookups. */
     static void Clear();
 
-}; // class EnvironmentVariable
+    // end of class EnvironmentVariable
+};
 
 } // namespace ns3
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/core/model/example-as-test.cc ns-3.45/src/core/model/example-as-test.cc
--- ns-3.44/src/core/model/example-as-test.cc	2025-03-09 16:55:49.359371000 -0700
+++ ns-3.45/src/core/model/example-as-test.cc	2025-06-01 20:34:45.292701200 -0700
@@ -122,7 +122,7 @@
     if (m_shouldNotErr)
     {
         // Make sure the example didn't outright crash
-        NS_TEST_ASSERT_MSG_EQ(status, 0, "example " + m_program + " failed");
+        NS_TEST_ASSERT_MSG_EQ(status, 0, "example " + m_program + " exited abnormally");
     }
 
     // If we're just introspecting the command-line
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/core/model/example-as-test.h ns-3.45/src/core/model/example-as-test.h
--- ns-3.44/src/core/model/example-as-test.h	2025-03-09 16:55:49.359371000 -0700
+++ ns-3.45/src/core/model/example-as-test.h	2025-06-01 20:34:45.293701200 -0700
@@ -102,7 +102,8 @@
     std::string m_args;    /**< Any additional arguments to the program. */
     bool m_shouldNotErr;   /**< Whether error return status is a test failure. */
 
-}; // class ExampleAsTestCase
+    // end of class ExampleAsTestCase
+};
 
 /**
  * @ingroup testing
@@ -209,7 +210,8 @@
                        const std::string args = "",
                        const Duration duration = Duration::QUICK,
                        const bool shouldNotErr = true);
-}; // class ExampleAsTestSuite
+    // end of class ExampleAsTestSuite
+};
 
 } // namespace ns3
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/core/model/hash-fnv.h ns-3.45/src/core/model/hash-fnv.h
--- ns-3.44/src/core/model/hash-fnv.h	2025-03-09 16:55:49.359371000 -0700
+++ ns-3.45/src/core/model/hash-fnv.h	2025-06-01 20:34:45.293701200 -0700
@@ -94,8 +94,7 @@
     uint32_t m_hash32;
     uint64_t m_hash64;
     /**@}*/
-
-}; // class Fnv1a
+};
 
 } // namespace Function
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/core/model/hash-function.h ns-3.45/src/core/model/hash-function.h
--- ns-3.44/src/core/model/hash-function.h	2025-03-09 16:55:49.359371000 -0700
+++ ns-3.45/src/core/model/hash-function.h	2025-06-01 20:34:45.293701200 -0700
@@ -88,7 +88,9 @@
     virtual ~Implementation()
     {
     }
-}; // Hashfunction
+
+    // end of class Hash::Implementation
+};
 
 /*--------------------------------------
  *  Hash function implementation
@@ -146,7 +148,9 @@
 
   private:
     Hash32Function_ptr m_fp; /**< The hash function. */
-};                           // Hash32
+
+    // end of class Hash::Function::Hash32
+};
 
 /**
  * @ingroup hash
@@ -187,7 +191,9 @@
 
   private:
     Hash64Function_ptr m_fp; /**< The hash function. */
-};                           // Hash64<Hash64Function_ptr>
+
+    // end of class Hash::Function::Hash64
+};
 
 } // namespace Function
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/core/model/hash.h ns-3.45/src/core/model/hash.h
--- ns-3.44/src/core/model/hash.h	2025-03-09 16:55:49.359371000 -0700
+++ ns-3.45/src/core/model/hash.h	2025-06-01 20:34:45.293701200 -0700
@@ -162,7 +162,9 @@
 
   private:
     Ptr<Hash::Implementation> m_impl; /**< Hash implementation. */
-};                                    // Hasher
+
+    // end of class Hasher
+};
 
 /*************************************************
  **  Global functions declarations
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/core/model/hash-murmur3.h ns-3.45/src/core/model/hash-murmur3.h
--- ns-3.44/src/core/model/hash-murmur3.h	2025-03-09 16:55:49.359371000 -0700
+++ ns-3.45/src/core/model/hash-murmur3.h	2025-06-01 20:34:45.293701200 -0700
@@ -107,7 +107,8 @@
     std::size_t m_size64;
     /**@}*/
 
-}; // class Murmur3
+    // end of class Murmur3
+};
 
 } // namespace Function
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/core/model/int64x64-128.h ns-3.45/src/core/model/int64x64-128.h
--- ns-3.44/src/core/model/int64x64-128.h	2025-03-09 16:55:49.359371000 -0700
+++ ns-3.45/src/core/model/int64x64-128.h	2025-06-01 20:34:45.293701200 -0700
@@ -446,8 +446,7 @@
     static uint128_t UmulByInvert(const uint128_t a, const uint128_t b);
 
     int128_t _v; //!< The Q64.64 value.
-
-}; // class int64x64_t
+};
 
 } // namespace ns3
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/core/model/int64x64-cairo.h ns-3.45/src/core/model/int64x64-cairo.h
--- ns-3.44/src/core/model/int64x64-cairo.h	2025-03-09 16:55:49.359371000 -0700
+++ ns-3.45/src/core/model/int64x64-cairo.h	2025-06-01 20:34:45.293701200 -0700
@@ -429,8 +429,7 @@
     static cairo_uint128_t UmulByInvert(const cairo_uint128_t a, const cairo_uint128_t b);
 
     cairo_int128_t _v; //!< The Q64.64 value.
-
-}; // class int64x64_t
+};
 
 } // namespace ns3
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/core/model/int64x64.cc ns-3.45/src/core/model/int64x64.cc
--- ns-3.44/src/core/model/int64x64.cc	2025-03-09 16:55:49.359371000 -0700
+++ ns-3.45/src/core/model/int64x64.cc	2025-06-01 20:34:45.294701000 -0700
@@ -96,8 +96,8 @@
         low *= 10;
         digit = low.GetHigh();
         NS_ASSERT_MSG((0 <= digit) && (digit <= 9),
-                      "digit " << digit << " out of range [0,9] "
-                               << " streaming out " << HEXHILOW(value.GetHigh(), value.GetLow()));
+                      "digit " << digit << " out of range [0,9] streaming out "
+                               << HEXHILOW(value.GetHigh(), value.GetLow()));
         low -= digit;
 
         oss << std::setw(1) << digit;
@@ -200,8 +200,8 @@
     {
         int digit = *rit - '0';
         NS_ASSERT_MSG((0 <= digit) && (digit <= 9),
-                      "digit " << digit << " out of range [0,9]"
-                               << " streaming in low digits \"" << str << "\"");
+                      "digit " << digit << " out of range [0,9] streaming in low digits \"" << str
+                               << "\"");
         low = (low + digit + round) / 10;
     }
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/core/model/int64x64-double.h ns-3.45/src/core/model/int64x64-double.h
--- ns-3.44/src/core/model/int64x64-double.h	2025-03-09 16:55:49.359371000 -0700
+++ ns-3.45/src/core/model/int64x64-double.h	2025-06-01 20:34:45.294701000 -0700
@@ -372,8 +372,7 @@
     /**@}*/
 
     long double _v; //!< The Q64.64 value.
-
-}; // class int64x64_t
+};
 
 } // namespace ns3
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/core/model/length.h ns-3.45/src/core/model/length.h
--- ns-3.44/src/core/model/length.h	2025-03-09 16:55:49.359371000 -0700
+++ ns-3.45/src/core/model/length.h	2025-06-01 20:34:45.294701000 -0700
@@ -607,7 +607,9 @@
 
   private:
     double m_value; //!< Length in meters
-};                  // class Length
+
+    // end of class Length
+};
 
 ATTRIBUTE_HELPER_HEADER(Length);
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/core/model/log.cc ns-3.45/src/core/model/log.cc
--- ns-3.44/src/core/model/log.cc	2025-03-09 16:55:49.359371000 -0700
+++ ns-3.45/src/core/model/log.cc	2025-06-01 20:34:45.294701000 -0700
@@ -475,8 +475,8 @@
                                << flag << "\" in env variable NS_LOG for component name "
                                << component);
             }
-        } // for flag
-    }     // for component
+        }
+    }
 }
 
 void
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/core/model/log.h ns-3.45/src/core/model/log.h
--- ns-3.44/src/core/model/log.h	2025-03-09 16:55:49.359371000 -0700
+++ ns-3.45/src/core/model/log.h	2025-06-01 20:34:45.294701000 -0700
@@ -410,7 +410,8 @@
     std::string m_name; //!< LogComponent name.
     std::string m_file; //!< File defining this LogComponent.
 
-}; // class LogComponent
+    // end of class LogComponent
+};
 
 /**
  * Get the LogComponent registered with the given name.
@@ -458,6 +459,8 @@
 
     bool m_first{true}; //!< First argument flag, doesn't get `, `.
     std::ostream& m_os; //!< Underlying output stream.
+
+    // end of class ParameterLogger
 };
 
 template <typename T>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/core/model/matrix-array.cc ns-3.45/src/core/model/matrix-array.cc
--- ns-3.44/src/core/model/matrix-array.cc	2025-03-09 16:55:49.359371000 -0700
+++ ns-3.45/src/core/model/matrix-array.cc	2025-06-01 20:34:45.294701000 -0700
@@ -13,6 +13,7 @@
 #if defined(__GNUC__) && !defined(__clang__)
 #pragma GCC diagnostic push
 #pragma GCC diagnostic ignored "-Wclass-memaccess"
+#pragma GCC diagnostic ignored "-Wunused-variable"
 #endif
 
 #include <Eigen/Dense>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/core/model/nstime.h ns-3.45/src/core/model/nstime.h
--- ns-3.44/src/core/model/nstime.h	2025-03-09 16:55:49.359371000 -0700
+++ ns-3.45/src/core/model/nstime.h	2025-06-01 20:34:45.295701000 -0700
@@ -850,7 +850,8 @@
 
     int64_t m_data; //!< Virtual time value, in the current unit.
 
-}; // class Time
+    // end of class Time
+};
 
 namespace TracedValueCallback
 {
@@ -1498,7 +1499,8 @@
      */
     friend std::ostream& operator<<(std::ostream& os, const TimeWithUnit& timeU);
 
-}; // class TimeWithUnit
+    // end of class TimeWithUnit
+};
 
 /**
  * @ingroup time
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/core/model/object-base.cc ns-3.45/src/core/model/object-base.cc
--- ns-3.44/src/core/model/object-base.cc	2025-03-09 16:55:49.359371000 -0700
+++ ns-3.45/src/core/model/object-base.cc	2025-06-01 20:34:45.295701000 -0700
@@ -174,8 +174,7 @@
                                                           << "'");
                 */
             }
-
-        } // for i attributes
+        }
         tid = tid.GetParent();
     } while (tid != ObjectBase::GetTypeId());
     NotifyConstructionCompleted();
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/core/model/object-base.h ns-3.45/src/core/model/object-base.h
--- ns-3.44/src/core/model/object-base.h	2025-03-09 16:55:49.359371000 -0700
+++ ns-3.45/src/core/model/object-base.h	2025-06-01 20:34:45.295701000 -0700
@@ -175,9 +175,10 @@
     /**
      * Get the most derived TypeId for this Object.
      *
-     * This method is typically implemented by ns3::Object::GetInstanceTypeId
-     * but some classes which derive from ns3::ObjectBase directly
-     * have to implement it themselves.
+     * This method is provided by ns3::Object::GetInstanceTypeId
+     * but classes which derive from ns3::ObjectBase directly
+     * have to implement it themselves.  Typically, this method should
+     * simply return the output of `GetTypeId()`.
      *
      * @return The TypeId associated to the most-derived type
      *          of this instance.
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/core/model/object.h ns-3.45/src/core/model/object.h
--- ns-3.44/src/core/model/object.h	2025-03-09 16:55:49.359371000 -0700
+++ ns-3.45/src/core/model/object.h	2025-06-01 20:34:45.295701000 -0700
@@ -135,7 +135,7 @@
     /** Destructor. */
     ~Object() override;
 
-    TypeId GetInstanceTypeId() const override;
+    TypeId GetInstanceTypeId() const final;
 
     /**
      * Get a pointer to the requested aggregated Object.  If the type of object
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/core/model/object-map.h ns-3.45/src/core/model/object-map.h
--- ns-3.44/src/core/model/object-map.h	2025-03-09 16:55:49.359371000 -0700
+++ ns-3.45/src/core/model/object-map.h	2025-06-01 20:34:45.295701000 -0700
@@ -33,8 +33,11 @@
  * MakeAccessorHelper implementation for ObjectVector.
  * @copydetails ns3::DoMakeAccessorHelperOne(U T::*)
  */
+// clang-format off
+// Clang-format guard needed for versions <= 18
 template <typename T, typename U>
-Ptr<const AttributeAccessor> MakeObjectMapAccessor(U T::*memberVariable);
+Ptr<const AttributeAccessor> MakeObjectMapAccessor(U T::* memberVariable);
+// clang-format on
 
 // Documentation generated by print-introspected-doxygen.cc
 template <typename T>
@@ -60,9 +63,12 @@
  *  Implementation of the templates declared above.
  ***************************************************************/
 
+// clang-format off
+// Clang-format guard needed for versions <= 18
 template <typename T, typename U>
 Ptr<const AttributeAccessor>
-MakeObjectMapAccessor(U T::*memberVector)
+MakeObjectMapAccessor(U T::* memberVector)
+// clang-format on
 {
     struct MemberStdContainer : public ObjectPtrContainerAccessor
     {
@@ -98,7 +104,10 @@
             return nullptr;
         }
 
-        U T::*m_memberVector;
+        // clang-format off
+        // Clang-format guard needed for versions <= 18
+        U T::* m_memberVector;
+        // clang-format on
     }* spec = new MemberStdContainer();
 
     spec->m_memberVector = memberVector;
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/core/model/object-vector.h ns-3.45/src/core/model/object-vector.h
--- ns-3.44/src/core/model/object-vector.h	2025-03-09 16:55:49.359371000 -0700
+++ ns-3.45/src/core/model/object-vector.h	2025-06-01 20:34:45.295701000 -0700
@@ -33,8 +33,11 @@
  * MakeAccessorHelper implementation for ObjectVector.
  * @copydetails ns3::DoMakeAccessorHelperOne(U T::*)
  */
+// clang-format off
+// Clang-format guard needed for versions <= 18
 template <typename T, typename U>
-Ptr<const AttributeAccessor> MakeObjectVectorAccessor(U T::*memberVariable);
+Ptr<const AttributeAccessor> MakeObjectVectorAccessor(U T::* memberVariable);
+// clang-format on
 
 // Documentation generated by print-introspected-doxygen.cc
 template <typename T>
@@ -60,9 +63,12 @@
  *  Implementation of the templates declared above.
  ***************************************************************/
 
+// clang-format off
+// Clang-format guard needed for versions <= 18
 template <typename T, typename U>
 Ptr<const AttributeAccessor>
-MakeObjectVectorAccessor(U T::*memberVector)
+MakeObjectVectorAccessor(U T::* memberVector)
+// clang-format on
 {
     struct MemberStdContainer : public ObjectPtrContainerAccessor
     {
@@ -98,7 +104,10 @@
             return nullptr;
         }
 
-        U T::*m_memberVector;
+        // clang-format off
+        // Clang-format guard needed for versions <= 18
+        U T::* m_memberVector;
+        // clang-format on
     }* spec = new MemberStdContainer();
 
     spec->m_memberVector = memberVector;
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/core/model/priority-queue-scheduler.h ns-3.45/src/core/model/priority-queue-scheduler.h
--- ns-3.44/src/core/model/priority-queue-scheduler.h	2025-03-09 16:55:49.359371000 -0700
+++ ns-3.45/src/core/model/priority-queue-scheduler.h	2025-06-01 20:34:45.296701200 -0700
@@ -88,12 +88,12 @@
          */
         bool remove(const Scheduler::Event& ev);
 
-    }; // class EventPriorityQueue
+        // end of class EventPriorityQueue
+    };
 
     /** The event queue. */
     EventPriorityQueue m_queue;
-
-}; // class PriorityQueueScheduler
+};
 
 } // namespace ns3
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/core/model/random-variable-stream.h ns-3.45/src/core/model/random-variable-stream.h
--- ns-3.44/src/core/model/random-variable-stream.h	2025-03-09 16:55:49.363371100 -0700
+++ ns-3.45/src/core/model/random-variable-stream.h	2025-06-01 20:34:45.296701200 -0700
@@ -160,7 +160,8 @@
     /** The stream number for the RngStream. */
     int64_t m_stream;
 
-}; // class RandomVariableStream
+    // end of class RandomVariableStream
+};
 
 /**
  * @ingroup randomvariable
@@ -280,7 +281,8 @@
     /** The upper bound on values that can be returned by this RNG stream. */
     double m_max;
 
-}; // class UniformRandomVariable
+    // end of class UniformRandomVariable
+};
 
 /**
  * @ingroup randomvariable
@@ -335,7 +337,8 @@
     /** The constant value returned by this RNG stream. */
     double m_constant;
 
-}; // class ConstantRandomVariable
+    // end of class ConstantRandomVariable
+};
 
 /**
  * @ingroup randomvariable
@@ -465,7 +468,8 @@
     /** Indicates if the current sequence value has been properly initialized. */
     bool m_isCurrentSet;
 
-}; // class SequentialRandomVariable
+    // end of class SequentialRandomVariable
+};
 
 /**
  * @ingroup randomvariable
@@ -590,7 +594,8 @@
     /** The upper bound on values that can be returned by this RNG stream. */
     double m_bound;
 
-}; // class ExponentialRandomVariable
+    // end of class ExponentialRandomVariable
+};
 
 /**
  * @ingroup randomvariable
@@ -729,7 +734,8 @@
     /** The upper bound on values that can be returned by this RNG stream. */
     double m_bound;
 
-}; // class ParetoRandomVariable
+    // end of class ParetoRandomVariable
+};
 
 /**
  * @ingroup randomvariable
@@ -889,7 +895,8 @@
     /** The upper bound on values that can be returned by this RNG stream. */
     double m_bound;
 
-}; // class WeibullRandomVariable
+    // end of class WeibullRandomVariable
+};
 
 /**
  * @ingroup randomvariable
@@ -1039,7 +1046,8 @@
     /** The algorithm produces two values at a time. Cache parameters for possible reuse.*/
     double m_y;
 
-}; // class NormalRandomVariable
+    // end of class NormalRandomVariable
+};
 
 /**
  * @ingroup randomvariable
@@ -1188,7 +1196,8 @@
     /** The algorithm produces two values at a time. Cache parameters for possible reuse.*/
     double m_normal;
 
-}; // class LogNormalRandomVariable
+    // end of class LogNormalRandomVariable
+};
 
 /**
  * @ingroup randomvariable
@@ -1310,7 +1319,8 @@
     /** The algorithm produces two values at a time. Cache parameters for possible reuse.*/
     double m_y;
 
-}; // class GammaRandomVariable
+    // end of class GammaRandomVariable
+};
 
 /**
  * @ingroup randomvariable
@@ -1435,7 +1445,8 @@
     /** The lambda value for the Erlang distribution returned by this RNG stream. */
     double m_lambda;
 
-}; // class ErlangRandomVariable
+    // end of class ErlangRandomVariable
+};
 
 /**
  * @ingroup randomvariable
@@ -1566,7 +1577,8 @@
     /** The upper bound on values that can be returned by this RNG stream. */
     double m_max;
 
-}; // class TriangularRandomVariable
+    // end of class TriangularRandomVariable
+};
 
 /**
  * @ingroup randomvariable
@@ -1693,7 +1705,8 @@
     /** The normalization constant. */
     double m_c;
 
-}; // class ZipfRandomVariable
+    // end of class ZipfRandomVariable
+};
 
 /**
  * @ingroup randomvariable
@@ -1795,7 +1808,8 @@
     /** Just for calculus simplifications. */
     double m_b;
 
-}; // class ZetaRandomVariable
+    // end of class ZetaRandomVariable
+};
 
 /**
  * @ingroup randomvariable
@@ -1882,7 +1896,8 @@
     /** Array of values to return in sequence. */
     double* m_data;
 
-}; // class DeterministicRandomVariable
+    // end of class DeterministicRandomVariable
+};
 
 /**
  * @ingroup randomvariable
@@ -2075,7 +2090,8 @@
      */
     bool m_interpolate;
 
-}; // class EmpiricalRandomVariable
+    // end of class EmpiricalRandomVariable
+};
 
 /**
  * @ingroup randomvariable
@@ -2178,7 +2194,8 @@
     /** The probability of success in each trial. */
     double m_probability;
 
-}; // class BinomialRandomVariable
+    // end of class BinomialRandomVariable
+};
 
 /**
  * @ingroup randomvariable
@@ -2271,7 +2288,8 @@
     /** The probability of success. */
     double m_probability;
 
-}; // class BernoulliRandomVariable
+    // end of class BernoulliRandomVariable
+};
 
 /**
  * @ingroup randomvariable
@@ -2377,7 +2395,8 @@
     /** The bound on values that can be returned by this RNG stream. */
     double m_bound;
 
-}; // class LaplacianRandomVariable
+    // end of class LaplacianRandomVariable
+};
 
 /**
  * @ingroup randomvariable
@@ -2499,7 +2518,8 @@
     /** The scale value of the Largest Extreme Value distribution. */
     double m_scale;
 
-}; // class LargestExtremeValueRandomVariable
+    // end of class LargestExtremeValueRandomVariable
+};
 
 } // namespace ns3
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/core/model/show-progress.cc ns-3.45/src/core/model/show-progress.cc
--- ns-3.44/src/core/model/show-progress.cc	2025-03-09 16:55:49.363371100 -0700
+++ ns-3.45/src/core/model/show-progress.cc	2025-06-01 20:34:45.296701200 -0700
@@ -70,8 +70,7 @@
     }
     Simulator::Cancel(m_event);
     Start();
-
-} // ShowProgress::SetInterval
+}
 
 void
 ShowProgress::SetTimePrinter(TimePrinter lp)
@@ -99,8 +98,7 @@
     NS_LOG_FUNCTION(this);
     m_event = Simulator::Schedule(m_vtime, &ShowProgress::CheckProgress, this);
     m_timer.Start();
-
-} // ShowProgress::ScheduleCheckProgress
+}
 
 void
 ShowProgress::GiveFeedback(uint64_t nEvents, int64x64_t ratio, int64x64_t speed)
@@ -131,8 +129,7 @@
     // Restore stream state
     m_os->precision(precision);
     m_os->flags(flags);
-
-} // ShowProgress::GiveFeedback
+}
 
 void
 ShowProgress::CheckProgress()
@@ -255,15 +252,14 @@
 
     // And do it again
     ScheduleCheckProgress();
-
-} // ShowProgress::CheckProgress
+}
 
 void
 ShowProgress::Start()
 {
     m_stamp.Stamp();
     (*m_os) << "Start wall clock: " << m_stamp.ToString() << std::endl;
-} // ShowProgress::Start
+}
 
 void
 ShowProgress::Stop()
@@ -271,6 +267,6 @@
     m_stamp.Stamp();
     (*m_os) << "End wall clock:  " << m_stamp.ToString()
             << "\nElapsed wall clock: " << m_stamp.GetInterval() << "s" << std::endl;
-} // ShowProgress::Stop
+}
 
 } // namespace ns3
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/core/model/show-progress.h ns-3.45/src/core/model/show-progress.h
--- ns-3.44/src/core/model/show-progress.h	2025-03-09 16:55:49.363371100 -0700
+++ ns-3.45/src/core/model/show-progress.h	2025-06-01 20:34:45.296701200 -0700
@@ -181,8 +181,7 @@
     std::ostream* m_os;    //!< The output stream to use.
     bool m_verbose;        //!< Verbose mode flag
     uint64_t m_repCount;   //!< Number of CheckProgress events
-
-}; // class ShowProgress
+};
 
 } // namespace ns3
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/core/model/simulator.h ns-3.45/src/core/model/simulator.h
--- ns-3.44/src/core/model/simulator.h	2025-03-09 16:55:49.363371100 -0700
+++ ns-3.45/src/core/model/simulator.h	2025-06-01 20:34:45.297701100 -0700
@@ -522,7 +522,8 @@
      */
     static EventId m_stopEvent;
 
-}; // class Simulator
+    // end of class Simulator
+};
 
 /**
  * @ingroup simulator
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/core/model/system-path.cc ns-3.45/src/core/model/system-path.cc
--- ns-3.44/src/core/model/system-path.cc	2025-03-09 16:55:49.363371100 -0700
+++ ns-3.45/src/core/model/system-path.cc	2025-06-01 20:34:45.297701100 -0700
@@ -374,8 +374,7 @@
 
     NS_LOG_LOGIC("file itself exists: " << file);
     return true;
-
-} // Exists()
+}
 
 std::string
 CreateValidSystemPath(const std::string path)
@@ -392,7 +391,7 @@
                        incompatible_characters,
                        "_");
     return valid_path;
-} // CreateValidSystemPath
+}
 
 } // namespace SystemPath
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/core/model/system-wall-clock-timestamp.h ns-3.45/src/core/model/system-wall-clock-timestamp.h
--- ns-3.44/src/core/model/system-wall-clock-timestamp.h	2025-03-09 16:55:49.363371100 -0700
+++ ns-3.45/src/core/model/system-wall-clock-timestamp.h	2025-06-01 20:34:45.297701100 -0700
@@ -57,8 +57,7 @@
 
     /** Difference between the two previous time stamps. */
     std::time_t m_diff;
-
-}; // class SystemWallClockTimestamp
+};
 
 } // namespace ns3
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/core/model/test.cc ns-3.45/src/core/model/test.cc
--- ns-3.44/src/core/model/test.cc	2025-03-09 16:55:49.363371100 -0700
+++ ns-3.45/src/core/model/test.cc	2025-06-01 20:34:45.297701100 -0700
@@ -776,10 +776,10 @@
         << "  --xml                  : format test run output as xml" << std::endl
         << "  --tempdir=DIR          : set temp dir for tests to store output files" << std::endl
         << "  --datadir=DIR          : set data dir for tests to read reference files" << std::endl
-        << "  --out=FILE             : send test result to FILE instead of standard "
-        << "output" << std::endl
-        << "  --append=FILE          : append test result to FILE instead of standard "
-        << "output" << std::endl;
+        << "  --out=FILE             : send test result to FILE instead of standard output"
+        << std::endl
+        << "  --append=FILE          : append test result to FILE instead of standard output"
+        << std::endl;
 }
 
 void
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/core/model/test.h ns-3.45/src/core/model/test.h
--- ns-3.44/src/core/model/test.h	2025-03-09 16:55:49.363371100 -0700
+++ ns-3.45/src/core/model/test.h	2025-06-01 20:34:45.297701100 -0700
@@ -140,9 +140,9 @@
             std::ostringstream msgStream;                                                          \
             msgStream << msg;                                                                      \
             std::ostringstream actualStream;                                                       \
-            actualStream << actual;                                                                \
+            actualStream << (actual);                                                              \
             std::ostringstream limitStream;                                                        \
-            limitStream << limit;                                                                  \
+            limitStream << (limit);                                                                \
             ReportTestFailure(std::string(#actual) + " (actual) == " + std::string(#limit) +       \
                                   " (limit)",                                                      \
                               actualStream.str(),                                                  \
@@ -195,9 +195,9 @@
             std::ostringstream msgStream;                                                          \
             msgStream << msg;                                                                      \
             std::ostringstream actualStream;                                                       \
-            actualStream << actual;                                                                \
+            actualStream << (actual);                                                              \
             std::ostringstream limitStream;                                                        \
-            limitStream << limit;                                                                  \
+            limitStream << (limit);                                                                \
             ReportTestFailure(std::string(#actual) + " (actual) == " + std::string(#limit) +       \
                                   " (limit)",                                                      \
                               actualStream.str(),                                                  \
@@ -224,7 +224,7 @@
  * The message is interpreted as a stream, for example:
  *
  * @code
- * NS_TEST_EXPECT_MSG_EQUAL (result, true,
+ * NS_TEST_EXPECT_MSG_EQ(result, true,
  *      "cannot open file " << filename << " in test");
  * @endcode
  *
@@ -247,9 +247,9 @@
             std::ostringstream msgStream;                                                          \
             msgStream << msg;                                                                      \
             std::ostringstream actualStream;                                                       \
-            actualStream << actual;                                                                \
+            actualStream << (actual);                                                              \
             std::ostringstream limitStream;                                                        \
-            limitStream << limit;                                                                  \
+            limitStream << (limit);                                                                \
             ReportTestFailure(std::string(#actual) + " (actual) == " + std::string(#limit) +       \
                                   " (limit)",                                                      \
                               actualStream.str(),                                                  \
@@ -333,9 +333,9 @@
             std::ostringstream msgStream;                                                          \
             msgStream << msg;                                                                      \
             std::ostringstream actualStream;                                                       \
-            actualStream << actual;                                                                \
+            actualStream << (actual);                                                              \
             std::ostringstream limitStream;                                                        \
-            limitStream << limit << " +- " << tol;                                                 \
+            limitStream << (limit) << " +- " << tol;                                               \
             std::ostringstream condStream;                                                         \
             condStream << #actual << " (actual) < " << #limit << " (limit) + " << #tol             \
                        << " (tol) && " << #actual << " (actual) > " << #limit << " (limit) - "     \
@@ -421,9 +421,9 @@
             std::ostringstream msgStream;                                                          \
             msgStream << msg;                                                                      \
             std::ostringstream actualStream;                                                       \
-            actualStream << actual;                                                                \
+            actualStream << (actual);                                                              \
             std::ostringstream limitStream;                                                        \
-            limitStream << limit << " +- " << tol;                                                 \
+            limitStream << (limit) << " +- " << tol;                                               \
             std::ostringstream condStream;                                                         \
             condStream << #actual << " (actual) < " << #limit << " (limit) + " << #tol             \
                        << " (tol) && " << #actual << " (actual) > " << #limit << " (limit) - "     \
@@ -506,9 +506,9 @@
             std::ostringstream msgStream;                                                          \
             msgStream << msg;                                                                      \
             std::ostringstream actualStream;                                                       \
-            actualStream << actual;                                                                \
+            actualStream << (actual);                                                              \
             std::ostringstream limitStream;                                                        \
-            limitStream << limit << " +- " << tol;                                                 \
+            limitStream << (limit) << " +- " << tol;                                               \
             std::ostringstream condStream;                                                         \
             condStream << #actual << " (actual) < " << #limit << " (limit) + " << #tol             \
                        << " (tol) && " << #actual << " (actual) > " << #limit << " (limit) - "     \
@@ -560,9 +560,9 @@
             std::ostringstream msgStream;                                                          \
             msgStream << msg;                                                                      \
             std::ostringstream actualStream;                                                       \
-            actualStream << actual;                                                                \
+            actualStream << (actual);                                                              \
             std::ostringstream limitStream;                                                        \
-            limitStream << limit;                                                                  \
+            limitStream << (limit);                                                                \
             ReportTestFailure(std::string(#actual) + " (actual) != " + std::string(#limit) +       \
                                   " (limit)",                                                      \
                               actualStream.str(),                                                  \
@@ -611,9 +611,9 @@
             std::ostringstream msgStream;                                                          \
             msgStream << msg;                                                                      \
             std::ostringstream actualStream;                                                       \
-            actualStream << actual;                                                                \
+            actualStream << (actual);                                                              \
             std::ostringstream limitStream;                                                        \
-            limitStream << limit;                                                                  \
+            limitStream << (limit);                                                                \
             ReportTestFailure(std::string(#actual) + " (actual) != " + std::string(#limit) +       \
                                   " (limit)",                                                      \
                               actualStream.str(),                                                  \
@@ -662,9 +662,9 @@
             std::ostringstream msgStream;                                                          \
             msgStream << msg;                                                                      \
             std::ostringstream actualStream;                                                       \
-            actualStream << actual;                                                                \
+            actualStream << (actual);                                                              \
             std::ostringstream limitStream;                                                        \
-            limitStream << limit;                                                                  \
+            limitStream << (limit);                                                                \
             ReportTestFailure(std::string(#actual) + " (actual) != " + std::string(#limit) +       \
                                   " (limit)",                                                      \
                               actualStream.str(),                                                  \
@@ -705,9 +705,9 @@
             std::ostringstream msgStream;                                                          \
             msgStream << msg;                                                                      \
             std::ostringstream actualStream;                                                       \
-            actualStream << actual;                                                                \
+            actualStream << (actual);                                                              \
             std::ostringstream limitStream;                                                        \
-            limitStream << limit;                                                                  \
+            limitStream << (limit);                                                                \
             ReportTestFailure(std::string(#actual) + " (actual) < " + std::string(#limit) +        \
                                   " (limit)",                                                      \
                               actualStream.str(),                                                  \
@@ -746,9 +746,9 @@
             std::ostringstream msgStream;                                                          \
             msgStream << msg;                                                                      \
             std::ostringstream actualStream;                                                       \
-            actualStream << actual;                                                                \
+            actualStream << (actual);                                                              \
             std::ostringstream limitStream;                                                        \
-            limitStream << limit;                                                                  \
+            limitStream << (limit);                                                                \
             ReportTestFailure(std::string(#actual) + " (actual) < " + std::string(#limit) +        \
                                   " (limit)",                                                      \
                               actualStream.str(),                                                  \
@@ -786,9 +786,9 @@
             std::ostringstream msgStream;                                                          \
             msgStream << msg;                                                                      \
             std::ostringstream actualStream;                                                       \
-            actualStream << actual;                                                                \
+            actualStream << (actual);                                                              \
             std::ostringstream limitStream;                                                        \
-            limitStream << limit;                                                                  \
+            limitStream << (limit);                                                                \
             ReportTestFailure(std::string(#actual) + " (actual) < " + std::string(#limit) +        \
                                   " (limit)",                                                      \
                               actualStream.str(),                                                  \
@@ -826,9 +826,9 @@
             std::ostringstream msgStream;                                                          \
             msgStream << msg;                                                                      \
             std::ostringstream actualStream;                                                       \
-            actualStream << actual;                                                                \
+            actualStream << (actual);                                                              \
             std::ostringstream limitStream;                                                        \
-            limitStream << limit;                                                                  \
+            limitStream << (limit);                                                                \
             ReportTestFailure(std::string(#actual) + " (actual) < " + std::string(#limit) +        \
                                   " (limit)",                                                      \
                               actualStream.str(),                                                  \
@@ -870,9 +870,9 @@
             std::ostringstream msgStream;                                                          \
             msgStream << msg;                                                                      \
             std::ostringstream actualStream;                                                       \
-            actualStream << actual;                                                                \
+            actualStream << (actual);                                                              \
             std::ostringstream limitStream;                                                        \
-            limitStream << limit;                                                                  \
+            limitStream << (limit);                                                                \
             ReportTestFailure(std::string(#actual) + " (actual) > " + std::string(#limit) +        \
                                   " (limit)",                                                      \
                               actualStream.str(),                                                  \
@@ -911,9 +911,9 @@
             std::ostringstream msgStream;                                                          \
             msgStream << msg;                                                                      \
             std::ostringstream actualStream;                                                       \
-            actualStream << actual;                                                                \
+            actualStream << (actual);                                                              \
             std::ostringstream limitStream;                                                        \
-            limitStream << limit;                                                                  \
+            limitStream << (limit);                                                                \
             ReportTestFailure(std::string(#actual) + " (actual) > " + std::string(#limit) +        \
                                   " (limit)",                                                      \
                               actualStream.str(),                                                  \
@@ -952,9 +952,9 @@
             std::ostringstream msgStream;                                                          \
             msgStream << msg;                                                                      \
             std::ostringstream actualStream;                                                       \
-            actualStream << actual;                                                                \
+            actualStream << (actual);                                                              \
             std::ostringstream limitStream;                                                        \
-            limitStream << limit;                                                                  \
+            limitStream << (limit);                                                                \
             ReportTestFailure(std::string(#actual) + " (actual) > " + std::string(#limit) +        \
                                   " (limit)",                                                      \
                               actualStream.str(),                                                  \
@@ -992,9 +992,9 @@
             std::ostringstream msgStream;                                                          \
             msgStream << msg;                                                                      \
             std::ostringstream actualStream;                                                       \
-            actualStream << actual;                                                                \
+            actualStream << (actual);                                                              \
             std::ostringstream limitStream;                                                        \
-            limitStream << limit;                                                                  \
+            limitStream << (limit);                                                                \
             ReportTestFailure(std::string(#actual) + " (actual) > " + std::string(#limit) +        \
                                   " (limit)",                                                      \
                               actualStream.str(),                                                  \
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/core/model/time.cc ns-3.45/src/core/model/time.cc
--- ns-3.44/src/core/model/time.cc	2025-03-09 16:55:49.363371100 -0700
+++ ns-3.45/src/core/model/time.cc	2025-06-01 20:34:45.298701000 -0700
@@ -307,7 +307,7 @@
         g_markingTimes->erase(g_markingTimes->begin(), g_markingTimes->end());
         g_markingTimes = nullptr;
     }
-} // Time::ClearMarkedTimes
+}
 
 // static
 void
@@ -330,7 +330,7 @@
             NS_LOG_WARN("already recorded " << time << "!");
         }
     }
-} // Time::Mark ()
+}
 
 // static
 void
@@ -358,7 +358,7 @@
             NS_LOG_LOGIC("\t[" << g_markingTimes->size() << "] removing  " << time);
         }
     }
-} // Time::Clear ()
+}
 
 // static
 void
@@ -389,8 +389,7 @@
     NS_LOG_LOGIC("clearing MarkedTimes");
     g_markingTimes->erase(g_markingTimes->begin(), g_markingTimes->end());
     g_markingTimes = nullptr;
-
-} // Time::ConvertTimes ()
+}
 
 // static
 Time::Unit
@@ -558,8 +557,7 @@
         {
             NS_LOG_FUNCTION_NOARGS();
             std::ostringstream oss;
-            oss << "Time"
-                << " " << m_minValue << ":" << m_maxValue;
+            oss << "Time " << m_minValue << ":" << m_maxValue;
             return oss.str();
         }
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/core/model/traced-value.h ns-3.45/src/core/model/traced-value.h
--- ns-3.44/src/core/model/traced-value.h	2025-03-09 16:55:49.363371100 -0700
+++ ns-3.45/src/core/model/traced-value.h	2025-06-01 20:34:45.298701000 -0700
@@ -501,10 +501,13 @@
  * @returns The result of doing the operator on
  *     the underlying values.
  */
+// clang-format off
+// Clang-format guard needed for version 18 only
 template <typename T, typename U>
 auto
 operator+(const TracedValue<T>& lhs, const TracedValue<U>& rhs)
     -> TracedValue<decltype(lhs.Get() + rhs.Get())>
+// clang-format on
 {
     TRACED_VALUE_DEBUG("x+x");
     return TracedValue<decltype(lhs.Get() + rhs.Get())>(lhs.Get() + rhs.Get());
@@ -529,10 +532,13 @@
 }
 
 /** @copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
+// clang-format off
+// Clang-format guard needed for version 18 only
 template <typename T, typename U>
 auto
 operator-(const TracedValue<T>& lhs, const TracedValue<U>& rhs)
     -> TracedValue<decltype(lhs.Get() - rhs.Get())>
+// clang-format on
 {
     TRACED_VALUE_DEBUG("x-x");
     return TracedValue<decltype(lhs.Get() - rhs.Get())>(lhs.Get() - rhs.Get());
@@ -557,10 +563,13 @@
 }
 
 /** @copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
+// clang-format off
+// Clang-format guard needed for version 18 only
 template <typename T, typename U>
 auto
 operator*(const TracedValue<T>& lhs, const TracedValue<U>& rhs)
     -> TracedValue<decltype(lhs.Get() * rhs.Get())>
+// clang-format on
 {
     TRACED_VALUE_DEBUG("x*x");
     return TracedValue<decltype(lhs.Get() * rhs.Get())>(lhs.Get() * rhs.Get());
@@ -585,10 +594,13 @@
 }
 
 /** @copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
+// clang-format off
+// Clang-format guard needed for version 18 only
 template <typename T, typename U>
 auto
 operator/(const TracedValue<T>& lhs, const TracedValue<U>& rhs)
     -> TracedValue<decltype(lhs.Get() / rhs.Get())>
+// clang-format on
 {
     TRACED_VALUE_DEBUG("x/x");
     return TracedValue<decltype(lhs.Get() / rhs.Get())>(lhs.Get() / rhs.Get());
@@ -613,10 +625,13 @@
 }
 
 /** @copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
+// clang-format off
+// Clang-format guard needed for version 18 only
 template <typename T, typename U>
 auto
 operator%(const TracedValue<T>& lhs, const TracedValue<U>& rhs)
     -> TracedValue<decltype(lhs.Get() % rhs.Get())>
+// clang-format on
 {
     TRACED_VALUE_DEBUG("x%x");
     return TracedValue<decltype(lhs.Get() % rhs.Get())>(lhs.Get() % rhs.Get());
@@ -641,10 +656,13 @@
 }
 
 /** @copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
+// clang-format off
+// Clang-format guard needed for version 18 only
 template <typename T, typename U>
 auto
 operator^(const TracedValue<T>& lhs, const TracedValue<U>& rhs)
     -> TracedValue<decltype(lhs.Get() ^ rhs.Get())>
+// clang-format on
 {
     TRACED_VALUE_DEBUG("x^x");
     return TracedValue<decltype(lhs.Get() ^ rhs.Get())>(lhs.Get() ^ rhs.Get());
@@ -669,10 +687,13 @@
 }
 
 /** @copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
+// clang-format off
+// Clang-format guard needed for version 18 only
 template <typename T, typename U>
 auto
 operator|(const TracedValue<T>& lhs, const TracedValue<U>& rhs)
     -> TracedValue<decltype(lhs.Get() | rhs.Get())>
+// clang-format on
 {
     TRACED_VALUE_DEBUG("x|x");
     return TracedValue<decltype(lhs.Get() | rhs.Get())>(lhs.Get() | rhs.Get());
@@ -697,10 +718,13 @@
 }
 
 /** @copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
+// clang-format off
+// Clang-format guard needed for version 18 only
 template <typename T, typename U>
 auto
 operator&(const TracedValue<T>& lhs, const TracedValue<U>& rhs)
     -> TracedValue<decltype(lhs.Get() & rhs.Get())>
+// clang-format on
 {
     TRACED_VALUE_DEBUG("x&x");
     return TracedValue<decltype(lhs.Get() & rhs.Get())>(lhs.Get() & rhs.Get());
@@ -725,10 +749,13 @@
 }
 
 /** @copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
+// clang-format off
+// Clang-format guard needed for version 18 only
 template <typename T, typename U>
 auto
 operator<<(const TracedValue<T>& lhs, const TracedValue<U>& rhs)
     -> TracedValue<decltype(lhs.Get() << rhs.Get())>
+// clang-format on
 {
     TRACED_VALUE_DEBUG("x<<x");
     return TracedValue<decltype(lhs.Get() << rhs.Get())>(lhs.Get() << rhs.Get());
@@ -753,10 +780,13 @@
 }
 
 /** @copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
+// clang-format off
+// Clang-format guard needed for version 18 only
 template <typename T, typename U>
 auto
 operator>>(const TracedValue<T>& lhs, const TracedValue<U>& rhs)
     -> TracedValue<decltype(lhs.Get() >> rhs.Get())>
+// clang-format on
 {
     TRACED_VALUE_DEBUG("x>>x");
     return TracedValue<decltype(lhs.Get() >> rhs.Get())>(lhs.Get() >> rhs.Get());
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/core/model/trace-source-accessor.h ns-3.45/src/core/model/trace-source-accessor.h
--- ns-3.44/src/core/model/trace-source-accessor.h	2025-03-09 16:55:49.363371100 -0700
+++ ns-3.45/src/core/model/trace-source-accessor.h	2025-06-01 20:34:45.298701000 -0700
@@ -136,9 +136,12 @@
  * @param [in] a The underlying data value.
  * @returns The TraceSourceAccessor
  */
+// clang-format off
+// Clang-format guard needed for versions <= 18
 template <typename T, typename SOURCE>
 Ptr<const TraceSourceAccessor>
-DoMakeTraceSourceAccessor(SOURCE T::*a)
+DoMakeTraceSourceAccessor(SOURCE T::* a)
+// clang-format on
 {
     struct Accessor : public TraceSourceAccessor
     {
@@ -186,7 +189,10 @@
             return true;
         }
 
-        SOURCE T::*m_source;
+        // clang-format off
+        // Clang-format guard needed for versions <= 18
+        SOURCE T::* m_source;
+        // clang-format on
     }* accessor = new Accessor();
 
     accessor->m_source = a;
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/core/model/version.cache ns-3.45/src/core/model/version.cache
--- ns-3.44/src/core/model/version.cache	2025-03-09 16:56:26.395509200 -0700
+++ ns-3.45/src/core/model/version.cache	2025-06-01 20:35:16.349805600 -0700
@@ -1,10 +1,10 @@
-CLOSEST_TAG = '"ns-3.44"'
-VERSION_COMMIT_HASH = '"g43dce6710"'
+CLOSEST_TAG = '"ns-3.45"'
+VERSION_COMMIT_HASH = '"g4059af204"'
 VERSION_DIRTY_FLAG = '0'
 VERSION_MAJOR = '3'
-VERSION_MINOR = '44'
+VERSION_MINOR = '45'
 VERSION_PATCH = '0'
 VERSION_RELEASE_CANDIDATE = '""'
-VERSION_TAG = '"ns-3.44"'
+VERSION_TAG = '"ns-3.45"'
 VERSION_TAG_DISTANCE = '0'
 VERSION_BUILD_PROFILE = 'default'
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/core/model/version.h ns-3.45/src/core/model/version.h
--- ns-3.44/src/core/model/version.h	2025-03-09 16:55:49.367371000 -0700
+++ ns-3.45/src/core/model/version.h	2025-06-01 20:34:45.300701100 -0700
@@ -258,8 +258,7 @@
      * @return String containing full version
      */
     static std::string LongVersion();
-
-}; // class Version
+};
 
 } // namespace ns3
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/core/test/callback-test-suite.cc ns-3.45/src/core/test/callback-test-suite.cc
--- ns-3.44/src/core/test/callback-test-suite.cc	2025-03-09 16:55:49.367371000 -0700
+++ ns-3.45/src/core/test/callback-test-suite.cc	2025-06-01 20:34:45.300701100 -0700
@@ -1013,20 +1013,25 @@
  * Test function - does nothing.
  * @{
  */
-void TestFZero(){};
-void TestFOne(int){};
-void TestFTwo(int, int){};
-void TestFThree(int, int, int){};
-void TestFFour(int, int, int, int){};
-void TestFFive(int, int, int, int, int){};
-void TestFSix(int, int, int, int, int, int){};
-
-void TestFROne(int&){};
-void TestFRTwo(int&, int&){};
-void TestFRThree(int&, int&, int&){};
-void TestFRFour(int&, int&, int&, int&){};
-void TestFRFive(int&, int&, int&, int&, int&){};
-void TestFRSix(int&, int&, int&, int&, int&, int&){};
+
+// clang-format off
+
+void TestFZero() {}
+void TestFOne(int) {}
+void TestFTwo(int, int) {}
+void TestFThree(int, int, int) {}
+void TestFFour(int, int, int, int) {}
+void TestFFive(int, int, int, int, int) {}
+void TestFSix(int, int, int, int, int, int) {}
+
+void TestFROne(int&) {}
+void TestFRTwo(int&, int&) {}
+void TestFRThree(int&, int&, int&) {}
+void TestFRFour(int&, int&, int&, int&) {}
+void TestFRFive(int&, int&, int&, int&, int&) {}
+void TestFRSix(int&, int&, int&, int&, int&, int&) {}
+
+// clang-format on
 
 /** @} */
 
@@ -1075,20 +1080,25 @@
      * Test function - does nothing.
      * @{
      */
-    void TestZero(){};
-    void TestOne(int){};
-    void TestTwo(int, int){};
-    void TestThree(int, int, int){};
-    void TestFour(int, int, int, int){};
-    void TestFive(int, int, int, int, int){};
-    void TestSix(int, int, int, int, int, int){};
-    void TestCZero() const {};
-    void TestCOne(int) const {};
-    void TestCTwo(int, int) const {};
-    void TestCThree(int, int, int) const {};
-    void TestCFour(int, int, int, int) const {};
-    void TestCFive(int, int, int, int, int) const {};
-    void TestCSix(int, int, int, int, int, int) const {};
+
+    // clang-format off
+
+    void TestZero() {}
+    void TestOne(int) {}
+    void TestTwo(int, int) {}
+    void TestThree(int, int, int) {}
+    void TestFour(int, int, int, int) {}
+    void TestFive(int, int, int, int, int) {}
+    void TestSix(int, int, int, int, int, int) {}
+    void TestCZero() const  {}
+    void TestCOne(int) const  {}
+    void TestCTwo(int, int) const  {}
+    void TestCThree(int, int, int) const  {}
+    void TestCFour(int, int, int, int) const  {}
+    void TestCFive(int, int, int, int, int) const  {}
+    void TestCSix(int, int, int, int, int, int) const  {}
+
+    // clang-format on
 
     /** @} */
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/core/test/environment-variable-test-suite.cc ns-3.45/src/core/test/environment-variable-test-suite.cc
--- ns-3.44/src/core/test/environment-variable-test-suite.cc	2025-03-09 16:55:49.367371000 -0700
+++ ns-3.45/src/core/test/environment-variable-test-suite.cc	2025-06-01 20:34:45.301701000 -0700
@@ -110,7 +110,8 @@
     /** Test environment variable name. */
     const std::string m_variable{"NS_ENVVAR_TEST"};
 
-}; // class EnvVarTestCase
+    // end of class EnvVarTestCase
+};
 
 EnvVarTestCase::EnvVarTestCase()
     : TestCase("environment-variable-cache")
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/core/test/hash-test-suite.cc ns-3.45/src/core/test/hash-test-suite.cc
--- ns-3.44/src/core/test/hash-test-suite.cc	2025-03-09 16:55:49.367371000 -0700
+++ ns-3.45/src/core/test/hash-test-suite.cc	2025-06-01 20:34:45.301701000 -0700
@@ -76,7 +76,8 @@
     void Check(const std::string hashName, const int bits, const uint64_t hash);
     void DoRun() override;
 
-}; // class HashTestCase
+    // end of class HashTestCase
+};
 
 HashTestCase::HashTestCase(const std::string name)
     : TestCase(name),
@@ -415,11 +416,12 @@
     key2 = "Incremental.";
     key12 = key1 + key2;
 
-    std::cout << GetName() << "checking with key: "
-              << "\"" << key1 << "\"[" << key1.size() << "] + "
-              << "\"" << key2 << "\"[" << key2.size() << "]" << std::endl;
-    std::cout << GetName() << "equivalent to:     "
-              << "\"" << key12 << "\"[" << key12.size() << "]" << std::endl;
+    std::cout << GetName() << "checking with key: ";
+    std::cout << "\"" << key1 << "\"[" << key1.size() << "] + ";
+    std::cout << "\"" << key2 << "\"[" << key2.size() << "]" << std::endl;
+
+    std::cout << GetName() << "equivalent to:     ";
+    std::cout << "\"" << key12 << "\"[" << key12.size() << "]" << std::endl;
 
     DoHash("default", Hasher());
     DoHash("murmur3", Hasher(Create<Hash::Function::Murmur3>()));
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/core/test/random-variable-stream-test-suite.cc ns-3.45/src/core/test/random-variable-stream-test-suite.cc
--- ns-3.44/src/core/test/random-variable-stream-test-suite.cc	2025-03-09 16:55:49.367371000 -0700
+++ ns-3.45/src/core/test/random-variable-stream-test-suite.cc	2025-06-01 20:34:45.302701200 -0700
@@ -352,7 +352,8 @@
     /** \c true if we've already set the seed the correctly. */
     bool m_seedSet = false;
 
-}; // class TestCaseBase
+    // end of class TestCaseBase
+};
 
 /**
  * @ingroup rng-tests
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/core/test/simulator-test-suite.cc ns-3.45/src/core/test/simulator-test-suite.cc
--- ns-3.44/src/core/test/simulator-test-suite.cc	2025-03-09 16:55:49.367371000 -0700
+++ ns-3.45/src/core/test/simulator-test-suite.cc	2025-06-01 20:34:45.302701200 -0700
@@ -235,39 +235,45 @@
      *
      * @{
      */
-    void bar0(){};
-    void bar1(int){};
-    void bar2(int, int){};
-    void bar3(int, int, int){};
-    void bar4(int, int, int, int){};
-    void bar5(int, int, int, int, int){};
-    void baz1(int&){};
-    void baz2(int&, int&){};
-    void baz3(int&, int&, int&){};
-    void baz4(int&, int&, int&, int&){};
-    void baz5(int&, int&, int&, int&, int&){};
-    void cbaz1(const int&){};
-    void cbaz2(const int&, const int&){};
-    void cbaz3(const int&, const int&, const int&){};
-    void cbaz4(const int&, const int&, const int&, const int&){};
-    void cbaz5(const int&, const int&, const int&, const int&, const int&){};
-
-    void bar0c() const {};
-    void bar1c(int) const {};
-    void bar2c(int, int) const {};
-    void bar3c(int, int, int) const {};
-    void bar4c(int, int, int, int) const {};
-    void bar5c(int, int, int, int, int) const {};
-    void baz1c(int&) const {};
-    void baz2c(int&, int&) const {};
-    void baz3c(int&, int&, int&) const {};
-    void baz4c(int&, int&, int&, int&) const {};
-    void baz5c(int&, int&, int&, int&, int&) const {};
-    void cbaz1c(const int&) const {};
-    void cbaz2c(const int&, const int&) const {};
-    void cbaz3c(const int&, const int&, const int&) const {};
-    void cbaz4c(const int&, const int&, const int&, const int&) const {};
-    void cbaz5c(const int&, const int&, const int&, const int&, const int&) const {};
+
+    // clang-format off
+
+    void bar0() {}
+    void bar1(int) {}
+    void bar2(int, int) {}
+    void bar3(int, int, int) {}
+    void bar4(int, int, int, int) {}
+    void bar5(int, int, int, int, int) {}
+    void baz1(int&) {}
+    void baz2(int&, int&) {}
+    void baz3(int&, int&, int&) {}
+    void baz4(int&, int&, int&, int&) {}
+    void baz5(int&, int&, int&, int&, int&) {}
+    void cbaz1(const int&) {}
+    void cbaz2(const int&, const int&) {}
+    void cbaz3(const int&, const int&, const int&) {}
+    void cbaz4(const int&, const int&, const int&, const int&) {}
+    void cbaz5(const int&, const int&, const int&, const int&, const int&) {}
+
+    void bar0c() const {}
+    void bar1c(int) const {}
+    void bar2c(int, int) const {}
+    void bar3c(int, int, int) const {}
+    void bar4c(int, int, int, int) const {}
+    void bar5c(int, int, int, int, int) const {}
+    void baz1c(int&) const {}
+    void baz2c(int&, int&) const {}
+    void baz3c(int&, int&, int&) const {}
+    void baz4c(int&, int&, int&, int&) const {}
+    void baz5c(int&, int&, int&, int&, int&) const {}
+    void cbaz1c(const int&) const {}
+    void cbaz2c(const int&, const int&) const {}
+    void cbaz3c(const int&, const int&, const int&) const {}
+    void cbaz4c(const int&, const int&, const int&, const int&) const {}
+    void cbaz5c(const int&, const int&, const int&, const int&, const int&) const {}
+
+    // clang-format on
+
     /** @} */
 };
 
@@ -276,85 +282,27 @@
  *
  * @{
  */
-static void
-foo0()
-{
-}
-
-static void
-foo1(int)
-{
-}
-
-static void
-foo2(int, int)
-{
-}
-
-static void
-foo3(int, int, int)
-{
-}
-
-static void
-foo4(int, int, int, int)
-{
-}
-
-static void
-foo5(int, int, int, int, int)
-{
-}
-
-static void
-ber1(int&)
-{
-}
-
-static void
-ber2(int&, int&)
-{
-}
-
-static void
-ber3(int&, int&, int&)
-{
-}
-
-static void
-ber4(int&, int&, int&, int&)
-{
-}
-
-static void
-ber5(int&, int&, int&, int&, int&)
-{
-}
-
-static void
-cber1(const int&)
-{
-}
-
-static void
-cber2(const int&, const int&)
-{
-}
-
-static void
-cber3(const int&, const int&, const int&)
-{
-}
-
-static void
-cber4(const int&, const int&, const int&, const int&)
-{
-}
-
-static void
-cber5(const int&, const int&, const int&, const int&, const int&)
-{
-}
+
+// clang-format off
+
+static void foo0() {}
+static void foo1(int) {}
+static void foo2(int, int) {}
+static void foo3(int, int, int) {}
+static void foo4(int, int, int, int) {}
+static void foo5(int, int, int, int, int) {}
+static void ber1(int&) {}
+static void ber2(int&, int&) {}
+static void ber3(int&, int&, int&) {}
+static void ber4(int&, int&, int&, int&) {}
+static void ber5(int&, int&, int&, int&, int&) {}
+static void cber1(const int&) {}
+static void cber2(const int&, const int&) {}
+static void cber3(const int&, const int&, const int&) {}
+static void cber4(const int&, const int&, const int&, const int&) {}
+static void cber5(const int&, const int&, const int&, const int&, const int&) {}
+
+// clang-format on
 
 /** @} */
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/core/test/splitstring-test-suite.cc ns-3.45/src/core/test/splitstring-test-suite.cc
--- ns-3.44/src/core/test/splitstring-test-suite.cc	2025-03-09 16:55:49.367371000 -0700
+++ ns-3.45/src/core/test/splitstring-test-suite.cc	2025-06-01 20:34:45.302701200 -0700
@@ -56,7 +56,8 @@
     /** Test suite delimiter. */
     const std::string m_delimiter{":|:"};
 
-}; // class SplitStringTestCase
+    // end of class SplitStringTestCase
+};
 
 SplitStringTestCase::SplitStringTestCase()
     : TestCase("split-string")
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/core/test/timer-test-suite.cc ns-3.45/src/core/test/timer-test-suite.cc
--- ns-3.44/src/core/test/timer-test-suite.cc	2025-03-09 16:55:49.367371000 -0700
+++ ns-3.45/src/core/test/timer-test-suite.cc	2025-06-01 20:34:45.302701200 -0700
@@ -24,20 +24,24 @@
 namespace
 {
 
+// clang-format off
+
 /// Function with one int parameter.
-void bari(int){};
+void bari(int) {}
 /// Function with two int parameters.
-void bar2i(int, int){};
+void bar2i(int, int) {}
 /// Function with three int parameters.
-void bar3i(int, int, int){};
+void bar3i(int, int, int) {}
 /// Function with four int parameters.
-void bar4i(int, int, int, int){};
+void bar4i(int, int, int, int) {}
 /// Function with five int parameters.
-void bar5i(int, int, int, int, int){};
+void bar5i(int, int, int, int, int) {}
 /// Function with one const int reference parameter.
-void barcir(const int&){};
+void barcir(const int&) {}
 /// Function with one int reference parameter.
-void barir(int&){};
+void barir(int&) {}
+
+// clang-format on
 
 } // anonymous namespace
 
@@ -106,26 +110,30 @@
     void DoRun() override;
     void DoTeardown() override;
 
+    // clang-format off
+
     /// Member function with one int parameter.
-    void bazi(int){};
+    void bazi(int) {}
     /// Member function with two int parameters.
-    void baz2i(int, int){};
+    void baz2i(int, int) {}
     /// Member function with three int parameters.
-    void baz3i(int, int, int){};
+    void baz3i(int, int, int) {}
     /// Member function with four int parameters.
-    void baz4i(int, int, int, int){};
+    void baz4i(int, int, int, int) {}
     /// Member function with five int parameters.
-    void baz5i(int, int, int, int, int){};
+    void baz5i(int, int, int, int, int) {}
     /// Member function with six int parameters.
-    void baz6i(int, int, int, int, int, int){};
+    void baz6i(int, int, int, int, int, int) {}
     /// Member function with one const int reference parameter.
-    void bazcir(const int&){};
+    void bazcir(const int&) {}
     /// Member function with one int reference parameter.
-    void bazir(int&){};
+    void bazir(int&) {}
     /// Member function with one int pointer parameter.
-    void bazip(int*){};
+    void bazip(int*) {}
     /// Member function with one const int pointer parameter.
-    void bazcip(const int*){};
+    void bazcip(const int*) {}
+
+    // clang-format on
 };
 
 TimerTemplateTestCase::TimerTemplateTestCase()
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/csma/model/csma-channel.cc ns-3.45/src/csma/model/csma-channel.cc
--- ns-3.44/src/csma/model/csma-channel.cc	2025-03-09 16:55:49.371371000 -0700
+++ ns-3.45/src/csma/model/csma-channel.cc	2025-06-01 20:34:45.303701200 -0700
@@ -119,28 +119,25 @@
 {
     NS_LOG_FUNCTION(this << deviceId);
 
-    if (deviceId < m_deviceList.size())
+    if (deviceId >= m_deviceList.size())
     {
-        if (!m_deviceList[deviceId].active)
-        {
-            NS_LOG_WARN("CsmaChannel::Detach(): Device is already detached (" << deviceId << ")");
-            return false;
-        }
-
-        m_deviceList[deviceId].active = false;
-
-        if ((m_state == TRANSMITTING) && (m_currentSrc == deviceId))
-        {
-            NS_LOG_WARN("CsmaChannel::Detach(): Device is currently"
-                        << "transmitting (" << deviceId << ")");
-        }
-
-        return true;
+        return false;
     }
-    else
+
+    if (!m_deviceList[deviceId].active)
     {
+        NS_LOG_WARN("CsmaChannel::Detach(): Device is already detached (" << deviceId << ")");
         return false;
     }
+
+    m_deviceList[deviceId].active = false;
+
+    if ((m_state == TRANSMITTING) && (m_currentSrc == deviceId))
+    {
+        NS_LOG_WARN("CsmaChannel::Detach(): Device is currently transmitting (" << deviceId << ")");
+    }
+
+    return true;
 }
 
 bool
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/dsr/doc/dsr.h ns-3.45/src/dsr/doc/dsr.h
--- ns-3.44/src/dsr/doc/dsr.h	2025-03-09 16:55:49.371371000 -0700
+++ ns-3.45/src/dsr/doc/dsr.h	1969-12-31 16:00:00.000000000 -0800
@@ -1,31 +0,0 @@
-/*
- * Copyright (c) 2011 Yufei Cheng
- *
- * SPDX-License-Identifier: GPL-2.0-only
- *
- * Author: Yufei Cheng   <yfcheng@ittc.ku.edu>
- *
- * James P.G. Sterbenz <jpgs@ittc.ku.edu>, director
- * ResiliNets Research Group  https://resilinets.org/
- * Information and Telecommunication Technology Center (ITTC)
- * and Department of Electrical Engineering and Computer Science
- * The University of Kansas Lawrence, KS USA.
- *
- * Work supported in part by NSF FIND (Future Internet Design) Program
- * under grant CNS-0626918 (Postmodern Internet Architecture),
- * NSF grant CNS-1050226 (Multilayer Network Resilience Analysis and Experimentation on GENI),
- * US Department of Defense (DoD), and ITTC at The University of Kansas.
- */
-
-#ifndef DSR_H
-#define DSR_H
-
-/**
- * @defgroup dsr DSR Routing
- *
- * This section documents the API of the ns-3 DSR module. For a
- * generic functional description, please refer to the ns-3 model
- * library document.
- */
-
-#endif /* DSR_H */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/dsr/doc/dsr.rst ns-3.45/src/dsr/doc/dsr.rst
--- ns-3.44/src/dsr/doc/dsr.rst	2025-03-09 16:55:49.371371000 -0700
+++ ns-3.45/src/dsr/doc/dsr.rst	2025-06-01 20:34:45.305701300 -0700
@@ -1,150 +1,103 @@
+Dynamic Source Routing (DSR)
+============================
+
 .. include:: replace.txt
+.. highlight:: cpp
 
-DSR Routing
------------
+.. heading hierarchy:
+   ============= Chapter
+   ------------- Section (#.#)
+   ~~~~~~~~~~~~~ Subsection (#.#.#)
 
 Dynamic Source Routing (DSR) protocol is a reactive routing protocol designed specifically
-for use in multi-hop wireless ad hoc networks of mobile nodes.
+for use in multi-hop wireless ad hoc networks of mobile nodes. The current model implementation is based on the RFC 4728 [2_], with some extensions
+and modifications. The initial implementation was developed by `the ResiliNets research group <https://resilinets.org/>`_ at the University of Kansas with additions to the link cache mechanism done by Song Luan <lsuper@mail.ustc.edu.cn>.
+
+The source code for this module lives in the directory ``src/dsr``.
+
+.. _fig-dsrRreq:
+
+.. figure:: figures/dsrRreq.*
+
+    DSR route discovery
+
+.. _fig-dsrRrep:
+
+.. figure:: figures/dsrRrep.*
+
+    DSR route reply using route caching
+
+DSR creates routes towards a destination by adding the traversed route into the packet header during the discovery phase.
+Different packets might have different routes even if they have the same source and the same destination.
+The recorded information during the route discovery phase is used by intermediate nodes to determine whom the packet should be forward.
+Hence, the term dynamic source routing.
+
+Scope and Limitations
+---------------------
+
+* The model is not fully compliant with RFC 4728 [2_]. As an example, DSR fixed size header has been extended and it is four octets longer then the RFC specification. As a consequence, the DSR headers can not be correctly decoded by Wireshark.
+* At the moment, the model does not handle ICMP packets, and assumes that traffic is either TCP or UDP.
+* No flow state available.
+* No First Hop External (F), Last Hop External (L) flags.
+* There are no ways of handling unknown DSR options.
+* DSR option ``flow state not supported`` is not handled.
+* DSR option ``unsupported option`` is not handled.
+* Route Reply header is not aligned to the DSR RFC descriptions.
+
+
+Protocol operational details
+----------------------------
+
+DSR operates on a on-demand behavior. Therefore, our DSR model buffers all packets while a route request packet (RREQ) is disseminated.
+The packet buffer is implemented in ``dsr-rsendbuff.cc``.
+
+The packet queue implements garbage collection of old packets and a queue size limit.
+When the packet is sent out from the send buffer, it will be queued in maintenance buffer for next hop acknowledgment.
+
+The maintenance buffer then buffers the already sent out packets and waits for the notification of packet delivery.
+Protocol operation strongly depends on broken link detection mechanism.
+Three heuristics detection mechanisms are implementented as recommended by the RFC as follows:
+
+1. A link layer feedback is used when possible, which is also the fastest mechanism of these three to detect link errors. A link is considered to be broken if frame transmission results in a transmission failure for all retries. This mechanism is meant for active links and works much faster than in its absence. DSR is able to detect the link layer transmission failure and notify that as broken. Recalculation of routes will be triggered when needed. If user does not want to use link layer acknowledgment, it can be tuned by setting the ``LinkAcknowledgment`` attribute to false in ``dsr-routing.cc``.
+
+2. Passive acknowledgment should be used whenever possible. The node turns on "promiscuous" receive mode, in which it can receive packets not destined for itself, and when the node assures the delivery of that data packet to its destination, it cancels the passive acknowledgment timer.
+
+3. A network layer acknowledment scheme is used to notify the receipt of a packet. Route request packet are not be acknowledged or retransmitted.
+
+Route Cache implementation
+~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The Route Cache implementation support garbage collection of old entries and state machine, as defined in the standard.
+It is implemented as a STL map container. The destination IP address is used as a key in the map.
 
-This model was developed by
-`the ResiliNets research group <https://resilinets.org/>`_
-at the University of Kansas.
-
-DSR Routing Overview
-********************
-
-This model implements the base specification of the Dynamic Source Routing
-(DSR) protocol. Implementation is based on :rfc:`4728`, with some extensions
-and modifications to the RFC specifications.
-
-DSR operates on a on-demand behavior. Therefore, our DSR model buffers all
-packets while a route request packet (RREQ) is disseminated. We implement
-a packet buffer in dsr-rsendbuff.cc. The packet queue implements
-garbage collection of old packets and a queue size limit. When the packet
-is sent out from the send buffer, it will be queued in maintenance buffer
-for next hop acknowledgment.
-
-The maintenance buffer then buffers the already sent out packets and waits
-for the notification of packet delivery.  Protocol operation strongly
-depends on broken link detection mechanism. We implement the three heuristics
-recommended based the RFC as follows:
-
-First, we use link layer feedback when possible, which is also the fastest
-mechanism of these three to detect link errors. A link is considered to be
-broken if frame transmission results in a transmission failure for all
-retries. This mechanism is meant for active links and works much faster
-than in its absence.  DSR is able to
-detect the link layer transmission failure and notify that as broken.
-Recalculation of routes will be triggered
-when needed.  If user does not want to use link layer acknowledgment,
-it can be tuned by setting "LinkAcknowledgment" attribute to false in
-"dsr-routing.cc".
-
-Second, passive acknowledgment should be used whenever possible. The node
-turns on "promiscuous" receive mode, in which it can receive packets not
-destined for itself, and when the node assures the delivery of that data
-packet to its destination, it cancels the passive acknowledgment timer.
-
-Last, we use a network layer acknowledge scheme to notify the receipt of
-a packet. Route request packet will not be acknowledged or retransmitted.
-
-The Route Cache implementation support garbage collection of old entries
-and state machine, as defined in the
-standard.  It implements as a STL map container. The key is the
-destination IP address.
-
-DSR operates with direct access to IP header, and operates between network
-and transport layer.  When packet is sent out from transport layer, it
-passes itself to DSR and DSR header is appended.
-
-We have two caching mechanisms: path cache and link cache.  The path cache
-saves the whole path in the cache.  The paths are sorted based on the
-hop count, and whenever one path is not able to be used, we change to the
-next path.  The link cache is a slightly better design in the sense that it
-uses different subpaths and uses Implemented Link Cache using
-Dijkstra algorithm, and this part is implemented by
-Song Luan <lsuper@mail.ustc.edu.cn>.
-
-The following optional protocol optimizations aren't implemented:
-
-* Flow state
-* First Hop External (F), Last Hop External (L) flags
-* Handling unknown DSR options
-* Two types of error headers:
-     1. flow state not supported option
-     2. unsupported option (not going to happen in simulation)
-
-DSR update in ns-3.17
-=====================
-
-We originally used "TxErrHeader" in Ptr<WifiMac> to indicate the transmission
-error of a specific packet in link layer, however, it was not working
-quite correctly since even when the packet was dropped, this header was
-not recorded in the trace file.  We used to a different path on implementing
-the link layer notification mechanism.  We look into the trace file by
-finding packet receive event.  If we find one receive event for the
-data packet, we count that as the indicator for successful data delivery.
-
-Useful parameters
-=================
-
-::
-
-   +------------------------- +------------------------------------+-------------+
-   | Parameter                | Description                        | Default     |
-   +==========================+====================================+=============+
-   | MaxSendBuffLen           | Maximum number of packets that can | 64          |
-   |                          | be stored in send buffer           |             |
-   +------------------------- +------------------------------------+-------------+
-   | MaxSendBuffTime          | Maximum time packets can be queued | Seconds(30) |
-   |                          | in the send buffer                 |             |
-   +------------------------- +------------------------------------+-------------+
-   | MaxMaintLen              | Maximum number of packets that can | 50          |
-   |                          | be stored in maintenance buffer    |             |
-   +------------------------- +------------------------------------+-------------+
-   | MaxMaintTime             | Maximum time packets can be queued | Seconds(30) |
-   |                          | in maintenance buffer              |             |
-   +------------------------- +------------------------------------+-------------+
-   | MaxCacheLen              | Maximum number of route entries    | 64          |
-   |                          | that can be stored in route cache  |             |
-   +------------------------- +------------------------------------+-------------+
-   | RouteCacheTimeout        | Maximum time the route cache can   | Seconds(300)|
-   |                          | be queued in route cache           |             |
-   +------------------------- +------------------------------------+-------------+
-   | RreqRetries              | Maximum number of retransmissions  | 16          |
-   |                          | for request discovery of a route   |             |
-   +------------------------- +------------------------------------+-------------+
-   | CacheType                | Use Link Cache or use Path Cache   | "LinkCache" |
-   |                          |                                    |             |
-   +------------------------- +------------------------------------+-------------+
-   | LinkAcknowledgment       | Enable Link layer acknowledgment   | True        |
-   |                          | mechanism                          |             |
-   +------------------------- +------------------------------------+-------------+
-
-Implementation modification
-===========================
-
-* The DsrFsHeader has added 3 fields: message type, source id, destination id, and these changes only for post-processing
-  1. Message type is used to identify the data packet from control packet
-  2. source id is used to identify the real source of the data packet since we have to deliver the packet hop-by-hop and the Ipv4Header is not carrying the real source and destination ip address as needed
-  3. destination id is for same reason of above
-* Route Reply header is not word-aligned in DSR RFC, change it to word-aligned in implementation
-* DSR works as a shim header between transport and network protocol, it needs its own forwarding mechanism, we are changing the packet transmission to hop-by-hop delivery, so we added two fields in dsr fixed header to notify packet delivery
-
-
-Current Route Cache implementation
-==================================
-
-This implementation used "path cache", which is simple to implement and ensures loop-free paths:
-
-* the path cache has automatic expire policy
-* the cache saves multiple route entries for a certain destination and sort the entries based on hop counts
-* the MaxEntriesEachDst can be tuned to change the maximum entries saved for a single destination
-* when adding multiple routes for one destination, the route is compared based on hop-count and expire time, the one with less hop count or relatively new route is favored
-* Future implementation may include "link cache" as another possibility
+DSR operates with direct access to IP header, and operates between network and transport layer.
+When packet is sent out from transport layer, it passes itself to DSR and DSR header is appended.
 
-DSR Instructions
-****************
+Two caching mechanisms exists in the implementation: Path cache and Link cache.
+
+- **Path Cache:** As the name implies, this cache saves the whole path and ensures loop-free paths.
+  The paths are sorted based on the hop count, and whenever one path becomes unusable a different path is chosen. Some of its characteristics are as follows:
+
+  * The cache has automatic expire policy.
+  * The cache saves multiple route entries for a certain destination and sort the entries based on hop counts.
+  * The ``MaxEntriesEachDst`` can be tuned to change the maximum entries saved for a single destination.
+  * When adding multiple routes for one destination, the route is compared based on hop-count and expire time, the one with less hop count or relatively new route is favored.
+
+- **Link Cache:** This is an improvement over the patch cache in the sense that it uses different subpaths and make use ot the Dijkstra algorithm.
+
+Modifications
+~~~~~~~~~~~~~
+
+* The DsrFsHeader has added 3 fields: message type, source id, destination id, and these changes only for post-processing.
+
+  1. Message type is used to identify the data packet from control packet.
+  2. Source id is used to identify the real source of the data packet since the packet is delivered hop-by-hop and the Ipv4Header is not carrying the real source and destination ip address as needed.
+  3. Destination id is for same reason of above.
+
+* DSR works as a shim header between transport and network protocol, it needs its own forwarding mechanism, we are changing the packet transmission to hop-by-hop delivery, so we added two fields in dsr fixed header to notify packet delivery.
+
+Other considerations
+~~~~~~~~~~~~~~~~~~~~
 
 The following should be kept in mind when running DSR as routing protocol:
 
@@ -152,60 +105,73 @@
 * PassiveAckTimeout is the time a packet in maintenance buffer wait for passive acknowledgment, normally set as two times of NodeTraversalTime
 * RouteCacheTimeout should be set smaller value when the nodes' velocity become higher. The default value is 300s.
 
-Helper
-******
+Usage
+-----
+
+In |ns3|, DSR is used on top of WiFi nodes. The simplest way to use it requires the use of its helper
+as explained in the following subsections.
+
+Helpers
+~~~~~~~
 
 To have a node run DSR, the easiest way would be to use the DsrHelper
 and DsrMainHelpers in your simulation script. For instance:
 
 .. sourcecode:: cpp
 
-  DsrHelper dsr;
-  DsrMainHelper dsrMain;
-  dsrMain.Install(dsr, adhocNodes);
-
-The example scripts inside ``src/dsr/examples/`` demonstrate the use of DSR based nodes in different scenarios.
-The helper source can be found inside ``src/dsr/helper/dsr-main-helper.{h,cc}``
-and ``src/dsr/helper/dsr-helper.{h,cc}``
+   NodeContainer adhocNodes;
+   nodes.Create(5); // Add 5 nodes to the node container
+   DsrHelper dsr;
+   DsrMainHelper dsrMain;
+   dsrMain.Install(dsr, adhocNodes); // Install DSR on each node
+
 
-Examples
-********
+Attributes
+~~~~~~~~~~
+
+The complete list of available attributes with descriptions for this model can be found on `this link <https://www.nsnam.org/doxygen/de/deb/classns3_1_1dsr_1_1_dsr_routing.html#details>`_.
+
+Traces
+~~~~~~
+
+The complete list of available trace sources with descriptions for this model can be found on `this link <https://www.nsnam.org/doxygen/de/deb/classns3_1_1dsr_1_1_dsr_routing.html#details>`_.
+
+
+Examples and Tests
+------------------
 
 The example can be found in ``src/dsr/examples/``:
 
-* dsr.cc use DSR as routing protocol within a traditional MANETs environment[3].
+* ``dsr.cc``: Use DSR as routing protocol within a traditional MANETs environment.
 
 DSR is also built in the routing comparison case in ``examples/routing/``:
 
-* ``manet-routing-compare.cc`` is a comparison case with built in MANET routing protocols and can generate its own results.
+* ``manet-routing-compare.cc``: A comparison case with built in MANET routing protocols and can generate its own results.
 
 Validation
-**********
+----------
 
 This model has been tested as follows:
 
 * Unit tests have been written to verify the internals of DSR. This can be found in ``src/dsr/test/dsr-test-suite.cc``. These tests verify whether the methods inside DSR module which deal with packet buffer, headers work correctly.
-* Simulation cases similar to [3] have been tested and have comparable results.
-* manet-routing-compare.cc has been used to compare DSR with three of other routing protocols.
+* Simulation cases similar to [3_] have been tested and have comparable results.
+* Manet-routing-compare.cc has been used to compare DSR with three of other routing protocols.
+* A paper was presented on these results at the Workshop on ns-3 in 2011 [4_].
 
-A paper was presented on these results at the Workshop on ns-3 in 2011.
+References
+----------
 
-Limitations
-***********
+[`1 <https://web.archive.org/web/20150430233910/http://www.monarch.cs.rice.edu/monarch-papers/dsr-chapter00.pdf>`_] Johnson, David B., David A. Maltz, and Josh Broch. "DSR: The dynamic source routing protocol for multi-hop wireless ad hoc networks." Ad hoc networking 5.1 (2001): 139-172.
+
+[`2 <https://datatracker.ietf.org/doc/html/rfc4728>`_] RFC 4728
+
+[`3 <https://dl.acm.org/doi/10.1145/288235.288256>`_] Josh Broch, David A. Maltz, David B. Johnson, Yih-Chun Hu, and Jorjeta Jetcheva. 1998. A performance comparison of multi-hop wireless ad hoc network routing protocols. In Proceedings of the 4th annual ACM/IEEE international conference on Mobile computing and networking (MobiCom '98). Association for Computing Machinery, New York, NY, USA, 85–97.
+
+[`4 <https://dl.acm.org/doi/10.5555/2263019.2263077>`_] Yufei Cheng, Egemen K. Çetinkaya, and James P. G. Sterbenz. 2012. Dynamic source routing (DSR) protocol implementation in ns-3. In Proceedings of the 5th International ICST Conference on Simulation Tools and Techniques (SIMUTOOLS '12). ICST (Institute for Computer Sciences, Social-Informatics and Telecommunications Engineering), Brussels, BEL, 367–374.
 
-The model is not fully compliant with :rfc:`4728`. As an example, Dsr fixed size header
-has been extended and it is four octets longer then the RFC specification.
-As a consequence, the DSR headers can not be correctly decoded by Wireshark.
 
-The model full compliance with the RFC is planned for the future.
 
-At the moment, the model does not handle ICMP packets, and assumes that traffic is either TCP or UDP.
 
-References
-**********
 
-[1] Original paper: https://web.archive.org/web/20150430233910/http://www.monarch.cs.rice.edu/monarch-papers/dsr-chapter00.pdf
 
-[2] RFC 4728 https://datatracker.ietf.org/doc/html/rfc4728
 
-[3] Broch's comparison paper: https://web.archive.org/web/20150725135435/http://www.monarch.cs.rice.edu/monarch-papers/mobicom98.ps
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/dsr/model/dsr-options.cc ns-3.45/src/dsr/model/dsr-options.cc
--- ns-3.44/src/dsr/model/dsr-options.cc	2025-03-09 16:55:49.371371000 -0700
+++ ns-3.45/src/dsr/model/dsr-options.cc	2025-06-01 20:34:45.306701200 -0700
@@ -477,12 +477,6 @@
     return tid;
 }
 
-TypeId
-DsrOptionRreq::GetInstanceTypeId() const
-{
-    return GetTypeId();
-}
-
 DsrOptionRreq::DsrOptionRreq()
 {
     NS_LOG_FUNCTION_NOARGS();
@@ -1018,12 +1012,6 @@
     NS_LOG_FUNCTION_NOARGS();
 }
 
-TypeId
-DsrOptionRrep::GetInstanceTypeId() const
-{
-    return GetTypeId();
-}
-
 uint8_t
 DsrOptionRrep::GetOptionNumber() const
 {
@@ -1241,12 +1229,6 @@
     NS_LOG_FUNCTION_NOARGS();
 }
 
-TypeId
-DsrOptionSR::GetInstanceTypeId() const
-{
-    return GetTypeId();
-}
-
 uint8_t
 DsrOptionSR::GetOptionNumber() const
 {
@@ -1519,12 +1501,6 @@
     NS_LOG_FUNCTION_NOARGS();
 }
 
-TypeId
-DsrOptionRerr::GetInstanceTypeId() const
-{
-    return GetTypeId();
-}
-
 uint8_t
 DsrOptionRerr::GetOptionNumber() const
 {
@@ -1712,12 +1688,6 @@
     NS_LOG_FUNCTION_NOARGS();
 }
 
-TypeId
-DsrOptionAckReq::GetInstanceTypeId() const
-{
-    return GetTypeId();
-}
-
 uint8_t
 DsrOptionAckReq::GetOptionNumber() const
 {
@@ -1780,12 +1750,6 @@
     NS_LOG_FUNCTION_NOARGS();
 }
 
-TypeId
-DsrOptionAck::GetInstanceTypeId() const
-{
-    return GetTypeId();
-}
-
 uint8_t
 DsrOptionAck::GetOptionNumber() const
 {
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/dsr/model/dsr-options.h ns-3.45/src/dsr/model/dsr-options.h
--- ns-3.44/src/dsr/model/dsr-options.h	2025-03-09 16:55:49.371371000 -0700
+++ ns-3.45/src/dsr/model/dsr-options.h	2025-06-01 20:34:45.306701200 -0700
@@ -354,11 +354,6 @@
      */
     static TypeId GetTypeId();
     /**
-     * @brief Get the instance type ID.
-     * @return instance type ID
-     */
-    TypeId GetInstanceTypeId() const override;
-    /**
      * @brief Constructor.
      */
     DsrOptionRreq();
@@ -405,11 +400,6 @@
      * @return the object TypeId
      */
     static TypeId GetTypeId();
-    /**
-     * @brief Get the instance type ID.
-     * @return instance type ID
-     */
-    TypeId GetInstanceTypeId() const override;
 
     DsrOptionRrep();
     ~DsrOptionRrep() override;
@@ -452,11 +442,6 @@
      * @return the object TypeId
      */
     static TypeId GetTypeId();
-    /**
-     * @brief Get the instance type ID.
-     * @return instance type ID
-     */
-    TypeId GetInstanceTypeId() const override;
 
     DsrOptionSR();
     ~DsrOptionSR() override;
@@ -495,11 +480,6 @@
      * @return the object TypeId
      */
     static TypeId GetTypeId();
-    /**
-     * @brief Get the instance type ID.
-     * @return instance type ID
-     */
-    TypeId GetInstanceTypeId() const override;
 
     DsrOptionRerr();
     ~DsrOptionRerr() override;
@@ -557,11 +537,6 @@
      * @return the object TypeId
      */
     static TypeId GetTypeId();
-    /**
-     * @brief Get the instance type ID.
-     * @return instance type ID
-     */
-    TypeId GetInstanceTypeId() const override;
 
     DsrOptionAckReq();
     ~DsrOptionAckReq() override;
@@ -604,11 +579,6 @@
      * @return the object TypeId
      */
     static TypeId GetTypeId();
-    /**
-     * @brief Get the instance type ID.
-     * @return instance type ID
-     */
-    TypeId GetInstanceTypeId() const override;
 
     DsrOptionAck();
     ~DsrOptionAck() override;
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/dsr/model/dsr-rcache.h ns-3.45/src/dsr/model/dsr-rcache.h
--- ns-3.44/src/dsr/model/dsr-rcache.h	2025-03-09 16:55:49.371371000 -0700
+++ ns-3.45/src/dsr/model/dsr-rcache.h	2025-06-01 20:34:45.306701200 -0700
@@ -673,7 +673,8 @@
 
         Neighbor()
         {
-        } // For Python bindings
+            // For Python bindings
+        }
     };
 
     /**
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/dsr/model/dsr-routing.h ns-3.45/src/dsr/model/dsr-routing.h
--- ns-3.44/src/dsr/model/dsr-routing.h	2025-03-09 16:55:49.371371000 -0700
+++ ns-3.45/src/dsr/model/dsr-routing.h	2025-06-01 20:34:45.307701000 -0700
@@ -80,6 +80,16 @@
 class DsrOptions;
 
 /**
+ * @defgroup dsr Dynamic Source Routing (DSR)
+ *
+ * This section documents the API of the Dynamic Source Routing Protocol based on RFC 4728
+ * with some modifications. For a generic functional description, please refer to the ns-3
+ * model library document.
+ */
+
+/**
+ * @ingroup dsr
+ *
  * @class DsrRouting
  * @brief Dsr Routing base
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/energy/examples/generic-battery-wifiradio-example.cc ns-3.45/src/energy/examples/generic-battery-wifiradio-example.cc
--- ns-3.44/src/energy/examples/generic-battery-wifiradio-example.cc	2025-03-09 16:55:49.375371000 -0700
+++ ns-3.45/src/energy/examples/generic-battery-wifiradio-example.cc	2025-06-01 20:34:45.308701300 -0700
@@ -273,9 +273,8 @@
     NS_LOG_DEBUG(" *Remaining Capacity * "
                  << "| Node 0: " << battery0->GetRemainingEnergy() << " J "
                  << "| Node 1: " << battery1->GetRemainingEnergy() << " J");
-    NS_LOG_DEBUG(" *SoC * "
-                 << "| Node 0: " << battery0->GetStateOfCharge() << " % "
-                 << "| Node 1: " << battery1->GetStateOfCharge() << " % ");
+    NS_LOG_DEBUG(" *SoC * | Node 0: " << battery0->GetStateOfCharge() << " % "
+                                      << "| Node 1: " << battery1->GetStateOfCharge() << " %");
 
     Simulator::Destroy();
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/energy/model/generic-battery-model.h ns-3.45/src/energy/model/generic-battery-model.h
--- ns-3.44/src/energy/model/generic-battery-model.h	2025-03-09 16:55:49.375371000 -0700
+++ ns-3.45/src/energy/model/generic-battery-model.h	2025-06-01 20:34:45.310701100 -0700
@@ -138,7 +138,7 @@
  * @brief A generic battery model for  Li-Ion, NiCd, NiMh and Lead acid batteries
  *
  * The generic battery model can be used to describe the discharge behavior of
- * the battery chemestries supported by the model.
+ * the battery chemistries supported by the model.
  */
 class GenericBatteryModel : public EnergySource
 {
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/flow-monitor/doc/flow-monitor.rst ns-3.45/src/flow-monitor/doc/flow-monitor.rst
--- ns-3.44/src/flow-monitor/doc/flow-monitor.rst	2025-03-09 16:55:49.379371200 -0700
+++ ns-3.45/src/flow-monitor/doc/flow-monitor.rst	2025-06-01 20:34:45.312701200 -0700
@@ -1,19 +1,14 @@
 Flow Monitor
-------------
+============
 
 .. include:: replace.txt
 .. highlight:: cpp
 
 .. heading hierarchy:
-   ------------- Chapter
-   ************* Section (#.#)
-   ============= Subsection (#.#.#)
-   ############# Paragraph (no number)
+   ============= Chapter
+   ------------- Section (#.#)
+   ~~~~~~~~~~~~~ Subsection (#.#.#)
 
-Model Description
-*****************
-
-The source code for the module lives in the directory ``src/flow-monitor``.
 
 The Flow Monitor module goal is to provide a flexible system to measure the
 performance of network protocols. The module uses probes, installed in network
@@ -26,8 +21,12 @@
 The statistics are collected for each flow can be exported in XML format. Moreover,
 the user can access the probes directly to request specific stats about each flow.
 
-Design
-======
+
+.. _fig-flowmonitorArq:
+
+.. figure:: figures/flowmonitorArq.*
+
+    High-level Flow Monitor Architecture
 
 Flow Monitor module is designed in a modular way. It can be extended by subclassing
 ``ns3::FlowProbe`` and ``ns3::FlowClassifier``.
@@ -42,10 +41,10 @@
 ``CsmaNetDevice`` and ``PointToPointNetDevice`` have a ``TxQueue/Drop`` trace, while
 ``WiFiNetDevice`` does not.
 
-The full module design is described in [FlowMonitor]_
+The source code for the module lives in the directory ``src/flow-monitor``.
 
 Scope and Limitations
-=====================
+---------------------
 
 At the moment, probes and classifiers are available only for IPv4 and IPv6.
 
@@ -89,8 +88,7 @@
 Due to the above design, FlowMonitor can not generate statistics when used with DSR routing
 protocol (because DSR forwards packets using broadcast addresses)
 
-The "lost" packets problem
-##########################
+**The "lost" packets problem**
 
 At the end of a simulation, Flow Monitor could report about "lost" packets, i.e.,
 packets that Flow Monitor have lost track of.
@@ -111,15 +109,25 @@
 toward the received packets or the dropped ones. Ideally, their number should be zero or a minimal
 fraction of the other ones, i.e., they should be "statistically irrelevant".
 
-References
-==========
-
-.. [FlowMonitor] G. Carneiro, P. Fortuna, and M. Ricardo. 2009. FlowMonitor: a network monitoring framework for the network simulator 3 (NS-3). In Proceedings of the Fourth International ICST Conference on Performance Evaluation Methodologies and Tools (VALUETOOLS '09). http://dx.doi.org/10.4108/ICST.VALUETOOLS2009.7493 (Full text: https://dl.acm.org/doi/abs/10.4108/ICST.VALUETOOLS2009.7493)
 
 Usage
-*****
+-----
 
 The module usage is extremely simple. The helper will take care of about everything.
+There are however, a few things that must be considered when using Flow Monitor:
+
+
+
+Helpers
+~~~~~~~
+
+The helper API follows the pattern usage of normal helpers.
+Through the helper you can install the monitor in the nodes, set the monitor attributes, and
+print the statistics.
+
+
+.. Important::
+  When using the :cpp:class:`ns3::FlowMonitorHelper` must be instantiated only once in the ``main`` function.
 
 The typical use is::
 
@@ -139,32 +147,7 @@
 Other possible alternatives can be found in the Doxygen documentation, while
 ``cleanup_time`` is the time needed by in-flight packets to reach their destinations.
 
-Helpers
-=======
-
-The helper API follows the pattern usage of normal helpers.
-Through the helper you can install the monitor in the nodes, set the monitor attributes, and
-print the statistics.
-
-One important thing is: the :cpp:class:`ns3::FlowMonitorHelper` must be instantiated only
-once in the main.
-
-Attributes
-==========
-
-The module provides the following attributes in :cpp:class:`ns3::FlowMonitor`:
-
-* MaxPerHopDelay (Time, default 10s): The maximum per-hop delay that should be considered;
-* StartTime (Time, default 0s): The time when the monitoring starts;
-* DelayBinWidth (double, default 0.001): The width used in the delay histogram;
-* JitterBinWidth (double, default 0.001): The width used in the jitter histogram;
-* PacketSizeBinWidth (double, default 20.0): The width used in the packetSize histogram;
-* FlowInterruptionsBinWidth (double, default 0.25): The width used in the flowInterruptions histogram;
-* FlowInterruptionsMinTime (double, default 0.5): The minimum inter-arrival time that is considered a flow interruption.
-
-
-Output
-======
+**XML file output**
 
 The main model output is an XML formatted report about flow statistics. An example is::
 
@@ -203,8 +186,30 @@
 It should also be observed that the receiving node's probe (index 4) doesn't count the fragments, as the
 reassembly is done before the probing point.
 
-Examples
-========
+
+Attributes
+~~~~~~~~~~
+
+The module provides the following attributes in :cpp:class:`ns3::FlowMonitor`:
+
+* ``MaxPerHopDelay`` (Time, default 10s): The maximum per-hop delay that should be considered;
+* ``StartTime`` (Time, default 0s): The time when the monitoring starts;
+* ``DelayBinWidth`` (double, default 0.001): The width used in the delay histogram;
+* ``JitterBinWidth`` (double, default 0.001): The width used in the jitter histogram;
+* ``PacketSizeBinWidth`` (double, default 20.0): The width used in the packetSize histogram;
+* ``FlowInterruptionsBinWidth`` (double, default 0.25): The width used in the flowInterruptions histogram;
+* ``FlowInterruptionsMinTime`` (double, default 0.5): The minimum inter-arrival time that is considered a flow interruption.
+
+
+Traces
+~~~~~~
+
+No traces are provided by this module as it is the module itself which provides a simple monitoring functionality to
+other networks.
+
+
+Examples and Tests
+------------------
 
 The examples are located in `src/flow-monitor/examples`.
 
@@ -217,16 +222,18 @@
 * examples/wireless/wifi-multirate.cc
 * examples/wireless/wifi-hidden-terminal.cc
 
+Tests are provided to ensure the histogram correct functionality.
 
-Troubleshooting
-===============
-
-Do not define more than one :cpp:class:`ns3::FlowMonitorHelper` in the simulation.
 
 Validation
-**********
+----------
 
 The paper in the references contains a full description of the module validation against
 a test network.
 
-Tests are provided to ensure the Histogram correct functionality.
+
+References
+----------
+
+[`1 <https://dl.acm.org/doi/abs/10.4108/ICST.VALUETOOLS2009.74939>`_] G. Carneiro, P. Fortuna, and M. Ricardo. 2009. FlowMonitor: a network monitoring framework for the network simulator 3 (NS-3). In Proceedings of the Fourth International ICST Conference on Performance Evaluation Methodologies and Tools (VALUETOOLS '09). http://dx.doi.org/10.4108/ICST.VALUETOOLS2009.7493.
+
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/flow-monitor/model/flow-monitor.cc ns-3.45/src/flow-monitor/model/flow-monitor.cc
--- ns-3.44/src/flow-monitor/model/flow-monitor.cc	2025-03-09 16:55:49.379371200 -0700
+++ ns-3.45/src/flow-monitor/model/flow-monitor.cc	2025-06-01 20:34:45.313701200 -0700
@@ -74,12 +74,6 @@
     return tid;
 }
 
-TypeId
-FlowMonitor::GetInstanceTypeId() const
-{
-    return GetTypeId();
-}
-
 FlowMonitor::FlowMonitor()
     : m_enabled(false)
 {
@@ -440,45 +434,53 @@
     indent += 2;
     os << std::string(indent, ' ') << "<FlowStats>\n";
     indent += 2;
-    for (auto flowI = m_flowStats.begin(); flowI != m_flowStats.end(); flowI++)
+    for (const auto& [flowId, flowStats] : m_flowStats)
     {
         os << std::string(indent, ' ');
-#define ATTRIB(name) " " #name "=\"" << flowI->second.name << "\""
-#define ATTRIB_TIME(name) " " #name "=\"" << flowI->second.name.As(Time::NS) << "\""
-        os << "<Flow flowId=\"" << flowI->first << "\"" << ATTRIB_TIME(timeFirstTxPacket)
-           << ATTRIB_TIME(timeFirstRxPacket) << ATTRIB_TIME(timeLastTxPacket)
-           << ATTRIB_TIME(timeLastRxPacket) << ATTRIB_TIME(delaySum) << ATTRIB_TIME(jitterSum)
-           << ATTRIB_TIME(lastDelay) << ATTRIB_TIME(maxDelay) << ATTRIB_TIME(minDelay)
-           << ATTRIB(txBytes) << ATTRIB(rxBytes) << ATTRIB(txPackets) << ATTRIB(rxPackets)
-           << ATTRIB(lostPackets) << ATTRIB(timesForwarded) << ">\n";
+#define ATTRIB(name) " " #name "=\"" << flowStats.name << "\""
+#define ATTRIB_TIME(name) " " #name "=\"" << flowStats.name.As(Time::NS) << "\""
+        os << "<Flow";
+        os << " flowId=\"" << flowId << "\"";
+        os << ATTRIB_TIME(timeFirstTxPacket);
+        os << ATTRIB_TIME(timeFirstRxPacket);
+        os << ATTRIB_TIME(timeLastTxPacket);
+        os << ATTRIB_TIME(timeLastRxPacket);
+        os << ATTRIB_TIME(delaySum);
+        os << ATTRIB_TIME(jitterSum);
+        os << ATTRIB_TIME(lastDelay);
+        os << ATTRIB_TIME(maxDelay);
+        os << ATTRIB_TIME(minDelay);
+        os << ATTRIB(txBytes);
+        os << ATTRIB(rxBytes);
+        os << ATTRIB(txPackets);
+        os << ATTRIB(rxPackets);
+        os << ATTRIB(lostPackets);
+        os << ATTRIB(timesForwarded);
+        os << ">\n";
 #undef ATTRIB_TIME
 #undef ATTRIB
 
         indent += 2;
-        for (uint32_t reasonCode = 0; reasonCode < flowI->second.packetsDropped.size();
-             reasonCode++)
+        for (uint32_t reasonCode = 0; reasonCode < flowStats.packetsDropped.size(); reasonCode++)
         {
             os << std::string(indent, ' ');
             os << "<packetsDropped reasonCode=\"" << reasonCode << "\""
-               << " number=\"" << flowI->second.packetsDropped[reasonCode] << "\" />\n";
+               << " number=\"" << flowStats.packetsDropped[reasonCode] << "\" />\n";
         }
-        for (uint32_t reasonCode = 0; reasonCode < flowI->second.bytesDropped.size(); reasonCode++)
+        for (uint32_t reasonCode = 0; reasonCode < flowStats.bytesDropped.size(); reasonCode++)
         {
             os << std::string(indent, ' ');
             os << "<bytesDropped reasonCode=\"" << reasonCode << "\""
-               << " bytes=\"" << flowI->second.bytesDropped[reasonCode] << "\" />\n";
+               << " bytes=\"" << flowStats.bytesDropped[reasonCode] << "\" />\n";
         }
         if (enableHistograms)
         {
-            flowI->second.delayHistogram.SerializeToXmlStream(os, indent, "delayHistogram");
-            flowI->second.jitterHistogram.SerializeToXmlStream(os, indent, "jitterHistogram");
-            flowI->second.packetSizeHistogram.SerializeToXmlStream(os,
-                                                                   indent,
-                                                                   "packetSizeHistogram");
-            flowI->second.flowInterruptionsHistogram.SerializeToXmlStream(
-                os,
-                indent,
-                "flowInterruptionsHistogram");
+            flowStats.delayHistogram.SerializeToXmlStream(os, indent, "delayHistogram");
+            flowStats.jitterHistogram.SerializeToXmlStream(os, indent, "jitterHistogram");
+            flowStats.packetSizeHistogram.SerializeToXmlStream(os, indent, "packetSizeHistogram");
+            flowStats.flowInterruptionsHistogram.SerializeToXmlStream(os,
+                                                                      indent,
+                                                                      "flowInterruptionsHistogram");
         }
         indent -= 2;
 
@@ -521,7 +523,7 @@
 FlowMonitor::SerializeToXmlFile(std::string fileName, bool enableHistograms, bool enableProbes)
 {
     NS_LOG_FUNCTION(this << fileName << enableHistograms << enableProbes);
-    std::ofstream os(fileName, std::ios::out | std::ios::binary);
+    std::ofstream os(fileName, std::ios::out);
     os << "<?xml version=\"1.0\" ?>\n";
     SerializeToXmlStream(os, 0, enableHistograms, enableProbes);
     os.close();
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/flow-monitor/model/flow-monitor.h ns-3.45/src/flow-monitor/model/flow-monitor.h
--- ns-3.44/src/flow-monitor/model/flow-monitor.h	2025-03-09 16:55:49.379371200 -0700
+++ ns-3.45/src/flow-monitor/model/flow-monitor.h	2025-06-01 20:34:45.313701200 -0700
@@ -137,7 +137,6 @@
      * @return the object TypeId
      */
     static TypeId GetTypeId();
-    TypeId GetInstanceTypeId() const override;
     FlowMonitor();
 
     /// Add a FlowClassifier to be used by the flow monitor.
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/internet/doc/tcp.rst ns-3.45/src/internet/doc/tcp.rst
--- ns-3.44/src/internet/doc/tcp.rst	2025-03-09 16:55:49.383371000 -0700
+++ ns-3.45/src/internet/doc/tcp.rst	2025-06-01 20:34:45.318701300 -0700
@@ -1125,6 +1125,36 @@
 
 * Vivek Jain, Viyom Mittal and Mohit P. Tahiliani. "Design and Implementation of TCP BBR in ns-3." In Proceedings of the 10th Workshop on ns-3, pp. 16-22. 2018. (https://dl.acm.org/doi/abs/10.1145/3199902.3199911)
 
+Integration with TcpRateOps
+^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+In the older version of the TCP BBR algorithm, the ``appLimited`` variable was handled directly inside the ``TcpBbr`` class. To make the code more modular and similar to how things are done in Linux TCP, a pointer to the ``TcpRateOps`` class called ``Ptr<TcpRateOps> m_rateOps`` was introduced. This change helps manage the ``appLimited`` state through the rate operations interface instead of directly in ``TcpBbr``.
+
+Now, the ``appLimited`` value can be accessed with:
+
+.. code-block:: cpp
+
+    m_rateOps->GetConnectionRate().m_appLimited;
+
+And it can be updated using:
+
+.. code-block:: cpp
+
+    m_rateOps->SetAppLimited(tcb->m_bytesInFlight.Get());
+
+The ``SetAppLimited`` function, which is part of the ``TcpRateLinux`` class, takes care of updating the ``appLimited`` value based on the current amount of data in flight.
+
+Here's an example of the ``SetRateOps`` method in ``TcpBbr``:
+
+.. code-block:: cpp
+
+    void TcpBbr::SetRateOps(Ptr<TcpRateOps> rateOps)
+    {
+        m_rateOps = rateOps;
+    }
+
+This setup makes the code more organized and reflects how Linux TCP handles the ``appLimited`` state, where it's managed within the TCP socket and updated by rate operations.
+
 Support for Explicit Congestion Notification (ECN)
 ++++++++++++++++++++++++++++++++++++++++++++++++++
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/internet/model/arp-cache.cc ns-3.45/src/internet/model/arp-cache.cc
--- ns-3.44/src/internet/model/arp-cache.cc	2025-03-09 16:55:49.387371000 -0700
+++ ns-3.45/src/internet/model/arp-cache.cc	2025-06-01 20:34:45.320701100 -0700
@@ -594,4 +594,37 @@
     m_retries = 0;
 }
 
+void
+ArpCache::Entry::Print(std::ostream& os) const
+{
+    os << m_ipv4Address << " lladdr " << m_macAddress << " state ";
+
+    switch (m_state)
+    {
+    case ALIVE:
+        os << "ALIVE";
+        break;
+    case WAIT_REPLY:
+        os << "WAIT_REPLY";
+        break;
+    case DEAD:
+        os << "DEAD";
+        break;
+    case PERMANENT:
+        os << "PERMANENT";
+        break;
+    case STATIC_AUTOGENERATED:
+        os << "STATIC_AUTOGENERATED";
+    }
+
+    os << " last seen " << m_lastSeen.As() << " timeout " << GetTimeout().As();
+}
+
+std::ostream&
+operator<<(std::ostream& os, const ArpCache::Entry& entry)
+{
+    entry.Print(os);
+    return os;
+}
+
 } // namespace ns3
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/internet/model/arp-cache.h ns-3.45/src/internet/model/arp-cache.h
--- ns-3.44/src/internet/model/arp-cache.h	2025-03-09 16:55:49.387371000 -0700
+++ ns-3.45/src/internet/model/arp-cache.h	2025-06-01 20:34:45.320701100 -0700
@@ -278,6 +278,19 @@
          */
         void UpdateSeen();
 
+        /**
+         * @brief Print this ARP entry to the given output stream
+         *
+         * @param os The output stream to which this ARP entry is printed
+         */
+        void Print(std::ostream& os) const;
+
+        /**
+         * @brief Returns the entry timeout
+         * @returns the entry timeout
+         */
+        Time GetTimeout() const;
+
       private:
         /**
          * @brief ARP cache entry states
@@ -291,12 +304,6 @@
             STATIC_AUTOGENERATED
         };
 
-        /**
-         * @brief Returns the entry timeout
-         * @returns the entry timeout
-         */
-        Time GetTimeout() const;
-
         ArpCache* m_arp;              //!< pointer to the ARP cache owning the entry
         ArpCacheEntryState_e m_state; //!< state of the entry
         Time m_lastSeen;              //!< last moment a packet from that address has been seen
@@ -340,6 +347,15 @@
         m_dropTrace; //!< trace for packets dropped by the ARP cache queue
 };
 
+/**
+ * @brief Stream insertion operator.
+ *
+ * @param os the stream
+ * @param entry the ARP entry
+ * @returns a reference to the stream
+ */
+std::ostream& operator<<(std::ostream& os, const ArpCache::Entry& entry);
+
 } // namespace ns3
 
 #endif /* ARP_CACHE_H */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/internet/model/arp-l3-protocol.cc ns-3.45/src/internet/model/arp-l3-protocol.cc
--- ns-3.44/src/internet/model/arp-l3-protocol.cc	2025-03-09 16:55:49.387371000 -0700
+++ ns-3.45/src/internet/model/arp-l3-protocol.cc	2025-06-01 20:34:45.320701100 -0700
@@ -309,10 +309,23 @@
                                     cache,
                                     destination);
             }
+            else if (entry->IsWaitReply())
+            {
+                NS_LOG_LOGIC("node=" << m_node->GetId() << ", entry for " << destination
+                                     << " waiting for a reply -- adding the packet to the queue");
+                if (!entry->UpdateWaitReply(ArpCache::Ipv4PayloadHeaderPair(packet, ipHeader)))
+                {
+                    // add the Ipv4 header for tracing purposes
+                    packet->AddHeader(ipHeader);
+                    m_dropTrace(packet);
+                }
+                return false;
+            }
             else
             {
-                NS_FATAL_ERROR("Test for possibly unreachable code-- please file a bug report, "
-                               "with a test case, if this is ever hit");
+                NS_FATAL_ERROR("Test for possibly unreachable code -- please file a bug report, "
+                               "with a test case - "
+                               << *entry);
             }
         }
         else
@@ -352,8 +365,9 @@
             }
             else
             {
-                NS_LOG_LOGIC("Test for possibly unreachable code-- please file a bug report, with "
-                             "a test case, if this is ever hit");
+                NS_FATAL_ERROR("Test for possibly unreachable code -- please file a bug report, "
+                               "with a test case - "
+                               << *entry);
             }
         }
     }
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/internet/model/global-route-manager-impl.cc ns-3.45/src/internet/model/global-route-manager-impl.cc
--- ns-3.44/src/internet/model/global-route-manager-impl.cc	2025-03-09 16:55:49.387371000 -0700
+++ ns-3.45/src/internet/model/global-route-manager-impl.cc	2025-06-01 20:34:45.320701100 -0700
@@ -129,11 +129,9 @@
         uint32_t orgCount = (*piter)->m_children.size();
         (*piter)->m_children.remove(this);
         uint32_t newCount = (*piter)->m_children.size();
-        if (orgCount > newCount)
-        {
-            NS_ASSERT_MSG(orgCount > newCount,
-                          "Unable to find the current vertex from its parents --- impossible!");
-        }
+
+        NS_ASSERT_MSG(orgCount > newCount,
+                      "Unable to find the current vertex from its parents --- impossible!");
     }
 
     // delete children
@@ -749,6 +747,7 @@
         numRecordsInVertex = v->GetLSA()->GetNAttachedRouters();
     }
 
+    // Loop over the links in V's LSA
     for (uint32_t i = 0; i < numRecordsInVertex; i++)
     {
         // Get w_lsa:  In case of V is Router-LSA
@@ -864,9 +863,7 @@
             }
             else
             {
-                NS_ASSERT_MSG(0,
-                              "SPFNexthopCalculation never "
-                                  << "return false, but it does now!");
+                NS_ASSERT_MSG(0, "SPFNexthopCalculation never return false, but it does now!");
             }
         }
         else if (w_lsa->GetStatus() == GlobalRoutingLSA::LSA_SPF_CANDIDATE)
@@ -943,9 +940,9 @@
                     //
                     candidate.Reorder();
                 }
-            } // new lower cost path found
-        }     // end W is already on the candidate list
-    }         // end loop over the links in V's LSA
+            }
+        }
+    }
 }
 
 //
@@ -1051,7 +1048,7 @@
                                           << " goes through next hop " << nextHop
                                           << " via outgoing interface " << outIf
                                           << " with distance " << distance);
-        } // end W is a router vertes
+        }
         else
         {
             NS_ASSERT(w->GetVertexType() == SPFVertex::VertexNetwork);
@@ -1071,7 +1068,7 @@
                                           << " with distance " << distance);
             return 1;
         }
-    } // end v is the root
+    }
     else if (v->GetVertexType() == SPFVertex::VertexNetwork)
     {
         // See if any of v's parents are the root
@@ -1457,8 +1454,7 @@
         //
         // Iterate the algorithm by returning to Step 2 until there are no more
         // candidate vertices.
-
-    } // end for loop
+    }
 
     // Second stage of SPF calculation procedure
     SPFProcessStubs(m_spfroot);
@@ -1631,7 +1627,7 @@
             }
         }
         return;
-    } // for
+    }
 }
 
 // Processing logic from RFC 2328, page 166 and quagga ospf_spf_process_stubs ()
@@ -1794,8 +1790,8 @@
                 }
             }
             return;
-        } // if
-    }     // for
+        }
+    }
 }
 
 //
@@ -2023,7 +2019,7 @@
                                            << " using next hop " << nextHop
                                            << " since outgoing interface id is negative " << outIf);
                 }
-            } // for all routes from the root the vertex 'v'
+            }
         }
         //
         // Done adding the routes for the selected node.
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/internet/model/icmpv6-l4-protocol.cc ns-3.45/src/internet/model/icmpv6-l4-protocol.cc
--- ns-3.44/src/internet/model/icmpv6-l4-protocol.cc	2025-03-09 16:55:49.391371000 -0700
+++ ns-3.45/src/internet/model/icmpv6-l4-protocol.cc	2025-06-01 20:34:45.322701200 -0700
@@ -145,13 +145,6 @@
     return tid;
 }
 
-TypeId
-Icmpv6L4Protocol::GetInstanceTypeId() const
-{
-    NS_LOG_FUNCTION(this);
-    return Icmpv6L4Protocol::GetTypeId();
-}
-
 Icmpv6L4Protocol::Icmpv6L4Protocol()
     : m_node(nullptr)
 {
@@ -175,6 +168,7 @@
     }
     m_cacheList.clear();
     m_downTarget.Nullify();
+    m_startDhcpv6.Nullify();
 
     m_node = nullptr;
     IpL4Protocol::DoDispose();
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/internet/model/icmpv6-l4-protocol.h ns-3.45/src/internet/model/icmpv6-l4-protocol.h
--- ns-3.44/src/internet/model/icmpv6-l4-protocol.h	2025-03-09 16:55:49.391371000 -0700
+++ ns-3.45/src/internet/model/icmpv6-l4-protocol.h	2025-06-01 20:34:45.322701200 -0700
@@ -47,7 +47,6 @@
      * @return the object TypeId
      */
     static TypeId GetTypeId();
-    TypeId GetInstanceTypeId() const override;
 
     /**
      * @brief ICMPv6 protocol number (58).
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/internet/model/ipv4-interface.cc ns-3.45/src/internet/model/ipv4-interface.cc
--- ns-3.44/src/internet/model/ipv4-interface.cc	2025-03-09 16:55:49.395371200 -0700
+++ ns-3.45/src/internet/model/ipv4-interface.cc	2025-06-01 20:34:45.323701100 -0700
@@ -31,16 +31,20 @@
 TypeId
 Ipv4Interface::GetTypeId()
 {
-    static TypeId tid = TypeId("ns3::Ipv4Interface")
-                            .SetParent<Object>()
-                            .SetGroupName("Internet")
-                            .AddAttribute("ArpCache",
-                                          "The arp cache for this ipv4 interface",
-                                          PointerValue(nullptr),
-                                          MakePointerAccessor(&Ipv4Interface::SetArpCache,
-                                                              &Ipv4Interface::GetArpCache),
-                                          MakePointerChecker<ArpCache>());
-    ;
+    static TypeId tid =
+        TypeId("ns3::Ipv4Interface")
+            .SetParent<Object>()
+            .SetGroupName("Internet")
+            .AddAttribute(
+                "ArpCache",
+                "The arp cache for this ipv4 interface",
+                PointerValue(nullptr),
+                MakePointerAccessor(&Ipv4Interface::SetArpCache, &Ipv4Interface::GetArpCache),
+                MakePointerChecker<ArpCache>())
+            .AddTraceSource("InterfaceStatus",
+                            "Interface has been set up or down.",
+                            MakeTraceSourceAccessor(&Ipv4Interface::m_interfaceStatus),
+                            "ns3::Ipv4Address::TracedCallback");
     return tid;
 }
 
@@ -175,6 +179,11 @@
 {
     NS_LOG_FUNCTION(this);
     m_ifup = true;
+
+    Ptr<Ipv4> ip = m_node->GetObject<Ipv4>();
+    NS_ASSERT_MSG(ip, "IPv4 not installed on node.");
+    auto ifIndex = ip->GetInterfaceForDevice(m_device);
+    m_interfaceStatus(m_ifup, ifIndex);
 }
 
 void
@@ -182,6 +191,11 @@
 {
     NS_LOG_FUNCTION(this);
     m_ifup = false;
+
+    Ptr<Ipv4> ip = m_node->GetObject<Ipv4>();
+    NS_ASSERT_MSG(ip, "IPv4 not installed on node.");
+    auto ifIndex = ip->GetInterfaceForDevice(m_device);
+    m_interfaceStatus(m_ifup, ifIndex);
 }
 
 bool
@@ -239,8 +253,7 @@
     }
     if (m_device->NeedsArp())
     {
-        NS_LOG_LOGIC("Needs ARP"
-                     << " " << dest);
+        NS_LOG_LOGIC("Needs ARP " << dest);
         Ptr<ArpL3Protocol> arp = m_node->GetObject<ArpL3Protocol>();
         Address hardwareDestination;
         bool found = false;
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/internet/model/ipv4-interface.h ns-3.45/src/internet/model/ipv4-interface.h
--- ns-3.44/src/internet/model/ipv4-interface.h	2025-03-09 16:55:49.395371200 -0700
+++ ns-3.45/src/internet/model/ipv4-interface.h	2025-06-01 20:34:45.323701100 -0700
@@ -12,6 +12,7 @@
 
 #include "ns3/object.h"
 #include "ns3/ptr.h"
+#include "ns3/traced-callback.h"
 
 #include <list>
 
@@ -238,6 +239,12 @@
         m_removeAddressCallback; //!< remove address callback
     Callback<void, Ptr<Ipv4Interface>, Ipv4InterfaceAddress>
         m_addAddressCallback; //!< add address callback
+
+    /**
+     * The trace fired when the interface state changes.
+     * Includes state (true if interface is up) and the interface index.
+     */
+    ns3::TracedCallback<bool, int32_t> m_interfaceStatus;
 };
 
 } // namespace ns3
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/internet/model/ipv6-interface.cc ns-3.45/src/internet/model/ipv6-interface.cc
--- ns-3.44/src/internet/model/ipv6-interface.cc	2025-03-09 16:55:49.399371100 -0700
+++ ns-3.45/src/internet/model/ipv6-interface.cc	2025-06-01 20:34:45.325701200 -0700
@@ -33,7 +33,14 @@
 TypeId
 Ipv6Interface::GetTypeId()
 {
-    static TypeId tid = TypeId("ns3::Ipv6Interface").SetParent<Object>().SetGroupName("Internet");
+    static TypeId tid =
+        TypeId("ns3::Ipv6Interface")
+            .SetParent<Object>()
+            .SetGroupName("Internet")
+            .AddTraceSource("InterfaceStatus",
+                            "Interface has been set up or down.",
+                            MakeTraceSourceAccessor(&Ipv6Interface::m_interfaceStatus),
+                            "ns3::Ipv6Address::TracedCallback");
     return tid;
 }
 
@@ -170,6 +177,11 @@
     }
     DoSetup();
     m_ifup = true;
+
+    Ptr<Ipv6> ip = m_node->GetObject<Ipv6>();
+    NS_ASSERT_MSG(ip, "IPv6 not installed on node.");
+    auto ifIndex = ip->GetInterfaceForDevice(m_device);
+    m_interfaceStatus(m_ifup, ifIndex);
 }
 
 void
@@ -179,6 +191,11 @@
     m_ifup = false;
     m_addresses.clear();
     m_ndCache->Flush();
+
+    Ptr<Ipv6> ip = m_node->GetObject<Ipv6>();
+    NS_ASSERT_MSG(ip, "IPv6 not installed on node.");
+    auto ifIndex = ip->GetInterfaceForDevice(m_device);
+    m_interfaceStatus(m_ifup, ifIndex);
 }
 
 bool
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/internet/model/ipv6-interface.h ns-3.45/src/internet/model/ipv6-interface.h
--- ns-3.44/src/internet/model/ipv6-interface.h	2025-03-09 16:55:49.399371100 -0700
+++ ns-3.45/src/internet/model/ipv6-interface.h	2025-06-01 20:34:45.325701200 -0700
@@ -13,6 +13,7 @@
 
 #include "ns3/object.h"
 #include "ns3/ptr.h"
+#include "ns3/traced-callback.h"
 
 #include <list>
 
@@ -386,6 +387,12 @@
 
     Callback<void, Ptr<Ipv6Interface>, Ipv6InterfaceAddress>
         m_addAddressCallback; //!< add address callback
+
+    /**
+     * The trace fired when the interface state changes.
+     * Includes state (true if interface is up) and the interface index.
+     */
+    ns3::TracedCallback<bool, int32_t> m_interfaceStatus;
 };
 
 } /* namespace ns3 */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/internet/model/rtt-estimator.cc ns-3.45/src/internet/model/rtt-estimator.cc
--- ns-3.44/src/internet/model/rtt-estimator.cc	2025-03-09 16:55:49.403371000 -0700
+++ ns-3.45/src/internet/model/rtt-estimator.cc	2025-06-01 20:34:45.328701300 -0700
@@ -87,12 +87,6 @@
     NS_LOG_FUNCTION(this);
 }
 
-TypeId
-RttEstimator::GetInstanceTypeId() const
-{
-    return GetTypeId();
-}
-
 void
 RttEstimator::Reset()
 {
@@ -149,12 +143,6 @@
     NS_LOG_FUNCTION(this);
 }
 
-TypeId
-RttMeanDeviation::GetInstanceTypeId() const
-{
-    return GetTypeId();
-}
-
 uint32_t
 RttMeanDeviation::CheckForReciprocalPowerOfTwo(double val) const
 {
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/internet/model/rtt-estimator.h ns-3.45/src/internet/model/rtt-estimator.h
--- ns-3.44/src/internet/model/rtt-estimator.h	2025-03-09 16:55:49.403371000 -0700
+++ ns-3.45/src/internet/model/rtt-estimator.h	2025-06-01 20:34:45.328701300 -0700
@@ -46,8 +46,6 @@
 
     ~RttEstimator() override;
 
-    TypeId GetInstanceTypeId() const override;
-
     /**
      * @brief Add a new measurement to the estimator. Pure virtual function.
      * @param t the new RTT measure.
@@ -126,8 +124,6 @@
      */
     RttMeanDeviation(const RttMeanDeviation& r);
 
-    TypeId GetInstanceTypeId() const override;
-
     /**
      * @brief Add a new measurement to the estimator.
      * @param measure the new RTT measure.
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/internet/model/tcp-bbr.cc ns-3.45/src/internet/model/tcp-bbr.cc
--- ns-3.44/src/internet/model/tcp-bbr.cc	2025-03-09 16:55:49.403371000 -0700
+++ ns-3.45/src/internet/model/tcp-bbr.cc	2025-06-01 20:34:45.328701300 -0700
@@ -119,7 +119,6 @@
       m_isInitialized(sock.m_isInitialized),
       m_uv(sock.m_uv),
       m_delivered(sock.m_delivered),
-      m_appLimited(sock.m_appLimited),
       m_extraAckedGain(sock.m_extraAckedGain),
       m_extraAckedWinRtt(sock.m_extraAckedWinRtt),
       m_extraAckedWinRttLength(sock.m_extraAckedWinRttLength),
@@ -132,6 +131,12 @@
     NS_LOG_FUNCTION(this);
 }
 
+void
+TcpBbr::SetRateOps(Ptr<TcpRateOps> rateOps)
+{
+    m_rateOps = rateOps;
+}
+
 const char* const TcpBbr::BbrModeName[BBR_PROBE_RTT + 1] = {
     "BBR_STARTUP",
     "BBR_DRAIN",
@@ -415,8 +420,7 @@
 {
     NS_LOG_FUNCTION(this << tcb);
 
-    uint32_t totalBytes = m_delivered + tcb->m_bytesInFlight.Get();
-    m_appLimited = (totalBytes > 0 ? totalBytes : 1);
+    m_rateOps->SetAppLimited(tcb->m_bytesInFlight.Get());
 
     if (m_probeRttDoneStamp.IsZero() && tcb->m_bytesInFlight <= m_minPipeCwnd)
     {
@@ -763,7 +767,8 @@
         m_packetConservation = false;
         RestoreCwnd(tcb);
     }
-    else if (event == TcpSocketState::CA_EVENT_TX_START && m_appLimited)
+    else if (event == TcpSocketState::CA_EVENT_TX_START &&
+             m_rateOps->GetConnectionRate().m_appLimited)
     {
         NS_LOG_DEBUG("CwndEvent triggered to CA_EVENT_TX_START :: " << event);
         m_idleRestart = true;
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/internet/model/tcp-bbr.h ns-3.45/src/internet/model/tcp-bbr.h
--- ns-3.44/src/internet/model/tcp-bbr.h	2025-03-09 16:55:49.403371000 -0700
+++ ns-3.45/src/internet/model/tcp-bbr.h	2025-06-01 20:34:45.328701300 -0700
@@ -100,6 +100,7 @@
                             const TcpSocketState::TcpCongState_t newState) override;
     void CwndEvent(Ptr<TcpSocketState> tcb, const TcpSocketState::TcpCAEvent_t event) override;
     uint32_t GetSsThresh(Ptr<const TcpSocketState> tcb, uint32_t bytesInFlight) override;
+    void SetRateOps(Ptr<TcpRateOps> rateOps) override;
     Ptr<TcpCongestionOps> Fork() override;
 
   public:
@@ -375,9 +376,8 @@
     Time m_minRttStamp; //!< The wall clock time at which the current BBR.RTProp sample was obtained
     bool m_isInitialized{false}; //!< Set to true after first time initialization variables
     Ptr<UniformRandomVariable> m_uv{nullptr}; //!< Uniform Random Variable
-    uint64_t m_delivered{0}; //!< The total amount of data in bytes delivered so far
-    uint32_t m_appLimited{
-        0}; //!< The index of the last transmitted packet marked as application-limited
+    uint64_t m_delivered{0};              //!< The total amount of data in bytes delivered so far
+    Ptr<TcpRateOps> m_rateOps;            //!< Rate operations
     uint32_t m_extraAckedGain{1};         //!< Gain factor for adding extra ack to cwnd
     uint32_t m_extraAcked[2]{0, 0};       //!< Maximum excess data acked in epoch
     uint32_t m_extraAckedWinRtt{0};       //!< Age of extra acked in rtt
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/internet/model/tcp-congestion-ops.h ns-3.45/src/internet/model/tcp-congestion-ops.h
--- ns-3.44/src/internet/model/tcp-congestion-ops.h	2025-03-09 16:55:49.407371300 -0700
+++ ns-3.45/src/internet/model/tcp-congestion-ops.h	2025-06-01 20:34:45.328701300 -0700
@@ -73,6 +73,15 @@
     }
 
     /**
+     * @brief Set rate operation required by the congestion control algorithm
+     *
+     * @param rateOps a pointer to the rate operation object used to manage rate control
+     */
+    virtual void SetRateOps(Ptr<TcpRateOps> rateOps [[maybe_unused]])
+    {
+    }
+
+    /**
      * @brief Get the slow start threshold after a loss event
      *
      * Is guaranteed that the congestion control state (\p TcpAckState_t) is
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/internet/model/tcp-option.cc ns-3.45/src/internet/model/tcp-option.cc
--- ns-3.44/src/internet/model/tcp-option.cc	2025-03-09 16:55:49.407371300 -0700
+++ ns-3.45/src/internet/model/tcp-option.cc	2025-06-01 20:34:45.329701200 -0700
@@ -41,12 +41,6 @@
     return tid;
 }
 
-TypeId
-TcpOption::GetInstanceTypeId() const
-{
-    return GetTypeId();
-}
-
 Ptr<TcpOption>
 TcpOption::CreateOption(uint8_t kind)
 {
@@ -122,12 +116,6 @@
     return tid;
 }
 
-TypeId
-TcpOptionUnknown::GetInstanceTypeId() const
-{
-    return GetTypeId();
-}
-
 void
 TcpOptionUnknown::Print(std::ostream& os) const
 {
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/internet/model/tcp-option.h ns-3.45/src/internet/model/tcp-option.h
--- ns-3.44/src/internet/model/tcp-option.h	2025-03-09 16:55:49.407371300 -0700
+++ ns-3.45/src/internet/model/tcp-option.h	2025-06-01 20:34:45.329701200 -0700
@@ -35,8 +35,6 @@
      */
     static TypeId GetTypeId();
 
-    TypeId GetInstanceTypeId() const override;
-
     /**
      * The option Kind, as defined in the respective RFCs.
      */
@@ -120,7 +118,6 @@
      * @return the object TypeId
      */
     static TypeId GetTypeId();
-    TypeId GetInstanceTypeId() const override;
 
     void Print(std::ostream& os) const override;
     void Serialize(Buffer::Iterator start) const override;
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/internet/model/tcp-option-rfc793.cc ns-3.45/src/internet/model/tcp-option-rfc793.cc
--- ns-3.44/src/internet/model/tcp-option-rfc793.cc	2025-03-09 16:55:49.407371300 -0700
+++ ns-3.45/src/internet/model/tcp-option-rfc793.cc	2025-06-01 20:34:45.329701200 -0700
@@ -38,12 +38,6 @@
     return tid;
 }
 
-TypeId
-TcpOptionEnd::GetInstanceTypeId() const
-{
-    return GetTypeId();
-}
-
 void
 TcpOptionEnd::Print(std::ostream& os) const
 {
@@ -108,12 +102,6 @@
     return tid;
 }
 
-TypeId
-TcpOptionNOP::GetInstanceTypeId() const
-{
-    return GetTypeId();
-}
-
 void
 TcpOptionNOP::Print(std::ostream& os) const
 {
@@ -178,12 +166,6 @@
     return tid;
 }
 
-TypeId
-TcpOptionMSS::GetInstanceTypeId() const
-{
-    return GetTypeId();
-}
-
 void
 TcpOptionMSS::Print(std::ostream& os) const
 {
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/internet/model/tcp-option-rfc793.h ns-3.45/src/internet/model/tcp-option-rfc793.h
--- ns-3.44/src/internet/model/tcp-option-rfc793.h	2025-03-09 16:55:49.407371300 -0700
+++ ns-3.45/src/internet/model/tcp-option-rfc793.h	2025-06-01 20:34:45.329701200 -0700
@@ -29,7 +29,6 @@
      * @return the object TypeId
      */
     static TypeId GetTypeId();
-    TypeId GetInstanceTypeId() const override;
 
     void Print(std::ostream& os) const override;
     void Serialize(Buffer::Iterator start) const override;
@@ -53,7 +52,6 @@
      * @return the object TypeId
      */
     static TypeId GetTypeId();
-    TypeId GetInstanceTypeId() const override;
 
     void Print(std::ostream& os) const override;
     void Serialize(Buffer::Iterator start) const override;
@@ -77,7 +75,6 @@
      * @return the object TypeId
      */
     static TypeId GetTypeId();
-    TypeId GetInstanceTypeId() const override;
 
     void Print(std::ostream& os) const override;
     void Serialize(Buffer::Iterator start) const override;
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/internet/model/tcp-option-sack.cc ns-3.45/src/internet/model/tcp-option-sack.cc
--- ns-3.44/src/internet/model/tcp-option-sack.cc	2025-03-09 16:55:49.407371300 -0700
+++ ns-3.45/src/internet/model/tcp-option-sack.cc	2025-06-01 20:34:45.329701200 -0700
@@ -41,12 +41,6 @@
     return tid;
 }
 
-TypeId
-TcpOptionSack::GetInstanceTypeId() const
-{
-    return GetTypeId();
-}
-
 void
 TcpOptionSack::Print(std::ostream& os) const
 {
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/internet/model/tcp-option-sack.h ns-3.45/src/internet/model/tcp-option-sack.h
--- ns-3.44/src/internet/model/tcp-option-sack.h	2025-03-09 16:55:49.407371300 -0700
+++ ns-3.45/src/internet/model/tcp-option-sack.h	2025-06-01 20:34:45.329701200 -0700
@@ -44,7 +44,6 @@
      * @return the object TypeId
      */
     static TypeId GetTypeId();
-    TypeId GetInstanceTypeId() const override;
 
     typedef std::pair<SequenceNumber32, SequenceNumber32> SackBlock; //!< SACK block definition
     typedef std::list<SackBlock> SackList;                           //!< SACK list definition
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/internet/model/tcp-option-sack-permitted.cc ns-3.45/src/internet/model/tcp-option-sack-permitted.cc
--- ns-3.44/src/internet/model/tcp-option-sack-permitted.cc	2025-03-09 16:55:49.407371300 -0700
+++ ns-3.45/src/internet/model/tcp-option-sack-permitted.cc	2025-06-01 20:34:45.329701200 -0700
@@ -40,12 +40,6 @@
     return tid;
 }
 
-TypeId
-TcpOptionSackPermitted::GetInstanceTypeId() const
-{
-    return GetTypeId();
-}
-
 void
 TcpOptionSackPermitted::Print(std::ostream& os) const
 {
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/internet/model/tcp-option-sack-permitted.h ns-3.45/src/internet/model/tcp-option-sack-permitted.h
--- ns-3.44/src/internet/model/tcp-option-sack-permitted.h	2025-03-09 16:55:49.407371300 -0700
+++ ns-3.45/src/internet/model/tcp-option-sack-permitted.h	2025-06-01 20:34:45.329701200 -0700
@@ -36,7 +36,6 @@
      * @return the object TypeId
      */
     static TypeId GetTypeId();
-    TypeId GetInstanceTypeId() const override;
 
     TcpOptionSackPermitted();
     ~TcpOptionSackPermitted() override;
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/internet/model/tcp-option-ts.cc ns-3.45/src/internet/model/tcp-option-ts.cc
--- ns-3.44/src/internet/model/tcp-option-ts.cc	2025-03-09 16:55:49.407371300 -0700
+++ ns-3.45/src/internet/model/tcp-option-ts.cc	2025-06-01 20:34:45.329701200 -0700
@@ -38,12 +38,6 @@
     return tid;
 }
 
-TypeId
-TcpOptionTS::GetInstanceTypeId() const
-{
-    return GetTypeId();
-}
-
 void
 TcpOptionTS::Print(std::ostream& os) const
 {
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/internet/model/tcp-option-ts.h ns-3.45/src/internet/model/tcp-option-ts.h
--- ns-3.44/src/internet/model/tcp-option-ts.h	2025-03-09 16:55:49.407371300 -0700
+++ ns-3.45/src/internet/model/tcp-option-ts.h	2025-06-01 20:34:45.329701200 -0700
@@ -33,7 +33,6 @@
      * @return the object TypeId
      */
     static TypeId GetTypeId();
-    TypeId GetInstanceTypeId() const override;
 
     void Print(std::ostream& os) const override;
     void Serialize(Buffer::Iterator start) const override;
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/internet/model/tcp-option-winscale.cc ns-3.45/src/internet/model/tcp-option-winscale.cc
--- ns-3.44/src/internet/model/tcp-option-winscale.cc	2025-03-09 16:55:49.407371300 -0700
+++ ns-3.45/src/internet/model/tcp-option-winscale.cc	2025-06-01 20:34:45.329701200 -0700
@@ -38,12 +38,6 @@
     return tid;
 }
 
-TypeId
-TcpOptionWinScale::GetInstanceTypeId() const
-{
-    return GetTypeId();
-}
-
 void
 TcpOptionWinScale::Print(std::ostream& os) const
 {
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/internet/model/tcp-option-winscale.h ns-3.45/src/internet/model/tcp-option-winscale.h
--- ns-3.44/src/internet/model/tcp-option-winscale.h	2025-03-09 16:55:49.407371300 -0700
+++ ns-3.45/src/internet/model/tcp-option-winscale.h	2025-06-01 20:34:45.329701200 -0700
@@ -44,7 +44,6 @@
      * @return the object TypeId
      */
     static TypeId GetTypeId();
-    TypeId GetInstanceTypeId() const override;
 
     TcpOptionWinScale();
     ~TcpOptionWinScale() override;
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/internet/model/tcp-rate-ops.cc ns-3.45/src/internet/model/tcp-rate-ops.cc
--- ns-3.44/src/internet/model/tcp-rate-ops.cc	2025-03-09 16:55:49.407371300 -0700
+++ ns-3.45/src/internet/model/tcp-rate-ops.cc	2025-06-01 20:34:45.330701400 -0700
@@ -144,8 +144,7 @@
         && in_flight < cWnd                   // We are not limited by CWND.
         && lostOut <= retransOut)             // All lost packets have been retransmitted.
     {
-        m_rate.m_appLimited = std::max<uint32_t>(m_rate.m_delivered + in_flight, 1);
-        m_rateTrace(m_rate);
+        SetAppLimited(in_flight);
     }
 
     // m_appLimited will be reset once in GenerateSample, if it has to be.
@@ -156,6 +155,13 @@
 }
 
 void
+TcpRateLinux::SetAppLimited(uint32_t in_flight)
+{
+    m_rate.m_appLimited = std::max<uint32_t>(m_rate.m_delivered + in_flight, 1);
+    m_rateTrace(m_rate);
+}
+
+void
 TcpRateLinux::SkbDelivered(TcpTxItem* skb)
 {
     NS_LOG_FUNCTION(this << skb);
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/internet/model/tcp-rate-ops.h ns-3.45/src/internet/model/tcp-rate-ops.h
--- ns-3.44/src/internet/model/tcp-rate-ops.h	2025-03-09 16:55:49.407371300 -0700
+++ ns-3.45/src/internet/model/tcp-rate-ops.h	2025-06-01 20:34:45.330701400 -0700
@@ -113,6 +113,11 @@
      *
      */
     virtual const TcpRateConnection& GetConnectionRate() = 0;
+    /**
+     * @brief Updates the app-limited state based on in-flight data.
+     * @param in_flight In Flight size (in bytes)
+     */
+    virtual void SetAppLimited(uint32_t in_flight) = 0;
 
     /**
      * @brief Rate Sample structure
@@ -213,6 +218,12 @@
     }
 
     /**
+     * @brief Updates the app-limited state based on in-flight data.
+     * @param in_flight In Flight size (in bytes)
+     */
+    void SetAppLimited(uint32_t in_flight) override;
+
+    /**
      * TracedCallback signature for tcp rate update events.
      *
      * The callback will be fired each time the rate is updated.
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/internet/model/tcp-socket-base.cc ns-3.45/src/internet/model/tcp-socket-base.cc
--- ns-3.44/src/internet/model/tcp-socket-base.cc	2025-03-09 16:55:49.407371300 -0700
+++ ns-3.45/src/internet/model/tcp-socket-base.cc	2025-06-01 20:34:45.331701300 -0700
@@ -289,12 +289,6 @@
     return tid;
 }
 
-TypeId
-TcpSocketBase::GetInstanceTypeId() const
-{
-    return TcpSocketBase::GetTypeId();
-}
-
 TcpSocketBase::TcpSocketBase()
     : TcpSocket()
 {
@@ -435,10 +429,13 @@
     m_tcb->m_pacingRate = m_tcb->m_maxPacingRate;
     m_pacingTimer.SetFunction(&TcpSocketBase::NotifyPacingPerformed, this);
 
+    m_rateOps = CreateObject<TcpRateLinux>();
+
     if (sock.m_congestionControl)
     {
         m_congestionControl = sock.m_congestionControl->Fork();
         m_congestionControl->Init(m_tcb);
+        m_congestionControl->SetRateOps(m_rateOps);
     }
 
     if (sock.m_recoveryOps)
@@ -446,7 +443,6 @@
         m_recoveryOps = sock.m_recoveryOps->Fork();
     }
 
-    m_rateOps = CreateObject<TcpRateLinux>();
     if (m_tcb->m_sendEmptyPacketCallback.IsNull())
     {
         m_tcb->m_sendEmptyPacketCallback = MakeCallback(&TcpSocketBase::SendEmptyPacket, this);
@@ -2255,9 +2251,9 @@
 
                 m_tcb->m_cWndInfl = m_tcb->m_cWnd;
 
-                NS_LOG_LOGIC("Congestion control called: "
-                             << " cWnd: " << m_tcb->m_cWnd << " ssTh: " << m_tcb->m_ssThresh
-                             << " segsAcked: " << segsAcked);
+                NS_LOG_LOGIC("Congestion control called: cWnd: " << m_tcb->m_cWnd
+                                                                 << " ssTh: " << m_tcb->m_ssThresh
+                                                                 << " segsAcked: " << segsAcked);
 
                 NewAck(ackNumber, true);
             }
@@ -4663,6 +4659,7 @@
     NS_LOG_FUNCTION(this << algo);
     m_congestionControl = algo;
     m_congestionControl->Init(m_tcb);
+    m_congestionControl->SetRateOps(m_rateOps);
 }
 
 void
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/internet/model/tcp-socket-base.h ns-3.45/src/internet/model/tcp-socket-base.h
--- ns-3.44/src/internet/model/tcp-socket-base.h	2025-03-09 16:55:49.411371200 -0700
+++ ns-3.45/src/internet/model/tcp-socket-base.h	2025-06-01 20:34:45.331701300 -0700
@@ -216,12 +216,6 @@
     static TypeId GetTypeId();
 
     /**
-     * @brief Get the instance TypeId
-     * @return the instance TypeId
-     */
-    TypeId GetInstanceTypeId() const override;
-
-    /**
      * @brief TcpGeneralTest friend class (for tests).
      * @relates TcpGeneralTest
      */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/internet/model/udp-socket-impl.h ns-3.45/src/internet/model/udp-socket-impl.h
--- ns-3.44/src/internet/model/udp-socket-impl.h	2025-03-09 16:55:49.411371200 -0700
+++ ns-3.45/src/internet/model/udp-socket-impl.h	2025-06-01 20:34:45.332701200 -0700
@@ -137,7 +137,7 @@
     int FinishBind();
 
     /**
-     * @brief Called by the L3 protocol when it received a packet to pass on to TCP.
+     * @brief Called by the L3 protocol when it received a packet to pass on to UDP.
      *
      * @param packet the incoming packet
      * @param header the packet's IPv4 header
@@ -150,7 +150,7 @@
                    Ptr<Ipv4Interface> incomingInterface);
 
     /**
-     * @brief Called by the L3 protocol when it received a packet to pass on to TCP.
+     * @brief Called by the L3 protocol when it received a packet to pass on to UDP.
      *
      * @param packet the incoming packet
      * @param header the packet's IPv6 header
@@ -208,7 +208,7 @@
     int DoSendTo(Ptr<Packet> p, Ipv6Address daddr, uint16_t dport);
 
     /**
-     * @brief Called by the L3 protocol when it received an ICMP packet to pass on to TCP.
+     * @brief Called by the L3 protocol when it received an ICMP packet to pass on to UDP.
      *
      * @param icmpSource the ICMP source address
      * @param icmpTtl the ICMP Time to Live
@@ -223,7 +223,7 @@
                      uint32_t icmpInfo);
 
     /**
-     * @brief Called by the L3 protocol when it received an ICMPv6 packet to pass on to TCP.
+     * @brief Called by the L3 protocol when it received an ICMPv6 packet to pass on to UDP.
      *
      * @param icmpSource the ICMP source address
      * @param icmpTtl the ICMP Time to Live
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/internet/test/ipv4-global-routing-test-suite.cc ns-3.45/src/internet/test/ipv4-global-routing-test-suite.cc
--- ns-3.44/src/internet/test/ipv4-global-routing-test-suite.cc	2025-03-09 16:55:49.411371200 -0700
+++ ns-3.45/src/internet/test/ipv4-global-routing-test-suite.cc	2025-06-01 20:34:45.333701400 -0700
@@ -875,8 +875,8 @@
     : TestCase("Dynamic global routing example"),
       m_count(0)
 {
-    m_firstInterface.resize(16);
-    m_secondInterface.resize(16);
+    m_firstInterface.resize(16, 0);
+    m_secondInterface.resize(16, 0);
     m_dataRate = DataRate("2kbps");
     m_packetSize = 50;
 }
@@ -988,11 +988,11 @@
 
     devHelper.SetNetDevicePointToPointMode(true);
     NetDeviceContainer d0d2 = devHelper.Install(n0n2);
-    devHelper.SetNetDevicePointToPointMode(false);
-
     NetDeviceContainer d1d6 = devHelper.Install(n1n6);
     NetDeviceContainer d1d2 = devHelper.Install(n1n2);
     NetDeviceContainer d5d6 = devHelper.Install(n5n6);
+
+    devHelper.SetNetDevicePointToPointMode(false);
     NetDeviceContainer d2345 = devHelper.Install(n2345);
 
     // Later, we add IP addresses.
@@ -1071,69 +1071,45 @@
     Simulator::Run();
 
     NS_TEST_ASSERT_MSG_EQ(m_count, 70, "Dynamic global routing did not deliver all packets");
-    // Test that for node n6, the interface facing n5 receives packets at
+    // Test that for node n6, the interface facing n1 receives packets at
     // times (1-2), (4-6), (8-10), (11-12), (14-16) and the interface
-    // facing n1 receives packets at times (2-4), (6-8), (12-13)
-    NS_TEST_ASSERT_MSG_EQ(m_firstInterface[1],
-                          5,
-                          "Dynamic global routing did not deliver all packets "
-                              << int(m_firstInterface[1]));
-    NS_TEST_ASSERT_MSG_EQ(m_secondInterface[2],
-                          5,
-                          "Dynamic global routing did not deliver all packets "
-                              << int(m_secondInterface[2]));
-    NS_TEST_ASSERT_MSG_EQ(m_secondInterface[3],
-                          5,
-                          "Dynamic global routing did not deliver all packets "
-                              << int(m_secondInterface[3]));
-    NS_TEST_ASSERT_MSG_EQ(m_firstInterface[4],
-                          5,
-                          "Dynamic global routing did not deliver all packets "
-                              << int(m_firstInterface[4]));
-    NS_TEST_ASSERT_MSG_EQ(m_firstInterface[5],
-                          5,
-                          "Dynamic global routing did not deliver all packets "
-                              << int(m_firstInterface[5]));
-    NS_TEST_ASSERT_MSG_EQ(m_secondInterface[6],
-                          5,
-                          "Dynamic global routing did not deliver all packets "
-                              << int(m_secondInterface[6]));
-    NS_TEST_ASSERT_MSG_EQ(m_secondInterface[7],
-                          5,
-                          "Dynamic global routing did not deliver all packets "
-                              << int(m_secondInterface[7]));
-    NS_TEST_ASSERT_MSG_EQ(m_firstInterface[8],
-                          5,
-                          "Dynamic global routing did not deliver all packets "
-                              << int(m_firstInterface[8]));
-    NS_TEST_ASSERT_MSG_EQ(m_firstInterface[9],
-                          5,
-                          "Dynamic global routing did not deliver all packets "
-                              << int(m_firstInterface[9]));
-    NS_TEST_ASSERT_MSG_EQ(m_firstInterface[10],
-                          0,
-                          "Dynamic global routing did not deliver all packets "
-                              << int(m_firstInterface[10]));
-    NS_TEST_ASSERT_MSG_EQ(m_firstInterface[11],
-                          5,
-                          "Dynamic global routing did not deliver all packets "
-                              << int(m_firstInterface[11]));
-    NS_TEST_ASSERT_MSG_EQ(m_secondInterface[12],
-                          5,
-                          "Dynamic global routing did not deliver all packets "
-                              << int(m_secondInterface[12]));
-    NS_TEST_ASSERT_MSG_EQ(m_secondInterface[13],
-                          5,
-                          "Dynamic global routing did not deliver all packets "
-                              << int(m_secondInterface[13]));
-    NS_TEST_ASSERT_MSG_EQ(m_firstInterface[14],
-                          5,
-                          "Dynamic global routing did not deliver all packets "
-                              << int(m_firstInterface[14]));
-    NS_TEST_ASSERT_MSG_EQ(m_firstInterface[15],
-                          5,
-                          "Dynamic global routing did not deliver all packets "
-                              << int(m_firstInterface[15]));
+    // facing n5 receives packets at times (2-4), (6-8), (12-13)
+
+    // Note: there are two sending sockets, both on n1.
+    // The first socket sends packets at time (1-10), the second at time (11, 16).
+    // The first socket sends packets to n6, targeting the address facing n5.
+    // The second socket sends packets to n6, targeting the address facing n1.
+    // This actually doesn't matter, as n6 will accept packets sent to the "wrong" address.
+    //
+    // The shortest path netween n1 and n6 is the direct one, but the topology changes during the
+    // simulation:
+    // - (2-4): removal from n1 of the interface toward n6
+    // - (6-8): removal from n6 of the interface toward n1
+    // - (12-14): removal from n1 of the interface toward n6
+    // When the link is broken, packets are rerouted though the longest (and only) path, reaching
+    // n6 though n5.
+
+    std::vector<uint8_t> firstInterfaceTest{0, 5, 0, 0, 5, 5, 0, 0, 5, 5, 0, 5, 0, 0, 5, 5};
+    std::vector<uint8_t> secondInterfaceTest{0, 0, 5, 5, 0, 0, 5, 5, 0, 0, 0, 0, 5, 5, 0, 0};
+
+    for (uint32_t index = 0; index < firstInterfaceTest.size(); index++)
+    {
+        NS_TEST_ASSERT_MSG_EQ(firstInterfaceTest[index],
+                              m_firstInterface[index],
+                              "Dynamic global routing did deliver the wrong number of packets "
+                              "to the first interface at time "
+                                  << index);
+    }
+
+    for (uint32_t index = 0; index < secondInterfaceTest.size(); index++)
+    {
+        NS_TEST_ASSERT_MSG_EQ(secondInterfaceTest[index],
+                              m_secondInterface[index],
+                              "Dynamic global routing did deliver the wrong number of packets "
+                              "to the second interface at time "
+                                  << index);
+    }
+
     Simulator::Destroy();
 }
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/internet/test/ipv4-test.cc ns-3.45/src/internet/test/ipv4-test.cc
--- ns-3.44/src/internet/test/ipv4-test.cc	2025-03-09 16:55:49.411371200 -0700
+++ ns-3.45/src/internet/test/ipv4-test.cc	2025-06-01 20:34:45.333701400 -0700
@@ -8,12 +8,13 @@
  */
 
 #include "ns3/arp-l3-protocol.h"
+#include "ns3/boolean.h"
 #include "ns3/inet-socket-address.h"
 #include "ns3/ipv4-interface.h"
 #include "ns3/ipv4-l3-protocol.h"
 #include "ns3/log.h"
-#include "ns3/loopback-net-device.h"
 #include "ns3/node.h"
+#include "ns3/simple-net-device.h"
 #include "ns3/simulator.h"
 #include "ns3/test.h"
 
@@ -47,12 +48,19 @@
     Ptr<Node> node = CreateObject<Node>();
     Ptr<Ipv4L3Protocol> ipv4 = CreateObject<Ipv4L3Protocol>();
     Ptr<Ipv4Interface> interface = CreateObject<Ipv4Interface>();
-    Ptr<LoopbackNetDevice> device = CreateObject<LoopbackNetDevice>();
+    Ptr<SimpleNetDevice> device = CreateObject<SimpleNetDevice>();
+
+    // The following allows the interface to run without ARP
+    device->SetAttribute("PointToPointMode", BooleanValue(true));
+
     node->AddDevice(device);
+    node->AggregateObject(ipv4);
     interface->SetDevice(device);
     interface->SetNode(node);
+
+    // Interface 0 is the Loopback
     uint32_t index = ipv4->AddIpv4Interface(interface);
-    NS_TEST_ASSERT_MSG_EQ(index, 0, "No interface should be found??");
+    NS_TEST_ASSERT_MSG_EQ(index, 1, "The index is not 1??");
     interface->SetUp();
     Ipv4InterfaceAddress ifaceAddr1 = Ipv4InterfaceAddress("192.168.0.1", "255.255.255.0");
     interface->AddAddress(ifaceAddr1);
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/internet/test/ipv6-test.cc ns-3.45/src/internet/test/ipv6-test.cc
--- ns-3.44/src/internet/test/ipv6-test.cc	2025-03-09 16:55:49.411371200 -0700
+++ ns-3.45/src/internet/test/ipv6-test.cc	2025-06-01 20:34:45.334701300 -0700
@@ -164,7 +164,7 @@
     NS_TEST_ASSERT_MSG_EQ(num, 1, "Number of addresses should be 1??");
 
     Simulator::Destroy();
-} // end DoRun
+}
 
 /**
  * @ingroup internet-test
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/internet-apps/CMakeLists.txt ns-3.45/src/internet-apps/CMakeLists.txt
--- ns-3.44/src/internet-apps/CMakeLists.txt	2025-03-09 16:55:49.379371200 -0700
+++ ns-3.45/src/internet-apps/CMakeLists.txt	2025-06-01 20:34:45.313701200 -0700
@@ -2,12 +2,18 @@
   LIBNAME internet-apps
   SOURCE_FILES
     helper/dhcp-helper.cc
+    helper/dhcp6-helper.cc
     helper/ping-helper.cc
     helper/radvd-helper.cc
     helper/v4traceroute-helper.cc
     model/dhcp-client.cc
     model/dhcp-header.cc
     model/dhcp-server.cc
+    model/dhcp6-client.cc
+    model/dhcp6-duid.cc
+    model/dhcp6-header.cc
+    model/dhcp6-options.cc
+    model/dhcp6-server.cc
     model/ping.cc
     model/radvd-interface.cc
     model/radvd-prefix.cc
@@ -15,12 +21,18 @@
     model/v4traceroute.cc
   HEADER_FILES
     helper/dhcp-helper.h
+    helper/dhcp6-helper.h
     helper/ping-helper.h
     helper/radvd-helper.h
     helper/v4traceroute-helper.h
     model/dhcp-client.h
     model/dhcp-header.h
     model/dhcp-server.h
+    model/dhcp6-client.h
+    model/dhcp6-duid.h
+    model/dhcp6-header.h
+    model/dhcp6-options.h
+    model/dhcp6-server.h
     model/ping.h
     model/radvd-interface.h
     model/radvd-prefix.h
@@ -29,6 +41,7 @@
   LIBRARIES_TO_LINK ${libinternet}
   TEST_SOURCES
     test/dhcp-test.cc
+    test/dhcp6-test.cc
     test/ipv6-radvd-test.cc
     test/ping-test.cc
 )
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/internet-apps/doc/internet-apps.rst ns-3.45/src/internet-apps/doc/internet-apps.rst
--- ns-3.44/src/internet-apps/doc/internet-apps.rst	2025-03-09 16:55:49.379371200 -0700
+++ ns-3.45/src/internet-apps/doc/internet-apps.rst	2025-06-01 20:34:45.313701200 -0700
@@ -329,3 +329,191 @@
 ************
 
 Documentation is missing for this application.
+
+DHCPv6
+******
+
+The |ns3| implementation of Dynamic Host Configuration Protocol for IPv6 (DHCPv6)
+follows the specifications of :rfc:`8415`.
+
+Model Description
+=================
+
+The aim of the DHCPv6 application is to provide a method for dynamically assigning IPv6 addresses to nodes.
+This application functions similarly to the ``dhcpd`` daemon in Linux, although it supports fewer options.
+The DHCPv6 client installed on a node sends Solicit messages to a server configured on the link,
+which then responds with an IPv6 address offer.
+
+The source code for DHCPv6 is located in ``src/internet-apps/model``.
+
+There are two major operational models for DHCPv6: stateful and stateless.
+Stateless DHCP is used when the client only needs to request configuration parameters from the server.
+
+Typically, the DHCPv6 server is used to assign both addresses and other options like DNS information.
+The server maintains information about the Identity Associations (IAs), which are collections of leases assigned to a client.
+
+There are three types of IAs: IA_NA (non-temporary addresses), IA_TA (temporary addresses), and IA_PD (prefix delegation).
+Temporary addresses were introduced in RFC 4941 to address privacy concerns. In DHCPv6, the IA_TA (Identity Association for Temporary Addresses)
+is used for addresses that are only used for a short time, and their lifetimes are generally not extended. Non-temporary addresses, on the other hand,
+are used for relatively longer durations and are usually renewed by the clients. Note that non-temporary addresses are not permanent leases - the term is
+merely used to differentiate between the IA_TA and IA_NA types.
+
+Currently, the application uses only IA_NA options to lease addresses to clients.
+The state of the lease changes over time, which is why this is known as stateful DHCPv6.
+
+The DHCPv6 client application is installed on each NetDevice (interface) of the client node.
+Therefore, if there are two NetDevices installed on a single node, two client applications must be installed.
+The DHCPv6 server application is installed on a single server node.
+However, the user can specify multiple interfaces for the server to listen on.
+
+Notes:
+
+* Stateless DHCPv6 has not been implemented, as it is used to request DNS configuration information that is not currently used in |ns3|.
+* All client and server nodes must be on the same link. The application does not support DHCPv6 relays and hence cannot work when the client and server are in entirely different subnets.
+
+Stateful DHCPv6
+###############
+
+The server listens on port 547 for any incoming messages on the link.
+Upon receiving a **Solicit** message from a client, the server sends an **Advertise** message with the available address pool.
+The server is designed to advertise one available address from each address pool that is configured on it.
+When the client sends a **Request** message, the server updates lease bindings with the new expiry time, and sends a **Reply** message.
+
+The client attempts to accept all addresses present in the server's **Reply**.
+However, before using the offered address, the client checks whether any other node on the link is using the same address (Duplicate Address Detection).
+If the address is already in use, the client sends a **Decline** message to the server, which updates the lease bindings accordingly.
+
+At the end of the preferred lifetime, the client sends a **Renew** message to the server.
+The server should update the lease bindings with the new expiry time, and send a **Reply** with the corresponding status code.
+In case the client does not receive a **Reply** from the server, it sends a **Rebind** message at the end of the valid lifetime.
+The server is expected to update the lease bindings and send a **Reply** message back to the client.
+
+The order of the message exchange between the client and the server is as follows:
+
+.. figure:: figures/dhcpv6-message-exchange.*
+
+The formats of the messages between a client and server are as follows:
+
+.. figure:: figures/stateful-dhcpv6-format.*
+
+Identifiers
+###########
+
+Each client and server has a unique identifier (DHCP Unique Identifier), which is used to identify the client and server in the message exchange.
+There are four types of DUIDs that can be used in DHCPv6:
+
+1. DUID-LLT (Link-layer Address plus Time): The DUID-LLT consists of a 32-bit timestamp and a variable-length link layer address. Not supported in this implementation.
+2. Vendor-assigned unique ID based on Enterprise Number: This consists of the vendor's enterprise number and an identifier whose source is defined by the vendor. Not supported in this implementation.
+3. **DUID-LL (Link-layer address)**: DUID-LL consists of a variable-length link-layer address as the identifier. Supported in this implementation.
+4. UUID (Universally unique identifier): This should be an identifier that is persistent across system restarts and reconfigurations. Not supported in this implementation.
+
+Usage
+=====
+
+The main way for |ns3| users to use the DHCPv6 application is through the helper
+API and the publicly visible attributes of the client and server applications.
+
+To use the DHCPv6 application, the user must install the client application on the node by passing a ``Ptr<Node>`` to the ``InstallDhcp6Client`` helper.
+
+The server application is installed on the node of interest.
+Users select the interfaces on which the server should listen for incoming messages and add them to a ``NetDeviceContainer``. This is then passed to the ``InstallDhcp6Server`` helper method.
+
+Helpers
+#######
+
+The ``Dhcp6Helper`` supports the typical ``Install`` usage pattern in |ns3|. It
+can be used to easily install DHCPv6 server and client applications on a set of
+interfaces.
+
+.. sourcecode:: cpp
+
+  NetDeviceContainer serverNetDevices;
+  serverNetDevices.Add(netdevice);
+  ApplicationContainer dhcpServerApp = dhcp6Helper.InstallDhcp6Server(serverNetDevices);
+
+  ApplicationContainer dhcpClientApp = dhcp6Helper.InstallDhcp6Client(clientNode);
+
+Address pools can be configured on the DHCPv6 server using the following API:
+
+.. sourcecode:: cpp
+
+  Ptr<Dhcp6Server> server = DynamicCast<Dhcp6Server>(dhcpServerApp.Get(0));
+  server->AddSubnet(Ipv6Address("2001:db8::"), Ipv6Prefix(64), Ipv6Address("2001:db8::1"), Ipv6Address("2001:db8::ff"));
+
+In the line above, the ``AddSubnet()`` method has the following parameters:
+
+1. ``Ipv6Address("2001:db8::")`` - The address pool that is managed by the server.
+2. ``Ipv6Prefix(64)`` - The prefix of the address pool
+3. ``Ipv6Address("2001:db8::1")`` - The minimum address that can be assigned to a client.
+4. ``Ipv6Address("2001:db8::ff")`` - The maximum address that can be assigned to a client.
+
+Essentially, parameters 1 and 2 define the subnet(s) managed by the server, while parameters
+3 and 4 define the range of addresses that can be assigned.
+If this method is not called, the server will not have any subnet configured and will not be able to assign addresses to clients.
+While it does not throw an error, a user who does not configure any subnets on the server will not see any addresses leased to the client.
+
+Attributes
+##########
+
+The following attributes can be configured on the client:
+
+* ``Transactions``: A random variable used to set the transaction numbers.
+* ``SolicitJitter``: The jitter in milliseconds that a node waits before sending a Solicit to the server.
+* ``IaidValue``: The identifier of a new Identity Association that is created by a client.
+
+The following values can be initially set on the client interface before stateful DHCPv6 begins. However, they are overridden with values received from the server during the message exchange:
+* ``RenewTime``: The time after which client should renew its lease.
+* ``RebindTime``: The time after which client should rebind its leased addresses.
+* ``PreferredLifetime``: The preferred lifetime of the leased address.
+* ``ValidLifetime``: Time after which client should release the address.
+
+The following attributes can be configured on the server:
+* ``RenewTime``: The time after which client should renew its lease.
+* ``RebindTime``: The time after which client should rebind its leased addresses.
+* ``PreferredLifetime``: The preferred lifetime of the leased address.
+* ``ValidLifetime``: The time after which client should release the address.
+
+Example
+#######
+
+The following example has been written in ``src/internet-apps/examples/``:
+
+* ``dhcp6-example.cc``: Demonstrates the working of stateful DHCPv6 with a single server and 2 client nodes.
+
+Test
+====
+
+The following example has been written in ``src/internet-apps/test/``:
+
+* ``dhcp6-test.cc``: Tests the working of DHCPv6 with a single server and 2 client nodes that have 1 CSMA interface and 1 Wifi interface each.
+
+Scope and Limitations
+=====================
+* Limited options have been included in the DHCPv6 implementation, namely:
+
+  * Server Identifier
+  * Client Identifier
+  * Identity Association for Non-temporary Addresses (IA_NA)
+  * Option Request (for Solicit MAX_RT)
+  * Status Code
+
+* The implementation does not support the use of a DHCP Relay agent. Hence, all the server and client nodes should be on the same link.
+* The application does not yet support prefix delegation. Each client currently receives only one IPv6 address.
+* If a DUID-LLT (Link-Layer Address plus Time) is used as the client identifier, there is a possibility that the timestamps of two clients may be the same. This could lead to a conflict in the lease bindings on the server if the link-layer addresses are not unique.
+* If a node (such as a Wifi device) leaves the network and rejoins at a later time, the Solicit messages are not automatically restarted.
+* The client application does not retransmit lost messages. Its use in wireless scenarios might lead to inconsistencies.
+
+Future Work
+===========
+* The Rapid Commit option may be implemented to allow a Solicit / Reply message exchange between the client and server.
+* Addition of DHCPv6 relays to allow the client and server to be in different subnets.
+* Implementation of stateless DHCPv6 to allow the client to request only configuration information from the server.
+* Implement the ability to configure DHCPv6 through a configuration file, similar to how it is done in Linux systems.
+* Allow users to manually set the DUIDs for the client(s) and server(s).
+* Implement support for host reservations, allowing specific IPv6 addresses to be assigned to particular clients based on their DUIDs or other identifying information.
+* Include the ``Preference Option`` in the Advertise message sent by the server. This option allows the client to identify and choose a single server based on the preference value, instead of obtaining leases from each server that responds to the Solicit message
+
+References
+==========
+* :rfc:`8415` - Dynamic Host Configuration Protocol for IPv6 (DHCPv6)
+* Infoblox Blog <https://blogs.infoblox.com/ipv6-coe/slaac-to-basics-part-2-of-2-configuring-slaac/ > to understand how SLAAC and DHCPv6 operate at the same time.
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/internet-apps/examples/CMakeLists.txt ns-3.45/src/internet-apps/examples/CMakeLists.txt
--- ns-3.44/src/internet-apps/examples/CMakeLists.txt	2025-03-09 16:55:49.379371200 -0700
+++ ns-3.45/src/internet-apps/examples/CMakeLists.txt	2025-06-01 20:34:45.313701200 -0700
@@ -10,6 +10,18 @@
 )
 
 build_lib_example(
+  NAME dhcp6-example
+  SOURCE_FILES dhcp6-example.cc
+  LIBRARIES_TO_LINK
+    ${libapplications}
+    ${libcsma}
+    ${libinternet}
+    ${libinternet-apps}
+    ${libpoint-to-point}
+    ${libwifi}
+)
+
+build_lib_example(
   NAME traceroute-example
   SOURCE_FILES traceroute-example.cc
   LIBRARIES_TO_LINK
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/internet-apps/examples/dhcp6-example.cc ns-3.45/src/internet-apps/examples/dhcp6-example.cc
--- ns-3.44/src/internet-apps/examples/dhcp6-example.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.45/src/internet-apps/examples/dhcp6-example.cc	2025-06-01 20:34:45.313701200 -0700
@@ -0,0 +1,215 @@
+/*
+ * Copyright (c) 2024 NITK Surathkal
+ *
+ * SPDX-License-Identifier: GPL-2.0-only
+ *
+ * Author: Kavya Bhat <kavyabhat@gmail.com>
+ *
+ */
+
+/*
+ * Network layout:
+ * The following devices have one CSMA interface each -
+ * S0 - DHCPv6 server
+ * N0, N1 - DHCPv6 clients
+ * R0 - router
+ *                ┌-------------------------------------------------┐
+ *                | DHCPv6 Clients                                  |
+ *                |                                                 |
+ *                |                                Static address   |
+ *                |                                2001:cafe::42:2  |
+ *                |   ┌──────┐       ┌──────┐        ┌──────┐       |
+ *                |   │  N0  │       │  N1  │        │  N2  │       |
+ *                |   └──────┘       └──────┘        └──────┘       |
+ *                |       │              │               │          |
+ *                └-------│--------------│---------------│----------┘
+ *  DHCPv6 Server         │              │               │
+ *        ┌──────┐        │              │               │      ┌──────┐
+ *        │  S0  │────────┴──────────────┴───────────────┴──────│  R0  │Router
+ *        └──────┘                                              └──────┘
+ * Notes:
+ * 1. The DHCPv6 server is not assigned any static address as it operates only
+ *    in the link-local domain.
+ * 2. N2 has a statically assigned address to demonstrate the operation of the
+ *    DHCPv6 Decline message.
+ * 3. The server is usually on the router in practice, but we demonstrate in
+ *    this example a standalone server.
+ * 4. Linux uses fairly large values for address lifetimes (in thousands of
+ *    seconds). In this example, we have set shorter lifetimes for the purpose
+ *    of observing the Renew messages within a shorter simulation run.
+ * 5. The nodes use two interfaces each for the purpose of demonstrating
+ *    DHCPv6 operation when multiple interfaces are present on the client or
+ *    server nodes.
+ *
+ * This example demonstrates how to set up a simple DHCPv6 server and two DHCPv6
+ * clients. The clients begin to request an address lease using a Solicit
+ * message only after receiving a Router Advertisement containing the 'M' bit
+ * from the router, R0.
+ *
+ * The server responds with an Advertise message with all available address
+ * offers, and the client sends a Request message to the server for these
+ * addresses. The server then sends a Reply message to the client, which
+ * performs Duplicate Address Detection to check if any other node on the link
+ * already uses this address.
+ * If the address is in use by any other node, the client sends a Decline
+ * message to the server. If the address is not in use, the client begins using
+ * this address.
+ * At the end of the address lease lifetime, the client sends a Renew message
+ * to the server, which renews the lease and allows the client to continue using
+ * the same address.
+ *
+ * The user may enable packet traces in this example to observe the following
+ * message exchanges:
+ * 1. Solicit - Advertise - Request - Reply
+ * 2. Solicit - Advertise - Request - Reply - Decline
+ * 3. Renew - Reply
+ *
+ */
+
+#include "ns3/applications-module.h"
+#include "ns3/core-module.h"
+#include "ns3/csma-module.h"
+#include "ns3/internet-apps-module.h"
+#include "ns3/internet-module.h"
+#include "ns3/mobility-module.h"
+#include "ns3/network-module.h"
+#include "ns3/point-to-point-module.h"
+#include "ns3/ssid.h"
+#include "ns3/wifi-helper.h"
+#include "ns3/yans-wifi-helper.h"
+
+using namespace ns3;
+
+NS_LOG_COMPONENT_DEFINE("Dhcp6Example");
+
+void
+SetInterfaceDown(Ptr<Node> node, uint32_t interface)
+{
+    node->GetObject<Ipv6>()->SetDown(interface);
+}
+
+void
+SetInterfaceUp(Ptr<Node> node, uint32_t interface)
+{
+    node->GetObject<Ipv6>()->SetUp(interface);
+}
+
+int
+main(int argc, char* argv[])
+{
+    CommandLine cmd(__FILE__);
+
+    bool verbose = false;
+    bool enablePcap = false;
+    cmd.AddValue("verbose", "Turn on the logs", verbose);
+    cmd.AddValue("enablePcap", "Enable/Disable pcap file generation", enablePcap);
+
+    cmd.Parse(argc, argv);
+    GlobalValue::Bind("ChecksumEnabled", BooleanValue(true));
+
+    if (verbose)
+    {
+        LogComponentEnable("Dhcp6Server", LOG_LEVEL_INFO);
+        LogComponentEnable("Dhcp6Client", LOG_LEVEL_INFO);
+    }
+
+    Time stopTime = Seconds(25.0);
+
+    NS_LOG_INFO("Create nodes.");
+    NodeContainer nonRouterNodes;
+    nonRouterNodes.Create(4);
+    Ptr<Node> router = CreateObject<Node>();
+    NodeContainer all(nonRouterNodes, router);
+
+    NS_LOG_INFO("Create channels.");
+    CsmaHelper csma;
+    csma.SetChannelAttribute("DataRate", StringValue("5Mbps"));
+    csma.SetChannelAttribute("Delay", StringValue("2ms"));
+    NetDeviceContainer devices = csma.Install(all); // all nodes
+
+    InternetStackHelper internetv6;
+    internetv6.Install(all);
+
+    NS_LOG_INFO("Create networks and assign IPv6 Addresses.");
+
+    Ipv6AddressHelper ipv6;
+    ipv6.SetBase(Ipv6Address("2001:cafe::"), Ipv6Prefix(64));
+    NetDeviceContainer nonRouterDevices;
+    nonRouterDevices.Add(devices.Get(0)); // The server node, S0.
+    nonRouterDevices.Add(devices.Get(1)); // The first client node, N0.
+    nonRouterDevices.Add(devices.Get(2)); // The second client node, N1.
+    nonRouterDevices.Add(devices.Get(3)); // The third client node, N2.
+    Ipv6InterfaceContainer i = ipv6.AssignWithoutAddress(nonRouterDevices);
+
+    NS_LOG_INFO("Assign static IP address to the third node.");
+    Ptr<Ipv6> ipv6proto = nonRouterNodes.Get(3)->GetObject<Ipv6>();
+    int32_t ifIndex = ipv6proto->GetInterfaceForDevice(devices.Get(3));
+    Ipv6InterfaceAddress ipv6Addr =
+        Ipv6InterfaceAddress(Ipv6Address("2001:cafe::42:2"), Ipv6Prefix(128));
+    ipv6proto->AddAddress(ifIndex, ipv6Addr);
+
+    NS_LOG_INFO("Assign static IP address to the router node.");
+    NetDeviceContainer routerDevice;
+    routerDevice.Add(devices.Get(4)); // CSMA interface of the node R0.
+    Ipv6InterfaceContainer r1 = ipv6.Assign(routerDevice);
+    r1.SetForwarding(0, true);
+
+    NS_LOG_INFO("Create Radvd applications.");
+    RadvdHelper radvdHelper;
+
+    /* Set up unsolicited RAs */
+    radvdHelper.AddAnnouncedPrefix(r1.GetInterfaceIndex(0), Ipv6Address("2001:cafe::1"), 64);
+    radvdHelper.GetRadvdInterface(r1.GetInterfaceIndex(0))->SetManagedFlag(true);
+
+    NS_LOG_INFO("Create DHCP applications.");
+    Dhcp6Helper dhcp6Helper;
+
+    NS_LOG_INFO("Set timers to desired values.");
+    dhcp6Helper.SetServerAttribute("RenewTime", StringValue("10s"));
+    dhcp6Helper.SetServerAttribute("RebindTime", StringValue("16s"));
+    dhcp6Helper.SetServerAttribute("PreferredLifetime", StringValue("18s"));
+    dhcp6Helper.SetServerAttribute("ValidLifetime", StringValue("20s"));
+
+    // DHCPv6 clients
+    NodeContainer nodes = NodeContainer(nonRouterNodes.Get(1), nonRouterNodes.Get(2));
+    ApplicationContainer dhcpClients = dhcp6Helper.InstallDhcp6Client(nodes);
+    dhcpClients.Start(Seconds(1.0));
+    dhcpClients.Stop(stopTime);
+
+    // DHCP server
+    NetDeviceContainer serverNetDevices;
+    serverNetDevices.Add(nonRouterDevices.Get(0));
+    ApplicationContainer dhcpServerApp = dhcp6Helper.InstallDhcp6Server(serverNetDevices);
+
+    Ptr<Dhcp6Server> server = DynamicCast<Dhcp6Server>(dhcpServerApp.Get(0));
+    server->AddSubnet(Ipv6Address("2001:cafe::"),
+                      Ipv6Prefix(64),
+                      Ipv6Address("2001:cafe::42:1"),
+                      Ipv6Address("2001:cafe::42:ffff"));
+
+    dhcpServerApp.Start(Seconds(0.0));
+    dhcpServerApp.Stop(stopTime);
+
+    ApplicationContainer radvdApps = radvdHelper.Install(router);
+    radvdApps.Start(Seconds(1.0));
+    radvdApps.Stop(stopTime);
+
+    Simulator::Stop(stopTime + Seconds(2.0));
+
+    // Schedule N0 interface to go down and come up to see the effects of
+    // link state change.
+    Simulator::Schedule(Seconds(4), &SetInterfaceDown, nonRouterNodes.Get(1), 1);
+    Simulator::Schedule(Seconds(5), &SetInterfaceUp, nonRouterNodes.Get(1), 1);
+
+    if (enablePcap)
+    {
+        csma.EnablePcapAll("dhcp6-csma");
+    }
+
+    NS_LOG_INFO("Run Simulation.");
+    Simulator::Run();
+
+    NS_LOG_INFO("Done.");
+    Simulator::Destroy();
+    return 0;
+}
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/internet-apps/helper/dhcp6-helper.cc ns-3.45/src/internet-apps/helper/dhcp6-helper.cc
--- ns-3.44/src/internet-apps/helper/dhcp6-helper.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.45/src/internet-apps/helper/dhcp6-helper.cc	2025-06-01 20:34:45.314701300 -0700
@@ -0,0 +1,117 @@
+/*
+ * Copyright (c) 2024 NITK Surathkal
+ *
+ * SPDX-License-Identifier: GPL-2.0-only
+ *
+ * Author: Kavya Bhat <kavyabhat@gmail.com>
+ *
+ */
+
+#include "dhcp6-helper.h"
+
+#include "ns3/dhcp6-client.h"
+#include "ns3/dhcp6-server.h"
+#include "ns3/ipv6.h"
+#include "ns3/log.h"
+#include "ns3/loopback-net-device.h"
+#include "ns3/names.h"
+#include "ns3/uinteger.h"
+
+namespace ns3
+{
+
+NS_LOG_COMPONENT_DEFINE("Dhcp6Helper");
+
+Dhcp6Helper::Dhcp6Helper()
+{
+    m_clientFactory.SetTypeId(Dhcp6Client::GetTypeId());
+    m_serverFactory.SetTypeId(Dhcp6Server::GetTypeId());
+}
+
+void
+Dhcp6Helper::SetClientAttribute(std::string name, const AttributeValue& value)
+{
+    m_clientFactory.Set(name, value);
+}
+
+void
+Dhcp6Helper::SetServerAttribute(std::string name, const AttributeValue& value)
+{
+    m_serverFactory.Set(name, value);
+}
+
+ApplicationContainer
+Dhcp6Helper::InstallDhcp6Client(NodeContainer clientNodes) const
+{
+    ApplicationContainer installedApps;
+    for (auto iter = clientNodes.Begin(); iter != clientNodes.End(); iter++)
+    {
+        Ptr<Application> app = InstallDhcp6ClientInternal((*iter));
+        installedApps.Add(app);
+    }
+
+    return installedApps;
+}
+
+ApplicationContainer
+Dhcp6Helper::InstallDhcp6Server(NetDeviceContainer netDevices)
+{
+    ApplicationContainer installedApps;
+    for (auto itr = netDevices.Begin(); itr != netDevices.End(); itr++)
+    {
+        Ptr<NetDevice> netDevice = *itr;
+        Ptr<Node> node = netDevice->GetNode();
+        NS_ASSERT_MSG(node, "Dhcp6Helper: NetDevice is not associated with any node -> fail");
+
+        Ptr<Ipv6> ipv6 = node->GetObject<Ipv6>();
+        NS_ASSERT_MSG(ipv6,
+                      "Dhcp6Helper: NetDevice is associated"
+                      " with a node without IPv6 stack installed -> fail "
+                      "(maybe need to use InternetStackHelper?)");
+
+        uint32_t nApplications = node->GetNApplications();
+
+        for (uint32_t i = 0; i < nApplications; i++)
+        {
+            Ptr<Dhcp6Server> server = DynamicCast<Dhcp6Server>(node->GetApplication(i));
+            if (!server)
+            {
+                Ptr<Dhcp6Server> app = m_serverFactory.Create<Dhcp6Server>();
+                node->AddApplication(app);
+                app->SetDhcp6ServerNetDevice(netDevices);
+                installedApps.Add(app);
+            }
+        }
+
+        if (nApplications == 0)
+        {
+            Ptr<Dhcp6Server> app = m_serverFactory.Create<Dhcp6Server>();
+            node->AddApplication(app);
+            app->SetDhcp6ServerNetDevice(netDevices);
+            installedApps.Add(app);
+        }
+    }
+
+    return installedApps;
+}
+
+Ptr<Application>
+Dhcp6Helper::InstallDhcp6ClientInternal(Ptr<Node> clientNode) const
+{
+    Ptr<Application> app;
+    for (uint32_t index = 0; index < clientNode->GetNApplications(); index++)
+    {
+        app = clientNode->GetApplication(index);
+        if (app->GetInstanceTypeId() == Dhcp6Client::GetTypeId())
+        {
+            return app;
+        }
+    }
+
+    app = m_clientFactory.Create<Dhcp6Client>();
+    clientNode->AddApplication(app);
+
+    return app;
+}
+
+} // namespace ns3
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/internet-apps/helper/dhcp6-helper.h ns-3.45/src/internet-apps/helper/dhcp6-helper.h
--- ns-3.44/src/internet-apps/helper/dhcp6-helper.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.45/src/internet-apps/helper/dhcp6-helper.h	2025-06-01 20:34:45.314701300 -0700
@@ -0,0 +1,89 @@
+/*
+ * Copyright (c) 2024 NITK Surathkal
+ *
+ * SPDX-License-Identifier: GPL-2.0-only
+ *
+ * Author: Kavya Bhat <kavyabhat@gmail.com>
+ *
+ */
+
+#ifndef DHCP6_HELPER_H
+#define DHCP6_HELPER_H
+
+#include "ns3/application-container.h"
+#include "ns3/dhcp6-server.h"
+#include "ns3/ipv6-address.h"
+#include "ns3/ipv6-interface-container.h"
+#include "ns3/net-device-container.h"
+#include "ns3/node-container.h"
+#include "ns3/object-factory.h"
+
+#include <stdint.h>
+
+namespace ns3
+{
+
+/**
+ * @ingroup dhcp6
+ *
+ * @class Dhcp6Helper
+ * @brief The helper class used to configure and install DHCPv6 applications on nodes
+ */
+class Dhcp6Helper
+{
+  public:
+    /**
+     * @brief Default constructor.
+     */
+    Dhcp6Helper();
+
+    /**
+     * @brief Set DHCPv6 client attributes
+     * @param name Name of the attribute
+     * @param value Value to be set
+     */
+    void SetClientAttribute(std::string name, const AttributeValue& value);
+
+    /**
+     * @brief Set DHCPv6 server attributes
+     * @param name Name of the attribute
+     * @param value Value to be set
+     */
+    void SetServerAttribute(std::string name, const AttributeValue& value);
+
+    /**
+     * @brief Install DHCPv6 client on a set of nodes
+     *
+     * If there is already a DHCPv6 client on the node, the app is not installed,
+     * and the already existing one is returned.
+     *
+     * @param clientNodes Nodes on which the DHCPv6 client is installed
+     * @return The application container with DHCPv6 client installed
+     */
+    ApplicationContainer InstallDhcp6Client(NodeContainer clientNodes) const;
+
+    /**
+     * @brief Install DHCPv6 server on a node / NetDevice. Also updates the
+     * interface -> server map.
+     * @param netDevices The NetDevices on which DHCPv6 server application has to be installed
+     * @return The application container with DHCPv6 server installed
+     */
+    ApplicationContainer InstallDhcp6Server(NetDeviceContainer netDevices);
+
+  private:
+    /**
+     * @brief Helper method that iterates through the installed applications
+     * on a node to look for a Dhcp6Client application. It either installs a
+     * new Dhcp6Client or returns an existing one.
+     * @param clientNode The node on which the application is to be installed.
+     * @return Pointer to the Dhcp6Client application on the node.
+     */
+    Ptr<Application> InstallDhcp6ClientInternal(Ptr<Node> clientNode) const;
+
+    ObjectFactory m_clientFactory; //!< DHCPv6 client factory.
+    ObjectFactory m_serverFactory; //!< DHCPv6 server factory.
+};
+
+} // namespace ns3
+
+#endif /* DHCP6_HELPER_H */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/internet-apps/helper/radvd-helper.cc ns-3.45/src/internet-apps/helper/radvd-helper.cc
--- ns-3.44/src/internet-apps/helper/radvd-helper.cc	2025-03-09 16:55:49.379371200 -0700
+++ ns-3.45/src/internet-apps/helper/radvd-helper.cc	2025-06-01 20:34:45.314701300 -0700
@@ -27,7 +27,8 @@
 void
 RadvdHelper::AddAnnouncedPrefix(uint32_t interface,
                                 const Ipv6Address& prefix,
-                                uint32_t prefixLength)
+                                uint32_t prefixLength,
+                                bool slaac)
 {
     NS_LOG_FUNCTION(this << int(interface) << prefix << int(prefixLength));
     if (prefixLength != 64)
@@ -59,6 +60,7 @@
     if (!prefixFound)
     {
         Ptr<RadvdPrefix> routerPrefix = Create<RadvdPrefix>(prefix, prefixLength);
+        routerPrefix->SetAutonomousFlag(slaac);
         m_radvdInterfaces[interface]->AddPrefix(routerPrefix);
     }
 }
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/internet-apps/helper/radvd-helper.h ns-3.45/src/internet-apps/helper/radvd-helper.h
--- ns-3.44/src/internet-apps/helper/radvd-helper.h	2025-03-09 16:55:49.379371200 -0700
+++ ns-3.45/src/internet-apps/helper/radvd-helper.h	2025-06-01 20:34:45.314701300 -0700
@@ -35,8 +35,12 @@
      * @param interface outgoing interface
      * @param prefix announced IPv6 prefix
      * @param prefixLength announced IPv6 prefix length
+     * @param slaac available for autoconfiguration
      */
-    void AddAnnouncedPrefix(uint32_t interface, const Ipv6Address& prefix, uint32_t prefixLength);
+    void AddAnnouncedPrefix(uint32_t interface,
+                            const Ipv6Address& prefix,
+                            uint32_t prefixLength,
+                            bool slaac = true);
 
     /**
      * @brief Enable the router as default router for the interface.
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/internet-apps/model/dhcp6-client.cc ns-3.45/src/internet-apps/model/dhcp6-client.cc
--- ns-3.44/src/internet-apps/model/dhcp6-client.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.45/src/internet-apps/model/dhcp6-client.cc	2025-06-01 20:34:45.314701300 -0700
@@ -0,0 +1,943 @@
+/*
+ * Copyright (c) 2024 NITK Surathkal
+ *
+ * SPDX-License-Identifier: GPL-2.0-only
+ *
+ * Author: Kavya Bhat <kavyabhat@gmail.com>
+ *
+ */
+
+#include "dhcp6-client.h"
+
+#include "dhcp6-duid.h"
+
+#include "ns3/address-utils.h"
+#include "ns3/icmpv6-l4-protocol.h"
+#include "ns3/ipv6-interface.h"
+#include "ns3/ipv6-l3-protocol.h"
+#include "ns3/ipv6-packet-info-tag.h"
+#include "ns3/ipv6.h"
+#include "ns3/log.h"
+#include "ns3/loopback-net-device.h"
+#include "ns3/mac48-address.h"
+#include "ns3/net-device-container.h"
+#include "ns3/object.h"
+#include "ns3/pointer.h"
+#include "ns3/ptr.h"
+#include "ns3/random-variable-stream.h"
+#include "ns3/simulator.h"
+#include "ns3/socket.h"
+#include "ns3/string.h"
+#include "ns3/trace-source-accessor.h"
+#include "ns3/traced-value.h"
+#include "ns3/trickle-timer.h"
+
+#include <algorithm>
+
+namespace ns3
+{
+
+NS_LOG_COMPONENT_DEFINE("Dhcp6Client");
+
+TypeId
+Dhcp6Client::GetTypeId()
+{
+    static TypeId tid =
+        TypeId("ns3::Dhcp6Client")
+            .SetParent<Application>()
+            .AddConstructor<Dhcp6Client>()
+            .SetGroupName("InternetApps")
+            .AddAttribute("Transactions",
+                          "A value to be used as the transaction ID.",
+                          StringValue("ns3::UniformRandomVariable[Min=0.0|Max=1000000.0]"),
+                          MakePointerAccessor(&Dhcp6Client::m_transactionId),
+                          MakePointerChecker<RandomVariableStream>())
+            .AddAttribute("SolicitJitter",
+                          "The jitter in ms that a node waits before sending any solicitation. By "
+                          "default, the model will wait for a duration in ms defined by a uniform "
+                          "random-variable between 0 and SolicitJitter. This is equivalent to"
+                          "SOL_MAX_DELAY (RFC 8415, Section 7.6).",
+                          StringValue("ns3::UniformRandomVariable[Min=0.0|Max=1000.0]"),
+                          MakePointerAccessor(&Dhcp6Client::m_solicitJitter),
+                          MakePointerChecker<RandomVariableStream>())
+            .AddAttribute("IaidValue",
+                          "The identifier for a new IA created by a client.",
+                          StringValue("ns3::UniformRandomVariable[Min=0.0|Max=1000000.0]"),
+                          MakePointerAccessor(&Dhcp6Client::m_iaidStream),
+                          MakePointerChecker<RandomVariableStream>())
+            .AddAttribute("SolicitInterval",
+                          "Time after which the client resends the Solicit."
+                          "Equivalent to SOL_MAX_RT (RFC 8415, Section 7.6)",
+                          TimeValue(Seconds(100)),
+                          MakeTimeAccessor(&Dhcp6Client::m_solicitInterval),
+                          MakeTimeChecker())
+            .AddTraceSource("NewLease",
+                            "The client has obtained a lease",
+                            MakeTraceSourceAccessor(&Dhcp6Client::m_newLease),
+                            "ns3::Ipv6Address::TracedCallback");
+    return tid;
+}
+
+Dhcp6Client::Dhcp6Client()
+{
+    NS_LOG_FUNCTION(this);
+}
+
+void
+Dhcp6Client::DoDispose()
+{
+    NS_LOG_FUNCTION(this);
+
+    for (auto& itr : m_interfaces)
+    {
+        itr.second->Cleanup();
+        itr.second = nullptr;
+    }
+    m_interfaces.clear();
+    m_iaidMap.clear();
+
+    Application::DoDispose();
+}
+
+int64_t
+Dhcp6Client::AssignStreams(int64_t stream)
+{
+    NS_LOG_FUNCTION(this << stream);
+    m_solicitJitter->SetStream(stream);
+    m_transactionId->SetStream(stream + 1);
+    m_iaidStream->SetStream(stream + 2);
+    return 3;
+}
+
+bool
+Dhcp6Client::ValidateAdvertise(Dhcp6Header header, Ptr<NetDevice> iDev)
+{
+    Ptr<Packet> packet = Create<Packet>();
+    Ptr<Ipv6> ipv6 = GetNode()->GetObject<Ipv6>();
+    int32_t ifIndex = ipv6->GetInterfaceForDevice(iDev);
+    uint32_t clientTransactId = m_interfaces[ifIndex]->m_transactId;
+    uint32_t receivedTransactId = header.GetTransactId();
+
+    if (clientTransactId != receivedTransactId)
+    {
+        return false;
+    }
+
+    Duid clientDuid = header.GetClientIdentifier().GetDuid();
+    NS_ASSERT_MSG(clientDuid == m_clientDuid, "Client DUID mismatch.");
+
+    m_interfaces[ifIndex]->m_serverDuid = header.GetServerIdentifier().GetDuid();
+    return true;
+}
+
+void
+Dhcp6Client::SendRequest(Ptr<NetDevice> iDev, Dhcp6Header header, Inet6SocketAddress server)
+{
+    NS_LOG_FUNCTION(this << iDev << header << server);
+
+    Ptr<Packet> packet = Create<Packet>();
+    Dhcp6Header requestHeader;
+    requestHeader.ResetOptions();
+    requestHeader.SetMessageType(Dhcp6Header::MessageType::REQUEST);
+
+    // TODO: Use min, max for GetValue
+    Ptr<Ipv6> ipv6 = GetNode()->GetObject<Ipv6>();
+    int32_t ifIndex = ipv6->GetInterfaceForDevice(iDev);
+    const auto& dhcpInterface = m_interfaces[ifIndex];
+    dhcpInterface->m_transactId = static_cast<uint32_t>(m_transactionId->GetValue());
+    requestHeader.SetTransactId(dhcpInterface->m_transactId);
+
+    // Add Client Identifier Option.
+    requestHeader.AddClientIdentifier(m_clientDuid);
+
+    // Add Server Identifier Option, copied from the received header.
+    Duid serverDuid = header.GetServerIdentifier().GetDuid();
+    requestHeader.AddServerIdentifier(serverDuid);
+
+    // Add Elapsed Time Option.
+    uint32_t actualElapsedTime =
+        (Simulator::Now() - dhcpInterface->m_msgStartTime).GetMilliSeconds() / 10;
+    uint16_t elapsed = actualElapsedTime > 65535 ? 65535 : actualElapsedTime;
+    requestHeader.AddElapsedTime(elapsed);
+
+    // Add IA_NA option.
+    // Request all addresses from the Advertise message.
+    std::vector<IaOptions> ianaOptionsList = header.GetIanaOptions();
+
+    for (const auto& iaOpt : ianaOptionsList)
+    {
+        // Iterate through the offered addresses.
+        // Current approach: Try to accept all offers.
+        for (const auto& iaAddrOpt : iaOpt.m_iaAddressOption)
+        {
+            requestHeader.AddIanaOption(iaOpt.GetIaid(), iaOpt.GetT1(), iaOpt.GetT2());
+            requestHeader.AddAddress(iaOpt.GetIaid(),
+                                     iaAddrOpt.GetIaAddress(),
+                                     iaAddrOpt.GetPreferredLifetime(),
+                                     iaAddrOpt.GetValidLifetime());
+
+            NS_LOG_DEBUG("Requesting " << iaAddrOpt.GetIaAddress());
+        }
+    }
+
+    // Add Option Request.
+    header.AddOptionRequest(Options::OptionType::OPTION_SOL_MAX_RT);
+
+    packet->AddHeader(requestHeader);
+
+    // TODO: Handle server unicast option.
+
+    // Send the request message.
+    dhcpInterface->m_state = State::WAIT_REPLY;
+    if (dhcpInterface->m_socket->SendTo(
+            packet,
+            0,
+            Inet6SocketAddress(Ipv6Address::GetAllNodesMulticast(), Dhcp6Header::SERVER_PORT)) >= 0)
+    {
+        NS_LOG_INFO("DHCPv6 client: Request sent.");
+    }
+    else
+    {
+        NS_LOG_INFO("DHCPv6 client: Error while sending Request.");
+    }
+}
+
+Dhcp6Client::InterfaceConfig::InterfaceConfig()
+{
+    m_renewTime = Seconds(1000);
+    m_rebindTime = Seconds(2000);
+    m_prefLifetime = Seconds(3000);
+    m_validLifetime = Seconds(4000);
+    m_nAcceptedAddresses = 0;
+}
+
+Dhcp6Client::InterfaceConfig::~InterfaceConfig()
+{
+    std::cout << "InterfaceConfig::~InterfaceConfig" << std::endl;
+
+    m_socket = nullptr;
+    m_client = nullptr;
+
+    m_iaids.clear();
+    m_solicitTimer.Stop();
+    m_declinedAddresses.clear();
+
+    m_renewEvent.Cancel();
+    m_rebindEvent.Cancel();
+
+    for (auto& itr : m_releaseEvent)
+    {
+        itr.Cancel();
+    }
+}
+
+void
+Dhcp6Client::InterfaceConfig::AcceptedAddress(const Ipv6Address& offeredAddress)
+{
+    NS_LOG_DEBUG("Accepting address " << offeredAddress);
+
+    // Check that the offered address is from DHCPv6.
+    bool found = false;
+    for (auto& addr : m_offeredAddresses)
+    {
+        if (addr == offeredAddress)
+        {
+            found = true;
+            break;
+        }
+    }
+
+    if (found)
+    {
+        m_nAcceptedAddresses += 1;
+
+        // Notify the new lease.
+        m_client->m_newLease(offeredAddress);
+        std::cerr << "* got a new lease " << offeredAddress << std::endl;
+    }
+}
+
+void
+Dhcp6Client::InterfaceConfig::DeclinedAddress(const Ipv6Address& offeredAddress)
+{
+    NS_LOG_DEBUG("Address to be declined " << offeredAddress);
+
+    // Check that the offered address is from DHCPv6.
+    bool found = false;
+    for (auto& addr : m_offeredAddresses)
+    {
+        if (addr == offeredAddress)
+        {
+            found = true;
+            break;
+        }
+    }
+
+    if (found)
+    {
+        m_declinedAddresses.emplace_back(offeredAddress);
+        if (m_declinedAddresses.size() + m_nAcceptedAddresses == m_offeredAddresses.size())
+        {
+            DeclineOffer();
+        }
+    }
+}
+
+void
+Dhcp6Client::InterfaceConfig::DeclineOffer()
+{
+    if (m_declinedAddresses.empty())
+    {
+        return;
+    }
+
+    // Cancel all scheduled Release, Renew, Rebind events.
+    m_renewEvent.Cancel();
+    m_rebindEvent.Cancel();
+    for (auto itr : m_releaseEvent)
+    {
+        itr.Cancel();
+    }
+
+    Dhcp6Header declineHeader;
+    Ptr<Packet> packet = Create<Packet>();
+
+    // Remove address associations.
+    for (const auto& offer : m_declinedAddresses)
+    {
+        uint32_t iaid = m_client->m_iaidMap[offer];
+
+        // IA_NA option, IA address option
+        declineHeader.AddIanaOption(iaid, m_renewTime.GetSeconds(), m_rebindTime.GetSeconds());
+        declineHeader.AddAddress(iaid,
+                                 offer,
+                                 m_prefLifetime.GetSeconds(),
+                                 m_validLifetime.GetSeconds());
+        NS_LOG_DEBUG("Declining address " << offer);
+    }
+
+    m_transactId = static_cast<uint32_t>(m_client->m_transactionId->GetValue());
+    declineHeader.SetTransactId(m_transactId);
+    declineHeader.SetMessageType(Dhcp6Header::MessageType::DECLINE);
+
+    // Add client identifier option
+    declineHeader.AddClientIdentifier(m_client->m_clientDuid);
+
+    // Add server identifier option
+    declineHeader.AddServerIdentifier(m_serverDuid);
+
+    m_msgStartTime = Simulator::Now();
+    declineHeader.AddElapsedTime(0);
+
+    packet->AddHeader(declineHeader);
+    if ((m_socket->SendTo(packet,
+                          0,
+                          Inet6SocketAddress(Ipv6Address::GetAllNodesMulticast(),
+                                             Dhcp6Header::SERVER_PORT))) >= 0)
+    {
+        NS_LOG_INFO("DHCPv6 client: Decline sent");
+    }
+    else
+    {
+        NS_LOG_INFO("DHCPv6 client: Error while sending Decline");
+    }
+
+    m_state = State::WAIT_REPLY_AFTER_DECLINE;
+}
+
+void
+Dhcp6Client::InterfaceConfig::Cleanup()
+{
+    m_solicitTimer.Stop();
+
+    for (auto& releaseEvent : m_releaseEvent)
+    {
+        releaseEvent.Cancel();
+    }
+
+    m_renewEvent.Cancel();
+    m_rebindEvent.Cancel();
+
+    m_socket->SetRecvCallback(MakeNullCallback<void, Ptr<Socket>>());
+    m_socket->Close();
+
+    Ptr<Ipv6> ipv6 = m_client->GetNode()->GetObject<Ipv6>();
+
+    // Remove the offered IPv6 addresses from the interface.
+    for (uint32_t i = 0; i < ipv6->GetNAddresses(m_interfaceIndex); i++)
+    {
+        for (const auto& addr : m_offeredAddresses)
+        {
+            if (ipv6->GetAddress(m_interfaceIndex, i) == addr)
+            {
+                ipv6->RemoveAddress(m_interfaceIndex, i);
+                break;
+            }
+        }
+    }
+    m_offeredAddresses.clear();
+
+    Ptr<Icmpv6L4Protocol> icmpv6 = DynamicCast<Icmpv6L4Protocol>(
+        ipv6->GetProtocol(Icmpv6L4Protocol::GetStaticProtocolNumber(), m_interfaceIndex));
+
+    icmpv6->TraceDisconnectWithoutContext("DadSuccess", m_acceptedAddressCb.value());
+    m_acceptedAddressCb = MakeNullCallback<void, const Ipv6Address&>();
+    icmpv6->TraceDisconnectWithoutContext("DadFailure", m_declinedAddressCb.value());
+    m_declinedAddressCb = MakeNullCallback<void, const Ipv6Address&>();
+}
+
+void
+Dhcp6Client::CheckLeaseStatus(Ptr<NetDevice> iDev,
+                              Dhcp6Header header,
+                              Inet6SocketAddress server) const
+{
+    // Read Status Code option.
+    Options::StatusCodeValues statusCode = header.GetStatusCodeOption().GetStatusCode();
+
+    NS_LOG_DEBUG("Received status " << (uint16_t)statusCode << " from DHCPv6 server");
+    if (statusCode == Options::StatusCodeValues::Success)
+    {
+        NS_LOG_INFO("DHCPv6 client: Server bindings updated successfully.");
+    }
+    else
+    {
+        NS_LOG_INFO("DHCPv6 client: Server bindings update failed.");
+    }
+}
+
+void
+Dhcp6Client::ProcessReply(Ptr<NetDevice> iDev, Dhcp6Header header, Inet6SocketAddress server)
+{
+    NS_LOG_FUNCTION(this << iDev << header << server);
+
+    Ptr<Ipv6> ipv6 = GetNode()->GetObject<Ipv6>();
+    int32_t ifIndex = ipv6->GetInterfaceForDevice(iDev);
+
+    Ptr<InterfaceConfig> dhcpInterface = m_interfaces[ifIndex];
+
+    // Read IA_NA options.
+    std::vector<IaOptions> ianaOptionsList = header.GetIanaOptions();
+
+    dhcpInterface->m_declinedAddresses.clear();
+
+    Time earliestRebind{Time::Max()};
+    Time earliestRenew{Time::Max()};
+    std::vector<uint32_t> iaidList;
+
+    for (const auto& iaOpt : ianaOptionsList)
+    {
+        // Iterate through the offered addresses.
+        // Current approach: Try to accept all offers.
+        for (const auto& iaAddrOpt : iaOpt.m_iaAddressOption)
+        {
+            Ipv6Address offeredAddress = iaAddrOpt.GetIaAddress();
+
+            // TODO: In Linux, all leased addresses seem to be /128. Double-check this.
+            Ipv6InterfaceAddress addr(offeredAddress, 128);
+            ipv6->AddAddress(ifIndex, addr);
+            ipv6->SetUp(ifIndex);
+
+            // Set the preferred and valid lifetimes.
+            dhcpInterface->m_prefLifetime = Seconds(iaAddrOpt.GetPreferredLifetime());
+            dhcpInterface->m_validLifetime = Seconds(iaAddrOpt.GetValidLifetime());
+
+            // Add the IPv6 address - IAID association.
+            m_iaidMap[offeredAddress] = iaOpt.GetIaid();
+
+            // TODO: Check whether Release event happens for each address.
+            dhcpInterface->m_releaseEvent.emplace_back(
+                Simulator::Schedule(dhcpInterface->m_validLifetime,
+                                    &Dhcp6Client::SendRelease,
+                                    this,
+                                    offeredAddress));
+
+            dhcpInterface->m_offeredAddresses.push_back(offeredAddress);
+        }
+
+        earliestRenew = std::min(earliestRenew, Seconds(iaOpt.GetT1()));
+        earliestRebind = std::min(earliestRebind, Seconds(iaOpt.GetT2()));
+        iaidList.emplace_back(iaOpt.GetIaid());
+    }
+
+    // The renew and rebind events are scheduled for the earliest time across
+    // all IA_NA options. RFC 8415, Section 18.2.4.
+    dhcpInterface->m_renewTime = earliestRenew;
+    dhcpInterface->m_renewEvent.Cancel();
+    dhcpInterface->m_renewEvent =
+        Simulator::Schedule(dhcpInterface->m_renewTime, &Dhcp6Client::SendRenew, this, ifIndex);
+
+    // Set the rebind timer and schedule the event.
+    dhcpInterface->m_rebindTime = earliestRebind;
+    dhcpInterface->m_rebindEvent.Cancel();
+    dhcpInterface->m_rebindEvent =
+        Simulator::Schedule(dhcpInterface->m_rebindTime, &Dhcp6Client::SendRebind, this, ifIndex);
+
+    int32_t interfaceId = ipv6->GetInterfaceForDevice(iDev);
+    Ptr<Icmpv6L4Protocol> icmpv6 = DynamicCast<Icmpv6L4Protocol>(
+        ipv6->GetProtocol(Icmpv6L4Protocol::GetStaticProtocolNumber(), interfaceId));
+
+    // If DAD fails, the offer is declined.
+
+    if (!dhcpInterface->m_acceptedAddressCb.has_value())
+    {
+        dhcpInterface->m_acceptedAddressCb =
+            MakeCallback(&Dhcp6Client::InterfaceConfig::AcceptedAddress, dhcpInterface);
+        icmpv6->TraceConnectWithoutContext("DadSuccess",
+                                           dhcpInterface->m_acceptedAddressCb.value());
+    }
+
+    if (!dhcpInterface->m_declinedAddressCb.has_value())
+    {
+        dhcpInterface->m_declinedAddressCb =
+            MakeCallback(&Dhcp6Client::InterfaceConfig::DeclinedAddress, dhcpInterface);
+        icmpv6->TraceConnectWithoutContext("DadFailure",
+                                           dhcpInterface->m_declinedAddressCb.value());
+    }
+}
+
+void
+Dhcp6Client::SendRenew(uint32_t dhcpInterfaceIndex)
+{
+    NS_LOG_FUNCTION(this);
+
+    Dhcp6Header header;
+    Ptr<Packet> packet = Create<Packet>();
+
+    m_interfaces[dhcpInterfaceIndex]->m_transactId =
+        static_cast<uint32_t>(m_transactionId->GetValue());
+
+    header.SetTransactId(m_interfaces[dhcpInterfaceIndex]->m_transactId);
+    header.SetMessageType(Dhcp6Header::MessageType::RENEW);
+
+    // Add client identifier option
+    header.AddClientIdentifier(m_clientDuid);
+
+    // Add server identifier option
+    header.AddServerIdentifier(m_interfaces[dhcpInterfaceIndex]->m_serverDuid);
+
+    m_interfaces[dhcpInterfaceIndex]->m_msgStartTime = Simulator::Now();
+    header.AddElapsedTime(0);
+
+    // Add IA_NA options.
+    for (const auto& iaidRenew : m_interfaces[dhcpInterfaceIndex]->m_iaids)
+    {
+        header.AddIanaOption(iaidRenew,
+                             m_interfaces[dhcpInterfaceIndex]->m_renewTime.GetSeconds(),
+                             m_interfaces[dhcpInterfaceIndex]->m_rebindTime.GetSeconds());
+
+        // Iterate through the IPv6Address - IAID map, and add all addresses
+        // that match the IAID to be renewed.
+        for (const auto& itr : m_iaidMap)
+        {
+            Ipv6Address address = itr.first;
+            uint32_t iaid = itr.second;
+            if (iaid == iaidRenew)
+            {
+                header.AddAddress(iaidRenew,
+                                  address,
+                                  m_interfaces[dhcpInterfaceIndex]->m_prefLifetime.GetSeconds(),
+                                  m_interfaces[dhcpInterfaceIndex]->m_validLifetime.GetSeconds());
+            }
+        }
+
+        NS_LOG_DEBUG("Renewing addresses in IAID " << iaidRenew);
+    }
+
+    // Add Option Request option.
+    header.AddOptionRequest(Options::OptionType::OPTION_SOL_MAX_RT);
+
+    packet->AddHeader(header);
+    if ((m_interfaces[dhcpInterfaceIndex]->m_socket->SendTo(
+            packet,
+            0,
+            Inet6SocketAddress(Ipv6Address::GetAllNodesMulticast(), Dhcp6Header::SERVER_PORT))) >=
+        0)
+    {
+        NS_LOG_INFO("DHCPv6 client: Renew sent");
+    }
+    else
+    {
+        NS_LOG_INFO("DHCPv6 client: Error while sending Renew");
+    }
+
+    m_interfaces[dhcpInterfaceIndex]->m_state = State::WAIT_REPLY;
+}
+
+void
+Dhcp6Client::SendRebind(uint32_t dhcpInterfaceIndex)
+{
+    NS_LOG_FUNCTION(this);
+
+    Dhcp6Header header;
+    Ptr<Packet> packet = Create<Packet>();
+
+    m_interfaces[dhcpInterfaceIndex]->m_transactId =
+        static_cast<uint32_t>(m_transactionId->GetValue());
+
+    header.SetTransactId(m_interfaces[dhcpInterfaceIndex]->m_transactId);
+    header.SetMessageType(Dhcp6Header::MessageType::REBIND);
+
+    // Add client identifier option
+    header.AddClientIdentifier(m_clientDuid);
+
+    m_interfaces[dhcpInterfaceIndex]->m_msgStartTime = Simulator::Now();
+    header.AddElapsedTime(0);
+
+    // Add IA_NA options.
+    for (const auto& iaid : m_interfaces[dhcpInterfaceIndex]->m_iaids)
+    {
+        header.AddIanaOption(iaid,
+                             m_interfaces[dhcpInterfaceIndex]->m_renewTime.GetSeconds(),
+                             m_interfaces[dhcpInterfaceIndex]->m_rebindTime.GetSeconds());
+
+        NS_LOG_DEBUG("Rebinding addresses in IAID " << iaid);
+    }
+
+    // Add Option Request option.
+    header.AddOptionRequest(Options::OptionType::OPTION_SOL_MAX_RT);
+
+    packet->AddHeader(header);
+    if ((m_interfaces[dhcpInterfaceIndex]->m_socket->SendTo(
+            packet,
+            0,
+            Inet6SocketAddress(Ipv6Address::GetAllNodesMulticast(), Dhcp6Header::SERVER_PORT))) >=
+        0)
+    {
+        NS_LOG_INFO("DHCPv6 client: Rebind sent.");
+    }
+    else
+    {
+        NS_LOG_INFO("DHCPv6 client: Error while sending Rebind");
+    }
+
+    m_interfaces[dhcpInterfaceIndex]->m_state = State::WAIT_REPLY;
+}
+
+void
+Dhcp6Client::SendRelease(Ipv6Address address)
+{
+    NS_LOG_FUNCTION(this);
+
+    Ptr<Ipv6> ipv6 = GetNode()->GetObject<Ipv6>();
+
+    Dhcp6Header header;
+    Ptr<Packet> packet = Create<Packet>();
+
+    for (const auto& itr : m_interfaces)
+    {
+        uint32_t ifIndex = itr.first;
+        Ptr<InterfaceConfig> dhcpInterface = itr.second;
+
+        dhcpInterface->m_transactId = static_cast<uint32_t>(m_transactionId->GetValue());
+        bool removed = ipv6->RemoveAddress(ifIndex, address);
+
+        if (!removed)
+        {
+            continue;
+        }
+
+        header.SetTransactId(dhcpInterface->m_transactId);
+        header.SetMessageType(Dhcp6Header::MessageType::RELEASE);
+
+        // Add client identifier option
+        header.AddClientIdentifier(m_clientDuid);
+
+        // Add server identifier option
+        header.AddServerIdentifier(dhcpInterface->m_serverDuid);
+
+        dhcpInterface->m_msgStartTime = Simulator::Now();
+        header.AddElapsedTime(0);
+
+        // IA_NA option, IA address option
+        uint32_t iaid = m_iaidMap[address];
+        header.AddIanaOption(iaid,
+                             dhcpInterface->m_renewTime.GetSeconds(),
+                             dhcpInterface->m_rebindTime.GetSeconds());
+        header.AddAddress(iaid,
+                          address,
+                          dhcpInterface->m_prefLifetime.GetSeconds(),
+                          dhcpInterface->m_validLifetime.GetSeconds());
+
+        NS_LOG_DEBUG("Releasing address " << address);
+
+        packet->AddHeader(header);
+        if ((dhcpInterface->m_socket->SendTo(packet,
+                                             0,
+                                             Inet6SocketAddress(Ipv6Address::GetAllNodesMulticast(),
+                                                                Dhcp6Header::SERVER_PORT))) >= 0)
+        {
+            NS_LOG_INFO("DHCPv6 client: Release sent.");
+        }
+        else
+        {
+            NS_LOG_INFO("DHCPv6 client: Error while sending Release");
+        }
+
+        dhcpInterface->m_state = State::WAIT_REPLY_AFTER_RELEASE;
+    }
+}
+
+void
+Dhcp6Client::NetHandler(Ptr<Socket> socket)
+{
+    NS_LOG_FUNCTION(this << socket);
+
+    Address from;
+    Ptr<Packet> packet = socket->RecvFrom(from);
+    Dhcp6Header header;
+
+    Inet6SocketAddress senderAddr = Inet6SocketAddress::ConvertFrom(from);
+
+    Ipv6PacketInfoTag interfaceInfo;
+    NS_ASSERT_MSG(packet->RemovePacketTag(interfaceInfo),
+                  "No incoming interface on DHCPv6 message.");
+
+    uint32_t incomingIf = interfaceInfo.GetRecvIf();
+    Ptr<Ipv6> ipv6 = GetNode()->GetObject<Ipv6>();
+    Ptr<NetDevice> iDev = GetNode()->GetDevice(incomingIf);
+    uint32_t iIf = ipv6->GetInterfaceForDevice(iDev);
+    Ptr<InterfaceConfig> dhcpInterface = m_interfaces[iIf];
+
+    if (packet->RemoveHeader(header) == 0 || !dhcpInterface)
+    {
+        return;
+    }
+    if (dhcpInterface->m_state == State::WAIT_ADVERTISE &&
+        header.GetMessageType() == Dhcp6Header::MessageType::ADVERTISE)
+    {
+        NS_LOG_INFO("DHCPv6 client: Received Advertise.");
+        dhcpInterface->m_solicitTimer.Stop();
+        bool check = ValidateAdvertise(header, iDev);
+        if (check)
+        {
+            SendRequest(iDev, header, senderAddr);
+        }
+    }
+    if (dhcpInterface->m_state == State::WAIT_REPLY &&
+        header.GetMessageType() == Dhcp6Header::MessageType::REPLY)
+    {
+        NS_LOG_INFO("DHCPv6 client: Received Reply.");
+
+        dhcpInterface->m_renewEvent.Cancel();
+        dhcpInterface->m_rebindEvent.Cancel();
+        for (auto itr : dhcpInterface->m_releaseEvent)
+        {
+            itr.Cancel();
+        }
+
+        ProcessReply(iDev, header, senderAddr);
+    }
+    if ((dhcpInterface->m_state == State::WAIT_REPLY_AFTER_DECLINE ||
+         dhcpInterface->m_state == State::WAIT_REPLY_AFTER_RELEASE) &&
+        (header.GetMessageType() == Dhcp6Header::MessageType::REPLY))
+    {
+        NS_LOG_INFO("DHCPv6 client: Received Reply.");
+        CheckLeaseStatus(iDev, header, senderAddr);
+    }
+}
+
+void
+Dhcp6Client::LinkStateHandler(bool isUp, int32_t ifIndex)
+{
+    Ptr<Ipv6> ipv6 = GetNode()->GetObject<Ipv6>();
+    Ptr<InterfaceConfig> dhcpInterface = m_interfaces[ifIndex];
+    if (isUp)
+    {
+        NS_LOG_DEBUG("DHCPv6 client: Link up at " << Simulator::Now().As(Time::S));
+        StartApplication();
+    }
+    else
+    {
+        dhcpInterface->Cleanup();
+        m_interfaces[ifIndex] = nullptr;
+        NS_LOG_DEBUG("DHCPv6 client: Link down at " << Simulator::Now().As(Time::S));
+    }
+}
+
+Duid
+Dhcp6Client::GetSelfDuid() const
+{
+    return m_clientDuid;
+}
+
+void
+Dhcp6Client::StartApplication()
+{
+    Ptr<Node> node = GetNode();
+
+    NS_ASSERT_MSG(node, "Dhcp6Client::StartApplication: cannot get the node from the device.");
+
+    Ptr<Ipv6> ipv6 = node->GetObject<Ipv6>();
+    NS_ASSERT_MSG(ipv6, "Dhcp6Client::StartApplication: node does not have IPv6.");
+
+    NS_LOG_DEBUG("Starting DHCPv6 application on node " << node->GetId());
+
+    // Set DHCPv6 callback for each interface of the node.
+    uint32_t nInterfaces = ipv6->GetNInterfaces();
+
+    // We skip interface 0 because it's the Loopback.
+    for (uint32_t ifIndex = 1; ifIndex < nInterfaces; ifIndex++)
+    {
+        Ptr<NetDevice> device = ipv6->GetNetDevice(ifIndex);
+        Ptr<Icmpv6L4Protocol> icmpv6 = DynamicCast<Icmpv6L4Protocol>(
+            ipv6->GetProtocol(Icmpv6L4Protocol::GetStaticProtocolNumber(), ifIndex));
+
+        // If the RA message contains an M flag, the client starts sending Solicits.
+        icmpv6->SetDhcpv6Callback(MakeCallback(&Dhcp6Client::ReceiveMflag, this));
+    }
+}
+
+void
+Dhcp6Client::ReceiveMflag(uint32_t recvInterface)
+{
+    NS_LOG_FUNCTION(this);
+
+    Ptr<Node> node = GetNode();
+    Ptr<Ipv6L3Protocol> ipv6l3 = node->GetObject<Ipv6L3Protocol>();
+
+    if (!m_interfaces[recvInterface])
+    {
+        // Create config object if M flag is received for the first time.
+        Ptr<InterfaceConfig> dhcpInterface = Create<InterfaceConfig>();
+        dhcpInterface->m_client = this;
+        dhcpInterface->m_interfaceIndex = recvInterface;
+        dhcpInterface->m_socket = nullptr;
+        m_interfaces[recvInterface] = dhcpInterface;
+
+        // Add an IAID to the client interface.
+        // Note: There may be multiple IAIDs per interface. We use only one.
+        std::vector<uint32_t> existingIaNaIds;
+        while (true)
+        {
+            uint32_t iaid = m_iaidStream->GetInteger();
+            if (std::find(existingIaNaIds.begin(), existingIaNaIds.end(), iaid) ==
+                existingIaNaIds.end())
+            {
+                dhcpInterface->m_iaids.push_back(iaid);
+                existingIaNaIds.emplace_back(iaid);
+                break;
+            }
+        }
+
+        Ptr<Ipv6Interface> ipv6Interface =
+            node->GetObject<Ipv6L3Protocol>()->GetInterface(recvInterface);
+        ipv6Interface->TraceConnectWithoutContext(
+            "InterfaceStatus",
+            MakeCallback(&Dhcp6Client::LinkStateHandler, this));
+    }
+
+    for (const auto& itr : m_interfaces)
+    {
+        uint32_t interface = itr.first;
+        Ptr<Ipv6> ipv6 = GetNode()->GetObject<Ipv6>();
+        Ptr<NetDevice> device = ipv6->GetNetDevice(interface);
+        Ptr<InterfaceConfig> dhcpInterface = itr.second;
+
+        // Check that RA was received on this interface.
+        if (interface == recvInterface && m_interfaces[interface])
+        {
+            if (!m_interfaces[interface]->m_socket)
+            {
+                Ipv6Address linkLocal =
+                    ipv6l3->GetInterface(interface)->GetLinkLocalAddress().GetAddress();
+                TypeId tid = TypeId::LookupByName("ns3::UdpSocketFactory");
+
+                Ptr<Socket> socket = Socket::CreateSocket(node, tid);
+                socket->Bind(Inet6SocketAddress(linkLocal, Dhcp6Header::CLIENT_PORT));
+                socket->BindToNetDevice(device);
+                socket->SetRecvPktInfo(true);
+                socket->SetRecvCallback(MakeCallback(&Dhcp6Client::NetHandler, this));
+
+                m_interfaces[interface]->m_socket = socket;
+
+                // Introduce a random delay before sending the Solicit message.
+                Simulator::Schedule(Time(MilliSeconds(m_solicitJitter->GetValue())),
+                                    &Dhcp6Client::Boot,
+                                    this,
+                                    device);
+
+                uint32_t minInterval = m_solicitInterval.GetSeconds() / 2;
+                dhcpInterface->m_solicitTimer = TrickleTimer(Seconds(minInterval), 4, 1);
+                dhcpInterface->m_solicitTimer.SetFunction(&Dhcp6Client::Boot, this);
+                dhcpInterface->m_solicitTimer.Enable();
+                break;
+            }
+        }
+    }
+}
+
+void
+Dhcp6Client::Boot(Ptr<NetDevice> device)
+{
+    Ptr<Ipv6> ipv6 = GetNode()->GetObject<Ipv6>();
+    int32_t ifIndex = ipv6->GetInterfaceForDevice(device);
+    Ptr<InterfaceConfig> dhcpInterface = m_interfaces[ifIndex];
+
+    Ptr<Node> node = GetNode();
+    if (m_clientDuid.IsInvalid())
+    {
+        m_clientDuid.Initialize(node);
+    }
+
+    Dhcp6Header header;
+    Ptr<Packet> packet = Create<Packet>();
+
+    // Create a unique transaction ID.
+    dhcpInterface->m_transactId = static_cast<uint32_t>(m_transactionId->GetValue());
+
+    header.SetTransactId(dhcpInterface->m_transactId);
+    header.SetMessageType(Dhcp6Header::MessageType::SOLICIT);
+
+    // Store start time of the message exchange.
+    dhcpInterface->m_msgStartTime = Simulator::Now();
+
+    header.AddElapsedTime(0);
+    header.AddClientIdentifier(m_clientDuid);
+    header.AddOptionRequest(Options::OptionType::OPTION_SOL_MAX_RT);
+
+    // Add IA_NA option.
+
+    for (auto iaid : dhcpInterface->m_iaids)
+    {
+        header.AddIanaOption(iaid,
+                             dhcpInterface->m_renewTime.GetSeconds(),
+                             dhcpInterface->m_rebindTime.GetSeconds());
+    }
+
+    packet->AddHeader(header);
+
+    if ((dhcpInterface->m_socket->SendTo(packet,
+                                         0,
+                                         Inet6SocketAddress(Ipv6Address::GetAllNodesMulticast(),
+                                                            Dhcp6Header::SERVER_PORT))) >= 0)
+    {
+        NS_LOG_INFO("DHCPv6 client: Solicit sent");
+    }
+    else
+    {
+        NS_LOG_INFO("DHCPv6 client: Error while sending Solicit");
+    }
+
+    dhcpInterface->m_state = State::WAIT_ADVERTISE;
+}
+
+void
+Dhcp6Client::StopApplication()
+{
+    NS_LOG_FUNCTION(this);
+
+    for (auto& itr : m_interfaces)
+    {
+        // Close sockets.
+        if (!itr.second)
+        {
+            continue;
+        }
+        itr.second->Cleanup();
+    }
+
+    m_interfaces.clear();
+    m_iaidMap.clear();
+}
+
+} // namespace ns3
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/internet-apps/model/dhcp6-client.h ns-3.45/src/internet-apps/model/dhcp6-client.h
--- ns-3.44/src/internet-apps/model/dhcp6-client.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.45/src/internet-apps/model/dhcp6-client.h	2025-06-01 20:34:45.314701300 -0700
@@ -0,0 +1,279 @@
+/*
+ * Copyright (c) 2024 NITK Surathkal
+ *
+ * SPDX-License-Identifier: GPL-2.0-only
+ *
+ * Author: Kavya Bhat <kavyabhat@gmail.com>
+ *
+ */
+
+#ifndef DHCP6_CLIENT_H
+#define DHCP6_CLIENT_H
+
+#include "dhcp6-duid.h"
+#include "dhcp6-header.h"
+
+#include "ns3/application.h"
+#include "ns3/inet6-socket-address.h"
+#include "ns3/net-device-container.h"
+#include "ns3/random-variable-stream.h"
+#include "ns3/socket.h"
+#include "ns3/traced-callback.h"
+#include "ns3/trickle-timer.h"
+
+#include <optional>
+
+namespace ns3
+{
+
+/**
+ * @ingroup dhcp6
+ *
+ * @class Dhcp6Client
+ * @brief Implements the DHCPv6 client.
+ */
+class Dhcp6Client : public Application
+{
+  public:
+    /**
+     * @brief Get the type ID.
+     * @return the object TypeId
+     */
+    static TypeId GetTypeId();
+
+    Dhcp6Client();
+
+    /**
+     * @brief Get the DUID.
+     * @return The DUID which identifies the client.
+     */
+    Duid GetSelfDuid() const;
+
+    /// State of the DHCPv6 client.
+    enum class State
+    {
+        WAIT_ADVERTISE,           // Waiting for an advertise message
+        WAIT_REPLY,               // Waiting for a reply message
+        RENEW,                    // Renewing the lease
+        WAIT_REPLY_AFTER_DECLINE, // Waiting for a reply after sending a decline message
+        WAIT_REPLY_AFTER_RELEASE, // Waiting for a reply after sending a release message
+    };
+
+    int64_t AssignStreams(int64_t stream) override;
+
+    // protected:
+    void DoDispose() override;
+
+    //  private:
+    void StartApplication() override;
+    void StopApplication() override;
+
+    /**
+     * @ingroup dhcp6
+     *
+     * @class InterfaceConfig
+     * @brief DHCPv6 client config details about each interface on the node.
+     */
+    class InterfaceConfig : public SimpleRefCount<InterfaceConfig>
+    {
+      public:
+        /**
+         * The default constructor.
+         */
+        InterfaceConfig();
+
+        /**
+         * Destructor.
+         */
+        ~InterfaceConfig();
+
+        /// The Dhcp6Client on which the interface is present.
+        Ptr<Dhcp6Client> m_client;
+
+        /// The IPv6 interface index of this configuration.
+        uint32_t m_interfaceIndex;
+
+        /// The socket that has been opened for this interface.
+        Ptr<Socket> m_socket;
+
+        /// The DHCPv6 state of the client interface.
+        State m_state;
+
+        /// The server DUID.
+        Duid m_serverDuid;
+
+        /// The IAIDs associated with this DHCPv6 client interface.
+        std::vector<uint32_t> m_iaids;
+
+        TrickleTimer m_solicitTimer;  //!< TrickleTimer to schedule Solicit messages.
+        Time m_msgStartTime;          //!< Time when message exchange starts.
+        uint32_t m_transactId;        //!< Transaction ID of the client-initiated message.
+        uint8_t m_nAcceptedAddresses; //!< Number of addresses accepted by client.
+
+        /// List of addresses offered to the client.
+        std::vector<Ipv6Address> m_offeredAddresses;
+
+        /// List of addresses to be declined by the client.
+        std::vector<Ipv6Address> m_declinedAddresses;
+
+        Time m_renewTime;     //!< REN_MAX_RT, Time after which lease should be renewed.
+        Time m_rebindTime;    //!< REB_MAX_RT, Time after which client should send a Rebind message.
+        Time m_prefLifetime;  //!< Preferred lifetime of the address.
+        Time m_validLifetime; //!< Valid lifetime of the address.
+        EventId m_renewEvent; //!< Event ID for the Renew event.
+        EventId m_rebindEvent; //!< Event ID for the rebind event
+
+        /// Store all the Event IDs for the addresses being Released.
+        std::vector<EventId> m_releaseEvent;
+
+        /**
+         * @brief Accept the DHCPv6 offer.
+         * @param offeredAddress The IPv6 address that has been accepted.
+         */
+        void AcceptedAddress(const Ipv6Address& offeredAddress);
+
+        /// Callback for the accepted addresses - needed for cleanup.
+        std::optional<Callback<void, const Ipv6Address&>> m_acceptedAddressCb{std::nullopt};
+
+        /**
+         * @brief Add a declined address to the list maintained by the client.
+         * @param offeredAddress The IPv6 address to be declined.
+         */
+        void DeclinedAddress(const Ipv6Address& offeredAddress);
+
+        /// Callback for the declined addresses - needed for cleanup.
+        std::optional<Callback<void, const Ipv6Address&>> m_declinedAddressCb{std::nullopt};
+
+        /**
+         * @brief Send a Decline message to the DHCPv6 server
+         */
+        void DeclineOffer();
+
+        /**
+         * @brief Cleanup the internal callbacks and timers.
+         *
+         * MUST be used before removing an interface to avoid circular references locks.
+         */
+        void Cleanup();
+    };
+
+    /**
+     * @brief Verify the incoming advertise message.
+     * @param header The DHCPv6 header received.
+     * @param iDev The incoming NetDevice.
+     * @return True if the Advertise is valid.
+     */
+    bool ValidateAdvertise(Dhcp6Header header, Ptr<NetDevice> iDev);
+
+    /**
+     * @brief Send a request to the DHCPv6 server.
+     * @param iDev The outgoing NetDevice
+     * @param header The DHCPv6 header
+     * @param server The address of the server
+     */
+    void SendRequest(Ptr<NetDevice> iDev, Dhcp6Header header, Inet6SocketAddress server);
+
+    /**
+     * @brief Send a request to the DHCPv6 server.
+     * @param iDev The outgoing NetDevice
+     * @param header The DHCPv6 header
+     * @param server The address of the server
+     */
+    void ProcessReply(Ptr<NetDevice> iDev, Dhcp6Header header, Inet6SocketAddress server);
+
+    /**
+     * @brief Check lease status after sending a Decline or Release message.
+     * @param iDev The incoming NetDevice
+     * @param header The DHCPv6 header
+     * @param server The address of the server
+     */
+    void CheckLeaseStatus(Ptr<NetDevice> iDev, Dhcp6Header header, Inet6SocketAddress server) const;
+
+    /**
+     * @brief Send a renew message to the DHCPv6 server.
+     * @param interfaceIndex The interface whose leases are to be renewed.
+     */
+    void SendRenew(uint32_t interfaceIndex);
+
+    /**
+     * @brief Send a rebind message to the DHCPv6 server.
+     * @param interfaceIndex The interface whose leases are to be rebound.
+     */
+    void SendRebind(uint32_t interfaceIndex);
+
+    /**
+     * @brief Send a Release message to the DHCPv6 server.
+     * @param address The address whose lease is to be released.
+     */
+    void SendRelease(Ipv6Address address);
+
+    /**
+     * @brief Handles incoming packets from the network
+     * @param socket incoming Socket
+     */
+    void NetHandler(Ptr<Socket> socket);
+
+    /**
+     * @brief Handle changes in the link state.
+     * @param isUp Indicates whether the interface is up.
+     * @param ifIndex The interface index.
+     */
+    void LinkStateHandler(bool isUp, int32_t ifIndex);
+
+    /**
+     * @brief Callback for when an M flag is received.
+     *
+     * The M flag is carried by Router Advertisements (RA), and it is a signal
+     * that the DHCPv6 client must search for a DHCPv6 Server.
+     *
+     * @param recvInterface The interface on which the M flag was received.
+     */
+    void ReceiveMflag(uint32_t recvInterface);
+
+    /**
+     * @brief Used to send the Solicit message and start the DHCPv6 client.
+     * @param device The client interface.
+     */
+    void Boot(Ptr<NetDevice> device);
+
+    /**
+     * @brief Retrieve all existing IAIDs.
+     * @return A list of all IAIDs.
+     */
+    std::vector<uint32_t> GetIaids();
+
+    /// Map each interface to its corresponding configuration details.
+    std::unordered_map<uint32_t, Ptr<InterfaceConfig>> m_interfaces;
+
+    Duid m_clientDuid;                             //!< The client DUID.
+    TracedCallback<const Ipv6Address&> m_newLease; //!< Trace the new lease.
+
+    /// Track the IPv6 Address - IAID association.
+    std::unordered_map<Ipv6Address, uint32_t, Ipv6AddressHash> m_iaidMap;
+
+    /// Random variable to set transaction ID
+    Ptr<RandomVariableStream> m_transactionId;
+
+    Time m_solicitInterval; //!< SOL_MAX_RT, time between solicitations.
+
+    /**
+     * Random jitter before sending the first Solicit. Equivalent to
+     * SOL_MAX_DELAY (RFC 8415, Section 7.6)
+     */
+    Ptr<RandomVariableStream> m_solicitJitter;
+
+    /// Random variable used to create the IAID.
+    Ptr<RandomVariableStream> m_iaidStream;
+};
+
+/**
+ * @brief Stream output operator
+ * @param os output stream
+ * @param h the Dhcp6Client
+ * @return updated stream
+ */
+std::ostream& operator<<(std::ostream& os, const Dhcp6Client& h);
+
+} // namespace ns3
+
+#endif
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/internet-apps/model/dhcp6-duid.cc ns-3.45/src/internet-apps/model/dhcp6-duid.cc
--- ns-3.44/src/internet-apps/model/dhcp6-duid.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.45/src/internet-apps/model/dhcp6-duid.cc	2025-06-01 20:34:45.314701300 -0700
@@ -0,0 +1,234 @@
+/*
+ * Copyright (c) 2024 NITK Surathkal
+ *
+ * SPDX-License-Identifier: GPL-2.0-only
+ *
+ * Author: Kavya Bhat <kavyabhat@gmail.com>
+ *
+ */
+
+#include "dhcp6-duid.h"
+
+#include "ns3/address.h"
+#include "ns3/assert.h"
+#include "ns3/ipv6-l3-protocol.h"
+#include "ns3/log.h"
+#include "ns3/loopback-net-device.h"
+#include "ns3/ptr.h"
+
+namespace ns3
+{
+
+NS_LOG_COMPONENT_DEFINE("Dhcp6Duid");
+
+Duid::Duid()
+{
+    m_duidType = Duid::Type::LL;
+    m_hardwareType = 0;
+    m_time = Time();
+    m_identifier = std::vector<uint8_t>();
+}
+
+bool
+Duid::operator==(const Duid& o) const
+{
+    return (m_duidType == o.m_duidType && m_hardwareType == o.m_hardwareType &&
+            m_identifier == o.m_identifier);
+}
+
+bool
+operator<(const Duid& a, const Duid& b)
+{
+    if (a.m_duidType < b.m_duidType)
+    {
+        return true;
+    }
+    else if (a.m_duidType > b.m_duidType)
+    {
+        return false;
+    }
+    if (a.m_hardwareType < b.m_hardwareType)
+    {
+        return true;
+    }
+    else if (a.m_hardwareType > b.m_hardwareType)
+    {
+        return false;
+    }
+    NS_ASSERT(a.GetLength() == b.GetLength());
+    return a.m_identifier < b.m_identifier;
+}
+
+bool
+Duid::IsInvalid() const
+{
+    return m_identifier.empty();
+}
+
+uint8_t
+Duid::GetLength() const
+{
+    return m_identifier.size();
+}
+
+std::vector<uint8_t>
+Duid::GetIdentifier() const
+{
+    return m_identifier;
+}
+
+Duid::Type
+Duid::GetDuidType() const
+{
+    return m_duidType;
+}
+
+void
+Duid::SetDuidType(Duid::Type duidType)
+{
+    m_duidType = duidType;
+}
+
+uint16_t
+Duid::GetHardwareType() const
+{
+    return m_hardwareType;
+}
+
+void
+Duid::SetHardwareType(uint16_t hardwareType)
+{
+    NS_LOG_FUNCTION(this << hardwareType);
+    m_hardwareType = hardwareType;
+}
+
+void
+Duid::SetDuid(std::vector<uint8_t> identifier)
+{
+    NS_LOG_FUNCTION(this << identifier);
+
+    m_duidType = Type::LL;
+    uint8_t idLen = identifier.size();
+
+    NS_ASSERT_MSG(idLen == 6 || idLen == 8, "Duid: Invalid identifier length.");
+
+    switch (idLen)
+    {
+    case 6:
+        // Ethernet - 48 bit length
+        SetHardwareType(1);
+        break;
+    case 8:
+        // EUI-64 - 64 bit length
+        SetHardwareType(27);
+        break;
+    }
+
+    m_identifier.resize(idLen);
+    m_identifier = identifier;
+}
+
+void
+Duid::Initialize(Ptr<Node> node)
+{
+    Ptr<Ipv6L3Protocol> ipv6 = node->GetObject<Ipv6L3Protocol>();
+    uint32_t nInterfaces = ipv6->GetNInterfaces();
+
+    uint32_t maxAddressLength = 0;
+    Address duidAddress;
+
+    for (uint32_t i = 0; i < nInterfaces; i++)
+    {
+        Ptr<NetDevice> device = ipv6->GetNetDevice(i);
+
+        // Discard the loopback device.
+        if (DynamicCast<LoopbackNetDevice>(device))
+        {
+            continue;
+        }
+
+        // Check if the NetDevice is up.
+        if (device->IsLinkUp())
+        {
+            NS_LOG_DEBUG("Interface " << device->GetIfIndex() << " up on node " << node->GetId());
+            Address address = device->GetAddress();
+            if (address.GetLength() > maxAddressLength)
+            {
+                maxAddressLength = address.GetLength();
+                duidAddress = address;
+            }
+        }
+    }
+
+    NS_ASSERT_MSG(!duidAddress.IsInvalid(), "Duid: No suitable NetDevice found for DUID.");
+
+    NS_LOG_DEBUG("DUID of node " << node->GetId() << " is " << duidAddress);
+
+    // Consider the link-layer address of the first NetDevice in the list.
+    uint8_t buffer[16];
+    duidAddress.CopyTo(buffer);
+
+    std::vector<uint8_t> identifier(duidAddress.GetLength());
+    std::copy(buffer, buffer + duidAddress.GetLength(), identifier.begin());
+    SetDuid(identifier);
+}
+
+Time
+Duid::GetTime() const
+{
+    return m_time;
+}
+
+void
+Duid::SetTime(Time time)
+{
+    NS_LOG_FUNCTION(this << time);
+    m_time = time;
+}
+
+uint32_t
+Duid::GetSerializedSize() const
+{
+    return 4 + m_identifier.size();
+}
+
+void
+Duid::Serialize(Buffer::Iterator start) const
+{
+    Buffer::Iterator i = start;
+    i.WriteHtonU16(static_cast<std::underlying_type_t<Duid::Type>>(m_duidType));
+    i.WriteHtonU16(m_hardwareType);
+
+    for (const auto& byte : m_identifier)
+    {
+        i.WriteU8(byte);
+    }
+}
+
+uint32_t
+Duid::Deserialize(Buffer::Iterator start, uint32_t len)
+{
+    Buffer::Iterator i = start;
+
+    m_duidType = static_cast<Duid::Type>(i.ReadNtohU16());
+    m_hardwareType = i.ReadNtohU16();
+    m_identifier.resize(len);
+
+    for (uint32_t j = 0; j < len; j++)
+    {
+        m_identifier[j] = i.ReadU8();
+    }
+
+    return 4 + m_identifier.size();
+}
+
+size_t
+Duid::DuidHash::operator()(const Duid& x) const noexcept
+{
+    uint8_t duidLen = x.GetLength();
+    std::vector<uint8_t> buffer = x.GetIdentifier();
+
+    std::string s(buffer.begin(), buffer.begin() + duidLen);
+    return std::hash<std::string>{}(s);
+}
+} // namespace ns3
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/internet-apps/model/dhcp6-duid.h ns-3.45/src/internet-apps/model/dhcp6-duid.h
--- ns-3.44/src/internet-apps/model/dhcp6-duid.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.45/src/internet-apps/model/dhcp6-duid.h	2025-06-01 20:34:45.314701300 -0700
@@ -0,0 +1,201 @@
+/*
+ * Copyright (c) 2024 NITK Surathkal
+ *
+ * SPDX-License-Identifier: GPL-2.0-only
+ *
+ * Author: Kavya Bhat <kavyabhat@gmail.com>
+ *
+ */
+
+#ifndef DHCP6_DUID_H
+#define DHCP6_DUID_H
+
+#include "ns3/buffer.h"
+#include "ns3/node.h"
+#include "ns3/nstime.h"
+
+namespace ns3
+{
+
+/**
+ * @ingroup dhcp6
+ *
+ * @class Duid
+ * @brief Implements the unique identifier for DHCPv6.
+ */
+class Duid
+{
+  public:
+    /**
+     * @brief Default constructor.
+     */
+    Duid();
+
+    /// DUID type.
+    enum class Type
+    {
+        LLT = 1, // Link-layer address plus time
+        EN,      // Vendor-assigned unique ID based on Enterprise Number
+        LL,      // Link-layer address
+        UUID,    // Universally Unique Identifier (UUID) [RFC6355]
+    };
+
+    /**
+     * @ingroup dhcp6
+     *
+     * @class DuidHash
+     * @brief Class providing a hash for DUIDs
+     */
+    class DuidHash
+    {
+      public:
+        /**
+         * @brief Returns the hash of a DUID.
+         * @param x the DUID
+         * @return the hash
+         *
+         * This method uses std::hash rather than class Hash
+         * as speed is more important than cryptographic robustness.
+         */
+        size_t operator()(const Duid& x) const noexcept;
+    };
+
+    /**
+     * @brief Initialize the DUID for a client or server.
+     * @param node The node for which the DUID is to be generated.
+     */
+    void Initialize(Ptr<Node> node);
+
+    /**
+     * @brief Check if the DUID is invalid.
+     * @return true if the DUID is invalid.
+     */
+    bool IsInvalid() const;
+
+    /**
+     * @brief Get the DUID type
+     * @return the DUID type.
+     */
+    Type GetDuidType() const;
+
+    /**
+     * @brief Set the DUID type
+     * @param duidType the DUID type.
+     */
+    void SetDuidType(Type duidType);
+
+    /**
+     * @brief Get the hardware type.
+     * @return the hardware type
+     */
+    uint16_t GetHardwareType() const;
+
+    /**
+     * @brief Set the hardware type.
+     * @param hardwareType the hardware type.
+     */
+    void SetHardwareType(uint16_t hardwareType);
+
+    /**
+     * @brief Set the identifier as the DUID.
+     * @param identifier the identifier of the node.
+     */
+    void SetDuid(std::vector<uint8_t> identifier);
+
+    /**
+     * @brief Get the time at which the DUID is generated.
+     * @return the timestamp.
+     */
+    Time GetTime() const;
+
+    /**
+     * @brief Get the length of the DUID.
+     * @return the DUID length.
+     */
+    uint8_t GetLength() const;
+
+    /**
+     * @brief Set the time at which DUID is generated.
+     * @param time the timestamp.
+     */
+    void SetTime(Time time);
+
+    /**
+     * @brief Get the DUID serialized size.
+     * @return The DUID serialized sized in bytes.
+     */
+    uint32_t GetSerializedSize() const;
+
+    /**
+     * @brief Serialize the DUID.
+     * @param start The buffer iterator.
+     */
+    void Serialize(Buffer::Iterator start) const;
+
+    /**
+     * @brief Deserialize the DUID.
+     * @param start The buffer iterator.
+     * @param len The number of bytes to be read.
+     * @return The number of bytes read.
+     */
+    uint32_t Deserialize(Buffer::Iterator start, uint32_t len);
+
+    /**
+     * @brief Comparison operator
+     * @param duid header to compare
+     * @return true if the headers are equal
+     */
+    bool operator==(const Duid& duid) const;
+
+    /**
+     * @brief Less than operator.
+     *
+     * @param a the first operand
+     * @param b the first operand
+     * @returns true if the operand a is less than operand b
+     */
+    friend bool operator<(const Duid& a, const Duid& b);
+
+    // TypeId GetInstanceTypeId() const override;
+    // void Print(std::ostream& os) const override;
+    // uint32_t GetSerializedSize() const override;
+    // void Serialize(Buffer::Iterator start) const override;
+    // uint32_t Deserialize(Buffer::Iterator start) override;
+
+  private:
+    /**
+     * @brief Return the identifier of the node.
+     * @return the identifier.
+     */
+    std::vector<uint8_t> GetIdentifier() const;
+
+    /**
+     * Type of the DUID.
+     * We currently use only DUID-LL, based on the link-layer address.
+     */
+    Type m_duidType;
+
+    uint16_t m_hardwareType;           //!< Valid hardware type assigned by IANA.
+    Time m_time;                       //!< Time at which the DUID is generated. Used in DUID-LLT.
+    std::vector<uint8_t> m_identifier; //!< Identifier of the node in bytes.
+};
+
+/**
+ * @brief Stream output operator
+ * @param os output stream
+ * @param duid The reference to the DUID object.
+ * @return updated stream
+ */
+std::ostream& operator<<(std::ostream& os, const Duid& duid);
+
+/**
+ * Stream extraction operator
+ * @param is input stream
+ * @param duid The reference to the DUID object.
+ * @return std::istream
+ */
+std::istream& operator>>(std::istream& is, Duid& duid);
+
+} // namespace ns3
+
+#endif
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/internet-apps/model/dhcp6-header.cc ns-3.45/src/internet-apps/model/dhcp6-header.cc
--- ns-3.44/src/internet-apps/model/dhcp6-header.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.45/src/internet-apps/model/dhcp6-header.cc	2025-06-01 20:34:45.314701300 -0700
@@ -0,0 +1,673 @@
+/*
+ * Copyright (c) 2024 NITK Surathkal
+ *
+ * SPDX-License-Identifier: GPL-2.0-only
+ *
+ * Author: Kavya Bhat <kavyabhat@gmail.com>
+ *
+ */
+
+#include "dhcp6-header.h"
+
+#include "dhcp6-duid.h"
+
+#include "ns3/address-utils.h"
+#include "ns3/assert.h"
+#include "ns3/log.h"
+#include "ns3/simulator.h"
+
+#include <bitset>
+
+namespace ns3
+{
+
+NS_LOG_COMPONENT_DEFINE("Dhcp6Header");
+
+Dhcp6Header::Dhcp6Header()
+    : m_len(4),
+      m_msgType(MessageType::INIT),
+      m_transactId(0)
+{
+    m_solMaxRt = 7200;
+}
+
+Dhcp6Header::MessageType
+Dhcp6Header::GetMessageType() const
+{
+    return m_msgType;
+}
+
+void
+Dhcp6Header::SetMessageType(MessageType msgType)
+{
+    NS_LOG_FUNCTION(this << (uint8_t)msgType);
+    m_msgType = msgType;
+}
+
+uint32_t
+Dhcp6Header::GetTransactId() const
+{
+    return m_transactId;
+}
+
+void
+Dhcp6Header::SetTransactId(uint32_t transactId)
+{
+    NS_LOG_FUNCTION(this << transactId);
+    m_transactId = transactId;
+}
+
+void
+Dhcp6Header::AddMessageLength(uint32_t len)
+{
+    m_len += len;
+}
+
+void
+Dhcp6Header::ResetOptions()
+{
+    m_len = 4;
+    m_options.clear();
+}
+
+TypeId
+Dhcp6Header::GetTypeId()
+{
+    static TypeId tid = TypeId("ns3::Dhcp6Header")
+                            .SetParent<Header>()
+                            .SetGroupName("Internet-Apps")
+                            .AddConstructor<Dhcp6Header>();
+    return tid;
+}
+
+TypeId
+Dhcp6Header::GetInstanceTypeId() const
+{
+    return GetTypeId();
+}
+
+IdentifierOption
+Dhcp6Header::GetClientIdentifier()
+{
+    return m_clientIdentifier;
+}
+
+IdentifierOption
+Dhcp6Header::GetServerIdentifier()
+{
+    return m_serverIdentifier;
+}
+
+StatusCodeOption
+Dhcp6Header::GetStatusCodeOption()
+{
+    return m_statusCode;
+}
+
+std::vector<IaOptions>
+Dhcp6Header::GetIanaOptions()
+{
+    return m_ianaList;
+}
+
+void
+Dhcp6Header::AddElapsedTime(uint16_t timestamp)
+{
+    // Set the code, length, value.
+    m_elapsedTime.SetOptionCode(Options::OptionType::OPTION_ELAPSED_TIME);
+    m_elapsedTime.SetOptionLength(2);
+    m_elapsedTime.SetOptionValue(timestamp);
+
+    // Increase the total length by 6 bytes.
+    AddMessageLength(6);
+
+    // Set the option flag to true.
+    m_options[Options::OptionType::OPTION_ELAPSED_TIME] = true;
+}
+
+void
+Dhcp6Header::AddClientIdentifier(Duid duid)
+{
+    AddIdentifierOption(m_clientIdentifier, Options::OptionType::OPTION_CLIENTID, duid);
+}
+
+void
+Dhcp6Header::AddServerIdentifier(Duid duid)
+{
+    AddIdentifierOption(m_serverIdentifier, Options::OptionType::OPTION_SERVERID, duid);
+}
+
+void
+Dhcp6Header::AddIdentifierOption(IdentifierOption& identifier,
+                                 Options::OptionType optionType,
+                                 Duid duid)
+{
+    // DUID type (2 bytes) + hw type (2 bytes) + Link-layer Address (variable)
+    uint16_t duidLength = 2 + 2 + duid.GetLength();
+
+    // Set the option code, length, hardware type, link layer address.
+    identifier.SetOptionCode(optionType);
+    identifier.SetOptionLength(duidLength);
+    identifier.SetDuid(duid);
+
+    // Increase the total length by (4 + duidLength) bytes.
+    AddMessageLength(4 + duidLength);
+
+    // Set the option flag to true.
+    m_options[optionType] = true;
+}
+
+RequestOptions
+Dhcp6Header::GetOptionRequest()
+{
+    return m_optionRequest;
+}
+
+void
+Dhcp6Header::AddOptionRequest(Options::OptionType optionType)
+{
+    // Check if this is the first option request.
+    if (m_optionRequest.GetOptionLength() == 0)
+    {
+        AddMessageLength(4);
+    }
+
+    // Set the option code, length, and add the requested option.
+    m_optionRequest.SetOptionCode(Options::OptionType::OPTION_ORO);
+    m_optionRequest.SetOptionLength(m_optionRequest.GetOptionLength() + 2);
+    m_optionRequest.AddRequestedOption(optionType);
+
+    // Increase the total length by 2 bytes.
+    AddMessageLength(2);
+
+    // Set the option flag to true.
+    m_options[Options::OptionType::OPTION_ORO] = true;
+}
+
+void
+Dhcp6Header::HandleOptionRequest(std::vector<Options::OptionType> requestedOptions)
+{
+    // Currently, only Options::OptionType::OPTION_SOL_MAX_RT is supported.
+    for (auto itr : requestedOptions)
+    {
+        switch (itr)
+        {
+        case Options::OptionType::OPTION_SOL_MAX_RT:
+            AddSolMaxRt();
+            break;
+        default:
+            NS_LOG_WARN("Requested Option not supported.");
+        }
+    }
+}
+
+void
+Dhcp6Header::AddSolMaxRt()
+{
+    // Increase the total message length.
+    // 4 bytes - for option code + option length.
+    // 4 bytes - for the option value.
+    AddMessageLength(4 + 4);
+
+    m_options[Options::OptionType::OPTION_SOL_MAX_RT] = true;
+}
+
+void
+Dhcp6Header::AddIanaOption(uint32_t iaid, uint32_t t1, uint32_t t2)
+{
+    AddIaOption(Options::OptionType::OPTION_IA_NA, iaid, t1, t2);
+}
+
+void
+Dhcp6Header::AddIataOption(uint32_t iaid)
+{
+    AddIaOption(Options::OptionType::OPTION_IA_TA, iaid);
+}
+
+void
+Dhcp6Header::AddIaOption(Options::OptionType optionType, uint32_t iaid, uint32_t t1, uint32_t t2)
+{
+    // Create a new identity association.
+    IaOptions newIa;
+    newIa.SetOptionCode(optionType);
+
+    // Minimum option length of an IA is 12 bytes.
+    uint16_t optionLength = 12;
+
+    newIa.SetOptionLength(optionLength);
+    newIa.SetIaid(iaid);
+    newIa.SetT1(t1);
+    newIa.SetT2(t2);
+
+    // Check if the IA is to be added to the list of IANA or IATA options.
+    // If the IAID is already present, it is not added.
+    switch (optionType)
+    {
+    case Options::OptionType::OPTION_IA_NA: {
+        bool iaidPresent = false;
+        for (const auto& itr : m_ianaList)
+        {
+            if (itr.GetIaid() == newIa.GetIaid())
+            {
+                iaidPresent = true;
+                break;
+            }
+        }
+
+        if (!iaidPresent)
+        {
+            m_ianaList.push_back(newIa);
+            AddMessageLength(4 + optionLength);
+        }
+        break;
+    }
+
+    case Options::OptionType::OPTION_IA_TA: {
+        bool iaidPresent = false;
+        for (const auto& itr : m_iataList)
+        {
+            if (itr.GetIaid() == newIa.GetIaid())
+            {
+                iaidPresent = true;
+                break;
+            }
+        }
+
+        if (!iaidPresent)
+        {
+            m_iataList.push_back(newIa);
+            AddMessageLength(4 + optionLength);
+        }
+        break;
+    }
+
+    default:
+        break;
+    }
+
+    // Set the option flag to true.
+    m_options[optionType] = true;
+}
+
+void
+Dhcp6Header::AddAddress(uint32_t iaid,
+                        Ipv6Address address,
+                        uint32_t prefLifetime,
+                        uint32_t validLifetime)
+{
+    bool isIana = false;
+    bool isIata = false;
+
+    // Check if IAID corresponds to an IANA option.
+    auto itr = m_ianaList.begin();
+    while (itr != m_ianaList.end())
+    {
+        if (iaid == (*itr).GetIaid())
+        {
+            isIana = true;
+            break;
+        }
+        itr++;
+    }
+
+    // Else, check if IAID corresponds to an IATA option.
+    if (!isIana)
+    {
+        itr = m_iataList.begin();
+        while (itr != m_iataList.end())
+        {
+            if (iaid == (*itr).GetIaid())
+            {
+                isIata = true;
+                break;
+            }
+            itr++;
+        }
+    }
+
+    if (!isIana && !isIata)
+    {
+        NS_LOG_ERROR("Given IAID does not exist, cannot add address.");
+    }
+
+    IaAddressOption adrOpt;
+    adrOpt.SetOptionCode(Options::OptionType::OPTION_IAADDR);
+
+    // Set length of IA Address option without including additional option list.
+    adrOpt.SetOptionLength(24);
+    adrOpt.SetIaAddress(address);
+    adrOpt.SetPreferredLifetime(prefLifetime);
+    adrOpt.SetValidLifetime(validLifetime);
+
+    (*itr).m_iaAddressOption.push_back(adrOpt);
+
+    // Add the address option length to the overall IANA or IATA length.
+    (*itr).SetOptionLength((*itr).GetOptionLength() + 28);
+
+    // Increase the total message length.
+    AddMessageLength(4 + 24);
+}
+
+std::map<Options::OptionType, bool>
+Dhcp6Header::GetOptionList()
+{
+    return m_options;
+}
+
+void
+Dhcp6Header::AddStatusCode(Options::StatusCodeValues status, std::string statusMsg)
+{
+    m_statusCode.SetOptionCode(Options::OptionType::OPTION_STATUS_CODE);
+    m_statusCode.SetStatusCode(status);
+    m_statusCode.SetStatusMessage(statusMsg);
+
+    m_statusCode.SetOptionLength(2 + m_statusCode.GetStatusMessage().length());
+
+    // Increase the total message length.
+    AddMessageLength(4 + m_statusCode.GetOptionLength());
+
+    // Set the option flag to true.
+    m_options[Options::OptionType::OPTION_STATUS_CODE] = true;
+}
+
+uint32_t
+Dhcp6Header::GetSerializedSize() const
+{
+    return m_len;
+}
+
+void
+Dhcp6Header::Print(std::ostream& os) const
+{
+    os << "(type=" << +(uint8_t)m_msgType << ")";
+}
+
+void
+Dhcp6Header::Serialize(Buffer::Iterator start) const
+{
+    Buffer::Iterator i = start;
+    uint32_t mTTid = (uint32_t)m_msgType << 24 | m_transactId;
+    i.WriteHtonU32(mTTid);
+
+    if (m_options.find(Options::OptionType::OPTION_CLIENTID) != m_options.end())
+    {
+        i.WriteHtonU16((uint16_t)m_clientIdentifier.GetOptionCode());
+        i.WriteHtonU16(m_clientIdentifier.GetOptionLength());
+        Duid duid = m_clientIdentifier.GetDuid();
+        uint32_t size = duid.GetSerializedSize();
+        duid.Serialize(i);
+        i.Next(size);
+    }
+    if (m_options.find(Options::OptionType::OPTION_SERVERID) != m_options.end())
+    {
+        i.WriteHtonU16((uint16_t)m_serverIdentifier.GetOptionCode());
+        i.WriteHtonU16(m_serverIdentifier.GetOptionLength());
+        Duid duid = m_serverIdentifier.GetDuid();
+        uint32_t size = duid.GetSerializedSize();
+        duid.Serialize(i);
+        i.Next(size);
+    }
+    if (m_options.find(Options::OptionType::OPTION_IA_NA) != m_options.end())
+    {
+        for (const auto& itr : m_ianaList)
+        {
+            i.WriteHtonU16((uint16_t)itr.GetOptionCode());
+            i.WriteHtonU16(itr.GetOptionLength());
+            i.WriteHtonU32(itr.GetIaid());
+            i.WriteHtonU32(itr.GetT1());
+            i.WriteHtonU32(itr.GetT2());
+
+            std::vector<IaAddressOption> iaAddresses = itr.m_iaAddressOption;
+            for (const auto& iaItr : iaAddresses)
+            {
+                i.WriteHtonU16((uint16_t)iaItr.GetOptionCode());
+                i.WriteHtonU16(iaItr.GetOptionLength());
+
+                Address addr = iaItr.GetIaAddress();
+                uint8_t addrBuf[16];
+                addr.CopyTo(addrBuf);
+                i.Write(addrBuf, 16);
+                i.WriteHtonU32(iaItr.GetPreferredLifetime());
+                i.WriteHtonU32(iaItr.GetValidLifetime());
+            }
+        }
+    }
+    if (m_options.find(Options::OptionType::OPTION_ELAPSED_TIME) != m_options.end())
+    {
+        i.WriteHtonU16((uint16_t)m_elapsedTime.GetOptionCode());
+        i.WriteHtonU16(m_elapsedTime.GetOptionLength());
+        i.WriteHtonU16(m_elapsedTime.GetOptionValue());
+    }
+    if (m_options.find(Options::OptionType::OPTION_ORO) != m_options.end())
+    {
+        i.WriteHtonU16((uint16_t)m_optionRequest.GetOptionCode());
+        i.WriteHtonU16(m_optionRequest.GetOptionLength());
+
+        std::vector<Options::OptionType> requestedOptions = m_optionRequest.GetRequestedOptions();
+        for (const auto& itr : requestedOptions)
+        {
+            i.WriteHtonU16(static_cast<uint16_t>(itr));
+        }
+    }
+    if (m_options.find(Options::OptionType::OPTION_SOL_MAX_RT) != m_options.end())
+    {
+        i.WriteHtonU16((uint16_t)Options::OptionType::OPTION_SOL_MAX_RT);
+        i.WriteHtonU16(4);
+        i.WriteHtonU32(m_solMaxRt);
+    }
+    if (m_options.find(Options::OptionType::OPTION_STATUS_CODE) != m_options.end())
+    {
+        i.WriteHtonU16((uint16_t)Options::OptionType::OPTION_STATUS_CODE);
+        i.WriteHtonU16(m_statusCode.GetOptionLength());
+        i.WriteHtonU16((uint16_t)m_statusCode.GetStatusCode());
+
+        // Considering a maximum message length of 128 bytes (arbitrary).
+        uint8_t strBuf[128];
+        m_statusCode.GetStatusMessage().copy((char*)strBuf,
+                                             m_statusCode.GetStatusMessage().length());
+        strBuf[m_statusCode.GetOptionLength() - 2] = '\0';
+
+        i.Write(strBuf, m_statusCode.GetStatusMessage().length());
+    }
+}
+
+uint32_t
+Dhcp6Header::Deserialize(Buffer::Iterator start)
+{
+    Buffer::Iterator i = start;
+    uint32_t cLen = i.GetSize();
+
+    uint32_t mTTid = i.ReadNtohU32();
+    m_msgType = (MessageType)(mTTid >> 24);
+    m_transactId = mTTid & 0x00FFFFFF;
+
+    uint32_t len = 4;
+    uint16_t option;
+    bool loop = true;
+    do
+    {
+        if (len + 2 <= cLen)
+        {
+            option = i.ReadNtohU16();
+            len += 2;
+        }
+        else
+        {
+            m_len = len;
+            return m_len;
+        }
+
+        auto opt = static_cast<Options::OptionType>(option);
+        switch (opt)
+        {
+        case Options::OptionType::OPTION_CLIENTID:
+            NS_LOG_INFO("Client Identifier Option");
+            if (len + 2 <= cLen)
+            {
+                m_clientIdentifier.SetOptionCode(opt);
+                m_clientIdentifier.SetOptionLength(i.ReadNtohU16());
+                len += 2;
+                if (len + m_clientIdentifier.GetOptionLength() <= cLen)
+                {
+                    uint32_t duidLength = m_clientIdentifier.GetOptionLength();
+
+                    // Read DUID.
+                    Duid duid;
+                    uint32_t read = duid.Deserialize(i, duidLength - 4);
+                    i.Next(read);
+                    m_clientIdentifier.SetDuid(duid);
+                    len += m_clientIdentifier.GetOptionLength();
+                }
+            }
+            break;
+
+        case Options::OptionType::OPTION_SERVERID:
+            NS_LOG_INFO("Server ID Option");
+            if (len + 2 <= cLen)
+            {
+                m_serverIdentifier.SetOptionCode(opt);
+                m_serverIdentifier.SetOptionLength(i.ReadNtohU16());
+                len += 2;
+            }
+            if (len + m_clientIdentifier.GetOptionLength() <= cLen)
+            {
+                uint32_t duidLength = m_serverIdentifier.GetOptionLength();
+
+                // Read DUID.
+                Duid duid;
+                uint32_t read = duid.Deserialize(i, duidLength - 4);
+                i.Next(read);
+                m_serverIdentifier.SetDuid(duid);
+                len += m_serverIdentifier.GetOptionLength();
+            }
+            break;
+
+        case Options::OptionType::OPTION_IA_NA: {
+            NS_LOG_INFO("IANA Option");
+            IaOptions iana;
+            uint32_t iaAddrOptLen = 0;
+            if (len + 2 <= cLen)
+            {
+                iana.SetOptionCode(opt);
+                iana.SetOptionLength(i.ReadNtohU16());
+                iaAddrOptLen = iana.GetOptionLength();
+                len += 2;
+            }
+
+            if (len + 12 <= cLen)
+            {
+                iana.SetIaid(i.ReadNtohU32());
+                iana.SetT1(i.ReadNtohU32());
+                iana.SetT2(i.ReadNtohU32());
+                len += 12;
+                iaAddrOptLen -= 12;
+            }
+
+            uint32_t readLen = 0;
+            while (readLen < iaAddrOptLen)
+            {
+                IaAddressOption iaAddrOpt;
+                iaAddrOpt.SetOptionCode(static_cast<Options::OptionType>(i.ReadNtohU16()));
+                iaAddrOpt.SetOptionLength(i.ReadNtohU16());
+
+                uint8_t addrBuf[16];
+                i.Read(addrBuf, 16);
+                iaAddrOpt.SetIaAddress(Ipv6Address(addrBuf));
+
+                iaAddrOpt.SetPreferredLifetime(i.ReadNtohU32());
+                iaAddrOpt.SetValidLifetime(i.ReadNtohU32());
+
+                iana.m_iaAddressOption.push_back(iaAddrOpt);
+                len += 4 + iaAddrOpt.GetOptionLength();
+
+                readLen += 4 + iaAddrOpt.GetOptionLength();
+            }
+            m_ianaList.push_back(iana);
+            m_options[Options::OptionType::OPTION_IA_NA] = true;
+            break;
+        }
+
+        case Options::OptionType::OPTION_ELAPSED_TIME:
+            NS_LOG_INFO("Elapsed Time Option");
+            if (len + 4 <= cLen)
+            {
+                m_elapsedTime.SetOptionCode(opt);
+                m_elapsedTime.SetOptionLength(i.ReadNtohU16());
+                m_elapsedTime.SetOptionValue(i.ReadNtohU16());
+                m_options[Options::OptionType::OPTION_ELAPSED_TIME] = true;
+                len += 4;
+            }
+            else
+            {
+                NS_LOG_WARN("Malformed Packet");
+                return 0;
+            }
+            break;
+
+        case Options::OptionType::OPTION_ORO:
+            NS_LOG_INFO("Option Request Option");
+            if (len + 2 <= cLen)
+            {
+                m_optionRequest.SetOptionCode(opt);
+                m_optionRequest.SetOptionLength(i.ReadNtohU16());
+                len += 2;
+            }
+            while (len + 2 <= cLen)
+            {
+                m_optionRequest.AddRequestedOption(
+                    static_cast<Options::OptionType>(i.ReadNtohU16()));
+                len += 2;
+            }
+            m_options[Options::OptionType::OPTION_ORO] = true;
+            break;
+
+        case Options::OptionType::OPTION_SOL_MAX_RT:
+            NS_LOG_INFO("Solicit Max RT Option");
+            if (len + 6 <= cLen)
+            {
+                i.ReadNtohU16();
+                m_solMaxRt = i.ReadNtohU32();
+                len += 6;
+            }
+            m_options[Options::OptionType::OPTION_SOL_MAX_RT] = true;
+            break;
+
+        case Options::OptionType::OPTION_STATUS_CODE:
+            NS_LOG_INFO("Status Code Option");
+            if (len + 2 <= cLen)
+            {
+                m_statusCode.SetOptionCode(opt);
+                m_statusCode.SetOptionLength(i.ReadNtohU16());
+                len += 2;
+            }
+            if (len + 2 <= cLen)
+            {
+                m_statusCode.SetStatusCode((Options::StatusCodeValues)i.ReadNtohU16());
+                len += 2;
+            }
+
+            if (len + (m_statusCode.GetOptionLength() - 2) <= cLen)
+            {
+                uint8_t msgLength = m_statusCode.GetOptionLength() - 2;
+                uint8_t strBuf[128];
+                i.Read(strBuf, msgLength);
+                strBuf[msgLength] = '\0';
+
+                std::string statusMsg((char*)strBuf);
+                m_statusCode.SetStatusMessage(statusMsg);
+                len += msgLength;
+            }
+            m_options[Options::OptionType::OPTION_STATUS_CODE] = true;
+            break;
+
+        default:
+            NS_LOG_WARN("Unidentified Option " << option);
+            NS_LOG_WARN("Malformed Packet");
+            return 0;
+        }
+    } while (loop);
+
+    m_len = len;
+    return m_len;
+}
+} // namespace ns3
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/internet-apps/model/dhcp6-header.h ns-3.45/src/internet-apps/model/dhcp6-header.h
--- ns-3.44/src/internet-apps/model/dhcp6-header.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.45/src/internet-apps/model/dhcp6-header.h	2025-06-01 20:34:45.314701300 -0700
@@ -0,0 +1,287 @@
+/*
+ * Copyright (c) 2024 NITK Surathkal
+ *
+ * SPDX-License-Identifier: GPL-2.0-only
+ *
+ * Author: Kavya Bhat <kavyabhat@gmail.com>
+ *
+ */
+
+#ifndef DHCP6_HEADER_H
+#define DHCP6_HEADER_H
+
+#include "dhcp6-duid.h"
+#include "dhcp6-options.h"
+
+#include "ns3/address.h"
+#include "ns3/buffer.h"
+#include "ns3/header.h"
+#include "ns3/ipv6-address.h"
+#include "ns3/ptr.h"
+#include "ns3/random-variable-stream.h"
+
+namespace ns3
+{
+
+/**
+ * @ingroup internet-apps
+ * @defgroup dhcp6 DHCPv6 Client and Server
+ */
+
+/**
+ * @ingroup dhcp6
+ *
+ * @class Dhcp6Header
+ * @brief Implements the DHCPv6 header.
+ */
+class Dhcp6Header : public Header
+{
+  public:
+    /**
+     * @brief Get the type ID.
+     * @return the object TypeId
+     */
+    static TypeId GetTypeId();
+
+    /**
+     * @brief Default constructor.
+     */
+    Dhcp6Header();
+
+    /**
+     * Enum to identify the message type.
+     * RELAY_FORW, RELAY_REPL message types are not currently implemented.
+     * These symbols and values are defined in [RFC 8415,
+     * section 7.3](https://datatracker.ietf.org/doc/html/rfc8415#section-7.3)
+     */
+    enum class MessageType
+    {
+        INIT = 0, // Added for initialization
+        SOLICIT = 1,
+        ADVERTISE = 2,
+        REQUEST = 3,
+        CONFIRM = 4,
+        RENEW = 5,
+        REBIND = 6,
+        REPLY = 7,
+        RELEASE = 8,
+        DECLINE = 9,
+        RECONFIGURE = 10,
+        INFORMATION_REQUEST = 11,
+        RELAY_FORW = 12,
+        RELAY_REPL = 13
+    };
+
+    /**
+     * @brief Get the type of message.
+     * @return integer corresponding to the message type.
+     */
+    MessageType GetMessageType() const;
+
+    /**
+     * @brief Set the message type.
+     * @param msgType integer corresponding to the message type.
+     */
+    void SetMessageType(MessageType msgType);
+
+    /**
+     * @brief Get the transaction ID.
+     * @return the 32-bit transaction ID
+     */
+    uint32_t GetTransactId() const;
+
+    /**
+     * @brief Set the transaction ID.
+     * @param transactId A 32-bit transaction ID.
+     */
+    void SetTransactId(uint32_t transactId);
+
+    /**
+     * @brief Reset all options.
+     */
+    void ResetOptions();
+
+    /**
+     * @brief Get the client identifier.
+     * @return the client identifier option.
+     */
+    IdentifierOption GetClientIdentifier();
+
+    /**
+     * @brief Get the server identifier.
+     * @return the server identifier option.
+     */
+    IdentifierOption GetServerIdentifier();
+
+    /**
+     * @brief Get the list of IA_NA options.
+     * @return the list of IA_NA options.
+     */
+    std::vector<IaOptions> GetIanaOptions();
+
+    /**
+     * @brief Get the status code of the operation.
+     * @return the status code option.
+     */
+    StatusCodeOption GetStatusCodeOption();
+
+    /**
+     * @brief Set the elapsed time option.
+     * @param timestamp the time at which the client began the exchange.
+     */
+    void AddElapsedTime(uint16_t timestamp);
+
+    /**
+     * @brief Add the client identifier option.
+     * @param duid The DUID which identifies the client.
+     */
+    void AddClientIdentifier(Duid duid);
+
+    /**
+     * @brief Add the server identifier option.
+     * @param duid The DUID which identifies the server.
+     */
+    void AddServerIdentifier(Duid duid);
+
+    /**
+     * @brief Request additional options.
+     * @param optionType the option to be requested.
+     */
+    void AddOptionRequest(Options::OptionType optionType);
+
+    /**
+     * @brief Add the status code option.
+     * @param statusCode the status code of the operation.
+     * @param statusMsg the status message.
+     */
+    void AddStatusCode(Options::StatusCodeValues statusCode, std::string statusMsg);
+
+    /**
+     * @brief Add IANA option.
+     * @param iaid
+     * @param t1
+     * @param t2
+     */
+    void AddIanaOption(uint32_t iaid, uint32_t t1, uint32_t t2);
+
+    /**
+     * @brief Add IATA option.
+     * @param iaid
+     */
+    void AddIataOption(uint32_t iaid);
+
+    /**
+     * @brief Add IA address option to the IANA or IATA.
+     * @param iaid the unique identifier of the identity association.
+     * @param address The IPv6 address to be offered.
+     * @param prefLifetime the preferred lifetime in seconds.
+     * @param validLifetime the valid lifetime in seconds.
+     */
+    void AddAddress(uint32_t iaid,
+                    Ipv6Address address,
+                    uint32_t prefLifetime,
+                    uint32_t validLifetime);
+
+    /**
+     * @brief Get the option request option.
+     * @return the option request option.
+     */
+    RequestOptions GetOptionRequest();
+
+    /**
+     * @brief Handle all options requested by client.
+     * @param requestedOptions the options requested by the client.
+     */
+    void HandleOptionRequest(std::vector<Options::OptionType> requestedOptions);
+
+    /**
+     * @brief Add the SOL_MAX_RT option.
+     */
+    void AddSolMaxRt();
+
+    /**
+     * @brief Get list of all options set in the header.
+     * @return the list of options.
+     */
+    std::map<Options::OptionType, bool> GetOptionList();
+
+    /**
+     * @brief The port number of the DHCPv6 client.
+     */
+    static const uint16_t CLIENT_PORT = 546;
+
+    /**
+     * @brief The port number of the DHCPv6 server.
+     */
+    static const uint16_t SERVER_PORT = 547;
+
+  private:
+    TypeId GetInstanceTypeId() const override;
+    void Print(std::ostream& os) const override;
+    uint32_t GetSerializedSize() const override;
+    void Serialize(Buffer::Iterator start) const override;
+    uint32_t Deserialize(Buffer::Iterator start) override;
+
+    /**
+     * @brief Update the message length.
+     * @param len The length to be added to the total.
+     */
+    void AddMessageLength(uint32_t len);
+
+    /**
+     * @brief Add an identifier option to the header.
+     * @param identifier the client or server identifier option object.
+     * @param optionType identify whether to add a client or server identifier.
+     * @param duid The unique identifier for the client or server.
+     */
+    void AddIdentifierOption(IdentifierOption& identifier,
+                             Options::OptionType optionType,
+                             Duid duid);
+
+    /**
+     * @brief Add IANA or IATA option to the header.
+     * @param optionType identify whether to add an IANA or IATA.
+     * @param iaid
+     * @param t1
+     * @param t2
+     */
+    void AddIaOption(Options::OptionType optionType,
+                     uint32_t iaid,
+                     uint32_t t1 = 0,
+                     uint32_t t2 = 0);
+
+    uint32_t m_len;                      //!< The length of the message.
+    MessageType m_msgType;               //!< The message type.
+    IdentifierOption m_clientIdentifier; //!< The client identifier option.
+    IdentifierOption m_serverIdentifier; //!< The server identifier option.
+    std::vector<IaOptions> m_ianaList;   //!< Vector of IA_NA options.
+    std::vector<IaOptions> m_iataList;   //!< Vector of IA_TA options.
+    uint32_t m_solMaxRt;                 //!< Default value for SOL_MAX_RT option.
+
+    /**
+     * The transaction ID calculated by the client or the server.
+     * This is a 24-bit integer.
+     */
+    uint32_t m_transactId : 24;
+
+    /**
+     * Options present in the header, indexed by option code.
+     * TODO: Use std::set instead.
+     */
+    std::map<Options::OptionType, bool> m_options;
+
+    /// (optional) The status code of the operation just performed.
+    StatusCodeOption m_statusCode;
+
+    /// List of additional options requested.
+    RequestOptions m_optionRequest;
+
+    /// The preference value for the server.
+    PreferenceOption m_preference;
+
+    /// The amount of time since the client began the transaction.
+    ElapsedTimeOption m_elapsedTime;
+};
+} // namespace ns3
+
+#endif
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/internet-apps/model/dhcp6-options.cc ns-3.45/src/internet-apps/model/dhcp6-options.cc
--- ns-3.44/src/internet-apps/model/dhcp6-options.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.45/src/internet-apps/model/dhcp6-options.cc	2025-06-01 20:34:45.315701200 -0700
@@ -0,0 +1,298 @@
+/*
+ * Copyright (c) 2024 NITK Surathkal
+ *
+ * SPDX-License-Identifier: GPL-2.0-only
+ *
+ * Author: Kavya Bhat <kavyabhat@gmail.com>
+ *
+ */
+
+#include "dhcp6-options.h"
+
+#include "dhcp6-duid.h"
+
+#include "ns3/address-utils.h"
+#include "ns3/assert.h"
+#include "ns3/log.h"
+#include "ns3/loopback-net-device.h"
+#include "ns3/ptr.h"
+#include "ns3/simulator.h"
+
+namespace ns3
+{
+
+NS_LOG_COMPONENT_DEFINE("Dhcp6Options");
+
+Options::Options()
+{
+    m_optionCode = OptionType::OPTION_INIT;
+    m_optionLength = 0;
+}
+
+Options::Options(OptionType code, uint16_t length)
+{
+    NS_LOG_FUNCTION(this << static_cast<uint16_t>(code) << length);
+    m_optionCode = code;
+    m_optionLength = length;
+}
+
+Options::OptionType
+Options::GetOptionCode() const
+{
+    return m_optionCode;
+}
+
+void
+Options::SetOptionCode(OptionType code)
+{
+    NS_LOG_FUNCTION(this << static_cast<uint16_t>(code));
+    m_optionCode = code;
+}
+
+uint16_t
+Options::GetOptionLength() const
+{
+    return m_optionLength;
+}
+
+void
+Options::SetOptionLength(uint16_t length)
+{
+    NS_LOG_FUNCTION(this << length);
+    m_optionLength = length;
+}
+
+IdentifierOption::IdentifierOption()
+{
+}
+
+IdentifierOption::IdentifierOption(uint16_t hardwareType, Address linkLayerAddress, Time time)
+{
+    NS_LOG_FUNCTION(this << hardwareType << linkLayerAddress);
+    if (time.IsZero())
+    {
+        m_duid.SetDuidType(Duid::Type::LL);
+    }
+    else
+    {
+        m_duid.SetDuidType(Duid::Type::LLT);
+    }
+
+    m_duid.SetHardwareType(hardwareType);
+
+    uint8_t buffer[16];
+    linkLayerAddress.CopyTo(buffer);
+
+    std::vector<uint8_t> identifier;
+    std::copy(buffer, buffer + linkLayerAddress.GetLength(), identifier.begin());
+    m_duid.SetDuid(identifier);
+}
+
+void
+IdentifierOption::SetDuid(Duid duid)
+{
+    NS_LOG_FUNCTION(this);
+    m_duid = duid;
+}
+
+Duid
+IdentifierOption::GetDuid() const
+{
+    return m_duid;
+}
+
+StatusCodeOption::StatusCodeOption()
+{
+    m_statusCode = StatusCodeValues::Success;
+    m_statusMessage = "";
+}
+
+Options::StatusCodeValues
+StatusCodeOption::GetStatusCode() const
+{
+    return m_statusCode;
+}
+
+void
+StatusCodeOption::SetStatusCode(StatusCodeValues statusCode)
+{
+    NS_LOG_FUNCTION(this << static_cast<uint16_t>(statusCode));
+    m_statusCode = statusCode;
+}
+
+std::string
+StatusCodeOption::GetStatusMessage() const
+{
+    return m_statusMessage;
+}
+
+void
+StatusCodeOption::SetStatusMessage(std::string statusMessage)
+{
+    NS_LOG_FUNCTION(this);
+    m_statusMessage = statusMessage;
+}
+
+IaAddressOption::IaAddressOption()
+{
+    m_iaAddress = Ipv6Address("::");
+    m_preferredLifetime = 0;
+    m_validLifetime = 0;
+}
+
+IaAddressOption::IaAddressOption(Ipv6Address iaAddress,
+                                 uint32_t preferredLifetime,
+                                 uint32_t validLifetime)
+{
+    m_iaAddress = iaAddress;
+    m_preferredLifetime = preferredLifetime;
+    m_validLifetime = validLifetime;
+}
+
+Ipv6Address
+IaAddressOption::GetIaAddress() const
+{
+    return m_iaAddress;
+}
+
+void
+IaAddressOption::SetIaAddress(Ipv6Address iaAddress)
+{
+    NS_LOG_FUNCTION(this << iaAddress);
+    m_iaAddress = iaAddress;
+}
+
+uint32_t
+IaAddressOption::GetPreferredLifetime() const
+{
+    return m_preferredLifetime;
+}
+
+void
+IaAddressOption::SetPreferredLifetime(uint32_t preferredLifetime)
+{
+    NS_LOG_FUNCTION(this << preferredLifetime);
+    m_preferredLifetime = preferredLifetime;
+}
+
+uint32_t
+IaAddressOption::GetValidLifetime() const
+{
+    return m_validLifetime;
+}
+
+void
+IaAddressOption::SetValidLifetime(uint32_t validLifetime)
+{
+    NS_LOG_FUNCTION(this << validLifetime);
+    m_validLifetime = validLifetime;
+}
+
+IaOptions::IaOptions()
+{
+    m_iaid = 0;
+    m_t1 = 0;
+    m_t2 = 0;
+}
+
+uint32_t
+IaOptions::GetIaid() const
+{
+    return m_iaid;
+}
+
+void
+IaOptions::SetIaid(uint32_t iaid)
+{
+    NS_LOG_FUNCTION(this << iaid);
+    m_iaid = iaid;
+}
+
+uint32_t
+IaOptions::GetT1() const
+{
+    return m_t1;
+}
+
+void
+IaOptions::SetT1(uint32_t t1)
+{
+    NS_LOG_FUNCTION(this << t1);
+    m_t1 = t1;
+}
+
+uint32_t
+IaOptions::GetT2() const
+{
+    return m_t2;
+}
+
+void
+IaOptions::SetT2(uint32_t t2)
+{
+    NS_LOG_FUNCTION(this << t2);
+    m_t2 = t2;
+}
+
+RequestOptions::RequestOptions()
+{
+    m_requestedOptions = std::vector<OptionType>();
+}
+
+std::vector<Options::OptionType>
+RequestOptions::GetRequestedOptions() const
+{
+    return m_requestedOptions;
+}
+
+void
+RequestOptions::AddRequestedOption(OptionType requestedOption)
+{
+    m_requestedOptions.push_back(requestedOption);
+}
+
+template <typename T>
+IntegerOptions<T>::IntegerOptions()
+{
+    m_optionValue = 0;
+}
+
+template <typename T>
+T
+IntegerOptions<T>::GetOptionValue() const
+{
+    return m_optionValue;
+}
+
+template <typename T>
+void
+IntegerOptions<T>::SetOptionValue(T optionValue)
+{
+    NS_LOG_FUNCTION(this << optionValue);
+    m_optionValue = optionValue;
+}
+
+ServerUnicastOption::ServerUnicastOption()
+{
+    m_serverAddress = Ipv6Address("::");
+}
+
+Ipv6Address
+ServerUnicastOption::GetServerAddress()
+{
+    return m_serverAddress;
+}
+
+void
+ServerUnicastOption::SetServerAddress(Ipv6Address serverAddress)
+{
+    NS_LOG_FUNCTION(this << serverAddress);
+    m_serverAddress = serverAddress;
+}
+
+// Public template function declarations.
+
+template class IntegerOptions<uint16_t>;
+template class IntegerOptions<uint8_t>;
+
+} // namespace ns3
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/internet-apps/model/dhcp6-options.h ns-3.45/src/internet-apps/model/dhcp6-options.h
--- ns-3.44/src/internet-apps/model/dhcp6-options.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.45/src/internet-apps/model/dhcp6-options.h	2025-06-01 20:34:45.315701200 -0700
@@ -0,0 +1,468 @@
+/*
+ * Copyright (c) 2024 NITK Surathkal
+ *
+ * SPDX-License-Identifier: GPL-2.0-only
+ *
+ * Author: Kavya Bhat <kavyabhat@gmail.com>
+ *
+ */
+
+#ifndef DHCP6_OPTIONS_H
+#define DHCP6_OPTIONS_H
+
+#include "dhcp6-duid.h"
+
+#include "ns3/address.h"
+#include "ns3/buffer.h"
+#include "ns3/header.h"
+#include "ns3/ipv6-address.h"
+#include "ns3/node.h"
+#include "ns3/nstime.h"
+#include "ns3/ptr.h"
+#include "ns3/random-variable-stream.h"
+
+namespace ns3
+{
+
+/**
+ * @ingroup dhcp6
+ *
+ * @class Options
+ * @brief Implements the functionality of DHCPv6 options
+ */
+class Options
+{
+  public:
+    /**
+     * Enum to identify the status code of the operation.
+     * These symbols and values are defined in [RFC 8415,
+     * section 21.13](https://datatracker.ietf.org/doc/html/rfc8415#section-21.13)
+     */
+    enum class StatusCodeValues
+    {
+        Success = 0,
+        UnspecFail = 1,
+        NoAddrsAvail = 2,
+        NoBinding = 3,
+        NotOnLink = 4,
+        UseMulticast = 5,
+        NoPrefixAvail = 6,
+    };
+
+    /**
+     * Enum to identify the option type.
+     * These symbols and values are defined in [RFC 8415, section 21]
+     * (https://datatracker.ietf.org/doc/html/rfc8415#section-21)
+     */
+    enum class OptionType
+    {
+        OPTION_INIT = 0, // Added for initialization
+        OPTION_CLIENTID = 1,
+        OPTION_SERVERID = 2,
+        OPTION_IA_NA = 3,
+        OPTION_IA_TA = 4,
+        OPTION_IAADDR = 5,
+        OPTION_ORO = 6,
+        OPTION_PREFERENCE = 7,
+        OPTION_ELAPSED_TIME = 8,
+        OPTION_RELAY_MSG = 9,
+        OPTION_AUTH = 11,
+        OPTION_UNICAST = 12,
+        OPTION_STATUS_CODE = 13,
+        OPTION_RAPID_COMMIT = 14,
+        OPTION_USER_CLASS = 15,
+        OPTION_VENDOR_CLASS = 16,
+        OPTION_VENDOR_OPTS = 17,
+        OPTION_INTERFACE_ID = 18,
+        OPTION_RECONF_MSG = 19,
+        OPTION_RECONF_ACCEPT = 20,
+        OPTION_IA_PD = 25,
+        OPTION_IAPREFIX = 26,
+        OPTION_INFORMATION_REFRESH_TIME = 32,
+        OPTION_SOL_MAX_RT = 82,
+        OPTION_INF_MAX_RT = 83,
+    };
+
+    /**
+     * @brief Default constructor.
+     */
+    Options();
+
+    /**
+     * @brief Constructor.
+     * @param code The option code.
+     * @param length The option length.
+     */
+    Options(OptionType code, uint16_t length);
+
+    /**
+     * @brief Get the option code.
+     * @return option code
+     */
+    OptionType GetOptionCode() const;
+
+    /**
+     * @brief Set the option code.
+     * @param code The option code to be added.
+     */
+    void SetOptionCode(OptionType code);
+
+    /**
+     * @brief Get the option length.
+     * @return option length
+     */
+    uint16_t GetOptionLength() const;
+
+    /**
+     * @brief Set the option length.
+     * @param length The option length to be parsed.
+     */
+    void SetOptionLength(uint16_t length);
+
+  private:
+    OptionType m_optionCode; //!< Option code
+    uint16_t m_optionLength; //!< Option length
+};
+
+/**
+ * @ingroup dhcp6
+ *
+ * @class IdentifierOption
+ * @brief Implements the client and server identifier options.
+ */
+class IdentifierOption : public Options
+{
+  public:
+    /**
+     * Default constructor.
+     */
+    IdentifierOption();
+
+    /**
+     * @brief Constructor.
+     * @param hardwareType The hardware type.
+     * @param linkLayerAddress The link-layer address.
+     * @param time The time at which the DUID is generated.
+     */
+    IdentifierOption(uint16_t hardwareType, Address linkLayerAddress, Time time = Time());
+
+    /**
+     * @brief Set the DUID.
+     * @param duid The DUID.
+     */
+    void SetDuid(Duid duid);
+
+    /**
+     * @brief Get the DUID object.
+     * @return the DUID.
+     */
+    Duid GetDuid() const;
+
+  private:
+    Duid m_duid; //!< Unique identifier of the node.
+};
+
+/**
+ * @ingroup dhcp6
+ *
+ * @class StatusCodeOption
+ * @brief Implements the Status Code option.
+ */
+class StatusCodeOption : public Options
+{
+  public:
+    /**
+     * @brief Default constructor.
+     */
+    StatusCodeOption();
+
+    /**
+     * @brief Get the status code of the operation.
+     * @return the status code.
+     */
+    StatusCodeValues GetStatusCode() const;
+
+    /**
+     * @brief Set the status code of the operation.
+     * @param statusCode the status code of the performed operation.
+     */
+    void SetStatusCode(StatusCodeValues statusCode);
+
+    /**
+     * @brief Get the status message of the operation.
+     * @return the status message
+     */
+    std::string GetStatusMessage() const;
+
+    /**
+     * @brief Set the status message of the operation.
+     * @param statusMessage the status message of the operation.
+     */
+    void SetStatusMessage(std::string statusMessage);
+
+  private:
+    /**
+     * The status code of an operation involving the IA_NA, IA_TA or
+     * IA address.
+     */
+    StatusCodeValues m_statusCode;
+
+    /**
+     * The status message of the operation. This is to be UTF-8 encoded
+     * as per RFC 3629.
+     */
+    std::string m_statusMessage;
+};
+
+/**
+ * @ingroup dhcp6
+ *
+ * @class IaAddressOption
+ * @brief Implements the IA Address options.
+ */
+class IaAddressOption : public Options
+{
+  public:
+    /**
+     * @brief Default constructor.
+     */
+    IaAddressOption();
+
+    /**
+     * @brief Constructor.
+     * @param iaAddress The IA Address.
+     * @param preferredLifetime The preferred lifetime of the address.
+     * @param validLifetime The valid lifetime of the address.
+     */
+    IaAddressOption(Ipv6Address iaAddress, uint32_t preferredLifetime, uint32_t validLifetime);
+
+    /**
+     * @brief Get the IA Address.
+     * @return the IPv6 address of the Identity Association
+     */
+    Ipv6Address GetIaAddress() const;
+
+    /**
+     * @brief Set the IA Address.
+     * @param iaAddress the IPv6 address of this Identity Association.
+     */
+    void SetIaAddress(Ipv6Address iaAddress);
+
+    /**
+     * @brief Get the preferred lifetime.
+     * @return the preferred lifetime
+     */
+    uint32_t GetPreferredLifetime() const;
+
+    /**
+     * @brief Set the preferred lifetime.
+     * @param preferredLifetime the preferred lifetime for this address.
+     */
+    void SetPreferredLifetime(uint32_t preferredLifetime);
+
+    /**
+     * @brief Get the valid lifetime.
+     * @return the lifetime for which the address is valid.
+     */
+    uint32_t GetValidLifetime() const;
+
+    /**
+     * @brief Set the valid lifetime.
+     * @param validLifetime the lifetime for which the address is valid.
+     */
+    void SetValidLifetime(uint32_t validLifetime);
+
+  private:
+    Ipv6Address m_iaAddress;      //!< the IPv6 address offered to the client.
+    uint32_t m_preferredLifetime; //!< The preferred lifetime of the address, in seconds.
+    uint32_t m_validLifetime;     //!< The valid lifetime of the address, in seconds.
+
+    /// (optional) The status code of any operation involving this address
+    StatusCodeOption m_statusCodeOption;
+};
+
+/**
+ * @ingroup dhcp6
+ *
+ * @class IaOptions
+ * @brief Implements the IANA and IATA options.
+ */
+class IaOptions : public Options
+{
+  public:
+    /**
+     * @brief Default constructor.
+     */
+    IaOptions();
+
+    /**
+     * @brief Get the unique identifier for the given IANA or IATA.
+     * @return the ID of the IANA or IATA
+     */
+    uint32_t GetIaid() const;
+
+    /**
+     * @brief Set the unique identifier for the given IANA or IATA.
+     * @param iaid the unique ID for the IANA or IATA.
+     */
+    void SetIaid(uint32_t iaid);
+
+    /**
+     * @brief Get the time interval in seconds after which the client contacts
+     * the server which provided the address to extend the lifetime.
+     * @return the time interval T1
+     */
+    uint32_t GetT1() const;
+
+    /**
+     * @brief Set the time interval in seconds after which the client contacts
+     * the server which provided the address to extend the lifetime.
+     * @param t1 the time interval in seconds.
+     */
+    void SetT1(uint32_t t1);
+
+    /**
+     * @brief Get the time interval in seconds after which the client contacts
+     * any available server to extend the address lifetime.
+     * @return the time interval T2
+     */
+    uint32_t GetT2() const;
+
+    /**
+     * @brief Set the time interval in seconds after which the client contacts
+     * any available server to extend the address lifetime.
+     * @param t2 time interval in seconds.
+     */
+    void SetT2(uint32_t t2);
+
+    /// The list of IA Address options associated with the IANA.
+    std::vector<IaAddressOption> m_iaAddressOption;
+
+  private:
+    /// The unique identifier for the given IA_NA or IA_TA.
+    uint32_t m_iaid;
+
+    /**
+     * The time interval in seconds after which the client contacts the
+     * server which provided the address to extend the lifetime.
+     */
+    uint32_t m_t1;
+
+    /**
+     * The time interval in seconds after which the client contacts any
+     * available server to extend the address lifetime.
+     */
+    uint32_t m_t2;
+
+    /// (optional) The status code of any operation involving the IANA.
+    StatusCodeOption m_statusCodeOption;
+};
+
+/**
+ * @ingroup dhcp6
+ *
+ * @class RequestOptions
+ * @brief Implements the Option Request option.
+ */
+class RequestOptions : public Options
+{
+  public:
+    /**
+     * @brief Constructor.
+     */
+    RequestOptions();
+
+    /**
+     * @brief Get the option values
+     * @return requested option list.
+     */
+    std::vector<OptionType> GetRequestedOptions() const;
+
+    /**
+     * @brief Set the option values.
+     * @param requestedOption option to be requested from the server.
+     */
+    void AddRequestedOption(OptionType requestedOption);
+
+  private:
+    std::vector<OptionType> m_requestedOptions; //!< List of requested options.
+};
+
+/**
+ * @ingroup dhcp6
+ *
+ * @class IntegerOptions
+ * @brief Implements the Preference and Elapsed Time options.
+ */
+template <typename T>
+class IntegerOptions : public Options
+{
+  public:
+    /**
+     * @brief Constructor.
+     */
+    IntegerOptions();
+
+    /**
+     * @brief Get the option value
+     * @return elapsed time or preference value.
+     */
+    T GetOptionValue() const;
+
+    /**
+     * @brief Set the option value.
+     * @param optionValue elapsed time or preference value.
+     */
+    void SetOptionValue(T optionValue);
+
+  private:
+    /// Indicates the elapsed time or preference value.
+    T m_optionValue;
+};
+
+/**
+ * @ingroup dhcp6
+ *
+ * @class ServerUnicastOption
+ * @brief Implements the Server Unicast option.
+ */
+class ServerUnicastOption : public Options
+{
+  public:
+    ServerUnicastOption();
+
+    /**
+     * @brief Get the server address.
+     * @return The 128 bit server address.
+     */
+    Ipv6Address GetServerAddress();
+
+    /**
+     * @brief Set the server address.
+     * @param serverAddress the 128-bit server address.
+     */
+    void SetServerAddress(Ipv6Address serverAddress);
+
+  private:
+    /**
+     * The 128-bit server address to which the client should send
+     * unicast messages.
+     */
+    Ipv6Address m_serverAddress;
+};
+
+/**
+ * @ingroup dhcp6
+ * Create the typedef PreferenceOption with T as uint8_t
+ */
+typedef IntegerOptions<uint8_t> PreferenceOption;
+
+/**
+ * @ingroup dhcp6
+ * Create the typedef ElapsedTimeOption with T as uint16_t
+ */
+typedef IntegerOptions<uint16_t> ElapsedTimeOption;
+
+} // namespace ns3
+
+#endif
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/internet-apps/model/dhcp6-server.cc ns-3.45/src/internet-apps/model/dhcp6-server.cc
--- ns-3.44/src/internet-apps/model/dhcp6-server.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.45/src/internet-apps/model/dhcp6-server.cc	2025-06-01 20:34:45.315701200 -0700
@@ -0,0 +1,858 @@
+/*
+ * Copyright (c) 2024 NITK Surathkal
+ *
+ * SPDX-License-Identifier: GPL-2.0-only
+ *
+ * Author: Kavya Bhat <kavyabhat@gmail.com>
+ *
+ */
+
+#include "dhcp6-server.h"
+
+#include "dhcp6-duid.h"
+
+#include "ns3/address-utils.h"
+#include "ns3/icmpv6-l4-protocol.h"
+#include "ns3/ipv6-interface.h"
+#include "ns3/ipv6-l3-protocol.h"
+#include "ns3/ipv6-packet-info-tag.h"
+#include "ns3/ipv6.h"
+#include "ns3/log.h"
+#include "ns3/loopback-net-device.h"
+#include "ns3/simulator.h"
+#include "ns3/socket.h"
+
+#include <algorithm>
+
+namespace ns3
+{
+
+NS_LOG_COMPONENT_DEFINE("Dhcp6Server");
+
+TypeId
+Dhcp6Server::GetTypeId()
+{
+    static TypeId tid =
+        TypeId("ns3::Dhcp6Server")
+            .SetParent<Application>()
+            .AddConstructor<Dhcp6Server>()
+            .SetGroupName("InternetApps")
+            .AddAttribute("RenewTime",
+                          "Time after which client should renew. 1000 seconds by default in Linux. "
+                          "This is equivalent to REN_MAX_RT (RFC 8415, Section 7.6).",
+                          TimeValue(Seconds(1000)),
+                          MakeTimeAccessor(&Dhcp6Server::m_renew),
+                          MakeTimeChecker())
+            .AddAttribute("RebindTime",
+                          "Time after which client should rebind. "
+                          "2000 seconds by default in Linux. "
+                          "This is equivalent to REB_MAX_RT (RFC 8415, Section 7.6).",
+                          TimeValue(Seconds(2000)),
+                          MakeTimeAccessor(&Dhcp6Server::m_rebind),
+                          MakeTimeChecker())
+            .AddAttribute("PreferredLifetime",
+                          "The preferred lifetime of the leased address. "
+                          "3000 seconds by default in Linux.",
+                          TimeValue(Seconds(3000)),
+                          MakeTimeAccessor(&Dhcp6Server::m_prefLifetime),
+                          MakeTimeChecker())
+            .AddAttribute("ValidLifetime",
+                          "Time after which client should release the address. "
+                          "4000 seconds by default in Linux.",
+                          TimeValue(Seconds(4000)),
+                          MakeTimeAccessor(&Dhcp6Server::m_validLifetime),
+                          MakeTimeChecker());
+
+    return tid;
+}
+
+Dhcp6Server::Dhcp6Server()
+{
+    NS_LOG_FUNCTION(this);
+}
+
+void
+Dhcp6Server::DoDispose()
+{
+    NS_LOG_FUNCTION(this);
+    if (m_recvSocket)
+    {
+        m_recvSocket->Close();
+        m_recvSocket = nullptr;
+    }
+
+    for (auto& itr : m_subnets)
+    {
+        itr.m_leasedAddresses.clear();
+        itr.m_expiredAddresses.clear();
+        itr.m_declinedAddresses.clear();
+    }
+    m_subnets.clear();
+    m_leaseCleanupEvent.Cancel();
+
+    for (auto& itr : m_sendSockets)
+    {
+        // Close sockets.
+        if (!itr.second)
+        {
+            continue;
+        }
+        itr.second->SetCloseCallbacks(MakeNullCallback<void, Ptr<Socket>>(),
+                                      MakeNullCallback<void, Ptr<Socket>>());
+        itr.second->SetRecvCallback(MakeNullCallback<void, Ptr<Socket>>());
+        itr.second->SetSendCallback(MakeNullCallback<void, Ptr<Socket>, uint32_t>());
+        itr.second->Close();
+    }
+    m_sendSockets.clear();
+    m_iaBindings.clear();
+    Application::DoDispose();
+}
+
+void
+Dhcp6Server::ProcessSolicit(Ptr<NetDevice> iDev, Dhcp6Header header, Inet6SocketAddress client)
+{
+    Duid clientDuid = header.GetClientIdentifier().GetDuid();
+    std::map<Options::OptionType, bool> headerOptions = header.GetOptionList();
+
+    // Add each IA in the header to the IA bindings.
+    if (headerOptions.find(Options::OptionType::OPTION_IA_NA) != headerOptions.end())
+    {
+        std::vector<IaOptions> iaOpt = header.GetIanaOptions();
+        for (const auto& itr : iaOpt)
+        {
+            uint32_t iaid = itr.GetIaid();
+            m_iaBindings.insert(
+                {clientDuid, std::make_pair(Options::OptionType::OPTION_IA_NA, iaid)});
+            NS_LOG_DEBUG("DHCPv6 server: Client registering IAID " << iaid);
+        }
+    }
+}
+
+void
+Dhcp6Server::SendAdvertise(Ptr<NetDevice> iDev, Dhcp6Header header, Inet6SocketAddress client)
+{
+    NS_LOG_FUNCTION(this << iDev << header << client);
+
+    // Options included according to RFC 8415 Section 18.3.9
+
+    Ptr<Packet> packet = Create<Packet>();
+    Dhcp6Header advertiseHeader;
+    advertiseHeader.ResetOptions();
+    advertiseHeader.SetMessageType(Dhcp6Header::MessageType::ADVERTISE);
+    advertiseHeader.SetTransactId(header.GetTransactId());
+
+    // Add Client Identifier Option, copied from the received header.
+    Duid clientDuid = header.GetClientIdentifier().GetDuid();
+    advertiseHeader.AddClientIdentifier(clientDuid);
+
+    // Add Server Identifier Option.
+    advertiseHeader.AddServerIdentifier(m_serverDuid);
+
+    // Find all requested IAIDs for this client.
+    std::vector<IaOptions> ianaOptionsList = header.GetIanaOptions();
+    std::vector<uint32_t> requestedIa(ianaOptionsList.size());
+    for (std::size_t i = 0; i < ianaOptionsList.size(); i++)
+    {
+        requestedIa[i] = ianaOptionsList[i].GetIaid();
+    }
+
+    // Add IA_NA option.
+    // Available address pools and IA information is sent in this option.
+    for (auto& subnet : m_subnets)
+    {
+        Ipv6Address pool = subnet.GetAddressPool();
+        Ipv6Prefix prefix = subnet.GetPrefix();
+        Ipv6Address minAddress = subnet.GetMinAddress();
+        Ipv6Address maxAddress = subnet.GetMaxAddress();
+
+        /*
+         * Find the next available address. Checks the expired address map.
+         * If there are no expired addresses, it advertises a new address.
+         */
+
+        uint8_t offeredAddrBuf[16];
+
+        bool foundAddress = false;
+        if (!subnet.m_expiredAddresses.empty())
+        {
+            Ipv6Address nextAddress;
+
+            for (auto itr = subnet.m_expiredAddresses.begin();
+                 itr != subnet.m_expiredAddresses.end();)
+            {
+                if (itr->second.first == clientDuid)
+                {
+                    nextAddress = itr->second.second;
+                    nextAddress.GetBytes(offeredAddrBuf);
+                    itr = subnet.m_expiredAddresses.erase(itr);
+                    foundAddress = true;
+                    break;
+                }
+                itr++;
+            }
+
+            /*
+             Prevent Expired Addresses from building up.
+             We set a maximum limit of 30 expired addresses, after which the
+             oldest expired address is removed and offered to a client.
+             */
+            if (!foundAddress && subnet.m_expiredAddresses.size() > 30)
+            {
+                auto firstExpiredAddress = subnet.m_expiredAddresses.begin();
+                nextAddress = firstExpiredAddress->second.second;
+                nextAddress.GetBytes(offeredAddrBuf);
+                subnet.m_expiredAddresses.erase(firstExpiredAddress);
+                foundAddress = true;
+            }
+        }
+
+        if (!foundAddress)
+        {
+            // Allocate a new address.
+            uint8_t minAddrBuf[16];
+            minAddress.GetBytes(minAddrBuf);
+
+            // Get the latest leased address.
+            uint8_t lastLeasedAddrBuf[16];
+
+            if (!subnet.m_leasedAddresses.empty())
+            {
+                // Obtain the highest address that has been offered.
+                subnet.m_maxOfferedAddress.GetBytes(lastLeasedAddrBuf);
+                memcpy(offeredAddrBuf, lastLeasedAddrBuf, 16);
+
+                // Increment the address by adding 1. Bitwise addition is used.
+                bool addedOne = false;
+                for (uint8_t i = 15; !addedOne && i >= 0; i--)
+                {
+                    for (int j = 0; j < 8; j++)
+                    {
+                        uint8_t bit = (offeredAddrBuf[i] & (1 << j)) >> j;
+                        if (bit == 0)
+                        {
+                            offeredAddrBuf[i] = offeredAddrBuf[i] | (1 << j);
+                            addedOne = true;
+                            break;
+                        }
+                        offeredAddrBuf[i] = offeredAddrBuf[i] & ~(1 << j);
+                    }
+                }
+            }
+            else
+            {
+                memcpy(offeredAddrBuf, minAddrBuf, 16);
+            }
+
+            Ipv6Address offer(offeredAddrBuf);
+            subnet.m_maxOfferedAddress = offer;
+
+            /*
+            Optimistic assumption that the address will be leased to this client.
+            This is to prevent multiple clients from receiving the same address.
+            */
+            subnet.m_leasedAddresses.insert(
+                {clientDuid, std::make_pair(offer, Seconds(m_prefLifetime.GetSeconds()))});
+        }
+
+        Ipv6Address offeredAddr(offeredAddrBuf);
+        NS_LOG_INFO("Offered address: " << offeredAddr);
+        NS_LOG_DEBUG("Offered address: " << offeredAddr);
+
+        for (const auto& iaid : requestedIa)
+        {
+            // Add the IA_NA option and IA Address option.
+            advertiseHeader.AddIanaOption(iaid, m_renew.GetSeconds(), m_rebind.GetSeconds());
+            advertiseHeader.AddAddress(iaid,
+                                       offeredAddr,
+                                       m_prefLifetime.GetSeconds(),
+                                       m_validLifetime.GetSeconds());
+        }
+    }
+
+    std::map<Options::OptionType, bool> headerOptions = header.GetOptionList();
+    if (headerOptions.find(Options::OptionType::OPTION_ORO) != headerOptions.end())
+    {
+        std::vector<Options::OptionType> requestedOptions =
+            header.GetOptionRequest().GetRequestedOptions();
+        advertiseHeader.HandleOptionRequest(requestedOptions);
+    }
+
+    packet->AddHeader(advertiseHeader);
+
+    // Find the socket corresponding to the NetDevice.
+    Ptr<Ipv6> ipv6 = GetNode()->GetObject<Ipv6>();
+    int32_t ifIndex = ipv6->GetInterfaceForDevice(iDev);
+    Ptr<Socket> sendSocket = m_sendSockets[ifIndex];
+
+    // Send the advertise message.
+    if (sendSocket->SendTo(packet, 0, client) >= 0)
+    {
+        NS_LOG_INFO("DHCPv6 Advertise sent.");
+    }
+    else
+    {
+        NS_LOG_INFO("Error while sending DHCPv6 Advertise.");
+    }
+}
+
+void
+Dhcp6Server::SendReply(Ptr<NetDevice> iDev, Dhcp6Header header, Inet6SocketAddress client)
+{
+    NS_LOG_FUNCTION(this << iDev << header << client);
+
+    // Options included according to RFC 8415 Section 18.3.10
+
+    Ptr<Packet> packet = Create<Packet>();
+    Dhcp6Header replyHeader;
+    replyHeader.ResetOptions();
+    replyHeader.SetMessageType(Dhcp6Header::MessageType::REPLY);
+    replyHeader.SetTransactId(header.GetTransactId());
+
+    // Add Client Identifier Option, copied from the received header.
+    Duid clientDuid = header.GetClientIdentifier().GetDuid();
+    replyHeader.AddClientIdentifier(clientDuid);
+
+    // Add Server Identifier Option.
+    replyHeader.AddServerIdentifier(m_serverDuid);
+
+    // Add IA_NA option.
+    // Retrieve requested IA Option from client header.
+    std::vector<IaOptions> ianaOptionsList = header.GetIanaOptions();
+
+    for (auto& iaOpt : ianaOptionsList)
+    {
+        // Iterate through the offered addresses.
+        // Current approach: Try to accept all offers.
+        std::vector<IaAddressOption> iaAddrOptList = iaOpt.m_iaAddressOption;
+        for (auto& addrItr : iaAddrOptList)
+        {
+            Ipv6Address requestedAddr = addrItr.GetIaAddress();
+
+            for (auto& subnet : m_subnets)
+            {
+                Ipv6Address pool = subnet.GetAddressPool();
+                Ipv6Prefix prefix = subnet.GetPrefix();
+                Ipv6Address minAddress = subnet.GetMinAddress();
+                Ipv6Address maxAddress = subnet.GetMaxAddress();
+
+                // Check if the requested address has been declined earlier.
+                // In this case, it cannot be leased.
+                if (subnet.m_declinedAddresses.find(requestedAddr) !=
+                    subnet.m_declinedAddresses.end())
+                {
+                    NS_LOG_INFO("Requested address" << requestedAddr << "is declined.");
+                    return;
+                }
+
+                // Check whether this subnet matches the requested address.
+                if (prefix.IsMatch(requestedAddr, pool))
+                {
+                    uint8_t minBuf[16];
+                    uint8_t maxBuf[16];
+                    uint8_t requestedBuf[16];
+                    minAddress.GetBytes(minBuf);
+                    maxAddress.GetBytes(maxBuf);
+                    requestedAddr.GetBytes(requestedBuf);
+
+                    if (memcmp(requestedBuf, minBuf, 16) < 0 ||
+                        memcmp(requestedBuf, maxBuf, 16) > 0)
+                    {
+                        NS_LOG_INFO("Requested address is not in the range of the subnet.");
+                        return;
+                    }
+
+                    // Add the IA_NA option and IA Address option.
+                    replyHeader.AddIanaOption(iaOpt.GetIaid(), iaOpt.GetT1(), iaOpt.GetT2());
+                    replyHeader.AddAddress(iaOpt.GetIaid(),
+                                           requestedAddr,
+                                           m_prefLifetime.GetSeconds(),
+                                           m_validLifetime.GetSeconds());
+
+                    NS_LOG_DEBUG("Adding address " << requestedAddr << " to lease");
+                    // Update the lease time of the newly leased addresses.
+                    // Find all the leases for this client.
+                    auto range = subnet.m_leasedAddresses.equal_range(clientDuid);
+
+                    // Create a new multimap to store the updated lifetimes.
+                    std::multimap<Duid, std::pair<Ipv6Address, Time>> updatedLifetimes;
+                    for (auto it = range.first; it != range.second; it++)
+                    {
+                        Ipv6Address clientLease = it->second.first;
+                        std::pair<Ipv6Address, Time> clientLeaseTime = {
+                            clientLease,
+                            Seconds(m_prefLifetime.GetSeconds())};
+
+                        // Add the DUID + Ipv6Address / LeaseTime to the map.
+                        updatedLifetimes.insert({clientDuid, clientLeaseTime});
+                    }
+
+                    // Remove all the old leases for this client.
+                    // This is done to prevent multiple entries for the same lease.
+                    subnet.m_leasedAddresses.erase(range.first->first);
+
+                    // Add the updated leases to the subnet.
+                    for (auto& itr : updatedLifetimes)
+                    {
+                        subnet.m_leasedAddresses.insert({itr.first, itr.second});
+                    }
+                    break;
+                }
+            }
+        }
+    }
+
+    std::map<Options::OptionType, bool> headerOptions = header.GetOptionList();
+
+    // Check if the client has requested any options.
+    if (headerOptions.find(Options::OptionType::OPTION_ORO) != headerOptions.end())
+    {
+        std::vector<Options::OptionType> requestedOptions =
+            header.GetOptionRequest().GetRequestedOptions();
+        replyHeader.HandleOptionRequest(requestedOptions);
+    }
+
+    packet->AddHeader(replyHeader);
+
+    // Find the socket corresponding to the NetDevice.
+    Ptr<Ipv6> ipv6 = GetNode()->GetObject<Ipv6>();
+    int32_t ifIndex = ipv6->GetInterfaceForDevice(iDev);
+    Ptr<Socket> sendSocket = m_sendSockets[ifIndex];
+
+    // Send the Reply message.
+    if (sendSocket->SendTo(packet, 0, client) >= 0)
+    {
+        NS_LOG_INFO("DHCPv6 Reply sent.");
+    }
+    else
+    {
+        NS_LOG_INFO("Error while sending DHCPv6 Reply.");
+    }
+}
+
+void
+Dhcp6Server::RenewRebindLeases(Ptr<NetDevice> iDev, Dhcp6Header header, Inet6SocketAddress client)
+{
+    NS_LOG_FUNCTION(this << iDev << header << client);
+
+    // Options included according to RFC 8415 Section 18.3.4, 18.3.5
+
+    Ptr<Packet> packet = Create<Packet>();
+    Dhcp6Header replyHeader;
+    replyHeader.ResetOptions();
+    replyHeader.SetMessageType(Dhcp6Header::MessageType::REPLY);
+    replyHeader.SetTransactId(header.GetTransactId());
+
+    // Add Client Identifier Option, copied from the received header.
+    Duid clientDuid = header.GetClientIdentifier().GetDuid();
+    replyHeader.AddClientIdentifier(clientDuid);
+
+    // Add Server Identifier Option.
+    replyHeader.AddServerIdentifier(m_serverDuid);
+
+    // Add IA_NA option.
+    // Retrieve IA_NAs from client header.
+    std::vector<IaOptions> ianaOptionsList = header.GetIanaOptions();
+    for (auto& iaOpt : ianaOptionsList)
+    {
+        std::vector<IaAddressOption> iaAddrOptList = iaOpt.m_iaAddressOption;
+
+        // Add the IA_NA option.
+        replyHeader.AddIanaOption(iaOpt.GetIaid(), iaOpt.GetT1(), iaOpt.GetT2());
+
+        for (const auto& addrItr : iaAddrOptList)
+        {
+            // Find the lease address which is to be renewed or rebound.
+            Ipv6Address clientLease = addrItr.GetIaAddress();
+
+            // Update the lifetime for the address.
+            // Iterate through the subnet list to find the subnet that the
+            // address belongs to.
+            for (auto& subnet : m_subnets)
+            {
+                Ipv6Prefix prefix = subnet.GetPrefix();
+                Ipv6Address pool = subnet.GetAddressPool();
+
+                // Check if the prefix of the lease matches that of the pool.
+                if (prefix.IsMatch(clientLease, pool))
+                {
+                    // Find all the leases for this client.
+                    auto range = subnet.m_leasedAddresses.equal_range(clientDuid);
+                    for (auto itr = range.first; itr != range.second; itr++)
+                    {
+                        // Check if the IPv6 address matches the client lease.
+                        if (itr->second.first == clientLease)
+                        {
+                            NS_LOG_DEBUG("Renewing address: " << itr->second.first);
+
+                            std::pair<Ipv6Address, Time> clientLeaseTime = {
+                                clientLease,
+                                Seconds(m_prefLifetime.GetSeconds())};
+
+                            // Remove the old lease information.
+                            subnet.m_leasedAddresses.erase(itr);
+
+                            // Add the new lease information (with updated time)
+                            subnet.m_leasedAddresses.insert({clientDuid, clientLeaseTime});
+
+                            // Add the IA Address option.
+                            replyHeader.AddAddress(iaOpt.GetIaid(),
+                                                   clientLease,
+                                                   m_prefLifetime.GetSeconds(),
+                                                   m_validLifetime.GetSeconds());
+                            break;
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    std::map<Options::OptionType, bool> headerOptions = header.GetOptionList();
+    if (headerOptions.find(Options::OptionType::OPTION_ORO) != headerOptions.end())
+    {
+        std::vector<Options::OptionType> requestedOptions =
+            header.GetOptionRequest().GetRequestedOptions();
+        replyHeader.HandleOptionRequest(requestedOptions);
+    }
+
+    packet->AddHeader(replyHeader);
+
+    // Find the socket corresponding to the NetDevice.
+    Ptr<Ipv6> ipv6 = GetNode()->GetObject<Ipv6>();
+    int32_t ifIndex = ipv6->GetInterfaceForDevice(iDev);
+    Ptr<Socket> sendSocket = m_sendSockets[ifIndex];
+
+    // Send the Reply message.
+    if (sendSocket->SendTo(packet, 0, client) >= 0)
+    {
+        NS_LOG_INFO("DHCPv6 Reply sent.");
+    }
+    else
+    {
+        NS_LOG_INFO("Error while sending DHCPv6 Reply.");
+    }
+}
+
+void
+Dhcp6Server::UpdateBindings(Ptr<NetDevice> iDev, Dhcp6Header header, Inet6SocketAddress client)
+{
+    // Invoked in case a Decline or Release message is received.
+    NS_LOG_FUNCTION(this << iDev << header << client);
+
+    // Options included in accordance with RFC 8415, Section 18.3.7, 18.3.8
+
+    Ptr<Packet> packet = Create<Packet>();
+    Dhcp6Header replyHeader;
+    replyHeader.ResetOptions();
+    replyHeader.SetMessageType(Dhcp6Header::MessageType::REPLY);
+    replyHeader.SetTransactId(header.GetTransactId());
+
+    // Add Client Identifier Option, copied from the received header.
+    Duid clientDuid = header.GetClientIdentifier().GetDuid();
+    replyHeader.AddClientIdentifier(clientDuid);
+
+    // Add Server Identifier Option.
+    replyHeader.AddServerIdentifier(m_serverDuid);
+
+    // Add Status code option.
+    replyHeader.AddStatusCode(Options::StatusCodeValues::Success, "Address declined.");
+
+    // Add the declined or expired address to the subnet information.
+    std::vector<IaOptions> ianaOptionsList = header.GetIanaOptions();
+    for (const auto& iaOpt : ianaOptionsList)
+    {
+        std::vector<IaAddressOption> iaAddrOptList = iaOpt.m_iaAddressOption;
+
+        for (const auto& addrItr : iaAddrOptList)
+        {
+            Ipv6Address address = addrItr.GetIaAddress();
+            if (header.GetMessageType() == Dhcp6Header::MessageType::DECLINE)
+            {
+                // Find the subnet that this address belongs to.
+                for (auto& subnet : m_subnets)
+                {
+                    // Find the client that the address currently belongs to.
+
+                    for (auto itr = subnet.m_leasedAddresses.begin();
+                         itr != subnet.m_leasedAddresses.end();)
+                    {
+                        Ipv6Address leaseAddr = itr->second.first;
+                        if (leaseAddr == address)
+                        {
+                            itr = subnet.m_leasedAddresses.erase(itr);
+                            subnet.m_declinedAddresses[address] = clientDuid;
+                            continue;
+                        }
+                        itr++;
+                    }
+                }
+            }
+            else if (header.GetMessageType() == Dhcp6Header::MessageType::RELEASE)
+            {
+                // Find the subnet that this address belongs to.
+                for (auto& subnet : m_subnets)
+                {
+                    // Find the client that the address currently belongs to.
+
+                    for (auto itr = subnet.m_leasedAddresses.begin();
+                         itr != subnet.m_leasedAddresses.end();)
+                    {
+                        Duid duid = itr->first;
+                        Ipv6Address leaseAddr = itr->second.first;
+                        Time expiredTime = itr->second.second;
+                        if (leaseAddr == address)
+                        {
+                            itr = subnet.m_leasedAddresses.erase(itr);
+                            std::pair<Duid, Ipv6Address> expiredLease = {duid, leaseAddr};
+                            subnet.m_expiredAddresses.insert({expiredTime, expiredLease});
+                            continue;
+                        }
+                        itr++;
+                    }
+                }
+            }
+        }
+    }
+
+    packet->AddHeader(replyHeader);
+
+    // Find the socket corresponding to the NetDevice.
+    Ptr<Ipv6> ipv6 = GetNode()->GetObject<Ipv6>();
+    int32_t ifIndex = ipv6->GetInterfaceForDevice(iDev);
+    Ptr<Socket> sendSocket = m_sendSockets[ifIndex];
+
+    // Send the Reply message.
+    if (sendSocket->SendTo(packet, 0, client) >= 0)
+    {
+        NS_LOG_INFO("DHCPv6 Reply sent.");
+    }
+    else
+    {
+        NS_LOG_INFO("Error while sending DHCPv6 Reply.");
+    }
+}
+
+void
+Dhcp6Server::SetDhcp6ServerNetDevice(NetDeviceContainer netDevices)
+{
+    for (auto itr = netDevices.Begin(); itr != netDevices.End(); itr++)
+    {
+        Ptr<Ipv6> ipv6 = GetNode()->GetObject<Ipv6>();
+        int32_t ifIndex = ipv6->GetInterfaceForDevice(*itr);
+        Ptr<Socket> sendSocket = m_sendSockets[ifIndex];
+        m_sendSockets[ifIndex] = nullptr;
+    }
+}
+
+void
+Dhcp6Server::NetHandler(Ptr<Socket> socket)
+{
+    NS_LOG_FUNCTION(this << socket);
+
+    Dhcp6Header header;
+    Address from;
+    Ptr<Packet> packet = m_recvSocket->RecvFrom(from);
+
+    Inet6SocketAddress senderAddr = Inet6SocketAddress::ConvertFrom(from);
+
+    Ipv6PacketInfoTag interfaceInfo;
+    NS_ASSERT_MSG(packet->RemovePacketTag(interfaceInfo),
+                  "No incoming interface on DHCPv6 message.");
+
+    uint32_t incomingIf = interfaceInfo.GetRecvIf();
+    Ptr<NetDevice> iDev = GetNode()->GetDevice(incomingIf);
+
+    if (packet->RemoveHeader(header) == 0)
+    {
+        return;
+    }
+
+    // Initialize the DUID before responding to the client.
+    Ptr<Node> node = GetNode();
+    m_serverDuid.Initialize(node);
+
+    if (header.GetMessageType() == Dhcp6Header::MessageType::SOLICIT)
+    {
+        ProcessSolicit(iDev, header, senderAddr);
+        SendAdvertise(iDev, header, senderAddr);
+    }
+    if (header.GetMessageType() == Dhcp6Header::MessageType::REQUEST)
+    {
+        SendReply(iDev, header, senderAddr);
+    }
+    if ((header.GetMessageType() == Dhcp6Header::MessageType::RENEW) ||
+        (header.GetMessageType() == Dhcp6Header::MessageType::REBIND))
+    {
+        RenewRebindLeases(iDev, header, senderAddr);
+    }
+    if ((header.GetMessageType() == Dhcp6Header::MessageType::RELEASE) ||
+        (header.GetMessageType() == Dhcp6Header::MessageType::DECLINE))
+    {
+        UpdateBindings(iDev, header, senderAddr);
+    }
+}
+
+void
+Dhcp6Server::AddSubnet(Ipv6Address addressPool,
+                       Ipv6Prefix prefix,
+                       Ipv6Address minAddress,
+                       Ipv6Address maxAddress)
+{
+    NS_LOG_FUNCTION(this << addressPool << prefix << minAddress << maxAddress);
+
+    NS_LOG_DEBUG("DHCPv6 server: Adding subnet " << addressPool << " to lease information.");
+    LeaseInfo newSubnet(addressPool, prefix, minAddress, maxAddress);
+    m_subnets.emplace_back(newSubnet);
+}
+
+void
+Dhcp6Server::ReceiveMflag(uint32_t recvInterface)
+{
+    Ptr<Node> node = GetNode();
+    Ptr<Ipv6> ipv6 = node->GetObject<Ipv6>();
+    Ptr<Ipv6L3Protocol> ipv6l3 = node->GetObject<Ipv6L3Protocol>();
+
+    for (auto itr = m_sendSockets.begin(); itr != m_sendSockets.end(); itr++)
+    {
+        uint32_t ifIndex = itr->first;
+        Ptr<NetDevice> device = GetNode()->GetDevice(ifIndex);
+        Ptr<Socket> sendSocket = m_sendSockets[ifIndex];
+
+        if (ifIndex == recvInterface)
+        {
+            Ipv6Address linkLocal =
+                ipv6l3->GetInterface(ifIndex)->GetLinkLocalAddress().GetAddress();
+
+            TypeId tid = TypeId::LookupByName("ns3::UdpSocketFactory");
+
+            Ptr<Socket> socket = Socket::CreateSocket(node, tid);
+            socket->Bind(Inet6SocketAddress(linkLocal, Dhcp6Header::SERVER_PORT));
+            socket->BindToNetDevice(device);
+            socket->SetRecvPktInfo(true);
+            socket->SetRecvCallback(MakeCallback(&Dhcp6Server::NetHandler, this));
+
+            m_sendSockets[ifIndex] = socket;
+        }
+    }
+}
+
+void
+Dhcp6Server::StartApplication()
+{
+    NS_LOG_INFO("Starting DHCPv6 server.");
+
+    if (m_recvSocket)
+    {
+        NS_LOG_INFO("DHCPv6 daemon is not meant to be started repeatedly.");
+        return;
+    }
+
+    Ptr<Node> node = GetNode();
+    Ptr<Ipv6> ipv6 = node->GetObject<Ipv6>();
+    Ptr<Ipv6L3Protocol> ipv6l3 = node->GetObject<Ipv6L3Protocol>();
+
+    TypeId tid = TypeId::LookupByName("ns3::UdpSocketFactory");
+    m_recvSocket = Socket::CreateSocket(node, tid);
+
+    Inet6SocketAddress local =
+        Inet6SocketAddress(Ipv6Address::GetAllNodesMulticast(), Dhcp6Header::SERVER_PORT);
+    m_recvSocket->Bind(local);
+    m_recvSocket->SetRecvPktInfo(true);
+    m_recvSocket->SetRecvCallback(MakeCallback(&Dhcp6Server::NetHandler, this));
+
+    for (auto itr = m_sendSockets.begin(); itr != m_sendSockets.end(); itr++)
+    {
+        int32_t ifIndex = itr->first;
+        Ptr<NetDevice> iDev = GetNode()->GetDevice(ifIndex);
+        Ptr<Socket> sendSocket = m_sendSockets[ifIndex];
+
+        NS_LOG_DEBUG("DHCPv6 server: Node " << node->GetId() << " listening on interface "
+                                            << ifIndex);
+
+        NS_ASSERT_MSG(ifIndex >= 0,
+                      "Dhcp6Server::StartApplication: device is not connected to IPv6.");
+
+        Ptr<Icmpv6L4Protocol> icmpv6 = DynamicCast<Icmpv6L4Protocol>(
+            ipv6->GetProtocol(Icmpv6L4Protocol::GetStaticProtocolNumber(), ifIndex));
+
+        icmpv6->SetDhcpv6Callback(MakeCallback(&Dhcp6Server::ReceiveMflag, this));
+    }
+
+    m_leaseCleanupEvent = Simulator::Schedule(m_leaseCleanup, &Dhcp6Server::CleanLeases, this);
+}
+
+void
+Dhcp6Server::StopApplication()
+{
+    NS_LOG_FUNCTION(this);
+}
+
+void
+Dhcp6Server::CleanLeases()
+{
+    NS_LOG_DEBUG("Cleaning up leases.");
+    for (auto& subnet : m_subnets)
+    {
+        for (auto itr = subnet.m_leasedAddresses.begin(); itr != subnet.m_leasedAddresses.end();)
+        {
+            Duid duid = itr->first;
+            Ipv6Address address = itr->second.first;
+            Time leaseTime = itr->second.second;
+
+            if (Simulator::Now() >= leaseTime)
+            {
+                NS_LOG_DEBUG("DHCPv6 server: Removing expired lease for " << address);
+                std::pair<Duid, Ipv6Address> expiredLease = {duid, address};
+                subnet.m_expiredAddresses.insert({leaseTime, expiredLease});
+                itr = subnet.m_leasedAddresses.erase(itr);
+                continue;
+            }
+            itr++;
+        }
+    }
+
+    m_leaseCleanupEvent = Simulator::Schedule(m_leaseCleanup, &Dhcp6Server::CleanLeases, this);
+}
+
+LeaseInfo::LeaseInfo(Ipv6Address addressPool,
+                     Ipv6Prefix prefix,
+                     Ipv6Address minAddress,
+                     Ipv6Address maxAddress)
+{
+    m_addressPool = addressPool;
+    m_prefix = prefix;
+    m_minAddress = minAddress;
+    m_maxAddress = maxAddress;
+    m_numAddresses = 0;
+}
+
+Ipv6Address
+LeaseInfo::GetAddressPool() const
+{
+    return m_addressPool;
+}
+
+Ipv6Prefix
+LeaseInfo::GetPrefix() const
+{
+    return m_prefix;
+}
+
+Ipv6Address
+LeaseInfo::GetMinAddress() const
+{
+    return m_minAddress;
+}
+
+Ipv6Address
+LeaseInfo::GetMaxAddress() const
+{
+    return m_maxAddress;
+}
+
+uint32_t
+LeaseInfo::GetNumAddresses() const
+{
+    return m_numAddresses;
+}
+} // namespace ns3
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/internet-apps/model/dhcp6-server.h ns-3.45/src/internet-apps/model/dhcp6-server.h
--- ns-3.44/src/internet-apps/model/dhcp6-server.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.45/src/internet-apps/model/dhcp6-server.h	2025-06-01 20:34:45.315701200 -0700
@@ -0,0 +1,266 @@
+/*
+ * Copyright (c) 2024 NITK Surathkal
+ *
+ * SPDX-License-Identifier: GPL-2.0-only
+ *
+ * Author: Kavya Bhat <kavyabhat@gmail.com>
+ *
+ */
+
+#ifndef DHCP6_SERVER_H
+#define DHCP6_SERVER_H
+
+#include "dhcp6-duid.h"
+#include "dhcp6-header.h"
+
+#include "ns3/application.h"
+#include "ns3/ipv6-address.h"
+#include "ns3/net-device-container.h"
+#include "ns3/pair.h"
+#include "ns3/ptr.h"
+
+#include <map>
+
+namespace ns3
+{
+
+class Inet6SocketAddress;
+class Socket;
+class Packet;
+
+/**
+ * @ingroup dhcp6
+ *
+ * @class LeaseInfo
+ * @brief Includes information about available subnets and corresponding leases.
+ */
+class LeaseInfo
+{
+  public:
+    /**
+     * Constructor.
+     * @param addressPool Address pool
+     * @param prefix Prefix of the address pool
+     * @param minAddress Minimum address in the pool
+     * @param maxAddress Maximum address in the pool
+     */
+    LeaseInfo(Ipv6Address addressPool,
+              Ipv6Prefix prefix,
+              Ipv6Address minAddress,
+              Ipv6Address maxAddress);
+
+    friend class Dhcp6Server;
+
+  private:
+    /**
+     * @brief Get the address pool.
+     * @return The address pool
+     */
+    Ipv6Address GetAddressPool() const;
+
+    /**
+     * @brief Get the prefix of the address pool.
+     * @return The prefix of the address pool
+     */
+    Ipv6Prefix GetPrefix() const;
+
+    /**
+     * @brief Get the minimum address in the pool.
+     * @return The minimum address in the pool
+     */
+    Ipv6Address GetMinAddress() const;
+
+    /**
+     * @brief Get the maximum address in the pool.
+     * @return The maximum address in the pool
+     */
+    Ipv6Address GetMaxAddress() const;
+
+    /**
+     * @brief Get the number of addresses leased.
+     * @return The number of addresses leased
+     */
+    uint32_t GetNumAddresses() const;
+
+    /**
+     * @brief Expired Addresses (Section 6.2 of RFC 8415)
+     * Expired time / Ipv6Address
+     */
+    typedef std::multimap<Time, std::pair<Duid, Ipv6Address>> ExpiredAddresses;
+
+    /**
+     * @brief Leased Addresses
+     * Client DUID + Ipv6Address / Lease time
+     */
+    typedef std::unordered_multimap<Duid, std::pair<Ipv6Address, Time>, Duid::DuidHash>
+        LeasedAddresses;
+
+    /**
+     * @brief Declined Addresses
+     * Ipv6Address + Client DUID
+     */
+    typedef std::unordered_map<Ipv6Address, Duid, Ipv6AddressHash> DeclinedAddresses;
+
+    LeasedAddresses m_leasedAddresses;     //!< Leased addresses
+    ExpiredAddresses m_expiredAddresses;   //!< Expired addresses
+    DeclinedAddresses m_declinedAddresses; //!< Declined addresses
+    Ipv6Address m_maxOfferedAddress;       //!< Maximum address offered so far.
+
+    Ipv6Address m_addressPool; //!< Address pool
+    Ipv6Prefix m_prefix;       //!< Prefix of the address pool
+    Ipv6Address m_minAddress;  //!< Minimum address in the pool
+    Ipv6Address m_maxAddress;  //!< Maximum address in the pool
+    uint32_t m_numAddresses;   //!< Number of addresses leased.
+};
+
+/**
+ * @ingroup dhcp6
+ *
+ * @class Dhcp6Server
+ * @brief Implements the DHCPv6 server.
+ */
+class Dhcp6Server : public Application
+{
+  public:
+    /**
+     * @brief Get the type ID.
+     * @return the object TypeId
+     */
+    static TypeId GetTypeId();
+
+    /**
+     * @brief Default constructor.
+     */
+    Dhcp6Server();
+
+    /**
+     * @brief Set the list of net devices that the DHCPv6 server will use.
+     * @param netDevices The net devices that the server will listen on.
+     */
+    void SetDhcp6ServerNetDevice(NetDeviceContainer netDevices);
+
+    /**
+     * @brief Add a managed address pool.
+     * @param pool The address pool to be managed by the server.
+     * @param prefix The prefix of the address pool.
+     * @param minAddress The minimum address in the pool.
+     * @param maxAddress The maximum address in the pool.
+     */
+    void AddSubnet(Ipv6Address pool,
+                   Ipv6Prefix prefix,
+                   Ipv6Address minAddress,
+                   Ipv6Address maxAddress);
+
+  protected:
+    void DoDispose() override;
+
+  private:
+    void StartApplication() override;
+    void StopApplication() override;
+
+    /**
+     * @brief Handles incoming packets from the network
+     * @param socket Socket bound to port 547 of the DHCP server
+     */
+    void NetHandler(Ptr<Socket> socket);
+
+    /**
+     * @brief Sends DHCPv6 Advertise after receiving DHCPv6 Solicit.
+     * @param iDev incoming NetDevice
+     * @param header DHCPv6 header of the received message
+     * @param client Address of the DHCPv6 client
+     */
+    void ProcessSolicit(Ptr<NetDevice> iDev, Dhcp6Header header, Inet6SocketAddress client);
+
+    /**
+     * @brief Sends DHCPv6 Advertise after receiving DHCPv6 Solicit.
+     * @param iDev incoming NetDevice
+     * @param header DHCPv6 header of the received message
+     * @param client Address of the DHCPv6 client
+     */
+    void SendAdvertise(Ptr<NetDevice> iDev, Dhcp6Header header, Inet6SocketAddress client);
+
+    /**
+     * @brief Sends Reply after receiving Request
+     * @param iDev incoming NetDevice
+     * @param header DHCPv6 header of the received message
+     * @param client Address of the DHCP client
+     */
+    void SendReply(Ptr<NetDevice> iDev, Dhcp6Header header, Inet6SocketAddress client);
+
+    /**
+     * @brief Sends Reply after receiving Request
+     * @param iDev incoming NetDevice
+     * @param header DHCPv6 header of the received message
+     * @param client Address of the DHCP client
+     */
+    void RenewRebindLeases(Ptr<NetDevice> iDev, Dhcp6Header header, Inet6SocketAddress client);
+
+    /**
+     * @brief Sends Reply after receiving Request
+     * @param iDev incoming NetDevice
+     * @param header DHCPv6 header of the received message
+     * @param client Address of the DHCP client
+     */
+    void UpdateBindings(Ptr<NetDevice> iDev, Dhcp6Header header, Inet6SocketAddress client);
+
+    /**
+     * @brief Modifies the remaining lease time of addresses
+     */
+    void TimerHandler();
+
+    /**
+     * @brief Callback for when an M flag is received.
+     * @param recvInterface The interface on which the M flag was received.
+     */
+    void ReceiveMflag(uint32_t recvInterface);
+
+    /**
+     * @brief Clean up stale lease info.
+     */
+    void CleanLeases();
+
+    Ptr<Socket> m_recvSocket;            //!< Socket bound to port 547.
+    Duid m_serverDuid;                   //!< Server DUID
+    std::vector<LeaseInfo> m_subnets;    //!< List of managed subnets.
+    Time m_leaseCleanup = Seconds(10.0); //!< Lease cleanup time
+    EventId m_leaseCleanupEvent;         //!< Event ID for lease cleanup
+
+    /// Map of NetDevice - Corresponding socket used to send packets.
+    std::unordered_map<uint32_t, Ptr<Socket>> m_sendSockets;
+
+    /// Store IA bindings. Map of DUID + IA Type / IAID
+    std::multimap<Duid, std::pair<Options::OptionType, uint32_t>> m_iaBindings;
+
+    /**
+     * @brief Default preferred lifetime for an address.
+     * According to ISC's Kea guide, the default preferred lifetime is 3000
+     * seconds.
+     */
+    Time m_prefLifetime;
+
+    /**
+     * @brief Default valid lifetime.
+     * According to ISC's Kea guide, the default valid lifetime is 4000 seconds.
+     */
+    Time m_validLifetime;
+
+    /**
+     * @brief The default renew timer.
+     * This defines the T1 timer. According to ISC's Kea guide, the default
+     * renew timer is 1000 seconds.
+     * Maximum value is REN_MAX_RT (RFC 8415, Section 7.6).
+     */
+    Time m_renew;
+
+    /**
+     * @brief The default rebind timer.
+     * This defines the T2 timer. According to ISC's Kea guide, the default
+     * rebind timer is 2000 seconds.
+     * Maximum value is REB_MAX_RT (RFC 8415, Section 7.6).
+     */
+    Time m_rebind;
+};
+} // namespace ns3
+
+#endif
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/internet-apps/model/dhcp-server.cc ns-3.45/src/internet-apps/model/dhcp-server.cc
--- ns-3.44/src/internet-apps/model/dhcp-server.cc	2025-03-09 16:55:49.379371200 -0700
+++ ns-3.45/src/internet-apps/model/dhcp-server.cc	2025-06-01 20:34:45.314701300 -0700
@@ -319,8 +319,7 @@
                               InetSocketAddress(Ipv4Address("255.255.255.255"), from.GetPort()))) >=
             0)
         {
-            NS_LOG_INFO("DHCP OFFER"
-                        << " Offered Address: " << offeredAddress);
+            NS_LOG_INFO("DHCP OFFER Offered Address: " << offeredAddress);
         }
         else
         {
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/internet-apps/model/radvd.cc ns-3.45/src/internet-apps/model/radvd.cc
--- ns-3.44/src/internet-apps/model/radvd.cc	2025-03-09 16:55:49.379371200 -0700
+++ ns-3.45/src/internet-apps/model/radvd.cc	2025-06-01 20:34:45.315701200 -0700
@@ -77,13 +77,19 @@
 {
     NS_LOG_FUNCTION(this);
 
-    m_recvSocket->Close();
-    m_recvSocket = nullptr;
+    if (m_recvSocket)
+    {
+        m_recvSocket->Close();
+        m_recvSocket = nullptr;
+    }
 
     for (auto it = m_sendSockets.begin(); it != m_sendSockets.end(); ++it)
     {
-        it->second->Close();
-        it->second = nullptr;
+        if (it->second)
+        {
+            it->second->Close();
+            it->second = nullptr;
+        }
     }
 
     Application::DoDispose();
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/internet-apps/test/dhcp6-test.cc ns-3.45/src/internet-apps/test/dhcp6-test.cc
--- ns-3.44/src/internet-apps/test/dhcp6-test.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.45/src/internet-apps/test/dhcp6-test.cc	2025-06-01 20:34:45.315701200 -0700
@@ -0,0 +1,200 @@
+/*
+ * Copyright (c) 2024 NITK Surathkal
+ *
+ * SPDX-License-Identifier: GPL-2.0-only
+ *
+ * Author: Kavya Bhat <kavyabhat@gmail.com>
+ *
+ */
+
+#include "ns3/applications-module.h"
+#include "ns3/core-module.h"
+#include "ns3/csma-module.h"
+#include "ns3/data-rate.h"
+#include "ns3/dhcp6-header.h"
+#include "ns3/dhcp6-helper.h"
+#include "ns3/header-serialization-test.h"
+#include "ns3/internet-apps-module.h"
+#include "ns3/internet-module.h"
+#include "ns3/internet-stack-helper.h"
+#include "ns3/ipv6-address-helper.h"
+#include "ns3/log.h"
+#include "ns3/mobility-module.h"
+#include "ns3/network-module.h"
+#include "ns3/ping-helper.h"
+#include "ns3/point-to-point-module.h"
+#include "ns3/simple-net-device-helper.h"
+#include "ns3/simple-net-device.h"
+#include "ns3/simulator.h"
+#include "ns3/ssid.h"
+#include "ns3/test.h"
+#include "ns3/trace-helper.h"
+#include "ns3/wifi-helper.h"
+#include "ns3/yans-wifi-helper.h"
+
+using namespace ns3;
+
+/**
+ * @ingroup dhcp6
+ * @defgroup dhcp6-test DHCPv6 module tests
+ */
+
+/**
+ * @ingroup dhcp6-test
+ * @ingroup tests
+ *
+ * @brief DHCPv6 header tests
+ */
+class Dhcp6TestCase : public TestCase
+{
+  public:
+    Dhcp6TestCase();
+    ~Dhcp6TestCase() override;
+
+    /**
+     * Triggered by an address lease on a client.
+     * @param context The test name.
+     * @param newAddress The leased address.
+     */
+    void LeaseObtained(std::string context, const Ipv6Address& newAddress);
+
+  private:
+    void DoRun() override;
+    Ipv6Address m_leasedAddress[2]; //!< Address given to the nodes
+};
+
+Dhcp6TestCase::Dhcp6TestCase()
+    : TestCase("Dhcp6 test case ")
+{
+}
+
+Dhcp6TestCase::~Dhcp6TestCase()
+{
+}
+
+void
+Dhcp6TestCase::LeaseObtained(std::string context, const Ipv6Address& newAddress)
+{
+    uint8_t numericalContext = std::stoi(context, nullptr, 10);
+
+    if (numericalContext >= 0 && numericalContext < std::size(m_leasedAddress))
+    {
+        m_leasedAddress[numericalContext] = newAddress;
+    }
+}
+
+void
+Dhcp6TestCase::DoRun()
+{
+    NodeContainer nonRouterNodes;
+    nonRouterNodes.Create(3);
+    Ptr<Node> router = CreateObject<Node>();
+    NodeContainer all(nonRouterNodes, router);
+
+    SimpleNetDeviceHelper simpleNetDevice;
+    simpleNetDevice.SetChannelAttribute("Delay", TimeValue(MilliSeconds(2)));
+    simpleNetDevice.SetDeviceAttribute("DataRate", DataRateValue(DataRate("5Mbps")));
+    NetDeviceContainer devices = simpleNetDevice.Install(all); // all nodes
+
+    InternetStackHelper internetv6;
+    internetv6.Install(all);
+
+    Ipv6AddressHelper ipv6;
+    ipv6.SetBase(Ipv6Address("2001:cafe::"), Ipv6Prefix(64));
+    NetDeviceContainer nonRouterDevices;
+    nonRouterDevices.Add(devices.Get(0)); // The server node, S0.
+    nonRouterDevices.Add(devices.Get(1)); // The first client node, N0.
+    nonRouterDevices.Add(devices.Get(2)); // The second client node, N1.
+    Ipv6InterfaceContainer i = ipv6.AssignWithoutAddress(nonRouterDevices);
+
+    NetDeviceContainer routerDevice;
+    routerDevice.Add(devices.Get(3)); // CSMA interface of the node R0.
+    Ipv6InterfaceContainer r1 = ipv6.Assign(routerDevice);
+    r1.SetForwarding(0, true);
+
+    RadvdHelper radvdHelper;
+
+    /* Set up unsolicited RAs */
+    radvdHelper.AddAnnouncedPrefix(r1.GetInterfaceIndex(0), Ipv6Address("2001:cafe::1"), 64);
+    radvdHelper.GetRadvdInterface(r1.GetInterfaceIndex(0))->SetManagedFlag(true);
+
+    Dhcp6Helper dhcp6Helper;
+
+    dhcp6Helper.SetServerAttribute("RenewTime", StringValue("10s"));
+    dhcp6Helper.SetServerAttribute("RebindTime", StringValue("16s"));
+    dhcp6Helper.SetServerAttribute("PreferredLifetime", StringValue("18s"));
+    dhcp6Helper.SetServerAttribute("ValidLifetime", StringValue("20s"));
+
+    // DHCPv6 clients
+    NodeContainer nodes = NodeContainer(nonRouterNodes.Get(1), nonRouterNodes.Get(2));
+    ApplicationContainer dhcpClients = dhcp6Helper.InstallDhcp6Client(nodes);
+    dhcpClients.Start(Seconds(1.0));
+    dhcpClients.Stop(Seconds(20.0));
+
+    // DHCPv6 server
+    NetDeviceContainer serverNetDevices;
+    serverNetDevices.Add(nonRouterDevices.Get(0));
+    ApplicationContainer dhcpServerApp = dhcp6Helper.InstallDhcp6Server(serverNetDevices);
+
+    Ptr<Dhcp6Server> server = DynamicCast<Dhcp6Server>(dhcpServerApp.Get(0));
+    server->AddSubnet(Ipv6Address("2001:cafe::"),
+                      Ipv6Prefix(64),
+                      Ipv6Address("2001:cafe::42:1"),
+                      Ipv6Address("2001:cafe::42:ffff"));
+
+    dhcpServerApp.Start(Seconds(0.0));
+    dhcpServerApp.Stop(Seconds(20.0));
+
+    ApplicationContainer radvdApps = radvdHelper.Install(router);
+    radvdApps.Start(Seconds(1.0));
+    radvdApps.Stop(Seconds(20.0));
+
+    dhcpClients.Get(0)->TraceConnect("NewLease",
+                                     "0",
+                                     MakeCallback(&Dhcp6TestCase::LeaseObtained, this));
+    dhcpClients.Get(1)->TraceConnect("NewLease",
+                                     "1",
+                                     MakeCallback(&Dhcp6TestCase::LeaseObtained, this));
+
+    Simulator::Stop(Seconds(21.0));
+    Simulator::Run();
+
+    // Validate that the client nodes have three addresses on each interface -
+    // link-local, autoconfigured, and leased from DHCPv6 server.
+    Ptr<Ipv6> ipv6_client1 = nonRouterNodes.Get(1)->GetObject<Ipv6>();
+    Ptr<Ipv6L3Protocol> l3_client1 = ipv6_client1->GetObject<Ipv6L3Protocol>();
+    int32_t ifIndex_client1 = ipv6_client1->GetInterfaceForDevice(nonRouterDevices.Get(1));
+
+    NS_TEST_ASSERT_MSG_EQ(l3_client1->GetNAddresses(ifIndex_client1),
+                          3,
+                          "Incorrect number of addresses.");
+
+    Ptr<Ipv6> ipv6_client2 = nonRouterNodes.Get(2)->GetObject<Ipv6>();
+    Ptr<Ipv6L3Protocol> l3_client2 = ipv6_client2->GetObject<Ipv6L3Protocol>();
+    int32_t ifIndex_client2 = ipv6_client2->GetInterfaceForDevice(nonRouterDevices.Get(2));
+    NS_TEST_ASSERT_MSG_EQ(l3_client2->GetNAddresses(ifIndex_client2),
+                          3,
+                          "Incorrect number of addresses.");
+
+    Simulator::Destroy();
+}
+
+/**
+ * @ingroup dhcp6-test
+ * @ingroup tests
+ *
+ * @brief DHCPv6 TestSuite
+ */
+class Dhcp6TestSuite : public TestSuite
+{
+  public:
+    Dhcp6TestSuite();
+};
+
+Dhcp6TestSuite::Dhcp6TestSuite()
+    : TestSuite("dhcp6", Type::UNIT)
+{
+    AddTestCase(new Dhcp6TestCase, TestCase::Duration::QUICK);
+}
+
+static Dhcp6TestSuite dhcp6TestSuite; //!< Static variable for test initialization
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lr-wpan/doc/lr-wpan.rst ns-3.45/src/lr-wpan/doc/lr-wpan.rst
--- ns-3.44/src/lr-wpan/doc/lr-wpan.rst	2025-03-09 16:55:49.419371100 -0700
+++ ns-3.45/src/lr-wpan/doc/lr-wpan.rst	2025-06-01 20:34:45.337701300 -0700
@@ -123,7 +123,6 @@
 ---------------------
 
 - Indirect data transmissions are not supported but planned for a future update.
-- Devices are capable of associating with a single PAN coordinator.
 - Interference is modeled as AWGN but this is currently not thoroughly tested.
 - The standard describes the support of multiple PHY band-modulations but currently, only 250kbps O-QPSK (channel page 0) is supported.
 - Active and passive MAC scans are able to obtain a LQI value from a beacon frame, however, the scan primitives assumes LQI is correctly implemented and does not check the validity of its value.
@@ -136,6 +135,9 @@
 - Indirect transmissions are only supported during the association process.
 - RSSI is not supported as this is part of the 2015 revision and the current implementation only supports until the 2011 revision.
 - PHY and MAC are currently not supported by the attribute system. To change the behavior of the PHY and MAC the standard SET primitives (e.g. MLME-SET.request) must be used.
+- No radio energy model is supported.
+- The PHY does not include sleep state.
+- Preamble is not fully modeled but its duration is considered.
 
 The PHY layer
 -------------
@@ -256,9 +258,10 @@
 1. Enable devices to join a new formed network (associate).
 2. Assign short addresses and PAN ID.
 
-Devices that have the short address ``FF:FF`` are not associated an cannot participate in any unicast communication in the network.
-Devices that have the short address ``FF:FE`` and have a valid PAN ID can communicate with other devices in the network using the
-extended address mode. In this mode, devices will use its 64 bit address (A.K.A. extended address) to communicate in the network.
+.. note::
+    Devices that have the short address ``FF:FF`` are not associated an cannot participate in any unicast communication in the network.
+    Devices that have the short address ``FF:FE`` and have a valid PAN ID can communicate with other devices in the network using the extended address mode.
+    In this mode, devices will use its 64 bit address (A.K.A. extended address) to communicate in the network.
 
 Before ns-3.44, the MAC association struggled to handle scenarios where the association response command arrived before the acknowledgment (ACK)
 for a data request command. This issue could arise in saturated networks and is caused by a delayed data request command ACK
@@ -320,14 +323,13 @@
 
 The default is to use RFC 6282 style addresses.
 
-Note that, on reception, a packet might contain either a short or a long address. This is reflected
-in the upper-layer notification callback, which can contain either the pseudo-address (48 bits) or
-the long address (64 bit) of the sender.
-
-Note also that RFC 4944 or RFC 6282 are the RFCs defining the IPv6 address compression formats
-(HC1 and IPHC respectively). It is definitely not a good idea to either mix devices using different
-pseudo-address format or compression types in the same network. This point is further discussed
-in the ``sixlowpan`` module documentation.
+.. note::
+    On reception, a packet might contain either a short or a long address. This is reflected in the upper-layer notification callback,
+    which can contain either the pseudo-address (48 bits) or the long address (64 bit) of the sender.
+    Also RFC 4944 or RFC 6282 are the RFCs defining the IPv6 address compression formats (HC1 and IPHC respectively).
+    It is definitely not a good idea to either mix devices using different pseudo-address format or compression types in the same network.
+    This point is further discussed in the ``sixlowpan`` module documentation.
+
 
 
 Usage
@@ -369,9 +371,9 @@
 For more complex topologies an auto-configured address assignation scheme is recommended,
 the bootstrap process (scan and association) described by the standard can help with this.
 
-**Important:** Devices that does not have short addresses assigned (Any address other than ``FF:FF``) on PAN IDs cannot communicate in lr-wpan network. Make sure both
-are present in your simulated devices using any of the schemes described.
-
+.. note::
+    As mentioned in previous sections, devices that does not have short addresses assigned (Any address other than ``FF:FF``) and with a valid PAN IDs cannot communicate in lr-wpan network.
+    Make sure both are present in your simulated devices using any of the schemes described.
 
 Finally, the ``LrWpanHelper`` can be used to generate pcap or ascii traces.
 These pcap files can be later on visualized in Wireshark.
@@ -448,7 +450,7 @@
 * ``lr-wpan-phy-test.cc``:  An example to test the phy.
 * ``lr-wpan-ed-scan.cc``:  Simple example showing the use of energy detection (ED) scan in the MAC.
 * ``lr-wpan-active-scan.cc``:  A simple example showing the use of an active scan in the MAC.
-* ``lr-wpan-mlme.cc``: Demonstrates the use of lr-wpan beacon mode. Nodes use a manual association (i.e. No bootstrap) in this example.
+* ``lr-wpan-beacon-mode.cc``: Demonstrates the use of lr-wpan beacon mode. Nodes use a manual association (i.e. No bootstrap) in this example.
 * ``lr-wpan-bootstrap.cc``:  Demonstrates the use of scanning and association working together to initiate a PAN.
 * ``lr-wpan-orphan-scan.cc``: Demonstrates the use of an orphan scanning in a simple network joining procedure.
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lr-wpan/examples/CMakeLists.txt ns-3.45/src/lr-wpan/examples/CMakeLists.txt
--- ns-3.44/src/lr-wpan/examples/CMakeLists.txt	2025-03-09 16:55:49.419371100 -0700
+++ ns-3.45/src/lr-wpan/examples/CMakeLists.txt	2025-06-01 20:34:45.337701300 -0700
@@ -1,6 +1,6 @@
 set(base_examples
     lr-wpan-data
-    lr-wpan-mlme
+    lr-wpan-beacon-mode
     lr-wpan-packet-print
     lr-wpan-phy-test
     lr-wpan-ed-scan
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lr-wpan/examples/lr-wpan-beacon-mode.cc ns-3.45/src/lr-wpan/examples/lr-wpan-beacon-mode.cc
--- ns-3.44/src/lr-wpan/examples/lr-wpan-beacon-mode.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.45/src/lr-wpan/examples/lr-wpan-beacon-mode.cc	2025-06-01 20:34:45.337701300 -0700
@@ -0,0 +1,198 @@
+/*
+ * Copyright (c) 2019 Ritsumeikan University, Shiga, Japan.
+ *
+ * SPDX-License-Identifier: GPL-2.0-only
+ *
+ * Author:  Alberto Gallegos Ramonet <ramonet@fc.ritsumei.ac.jp>
+ */
+
+/*
+ *   Coordinator              End Device
+ *       N0   <----------------  N1
+ *      (dev0)                 (dev1)
+ *
+ * This example demonstrate the usage of the MAC primitives involved in
+ * direct transmissions for the beacon enabled mode of IEEE 802.15.4-2011.
+ * A single packet is sent from an end device to the coordinator during the CAP
+ * of the first incoming superframe.
+ *
+ * This example do not demonstrate a full protocol stack usage.
+ * For full protocol stack usage refer to 6lowpan examples.
+ *
+ */
+
+#include "ns3/constant-position-mobility-model.h"
+#include "ns3/core-module.h"
+#include "ns3/log.h"
+#include "ns3/lr-wpan-module.h"
+#include "ns3/packet.h"
+#include "ns3/propagation-delay-model.h"
+#include "ns3/propagation-loss-model.h"
+#include "ns3/simulator.h"
+#include "ns3/single-model-spectrum-channel.h"
+
+#include <iostream>
+
+using namespace ns3;
+using namespace ns3::lrwpan;
+
+void
+BeaconIndication(MlmeBeaconNotifyIndicationParams params)
+{
+    NS_LOG_UNCOND(Simulator::Now().GetSeconds() << " secs | Received BEACON packet of size ");
+}
+
+void
+DataIndication(McpsDataIndicationParams params, Ptr<Packet> p)
+{
+    NS_LOG_UNCOND(Simulator::Now().GetSeconds()
+                  << " secs | Received DATA packet of size " << p->GetSize());
+}
+
+void
+TransEndIndication(McpsDataConfirmParams params)
+{
+    // In the case of transmissions with the Ack flag activated, the transaction is only
+    // successful if the Ack was received.
+    if (params.m_status == MacStatus::SUCCESS)
+    {
+        NS_LOG_UNCOND(Simulator::Now().GetSeconds() << " secs | Transmission successfully sent");
+    }
+}
+
+void
+DataIndicationCoordinator(McpsDataIndicationParams params, Ptr<Packet> p)
+{
+    NS_LOG_UNCOND(Simulator::Now().GetSeconds()
+                  << "s Coordinator Received DATA packet (size " << p->GetSize() << " bytes)");
+}
+
+void
+StartConfirm(MlmeStartConfirmParams params)
+{
+    if (params.m_status == MacStatus::SUCCESS)
+    {
+        NS_LOG_UNCOND(Simulator::Now().GetSeconds() << "Beacon status SUCCESSFUL");
+    }
+}
+
+int
+main(int argc, char* argv[])
+{
+    LogComponentEnableAll(LOG_PREFIX_TIME);
+    LogComponentEnableAll(LOG_PREFIX_FUNC);
+    LogComponentEnable("LrWpanMac", LOG_LEVEL_INFO);
+    LogComponentEnable("LrWpanCsmaCa", LOG_LEVEL_INFO);
+
+    LrWpanHelper lrWpanHelper;
+
+    // Create 2 nodes, and a NetDevice for each one
+
+    NodeContainer nodes;
+    nodes.Create(2);
+
+    // Use LrWpanHelper to create devices and assign them to nodes
+    lrWpanHelper.SetPropagationDelayModel("ns3::ConstantSpeedPropagationDelayModel");
+    lrWpanHelper.AddPropagationLossModel("ns3::LogDistancePropagationLossModel");
+    NetDeviceContainer devices = lrWpanHelper.Install(nodes);
+    Ptr<LrWpanNetDevice> dev0 = devices.Get(0)->GetObject<LrWpanNetDevice>();
+    Ptr<LrWpanNetDevice> dev1 = devices.Get(1)->GetObject<LrWpanNetDevice>();
+
+    dev0->SetAddress(Mac16Address("00:01"));
+    dev1->SetAddress(Mac16Address("00:02"));
+
+    ///////////////// Mobility   ///////////////////////
+    Ptr<ConstantPositionMobilityModel> sender0Mobility =
+        CreateObject<ConstantPositionMobilityModel>();
+    sender0Mobility->SetPosition(Vector(0, 0, 0));
+    dev0->GetPhy()->SetMobility(sender0Mobility);
+    Ptr<ConstantPositionMobilityModel> sender1Mobility =
+        CreateObject<ConstantPositionMobilityModel>();
+
+    sender1Mobility->SetPosition(Vector(0, 10, 0)); // 10 m distance
+    dev1->GetPhy()->SetMobility(sender1Mobility);
+
+    /////// MAC layer Callbacks hooks/////////////
+
+    MlmeStartConfirmCallback cb0;
+    cb0 = MakeCallback(&StartConfirm);
+    dev0->GetMac()->SetMlmeStartConfirmCallback(cb0);
+
+    McpsDataConfirmCallback cb1;
+    cb1 = MakeCallback(&TransEndIndication);
+    dev1->GetMac()->SetMcpsDataConfirmCallback(cb1);
+
+    MlmeBeaconNotifyIndicationCallback cb3;
+    cb3 = MakeCallback(&BeaconIndication);
+    dev1->GetMac()->SetMlmeBeaconNotifyIndicationCallback(cb3);
+
+    McpsDataIndicationCallback cb4;
+    cb4 = MakeCallback(&DataIndication);
+    dev1->GetMac()->SetMcpsDataIndicationCallback(cb4);
+
+    McpsDataIndicationCallback cb5;
+    cb5 = MakeCallback(&DataIndicationCoordinator);
+    dev0->GetMac()->SetMcpsDataIndicationCallback(cb5);
+
+    //////////// Manual device association ////////////////////
+    // Note: We manually associate the devices to a PAN coordinator
+    //       (i.e. bootstrap is not used);
+    //       The PAN COORDINATOR does not need to associate or set its
+    //       PAN Id or its own coordinator id, these are set
+    //       by the MLME-start.request primitive when used.
+
+    dev1->GetMac()->SetPanId(5);
+    dev1->GetMac()->SetAssociatedCoor(Mac16Address("00:01"));
+
+    ///////////////////// Start transmitting beacons from coordinator ////////////////////////
+
+    MlmeStartRequestParams params;
+    params.m_panCoor = true;
+    params.m_PanId = 5;
+    params.m_bcnOrd = 14;
+    params.m_sfrmOrd = 6;
+    Simulator::ScheduleWithContext(1,
+                                   Seconds(2),
+                                   &LrWpanMac::MlmeStartRequest,
+                                   dev0->GetMac(),
+                                   params);
+
+    ///////////////////// Transmission of data Packets from end device //////////////////////
+
+    Ptr<Packet> p1 = Create<Packet>(5);
+    McpsDataRequestParams params2;
+    params2.m_dstPanId = 5;
+    params2.m_srcAddrMode = SHORT_ADDR;
+    params2.m_dstAddrMode = SHORT_ADDR;
+    params2.m_dstAddr = Mac16Address("00:01");
+    params2.m_msduHandle = 0;
+    // params2.m_txOptions = TX_OPTION_ACK;  // Enable direct transmission with Ack
+
+    /////////////////////////////////////////////////////////////////////////////////////
+    // Examples of time parameters for transmissions in the first incoming superframe. //
+    /////////////////////////////////////////////////////////////////////////////////////
+
+    // 2.981 sec      No time to finish CCA in CAP, the transmission at this time will cause
+    //                the packet to be deferred to the next superframe.
+
+    // 2.982 sec      No time to finish random backoff delay in CAP, the  transmission at this
+    //                time will cause the packet to be deferred to the next superframe.
+
+    // 2.93 sec       Enough time, the packet can be transmitted within the CAP of the first
+    // superframe
+
+    // MCPS-DATA.request Beacon enabled Direct Transmission (dev1)
+    // Frame transmission from End Device to Coordinator (Direct transmission)
+    Simulator::ScheduleWithContext(1,
+                                   Seconds(2.93),
+                                   &LrWpanMac::McpsDataRequest,
+                                   dev1->GetMac(),
+                                   params2,
+                                   p1);
+
+    Simulator::Stop(Seconds(600));
+    Simulator::Run();
+
+    Simulator::Destroy();
+    return 0;
+}
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lr-wpan/examples/lr-wpan-data.cc ns-3.45/src/lr-wpan/examples/lr-wpan-data.cc
--- ns-3.44/src/lr-wpan/examples/lr-wpan-data.cc	2025-03-09 16:55:49.419371100 -0700
+++ ns-3.45/src/lr-wpan/examples/lr-wpan-data.cc	2025-06-01 20:34:45.337701300 -0700
@@ -46,7 +46,7 @@
 static void
 DataConfirm(McpsDataConfirmParams params)
 {
-    NS_LOG_UNCOND("LrWpanMcpsDataConfirmStatus = " << params.m_status);
+    NS_LOG_UNCOND("LrWpanMcpsDataConfirmStatus = " << static_cast<uint16_t>(params.m_status));
 }
 
 /**
@@ -126,18 +126,23 @@
     //    Ptr<LrWpanNetDevice> dev0 = devices.Get(0)->GetObject<LrWpanNetDevice>();
     //    Ptr<LrWpanNetDevice> dev1 = devices.Get(1)->GetObject<LrWpanNetDevice>();
 
-    // Set 16-bit short addresses if extended is false, otherwise use 64-bit extended addresses
+    // Set 16-bit and 64-bit MAC addresses.
+    // Note: Extended addresses must ALWAYS be present. If the devices are using the extended
+    // address mode, short addresses should use the short address FF:FE. A short address of FF:FF
+    // indicates that the devices is not associated to any device.
     if (!extended)
     {
-        dev0->SetAddress(Mac16Address("00:01"));
-        dev1->SetAddress(Mac16Address("00:02"));
+        dev0->GetMac()->SetExtendedAddress(Mac64Address("00:00:00:00:00:00:00:01"));
+        dev1->GetMac()->SetExtendedAddress(Mac64Address("00:00:00:00:00:00:00:02"));
+        dev0->GetMac()->SetShortAddress(Mac16Address("00:01"));
+        dev1->GetMac()->SetShortAddress(Mac16Address("00:02"));
     }
     else
     {
-        Ptr<LrWpanMac> mac0 = dev0->GetMac();
-        Ptr<LrWpanMac> mac1 = dev1->GetMac();
-        mac0->SetExtendedAddress(Mac64Address("00:00:00:00:00:00:00:01"));
-        mac1->SetExtendedAddress(Mac64Address("00:00:00:00:00:00:00:02"));
+        dev0->GetMac()->SetExtendedAddress(Mac64Address("00:00:00:00:00:00:00:01"));
+        dev1->GetMac()->SetExtendedAddress(Mac64Address("00:00:00:00:00:00:00:02"));
+        dev0->GetMac()->SetShortAddress(Mac16Address("FF:FE"));
+        dev1->GetMac()->SetShortAddress(Mac16Address("FF:FE"));
     }
 
     // Trace state changes in the phy
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lr-wpan/examples/lr-wpan-mlme.cc ns-3.45/src/lr-wpan/examples/lr-wpan-mlme.cc
--- ns-3.44/src/lr-wpan/examples/lr-wpan-mlme.cc	2025-03-09 16:55:49.419371100 -0700
+++ ns-3.45/src/lr-wpan/examples/lr-wpan-mlme.cc	1969-12-31 16:00:00.000000000 -0800
@@ -1,198 +0,0 @@
-/*
- * Copyright (c) 2019 Ritsumeikan University, Shiga, Japan.
- *
- * SPDX-License-Identifier: GPL-2.0-only
- *
- * Author:  Alberto Gallegos Ramonet <ramonet@fc.ritsumei.ac.jp>
- */
-
-/*
- *   Coordinator              End Device
- *       N0   <----------------  N1
- *      (dev0)                 (dev1)
- *
- * This example demonstrate the usage of the MAC primitives involved in
- * direct transmissions for the beacon enabled mode of IEEE 802.15.4-2011.
- * A single packet is sent from an end device to the coordinator during the CAP
- * of the first incoming superframe.
- *
- * This example do not demonstrate a full protocol stack usage.
- * For full protocol stack usage refer to 6lowpan examples.
- *
- */
-
-#include "ns3/constant-position-mobility-model.h"
-#include "ns3/core-module.h"
-#include "ns3/log.h"
-#include "ns3/lr-wpan-module.h"
-#include "ns3/packet.h"
-#include "ns3/propagation-delay-model.h"
-#include "ns3/propagation-loss-model.h"
-#include "ns3/simulator.h"
-#include "ns3/single-model-spectrum-channel.h"
-
-#include <iostream>
-
-using namespace ns3;
-using namespace ns3::lrwpan;
-
-void
-BeaconIndication(MlmeBeaconNotifyIndicationParams params)
-{
-    NS_LOG_UNCOND(Simulator::Now().GetSeconds() << " secs | Received BEACON packet of size ");
-}
-
-void
-DataIndication(McpsDataIndicationParams params, Ptr<Packet> p)
-{
-    NS_LOG_UNCOND(Simulator::Now().GetSeconds()
-                  << " secs | Received DATA packet of size " << p->GetSize());
-}
-
-void
-TransEndIndication(McpsDataConfirmParams params)
-{
-    // In the case of transmissions with the Ack flag activated, the transaction is only
-    // successful if the Ack was received.
-    if (params.m_status == MacStatus::SUCCESS)
-    {
-        NS_LOG_UNCOND(Simulator::Now().GetSeconds() << " secs | Transmission successfully sent");
-    }
-}
-
-void
-DataIndicationCoordinator(McpsDataIndicationParams params, Ptr<Packet> p)
-{
-    NS_LOG_UNCOND(Simulator::Now().GetSeconds()
-                  << "s Coordinator Received DATA packet (size " << p->GetSize() << " bytes)");
-}
-
-void
-StartConfirm(MlmeStartConfirmParams params)
-{
-    if (params.m_status == MacStatus::SUCCESS)
-    {
-        NS_LOG_UNCOND(Simulator::Now().GetSeconds() << "Beacon status SUCCESSFUL");
-    }
-}
-
-int
-main(int argc, char* argv[])
-{
-    LogComponentEnableAll(LOG_PREFIX_TIME);
-    LogComponentEnableAll(LOG_PREFIX_FUNC);
-    LogComponentEnable("LrWpanMac", LOG_LEVEL_INFO);
-    LogComponentEnable("LrWpanCsmaCa", LOG_LEVEL_INFO);
-
-    LrWpanHelper lrWpanHelper;
-
-    // Create 2 nodes, and a NetDevice for each one
-
-    NodeContainer nodes;
-    nodes.Create(2);
-
-    // Use LrWpanHelper to create devices and assign them to nodes
-    lrWpanHelper.SetPropagationDelayModel("ns3::ConstantSpeedPropagationDelayModel");
-    lrWpanHelper.AddPropagationLossModel("ns3::LogDistancePropagationLossModel");
-    NetDeviceContainer devices = lrWpanHelper.Install(nodes);
-    Ptr<LrWpanNetDevice> dev0 = devices.Get(0)->GetObject<LrWpanNetDevice>();
-    Ptr<LrWpanNetDevice> dev1 = devices.Get(1)->GetObject<LrWpanNetDevice>();
-
-    dev0->SetAddress(Mac16Address("00:01"));
-    dev1->SetAddress(Mac16Address("00:02"));
-
-    ///////////////// Mobility   ///////////////////////
-    Ptr<ConstantPositionMobilityModel> sender0Mobility =
-        CreateObject<ConstantPositionMobilityModel>();
-    sender0Mobility->SetPosition(Vector(0, 0, 0));
-    dev0->GetPhy()->SetMobility(sender0Mobility);
-    Ptr<ConstantPositionMobilityModel> sender1Mobility =
-        CreateObject<ConstantPositionMobilityModel>();
-
-    sender1Mobility->SetPosition(Vector(0, 10, 0)); // 10 m distance
-    dev1->GetPhy()->SetMobility(sender1Mobility);
-
-    /////// MAC layer Callbacks hooks/////////////
-
-    MlmeStartConfirmCallback cb0;
-    cb0 = MakeCallback(&StartConfirm);
-    dev0->GetMac()->SetMlmeStartConfirmCallback(cb0);
-
-    McpsDataConfirmCallback cb1;
-    cb1 = MakeCallback(&TransEndIndication);
-    dev1->GetMac()->SetMcpsDataConfirmCallback(cb1);
-
-    MlmeBeaconNotifyIndicationCallback cb3;
-    cb3 = MakeCallback(&BeaconIndication);
-    dev1->GetMac()->SetMlmeBeaconNotifyIndicationCallback(cb3);
-
-    McpsDataIndicationCallback cb4;
-    cb4 = MakeCallback(&DataIndication);
-    dev1->GetMac()->SetMcpsDataIndicationCallback(cb4);
-
-    McpsDataIndicationCallback cb5;
-    cb5 = MakeCallback(&DataIndicationCoordinator);
-    dev0->GetMac()->SetMcpsDataIndicationCallback(cb5);
-
-    //////////// Manual device association ////////////////////
-    // Note: We manually associate the devices to a PAN coordinator
-    //       (i.e. bootstrap is not used);
-    //       The PAN COORDINATOR does not need to associate or set its
-    //       PAN Id or its own coordinator id, these are set
-    //       by the MLME-start.request primitive when used.
-
-    dev1->GetMac()->SetPanId(5);
-    dev1->GetMac()->SetAssociatedCoor(Mac16Address("00:01"));
-
-    ///////////////////// Start transmitting beacons from coordinator ////////////////////////
-
-    MlmeStartRequestParams params;
-    params.m_panCoor = true;
-    params.m_PanId = 5;
-    params.m_bcnOrd = 14;
-    params.m_sfrmOrd = 6;
-    Simulator::ScheduleWithContext(1,
-                                   Seconds(2),
-                                   &LrWpanMac::MlmeStartRequest,
-                                   dev0->GetMac(),
-                                   params);
-
-    ///////////////////// Transmission of data Packets from end device //////////////////////
-
-    Ptr<Packet> p1 = Create<Packet>(5);
-    McpsDataRequestParams params2;
-    params2.m_dstPanId = 5;
-    params2.m_srcAddrMode = SHORT_ADDR;
-    params2.m_dstAddrMode = SHORT_ADDR;
-    params2.m_dstAddr = Mac16Address("00:01");
-    params2.m_msduHandle = 0;
-    // params2.m_txOptions = TX_OPTION_ACK;  // Enable direct transmission with Ack
-
-    /////////////////////////////////////////////////////////////////////////////////////
-    // Examples of time parameters for transmissions in the first incoming superframe. //
-    /////////////////////////////////////////////////////////////////////////////////////
-
-    // 2.981 sec      No time to finish CCA in CAP, the transmission at this time will cause
-    //                the packet to be deferred to the next superframe.
-
-    // 2.982 sec      No time to finish random backoff delay in CAP, the  transmission at this
-    //                time will cause the packet to be deferred to the next superframe.
-
-    // 2.93 sec       Enough time, the packet can be transmitted within the CAP of the first
-    // superframe
-
-    // MCPS-DATA.request Beacon enabled Direct Transmission (dev1)
-    // Frame transmission from End Device to Coordinator (Direct transmission)
-    Simulator::ScheduleWithContext(1,
-                                   Seconds(2.93),
-                                   &LrWpanMac::McpsDataRequest,
-                                   dev1->GetMac(),
-                                   params2,
-                                   p1);
-
-    Simulator::Stop(Seconds(600));
-    Simulator::Run();
-
-    Simulator::Destroy();
-    return 0;
-}
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lr-wpan/model/lr-wpan-mac-header.h ns-3.45/src/lr-wpan/model/lr-wpan-mac-header.h
--- ns-3.44/src/lr-wpan/model/lr-wpan-mac-header.h	2025-03-09 16:55:49.419371100 -0700
+++ ns-3.45/src/lr-wpan/model/lr-wpan-mac-header.h	2025-06-01 20:34:45.339701200 -0700
@@ -431,10 +431,11 @@
 
     uint8_t m_secctrlReserved; //!< Auxiliary security header - Security Control field - Bit 5-7
 
+    /// Auxiliary security header
     union {
         uint32_t m_auxKeyIdKeySrc32; //!< Auxiliary security header - Key Source (4 Octets)
         uint64_t m_auxKeyIdKeySrc64; //!< Auxiliary security header - Key Source (8 Octets)
-    };                               //!< Auxiliary security header
+    };
 
     uint8_t m_auxKeyIdKeyIndex; //!< Auxiliary security header - Key Index (1 Octet)
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lte/examples/lena-dual-stripe.cc ns-3.45/src/lte/examples/lena-dual-stripe.cc
--- ns-3.44/src/lte/examples/lena-dual-stripe.cc	2025-03-09 16:55:49.471371400 -0700
+++ ns-3.45/src/lte/examples/lena-dual-stripe.cc	2025-06-01 20:34:45.367701300 -0700
@@ -896,7 +896,7 @@
                             InetSocketAddress(Ipv4Address::GetAny(), ulPort));
                         serverApps.Add(ulPacketSinkHelper.Install(remoteHost));
                     }
-                } // end if (useUdp)
+                }
 
                 Ptr<EpcTft> tft = Create<EpcTft>();
                 if (epcDl)
@@ -922,8 +922,7 @@
                 Time startTime = Seconds(startTimeSeconds->GetValue());
                 serverApps.Start(startTime);
                 clientApps.Start(startTime);
-
-            } // end for b
+            }
         }
     }
     else // (epc == false)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lte/examples/lena-radio-link-failure.cc ns-3.45/src/lte/examples/lena-radio-link-failure.cc
--- ns-3.44/src/lte/examples/lena-radio-link-failure.cc	2025-03-09 16:55:49.475371400 -0700
+++ ns-3.45/src/lte/examples/lena-radio-link-failure.cc	2025-06-01 20:34:45.368701500 -0700
@@ -556,7 +556,7 @@
             dlClientApps.Start(Seconds(0.27));
             ulServerApps.Start(Seconds(0.27));
             ulClientApps.Start(Seconds(0.27));
-        } // end for b
+        }
     }
     NS_LOG_INFO("Enable Lte traces and connect custom trace sinks");
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lte/examples/lena-x2-handover.cc ns-3.45/src/lte/examples/lena-x2-handover.cc
--- ns-3.44/src/lte/examples/lena-x2-handover.cc	2025-03-09 16:55:49.475371400 -0700
+++ ns-3.45/src/lte/examples/lena-x2-handover.cc	2025-06-01 20:34:45.368701500 -0700
@@ -323,8 +323,7 @@
             serverApps.Start(startTime);
             clientApps.Start(startTime);
             clientApps.Stop(simTime);
-
-        } // end for b
+        }
     }
 
     // Add X2 interface
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lte/examples/lena-x2-handover-measures.cc ns-3.45/src/lte/examples/lena-x2-handover-measures.cc
--- ns-3.44/src/lte/examples/lena-x2-handover-measures.cc	2025-03-09 16:55:49.475371400 -0700
+++ ns-3.45/src/lte/examples/lena-x2-handover-measures.cc	2025-06-01 20:34:45.368701500 -0700
@@ -276,8 +276,7 @@
             Time startTime = Seconds(startTimeSeconds->GetValue());
             serverApps.Start(startTime);
             clientApps.Start(startTime);
-
-        } // end for b
+        }
     }
 
     // Add X2 interface
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lte/helper/cc-helper.h ns-3.45/src/lte/helper/cc-helper.h
--- ns-3.44/src/lte/helper/cc-helper.h	2025-03-09 16:55:49.475371400 -0700
+++ ns-3.45/src/lte/helper/cc-helper.h	2025-06-01 20:34:45.368701500 -0700
@@ -187,8 +187,7 @@
     uint16_t m_dlBandwidth;               ///< Downlink Bandwidth
     uint16_t m_ulBandwidth;               ///< Uplink Bandwidth
     uint16_t m_numberOfComponentCarriers; ///< Number of component carriers
-
-}; // end of `class LteHelper`
+};
 
 } // namespace ns3
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lte/helper/emu-epc-helper.cc ns-3.45/src/lte/helper/emu-epc-helper.cc
--- ns-3.44/src/lte/helper/emu-epc-helper.cc	2025-03-09 16:55:49.475371400 -0700
+++ ns-3.45/src/lte/helper/emu-epc-helper.cc	2025-06-01 20:34:45.368701500 -0700
@@ -89,12 +89,6 @@
     return tid;
 }
 
-TypeId
-EmuEpcHelper::GetInstanceTypeId() const
-{
-    return GetTypeId();
-}
-
 void
 EmuEpcHelper::DoDispose()
 {
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lte/helper/emu-epc-helper.h ns-3.45/src/lte/helper/emu-epc-helper.h
--- ns-3.44/src/lte/helper/emu-epc-helper.h	2025-03-09 16:55:49.475371400 -0700
+++ ns-3.45/src/lte/helper/emu-epc-helper.h	2025-06-01 20:34:45.368701500 -0700
@@ -47,7 +47,6 @@
      * @return The object TypeId.
      */
     static TypeId GetTypeId();
-    TypeId GetInstanceTypeId() const override;
     void DoDispose() override;
 
     // inherited from EpcHelper
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lte/helper/lte-helper.cc ns-3.45/src/lte/helper/lte-helper.cc
--- ns-3.44/src/lte/helper/lte-helper.cc	2025-03-09 16:55:49.479371500 -0700
+++ ns-3.45/src/lte/helper/lte-helper.cc	2025-06-01 20:34:45.369701400 -0700
@@ -786,7 +786,7 @@
         {
             NS_LOG_WARN("UL propagation model does not have a Frequency attribute");
         }
-    } // end for
+    }
     rrc->SetForwardUpCallback(MakeCallback(&LteEnbNetDevice::Receive, dev));
     dev->Initialize();
     n->AddDevice(dev);
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lte/helper/lte-helper.h ns-3.45/src/lte/helper/lte-helper.h
--- ns-3.44/src/lte/helper/lte-helper.h	2025-03-09 16:55:49.479371500 -0700
+++ ns-3.45/src/lte/helper/lte-helper.h	2025-06-01 20:34:45.369701400 -0700
@@ -847,8 +847,7 @@
      * Number of component carriers that will be installed by default at eNodeB and UE devices.
      */
     uint16_t m_noOfCcs;
-
-}; // end of `class LteHelper`
+};
 
 } // namespace ns3
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lte/helper/no-backhaul-epc-helper.cc ns-3.45/src/lte/helper/no-backhaul-epc-helper.cc
--- ns-3.44/src/lte/helper/no-backhaul-epc-helper.cc	2025-03-09 16:55:49.479371500 -0700
+++ ns-3.45/src/lte/helper/no-backhaul-epc-helper.cc	2025-06-01 20:34:45.369701400 -0700
@@ -288,12 +288,6 @@
     return tid;
 }
 
-TypeId
-NoBackhaulEpcHelper::GetInstanceTypeId() const
-{
-    return GetTypeId();
-}
-
 void
 NoBackhaulEpcHelper::DoDispose()
 {
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lte/helper/no-backhaul-epc-helper.h ns-3.45/src/lte/helper/no-backhaul-epc-helper.h
--- ns-3.44/src/lte/helper/no-backhaul-epc-helper.h	2025-03-09 16:55:49.479371500 -0700
+++ ns-3.45/src/lte/helper/no-backhaul-epc-helper.h	2025-06-01 20:34:45.369701400 -0700
@@ -51,7 +51,6 @@
      * @return The object TypeId.
      */
     static TypeId GetTypeId();
-    TypeId GetInstanceTypeId() const override;
     void DoDispose() override;
 
     // inherited from EpcHelper
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lte/helper/point-to-point-epc-helper.cc ns-3.45/src/lte/helper/point-to-point-epc-helper.cc
--- ns-3.44/src/lte/helper/point-to-point-epc-helper.cc	2025-03-09 16:55:49.479371500 -0700
+++ ns-3.45/src/lte/helper/point-to-point-epc-helper.cc	2025-06-01 20:34:45.369701400 -0700
@@ -82,12 +82,6 @@
     return tid;
 }
 
-TypeId
-PointToPointEpcHelper::GetInstanceTypeId() const
-{
-    return GetTypeId();
-}
-
 void
 PointToPointEpcHelper::DoDispose()
 {
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lte/helper/point-to-point-epc-helper.h ns-3.45/src/lte/helper/point-to-point-epc-helper.h
--- ns-3.44/src/lte/helper/point-to-point-epc-helper.h	2025-03-09 16:55:49.479371500 -0700
+++ ns-3.45/src/lte/helper/point-to-point-epc-helper.h	2025-06-01 20:34:45.369701400 -0700
@@ -44,7 +44,6 @@
      * @return The object TypeId.
      */
     static TypeId GetTypeId();
-    TypeId GetInstanceTypeId() const override;
     void DoDispose() override;
 
     // inherited from EpcHelper
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lte/helper/radio-environment-map-helper.h ns-3.45/src/lte/helper/radio-environment-map-helper.h
--- ns-3.44/src/lte/helper/radio-environment-map-helper.h	2025-03-09 16:55:49.479371500 -0700
+++ ns-3.45/src/lte/helper/radio-environment-map-helper.h	2025-06-01 20:34:45.370701300 -0700
@@ -147,8 +147,7 @@
 
     bool m_useDataChannel; ///< The `UseDataChannel` attribute.
     int32_t m_rbId;        ///< The `RbId` attribute.
-
-}; // end of `class RadioEnvironmentMapHelper`
+};
 
 } // namespace ns3
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lte/model/a2-a4-rsrq-handover-algorithm.cc ns-3.45/src/lte/model/a2-a4-rsrq-handover-algorithm.cc
--- ns-3.44/src/lte/model/a2-a4-rsrq-handover-algorithm.cc	2025-03-09 16:55:49.479371500 -0700
+++ ns-3.45/src/lte/model/a2-a4-rsrq-handover-algorithm.cc	2025-06-01 20:34:45.370701300 -0700
@@ -157,8 +157,7 @@
     {
         NS_LOG_WARN("Ignoring measId " << (uint16_t)measResults.measId);
     }
-
-} // end of DoReportUeMeas
+}
 
 void
 A2A4RsrqHandoverAlgorithm::EvaluateHandover(uint16_t rnti, uint8_t servingCellRsrq)
@@ -202,10 +201,8 @@
                 m_handoverManagementSapUser->TriggerHandover(rnti, bestNeighbourCellId);
             }
         }
-
-    } // end of else of if (it1 == m_neighbourCellMeasures.end ())
-
-} // end of EvaluateMeasurementReport
+    }
+}
 
 bool
 A2A4RsrqHandoverAlgorithm::IsValidNeighbour(uint16_t cellId)
@@ -244,7 +241,6 @@
     {
         neighbourCellMeasures = it2->second;
         neighbourCellMeasures->m_cellId = cellId;
-        neighbourCellMeasures->m_rsrp = 0;
         neighbourCellMeasures->m_rsrq = rsrq;
     }
     else
@@ -252,11 +248,9 @@
         // insert a new cell entry
         neighbourCellMeasures = Create<UeMeasure>();
         neighbourCellMeasures->m_cellId = cellId;
-        neighbourCellMeasures->m_rsrp = 0;
         neighbourCellMeasures->m_rsrq = rsrq;
         it1->second[cellId] = neighbourCellMeasures;
     }
-
-} // end of UpdateNeighbourMeasurements
+}
 
 } // end of namespace ns3
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lte/model/a2-a4-rsrq-handover-algorithm.h ns-3.45/src/lte/model/a2-a4-rsrq-handover-algorithm.h
--- ns-3.44/src/lte/model/a2-a4-rsrq-handover-algorithm.h	2025-03-09 16:55:49.479371500 -0700
+++ ns-3.45/src/lte/model/a2-a4-rsrq-handover-algorithm.h	2025-06-01 20:34:45.370701300 -0700
@@ -139,7 +139,6 @@
     {
       public:
         uint16_t m_cellId; ///< Cell ID.
-        uint8_t m_rsrp;    ///< RSRP in quantized format. \todo Can be removed?
         uint8_t m_rsrq;    ///< RSRQ in quantized format.
     };
 
@@ -177,8 +176,7 @@
     LteHandoverManagementSapUser* m_handoverManagementSapUser;
     /// Receive API calls from the eNodeB RRC instance.
     LteHandoverManagementSapProvider* m_handoverManagementSapProvider;
-
-}; // end of class A2A4RsrqHandoverAlgorithm
+};
 
 } // end of namespace ns3
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lte/model/a3-rsrp-handover-algorithm.cc ns-3.45/src/lte/model/a3-rsrp-handover-algorithm.cc
--- ns-3.44/src/lte/model/a3-rsrp-handover-algorithm.cc	2025-03-09 16:55:49.479371500 -0700
+++ ns-3.45/src/lte/model/a3-rsrp-handover-algorithm.cc	2025-06-01 20:34:45.370701300 -0700
@@ -156,7 +156,7 @@
         // Inform eNodeB RRC about handover
         m_handoverManagementSapUser->TriggerHandover(rnti, bestNeighbourCellId);
     }
-} // end of DoReportUeMeas
+}
 
 bool
 A3RsrpHandoverAlgorithm::IsValidNeighbour(uint16_t cellId)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lte/model/a3-rsrp-handover-algorithm.h ns-3.45/src/lte/model/a3-rsrp-handover-algorithm.h
--- ns-3.44/src/lte/model/a3-rsrp-handover-algorithm.h	2025-03-09 16:55:49.479371500 -0700
+++ ns-3.45/src/lte/model/a3-rsrp-handover-algorithm.h	2025-06-01 20:34:45.370701300 -0700
@@ -108,8 +108,7 @@
     LteHandoverManagementSapUser* m_handoverManagementSapUser;
     /// Receive API calls from the eNodeB RRC instance.
     LteHandoverManagementSapProvider* m_handoverManagementSapProvider;
-
-}; // end of class A3RsrpHandoverAlgorithm
+};
 
 } // end of namespace ns3
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lte/model/cqa-ff-mac-scheduler.cc ns-3.45/src/lte/model/cqa-ff-mac-scheduler.cc
--- ns-3.44/src/lte/model/cqa-ff-mac-scheduler.cc	2025-03-09 16:55:49.483371500 -0700
+++ ns-3.45/src/lte/model/cqa-ff-mac-scheduler.cc	2025-06-01 20:34:45.370701300 -0700
@@ -34,13 +34,13 @@
 
 NS_LOG_COMPONENT_DEFINE("CqaFfMacScheduler");
 
-/// CGA Type 0 Allocation
+/// CGA Type 0 Allocation (see table 7.1.6.1-1 of 36.213)
 static const int CqaType0AllocationRbg[4] = {
     10,  // RBG size 1
     26,  // RBG size 2
     63,  // RBG size 3
     110, // RBG size 4
-};       // see table 7.1.6.1-1 of 36.213
+};
 
 NS_OBJECT_ENSURE_REGISTERED(CqaFfMacScheduler);
 
@@ -299,10 +299,10 @@
                 m_ueLogicalChannelsConfigList.find(flowid)->second = *lcit;
             }
         }
-
-    } // else new UE is added
+    }
     else
     {
+        // Add new UE
         for (auto lcit = params.m_logicalChannelConfigList.begin();
              lcit != params.m_logicalChannelConfigList.end();
              lcit++)
@@ -1257,8 +1257,8 @@
                     }
                     sum += sbCqi;
                 }
-            } // end if cqi
-        }     // end of rbgNum
+            }
+        }
 
         sbCqiSum.insert(std::pair<uint16_t, uint8_t>((*itrbr).first.m_rnti, sum));
     }
@@ -1307,6 +1307,7 @@
             break;
         }
 
+        // While there are more users in current group
         while (!availableRBGs.empty() && !itCurrentGroup->second.empty())
         {
             bool currentRBchecked = false;
@@ -1528,9 +1529,8 @@
             {
                 itCurrentGroup->second.erase(userWithMaximumMetric);
             }
-
-        } // while there are more users in current group
-    }     // while there are more groups of users
+        }
+    }
 
     // reset TTI stats of users
     for (auto itStats = m_flowStatsDl.begin(); itStats != m_flowStatsDl.end(); itStats++)
@@ -1676,7 +1676,7 @@
         }
 
         itMap++;
-    }                               // end while allocation
+    }
     ret.m_nrOfPdcchOfdmSymbols = 1; // TODO: check correct value according the DCIs txed
 
     // update UEs stats
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lte/model/epc-tft-classifier.cc ns-3.45/src/lte/model/epc-tft-classifier.cc
--- ns-3.44/src/lte/model/epc-tft-classifier.cc	2025-03-09 16:55:49.483371500 -0700
+++ ns-3.45/src/lte/model/epc-tft-classifier.cc	2025-06-01 20:34:45.371701500 -0700
@@ -251,10 +251,9 @@
 
     if (protocolNumber == Ipv4L3Protocol::PROT_NUMBER)
     {
-        NS_LOG_INFO("Classifying packet:"
-                    << " localAddr=" << localAddressIpv4 << " remoteAddr=" << remoteAddressIpv4
-                    << " localPort=" << localPort << " remotePort=" << remotePort << " tos=0x"
-                    << (uint16_t)tos);
+        NS_LOG_INFO("Classifying packet: localAddr="
+                    << localAddressIpv4 << " remoteAddr=" << remoteAddressIpv4 << " localPort="
+                    << localPort << " remotePort=" << remotePort << " tos=0x" << (uint16_t)tos);
 
         // now it is possible to classify the packet!
         // we use a reverse iterator since filter priority is not implemented properly.
@@ -282,10 +281,9 @@
     }
     else if (protocolNumber == Ipv6L3Protocol::PROT_NUMBER)
     {
-        NS_LOG_INFO("Classifying packet:"
-                    << " localAddr=" << localAddressIpv6 << " remoteAddr=" << remoteAddressIpv6
-                    << " localPort=" << localPort << " remotePort=" << remotePort << " tos=0x"
-                    << (uint16_t)tos);
+        NS_LOG_INFO("Classifying packet: localAddr="
+                    << localAddressIpv6 << " remoteAddr=" << remoteAddressIpv6 << " localPort="
+                    << localPort << " remotePort=" << remotePort << " tos=0x" << (uint16_t)tos);
 
         // now it is possible to classify the packet!
         // we use a reverse iterator since filter priority is not implemented properly.
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lte/model/fdbet-ff-mac-scheduler.cc ns-3.45/src/lte/model/fdbet-ff-mac-scheduler.cc
--- ns-3.44/src/lte/model/fdbet-ff-mac-scheduler.cc	2025-03-09 16:55:49.599372000 -0700
+++ ns-3.45/src/lte/model/fdbet-ff-mac-scheduler.cc	2025-06-01 20:34:45.473701700 -0700
@@ -26,13 +26,13 @@
 
 NS_LOG_COMPONENT_DEFINE("FdBetFfMacScheduler");
 
-/// FdBetType0AllocationRbg array
+/// FdBetType0AllocationRbg array (see table 7.1.6.1-1 of 36.213)
 static const int FdBetType0AllocationRbg[4] = {
     10,  // RBG size 1
     26,  // RBG size 2
     63,  // RBG size 3
     110, // RBG size 4
-};       // see table 7.1.6.1-1 of 36.213
+};
 
 NS_OBJECT_ENSURE_REGISTERED(FdBetFfMacScheduler);
 
@@ -988,17 +988,15 @@
                         itMax = it;
                         metricMax = metric;
                     }
-                } // end for estAveThr
+                }
 
                 rbgMap.at(i) = true;
-
-            } // end for free RBGs
+            }
 
             i++;
 
         } while (i < rbgNum); // end for RBGs
-
-    } // end if estAveThr
+    }
 
     // reset TTI stats of users
     for (auto itStats = m_flowStatsDl.begin(); itStats != m_flowStatsDl.end(); itStats++)
@@ -1147,7 +1145,7 @@
         }
 
         itMap++;
-    }                               // end while allocation
+    }
     ret.m_nrOfPdcchOfdmSymbols = 1; /// \todo check correct value according the DCIs txed
 
     // update UEs stats
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lte/model/fdmt-ff-mac-scheduler.cc ns-3.45/src/lte/model/fdmt-ff-mac-scheduler.cc
--- ns-3.44/src/lte/model/fdmt-ff-mac-scheduler.cc	2025-03-09 16:55:49.599372000 -0700
+++ ns-3.45/src/lte/model/fdmt-ff-mac-scheduler.cc	2025-06-01 20:34:45.473701700 -0700
@@ -26,13 +26,13 @@
 
 NS_LOG_COMPONENT_DEFINE("FdMtFfMacScheduler");
 
-/// FdMtType0AllocationRbg size array
+/// FdMtType0AllocationRbg size array (see table 7.1.6.1-1 of 36.213)
 static const int FdMtType0AllocationRbg[4] = {
     10,  // RBG size 1
     26,  // RBG size 2
     63,  // RBG size 3
     110, // RBG size 4
-};       // see table 7.1.6.1-1 of 36.213
+};
 
 NS_OBJECT_ENSURE_REGISTERED(FdMtFfMacScheduler);
 
@@ -922,9 +922,8 @@
                         itMax = it;
                     }
                 }
-            } // end if cqi
-
-        } // end for m_rlcBufferReq
+            }
+        }
 
         if (itMax == m_flowStatsDl.end())
         {
@@ -948,7 +947,7 @@
             }
             NS_LOG_INFO(this << " UE assigned " << (*itMax));
         }
-    } // end for RBGs
+    }
 
     // generate the transmission opportunities by grouping the RBGs of the same RNTI and
     // creating the correspondent DCIs
@@ -1127,7 +1126,7 @@
         ret.m_buildDataList.push_back(newEl);
 
         itMap++;
-    }                               // end while allocation
+    }
     ret.m_nrOfPdcchOfdmSymbols = 1; /// \todo check correct value according the DCIs txed
 
     m_schedSapUser->SchedDlConfigInd(ret);
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lte/model/fdtbfq-ff-mac-scheduler.cc ns-3.45/src/lte/model/fdtbfq-ff-mac-scheduler.cc
--- ns-3.44/src/lte/model/fdtbfq-ff-mac-scheduler.cc	2025-03-09 16:55:49.599372000 -0700
+++ ns-3.45/src/lte/model/fdtbfq-ff-mac-scheduler.cc	2025-06-01 20:34:45.473701700 -0700
@@ -27,13 +27,13 @@
 
 NS_LOG_COMPONENT_DEFINE("FdTbfqFfMacScheduler");
 
-/// FdTbfqType0AllocationRbg value array
+/// FdTbfqType0AllocationRbg value array (see table 7.1.6.1-1 of 36.213)
 static const int FdTbfqType0AllocationRbg[4] = {
     10,  // RBG size 1
     26,  // RBG size 2
     63,  // RBG size 3
     110, // RBG size 4
-};       // see table 7.1.6.1-1 of 36.213
+};
 
 NS_OBJECT_ENSURE_REGISTERED(FdTbfqFfMacScheduler);
 
@@ -1056,7 +1056,7 @@
                 metricMax = metric;
                 itMax = it;
             }
-        } // end for m_flowStatsDl
+        }
 
         if (itMax == m_flowStatsDl.end())
         {
@@ -1200,9 +1200,9 @@
                             achievableRateMax = achievableRate;
                             rbgIndex = k;
                         }
-                    } // end of LcActivePerFlow
-                }     // end of cqi
-            }         // end of for rbgNum
+                    }
+                }
+            }
 
             if (rbgIndex == rbgNum) // impossible
             {
@@ -1294,8 +1294,7 @@
                               8); // (size of TB in bytes according to table 7.1.7.2.1-1 of 36.213)
                 bytesTxed += tbSize;
             }
-
-        } // end of while()
+        }
 
         // remove and unmark last RBG assigned to UE
         if (bytesTxed > budget)
@@ -1339,7 +1338,7 @@
                 }
             }
         }
-    } // end of RBGs
+    }
 
     // generate the transmission opportunities by grouping the RBGs of the same RNTI and
     // creating the correspondent DCIs
@@ -1519,7 +1518,7 @@
         ret.m_buildDataList.push_back(newEl);
 
         itMap++;
-    }                               // end while allocation
+    }
     ret.m_nrOfPdcchOfdmSymbols = 1; /// \todo check correct value according the DCIs txed
 
     m_schedSapUser->SchedDlConfigInd(ret);
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lte/model/lte-amc.h ns-3.45/src/lte/model/lte-amc.h
--- ns-3.44/src/lte/model/lte-amc.h	2025-03-09 16:55:49.599372000 -0700
+++ ns-3.45/src/lte/model/lte-amc.h	2025-06-01 20:34:45.474701600 -0700
@@ -121,8 +121,7 @@
      * AMC model used to assign CQI.
      */
     AmcModel m_amcModel;
-
-}; // end of `class LteAmc`
+};
 
 } // namespace ns3
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lte/model/lte-anr.cc ns-3.45/src/lte/model/lte-anr.cc
--- ns-3.44/src/lte/model/lte-anr.cc	2025-03-09 16:55:49.599372000 -0700
+++ ns-3.45/src/lte/model/lte-anr.cc	2025-06-01 20:34:45.474701600 -0700
@@ -183,21 +183,16 @@
                     neighbourRelation.detectedAsNeighbour = true;
                     m_neighbourRelationTable[it->physCellId] = neighbourRelation;
                 }
-
-            } // end of for (it = measResults.measResultListEutra.begin ())
-
-        } // end of if (measResults.haveMeasResultNeighCells &&
-          // !(measResults.measResultListEutra.empty ()))
+            }
+        }
         else
         {
             NS_LOG_WARN(
                 this << " Event A4 received without measurement results from neighbouring cells");
             /// @todo Remove neighbours in the NRT.
         }
-
-    } // end of else of if (measId != m_measId)
-
-} // end of DoReportUeMeas
+    }
+}
 
 void
 LteAnr::DoAddNeighbourRelation(uint16_t cellId)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lte/model/lte-anr.h ns-3.45/src/lte/model/lte-anr.h
--- ns-3.44/src/lte/model/lte-anr.h	2025-03-09 16:55:49.599372000 -0700
+++ ns-3.45/src/lte/model/lte-anr.h	2025-06-01 20:34:45.474701600 -0700
@@ -221,8 +221,7 @@
 
     /// Serving cell ID
     uint16_t m_servingCellId;
-
-}; // end of class LteAnr
+};
 
 } // end of namespace ns3
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lte/model/lte-anr-sap.h ns-3.45/src/lte/model/lte-anr-sap.h
--- ns-3.44/src/lte/model/lte-anr-sap.h	2025-03-09 16:55:49.599372000 -0700
+++ ns-3.45/src/lte/model/lte-anr-sap.h	2025-06-01 20:34:45.474701600 -0700
@@ -132,7 +132,8 @@
   private:
     C* m_owner; ///< the owner class
 
-}; // end of class MemberLteAnrSapProvider
+    // end of class MemberLteAnrSapProvider
+};
 
 template <class C>
 MemberLteAnrSapProvider<C>::MemberLteAnrSapProvider(C* owner)
@@ -199,7 +200,8 @@
   private:
     C* m_owner; ///< the owner class
 
-}; // end of class MemberLteAnrSapUser
+    // end of class MemberLteAnrSapUser
+};
 
 template <class C>
 MemberLteAnrSapUser<C>::MemberLteAnrSapUser(C* owner)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lte/model/lte-common.h ns-3.45/src/lte/model/lte-common.h
--- ns-3.44/src/lte/model/lte-common.h	2025-03-09 16:55:49.599372000 -0700
+++ ns-3.45/src/lte/model/lte-common.h	2025-06-01 20:34:45.474701600 -0700
@@ -371,8 +371,7 @@
      * \sa LteRrcSap::CellSelectionInfo
      */
     static double IeValue2ActualQQualMin(int8_t qQualMinIeValue);
-
-}; // end of class EutranMeasurementMapping
+};
 
 }; // namespace ns3
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lte/model/lte-control-messages.h ns-3.45/src/lte/model/lte-control-messages.h
--- ns-3.44/src/lte/model/lte-control-messages.h	2025-03-09 16:55:49.599372000 -0700
+++ ns-3.45/src/lte/model/lte-control-messages.h	2025-06-01 20:34:45.474701600 -0700
@@ -341,7 +341,8 @@
   private:
     LteRrcSap::MasterInformationBlock m_mib; ///< MIB
 
-}; // end of class MibLteControlMessage
+    // end of class MibLteControlMessage
+};
 
 // ---------------------------------------------------------------------------
 
@@ -379,7 +380,8 @@
   private:
     LteRrcSap::SystemInformationBlockType1 m_sib1; ///< SIB1
 
-}; // end of class Sib1LteControlMessage
+    // end of class Sib1LteControlMessage
+};
 
 } // namespace ns3
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lte/model/lte-enb-component-carrier-manager.h ns-3.45/src/lte/model/lte-enb-component-carrier-manager.h
--- ns-3.44/src/lte/model/lte-enb-component-carrier-manager.h	2025-03-09 16:55:49.599372000 -0700
+++ ns-3.45/src/lte/model/lte-enb-component-carrier-manager.h	2025-06-01 20:34:45.475701800 -0700
@@ -210,8 +210,7 @@
     LteCcmRrcSapProvider*
         m_ccmRrcSapProvider; //!< A pointer to the SAP interface of the CCM instance to receive API
                              //!< calls from the eNodeB RRC instance.
-
-}; // end of class LteEnbComponentCarrierManager
+};
 
 } // end of namespace ns3
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lte/model/lte-enb-net-device.h ns-3.45/src/lte/model/lte-enb-net-device.h
--- ns-3.44/src/lte/model/lte-enb-net-device.h	2025-03-09 16:55:49.599372000 -0700
+++ ns-3.45/src/lte/model/lte-enb-net-device.h	2025-06-01 20:34:45.475701800 -0700
@@ -257,8 +257,7 @@
 
     Ptr<LteEnbComponentCarrierManager>
         m_componentCarrierManager; ///< the component carrier manager of this eNb
-
-}; // end of class LteEnbNetDevice
+};
 
 } // namespace ns3
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lte/model/lte-enb-phy.cc ns-3.45/src/lte/model/lte-enb-phy.cc
--- ns-3.44/src/lte/model/lte-enb-phy.cc	2025-03-09 16:55:49.599372000 -0700
+++ ns-3.45/src/lte/model/lte-enb-phy.cc	2025-06-01 20:34:45.475701800 -0700
@@ -871,12 +871,13 @@
     m_ulBandwidth = ulBandwidth;
     m_dlBandwidth = dlBandwidth;
 
+    // See table 7.1.6.1-1 of 36.213
     static const int Type0AllocationRbg[4] = {
         10,  // RBG size 1
         26,  // RBG size 2
         63,  // RBG size 3
         110, // RBG size 4
-    };       // see table 7.1.6.1-1 of 36.213
+    };
     for (int i = 0; i < 4; i++)
     {
         if (dlBandwidth < Type0AllocationRbg[i])
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lte/model/lte-enb-phy.h ns-3.45/src/lte/model/lte-enb-phy.h
--- ns-3.44/src/lte/model/lte-enb-phy.h	2025-03-09 16:55:49.599372000 -0700
+++ ns-3.45/src/lte/model/lte-enb-phy.h	2025-06-01 20:34:45.475701800 -0700
@@ -503,8 +503,7 @@
      * PhyTransmissionStatParameters.
      */
     TracedCallback<PhyTransmissionStatParameters> m_dlPhyTransmission;
-
-}; // end of `class LteEnbPhy`
+};
 
 } // namespace ns3
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lte/model/lte-enb-rrc.cc ns-3.45/src/lte/model/lte-enb-rrc.cc
--- ns-3.44/src/lte/model/lte-enb-rrc.cc	2025-03-09 16:55:49.599372000 -0700
+++ ns-3.45/src/lte/model/lte-enb-rrc.cc	2025-06-01 20:34:45.476701700 -0700
@@ -1369,8 +1369,7 @@
                                         m_rrc->ComponentCarrierToCellId(m_componentCarrierId),
                                         m_rnti,
                                         msg);
-
-} // end of UeManager::RecvMeasurementReport
+}
 
 // methods forwarded from CMAC SAP
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lte/model/lte-enb-rrc.h ns-3.45/src/lte/model/lte-enb-rrc.h
--- ns-3.44/src/lte/model/lte-enb-rrc.h	2025-03-09 16:55:49.599372000 -0700
+++ ns-3.45/src/lte/model/lte-enb-rrc.h	2025-06-01 20:34:45.476701700 -0700
@@ -1768,14 +1768,17 @@
      */
     TracedCallback<uint64_t, uint16_t, uint16_t> m_handoverFailureJoiningTrace;
 
-    uint16_t m_numberOfComponentCarriers; ///< number of component carriers
+    /// Number of component carriers
+    uint16_t m_numberOfComponentCarriers;
 
-    bool m_carriersConfigured; ///< are carriers configured
+    /// Are carriers configured
+    bool m_carriersConfigured;
 
-    std::map<uint8_t, Ptr<ComponentCarrierBaseStation>>
-        m_componentCarrierPhyConf; ///< component carrier phy configuration
+    /// Component carrier phy configuration
+    std::map<uint8_t, Ptr<ComponentCarrierBaseStation>> m_componentCarrierPhyConf;
 
-}; // end of `class LteEnbRrc`
+    // end of `class LteEnbRrc`
+};
 
 /**
  * @brief Stream insertion operator.
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lte/model/lte-ffr-algorithm.cc ns-3.45/src/lte/model/lte-ffr-algorithm.cc
--- ns-3.44/src/lte/model/lte-ffr-algorithm.cc	2025-03-09 16:55:49.599372000 -0700
+++ ns-3.45/src/lte/model/lte-ffr-algorithm.cc	2025-06-01 20:34:45.476701700 -0700
@@ -18,13 +18,13 @@
 
 NS_LOG_COMPONENT_DEFINE("LteFfrAlgorithm");
 
-/// Type 0 RBG allocation
+/// Type 0 RBG allocation (see table 7.1.6.1-1 of 3GPP TS 36.213)
 static const int Type0AllocationRbg[4] = {
     10,  // RBG size 1
     26,  // RBG size 2
     63,  // RBG size 3
     110, // RBG size 4
-};       // see table 7.1.6.1-1 of 3GPP TS 36.213
+};
 
 NS_OBJECT_ENSURE_REGISTERED(LteFfrAlgorithm);
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lte/model/lte-ffr-algorithm.h ns-3.45/src/lte/model/lte-ffr-algorithm.h
--- ns-3.44/src/lte/model/lte-ffr-algorithm.h	2025-03-09 16:55:49.599372000 -0700
+++ ns-3.45/src/lte/model/lte-ffr-algorithm.h	2025-06-01 20:34:45.476701700 -0700
@@ -243,8 +243,7 @@
     bool m_enabledInUplink; /**< If true FR algorithm will also work in Uplink*/
 
     bool m_needReconfiguration; /**< If true FR algorithm will be reconfigured*/
-
-}; // end of class LteFfrAlgorithm
+};
 
 } // end of namespace ns3
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lte/model/lte-ffr-distributed-algorithm.cc ns-3.45/src/lte/model/lte-ffr-distributed-algorithm.cc
--- ns-3.44/src/lte/model/lte-ffr-distributed-algorithm.cc	2025-03-09 16:55:49.599372000 -0700
+++ ns-3.45/src/lte/model/lte-ffr-distributed-algorithm.cc	2025-06-01 20:34:45.476701700 -0700
@@ -701,7 +701,6 @@
         cellMeasures->m_rsrq = rsrq;
         it1->second[cellId] = cellMeasures;
     }
-
-} // end of UpdateNeighbourMeasurements
+}
 
 } // end of namespace ns3
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lte/model/lte-ffr-distributed-algorithm.h ns-3.45/src/lte/model/lte-ffr-distributed-algorithm.h
--- ns-3.44/src/lte/model/lte-ffr-distributed-algorithm.h	2025-03-09 16:55:49.599372000 -0700
+++ ns-3.45/src/lte/model/lte-ffr-distributed-algorithm.h	2025-06-01 20:34:45.476701700 -0700
@@ -178,8 +178,7 @@
     std::map<uint16_t, uint32_t> m_cellWeightMap; ///< cell weight map
 
     std::map<uint16_t, std::vector<bool>> m_rntp; ///< RNTP
-
-}; // end of class LteFfrDistributedAlgorithm
+};
 
 } // end of namespace ns3
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lte/model/lte-ffr-enhanced-algorithm.h ns-3.45/src/lte/model/lte-ffr-enhanced-algorithm.h
--- ns-3.44/src/lte/model/lte-ffr-enhanced-algorithm.h	2025-03-09 16:55:49.599372000 -0700
+++ ns-3.45/src/lte/model/lte-ffr-enhanced-algorithm.h	2025-06-01 20:34:45.476701700 -0700
@@ -181,8 +181,7 @@
 
     /// The expected measurement identity
     uint8_t m_measId;
-
-}; // end of class LteFfrEnhancedAlgorithm
+};
 
 } // end of namespace ns3
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lte/model/lte-ffr-rrc-sap.h ns-3.45/src/lte/model/lte-ffr-rrc-sap.h
--- ns-3.44/src/lte/model/lte-ffr-rrc-sap.h	2025-03-09 16:55:49.599372000 -0700
+++ ns-3.45/src/lte/model/lte-ffr-rrc-sap.h	2025-06-01 20:34:45.476701700 -0700
@@ -148,7 +148,8 @@
   private:
     C* m_owner; ///< the owner class
 
-}; // end of class MemberLteFfrRrcSapProvider
+    // end of class MemberLteFfrRrcSapProvider
+};
 
 template <class C>
 MemberLteFfrRrcSapProvider<C>::MemberLteFfrRrcSapProvider(C* owner)
@@ -214,7 +215,8 @@
   private:
     C* m_owner; ///< the owner class
 
-}; // end of class LteFfrRrcSapUser
+    // end of class LteFfrRrcSapUser
+};
 
 template <class C>
 MemberLteFfrRrcSapUser<C>::MemberLteFfrRrcSapUser(C* owner)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lte/model/lte-ffr-sap.h ns-3.45/src/lte/model/lte-ffr-sap.h
--- ns-3.44/src/lte/model/lte-ffr-sap.h	2025-03-09 16:55:49.599372000 -0700
+++ ns-3.45/src/lte/model/lte-ffr-sap.h	2025-06-01 20:34:45.476701700 -0700
@@ -165,7 +165,8 @@
   private:
     C* m_owner; ///< the owner class
 
-}; // end of class MemberLteFfrSapProvider
+    // end of class MemberLteFfrSapProvider
+};
 
 template <class C>
 MemberLteFfrSapProvider<C>::MemberLteFfrSapProvider(C* owner)
@@ -260,7 +261,8 @@
   private:
     C* m_owner; ///< the owner class
 
-}; // end of class LteFfrSapUser
+    // end of class LteFfrSapUser
+};
 
 template <class C>
 MemberLteFfrSapUser<C>::MemberLteFfrSapUser(C* owner)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lte/model/lte-ffr-soft-algorithm.h ns-3.45/src/lte/model/lte-ffr-soft-algorithm.h
--- ns-3.44/src/lte/model/lte-ffr-soft-algorithm.h	2025-03-09 16:55:49.599372000 -0700
+++ ns-3.45/src/lte/model/lte-ffr-soft-algorithm.h	2025-06-01 20:34:45.476701700 -0700
@@ -151,8 +151,7 @@
 
     /// The expected measurement identity
     uint8_t m_measId;
-
-}; // end of class LteFfrSoftAlgorithm
+};
 
 } // end of namespace ns3
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lte/model/lte-fr-hard-algorithm.h ns-3.45/src/lte/model/lte-fr-hard-algorithm.h
--- ns-3.44/src/lte/model/lte-fr-hard-algorithm.h	2025-03-09 16:55:49.599372000 -0700
+++ ns-3.45/src/lte/model/lte-fr-hard-algorithm.h	2025-06-01 20:34:45.476701700 -0700
@@ -113,8 +113,7 @@
 
     std::vector<bool> m_dlRbgMap; ///< DL RBG Map
     std::vector<bool> m_ulRbgMap; ///< UL RBG Map
-
-}; // end of class LteFrHardAlgorithm
+};
 
 } // end of namespace ns3
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lte/model/lte-fr-no-op-algorithm.h ns-3.45/src/lte/model/lte-fr-no-op-algorithm.h
--- ns-3.44/src/lte/model/lte-fr-no-op-algorithm.h	2025-03-09 16:55:49.599372000 -0700
+++ ns-3.45/src/lte/model/lte-fr-no-op-algorithm.h	2025-06-01 20:34:45.476701700 -0700
@@ -87,8 +87,7 @@
     // FFR RRF SAP
     LteFfrRrcSapUser* m_ffrRrcSapUser;         ///< FFR RRC SAP user
     LteFfrRrcSapProvider* m_ffrRrcSapProvider; ///< FFR RRC SAP provider
-
-}; // end of class LteFrNoOpAlgorithm
+};
 
 } // end of namespace ns3
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lte/model/lte-fr-soft-algorithm.h ns-3.45/src/lte/model/lte-fr-soft-algorithm.h
--- ns-3.44/src/lte/model/lte-fr-soft-algorithm.h	2025-03-09 16:55:49.599372000 -0700
+++ ns-3.45/src/lte/model/lte-fr-soft-algorithm.h	2025-06-01 20:34:45.477701700 -0700
@@ -142,8 +142,7 @@
 
     /// The expected measurement identity
     uint8_t m_measId;
-
-}; // end of class LteFrSoftAlgorithm
+};
 
 } // end of namespace ns3
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lte/model/lte-fr-strict-algorithm.h ns-3.45/src/lte/model/lte-fr-strict-algorithm.h
--- ns-3.44/src/lte/model/lte-fr-strict-algorithm.h	2025-03-09 16:55:49.599372000 -0700
+++ ns-3.45/src/lte/model/lte-fr-strict-algorithm.h	2025-06-01 20:34:45.477701700 -0700
@@ -142,8 +142,7 @@
 
     /// The expected measurement identity
     uint8_t m_measId;
-
-}; // end of class LteFrStrictAlgorithm
+};
 
 } // end of namespace ns3
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lte/model/lte-handover-algorithm.h ns-3.45/src/lte/model/lte-handover-algorithm.h
--- ns-3.44/src/lte/model/lte-handover-algorithm.h	2025-03-09 16:55:49.599372000 -0700
+++ ns-3.45/src/lte/model/lte-handover-algorithm.h	2025-06-01 20:34:45.477701700 -0700
@@ -91,8 +91,7 @@
      * @param measResults a single report of one measurement identity
      */
     virtual void DoReportUeMeas(uint16_t rnti, LteRrcSap::MeasResults measResults) = 0;
-
-}; // end of class LteHandoverAlgorithm
+};
 
 } // end of namespace ns3
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lte/model/lte-handover-management-sap.h ns-3.45/src/lte/model/lte-handover-management-sap.h
--- ns-3.44/src/lte/model/lte-handover-management-sap.h	2025-03-09 16:55:49.599372000 -0700
+++ ns-3.45/src/lte/model/lte-handover-management-sap.h	2025-06-01 20:34:45.477701700 -0700
@@ -116,7 +116,8 @@
   private:
     C* m_owner; ///< the owner class
 
-}; // end of class MemberLteHandoverManagementSapProvider
+    // end of class MemberLteHandoverManagementSapProvider
+};
 
 template <class C>
 MemberLteHandoverManagementSapProvider<C>::MemberLteHandoverManagementSapProvider(C* owner)
@@ -159,7 +160,8 @@
   private:
     C* m_owner; ///< the owner class
 
-}; // end of class MemberLteAnrSapUser
+    // end of class MemberLteAnrSapUser
+};
 
 template <class C>
 MemberLteHandoverManagementSapUser<C>::MemberLteHandoverManagementSapUser(C* owner)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lte/model/lte-phy.h ns-3.45/src/lte/model/lte-phy.h
--- ns-3.44/src/lte/model/lte-phy.h	2025-03-09 16:55:49.603371900 -0700
+++ ns-3.45/src/lte/model/lte-phy.h	2025-06-01 20:34:45.478701800 -0700
@@ -290,8 +290,7 @@
 
     /// component carrier Id used to address sap
     uint8_t m_componentCarrierId;
-
-}; // end of `class LtePhy`
+};
 
 } // namespace ns3
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lte/model/lte-rlc-am.cc ns-3.45/src/lte/model/lte-rlc-am.cc
--- ns-3.44/src/lte/model/lte-rlc-am.cc	2025-03-09 16:55:49.603371900 -0700
+++ ns-3.45/src/lte/model/lte-rlc-am.cc	2025-06-01 20:34:45.478701800 -0700
@@ -1059,6 +1059,7 @@
 
         bool incrementVtA = true;
 
+        // Loop over SN : VT(A) <= SN < ACK SN
         for (sn = m_vtA; sn < ackSn && sn < m_vtS; sn++)
         {
             NS_LOG_LOGIC("sn = " << sn);
@@ -1134,8 +1135,7 @@
                 ackSn.SetModulusBase(m_vtA);
                 sn.SetModulusBase(m_vtA);
             }
-
-        } // loop over SN : VT(A) <= SN < ACK SN
+        }
 
         return;
     }
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lte/model/lte-rrc-header.cc ns-3.45/src/lte/model/lte-rrc-header.cc
--- ns-3.44/src/lte/model/lte-rrc-header.cc	2025-03-09 16:55:49.603371900 -0700
+++ ns-3.45/src/lte/model/lte-rrc-header.cc	2025-06-01 20:34:45.479701800 -0700
@@ -1414,7 +1414,7 @@
                 default:
                     SerializeEnum(16, 15);
                 }
-            } // end trigger type
+            }
 
             // Serialize triggerQuantity
             if (it->reportConfigEutra.triggerQuantity == LteRrcSap::ReportConfigEutra::RSRP)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lte/model/lte-rrc-sap.h ns-3.45/src/lte/model/lte-rrc-sap.h
--- ns-3.44/src/lte/model/lte-rrc-sap.h	2025-03-09 16:55:49.603371900 -0700
+++ ns-3.45/src/lte/model/lte-rrc-sap.h	2025-06-01 20:34:45.480701700 -0700
@@ -669,7 +669,7 @@
     {
         uint16_t physCellId; ///< Phy cell ID
         bool haveCgiInfo;    ///< have CGI info?
-        CgiInfo cgiInfo;     ///< CGI info
+        CgiInfo cgiInfo{};   ///< CGI info
         bool haveRsrpResult; ///< have RSRP result
         uint8_t rsrpResult;  ///< RSRP result
         bool haveRsrqResult; ///< have RSRQ result?
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lte/model/lte-spectrum-phy.cc ns-3.45/src/lte/model/lte-spectrum-phy.cc
--- ns-3.44/src/lte/model/lte-spectrum-phy.cc	2025-03-09 16:55:49.603371900 -0700
+++ ns-3.45/src/lte/model/lte-spectrum-phy.cc	2025-06-01 20:34:45.480701700 -0700
@@ -998,7 +998,7 @@
             params.m_size = (*itTb).second.size;
             params.m_rv = (*itTb).second.rv;
             params.m_ndi = (*itTb).second.ndi;
-            params.m_correctness = (uint8_t) !(*itTb).second.corrupt;
+            params.m_correctness = static_cast<uint8_t>(!(*itTb).second.corrupt);
             params.m_ccId = m_componentCarrierId;
             if ((*itTb).second.downlink)
             {
@@ -1147,7 +1147,7 @@
                         m_harqPhyModule->ResetDlHarqProcessStatus((*itTb).second.harqProcessId);
                     }
                 }
-            } // end if ((*itTb).second.downlink) HARQ
+            }
         }
     }
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lte/model/lte-ue-component-carrier-manager.h ns-3.45/src/lte/model/lte-ue-component-carrier-manager.h
--- ns-3.44/src/lte/model/lte-ue-component-carrier-manager.h	2025-03-09 16:55:49.603371900 -0700
+++ ns-3.45/src/lte/model/lte-ue-component-carrier-manager.h	2025-06-01 20:34:45.480701700 -0700
@@ -95,8 +95,7 @@
     std::map<uint8_t, LteMacSapProvider*>
         m_macSapProvidersMap; //!< Map of pointers to SAP to interfaces of the MAC instance if the
                               //!< flows of this UE.
-
-}; // end of class LteUeComponentCarrierManager
+};
 
 } // end of namespace ns3
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lte/model/lte-ue-mac.cc ns-3.45/src/lte/model/lte-ue-mac.cc
--- ns-3.44/src/lte/model/lte-ue-mac.cc	2025-03-09 16:55:49.603371900 -0700
+++ ns-3.45/src/lte/model/lte-ue-mac.cc	2025-06-01 20:34:45.480701700 -0700
@@ -230,11 +230,11 @@
       m_bsrLast(),
       m_freshUlBsr(false),
       m_harqProcessId(0),
+      m_miUlHarqProcessesPacketTimer(HARQ_PERIOD, 0),
       m_rnti(0),
       m_imsi(0),
       m_rachConfigured(false),
       m_waitingForRaResponse(false)
-
 {
     NS_LOG_FUNCTION(this);
     m_miUlHarqProcessesPacket.resize(HARQ_PERIOD);
@@ -243,7 +243,6 @@
         Ptr<PacketBurst> pb = CreateObject<PacketBurst>();
         m_miUlHarqProcessesPacket.at(i) = pb;
     }
-    m_miUlHarqProcessesPacketTimer.resize(HARQ_PERIOD, 0);
 
     m_macSapProvider = new UeMemberLteMacSapProvider(this);
     m_cmacSapProvider = new UeMemberLteUeCmacSapProvider(this);
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lte/model/lte-ue-net-device.h ns-3.45/src/lte/model/lte-ue-net-device.h
--- ns-3.44/src/lte/model/lte-ue-net-device.h	2025-03-09 16:55:49.603371900 -0700
+++ ns-3.45/src/lte/model/lte-ue-net-device.h	2025-06-01 20:34:45.481701900 -0700
@@ -184,8 +184,7 @@
     uint32_t m_csgId; ///< the CSG ID
 
     std::map<uint8_t, Ptr<ComponentCarrierUe>> m_ccMap; ///< CC map
-
-}; // end of class LteUeNetDevice
+};
 
 } // namespace ns3
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lte/model/lte-ue-phy.cc ns-3.45/src/lte/model/lte-ue-phy.cc
--- ns-3.44/src/lte/model/lte-ue-phy.cc	2025-03-09 16:55:49.607372000 -0700
+++ ns-3.45/src/lte/model/lte-ue-phy.cc	2025-06-01 20:34:45.481701900 -0700
@@ -663,12 +663,10 @@
         }
 
         itPss++;
-
-    } // end of while (itPss != m_pssList.end ())
+    }
 
     m_pssList.clear();
-
-} // end of void LteUePhy::GenerateCtrlCqiReport (const SpectrumValue& sinr)
+}
 
 double
 LteUePhy::ComputeAvgSinr(const SpectrumValue& sinr)
@@ -1195,8 +1193,7 @@
     el.pssPsdSum = sum;
     el.nRB = nRB;
     m_pssList.push_back(el);
-
-} // end of void LteUePhy::ReceivePss (uint16_t cellId, Ptr<SpectrumValue> p)
+}
 
 void
 LteUePhy::QueueSubChannelsForTransmission(std::vector<int> rbMap)
@@ -1279,7 +1276,7 @@
                 NS_LOG_LOGIC(this << " UE - UL NOTHING TO SEND");
             }
         }
-    } // m_configured
+    }
 
     // trigger the MAC
     m_uePhySapUser->SubframeIndication(frameNo, subframeNo);
@@ -1369,8 +1366,7 @@
      */
     m_downlinkSpectrumPhy->m_interferenceCtrl->EndRx();
     m_downlinkSpectrumPhy->m_interferenceData->EndRx();
-
-} // end of void LteUePhy::DoReset ()
+}
 
 void
 LteUePhy::DoStartCellSearch(uint32_t dlEarfcn)
@@ -1432,12 +1428,13 @@
     {
         m_dlBandwidth = dlBandwidth;
 
+        // See table 7.1.6.1-1 of 36.213
         static const int Type0AllocationRbg[4] = {
             10,  // RBG size 1
             26,  // RBG size 2
             63,  // RBG size 3
             110, // RBG size 4
-        };       // see table 7.1.6.1-1 of 36.213
+        };
         for (int i = 0; i < 4; i++)
         {
             if (dlBandwidth < Type0AllocationRbg[i])
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lte/model/lte-ue-phy.h ns-3.45/src/lte/model/lte-ue-phy.h
--- ns-3.44/src/lte/model/lte-ue-phy.h	2025-03-09 16:55:49.607372000 -0700
+++ ns-3.45/src/lte/model/lte-ue-phy.h	2025-06-01 20:34:45.481701900 -0700
@@ -841,8 +841,7 @@
     SpectrumValue m_ctrlSinrForRlf; ///< the CTRL SINR used for RLF detection
     uint64_t m_imsi;                ///< the IMSI of the UE
     bool m_enableRlfDetection;      ///< Flag to enable/disable RLF detection
-
-}; // end of `class LteUePhy`
+};
 
 /**
  * @brief Stream insertion operator.
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lte/model/lte-ue-rrc.cc ns-3.45/src/lte/model/lte-ue-rrc.cc
--- ns-3.44/src/lte/model/lte-ue-rrc.cc	2025-03-09 16:55:49.607372000 -0700
+++ ns-3.45/src/lte/model/lte-ue-rrc.cc	2025-06-01 20:34:45.481701900 -0700
@@ -920,8 +920,7 @@
             }
         }
     }
-
-} // end of LteUeRrc::DoReportUeMeasurements
+}
 
 // RRC SAP methods
 
@@ -1244,8 +1243,7 @@
         m_cphySapProvider.at(0)->SynchronizeWithEnb(maxRsrpCellId, m_dlEarfcn);
         SwitchToState(IDLE_WAIT_MIB_SIB1);
     }
-
-} // end of void LteUeRrc::SynchronizeToStrongestCell ()
+}
 
 void
 LteUeRrc::EvaluateCellForSelection()
@@ -1325,8 +1323,7 @@
         SwitchToState(IDLE_CELL_SEARCH);
         SynchronizeToStrongestCell(); // retry to a different cell
     }
-
-} // end of void LteUeRrc::EvaluateCellForSelection ()
+}
 
 void
 LteUeRrc::ApplyRadioResourceConfigDedicatedSecondaryCarrier(
@@ -1874,8 +1871,7 @@
                       << ", carrier component Id " << componentCarrierId << ", new RSRP " << rsrp
                       << " stored " << storedMeasIt->second.rsrp << ", new RSRQ " << rsrq
                       << " stored " << storedMeasIt->second.rsrq);
-
-} // end of void SaveUeMeasurements
+}
 
 void
 LteUeRrc::MeasurementReportTriggering(uint8_t measId)
@@ -2014,8 +2010,7 @@
         NS_LOG_LOGIC(this << " event A1: serving cell " << servingCellId << " ms=" << ms
                           << " thresh=" << thresh << " entryCond=" << entryCond
                           << " leavingCond=" << leavingCond);
-
-    } // end of case LteRrcSap::ReportConfigEutra::EVENT_A1
+    }
 
     break;
 
@@ -2100,8 +2095,7 @@
         NS_LOG_LOGIC(this << " event A2: serving cell " << servingCellId << " ms=" << ms
                           << " thresh=" << thresh << " entryCond=" << entryCond
                           << " leavingCond=" << leavingCond);
-
-    } // end of case LteRrcSap::ReportConfigEutra::EVENT_A2
+    }
 
     break;
 
@@ -2211,10 +2205,8 @@
             NS_LOG_LOGIC(this << " event A3: neighbor cell " << cellId << " mn=" << mn
                               << " mp=" << mp << " offset=" << off << " entryCond=" << entryCond
                               << " leavingCond=" << leavingCond);
-
-        } // end of for (storedMeasIt)
-
-    } // end of case LteRrcSap::ReportConfigEutra::EVENT_A3
+        }
+    }
 
     break;
 
@@ -2312,10 +2304,8 @@
             NS_LOG_LOGIC(this << " event A4: neighbor cell " << cellId << " mn=" << mn
                               << " thresh=" << thresh << " entryCond=" << entryCond
                               << " leavingCond=" << leavingCond);
-
-        } // end of for (storedMeasIt)
-
-    } // end of case LteRrcSap::ReportConfigEutra::EVENT_A4
+        }
+    }
 
     break;
 
@@ -2414,10 +2404,8 @@
                 NS_LOG_LOGIC(this << " event A5: neighbor cell " << cellId << " mn=" << mn
                                   << " mp=" << mp << " thresh2=" << thresh2
                                   << " thresh1=" << thresh1 << " entryCond=" << entryCond);
-
-            } // end of for (storedMeasIt)
-
-        } // end of if (entryCond)
+            }
+        }
         else
         {
             NS_LOG_LOGIC(this << " event A5: serving cell " << m_cellId << " mp=" << mp
@@ -2457,7 +2445,7 @@
                             eventLeavingCondApplicable = true;
                         }
                     }
-                } // end of if (reportConfigEutra.timeToTrigger == 0)
+                }
                 else
                 {
                     // leaving condition #2 has to be checked to cancel time-to-trigger
@@ -2509,18 +2497,13 @@
                                               << " mn=" << mn << " mp=" << mp
                                               << " thresh2=" << thresh2 << " thresh1=" << thresh1
                                               << " leavingCond=" << leavingCond);
-
-                        } // end of if (measReportIt->second.cellsTriggeredList.find (cellId)
-                          //            != measReportIt->second.cellsTriggeredList.end ())
-
-                    } // end of for (storedMeasIt)
-
-                } // end of else of if (reportConfigEutra.timeToTrigger == 0)
+                        }
+                    }
+                }
 
                 NS_LOG_LOGIC(this << " event A5: serving cell " << m_cellId << " mp=" << mp
                                   << " thresh1=" << thresh1 << " leavingCond=" << leavingCond);
-
-            } // end of if (leavingCond)
+            }
             else
             {
                 if (reportConfigEutra.timeToTrigger > 0)
@@ -2568,25 +2551,18 @@
                         NS_LOG_LOGIC(this << " event A5: neighbor cell " << cellId << " mn=" << mn
                                           << " mp=" << mp << " thresh2=" << thresh2 << " thresh1="
                                           << thresh1 << " leavingCond=" << leavingCond);
-
-                    } // end of if (measReportIt->second.cellsTriggeredList.find (cellId)
-                      //            != measReportIt->second.cellsTriggeredList.end ())
-
-                } // end of for (storedMeasIt)
-
-            } // end of else of if (leavingCond)
-
-        } // end of if (isMeasIdInReportList)
-
-    } // end of case LteRrcSap::ReportConfigEutra::EVENT_A5
+                    }
+                }
+            }
+        }
+    }
 
     break;
 
     default:
         NS_FATAL_ERROR("unsupported eventId " << reportConfigEutra.eventId);
         break;
-
-    } // switch (event type)
+    }
 
     NS_LOG_LOGIC(this << " eventEntryCondApplicable=" << eventEntryCondApplicable
                       << " eventLeavingCondApplicable=" << eventLeavingCondApplicable);
@@ -2640,8 +2616,7 @@
             leavingTriggerIt->second.push_back(t);
         }
     }
-
-} // end of void LteUeRrc::MeasurementReportTriggering (uint8_t measId)
+}
 
 void
 LteUeRrc::CancelEnteringTrigger(uint8_t measId)
@@ -2807,10 +2782,8 @@
                 CancelEnteringTrigger(measId, *it);
             }
         }
-
-    } // end of if (!enteringTriggerIt->second.empty ())
-
-} // end of LteUeRrc::VarMeasReportListAdd
+    }
+}
 
 void
 LteUeRrc::VarMeasReportListErase(uint8_t measId, ConcernedCells_t leavingCells, bool reportOnLeave)
@@ -2862,10 +2835,8 @@
                 CancelLeavingTrigger(measId, *it);
             }
         }
-
-    } // end of if (!leavingTriggerIt->second.empty ())
-
-} // end of LteUeRrc::VarMeasReportListErase
+    }
+}
 
 void
 LteUeRrc::VarMeasReportListClear(uint8_t measId)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lte/model/lte-ue-rrc.h ns-3.45/src/lte/model/lte-ue-rrc.h
--- ns-3.44/src/lte/model/lte-ue-rrc.h	2025-03-09 16:55:49.607372000 -0700
+++ ns-3.45/src/lte/model/lte-ue-rrc.h	2025-06-01 20:34:45.481701900 -0700
@@ -1333,8 +1333,7 @@
      * The number of component carriers.
      */
     uint16_t m_numberOfComponentCarriers;
-
-}; // end of class LteUeRrc
+};
 
 /**
  * @brief Stream insertion operator.
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lte/model/no-op-component-carrier-manager.cc ns-3.45/src/lte/model/no-op-component-carrier-manager.cc
--- ns-3.44/src/lte/model/no-op-component-carrier-manager.cc	2025-03-09 16:55:49.607372000 -0700
+++ ns-3.45/src/lte/model/no-op-component-carrier-manager.cc	2025-06-01 20:34:45.481701900 -0700
@@ -206,14 +206,14 @@
             lci.mbrDl = 0;
             lci.gbrUl = 0;
             lci.gbrDl = 0;
-        } // data flows only on PC
+        }
         NS_LOG_DEBUG(this << " RNTI " << lci.rnti << "Lcid " << (uint16_t)lci.lcId << " lcGroup "
                           << (uint16_t)lci.lcGroup);
         entry.componentCarrierId = ncc;
         entry.lc = lci;
         entry.msu = m_ccmMacSapUser;
         res.push_back(entry);
-    } // end for
+    }
 
     auto lcidIt = rntiIt->second.m_rlcLcInstantiated.find(lcid);
     if (lcidIt == rntiIt->second.m_rlcLcInstantiated.end())
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lte/model/no-op-component-carrier-manager.h ns-3.45/src/lte/model/no-op-component-carrier-manager.h
--- ns-3.44/src/lte/model/no-op-component-carrier-manager.h	2025-03-09 16:55:49.607372000 -0700
+++ ns-3.45/src/lte/model/no-op-component-carrier-manager.h	2025-06-01 20:34:45.481701900 -0700
@@ -148,10 +148,11 @@
     virtual void DoNotifyPrbOccupancy(double prbOccupancy, uint8_t componentCarrierId);
 
   protected:
-    std::map<uint8_t, double>
-        m_ccPrbOccupancy; //!< The physical resource block occupancy per carrier.
+    /// The physical resource block occupancy per carrier.
+    std::map<uint8_t, double> m_ccPrbOccupancy;
 
-}; // end of class NoOpComponentCarrierManager
+    // end of class NoOpComponentCarrierManager
+};
 
 /**
  * @brief Component carrier manager implementation that splits traffic equally among carriers.
@@ -175,7 +176,9 @@
 
   private:
     uint8_t m_lastCcIdForSr{0}; //!< Last CCID to which a SR was routed
-};                              // end of class RrComponentCarrierManager
+
+    // end of class RrComponentCarrierManager
+};
 
 } // end of namespace ns3
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lte/model/no-op-handover-algorithm.h ns-3.45/src/lte/model/no-op-handover-algorithm.h
--- ns-3.44/src/lte/model/no-op-handover-algorithm.h	2025-03-09 16:55:49.607372000 -0700
+++ ns-3.45/src/lte/model/no-op-handover-algorithm.h	2025-06-01 20:34:45.482701800 -0700
@@ -60,8 +60,7 @@
     LteHandoverManagementSapUser* m_handoverManagementSapUser;
     /// Receive API calls from the eNodeB RRC instance.
     LteHandoverManagementSapProvider* m_handoverManagementSapProvider;
-
-}; // end of class NoOpHandoverAlgorithm
+};
 
 } // end of namespace ns3
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lte/model/pf-ff-mac-scheduler.cc ns-3.45/src/lte/model/pf-ff-mac-scheduler.cc
--- ns-3.44/src/lte/model/pf-ff-mac-scheduler.cc	2025-03-09 16:55:49.607372000 -0700
+++ ns-3.45/src/lte/model/pf-ff-mac-scheduler.cc	2025-06-01 20:34:45.482701800 -0700
@@ -25,13 +25,13 @@
 
 NS_LOG_COMPONENT_DEFINE("PfFfMacScheduler");
 
-/// PF type 0 allocation RBG
+/// PF type 0 allocation RBG (see table 7.1.6.1-1 of 36.213)
 static const int PfType0AllocationRbg[4] = {
     10,  // RBG size 1
     26,  // RBG size 2
     63,  // RBG size 3
     110, // RBG size 4
-};       // see table 7.1.6.1-1 of 36.213
+};
 
 NS_OBJECT_ENSURE_REGISTERED(PfFfMacScheduler);
 
@@ -989,8 +989,8 @@
                             itMax = it;
                         }
                     }
-                } // end if cqi
-            }     // end for m_rlcBufferReq
+                }
+            }
 
             if (itMax == m_flowStatsDl.end())
             {
@@ -1014,8 +1014,8 @@
                 }
                 NS_LOG_INFO(this << " UE assigned " << (*itMax).first);
             }
-        } // end for RBG free
-    }     // end for RBGs
+        }
+    }
 
     // reset TTI stats of users
     for (auto itStats = m_flowStatsDl.begin(); itStats != m_flowStatsDl.end(); itStats++)
@@ -1213,7 +1213,7 @@
         }
 
         itMap++;
-    }                               // end while allocation
+    }
     ret.m_nrOfPdcchOfdmSymbols = 1; /// \todo check correct value according the DCIs txed
 
     // update UEs stats
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lte/model/pss-ff-mac-scheduler.cc ns-3.45/src/lte/model/pss-ff-mac-scheduler.cc
--- ns-3.44/src/lte/model/pss-ff-mac-scheduler.cc	2025-03-09 16:55:49.607372000 -0700
+++ ns-3.45/src/lte/model/pss-ff-mac-scheduler.cc	2025-06-01 20:34:45.482701800 -0700
@@ -28,13 +28,13 @@
 
 NS_LOG_COMPONENT_DEFINE("PssFfMacScheduler");
 
-/// PSS type 0 allocation RBG
+/// PSS type 0 allocation RBG (see table 7.1.6.1-1 of 36.213)
 static const int PssType0AllocationRbg[4] = {
     10,  // RBG size 1
     26,  // RBG size 2
     63,  // RBG size 3
     110, // RBG size 4
-};       // see table 7.1.6.1-1 of 36.213
+};
 
 NS_OBJECT_ENSURE_REGISTERED(PssFfMacScheduler);
 
@@ -1037,9 +1037,9 @@
                         metric = achievableRate / (*it).second.lastAveragedThroughput;
                     }
                     ueSet2.emplace_back(metric, (*it).first);
-                } // end of wbCqi
+                }
             }
-        } // end of ueSet
+        }
 
         if (!ueSet1.empty() || !ueSet2.empty())
         {
@@ -1132,11 +1132,11 @@
                                 }
                                 sum += sbCqi;
                             }
-                        } // end if cqi
-                    }     // end of rbgNum
+                        }
+                    }
 
                     sbCqiSum[(*it).first] = sum;
-                } // end tdUeSet
+                }
 
                 for (int i = 0; i < rbgNum; i++)
                 {
@@ -1207,7 +1207,7 @@
                                 }
                                 colMetric += (double)sbCqi / (double)(*itSbCqiSum).second;
                             }
-                        } // end if cqi
+                        }
 
                         double metric = 0.0;
                         if (colMetric != 0)
@@ -1224,7 +1224,7 @@
                             metricMax = metric;
                             itMax = it;
                         }
-                    } // end of tdUeSet
+                    }
 
                     if (itMax == tdUeSet.end())
                     {
@@ -1235,9 +1235,8 @@
                         allocationMap[(*itMax).first].push_back(i);
                         rbgMap.at(i) = true;
                     }
-                } // end of rbgNum
-
-            } // end of CoIta
+                }
+            }
 
             if (m_fdSchedulerType == "PFsch")
             {
@@ -1311,7 +1310,7 @@
                                                    0.001); // = TB size / TTI
                             }
                             schMetric = achievableRate / (*it).second.secondLastAveragedThroughput;
-                        } // end if cqi
+                        }
 
                         double metric = 0.0;
                         metric = weight * schMetric;
@@ -1321,7 +1320,7 @@
                             metricMax = metric;
                             itMax = it;
                         }
-                    } // end of tdUeSet
+                    }
 
                     if (itMax == tdUeSet.end())
                     {
@@ -1332,14 +1331,10 @@
                         allocationMap[(*itMax).first].push_back(i);
                         rbgMap.at(i) = true;
                     }
-
-                } // end of rbgNum
-
-            } // end of PFsch
-
-        } // end if ueSet1 || ueSet2
-
-    } // end if ueSet
+                }
+            }
+        }
+    }
 
     // reset TTI stats of users
     for (auto itStats = m_flowStatsDl.begin(); itStats != m_flowStatsDl.end(); itStats++)
@@ -1537,7 +1532,7 @@
         }
 
         itMap++;
-    }                               // end while allocation
+    }
     ret.m_nrOfPdcchOfdmSymbols = 1; /// \todo check correct value according the DCIs txed
 
     // update UEs stats
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lte/model/rr-ff-mac-scheduler.cc ns-3.45/src/lte/model/rr-ff-mac-scheduler.cc
--- ns-3.44/src/lte/model/rr-ff-mac-scheduler.cc	2025-03-09 16:55:49.607372000 -0700
+++ ns-3.45/src/lte/model/rr-ff-mac-scheduler.cc	2025-06-01 20:34:45.482701800 -0700
@@ -27,13 +27,13 @@
 
 NS_LOG_COMPONENT_DEFINE("RrFfMacScheduler");
 
-/// Type 0 allocation RBG
+/// Type 0 allocation RBG (see table 7.1.6.1-1 of 36.213)
 static const int Type0AllocationRbg[4] = {
     10,  // RBG size 1
     26,  // RBG size 2
     63,  // RBG size 3
     110, // RBG size 4
-};       // see table 7.1.6.1-1 of 36.213
+};
 
 NS_OBJECT_ENSURE_REGISTERED(RrFfMacScheduler);
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lte/model/simple-ue-component-carrier-manager.h ns-3.45/src/lte/model/simple-ue-component-carrier-manager.h
--- ns-3.44/src/lte/model/simple-ue-component-carrier-manager.h	2025-03-09 16:55:49.607372000 -0700
+++ ns-3.45/src/lte/model/simple-ue-component-carrier-manager.h	2025-06-01 20:34:45.482701800 -0700
@@ -128,8 +128,7 @@
   protected:
     LteMacSapUser* m_ccmMacSapUser;         //!< Interface to the UE RLC instance.
     LteMacSapProvider* m_ccmMacSapProvider; //!< Receive API calls from the UE RLC instance
-
-}; // end of class SimpleUeComponentCarrierManager
+};
 
 } // end of namespace ns3
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lte/model/tdbet-ff-mac-scheduler.cc ns-3.45/src/lte/model/tdbet-ff-mac-scheduler.cc
--- ns-3.44/src/lte/model/tdbet-ff-mac-scheduler.cc	2025-03-09 16:55:49.607372000 -0700
+++ ns-3.45/src/lte/model/tdbet-ff-mac-scheduler.cc	2025-06-01 20:34:45.482701800 -0700
@@ -26,13 +26,13 @@
 
 NS_LOG_COMPONENT_DEFINE("TdBetFfMacScheduler");
 
-/// TDBET type 0 allocation RBG
+/// TDBET type 0 allocation RBG (see table 7.1.6.1-1 of 36.213)
 static const int TdBetType0AllocationRbg[4] = {
     10,  // RBG size 1
     26,  // RBG size 2
     63,  // RBG size 3
     110, // RBG size 4
-};       // see table 7.1.6.1-1 of 36.213
+};
 
 NS_OBJECT_ENSURE_REGISTERED(TdBetFfMacScheduler);
 
@@ -904,7 +904,7 @@
             metricMax = metric;
             itMax = it;
         }
-    } // end for m_flowStatsDl
+    }
 
     if (itMax == m_flowStatsDl.end())
     {
@@ -1070,7 +1070,7 @@
         }
 
         itMap++;
-    }                               // end while allocation
+    }
     ret.m_nrOfPdcchOfdmSymbols = 1; /// \todo check correct value according the DCIs txed
 
     // update UEs stats
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lte/model/tdmt-ff-mac-scheduler.cc ns-3.45/src/lte/model/tdmt-ff-mac-scheduler.cc
--- ns-3.44/src/lte/model/tdmt-ff-mac-scheduler.cc	2025-03-09 16:55:49.607372000 -0700
+++ ns-3.45/src/lte/model/tdmt-ff-mac-scheduler.cc	2025-06-01 20:34:45.482701800 -0700
@@ -26,13 +26,13 @@
 
 NS_LOG_COMPONENT_DEFINE("TdMtFfMacScheduler");
 
-/// TDMT type 0 allocation RBG
+/// TDMT type 0 allocation RBG (see table 7.1.6.1-1 of 36.213)
 static const int TdMtType0AllocationRbg[4] = {
     10,  // RBG size 1
     26,  // RBG size 2
     63,  // RBG size 3
     110, // RBG size 4
-};       // see table 7.1.6.1-1 of 36.213
+};
 
 NS_OBJECT_ENSURE_REGISTERED(TdMtFfMacScheduler);
 
@@ -902,11 +902,9 @@
                     metricMax = metric;
                     itMax = it;
                 }
-            } // LcActivePerFlow
-
-        } // cqi
-
-    } // end for m_flowStatsDl
+            }
+        }
+    }
 
     if (itMax == m_flowStatsDl.end())
     {
@@ -925,9 +923,8 @@
             {
                 rbgMap.at(i) = true;
                 tempMap.push_back(i);
-            } // end for RBG free
-
-        } // end for RBGs
+            }
+        }
         if (!tempMap.empty())
         {
             allocationMap[*itMax] = tempMap;
@@ -1061,7 +1058,7 @@
         ret.m_buildDataList.push_back(newEl);
 
         itMap++;
-    }                               // end while allocation
+    }
     ret.m_nrOfPdcchOfdmSymbols = 1; /// \todo check correct value according the DCIs txed
 
     m_schedSapUser->SchedDlConfigInd(ret);
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lte/model/tdtbfq-ff-mac-scheduler.cc ns-3.45/src/lte/model/tdtbfq-ff-mac-scheduler.cc
--- ns-3.44/src/lte/model/tdtbfq-ff-mac-scheduler.cc	2025-03-09 16:55:49.607372000 -0700
+++ ns-3.45/src/lte/model/tdtbfq-ff-mac-scheduler.cc	2025-06-01 20:34:45.482701800 -0700
@@ -27,13 +27,13 @@
 
 NS_LOG_COMPONENT_DEFINE("TdTbfqFfMacScheduler");
 
-/// TDTBFQ type 0 allocation RBG
+/// TDTBFQ type 0 allocation RBG (see table 7.1.6.1-1 of 36.213)
 static const int TdTbfqType0AllocationRbg[4] = {
     10,  // RBG size 1
     26,  // RBG size 2
     63,  // RBG size 3
     110, // RBG size 4
-};       // see table 7.1.6.1-1 of 36.213
+};
 
 NS_OBJECT_ENSURE_REGISTERED(TdTbfqFfMacScheduler);
 
@@ -694,16 +694,16 @@
         NS_LOG_INFO(this << " Processing DLHARQ feedback");
         if (nLayers == 1)
         {
-            retx.push_back(m_dlInfoListBuffered.at(i).m_harqStatus.at(0) ==
-                           DlInfoListElement_s::NACK);
-            retx.push_back(false);
+            retx.emplace_back(m_dlInfoListBuffered.at(i).m_harqStatus.at(0) ==
+                              DlInfoListElement_s::NACK);
+            retx.emplace_back(false);
         }
         else
         {
-            retx.push_back(m_dlInfoListBuffered.at(i).m_harqStatus.at(0) ==
-                           DlInfoListElement_s::NACK);
-            retx.push_back(m_dlInfoListBuffered.at(i).m_harqStatus.at(1) ==
-                           DlInfoListElement_s::NACK);
+            retx.emplace_back(m_dlInfoListBuffered.at(i).m_harqStatus.at(0) ==
+                              DlInfoListElement_s::NACK);
+            retx.emplace_back(m_dlInfoListBuffered.at(i).m_harqStatus.at(1) ==
+                              DlInfoListElement_s::NACK);
         }
         if (retx.at(0) || retx.at(1))
         {
@@ -1042,7 +1042,7 @@
             metricMax = metric;
             itMax = it;
         }
-    } // end for m_flowStatsDl
+    }
 
     if (itMax == m_flowStatsDl.end())
     {
@@ -1262,7 +1262,7 @@
         ret.m_buildDataList.push_back(newEl);
 
         itMap++;
-    }                               // end while allocation
+    }
     ret.m_nrOfPdcchOfdmSymbols = 1; /// \todo check correct value according the DCIs txed
 
     m_schedSapUser->SchedDlConfigInd(ret);
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lte/model/tta-ff-mac-scheduler.cc ns-3.45/src/lte/model/tta-ff-mac-scheduler.cc
--- ns-3.44/src/lte/model/tta-ff-mac-scheduler.cc	2025-03-09 16:55:49.607372000 -0700
+++ ns-3.45/src/lte/model/tta-ff-mac-scheduler.cc	2025-06-01 20:34:45.482701800 -0700
@@ -26,13 +26,13 @@
 
 NS_LOG_COMPONENT_DEFINE("TtaFfMacScheduler");
 
-/// TTA type 0 allocation RBG
+/// TTA type 0 allocation RBG (see table 7.1.6.1-1 of 36.213)
 static const int TtaType0AllocationRbg[4] = {
     10,  // RBG size 1
     26,  // RBG size 2
     63,  // RBG size 3
     110, // RBG size 4
-};       // see table 7.1.6.1-1 of 36.213
+};
 
 NS_OBJECT_ENSURE_REGISTERED(TtaFfMacScheduler);
 
@@ -936,9 +936,8 @@
                             itMax = it;
                         }
                     }
-                } // end if cqi
-
-            } // end for m_rlcBufferReq
+                }
+            }
 
             if (itMax == m_flowStatsDl.end())
             {
@@ -962,8 +961,8 @@
                 }
                 NS_LOG_INFO(this << " UE assigned " << (*itMax));
             }
-        } // end for RBG free
-    }     // end for RBGs
+        }
+    }
 
     // generate the transmission opportunities by grouping the RBGs of the same RNTI and
     // creating the correspondent DCIs
@@ -1142,7 +1141,7 @@
         ret.m_buildDataList.push_back(newEl);
 
         itMap++;
-    }                               // end while allocation
+    }
     ret.m_nrOfPdcchOfdmSymbols = 1; /// \todo check correct value according the DCIs txed
 
     m_schedSapUser->SchedDlConfigInd(ret);
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lte/test/lte-ffr-simple.h ns-3.45/src/lte/test/lte-ffr-simple.h
--- ns-3.44/src/lte/test/lte-ffr-simple.h	2025-03-09 16:55:49.607372000 -0700
+++ ns-3.45/src/lte/test/lte-ffr-simple.h	2025-06-01 20:34:45.483701700 -0700
@@ -145,8 +145,7 @@
     uint32_t m_tpc;         ///< transmission power control to be used
     uint32_t m_tpcNum;      ///< number of TPC configurations
     bool m_accumulatedMode; ///< whether to use the TPC accumulated mode
-
-}; // end of class LteFfrSimple
+};
 
 } // end of namespace ns3
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lte/test/lte-test-cell-selection.cc ns-3.45/src/lte/test/lte-test-cell-selection.cc
--- ns-3.44/src/lte/test/lte-test-cell-selection.cc	2025-03-09 16:55:49.607372000 -0700
+++ ns-3.45/src/lte/test/lte-test-cell-selection.cc	2025-06-01 20:34:45.483701700 -0700
@@ -316,8 +316,7 @@
                 ipv4RoutingHelper.GetStaticRouting(ueNode->GetObject<Ipv4>());
             ueStaticRouting->SetDefaultRoute(epcHelper->GetUeDefaultGatewayAddress(), 1);
         }
-
-    } // end of if (m_isEpcMode)
+    }
     else
     {
         NS_FATAL_ERROR("No support yet for LTE-only simulations");
@@ -348,8 +347,7 @@
     // Restore the seed and run number that were in effect before this test
     Config::SetGlobal("RngSeed", UintegerValue(previousSeed));
     Config::SetGlobal("RngRun", UintegerValue(previousRun));
-
-} // end of void LteCellSelectionTestCase::DoRun ()
+}
 
 void
 LteCellSelectionTestCase::CheckPoint(Ptr<LteUeNetDevice> ueDev,
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lte/test/lte-test-cell-selection.h ns-3.45/src/lte/test/lte-test-cell-selection.h
--- ns-3.44/src/lte/test/lte-test-cell-selection.h	2025-03-09 16:55:49.607372000 -0700
+++ ns-3.45/src/lte/test/lte-test-cell-selection.h	2025-06-01 20:34:45.483701700 -0700
@@ -162,7 +162,6 @@
 
     /// The current UE RRC state.
     std::vector<LteUeRrc::State> m_lastState;
-
-}; // end of class LteCellSelectionTestCase
+};
 
 #endif /* LTE_TEST_CELL_SELECTION_H */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lte/test/lte-test-primary-cell-change.cc ns-3.45/src/lte/test/lte-test-primary-cell-change.cc
--- ns-3.44/src/lte/test/lte-test-primary-cell-change.cc	2025-03-09 16:55:49.611372000 -0700
+++ ns-3.45/src/lte/test/lte-test-primary-cell-change.cc	2025-06-01 20:34:45.485701800 -0700
@@ -200,7 +200,7 @@
 
     // Destroy simulator.
     Simulator::Destroy();
-} // end of void LtePrimaryCellChangeTestCase::DoRun ()
+}
 
 void
 LtePrimaryCellChangeTestCase::StateTransitionCallback(std::string context,
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lte/test/lte-test-primary-cell-change.h ns-3.45/src/lte/test/lte-test-primary-cell-change.h
--- ns-3.44/src/lte/test/lte-test-primary-cell-change.h	2025-03-09 16:55:49.611372000 -0700
+++ ns-3.45/src/lte/test/lte-test-primary-cell-change.h	2025-06-01 20:34:45.485701800 -0700
@@ -110,7 +110,6 @@
 
     /// The current UE RRC state.
     std::map<uint64_t, LteUeRrc::State> m_lastState;
-
-}; // end of class LtePrimaryCellChangeTestCase
+};
 
 #endif /* LTE_TEST_PRIMARY_CELL_CHANGE_H */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lte/test/lte-test-radio-link-failure.cc ns-3.45/src/lte/test/lte-test-radio-link-failure.cc
--- ns-3.44/src/lte/test/lte-test-radio-link-failure.cc	2025-03-09 16:55:49.611372000 -0700
+++ ns-3.45/src/lte/test/lte-test-radio-link-failure.cc	2025-06-01 20:34:45.485701800 -0700
@@ -375,8 +375,7 @@
             dlClientApps.Start(Seconds(0.27));
             ulServerApps.Start(Seconds(0.27));
             ulClientApps.Start(Seconds(0.27));
-
-        } // end for b
+        }
     }
 
     lteHelper->EnableTraces();
@@ -424,7 +423,7 @@
         CheckIdle(ueDevs.Get(u), enbDevs);
     }
     Simulator::Destroy();
-} // end of void LteRadioLinkFailureTestCase::DoRun ()
+}
 
 void
 LteRadioLinkFailureTestCase::JumpAway(Vector UeJumpAwayPosition)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lte/test/lte-test-radio-link-failure.h ns-3.45/src/lte/test/lte-test-radio-link-failure.h
--- ns-3.44/src/lte/test/lte-test-radio-link-failure.h	2025-03-09 16:55:49.611372000 -0700
+++ ns-3.45/src/lte/test/lte-test-radio-link-failure.h	2025-06-01 20:34:45.485701800 -0700
@@ -213,7 +213,6 @@
     uint32_t m_numOfInSyncIndications;    ///< number of in-sync indications detected
     uint32_t m_numOfOutOfSyncIndications; ///< number of out-of-sync indications detected
     Ptr<MobilityModel> m_ueMobility;      ///< UE mobility model
-
-}; // end of class LteRadioLinkFailureTestCase
+};
 
 #endif /* LTE_TEST_RADIO_LINK_FAILURE_H */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lte/test/lte-test-secondary-cell-selection.cc ns-3.45/src/lte/test/lte-test-secondary-cell-selection.cc
--- ns-3.44/src/lte/test/lte-test-secondary-cell-selection.cc	2025-03-09 16:55:49.611372000 -0700
+++ ns-3.45/src/lte/test/lte-test-secondary-cell-selection.cc	2025-06-01 20:34:45.486701700 -0700
@@ -163,7 +163,7 @@
 
     // Destroy simulator.
     Simulator::Destroy();
-} // end of void LteSecondaryCellSelectionTestCase::DoRun ()
+}
 
 void
 LteSecondaryCellSelectionTestCase::StateTransitionCallback(std::string context,
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lte/test/lte-test-secondary-cell-selection.h ns-3.45/src/lte/test/lte-test-secondary-cell-selection.h
--- ns-3.44/src/lte/test/lte-test-secondary-cell-selection.h	2025-03-09 16:55:49.611372000 -0700
+++ ns-3.45/src/lte/test/lte-test-secondary-cell-selection.h	2025-06-01 20:34:45.486701700 -0700
@@ -109,7 +109,6 @@
 
     /// The current UE RRC state.
     std::map<uint64_t, LteUeRrc::State> m_lastState;
-
-}; // end of class LteSecondaryCellSelectionTestCase
+};
 
 #endif /* LTE_TEST_SECONDARY_CELL_SELECTION_H */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lte/test/lte-test-ue-measurements.cc ns-3.45/src/lte/test/lte-test-ue-measurements.cc
--- ns-3.44/src/lte/test/lte-test-ue-measurements.cc	2025-03-09 16:55:49.611372000 -0700
+++ ns-3.45/src/lte/test/lte-test-ue-measurements.cc	2025-06-01 20:34:45.486701700 -0700
@@ -836,8 +836,7 @@
     Simulator::Stop(Seconds(2.201));
     Simulator::Run();
     Simulator::Destroy();
-
-} // end of void LteUeMeasurementsPiecewiseTestCase1::DoRun ()
+}
 
 void
 LteUeMeasurementsPiecewiseTestCase1::DoTeardown()
@@ -904,11 +903,9 @@
             NS_TEST_ASSERT_MSG_EQ(observedRsrp,
                                   referenceRsrp,
                                   "The RSRP observed differs with the reference RSRP");
-        } // end of if (!hasEnded)
-
-    } // end of if (measResults.measId == m_expectedMeasId)
-
-} // end of LteUeMeasurementsPiecewiseTestCase1::RecvMeasurementReportCallback
+        }
+    }
+}
 
 void
 LteUeMeasurementsPiecewiseTestCase1::TeleportVeryNear()
@@ -1544,8 +1541,7 @@
     Simulator::Stop(Seconds(2.201));
     Simulator::Run();
     Simulator::Destroy();
-
-} // end of void LteUeMeasurementsPiecewiseTestCase2::DoRun ()
+}
 
 void
 LteUeMeasurementsPiecewiseTestCase2::DoTeardown()
@@ -1616,8 +1612,7 @@
                           << EutranMeasurementMapping::RsrpRange2Dbm(it->rsrpResult) << " dBm)"
                           << " rsrq=" << (uint16_t)it->rsrqResult << " ("
                           << EutranMeasurementMapping::RsrqRange2Db(it->rsrqResult) << " dB)");
-
-    } // end of else of if (measResults.measResultListEutra.size () == 0)
+    }
 
     // verifying the report timing
     bool hasEnded = m_itExpectedTime == m_expectedTime.end();
@@ -1647,8 +1642,7 @@
     NS_TEST_ASSERT_MSG_EQ(observedRsrp,
                           referenceRsrp,
                           "The RSRP observed differs with the reference RSRP");
-
-} // end of void LteUeMeasurementsPiecewiseTestCase2::RecvMeasurementReportCallback
+}
 
 void
 LteUeMeasurementsPiecewiseTestCase2::TeleportVeryNear()
@@ -1838,8 +1832,7 @@
     Simulator::Stop(Seconds(2.201));
     Simulator::Run();
     Simulator::Destroy();
-
-} // end of void LteUeMeasurementsPiecewiseTestCase3::DoRun ()
+}
 
 void
 LteUeMeasurementsPiecewiseTestCase3::DoTeardown()
@@ -1912,8 +1905,7 @@
                               << " rsrq=" << (uint16_t)it.rsrqResult << " ("
                               << EutranMeasurementMapping::RsrqRange2Db(it.rsrqResult) << " dB)");
         }
-
-    } // end of else of if (measResults.measResultListEutra.size () == 0)
+    }
 
     // verifying the report timing
     bool hasEnded = m_itExpectedTime == m_expectedTime.end();
@@ -1934,8 +1926,7 @@
     NS_TEST_ASSERT_MSG_EQ(timeNowMs,
                           timeExpectedMs,
                           "Reporting should not have occurred at this time");
-
-} // end of void LteUeMeasurementsPiecewiseTestCase3::RecvMeasurementReportCallback
+}
 
 void
 LteUeMeasurementsPiecewiseTestCase3::TeleportEnbNear()
@@ -2451,8 +2442,7 @@
     Simulator::Stop(m_duration);
     Simulator::Run();
     Simulator::Destroy();
-
-} // end of void LteUeMeasurementsHandoverTestCase::DoRun ()
+}
 
 void
 LteUeMeasurementsHandoverTestCase::DoTeardown()
@@ -2539,8 +2529,7 @@
                           << EutranMeasurementMapping::RsrpRange2Dbm(it->rsrpResult) << " dBm)"
                           << " rsrq=" << (uint16_t)it->rsrqResult << " ("
                           << EutranMeasurementMapping::RsrqRange2Db(it->rsrqResult) << " dB)");
-
-    } // end of else of if (measResults.measResultListEutra.size () == 0)
+    }
 
     // verifying the report timing
     bool hasEnded = m_itExpectedTime == m_expectedTime.end();
@@ -2570,5 +2559,4 @@
     NS_TEST_ASSERT_MSG_EQ(observedRsrp,
                           referenceRsrp,
                           "The RSRP observed differs with the reference RSRP");
-
-} // end of void LteUeMeasurementsHandoverTestCase::RecvMeasurementReportCallback
+}
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lte/test/lte-test-ue-measurements.h ns-3.45/src/lte/test/lte-test-ue-measurements.h
--- ns-3.44/src/lte/test/lte-test-ue-measurements.h	2025-03-09 16:55:49.611372000 -0700
+++ ns-3.45/src/lte/test/lte-test-ue-measurements.h	2025-06-01 20:34:45.486701700 -0700
@@ -244,7 +244,8 @@
 
     Ptr<MobilityModel> m_ueMobility; ///< the mobility model
 
-}; // end of class LteUeMeasurementsPiecewiseTestCase1
+    // end of class LteUeMeasurementsPiecewiseTestCase1
+};
 
 // ===== LTE-UE-MEASUREMENTS-PIECEWISE-2 TEST SUITE ======================== //
 
@@ -379,7 +380,8 @@
 
     Ptr<MobilityModel> m_ueMobility; ///< the mobility model
 
-}; // end of class LteUeMeasurementsPiecewiseTestCase2
+    // end of class LteUeMeasurementsPiecewiseTestCase2
+};
 
 // ===== LTE-UE-MEASUREMENTS-PIECEWISE-3 TEST SUITE ======================== //
 
@@ -512,7 +514,8 @@
 
     Ptr<MobilityModel> m_enbMobility; ///< the mobility model
 
-}; // end of class LteUeMeasurementsPiecewiseTestCase3
+    // end of class LteUeMeasurementsPiecewiseTestCase3
+};
 
 // ===== LTE-UE-MEASUREMENTS-HANDOVER TEST SUITE =========================== //
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lte/test/test-lte-handover-delay.cc ns-3.45/src/lte/test/test-lte-handover-delay.cc
--- ns-3.44/src/lte/test/test-lte-handover-delay.cc	2025-03-09 16:55:49.611372000 -0700
+++ ns-3.45/src/lte/test/test-lte-handover-delay.cc	2025-06-01 20:34:45.488701800 -0700
@@ -213,8 +213,7 @@
     Simulator::Stop(m_simulationDuration);
     Simulator::Run();
     Simulator::Destroy();
-
-} // end of void LteHandoverDelayTestCase::DoRun ()
+}
 
 void
 LteHandoverDelayTestCase::UeHandoverStartCallback(std::string context,
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lte/test/test-lte-handover-failure.cc ns-3.45/src/lte/test/test-lte-handover-failure.cc
--- ns-3.44/src/lte/test/test-lte-handover-failure.cc	2025-03-09 16:55:49.611372000 -0700
+++ ns-3.45/src/lte/test/test-lte-handover-failure.cc	2025-06-01 20:34:45.488701800 -0700
@@ -191,7 +191,8 @@
     uint16_t m_targeteNodeBPosition;   ///< position of the target eNodeB
     bool m_hasHandoverFailureOccurred; ///< has handover failure occurred in simulation
 
-}; // end of class LteHandoverFailureTestCase
+    // end of class LteHandoverFailureTestCase
+};
 
 void
 LteHandoverFailureTestCase::DoRun()
@@ -293,7 +294,7 @@
 
     RngSeedManager::SetSeed(previousSeed);
     RngSeedManager::SetRun(previousRun);
-} // end of void LteHandoverFailureTestCase::DoRun ()
+}
 
 void
 LteHandoverFailureTestCase::UeHandoverStartCallback(std::string context,
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lte/test/test-lte-handover-target.cc ns-3.45/src/lte/test/test-lte-handover-target.cc
--- ns-3.44/src/lte/test/test-lte-handover-target.cc	2025-03-09 16:55:49.611372000 -0700
+++ ns-3.45/src/lte/test/test-lte-handover-target.cc	2025-06-01 20:34:45.488701800 -0700
@@ -129,7 +129,8 @@
     Ptr<LteEnbNetDevice> m_sourceEnbDev; ///< source ENB device
     bool m_hasHandoverOccurred;          ///< has handover occurred?
 
-}; // end of class LteHandoverTargetTestCase
+    // end of class LteHandoverTargetTestCase
+};
 
 LteHandoverTargetTestCase::LteHandoverTargetTestCase(std::string name,
                                                      Vector uePosition,
@@ -355,8 +356,7 @@
     Simulator::Stop(Seconds(1));
     Simulator::Run();
     Simulator::Destroy();
-
-} // end of void LteX2HandoverTargetTestCase::DoRun ()
+}
 
 void
 LteHandoverTargetTestCase::DoTeardown()
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lte/test/test-lte-x2-handover.cc ns-3.45/src/lte/test/test-lte-x2-handover.cc
--- ns-3.44/src/lte/test/test-lte-x2-handover.cc	2025-03-09 16:55:49.611372000 -0700
+++ ns-3.45/src/lte/test/test-lte-x2-handover.cc	2025-06-01 20:34:45.488701800 -0700
@@ -404,8 +404,7 @@
                 clientApps.Start(startTime);
 
                 ueData.bearerDataList.push_back(bearerData);
-
-            } // end for b
+            }
 
             m_ueDataVector.push_back(ueData);
         }
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/lte/test/test-lte-x2-handover-measures.cc ns-3.45/src/lte/test/test-lte-x2-handover-measures.cc
--- ns-3.44/src/lte/test/test-lte-x2-handover-measures.cc	2025-03-09 16:55:49.611372000 -0700
+++ ns-3.45/src/lte/test/test-lte-x2-handover-measures.cc	2025-06-01 20:34:45.488701800 -0700
@@ -478,7 +478,7 @@
                         bearerData.ulSink = sinkContainer.Get(0)->GetObject<PacketSink>();
                         serverApps.Add(sinkContainer);
                     }
-                } // end if (useUdp)
+                }
 
                 Ptr<EpcTft> tft = Create<EpcTft>();
                 if (epcDl)
@@ -506,8 +506,7 @@
                 clientApps.Start(startTime);
 
                 ueData.bearerDataList.push_back(bearerData);
-
-            } // end for b
+            }
 
             m_ueDataVector.push_back(ueData);
         }
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/mesh/model/dot11s/airtime-metric.cc ns-3.45/src/mesh/model/dot11s/airtime-metric.cc
--- ns-3.44/src/mesh/model/dot11s/airtime-metric.cc	2025-03-09 16:55:49.635372000 -0700
+++ ns-3.45/src/mesh/model/dot11s/airtime-metric.cc	2025-06-01 20:34:45.489701700 -0700
@@ -92,7 +92,7 @@
         (uint32_t)((double)(/*Overhead + payload*/
                             // DIFS + SIFS + AckTxTime = 2 * SIFS + 2 * SLOT + AckTxTime
                             2 * mac->GetWifiPhy()->GetSifs() + 2 * mac->GetWifiPhy()->GetSlot() +
-                            mac->GetWifiPhy()->GetAckTxTime() +
+                            GetEstimatedAckTxTime(txVector) +
                             WifiPhy::CalculateTxDuration(m_testFrame->GetSize(),
                                                          txVector,
                                                          mac->GetWifiPhy()->GetPhyBand()))
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/mesh/test/dot11s/hwmp-target-flags-regression.h ns-3.45/src/mesh/test/dot11s/hwmp-target-flags-regression.h
--- ns-3.44/src/mesh/test/dot11s/hwmp-target-flags-regression.h	2025-03-09 16:55:49.651372200 -0700
+++ ns-3.45/src/mesh/test/dot11s/hwmp-target-flags-regression.h	2025-06-01 20:34:45.494701900 -0700
@@ -58,6 +58,7 @@
    \endverbatim
  */
 // clang-format on
+
 class HwmpDoRfRegressionTest : public TestCase
 {
   public:
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/mobility/model/position-allocator.cc ns-3.45/src/mobility/model/position-allocator.cc
--- ns-3.44/src/mobility/model/position-allocator.cc	2025-03-09 16:55:49.655372100 -0700
+++ ns-3.45/src/mobility/model/position-allocator.cc	2025-06-01 20:34:45.527701900 -0700
@@ -102,8 +102,7 @@
 
         Vector pos(x, y, z);
         Add(pos);
-
-    } // while FetchNextRow
+    }
     NS_LOG_INFO("read " << csv.RowNumber() << " rows");
 }
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/mobility/model/rectangle.cc ns-3.45/src/mobility/model/rectangle.cc
--- ns-3.44/src/mobility/model/rectangle.cc	2025-03-09 16:55:49.655372100 -0700
+++ ns-3.45/src/mobility/model/rectangle.cc	2025-06-01 20:34:45.528702000 -0700
@@ -52,12 +52,28 @@
 Rectangle::Side
 Rectangle::GetClosestSideOrCorner(const Vector& position) const
 {
-    std::array<double, 4> distanceFromBorders{
-        std::abs(position.x - this->xMin), // left border
-        std::abs(this->xMax - position.x), // right border
-        std::abs(position.y - this->yMin), // bottom border
-        std::abs(this->yMax - position.y), // top border
-    };
+    std::array<double, 4> distanceFromBorders;
+
+    if (IsInside(position))
+    {
+        distanceFromBorders = {
+            std::abs(position.x - this->xMin), // left border
+            std::abs(this->xMax - position.x), // right border
+            std::abs(position.y - this->yMin), // bottom border
+            std::abs(this->yMax - position.y)  // top border
+        };
+    }
+    else
+    {
+        const auto yMid = (yMax + yMin) / 2;
+        const auto xMid = (xMax + xMin) / 2;
+        distanceFromBorders = {
+            CalculateDistance(position, Vector(xMin, yMid, position.z)), // left border
+            CalculateDistance(position, Vector(xMax, yMid, position.z)), // right border
+            CalculateDistance(position, Vector(xMid, yMin, position.z)), // bottom border
+            CalculateDistance(position, Vector(xMid, yMax, position.z))  // top border
+        };
+    }
     uint8_t flags = 0;
     double minDist = std::numeric_limits<double>::max();
     for (int i = 0; i < 4; i++)
@@ -80,36 +96,17 @@
     switch (flags)
     {
     //     LRBT
-    case 0b1111:
-        // Every side is equally distant, so choose any
-        side = TOPSIDE;
-        break;
-    case 0b0011:
-        // Opposing sides are equally distant, so we need to check the other two
-        // We also need to check if we're inside or outside.
-        side = TOPSIDE;
-        if (!IsInside(position))
-        {
-            side = (distanceFromBorders[0] > distanceFromBorders[1]) ? RIGHTSIDE : LEFTSIDE;
-        }
-        break;
-    case 0b1100:
-        // Opposing sides are equally distant, so we need to check the other two
-        // We also need to check if we're inside or outside.
-        side = RIGHTSIDE;
-        if (!IsInside(position))
-        {
-            side = (distanceFromBorders[2] > distanceFromBorders[3]) ? TOPSIDE : BOTTOMSIDE;
-        }
-        break;
-    case 0b0001:
-    case 0b1101:
+    case 0b1111: // Equidistant to all sides, so we choose top
+    case 0b1101: // Equidistant to top, left and right, so we choose top
+    case 0b0011: // Opposing sides are equally distant, so we choose top
+    case 0b0001: // Closer to top
         side = TOPSIDE;
         break;
     case 0b0010:
     case 0b1110:
         side = BOTTOMSIDE;
         break;
+    case 0b1100: // Opposing sides are equally distant, so choose right
     case 0b0100:
     case 0b0111:
         side = RIGHTSIDE;
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/mobility/test/rectangle-closest-border-test.cc ns-3.45/src/mobility/test/rectangle-closest-border-test.cc
--- ns-3.44/src/mobility/test/rectangle-closest-border-test.cc	2025-03-09 16:55:49.659372000 -0700
+++ ns-3.45/src/mobility/test/rectangle-closest-border-test.cc	2025-06-01 20:34:45.532702000 -0700
@@ -87,22 +87,29 @@
     // Rectangle in the positive x-plane to check the intersection with.
     Rectangle rectangle = Rectangle(0.0, 10.0, 0.0, 10.0);
 
-    /*            2                3                4
-     *              +----------------------------+ (10,10)
-     *              |  11         16          12 |
-     *              |                            |
-     *              |                            |
-     *      1       |  15          18         17 |              5
-     *              |                            |
-     *              |                            |
-     *              |  10          14         13 |
-     *              +----------------------------+
-     *           9                                  7
-     *           (0,0)
+    /*     23                                                             24
+     *                                    20
+     *                                    :
+     *                                    :
+     *                   2                3                4
+     *                      +----------------------------+ (10,10)
+     *                      |  11         16          12 |
+     *                      |                            |
+     *                      |                            |
+     *     19 ....  1       |  15          18         17 |              5 .... 21
+     *                      |                            |
+     *                      |                            |
+     *                      |  10          14         13 |
+     *                      +----------------------------+
+     *                   9                                  7
+     *                   (0,0)
      *
      *
      *
-     *                             8
+     *                                     8
+     *                                     :
+     *                                     :
+     * 26                                    22                                25
      */
     // Left side (1 and 15)
     AddTestCase(new RectangleClosestBorderTestCase(-5, 5, rectangle, Rectangle::LEFTSIDE),
@@ -147,6 +154,26 @@
     // Central position (18)
     AddTestCase(new RectangleClosestBorderTestCase(5, 5, rectangle, Rectangle::TOPSIDE),
                 TestCase::Duration::QUICK);
+    // For coordinates to left, top, right, bottom (19, 20, 21, 22)
+    AddTestCase(new RectangleClosestBorderTestCase(-30, 5, rectangle, Rectangle::LEFTSIDE),
+                TestCase::Duration::QUICK);
+    AddTestCase(new RectangleClosestBorderTestCase(5, 30, rectangle, Rectangle::TOPSIDE),
+                TestCase::Duration::QUICK);
+    AddTestCase(new RectangleClosestBorderTestCase(30, 5, rectangle, Rectangle::RIGHTSIDE),
+                TestCase::Duration::QUICK);
+    AddTestCase(new RectangleClosestBorderTestCase(5, -30, rectangle, Rectangle::BOTTOMSIDE),
+                TestCase::Duration::QUICK);
+    // For coordinates to left-top, right-top, right-bottom, left-bottom diagonals (23, 24, 25, 26)
+    AddTestCase(new RectangleClosestBorderTestCase(-30, 40, rectangle, Rectangle::TOPLEFTCORNER),
+                TestCase::Duration::QUICK);
+    AddTestCase(new RectangleClosestBorderTestCase(40, 40, rectangle, Rectangle::TOPRIGHTCORNER),
+                TestCase::Duration::QUICK);
+    AddTestCase(
+        new RectangleClosestBorderTestCase(40, -30, rectangle, Rectangle::BOTTOMRIGHTCORNER),
+        TestCase::Duration::QUICK);
+    AddTestCase(
+        new RectangleClosestBorderTestCase(-30, -30, rectangle, Rectangle::BOTTOMLEFTCORNER),
+        TestCase::Duration::QUICK);
 }
 
 /**
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/mpi/examples/simple-distributed-mpi-comm.cc ns-3.45/src/mpi/examples/simple-distributed-mpi-comm.cc
--- ns-3.44/src/mpi/examples/simple-distributed-mpi-comm.cc	2025-03-09 16:55:49.659372000 -0700
+++ ns-3.45/src/mpi/examples/simple-distributed-mpi-comm.cc	2025-06-01 20:34:45.533702000 -0700
@@ -102,8 +102,7 @@
     RANK0COUTAPPEND("in MPI_COMM_WORLD: " << SinkTracer::GetWorldRank() << ":"
                                           << SinkTracer::GetWorldSize() << ", in splitComm: "
                                           << otherId << ":" << otherSize << std::endl);
-
-} // ReportRank()
+}
 
 int
 main(int argc, char* argv[])
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/mpi/test/mpi-test-suite.cc ns-3.45/src/mpi/test/mpi-test-suite.cc
--- ns-3.44/src/mpi/test/mpi-test-suite.cc	2025-03-09 16:55:49.659372000 -0700
+++ ns-3.45/src/mpi/test/mpi-test-suite.cc	2025-06-01 20:34:45.537701800 -0700
@@ -112,7 +112,8 @@
         AddTestCase(new MpiTestCase(name, program, dataDir, ranks, args, shouldNotErr), duration);
     }
 
-}; // class MpiTestSuite
+    // end of class MpiTestSuite
+};
 
 /* Tests using SimpleDistributedSimulatorImpl */
 static MpiTestSuite g_mpiNms2("mpi-example-nms-2", "nms-p2p-nix-distributed", NS_TEST_SOURCEDIR, 2);
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/netanim/model/animation-interface.h ns-3.45/src/netanim/model/animation-interface.h
--- ns-3.44/src/netanim/model/animation-interface.h	2025-03-09 16:55:49.671372200 -0700
+++ ns-3.45/src/netanim/model/animation-interface.h	2025-06-01 20:34:45.553702000 -0700
@@ -468,14 +468,14 @@
         uint8_t r; ///< r
         uint8_t g; ///< g
         uint8_t b; ///< b
-    };             ///< RGB structure
+    };
 
     /// P2pLinkNodeIdPair structure
     struct P2pLinkNodeIdPair
     {
         uint32_t fromNode; ///< from node
         uint32_t toNode;   ///< to node
-    };                     ///< P2P link node id pair
+    };
 
     /// LinkProperties structure
     struct LinkProperties
@@ -483,7 +483,7 @@
         std::string fromNodeDescription; ///< from node description
         std::string toNodeDescription;   ///< to node description
         std::string linkDescription;     ///< link description
-    };                                   ///< link properties
+    };
 
     /// LinkPairCompare structure
     struct LinkPairCompare
@@ -516,14 +516,14 @@
     {
         std::string destination; ///< destination
         uint32_t fromNodeId;     ///< from node ID
-    };                           ///< IPv4 route track element
+    };
 
     /// Ipv4RoutePathElement structure
     struct Ipv4RoutePathElement
     {
         uint32_t nodeId;     ///< node ID
         std::string nextHop; ///< next hop
-    };                       ///< IPv4 route path element
+    };
 
     /// ProtocolType enumeration
     enum ProtocolType
@@ -541,7 +541,7 @@
     {
         double width;  ///< width
         double height; ///< height
-    };                 ///< node size
+    };
 
     typedef std::map<P2pLinkNodeIdPair, LinkProperties, LinkPairCompare>
         LinkPropertiesMap;                                       ///< LinkPropertiesMap typedef
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/network/model/packet-tag-list.cc ns-3.45/src/network/model/packet-tag-list.cc
--- ns-3.44/src/network/model/packet-tag-list.cc	2025-03-09 16:55:49.675372100 -0700
+++ ns-3.45/src/network/model/packet-tag-list.cc	2025-06-01 20:34:45.557702000 -0700
@@ -81,7 +81,7 @@
             prevNext = &cur->next;
             cur = cur->next;
         }
-    } // while !found && !cow
+    }
 
     // did we find it or run out of tags?
     if (cur == nullptr || found)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/network/test/packetbb-test-suite.cc ns-3.45/src/network/test/packetbb-test-suite.cc
--- ns-3.44/src/network/test/packetbb-test-suite.cc	2025-03-09 16:55:49.675372100 -0700
+++ ns-3.45/src/network/test/packetbb-test-suite.cc	2025-06-01 20:34:45.559702000 -0700
@@ -1,4 +1,3 @@
-/* vim: set ts=2 sw=2 sta expandtab ai si cin: */
 /*
  * Copyright (c) 2009 Drexel University
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/network/test/packet-test-suite.cc ns-3.45/src/network/test/packet-test-suite.cc
--- ns-3.44/src/network/test/packet-test-suite.cc	2025-03-09 16:55:49.675372100 -0700
+++ ns-3.45/src/network/test/packet-test-suite.cc	2025-06-01 20:34:45.559702000 -0700
@@ -1170,7 +1170,7 @@
             CheckRef(mrg, m5, msg, false);
         }
 #undef RemoveCheck
-    } // Removal
+    }
 
     // Replace
     {
@@ -1241,20 +1241,20 @@
                 case 1:
                     now = RemoveTime(ref, t1);
                     break;
-                } // switch
+                }
 
                 if (now < rmn[j])
                 {
                     rmn[j] = now;
                 }
-            } // for tag j
-        }     // for iteration i
+            }
+        }
         for (int j = TAG_LAST; j > 0; --j)
         {
             std::cout << GetName() << "min remove time: t" << j << ": " << std::setw(8) << rmn[j]
                       << " ticks" << std::endl;
         }
-    } // Timing
+    }
 }
 
 /**
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/network/test/sequence-number-test-suite.cc ns-3.45/src/network/test/sequence-number-test-suite.cc
--- ns-3.44/src/network/test/sequence-number-test-suite.cc	2025-03-09 16:55:49.675372100 -0700
+++ ns-3.45/src/network/test/sequence-number-test-suite.cc	2025-06-01 20:34:45.560702000 -0700
@@ -54,11 +54,6 @@
         return tid;
     }
 
-    TypeId GetInstanceTypeId() const override
-    {
-        return GetTypeId();
-    }
-
     /// Increment the sequence number.
     void IncSequenceNumber()
     {
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/network/utils/ipv4-address.cc ns-3.45/src/network/utils/ipv4-address.cc
--- ns-3.44/src/network/utils/ipv4-address.cc	2025-03-09 16:55:49.675372100 -0700
+++ ns-3.45/src/network/utils/ipv4-address.cc	2025-06-01 20:34:45.561702000 -0700
@@ -281,6 +281,14 @@
     return (m_address & 0xffffff00) == 0xe0000000;
 }
 
+bool
+Ipv4Address::IsLinkLocal() const
+{
+    NS_LOG_FUNCTION(this);
+    // Link-Local address is 169.254.0.0/16
+    return (m_address & 0xffff0000) == 0xa9fe0000;
+}
+
 void
 Ipv4Address::Serialize(uint8_t buf[4]) const
 {
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/network/utils/ipv4-address.h ns-3.45/src/network/utils/ipv4-address.h
--- ns-3.44/src/network/utils/ipv4-address.h	2025-03-09 16:55:49.679372300 -0700
+++ ns-3.45/src/network/utils/ipv4-address.h	2025-06-01 20:34:45.561702000 -0700
@@ -113,6 +113,14 @@
      */
     bool IsLocalMulticast() const;
     /**
+     * @brief If the IPv4 address is an APIPA address (169.254/16).
+     *
+     * The Automatic Private IP Address is described in \RFC{3927}
+     *
+     * @return true if the address is link-local, false otherwise
+     */
+    bool IsLinkLocal() const;
+    /**
      * @brief Combine this address with a network mask
      *
      * This method returns an IPv4 address that is this address combined
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/network/utils/mac8-address.h ns-3.45/src/network/utils/mac8-address.h
--- ns-3.44/src/network/utils/mac8-address.h	2025-03-09 16:55:49.679372300 -0700
+++ ns-3.45/src/network/utils/mac8-address.h	2025-06-01 20:34:45.562702000 -0700
@@ -134,8 +134,7 @@
     friend bool operator!=(const Mac8Address& a, const Mac8Address& b);
     friend std::ostream& operator<<(std::ostream& os, const Mac8Address& address);
     friend std::istream& operator>>(std::istream& is, Mac8Address& address);
-
-}; // class Mac8Address
+};
 
 /**
  * Address comparison, less than.
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/network/utils/output-stream-wrapper.cc ns-3.45/src/network/utils/output-stream-wrapper.cc
--- ns-3.44/src/network/utils/output-stream-wrapper.cc	2025-03-09 16:55:49.679372300 -0700
+++ ns-3.45/src/network/utils/output-stream-wrapper.cc	2025-06-01 20:34:45.562702000 -0700
@@ -26,8 +26,8 @@
     m_ostream = os;
     FatalImpl::RegisterStream(m_ostream);
     NS_ABORT_MSG_UNLESS(os->is_open(),
-                        "AsciiTraceHelper::CreateFileStream():  "
-                            << "Unable to Open " << filename << " for mode " << filemode);
+                        "AsciiTraceHelper::CreateFileStream(): Unable to Open "
+                            << filename << " for mode " << filemode);
 }
 
 OutputStreamWrapper::OutputStreamWrapper(std::ostream* os)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/network/utils/packetbb.cc ns-3.45/src/network/utils/packetbb.cc
--- ns-3.44/src/network/utils/packetbb.cc	2025-03-09 16:55:49.679372300 -0700
+++ ns-3.45/src/network/utils/packetbb.cc	2025-06-01 20:34:45.562702000 -0700
@@ -1,4 +1,3 @@
-/* vim: set ts=2 sw=2 sta expandtab ai si cin: */
 /*
  * Copyright (c) 2009 Drexel University
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/network/utils/packetbb.h ns-3.45/src/network/utils/packetbb.h
--- ns-3.44/src/network/utils/packetbb.h	2025-03-09 16:55:49.679372300 -0700
+++ ns-3.45/src/network/utils/packetbb.h	2025-06-01 20:34:45.563702000 -0700
@@ -1,4 +1,3 @@
-/* vim: set ts=2 sw=2 sta expandtab ai si cin: */
 /*
  * Copyright (c) 2009 Drexel University
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/nix-vector-routing/model/nix-vector-routing.cc ns-3.45/src/nix-vector-routing/model/nix-vector-routing.cc
--- ns-3.44/src/nix-vector-routing/model/nix-vector-routing.cc	2025-03-09 16:55:49.679372300 -0700
+++ ns-3.45/src/nix-vector-routing/model/nix-vector-routing.cc	2025-06-01 20:34:45.565702000 -0700
@@ -30,16 +30,19 @@
 NS_OBJECT_TEMPLATE_CLASS_DEFINE(NixVectorRouting, Ipv4RoutingProtocol);
 NS_OBJECT_TEMPLATE_CLASS_DEFINE(NixVectorRouting, Ipv6RoutingProtocol);
 
+/// Flag to mark when caches are dirty and need to be flushed
 template <typename T>
 bool NixVectorRouting<T>::g_isCacheDirty = false;
 
-// Epoch starts from one to make it easier to spot an uninitialized NixVector during debug.
+/// Epoch starts from one to make it easier to spot an uninitialized NixVector during debug.
 template <typename T>
 uint32_t NixVectorRouting<T>::g_epoch = 1;
 
+/// Mapping of IP address to ns-3 node
 template <typename T>
 typename NixVectorRouting<T>::IpAddressToNodeMap NixVectorRouting<T>::g_ipAddressToNodeMap;
 
+/// Mapping of Ptr<NetDevice> to Ptr<IpInterface>.
 template <typename T>
 typename NixVectorRouting<T>::NetDeviceToIpInterfaceMap
     NixVectorRouting<T>::g_netdeviceToIpInterfaceMap;
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/olsr/test/tc-regression-test.h ns-3.45/src/olsr/test/tc-regression-test.h
--- ns-3.44/src/olsr/test/tc-regression-test.h	2025-03-09 16:55:49.683372300 -0700
+++ ns-3.45/src/olsr/test/tc-regression-test.h	2025-06-01 20:34:45.567702000 -0700
@@ -68,6 +68,7 @@
    \endverbatim
  */
 // clang-format on
+
 class TcRegressionTest : public TestCase
 {
   public:
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/openflow/doc/openflow-switch.rst ns-3.45/src/openflow/doc/openflow-switch.rst
--- ns-3.44/src/openflow/doc/openflow-switch.rst	2025-03-09 16:55:49.683372300 -0700
+++ ns-3.45/src/openflow/doc/openflow-switch.rst	2025-06-01 20:34:45.567702000 -0700
@@ -138,22 +138,23 @@
 
 1. Obtain the OFSID code.
    An ns-3 specific OFSID branch is provided to ensure
-   operation with ns-3. Use mercurial to download this branch and ns3 to build
+   operation with ns-3. Use Git to download this branch and CMake to build
    the library::
 
-     $ hg clone http://code.nsnam.org/openflow
+     $ git clone https://gitlab.com/nsnam/openflow
      $ cd openflow
 
    From the "openflow" directory, run::
 
-     $ ./waf configure
-     $ ./waf build
+     $ cmake -B build -D CMAKE_INSTALL_PREFIX=./out .
+     $ cmake --build build
+     $ cmake --install build
 
 2. Your OFSID is now built into a libopenflow.a library!
    To link to an ns-3 build with this OpenFlow switch module, run from the ns-3-dev
    (or whatever you have named your distribution)::
 
-     $ ./ns3 configure --enable-examples --enable-tests --with-openflow=path/to/openflow
+     $ ./ns3 configure --enable-examples --enable-tests --with-openflow=path/to/openflow/out
 
 3. Under ``---- Summary of optional NS-3 features:`` you should see:
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/propagation/model/three-gpp-propagation-loss-model.cc ns-3.45/src/propagation/model/three-gpp-propagation-loss-model.cc
--- ns-3.44/src/propagation/model/three-gpp-propagation-loss-model.cc	2025-03-09 16:55:49.687372200 -0700
+++ ns-3.45/src/propagation/model/three-gpp-propagation-loss-model.cc	2025-06-01 20:34:45.570702000 -0700
@@ -263,6 +263,9 @@
 
 NS_OBJECT_ENSURE_REGISTERED(ThreeGppPropagationLossModel);
 
+std::function<Ptr<MobilityModel>(Ptr<const MobilityModel>, Ptr<const MobilityModel>)>
+    ThreeGppPropagationLossModel::m_doCalcRxPowerPrologueFunction;
+
 TypeId
 ThreeGppPropagationLossModel::GetTypeId()
 {
@@ -375,11 +378,19 @@
 
 double
 ThreeGppPropagationLossModel::DoCalcRxPower(double txPowerDbm,
-                                            Ptr<MobilityModel> a,
+                                            Ptr<MobilityModel> c,
                                             Ptr<MobilityModel> b) const
 {
     NS_LOG_FUNCTION(this);
 
+    // if there is a prologue function installed, call it and replace the transmitter mobility model
+    auto a = m_doCalcRxPowerPrologueFunction ? m_doCalcRxPowerPrologueFunction(b, c) : c;
+    if (a->GetPosition() != c->GetPosition())
+    {
+        NS_LOG_DEBUG("Prologue function replaced source position "
+                     << c->GetPosition() << " with position " << a->GetPosition());
+    }
+
     // check if the model is initialized
     NS_ASSERT_MSG(m_frequency != 0.0, "First set the centre frequency");
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/propagation/model/three-gpp-propagation-loss-model.h ns-3.45/src/propagation/model/three-gpp-propagation-loss-model.h
--- ns-3.44/src/propagation/model/three-gpp-propagation-loss-model.h	2025-03-09 16:55:49.687372200 -0700
+++ ns-3.45/src/propagation/model/three-gpp-propagation-loss-model.h	2025-06-01 20:34:45.570702000 -0700
@@ -75,6 +75,26 @@
      */
     bool IsO2iLowPenetrationLoss(Ptr<const ChannelCondition> cond) const;
 
+    /**
+     * @brief Stop-gap solution for wraparound model
+     *
+     * Stop-gap solution for support of wraparound model in the 5G NR module. This
+     * method was introduced for ns-3.45 but will be removed in a future release once
+     * a more general solution is added elsewhere (most likely in the spectrum channel). The
+     * callback method registered here will be executed at the beginning of DoCalcRxPower, and the
+     * returned pointer to a mobility model will be subsequently used as the (replacement) source
+     * mobility model for the rest of DoCalcRxPower() processing.
+     *
+     * @param prologueFunction Function that receives two mobility models and compute a third, based
+     * on the wrapped position of the second model in respect to the first
+     */
+    static void InstallDoCalcRxPowerPrologueFunction(
+        std::function<Ptr<MobilityModel>(Ptr<const MobilityModel>, Ptr<const MobilityModel>)>
+            prologueFunction)
+    {
+        m_doCalcRxPowerPrologueFunction = prologueFunction;
+    }
+
   private:
     /**
      * Computes the received power by applying the pathloss model described in
@@ -300,6 +320,10 @@
     Ptr<NormalRandomVariable>
         m_normalO2iHighLossVar; //!< a normal random variable for the calculation of 02i high loss,
                                 //!< see TR38.901 Table 7.4.3-2
+
+    /// Optional prologue function that can be used to implement wraparound models
+    static std::function<Ptr<MobilityModel>(Ptr<const MobilityModel>, Ptr<const MobilityModel>)>
+        m_doCalcRxPowerPrologueFunction;
 };
 
 /**
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/sixlowpan/model/sixlowpan-net-device.h ns-3.45/src/sixlowpan/model/sixlowpan-net-device.h
--- ns-3.44/src/sixlowpan/model/sixlowpan-net-device.h	2025-03-09 16:55:49.687372200 -0700
+++ ns-3.45/src/sixlowpan/model/sixlowpan-net-device.h	2025-06-01 20:34:45.572702200 -0700
@@ -596,10 +596,6 @@
      * Container for fragment key -> fragments.
      */
     typedef std::map<FragmentKey_t, Ptr<Fragments>> MapFragments_t;
-    /**
-     * Container Iterator for fragment key -> fragments.
-     */
-    typedef std::map<FragmentKey_t, Ptr<Fragments>>::iterator MapFragmentsI_t;
 
     MapFragments_t m_fragments;       //!< Fragments hold to be rebuilt.
     Time m_fragmentExpirationTimeout; //!< Time limit for fragment rebuilding.
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/stats/helper/file-helper.h ns-3.45/src/stats/helper/file-helper.h
--- ns-3.44/src/stats/helper/file-helper.h	2025-03-09 16:55:49.699372300 -0700
+++ ns-3.45/src/stats/helper/file-helper.h	2025-06-01 20:34:45.584702000 -0700
@@ -308,8 +308,7 @@
     std::string m_8dFormat;  //!< Format string for 8D format C-style sprintf() function.
     std::string m_9dFormat;  //!< Format string for 9D format C-style sprintf() function.
     std::string m_10dFormat; //!< Format string for 10D format C-style sprintf() function.
-
-}; // class FileHelper
+};
 
 } // namespace ns3
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/stats/helper/gnuplot-helper.h ns-3.45/src/stats/helper/gnuplot-helper.h
--- ns-3.44/src/stats/helper/gnuplot-helper.h	2025-03-09 16:55:49.699372300 -0700
+++ ns-3.45/src/stats/helper/gnuplot-helper.h	2025-06-01 20:34:45.584702000 -0700
@@ -198,8 +198,7 @@
 
     /// Terminal type for the plot.
     std::string m_terminalType;
-
-}; // class GnuplotHelper
+};
 
 } // namespace ns3
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/stats/model/file-aggregator.h ns-3.45/src/stats/model/file-aggregator.h
--- ns-3.44/src/stats/model/file-aggregator.h	2025-03-09 16:55:49.699372300 -0700
+++ ns-3.45/src/stats/model/file-aggregator.h	2025-06-01 20:34:45.585702200 -0700
@@ -354,8 +354,7 @@
     std::string m_8dFormat;  //!< Format string for 8D C-style sprintf() function.
     std::string m_9dFormat;  //!< Format string for 9D C-style sprintf() function.
     std::string m_10dFormat; //!< Format string for 10D C-style sprintf() function.
-
-}; // class FileAggregator
+};
 
 } // namespace ns3
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/stats/model/gnuplot-aggregator.h ns-3.45/src/stats/model/gnuplot-aggregator.h
--- ns-3.44/src/stats/model/gnuplot-aggregator.h	2025-03-09 16:55:49.699372300 -0700
+++ ns-3.45/src/stats/model/gnuplot-aggregator.h	2025-06-01 20:34:45.585702200 -0700
@@ -276,8 +276,7 @@
 
     /// Maps context strings to 2D datasets.
     std::map<std::string, Gnuplot2dDataset> m_2dDatasetMap;
-
-}; // class GnuplotAggregator
+};
 
 } // namespace ns3
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/test/ns3wifi/wifi-mlo-udp-test-suite.cc ns-3.45/src/test/ns3wifi/wifi-mlo-udp-test-suite.cc
--- ns-3.44/src/test/ns3wifi/wifi-mlo-udp-test-suite.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.45/src/test/ns3wifi/wifi-mlo-udp-test-suite.cc	2025-06-01 20:34:45.589702100 -0700
@@ -0,0 +1,616 @@
+/*
+ * Copyright (c) 2024 Universita' degli Studi di Napoli Federico II
+ *
+ * SPDX-License-Identifier: GPL-2.0-only
+ *
+ * Author: Stefano Avallone <stavallo@unina.it>
+ */
+
+#include "ns3/arp-header.h"
+#include "ns3/arp-l3-protocol.h"
+#include "ns3/config.h"
+#include "ns3/frame-exchange-manager.h"
+#include "ns3/internet-stack-helper.h"
+#include "ns3/ipv4-address-helper.h"
+#include "ns3/llc-snap-header.h"
+#include "ns3/mobility-helper.h"
+#include "ns3/pointer.h"
+#include "ns3/qos-txop.h"
+#include "ns3/rng-seed-manager.h"
+#include "ns3/ssid.h"
+#include "ns3/string.h"
+#include "ns3/test.h"
+#include "ns3/udp-client-server-helper.h"
+#include "ns3/wifi-mac-queue.h"
+#include "ns3/wifi-mac.h"
+#include "ns3/wifi-mlo-test.h"
+#include "ns3/wifi-net-device.h"
+
+#include <array>
+#include <list>
+
+using namespace ns3;
+
+NS_LOG_COMPONENT_DEFINE("WifiMloUdpTest");
+
+/**
+ * @ingroup wifi-test
+ * @ingroup tests
+ *
+ * @brief Test UDP packet transmission between MLDs and SLDs.
+ *
+ * This test sets up an AP MLD and two non-AP MLDs having a variable number of links (possibly one).
+ * The RF channels to set each link to are provided as input parameters. This test aims at veryfing
+ * the successful transmission and reception of UDP packets in different traffic scenarios (from
+ * the first station to the AP, from the AP to the first station, from one station to another).
+ * The number of transmitted ARP Request/Reply frames is verified, as well as the source HW address
+ * they carry. Specifically:
+ *
+ * STA to AP
+ * ---------
+ * The source HW address of the ARP Request sent by the STA is:
+ * - the address of the link used to associate, if STA performs legacy association or AP is an SLD
+ * - the non-AP MLD address (or the unique STA address), otherwise
+ * The source HW address of the ARP Reply sent by the AP is the address of the link used by STA to
+ * associate, if the STA performed legacy association, or the AP MLD address, otherwise.
+ *
+ * AP to STA
+ * ---------
+ * The source HW address of the ARP Request sent by the AP is:
+ * - the unique AP address, if the AP is an SLD
+ * - the AP MLD address, if the AP is an MLD
+ * The source HW address of the ARP Reply sent by the STA is the address of the link used by STA to
+ * associate, if the STA performed legacy association, or the non-AP MLD address, otherwise.
+ *
+ * STA 1 to STA 2
+ * --------------
+ * The source HW address of the ARP Request sent by STA 1 is:
+ * - the address of the link used to associate, if STA performs legacy association or AP is an SLD
+ * - the non-AP MLD address (or the unique STA address), otherwise
+ * The source HW address of the ARP Reply sent by STA 2 is the address of the link used by STA 2 to
+ * associate, if STA 2 performed legacy association, or the non-AP MLD address of STA 2, otherwise.
+ */
+class WifiMloUdpTest : public MultiLinkOperationsTestBase
+{
+  public:
+    /**
+     * Constructor
+     *
+     * @param apChannels string specifying channels for AP
+     * @param firstStaChannels string specifying channels for first STA
+     * @param secondStaChannels string specifying channels for second STA
+     * @param trafficPattern the pattern of traffic to generate
+     * @param assocType the type of association procedure for non-AP devices
+     * @param amsduAggr whether A-MSDU aggregation is enabled
+     */
+    WifiMloUdpTest(const std::vector<std::string>& apChannels,
+                   const std::vector<std::string>& firstStaChannels,
+                   const std::vector<std::string>& secondStaChannels,
+                   WifiTrafficPattern trafficPattern,
+                   WifiAssocType assocType,
+                   bool amsduAggr);
+
+  protected:
+    void DoSetup() override;
+    void Transmit(Ptr<WifiMac> mac,
+                  uint8_t phyId,
+                  WifiConstPsduMap psduMap,
+                  WifiTxVector txVector,
+                  double txPowerW) override;
+    void DoRun() override;
+
+    /**
+     * Check source and destination hardware addresses in ARP request frames.
+     *
+     * @param arp the ARP header
+     * @param sender the MAC address of the sender (Address 2 field)
+     * @param linkId the ID of the link on which the ARP frame is transmitted
+     */
+    void CheckArpRequestHwAddresses(const ArpHeader& arp, Mac48Address sender, uint8_t linkId);
+
+    /**
+     * Check source and destination hardware addresses in ARP reply frames.
+     *
+     * @param arp the ARP header
+     * @param sender the MAC address of the sender (Address 2 field)
+     * @param linkId the ID of the link on which the ARP frame is transmitted
+     */
+    void CheckArpReplyHwAddresses(const ArpHeader& arp, Mac48Address sender, uint8_t linkId);
+
+  private:
+    void StartTraffic() override;
+
+    const std::vector<std::string> m_2ndStaChannels; ///< string specifying channels for second STA
+    WifiTrafficPattern m_trafficPattern;             ///< the pattern of traffic to generate
+    WifiAssocType m_assocType;                       //!< association type
+    bool m_amsduAggr;                                ///< whether A-MSDU aggregation is enabled
+    const std::size_t m_nPackets{3};                 ///< number of application packets to generate
+    Ipv4InterfaceContainer m_staInterfaces;          ///< IP interfaces for non-AP MLDs
+    Ipv4InterfaceContainer m_apInterface;            ///< IP interface for AP MLD
+    const uint16_t m_udpPort{50000};                 ///< UDP port for application servers
+    Ptr<UdpServer> m_sink;                           ///< server app on the receiving node
+    std::size_t m_nArpRequest{0};        ///< counts how many ARP Requests are transmitted
+    std::size_t m_nCheckedArpRequest{0}; ///< counts how many ARP Requests are checked
+    std::size_t m_nArpReply{0};          ///< counts how many ARP Replies are transmitted
+    std::size_t m_nCheckedArpReply{0};   ///< counts how many ARP Replies are checked
+};
+
+WifiMloUdpTest::WifiMloUdpTest(const std::vector<std::string>& apChannels,
+                               const std::vector<std::string>& firstStaChannels,
+                               const std::vector<std::string>& secondStaChannels,
+                               WifiTrafficPattern trafficPattern,
+                               WifiAssocType assocType,
+                               bool amsduAggr)
+    : MultiLinkOperationsTestBase(
+          std::string("Check UDP packet transmission between MLDs ") +
+              " (#AP_links: " + std::to_string(apChannels.size()) +
+              ", #STA_1_links: " + std::to_string(firstStaChannels.size()) +
+              ", #STA_2_links: " + std::to_string(secondStaChannels.size()) +
+              ", Traffic pattern: " + std::to_string(static_cast<uint8_t>(trafficPattern)) +
+              ", Assoc type: " + (assocType == WifiAssocType::LEGACY ? "Legacy" : "ML setup") +
+              ", A-MSDU aggregation: " + std::to_string(amsduAggr) + ")",
+          2,
+          BaseParams{firstStaChannels, apChannels, {}}),
+      m_2ndStaChannels(secondStaChannels),
+      m_trafficPattern(trafficPattern),
+      m_assocType(assocType),
+      m_amsduAggr(amsduAggr)
+{
+}
+
+void
+WifiMloUdpTest::DoSetup()
+{
+    Config::SetDefault("ns3::WifiMac::BE_MaxAmsduSize", UintegerValue(m_amsduAggr ? 4000 : 0));
+
+    RngSeedManager::SetSeed(1);
+    RngSeedManager::SetRun(3);
+    int64_t streamNumber = 30;
+
+    NodeContainer wifiApNode(1);
+    NodeContainer wifiStaNodes(2);
+
+    WifiHelper wifi;
+    // WifiHelper::EnableLogComponents();
+    wifi.SetStandard(WIFI_STANDARD_80211be);
+    wifi.SetRemoteStationManager("ns3::ConstantRateWifiManager",
+                                 "DataMode",
+                                 StringValue("EhtMcs0"),
+                                 "ControlMode",
+                                 StringValue("HtMcs0"));
+
+    ChannelMap channelMap{{WIFI_SPECTRUM_2_4_GHZ, CreateObject<MultiModelSpectrumChannel>()},
+                          {WIFI_SPECTRUM_5_GHZ, CreateObject<MultiModelSpectrumChannel>()},
+                          {WIFI_SPECTRUM_6_GHZ, CreateObject<MultiModelSpectrumChannel>()}};
+
+    SpectrumWifiPhyHelper staPhyHelper1;
+    SpectrumWifiPhyHelper staPhyHelper2;
+    SpectrumWifiPhyHelper apPhyHelper;
+    SetChannels(staPhyHelper1, m_staChannels, channelMap);
+    SetChannels(staPhyHelper2, m_2ndStaChannels, channelMap);
+    SetChannels(apPhyHelper, m_apChannels, channelMap);
+
+    WifiMacHelper mac;
+    mac.SetType("ns3::StaWifiMac", // default SSID
+                "ActiveProbing",
+                BooleanValue(false),
+                "AssocType",
+                EnumValue(m_assocType));
+
+    NetDeviceContainer staDevices = wifi.Install(staPhyHelper1, mac, wifiStaNodes.Get(0));
+
+    mac.SetType("ns3::StaWifiMac", // default SSID
+                "ActiveProbing",
+                BooleanValue(false),
+                "AssocType",
+                EnumValue(m_assocType));
+
+    staDevices.Add(wifi.Install(staPhyHelper2, mac, wifiStaNodes.Get(1)));
+
+    mac.SetType("ns3::ApWifiMac",
+                "Ssid",
+                SsidValue(Ssid("ns-3-ssid")),
+                "BeaconGeneration",
+                BooleanValue(true));
+
+    NetDeviceContainer apDevices = wifi.Install(apPhyHelper, mac, wifiApNode);
+
+    // Uncomment the lines below to write PCAP files
+    // apPhyHelper.EnablePcap("wifi-mlo_AP", apDevices);
+    // staPhyHelper1.EnablePcap("wifi-mlo_STA", staDevices);
+
+    // Assign fixed streams to random variables in use
+    streamNumber += WifiHelper::AssignStreams(apDevices, streamNumber);
+    streamNumber += WifiHelper::AssignStreams(staDevices, streamNumber);
+
+    MobilityHelper mobility;
+    Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator>();
+
+    positionAlloc->Add(Vector(0.0, 0.0, 0.0));
+    positionAlloc->Add(Vector(1.0, 0.0, 0.0));
+    mobility.SetPositionAllocator(positionAlloc);
+
+    mobility.SetMobilityModel("ns3::ConstantPositionMobilityModel");
+    mobility.Install(wifiApNode);
+    mobility.Install(wifiStaNodes);
+
+    m_apMac = DynamicCast<ApWifiMac>(DynamicCast<WifiNetDevice>(apDevices.Get(0))->GetMac());
+    for (uint8_t i = 0; i < m_nStations; i++)
+    {
+        m_staMacs[i] =
+            DynamicCast<StaWifiMac>(DynamicCast<WifiNetDevice>(staDevices.Get(i))->GetMac());
+    }
+
+    // Trace PSDUs passed to the PHY on all devices
+    for (uint8_t phyId = 0; phyId < m_apMac->GetDevice()->GetNPhys(); phyId++)
+    {
+        Config::ConnectWithoutContext(
+            "/NodeList/0/DeviceList/*/$ns3::WifiNetDevice/Phys/" + std::to_string(phyId) +
+                "/PhyTxPsduBegin",
+            MakeCallback(&WifiMloUdpTest::Transmit, this).Bind(m_apMac, phyId));
+    }
+    for (uint8_t i = 0; i < m_nStations; i++)
+    {
+        for (uint8_t phyId = 0; phyId < m_staMacs[i]->GetDevice()->GetNPhys(); phyId++)
+        {
+            Config::ConnectWithoutContext(
+                "/NodeList/" + std::to_string(i + 1) + "/DeviceList/*/$ns3::WifiNetDevice/Phys/" +
+                    std::to_string(phyId) + "/PhyTxPsduBegin",
+                MakeCallback(&WifiMloUdpTest::Transmit, this).Bind(m_staMacs[i], phyId));
+        }
+    }
+
+    // install Internet stack on all nodes
+    InternetStackHelper stack;
+    auto allNodes = NodeContainer::GetGlobal();
+    stack.Install(allNodes);
+    streamNumber += stack.AssignStreams(allNodes, streamNumber);
+
+    Ipv4AddressHelper address;
+    address.SetBase("10.1.0.0", "255.255.255.0");
+    m_apInterface = address.Assign(NetDeviceContainer(m_apMac->GetDevice()));
+    for (std::size_t i = 0; i < m_nStations; i++)
+    {
+        m_staInterfaces.Add(address.Assign(NetDeviceContainer(m_staMacs[i]->GetDevice())));
+    }
+
+    // install a UDP server on all nodes
+    UdpServerHelper serverHelper(m_udpPort);
+    auto serverApps = serverHelper.Install(allNodes);
+    serverApps.Start(Seconds(0.0));
+    serverApps.Stop(m_duration);
+
+    switch (m_trafficPattern)
+    {
+    case WifiTrafficPattern::STA_TO_AP:
+        m_sink = DynamicCast<UdpServer>(serverApps.Get(0));
+        break;
+    case WifiTrafficPattern::AP_TO_STA:
+        m_sink = DynamicCast<UdpServer>(serverApps.Get(1));
+        break;
+    case WifiTrafficPattern::STA_TO_STA:
+        m_sink = DynamicCast<UdpServer>(serverApps.Get(2));
+        break;
+    default:
+        m_sink = nullptr; // other cases are not supported
+    }
+
+    m_startAid = m_apMac->GetNextAssociationId();
+
+    // schedule association/ML setup for one station at a time
+    m_apMac->TraceConnectWithoutContext("AssociatedSta",
+                                        MakeCallback(&WifiMloUdpTest::SetSsid, this));
+    m_staMacs[0]->SetSsid(Ssid("ns-3-ssid"));
+}
+
+void
+WifiMloUdpTest::StartTraffic()
+{
+    Ptr<WifiMac> srcMac;
+    Ipv4Address destAddr;
+
+    switch (m_trafficPattern)
+    {
+    case WifiTrafficPattern::STA_TO_AP:
+        srcMac = m_staMacs[0];
+        destAddr = m_apInterface.GetAddress(0);
+        break;
+    case WifiTrafficPattern::AP_TO_STA:
+        srcMac = m_apMac;
+        destAddr = m_staInterfaces.GetAddress(0);
+        break;
+    case WifiTrafficPattern::STA_TO_STA:
+        srcMac = m_staMacs[0];
+        destAddr = m_staInterfaces.GetAddress(1);
+        break;
+    default:
+        NS_ABORT_MSG("Unsupported scenario " << +static_cast<uint8_t>(m_trafficPattern));
+    }
+
+    UdpClientHelper clientHelper(InetSocketAddress(destAddr, m_udpPort));
+    clientHelper.SetAttribute("MaxPackets", UintegerValue(m_nPackets));
+    clientHelper.SetAttribute("Interval", TimeValue(Time{0}));
+    clientHelper.SetAttribute("PacketSize", UintegerValue(100));
+    auto clientApp = clientHelper.Install(srcMac->GetDevice()->GetNode());
+    clientApp.Start(Seconds(0.0));
+    clientApp.Stop(m_duration);
+}
+
+void
+WifiMloUdpTest::Transmit(Ptr<WifiMac> mac,
+                         uint8_t phyId,
+                         WifiConstPsduMap psduMap,
+                         WifiTxVector txVector,
+                         double txPowerW)
+{
+    MultiLinkOperationsTestBase::Transmit(mac, phyId, psduMap, txVector, txPowerW);
+
+    auto psdu = psduMap.begin()->second;
+    auto linkId = m_txPsdus.back().linkId;
+
+    if (!psdu->GetHeader(0).IsQosData() || !psdu->GetHeader(0).HasData())
+    {
+        // we are interested in ARP Request/Reply frames, which are carried by QoS data frames
+        return;
+    }
+
+    for (const auto& mpdu : *PeekPointer(psdu))
+    {
+        std::list<Ptr<const Packet>> packets;
+
+        if (mpdu->GetHeader().IsQosAmsdu())
+        {
+            for (const auto& msdu : *PeekPointer(mpdu))
+            {
+                packets.push_back(msdu.first);
+            }
+        }
+        else
+        {
+            packets.push_back(mpdu->GetPacket());
+        }
+
+        for (auto pkt : packets)
+        {
+            LlcSnapHeader llc;
+            auto packet = pkt->Copy();
+            packet->RemoveHeader(llc);
+
+            if (llc.GetType() != ArpL3Protocol::PROT_NUMBER)
+            {
+                continue;
+            }
+
+            ArpHeader arp;
+            packet->RemoveHeader(arp);
+
+            if (arp.IsRequest())
+            {
+                CheckArpRequestHwAddresses(arp, psdu->GetAddr2(), linkId);
+            }
+            if (arp.IsReply())
+            {
+                CheckArpReplyHwAddresses(arp, psdu->GetAddr2(), linkId);
+            }
+        }
+    }
+}
+
+void
+WifiMloUdpTest::CheckArpRequestHwAddresses(const ArpHeader& arp,
+                                           Mac48Address sender,
+                                           uint8_t linkId)
+{
+    ++m_nArpRequest;
+
+    // source and destination HW addresses cannot be checked for forwarded frames because
+    // they can be forwarded on different links
+    if (auto srcMac =
+            (m_trafficPattern == WifiTrafficPattern::AP_TO_STA ? StaticCast<WifiMac>(m_apMac)
+                                                               : StaticCast<WifiMac>(m_staMacs[0]));
+        !srcMac->GetLinkIdByAddress(sender) && sender != srcMac->GetAddress())
+    {
+        // the sender address is not the MLD address nor a link address of the source device
+        return;
+    }
+
+    Mac48Address expectedSrc;
+
+    switch (m_trafficPattern)
+    {
+    case WifiTrafficPattern::STA_TO_AP:
+    case WifiTrafficPattern::STA_TO_STA:
+        // if the ARP Request is sent by a STA, the source HW address is:
+        // - the address of the link used to associate, if the STA performs legacy association or
+        //   the AP is an SLD
+        // - the non-AP MLD address (or the unique STA address), otherwise
+        expectedSrc = (m_assocType == WifiAssocType::LEGACY || m_apMac->GetNLinks() == 1)
+                          ? m_staMacs[0]->GetFrameExchangeManager(linkId)->GetAddress()
+                          : m_staMacs[0]->GetAddress();
+        break;
+    case WifiTrafficPattern::AP_TO_STA:
+        // if the ARP Request is sent by an AP, the source HW address is:
+        // - the unique AP address, if the AP is an SLD
+        // - the AP MLD address, if the AP is an MLD
+        expectedSrc = m_apMac->GetAddress();
+        break;
+    default:
+        NS_ABORT_MSG("Unsupported scenario " << +static_cast<uint8_t>(m_trafficPattern));
+    }
+
+    ++m_nCheckedArpRequest;
+
+    NS_TEST_EXPECT_MSG_EQ(Mac48Address::ConvertFrom(arp.GetSourceHardwareAddress()),
+                          expectedSrc,
+                          "Unexpected source HW address");
+    NS_TEST_EXPECT_MSG_EQ(Mac48Address::ConvertFrom(arp.GetDestinationHardwareAddress()),
+                          Mac48Address::GetBroadcast(),
+                          "Unexpected destination HW address");
+}
+
+void
+WifiMloUdpTest::CheckArpReplyHwAddresses(const ArpHeader& arp, Mac48Address sender, uint8_t linkId)
+{
+    ++m_nArpReply;
+
+    // source and destination HW addresses cannot be checked for forwarded frames because
+    // they can be forwarded on different links
+    auto srcMac =
+        (m_trafficPattern == WifiTrafficPattern::STA_TO_AP   ? StaticCast<WifiMac>(m_apMac)
+         : m_trafficPattern == WifiTrafficPattern::AP_TO_STA ? StaticCast<WifiMac>(m_staMacs[0])
+                                                             : StaticCast<WifiMac>(m_staMacs[1]));
+
+    if (!srcMac->GetLinkIdByAddress(sender) && sender != srcMac->GetAddress())
+    {
+        // the sender address is not the MLD address nor a link address of the source device
+        return;
+    }
+
+    // the source HW address of the ARP Reply is the address of the link on which the ARP Reply is
+    // sent, if the sender performed legacy association, or the MLD address, otherwise
+    Mac48Address expectedSrc = (m_assocType == WifiAssocType::LEGACY || m_apMac->GetNLinks() == 1)
+                                   ? srcMac->GetFrameExchangeManager(linkId)->GetAddress()
+                                   : srcMac->GetAddress();
+
+    ++m_nCheckedArpReply;
+
+    NS_TEST_EXPECT_MSG_EQ(Mac48Address::ConvertFrom(arp.GetSourceHardwareAddress()),
+                          expectedSrc,
+                          "Unexpected source HW address");
+}
+
+void
+WifiMloUdpTest::DoRun()
+{
+    Simulator::Stop(m_duration);
+    Simulator::Run();
+
+    NS_TEST_ASSERT_MSG_NE(m_sink, nullptr, "Sink is not set");
+    NS_TEST_EXPECT_MSG_EQ(m_sink->GetReceived(),
+                          m_nPackets,
+                          "Unexpected number of received packets");
+
+    std::size_t expectedNOrigArpRequest{0};
+    std::size_t expectedNFwdArpRequest{0};
+
+    switch (m_trafficPattern)
+    {
+    case WifiTrafficPattern::STA_TO_AP:
+    case WifiTrafficPattern::STA_TO_STA:
+        // STA transmits ARP Request on one link, AP retransmits it on all of its links
+        expectedNOrigArpRequest = 1;
+        expectedNFwdArpRequest = m_apMac->GetNLinks();
+        break;
+    case WifiTrafficPattern::AP_TO_STA:
+        // AP transmits ARP Request on all of its links
+        expectedNOrigArpRequest = m_apMac->GetNLinks();
+        expectedNFwdArpRequest = 0;
+        break;
+    default:
+        NS_ABORT_MSG("Unsupported scenario " << +static_cast<uint8_t>(m_trafficPattern));
+    }
+
+    NS_TEST_EXPECT_MSG_EQ(m_nArpRequest,
+                          expectedNOrigArpRequest + expectedNFwdArpRequest,
+                          "Unexpected number of transmitted ARP Request frames");
+    NS_TEST_EXPECT_MSG_EQ(m_nCheckedArpRequest,
+                          expectedNOrigArpRequest,
+                          "Unexpected number of checked ARP Request frames");
+
+    std::size_t expectedNOrigArpReply{0};
+    std::size_t expectedNFwdArpReply{0};
+
+    switch (m_trafficPattern)
+    {
+    case WifiTrafficPattern::STA_TO_AP:
+        // STA transmits only one ARP Request, AP replies with one (unicast) ARP Reply
+        expectedNOrigArpReply = 1;
+        expectedNFwdArpReply = 0;
+        break;
+    case WifiTrafficPattern::AP_TO_STA:
+        // ARP Request is broadcast, so it is sent by the AP on all of its links; the STA sends
+        // an ARP Reply for each setup link
+        expectedNOrigArpReply =
+            std::min<std::size_t>(m_apMac->GetNLinks(), m_staMacs[0]->GetSetupLinkIds().size());
+        expectedNFwdArpReply = 0;
+        break;
+    case WifiTrafficPattern::STA_TO_STA:
+        // AP forwards ARP Request on all of its links; STA 2 sends as many ARP Replies as the
+        // number of setup links; each such ARP Reply is forwarded by the AP to STA 1
+        expectedNOrigArpReply = expectedNFwdArpReply = m_staMacs[1]->GetSetupLinkIds().size();
+        break;
+    default:
+        NS_ABORT_MSG("Unsupported scenario " << +static_cast<uint8_t>(m_trafficPattern));
+    }
+
+    NS_TEST_EXPECT_MSG_EQ(m_nArpReply,
+                          expectedNOrigArpReply + expectedNFwdArpReply,
+                          "Unexpected number of transmitted ARP Reply frames");
+    NS_TEST_EXPECT_MSG_EQ(m_nCheckedArpReply,
+                          expectedNOrigArpReply,
+                          "Unexpected number of checked ARP Reply frames");
+
+    Simulator::Destroy();
+}
+
+/**
+ * @ingroup wifi-test
+ * @ingroup tests
+ *
+ * @brief Multi-Link Operations with UDP traffic Test Suite
+ */
+class WifiMloUdpTestSuite : public TestSuite
+{
+  public:
+    WifiMloUdpTestSuite();
+};
+
+WifiMloUdpTestSuite::WifiMloUdpTestSuite()
+    : TestSuite("wifi-mlo-udp", Type::SYSTEM)
+{
+    using ParamsTuple = std::array<std::vector<std::string>, 3>; // AP, STA 1, STA 2 channels
+
+    for (const auto& channels :
+         {// single link AP, non-AP MLD with 3 links, single link non-AP STA
+          ParamsTuple{
+              {{"{7, 80, BAND_6GHZ, 0}"},
+               {"{42, 80, BAND_5GHZ, 2}", "{5, 40, BAND_2_4GHZ, 0}", "{7, 80, BAND_6GHZ, 0}"},
+               {"{7, 80, BAND_6GHZ, 0}"}}},
+          // single link AP, non-AP MLD with 3 links, non-AP MLD with 2 links
+          ParamsTuple{
+              {{"{7, 80, BAND_6GHZ, 0}"},
+               {"{42, 80, BAND_5GHZ, 2}", "{5, 40, BAND_2_4GHZ, 0}", "{7, 80, BAND_6GHZ, 0}"},
+               {"{42, 80, BAND_5GHZ, 2}", "{7, 80, BAND_6GHZ, 0}"}}},
+          // AP MLD with 3 links, single link non-AP STA, non-AP MLD with 2 links
+          ParamsTuple{
+              {{"{42, 80, BAND_5GHZ, 2}", "{5, 40, BAND_2_4GHZ, 0}", "{7, 80, BAND_6GHZ, 0}"},
+               {"{7, 80, BAND_6GHZ, 0}"},
+               {"{42, 80, BAND_5GHZ, 2}", "{5, 40, BAND_2_4GHZ, 0}"}}},
+          // AP MLD with 3 links, non-AP MLD with 3 links, non-AP MLD with 2 links
+          ParamsTuple{
+              {{"{42, 80, BAND_5GHZ, 2}", "{7, 80, BAND_6GHZ, 0}", "{5, 40, BAND_2_4GHZ, 0}"},
+               {"{42, 80, BAND_5GHZ, 2}", "{7, 80, BAND_6GHZ, 0}", "{5, 40, BAND_2_4GHZ, 0}"},
+               {"{7, 80, BAND_6GHZ, 0}", "{5, 40, BAND_2_4GHZ, 0}"}}}})
+    {
+        for (const auto& trafficPattern : {WifiTrafficPattern::STA_TO_AP,
+                                           WifiTrafficPattern::AP_TO_STA,
+                                           WifiTrafficPattern::STA_TO_STA})
+        {
+            for (const auto amsduAggr : {false, true})
+            {
+                for (const auto assocType : {WifiAssocType::LEGACY, WifiAssocType::ML_SETUP})
+                {
+                    AddTestCase(new WifiMloUdpTest(channels[0],
+                                                   channels[1],
+                                                   channels[2],
+                                                   trafficPattern,
+                                                   assocType,
+                                                   amsduAggr),
+                                TestCase::Duration::QUICK);
+                }
+            }
+        }
+    }
+}
+
+static WifiMloUdpTestSuite g_wifiMloUdpTestSuite; ///< the test suite
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/test/traced/traced-value-callback-typedef-test-suite.cc ns-3.45/src/test/traced/traced-value-callback-typedef-test-suite.cc
--- ns-3.44/src/test/traced/traced-value-callback-typedef-test-suite.cc	2025-03-09 16:55:49.703372200 -0700
+++ ns-3.45/src/test/traced/traced-value-callback-typedef-test-suite.cc	2025-06-01 20:34:45.589702100 -0700
@@ -188,7 +188,8 @@
 
         } // Invoke()
 
-    }; // class CheckTvCb<T>
+        // end of class CheckTvCb<T>
+    };
 
     /**
      * Check the TracedValue typedef against TracedValueCbSink<T>.
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/topology-read/model/rocketfuel-topology-reader.cc ns-3.45/src/topology-read/model/rocketfuel-topology-reader.cc
--- ns-3.44/src/topology-read/model/rocketfuel-topology-reader.cc	2025-03-09 16:55:49.707372200 -0700
+++ ns-3.45/src/topology-read/model/rocketfuel-topology-reader.cc	2025-06-01 20:34:45.590702000 -0700
@@ -106,9 +106,7 @@
 {
     /* uid @loc [+] [bb] (num_neigh) [&ext] -> <nuid-1> <nuid-2> ... {-euid} ... =name[!] rn */
     NS_LOG_INFO("Load Node[" << uid << "]: location: " << loc << " dns: " << dns << " bb: " << bb
-                             << " neighbors: " << neighListSize << "("
-                             << "%d"
-                             << ") externals: \"%s\"(%d) "
+                             << " neighbors: " << neighListSize << "(%d) externals: \"%s\"(%d) "
                              << "name: " << name << " radius: " << radius);
 }
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/traffic-control/examples/adaptive-red-tests.cc ns-3.45/src/traffic-control/examples/adaptive-red-tests.cc
--- ns-3.44/src/traffic-control/examples/adaptive-red-tests.cc	2025-03-09 16:55:49.707372200 -0700
+++ ns-3.45/src/traffic-control/examples/adaptive-red-tests.cc	2025-06-01 20:34:45.592702200 -0700
@@ -498,10 +498,8 @@
 
     if (writeForPlot)
     {
-        filePlotQueueDisc << pathOut << "/"
-                          << "ared-queue-disc.plotme";
-        filePlotQueueDiscAvg << pathOut << "/"
-                             << "ared-queue-disc_avg.plotme";
+        filePlotQueueDisc << pathOut << "/ared-queue-disc.plotme";
+        filePlotQueueDiscAvg << pathOut << "/ared-queue-disc_avg.plotme";
 
         remove(filePlotQueueDisc.str().c_str());
         remove(filePlotQueueDiscAvg.str().c_str());
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/traffic-control/examples/pie-example.cc ns-3.45/src/traffic-control/examples/pie-example.cc
--- ns-3.44/src/traffic-control/examples/pie-example.cc	2025-03-09 16:55:49.707372200 -0700
+++ ns-3.45/src/traffic-control/examples/pie-example.cc	2025-06-01 20:34:45.592702200 -0700
@@ -284,10 +284,8 @@
 
     if (writeForPlot)
     {
-        filePlotQueueDisc << pathOut << "/"
-                          << "pie-queue-disc.plotme";
-        filePlotQueueDiscAvg << pathOut << "/"
-                             << "pie-queue-disc_avg.plotme";
+        filePlotQueueDisc << pathOut << "/pie-queue-disc.plotme";
+        filePlotQueueDiscAvg << pathOut << "/pie-queue-disc_avg.plotme";
 
         remove(filePlotQueueDisc.str().c_str());
         remove(filePlotQueueDiscAvg.str().c_str());
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/traffic-control/examples/red-tests.cc ns-3.45/src/traffic-control/examples/red-tests.cc
--- ns-3.44/src/traffic-control/examples/red-tests.cc	2025-03-09 16:55:49.707372200 -0700
+++ ns-3.45/src/traffic-control/examples/red-tests.cc	2025-06-01 20:34:45.592702200 -0700
@@ -432,10 +432,8 @@
 
     if (writeForPlot)
     {
-        filePlotQueue << pathOut << "/"
-                      << "red-queue.plotme";
-        filePlotQueueAvg << pathOut << "/"
-                         << "red-queue_avg.plotme";
+        filePlotQueue << pathOut << "/red-queue.plotme";
+        filePlotQueueAvg << pathOut << "/red-queue_avg.plotme";
 
         remove(filePlotQueue.str().c_str());
         remove(filePlotQueueAvg.str().c_str());
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/traffic-control/model/tbf-queue-disc.cc ns-3.45/src/traffic-control/model/tbf-queue-disc.cc
--- ns-3.44/src/traffic-control/model/tbf-queue-disc.cc	2025-03-09 16:55:49.719372300 -0700
+++ ns-3.45/src/traffic-control/model/tbf-queue-disc.cc	2025-06-01 20:34:45.594702200 -0700
@@ -349,8 +349,8 @@
     if (m_burst <= m_mtu)
     {
         NS_LOG_WARN("The size of the first bucket ("
-                    << m_burst << ") should be "
-                    << "greater than the size of the second bucket (" << m_mtu << ").");
+                    << m_burst << ") should be greater than the size of the second bucket ("
+                    << m_mtu << ").");
     }
 
     if (m_peakRate > DataRate("0bps") && m_peakRate <= m_rate)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/traffic-control/model/traffic-control-layer.cc ns-3.45/src/traffic-control/model/traffic-control-layer.cc
--- ns-3.44/src/traffic-control/model/traffic-control-layer.cc	2025-03-09 16:55:49.719372300 -0700
+++ ns-3.45/src/traffic-control/model/traffic-control-layer.cc	2025-06-01 20:34:45.594702200 -0700
@@ -48,12 +48,6 @@
     return tid;
 }
 
-TypeId
-TrafficControlLayer::GetInstanceTypeId() const
-{
-    return GetTypeId();
-}
-
 TrafficControlLayer::TrafficControlLayer()
     : Object()
 {
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/traffic-control/model/traffic-control-layer.h ns-3.45/src/traffic-control/model/traffic-control-layer.h
--- ns-3.44/src/traffic-control/model/traffic-control-layer.h	2025-03-09 16:55:49.719372300 -0700
+++ ns-3.45/src/traffic-control/model/traffic-control-layer.h	2025-06-01 20:34:45.594702200 -0700
@@ -94,12 +94,6 @@
     static TypeId GetTypeId();
 
     /**
-     * @brief Get the type ID for the instance
-     * @return the instance TypeId
-     */
-    TypeId GetInstanceTypeId() const override;
-
-    /**
      * @brief Constructor
      */
     TrafficControlLayer();
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/uan/examples/uan-6lowpan-example.cc ns-3.45/src/uan/examples/uan-6lowpan-example.cc
--- ns-3.44/src/uan/examples/uan-6lowpan-example.cc	2025-03-09 16:55:49.727372400 -0700
+++ ns-3.45/src/uan/examples/uan-6lowpan-example.cc	2025-06-01 20:34:45.595702200 -0700
@@ -218,8 +218,7 @@
 void
 UanExperiment::SendSinglePacket(Ptr<Node> node, Ptr<Packet> pkt, Ipv6Address dst)
 {
-    NS_LOG_UNCOND(Simulator::Now().GetHours() << "h"
-                                              << " packet sent to " << dst);
+    NS_LOG_UNCOND(Simulator::Now().GetHours() << "h packet sent to " << dst);
     Inet6SocketAddress ipv6_destination = Inet6SocketAddress(Ipv6Address::ConvertFrom(dst), 9);
     m_sockets[node]->SendTo(pkt, 0, ipv6_destination);
 }
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/uan/examples/uan-ipv4-example.cc ns-3.45/src/uan/examples/uan-ipv4-example.cc
--- ns-3.44/src/uan/examples/uan-ipv4-example.cc	2025-03-09 16:55:49.731372400 -0700
+++ ns-3.45/src/uan/examples/uan-ipv4-example.cc	2025-06-01 20:34:45.595702200 -0700
@@ -209,8 +209,7 @@
 void
 UanExperiment::SendSinglePacket(Ptr<Node> node, Ptr<Packet> pkt, Ipv4Address dst)
 {
-    NS_LOG_UNCOND(Simulator::Now().GetHours() << "h"
-                                              << " packet sent to " << dst);
+    NS_LOG_UNCOND(Simulator::Now().GetHours() << "h packet sent to " << dst);
     InetSocketAddress ipv4_destination = InetSocketAddress(dst, 9);
     m_sockets[node]->SendTo(pkt, 0, ipv4_destination);
 }
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/uan/examples/uan-ipv6-example.cc ns-3.45/src/uan/examples/uan-ipv6-example.cc
--- ns-3.44/src/uan/examples/uan-ipv6-example.cc	2025-03-09 16:55:49.731372400 -0700
+++ ns-3.45/src/uan/examples/uan-ipv6-example.cc	2025-06-01 20:34:45.595702200 -0700
@@ -213,8 +213,7 @@
 void
 UanExperiment::SendSinglePacket(Ptr<Node> node, Ptr<Packet> pkt, Ipv6Address dst)
 {
-    NS_LOG_UNCOND(Simulator::Now().GetHours() << "h"
-                                              << " packet sent to " << dst);
+    NS_LOG_UNCOND(Simulator::Now().GetHours() << "h packet sent to " << dst);
     Inet6SocketAddress ipv6_destination = Inet6SocketAddress(Ipv6Address::ConvertFrom(dst), 9);
     m_sockets[node]->SendTo(pkt, 0, ipv6_destination);
 }
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/uan/examples/uan-raw-example.cc ns-3.45/src/uan/examples/uan-raw-example.cc
--- ns-3.44/src/uan/examples/uan-raw-example.cc	2025-03-09 16:55:49.731372400 -0700
+++ ns-3.45/src/uan/examples/uan-raw-example.cc	2025-06-01 20:34:45.595702200 -0700
@@ -198,8 +198,7 @@
 void
 UanExperiment::SendSinglePacket(Ptr<Node> node, Ptr<Packet> pkt, Mac8Address dst)
 {
-    NS_LOG_UNCOND(Simulator::Now().GetHours() << "h"
-                                              << " packet sent to " << dst);
+    NS_LOG_UNCOND(Simulator::Now().GetHours() << "h packet sent to " << dst);
     PacketSocketAddress socketAddress;
     socketAddress.SetSingleDevice(node->GetDevice(0)->GetIfIndex());
     socketAddress.SetPhysicalAddress(dst);
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/uan/model/acoustic-modem-energy-model.h ns-3.45/src/uan/model/acoustic-modem-energy-model.h
--- ns-3.44/src/uan/model/acoustic-modem-energy-model.h	2025-03-09 16:55:49.731372400 -0700
+++ ns-3.45/src/uan/model/acoustic-modem-energy-model.h	2025-06-01 20:34:45.596702000 -0700
@@ -226,8 +226,7 @@
 
     /** Energy recharge callback. */
     AcousticModemEnergyRechargeCallback m_energyRechargeCallback;
-
-}; // class AcousticModemEnergyModel
+};
 
 } // namespace ns3
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/uan/model/uan-channel.h ns-3.45/src/uan/model/uan-channel.h
--- ns-3.44/src/uan/model/uan-channel.h	2025-03-09 16:55:49.731372400 -0700
+++ ns-3.45/src/uan/model/uan-channel.h	2025-06-01 20:34:45.596702000 -0700
@@ -122,8 +122,7 @@
     void SendUp(uint32_t i, Ptr<Packet> packet, double rxPowerDb, UanTxMode txMode, UanPdp pdp);
 
     void DoDispose() override;
-
-}; // class UanChannel
+};
 
 } // namespace ns3
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/uan/model/uan-header-common.h ns-3.45/src/uan/model/uan-header-common.h
--- ns-3.44/src/uan/model/uan-header-common.h	2025-03-09 16:55:49.731372400 -0700
+++ ns-3.45/src/uan/model/uan-header-common.h	2025-06-01 20:34:45.596702000 -0700
@@ -141,8 +141,7 @@
     Mac8Address m_dest;                   //!< The destination address.
     Mac8Address m_src;                    //!< The source address.
     UanProtocolBits m_uanProtocolBits{0}; //!< The type and protocol bits
-
-}; // class UanHeaderCommon
+};
 
 } // namespace ns3
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/uan/model/uan-header-rc.h ns-3.45/src/uan/model/uan-header-rc.h
--- ns-3.44/src/uan/model/uan-header-rc.h	2025-03-09 16:55:49.731372400 -0700
+++ ns-3.45/src/uan/model/uan-header-rc.h	2025-06-01 20:34:45.596702000 -0700
@@ -93,7 +93,8 @@
     uint8_t m_frameNo; //!< Data frame number.
     Time m_propDelay;  //!< Propagation delay.
 
-}; // class UanHeaderRcData
+    // end of class UanHeaderRcData
+};
 
 /**
  * @ingroup uan
@@ -214,7 +215,8 @@
     Time m_timeStamp;   //!< RTS TX timestamp.
     uint8_t m_retryNo;  //!< Retry number of RTS packet.
 
-}; // class UanHeaderRcRts
+    // end of class UanHeaderRcRts
+};
 
 /**
  * @ingroup uan
@@ -317,7 +319,8 @@
     uint16_t m_retryRate; //!< Retry rate.
     uint16_t m_rateNum;   //!< Rate number.
 
-}; // class UanHeaderRcCtsGlobal
+    // end of class UanHeaderRcCtsGlobal
+};
 
 /**
  * @ingroup uan
@@ -436,7 +439,8 @@
     Time m_delay;          //!< Delay until transmission.
     Mac8Address m_address; //!< Destination of CTS packet.
 
-}; // class UanHeaderRcCts
+    // end of class UanHeaderRcCts
+};
 
 /**
  * @ingroup uan
@@ -500,7 +504,8 @@
     uint8_t m_frameNo;                //!< Next frame number.
     std::set<uint8_t> m_nackedFrames; //!< Marker for nacked frames.
 
-}; // class UanHeaderRcAck
+    // end of class UanHeaderRcAck
+};
 
 } // namespace ns3
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/uan/model/uan-mac-aloha.h ns-3.45/src/uan/model/uan-mac-aloha.h
--- ns-3.44/src/uan/model/uan-mac-aloha.h	2025-03-09 16:55:49.731372400 -0700
+++ ns-3.45/src/uan/model/uan-mac-aloha.h	2025-06-01 20:34:45.596702000 -0700
@@ -75,8 +75,7 @@
 
   protected:
     void DoDispose() override;
-
-}; // class UanMacAloha
+};
 
 } // namespace ns3
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/uan/model/uan-mac-cw.h ns-3.45/src/uan/model/uan-mac-cw.h
--- ns-3.44/src/uan/model/uan-mac-cw.h	2025-03-09 16:55:49.731372400 -0700
+++ ns-3.45/src/uan/model/uan-mac-cw.h	2025-06-01 20:34:45.596702000 -0700
@@ -168,8 +168,7 @@
 
   protected:
     void DoDispose() override;
-
-}; // class UanMacCw
+};
 
 } // namespace ns3
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/uan/model/uan-mac.h ns-3.45/src/uan/model/uan-mac.h
--- ns-3.44/src/uan/model/uan-mac.h	2025-03-09 16:55:49.731372400 -0700
+++ ns-3.45/src/uan/model/uan-mac.h	2025-06-01 20:34:45.597702300 -0700
@@ -129,8 +129,7 @@
     uint32_t m_txModeIndex;
     /** The MAC address. */
     Mac8Address m_address;
-
-}; // class UanMac
+};
 
 } // namespace ns3
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/uan/model/uan-mac-rc-gw.h ns-3.45/src/uan/model/uan-mac-rc-gw.h
--- ns-3.44/src/uan/model/uan-mac-rc-gw.h	2025-03-09 16:55:49.731372400 -0700
+++ ns-3.45/src/uan/model/uan-mac-rc-gw.h	2025-06-01 20:34:45.596702000 -0700
@@ -282,8 +282,7 @@
 
   protected:
     void DoDispose() override;
-
-}; // class UanMacRcGw
+};
 
 } // namespace ns3
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/uan/model/uan-mac-rc.h ns-3.45/src/uan/model/uan-mac-rc.h
--- ns-3.44/src/uan/model/uan-mac-rc.h	2025-03-09 16:55:49.731372400 -0700
+++ ns-3.45/src/uan/model/uan-mac-rc.h	2025-06-01 20:34:45.596702000 -0700
@@ -132,7 +132,8 @@
     /** Has this reservation been transmitted. */
     bool m_transmitted;
 
-}; // class Reservation
+    // end of class Reservation
+};
 
 /**
  * @ingroup uan
@@ -306,7 +307,8 @@
   protected:
     void DoDispose() override;
 
-}; // class UanMacRc
+    // end of class UanMacRc
+};
 
 } // namespace ns3
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/uan/model/uan-net-device.h ns-3.45/src/uan/model/uan-net-device.h
--- ns-3.44/src/uan/model/uan-net-device.h	2025-03-09 16:55:49.731372400 -0700
+++ ns-3.45/src/uan/model/uan-net-device.h	2025-06-01 20:34:45.597702300 -0700
@@ -198,7 +198,7 @@
   protected:
     void DoDispose() override;
     void DoInitialize() override;
-}; // class UanNetDevice
+};
 
 } // namespace ns3
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/uan/model/uan-noise-model-default.h ns-3.45/src/uan/model/uan-noise-model-default.h
--- ns-3.44/src/uan/model/uan-noise-model-default.h	2025-03-09 16:55:49.731372400 -0700
+++ ns-3.45/src/uan/model/uan-noise-model-default.h	2025-06-01 20:34:45.597702300 -0700
@@ -53,8 +53,7 @@
   private:
     double m_wind;     //!< Wind speed in m/s.
     double m_shipping; //!< Shipping contribution to noise between 0 and 1.
-
-}; // class UanNoiseModelDefault
+};
 
 } // namespace ns3
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/uan/model/uan-noise-model.h ns-3.45/src/uan/model/uan-noise-model.h
--- ns-3.44/src/uan/model/uan-noise-model.h	2025-03-09 16:55:49.731372400 -0700
+++ ns-3.45/src/uan/model/uan-noise-model.h	2025-06-01 20:34:45.597702300 -0700
@@ -40,8 +40,7 @@
     virtual void Clear();
 
     void DoDispose() override;
-
-}; // class UanNoiseModel
+};
 
 } // namespace ns3
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/uan/model/uan-phy-dual.h ns-3.45/src/uan/model/uan-phy-dual.h
--- ns-3.44/src/uan/model/uan-phy-dual.h	2025-03-09 16:55:49.731372400 -0700
+++ ns-3.45/src/uan/model/uan-phy-dual.h	2025-06-01 20:34:45.597702300 -0700
@@ -47,7 +47,8 @@
                       UanPdp pdp,
                       const UanTransducer::ArrivalList& arrivalList) const override;
 
-}; // class UanPhyCalcSinrDual
+    // end of class UanPhyCalcSinrDual
+};
 
 /**
  * @ingroup uan
@@ -257,7 +258,8 @@
   protected:
     void DoDispose() override;
 
-}; // class UanPhyDual
+    // end of class UanPhyDual
+};
 
 } // namespace ns3
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/uan/model/uan-phy-gen.h ns-3.45/src/uan/model/uan-phy-gen.h
--- ns-3.44/src/uan/model/uan-phy-gen.h	2025-03-09 16:55:49.731372400 -0700
+++ ns-3.45/src/uan/model/uan-phy-gen.h	2025-06-01 20:34:45.597702300 -0700
@@ -50,7 +50,8 @@
   private:
     double m_thresh; //!< SINR threshold.
 
-}; // class UanPhyPerGenDefault
+    // end of class UanPhyPerGenDefault
+};
 
 /**
  * @ingroup uan
@@ -102,7 +103,8 @@
      */
     double NChooseK(uint32_t n, uint32_t k);
 
-}; // class UanPhyPerUmodem
+    // end of class UanPhyPerUmodem
+};
 
 /**
  * @ingroup uan
@@ -140,7 +142,8 @@
      */
     double CalcPer(Ptr<Packet> pkt, double sinrDb, UanTxMode mode) override;
 
-}; // class UanPhyPerCommonModes
+    // end of class UanPhyPerCommonModes
+};
 
 /**
  * @ingroup uan
@@ -188,7 +191,8 @@
                       UanPdp pdp,
                       const UanTransducer::ArrivalList& arrivalList) const override;
 
-}; // class UanPhyCalcSinrDefault
+    // end of class UanPhyCalcSinrDefault
+};
 
 /**
  * @ingroup uan
@@ -234,7 +238,8 @@
   private:
     uint32_t m_hops; //!< Number of hops.
 
-}; // class UanPhyCalcSinrFhFsk
+    // class UanPhyCalcSinrFhFsk
+};
 
 /**
  * @ingroup uan
@@ -435,7 +440,8 @@
   protected:
     void DoDispose() override;
 
-}; // class UanPhyGen
+    // end of class UanPhyGen
+};
 
 } // namespace ns3
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/uan/model/uan-phy.h ns-3.45/src/uan/model/uan-phy.h
--- ns-3.44/src/uan/model/uan-phy.h	2025-03-09 16:55:49.731372400 -0700
+++ ns-3.45/src/uan/model/uan-phy.h	2025-06-01 20:34:45.597702300 -0700
@@ -85,7 +85,8 @@
   protected:
     void DoDispose() override;
 
-}; // class UanPhyCalcSinr
+    // end of class UanPhyCalcSinr
+};
 
 /**
  * @ingroup uan
@@ -120,7 +121,8 @@
   protected:
     void DoDispose() override;
 
-}; // class UanPhyPer
+    // end of class UanPhyPer
+};
 
 /**
  * @ingroup uan
@@ -156,7 +158,9 @@
     virtual void NotifyTxStart(Time duration) = 0;
     /** Function called when Phy object finishes transmitting packet */
     virtual void NotifyTxEnd() = 0;
-}; // class UanPhyListener
+
+    // end of class UanPhyListener
+};
 
 /**
  * @ingroup uan
@@ -540,7 +544,8 @@
      */
     ns3::TracedCallback<Ptr<const Packet>> m_phyRxDropTrace;
 
-}; // class UanPhy
+    // end of class UanPhy
+};
 
 } // namespace ns3
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/uan/model/uan-prop-model.h ns-3.45/src/uan/model/uan-prop-model.h
--- ns-3.44/src/uan/model/uan-prop-model.h	2025-03-09 16:55:49.735372300 -0700
+++ ns-3.45/src/uan/model/uan-prop-model.h	2025-06-01 20:34:45.598702200 -0700
@@ -57,7 +57,8 @@
     std::complex<double> m_amplitude; //!< The amplitude.
     Time m_delay;                     //!< The time delay.
 
-}; // class Tap
+    // end of class Tap
+};
 
 /**
  * @ingroup uan
@@ -240,7 +241,8 @@
     std::vector<Tap> m_taps; //!< The vector of Taps.
     Time m_resolution;       //!< The time resolution.
 
-}; // class UanPdp
+    // end of class UanPdp
+};
 
 /**
  * @ingroup uan
@@ -311,7 +313,8 @@
 
     void DoDispose() override;
 
-}; // class UanPropModel
+    // end of class UanPropModel
+};
 
 } // namespace ns3
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/uan/model/uan-prop-model-ideal.h ns-3.45/src/uan/model/uan-prop-model-ideal.h
--- ns-3.44/src/uan/model/uan-prop-model-ideal.h	2025-03-09 16:55:49.731372400 -0700
+++ ns-3.45/src/uan/model/uan-prop-model-ideal.h	2025-06-01 20:34:45.597702300 -0700
@@ -40,8 +40,7 @@
     double GetPathLossDb(Ptr<MobilityModel> a, Ptr<MobilityModel> b, UanTxMode mode) override;
     UanPdp GetPdp(Ptr<MobilityModel> a, Ptr<MobilityModel> b, UanTxMode mode) override;
     Time GetDelay(Ptr<MobilityModel> a, Ptr<MobilityModel> b, UanTxMode mode) override;
-
-}; // class UanPropModelIdeal
+};
 
 } // namespace ns3
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/uan/model/uan-prop-model-thorp.h ns-3.45/src/uan/model/uan-prop-model-thorp.h
--- ns-3.44/src/uan/model/uan-prop-model-thorp.h	2025-03-09 16:55:49.735372300 -0700
+++ ns-3.45/src/uan/model/uan-prop-model-thorp.h	2025-06-01 20:34:45.597702300 -0700
@@ -55,8 +55,7 @@
     double GetAttenDbKm(double freqKhz);
 
     double m_SpreadCoef; //!< Spreading coefficient used in calculation of Thorp's approximation.
-
-}; // class UanPropModelThorp
+};
 
 } // namespace ns3
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/uan/model/uan-transducer.h ns-3.45/src/uan/model/uan-transducer.h
--- ns-3.44/src/uan/model/uan-transducer.h	2025-03-09 16:55:49.755372500 -0700
+++ ns-3.45/src/uan/model/uan-transducer.h	2025-06-01 20:34:45.598702200 -0700
@@ -121,7 +121,8 @@
     UanPdp m_pdp;         //!< The propagation delay profile.
     Time m_arrTime;       //!< The arrival time.
 
-}; // class UanPacketArrival
+    // end of class UanPacketArrival
+};
 
 /**
  * @ingroup uan
@@ -251,7 +252,8 @@
      */
     virtual void Clear() = 0;
 
-}; // class UanTransducer
+    // end of class UanTransducer
+};
 
 } // namespace ns3
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/uan/model/uan-transducer-hd.h ns-3.45/src/uan/model/uan-transducer-hd.h
--- ns-3.44/src/uan/model/uan-transducer-hd.h	2025-03-09 16:55:49.751372600 -0700
+++ ns-3.45/src/uan/model/uan-transducer-hd.h	2025-06-01 20:34:45.598702200 -0700
@@ -75,8 +75,7 @@
 
   protected:
     void DoDispose() override;
-
-}; // class UanTransducerHd
+};
 
 } // namespace ns3
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/uan/model/uan-tx-mode.h ns-3.45/src/uan/model/uan-tx-mode.h
--- ns-3.44/src/uan/model/uan-tx-mode.h	2025-03-09 16:55:49.755372500 -0700
+++ ns-3.45/src/uan/model/uan-tx-mode.h	2025-06-01 20:34:45.598702200 -0700
@@ -95,13 +95,14 @@
     uint32_t GetUid() const;
 
   private:
+    uint32_t m_uid; //!< Mode id
+
     friend class UanTxModeFactory;
     friend std::ostream& operator<<(std::ostream& os, const UanTxMode& mode);
     friend std::istream& operator>>(std::istream& is, UanTxMode& mode);
 
-    uint32_t m_uid; //!< Mode id
-
-}; // class UanTxMode
+    // end of class UanTxMode
+};
 
 /**
  * Writes tx mode entry to stream os.
@@ -235,7 +236,8 @@
      */
     UanTxMode MakeModeFromItem(const UanTxModeItem& item);
 
-}; // class UanTxModeFactory
+    // end of class UanTxModeFactory
+};
 
 /**
  * @ingroup uan
@@ -281,7 +283,8 @@
     friend std::ostream& operator<<(std::ostream& os, const UanModesList& ml);
     friend std::istream& operator>>(std::istream& is, UanModesList& ml);
 
-}; // class UanModesList
+    // end of class UanModesList
+};
 
 /**
  * Write UanModesList to stream os
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/CMakeLists.txt ns-3.45/src/wifi/CMakeLists.txt
--- ns-3.44/src/wifi/CMakeLists.txt	2025-03-09 16:55:49.755372500 -0700
+++ ns-3.45/src/wifi/CMakeLists.txt	2025-06-01 20:34:45.600702000 -0700
@@ -44,6 +44,7 @@
     model/eht/tid-to-link-mapping-element.cc
     model/eht/eht-phy.cc
     model/eht/eht-ppdu.cc
+    model/eht/eht-ru.cc
     model/eht/emlsr-manager.cc
     model/eht/multi-link-element.cc
     model/error-rate-model.cc
@@ -136,6 +137,7 @@
     model/wifi-acknowledgment.cc
     model/wifi-assoc-manager.cc
     model/wifi-bandwidth-filter.cc
+    model/wifi-constants.cc
     model/wifi-default-ack-manager.cc
     model/wifi-default-assoc-manager.cc
     model/wifi-default-gcr-manager.cc
@@ -162,6 +164,7 @@
     model/wifi-radio-energy-model.cc
     model/wifi-remote-station-info.cc
     model/wifi-remote-station-manager.cc
+    model/wifi-ru.cc
     model/wifi-spectrum-phy-interface.cc
     model/wifi-spectrum-signal-parameters.cc
     model/wifi-standards.cc
@@ -214,6 +217,7 @@
     model/eht/tid-to-link-mapping-element.h
     model/eht/eht-phy.h
     model/eht/eht-ppdu.h
+    model/eht/eht-ru.h
     model/eht/emlsr-manager.h
     model/eht/multi-link-element.h
     model/error-rate-model.h
@@ -306,6 +310,7 @@
     model/wifi-acknowledgment.h
     model/wifi-assoc-manager.h
     model/wifi-bandwidth-filter.h
+    model/wifi-constants.h
     model/wifi-default-ack-manager.h
     model/wifi-default-assoc-manager.h
     model/wifi-default-gcr-manager.h
@@ -338,6 +343,7 @@
     model/wifi-radio-energy-model.h
     model/wifi-remote-station-info.h
     model/wifi-remote-station-manager.h
+    model/wifi-ru.h
     model/wifi-spectrum-phy-interface.h
     model/wifi-spectrum-signal-parameters.h
     model/wifi-standards.h
@@ -372,10 +378,14 @@
     test/spectrum-wifi-phy-test.cc
     test/tx-duration-test.cc
     test/wifi-aggregation-test.cc
+    test/wifi-channel-settings-test.cc
     test/wifi-co-trace-helper-test.cc
     test/wifi-dynamic-bw-op-test.cc
     test/wifi-eht-info-elems-test.cc
-    test/wifi-emlsr-test.cc
+    test/wifi-emlsr-basic-exchanges-test.cc
+    test/wifi-emlsr-enabling-test.cc
+    test/wifi-emlsr-link-switch-test.cc
+    test/wifi-emlsr-test-base.cc
     test/wifi-error-rate-models-test.cc
     test/wifi-fils-frame-test.cc
     test/wifi-gcr-test.cc
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/doc/source/figures/emlsr-txop-ended-trace.eps ns-3.45/src/wifi/doc/source/figures/emlsr-txop-ended-trace.eps
--- ns-3.44/src/wifi/doc/source/figures/emlsr-txop-ended-trace.eps	2025-03-09 16:55:49.763372400 -0700
+++ ns-3.45/src/wifi/doc/source/figures/emlsr-txop-ended-trace.eps	2025-06-01 20:34:45.603702000 -0700
@@ -240,64 +240,6 @@
 3103 -35 3112 -37 3125 -39 ct 3125 -3 l  p ef
 pom
 gs
-1 lj 19548 5971 m  20263 5971 l  ps
-gr
-gs
-19261 5971 m  19561 6071 l  19561 5871 l  19261 5971 l  p ef
-gr
-gs
-20550 5971 m  20250 5871 l  20250 6071 l  20550 5971 l  p ef
-gr
-gs
-0 lw 1 lj 19261 6671 m  19261 5771 l  ps
-gr
-gs
-0 lw 1 lj 20550 6671 m  20550 5771 l  ps
-gr
-pum
-19385 5796 t
-39 0 m  39 -229 l  39 -250 39 -273 37 -298 ct 84 -298 l  86 -265 86 -244 86 -238 ct 
-88 -238 l  95 -263 105 -281 115 -290 ct 125 -299 140 -304 158 -304 ct 165 -304 172 -303 178 -301 ct 
-178 -256 l  172 -258 163 -258 152 -258 ct 131 -258 116 -250 105 -232 ct 94 -214 89 -189 89 -156 ct 
-89 0 l  39 0 l  p ef
-263 -138 m  263 -104 270 -78 284 -59 ct 298 -41 319 -31 346 -31 ct 368 -31 385 -36 398 -44 ct 
-411 -53 420 -64 424 -77 ct 468 -65 l  450 -18 409 6 346 6 ct 302 6 269 -7 246 -33 ct 
-222 -60 211 -99 211 -151 ct 211 -200 222 -238 246 -264 ct 269 -291 301 -304 344 -304 ct 
-432 -304 476 -251 476 -145 ct 476 -138 l  263 -138 l  p
-424 -176 m  422 -208 414 -231 400 -245 ct 387 -260 368 -267 343 -267 ct 319 -267 300 -259 286 -243 ct 
-272 -227 265 -204 264 -176 ct 424 -176 l  p ef
-713 0 m  713 -189 l  713 -218 709 -238 701 -249 ct 693 -260 679 -266 658 -266 ct 
-637 -266 620 -258 608 -241 ct 596 -225 589 -202 589 -173 ct 589 0 l  540 0 l 
-540 -235 l  540 -270 540 -291 538 -298 ct 585 -298 l  585 -298 586 -295 586 -291 ct 
-586 -287 586 -282 587 -277 ct 587 -272 587 -262 587 -247 ct 588 -247 l  599 -269 611 -283 625 -292 ct 
-639 -300 656 -304 675 -304 ct 698 -304 716 -300 729 -290 ct 742 -281 751 -267 756 -247 ct 
-757 -247 l  767 -268 780 -282 794 -291 ct 809 -300 827 -304 847 -304 ct 878 -304 899 -296 913 -279 ct 
-927 -263 934 -236 934 -199 ct 934 0 l  885 0 l  885 -189 l  885 -218 881 -238 873 -249 ct 
-865 -260 851 -266 830 -266 ct 808 -266 792 -258 780 -242 ct 768 -225 762 -203 762 -173 ct 
-762 0 l  713 0 l  p ef
-1168 -346 m  1168 -1 l  1116 -1 l  1116 -346 l  983 -346 l  983 -389 l 
-1302 -389 l  1302 -346 l  1168 -346 l  p ef
-1352 -362 m  1352 -409 l  1401 -409 l  1401 -362 l  1352 -362 l  p
-1352 0 m  1352 -298 l  1401 -298 l  1401 0 l  1352 0 l  p ef
-1651 0 m  1651 -189 l  1651 -218 1647 -238 1639 -249 ct 1631 -260 1617 -266 1596 -266 ct 
-1575 -266 1558 -258 1546 -241 ct 1534 -225 1527 -202 1527 -173 ct 1527 0 l  1478 0 l 
-1478 -235 l  1478 -270 1478 -291 1476 -298 ct 1523 -298 l  1523 -298 1524 -295 1524 -291 ct 
-1524 -287 1524 -282 1525 -277 ct 1525 -272 1525 -262 1525 -247 ct 1526 -247 l 
-1537 -269 1549 -283 1563 -292 ct 1577 -300 1594 -304 1613 -304 ct 1636 -304 1654 -300 1667 -290 ct 
-1680 -281 1689 -267 1694 -247 ct 1695 -247 l  1705 -268 1718 -282 1732 -291 ct 
-1747 -300 1765 -304 1785 -304 ct 1816 -304 1837 -296 1851 -279 ct 1865 -263 1872 -236 1872 -199 ct 
-1872 0 l  1823 0 l  1823 -189 l  1823 -218 1819 -238 1811 -249 ct 1803 -260 1789 -266 1768 -266 ct 
-1746 -266 1730 -258 1718 -242 ct 1706 -225 1700 -203 1700 -173 ct 1700 0 l  1651 0 l 
-p ef
-1984 -138 m  1984 -104 1991 -78 2005 -59 ct 2019 -41 2040 -31 2067 -31 ct 2089 -31 2106 -36 2119 -44 ct 
-2132 -53 2141 -64 2145 -77 ct 2189 -65 l  2171 -18 2130 6 2067 6 ct 2023 6 1990 -7 1967 -33 ct 
-1943 -60 1932 -99 1932 -151 ct 1932 -200 1943 -238 1967 -264 ct 1990 -291 2022 -304 2065 -304 ct 
-2153 -304 2197 -251 2197 -145 ct 2197 -138 l  1984 -138 l  p
-2145 -176 m  2143 -208 2135 -231 2121 -245 ct 2108 -260 2089 -267 2064 -267 ct 
-2040 -267 2021 -259 2007 -243 ct 1993 -227 1986 -204 1985 -176 ct 2145 -176 l 
-p ef
-pom
-gs
 1 lj 17084 2943 m  20320 2943 l  ps
 gr
 gs
@@ -500,7 +442,7 @@
 3787 -240 3786 -234 3786 -232 ct 3787 -232 l  p ef
 pom
 pum
-19465 8055 t
+19539 8055 t
 143 -2 m  128 2 112 4 96 4 ct 59 4 40 -17 40 -59 ct 40 -246 l  8 -246 l  8 -280 l 
 42 -280 l  56 -343 l  87 -343 l  87 -280 l  138 -280 l  138 -246 l  87 -246 l 
 87 -69 l  87 -56 89 -47 93 -41 ct 98 -36 105 -33 116 -33 ct 122 -33 131 -34 143 -37 ct 
@@ -531,55 +473,46 @@
 1282 -166 m  1279 -195 1272 -217 1259 -230 ct 1247 -244 1229 -251 1206 -251 ct 
 1183 -251 1165 -243 1152 -228 ct 1139 -213 1132 -192 1131 -166 ct 1282 -166 l 
 p ef
-1446 -247 m  1446 -1 l  1400 -1 l  1400 -247 l  1360 -247 l  1360 -281 l 
-1400 -281 l  1400 -312 l  1400 -338 1405 -356 1417 -367 ct 1428 -378 1445 -384 1468 -384 ct 
-1481 -384 1492 -383 1501 -381 ct 1501 -345 l  1493 -347 1486 -348 1480 -348 ct 
-1468 -348 1460 -345 1454 -339 ct 1449 -333 1446 -322 1446 -306 ct 1446 -281 l 
-1501 -281 l  1501 -247 l  1446 -247 l  p ef
-1571 -130 m  1571 -98 1578 -73 1591 -56 ct 1604 -39 1624 -30 1649 -30 ct 1669 -30 1686 -34 1698 -42 ct 
-1710 -50 1718 -60 1722 -73 ct 1763 -61 l  1747 -17 1709 5 1649 5 ct 1608 5 1577 -7 1555 -32 ct 
-1533 -57 1522 -93 1522 -142 ct 1522 -188 1533 -223 1555 -248 ct 1577 -273 1607 -285 1647 -285 ct 
-1730 -285 1771 -236 1771 -137 ct 1771 -130 l  1571 -130 l  p
-1723 -166 m  1720 -195 1713 -217 1700 -230 ct 1688 -244 1670 -251 1647 -251 ct 
-1624 -251 1606 -243 1593 -228 ct 1580 -213 1573 -192 1572 -166 ct 1723 -166 l 
-p ef
-1831 0 m  1831 -215 l  1831 -234 1830 -256 1829 -280 ct 1873 -280 l  1874 -248 1875 -229 1875 -223 ct 
-1876 -223 l  1884 -247 1892 -263 1902 -272 ct 1911 -281 1925 -285 1943 -285 ct 
-1949 -285 1955 -284 1961 -282 ct 1961 -240 l  1955 -241 1947 -242 1937 -242 ct 
-1917 -242 1903 -234 1892 -217 ct 1882 -201 1877 -177 1877 -146 ct 1877 0 l  1831 0 l 
-p ef
-2008 0 m  2008 -215 l  2008 -234 2007 -256 2006 -280 ct 2050 -280 l  2051 -248 2052 -229 2052 -223 ct 
-2053 -223 l  2061 -247 2069 -263 2079 -272 ct 2088 -281 2102 -285 2120 -285 ct 
-2126 -285 2132 -284 2138 -282 ct 2138 -240 l  2132 -241 2124 -242 2114 -242 ct 
-2094 -242 2080 -234 2069 -217 ct 2059 -201 2054 -177 2054 -146 ct 2054 0 l  2008 0 l 
-p ef
-2218 -130 m  2218 -98 2225 -73 2238 -56 ct 2251 -39 2271 -30 2296 -30 ct 2316 -30 2333 -34 2345 -42 ct 
-2357 -50 2365 -60 2369 -73 ct 2410 -61 l  2394 -17 2356 5 2296 5 ct 2255 5 2224 -7 2202 -32 ct 
-2180 -57 2169 -93 2169 -142 ct 2169 -188 2180 -223 2202 -248 ct 2224 -273 2254 -285 2294 -285 ct 
-2377 -285 2418 -236 2418 -137 ct 2418 -130 l  2218 -130 l  p
-2370 -166 m  2367 -195 2360 -217 2347 -230 ct 2335 -244 2317 -251 2294 -251 ct 
-2271 -251 2253 -243 2240 -228 ct 2227 -213 2220 -192 2219 -166 ct 2370 -166 l 
+1511 0 m  1456 0 l  1355 -280 l  1404 -280 l  1466 -98 l  1468 -91 1474 -70 1484 -36 ct 
+1493 -67 l  1503 -97 l  1566 -280 l  1616 -280 l  1511 0 l  p ef
+1653 -340 m  1653 -384 l  1700 -384 l  1700 -340 l  1653 -340 l  p
+1653 0 m  1653 -280 l  1700 -280 l  1700 0 l  1653 0 l  p ef
+2007 -140 m  2007 -91 1996 -55 1975 -31 ct 1953 -7 1922 5 1881 5 ct 1840 5 1809 -7 1788 -32 ct 
+1768 -57 1757 -93 1757 -140 ct 1757 -237 1799 -285 1882 -285 ct 1925 -285 1957 -273 1977 -250 ct 
+1997 -226 2007 -190 2007 -140 ct p
+1958 -140 m  1958 -179 1952 -207 1941 -224 ct 1930 -242 1910 -251 1883 -251 ct 
+1856 -251 1836 -242 1824 -224 ct 1812 -206 1806 -178 1806 -140 ct 1806 -103 1812 -76 1824 -57 ct 
+1836 -39 1855 -29 1880 -29 ct 1908 -29 1928 -38 1940 -56 ct 1952 -74 1958 -102 1958 -140 ct 
+p ef
+2111 -280 m  2111 -103 l  2111 -84 2113 -70 2117 -60 ct 2120 -49 2126 -42 2134 -38 ct 
+2142 -33 2153 -31 2169 -31 ct 2191 -31 2209 -39 2222 -54 ct 2235 -69 2241 -91 2241 -118 ct 
+2241 -280 l  2288 -280 l  2288 -60 l  2288 -27 2288 -7 2289 0 ct 2245 0 l 
+2245 -1 2245 -3 2245 -7 ct 2244 -11 2244 -15 2244 -20 ct 2244 -25 2243 -34 2243 -48 ct 
+2242 -48 l  2232 -29 2219 -15 2205 -7 ct 2191 1 2174 5 2153 5 ct 2122 5 2100 -3 2086 -18 ct 
+2071 -33 2064 -58 2064 -94 ct 2064 -280 l  2111 -280 l  p ef
+2569 -77 m  2569 -51 2559 -31 2540 -16 ct 2520 -2 2492 5 2456 5 ct 2421 5 2394 -1 2376 -12 ct 
+2357 -24 2344 -42 2339 -66 ct 2380 -74 l  2384 -59 2392 -48 2404 -41 ct 2417 -34 2434 -30 2456 -30 ct 
+2480 -30 2497 -34 2508 -41 ct 2519 -49 2524 -59 2524 -74 ct 2524 -85 2520 -94 2513 -101 ct 
+2505 -108 2493 -113 2476 -118 ct 2443 -127 l  2416 -133 2397 -140 2386 -147 ct 
+2375 -153 2366 -162 2359 -171 ct 2353 -180 2350 -192 2350 -206 ct 2350 -231 2359 -251 2377 -264 ct 
+2395 -278 2422 -284 2457 -284 ct 2487 -284 2512 -279 2530 -268 ct 2548 -257 2560 -240 2564 -216 ct 
+2523 -211 l  2520 -223 2513 -232 2502 -239 ct 2491 -246 2475 -249 2457 -249 ct 
+2436 -249 2420 -246 2410 -239 ct 2400 -233 2395 -223 2395 -210 ct 2395 -203 2397 -196 2401 -191 ct 
+2405 -186 2411 -181 2420 -178 ct 2428 -174 2445 -169 2471 -163 ct 2495 -156 2513 -151 2524 -146 ct 
+2535 -140 2543 -134 2550 -128 ct 2556 -122 2561 -114 2564 -106 ct 2568 -98 2569 -88 2569 -77 ct 
+p ef
+2771 0 m  2771 -384 l  2817 -384 l  2817 0 l  2771 0 l  p ef
+2888 -340 m  2888 -384 l  2935 -384 l  2935 -340 l  2888 -340 l  p
+2888 0 m  2888 -280 l  2935 -280 l  2935 0 l  2888 0 l  p ef
+3184 0 m  3184 -177 l  3184 -196 3182 -210 3179 -220 ct 3175 -231 3169 -238 3161 -242 ct 
+3153 -247 3142 -249 3127 -249 ct 3104 -249 3086 -241 3074 -226 ct 3061 -211 3054 -189 3054 -162 ct 
+3054 0 l  3008 0 l  3008 -220 l  3008 -253 3007 -273 3006 -280 ct 3050 -280 l 
+3050 -279 3050 -277 3051 -273 ct 3051 -269 3051 -265 3051 -260 ct 3051 -255 3052 -246 3052 -232 ct 
+3053 -232 l  3064 -251 3076 -265 3090 -273 ct 3104 -281 3121 -285 3142 -285 ct 
+3173 -285 3195 -277 3210 -262 ct 3224 -247 3231 -222 3231 -186 ct 3231 0 l  3184 0 l 
 p ef
-2653 -45 m  2644 -27 2633 -14 2619 -7 ct 2605 1 2587 5 2566 5 ct 2531 5 2505 -7 2488 -31 ct 
-2472 -55 2463 -91 2463 -139 ct 2463 -237 2497 -285 2566 -285 ct 2587 -285 2605 -282 2619 -274 ct 
-2633 -266 2644 -254 2653 -237 ct 2654 -237 l  2653 -268 l  2653 -384 l  2700 -384 l 
-2700 -58 l  2700 -29 2700 -10 2701 0 ct 2657 0 l  2656 -3 2656 -9 2655 -19 ct 
-2654 -29 2654 -38 2654 -45 ct 2653 -45 l  p
-2512 -140 m  2512 -101 2517 -73 2528 -56 ct 2538 -39 2555 -31 2578 -31 ct 2604 -31 2623 -40 2635 -58 ct 
-2647 -77 2653 -105 2653 -144 ct 2653 -181 2647 -208 2635 -225 ct 2623 -242 2604 -251 2578 -251 ct 
-2555 -251 2538 -242 2528 -225 ct 2517 -208 2512 -179 2512 -140 ct p ef
-2919 0 m  2919 -384 l  2965 -384 l  2965 0 l  2919 0 l  p ef
-3035 -340 m  3035 -384 l  3082 -384 l  3082 -340 l  3035 -340 l  p
-3035 0 m  3035 -280 l  3082 -280 l  3082 0 l  3035 0 l  p ef
-3331 0 m  3331 -177 l  3331 -196 3329 -210 3326 -220 ct 3322 -231 3316 -238 3308 -242 ct 
-3300 -247 3289 -249 3274 -249 ct 3251 -249 3233 -241 3221 -226 ct 3208 -211 3201 -189 3201 -162 ct 
-3201 0 l  3155 0 l  3155 -220 l  3155 -253 3154 -273 3153 -280 ct 3197 -280 l 
-3197 -279 3197 -277 3198 -273 ct 3198 -269 3198 -265 3198 -260 ct 3198 -255 3199 -246 3199 -232 ct 
-3200 -232 l  3211 -251 3223 -265 3237 -273 ct 3251 -281 3268 -285 3289 -285 ct 
-3320 -285 3342 -277 3357 -262 ct 3371 -247 3378 -222 3378 -186 ct 3378 0 l  3331 0 l 
-p ef
-3623 0 m  3528 -128 l  3494 -100 l  3494 0 l  3448 0 l  3448 -384 l  3494 -384 l 
-3494 -144 l  3617 -280 l  3671 -280 l  3558 -160 l  3677 0 l  3623 0 l 
+3476 0 m  3381 -128 l  3347 -100 l  3347 0 l  3301 0 l  3301 -384 l  3347 -384 l 
+3347 -144 l  3470 -280 l  3524 -280 l  3411 -160 l  3530 0 l  3476 0 l 
 p ef
 pom
 gs
@@ -746,46 +679,97 @@
 gr
 pum
 6885 5796 t
-39 0 m  39 -229 l  39 -250 39 -273 37 -298 ct 84 -298 l  86 -265 86 -244 86 -238 ct 
-88 -238 l  95 -263 105 -281 115 -290 ct 125 -299 140 -304 158 -304 ct 165 -304 172 -303 178 -301 ct 
-178 -256 l  172 -258 163 -258 152 -258 ct 131 -258 116 -250 105 -232 ct 94 -214 89 -189 89 -156 ct 
-89 0 l  39 0 l  p ef
-263 -138 m  263 -104 270 -78 284 -59 ct 298 -41 319 -31 346 -31 ct 368 -31 385 -36 398 -44 ct 
-411 -53 420 -64 424 -77 ct 468 -65 l  450 -18 409 6 346 6 ct 302 6 269 -7 246 -33 ct 
-222 -60 211 -99 211 -151 ct 211 -200 222 -238 246 -264 ct 269 -291 301 -304 344 -304 ct 
-432 -304 476 -251 476 -145 ct 476 -138 l  263 -138 l  p
-424 -176 m  422 -208 414 -231 400 -245 ct 387 -260 368 -267 343 -267 ct 319 -267 300 -259 286 -243 ct 
-272 -227 265 -204 264 -176 ct 424 -176 l  p ef
-713 0 m  713 -189 l  713 -218 709 -238 701 -249 ct 693 -260 679 -266 658 -266 ct 
-637 -266 620 -258 608 -241 ct 596 -225 589 -202 589 -173 ct 589 0 l  540 0 l 
-540 -235 l  540 -270 540 -291 538 -298 ct 585 -298 l  585 -298 586 -295 586 -291 ct 
-586 -287 586 -282 587 -277 ct 587 -272 587 -262 587 -247 ct 588 -247 l  599 -269 611 -283 625 -292 ct 
-639 -300 656 -304 675 -304 ct 698 -304 716 -300 729 -290 ct 742 -281 751 -267 756 -247 ct 
-757 -247 l  767 -268 780 -282 794 -291 ct 809 -300 827 -304 847 -304 ct 878 -304 899 -296 913 -279 ct 
-927 -263 934 -236 934 -199 ct 934 0 l  885 0 l  885 -189 l  885 -218 881 -238 873 -249 ct 
-865 -260 851 -266 830 -266 ct 808 -266 792 -258 780 -242 ct 768 -225 762 -203 762 -173 ct 
-762 0 l  713 0 l  p ef
-1168 -346 m  1168 -1 l  1116 -1 l  1116 -346 l  983 -346 l  983 -389 l 
-1302 -389 l  1302 -346 l  1168 -346 l  p ef
-1352 -362 m  1352 -409 l  1401 -409 l  1401 -362 l  1352 -362 l  p
-1352 0 m  1352 -298 l  1401 -298 l  1401 0 l  1352 0 l  p ef
-1651 0 m  1651 -189 l  1651 -218 1647 -238 1639 -249 ct 1631 -260 1617 -266 1596 -266 ct 
-1575 -266 1558 -258 1546 -241 ct 1534 -225 1527 -202 1527 -173 ct 1527 0 l  1478 0 l 
-1478 -235 l  1478 -270 1478 -291 1476 -298 ct 1523 -298 l  1523 -298 1524 -295 1524 -291 ct 
-1524 -287 1524 -282 1525 -277 ct 1525 -272 1525 -262 1525 -247 ct 1526 -247 l 
-1537 -269 1549 -283 1563 -292 ct 1577 -300 1594 -304 1613 -304 ct 1636 -304 1654 -300 1667 -290 ct 
-1680 -281 1689 -267 1694 -247 ct 1695 -247 l  1705 -268 1718 -282 1732 -291 ct 
-1747 -300 1765 -304 1785 -304 ct 1816 -304 1837 -296 1851 -279 ct 1865 -263 1872 -236 1872 -199 ct 
-1872 0 l  1823 0 l  1823 -189 l  1823 -218 1819 -238 1811 -249 ct 1803 -260 1789 -266 1768 -266 ct 
-1746 -266 1730 -258 1718 -242 ct 1706 -225 1700 -203 1700 -173 ct 1700 0 l  1651 0 l 
-p ef
-1984 -138 m  1984 -104 1991 -78 2005 -59 ct 2019 -41 2040 -31 2067 -31 ct 2089 -31 2106 -36 2119 -44 ct 
-2132 -53 2141 -64 2145 -77 ct 2189 -65 l  2171 -18 2130 6 2067 6 ct 2023 6 1990 -7 1967 -33 ct 
-1943 -60 1932 -99 1932 -151 ct 1932 -200 1943 -238 1967 -264 ct 1990 -291 2022 -304 2065 -304 ct 
-2153 -304 2197 -251 2197 -145 ct 2197 -138 l  1984 -138 l  p
-2145 -176 m  2143 -208 2135 -231 2121 -245 ct 2108 -260 2089 -267 2064 -267 ct 
-2040 -267 2021 -259 2007 -243 ct 1993 -227 1986 -204 1985 -176 ct 2145 -176 l 
-p ef
+262 -82 m  262 -54 251 -32 230 -17 ct 209 -2 179 6 141 6 ct 104 6 75 0 55 -12 ct 
+35 -25 22 -44 16 -70 ct 59 -78 l  64 -62 72 -50 86 -43 ct 99 -36 117 -32 141 -32 ct 
+166 -32 184 -36 196 -43 ct 208 -51 213 -63 213 -78 ct 213 -90 209 -99 201 -107 ct 
+193 -114 180 -120 162 -125 ct 127 -134 l  98 -142 78 -149 66 -156 ct 54 -163 45 -172 38 -182 ct 
+31 -192 28 -204 28 -219 ct 28 -246 37 -267 57 -281 ct 76 -295 104 -303 141 -303 ct 
+174 -303 200 -297 220 -285 ct 239 -274 251 -255 256 -229 ct 212 -224 l  209 -237 202 -247 190 -254 ct 
+178 -261 161 -265 141 -265 ct 119 -265 102 -262 92 -255 ct 81 -248 76 -238 76 -224 ct 
+76 -215 78 -208 82 -203 ct 87 -197 93 -193 102 -189 ct 111 -185 129 -180 156 -173 ct 
+183 -166 202 -160 213 -155 ct 225 -149 234 -143 241 -136 ct 247 -129 252 -121 256 -112 ct 
+260 -103 262 -93 262 -82 ct p ef
+320 -362 m  320 -409 l  369 -409 l  369 -362 l  320 -362 l  p
+320 0 m  320 -298 l  369 -298 l  369 0 l  320 0 l  p ef
+634 0 m  634 -189 l  634 -209 632 -224 628 -235 ct 625 -246 618 -254 610 -258 ct 
+602 -263 589 -266 573 -266 ct 549 -266 530 -257 516 -241 ct 503 -225 496 -202 496 -173 ct 
+496 0 l  446 0 l  446 -235 l  446 -270 446 -291 444 -298 ct 491 -298 l  491 -298 492 -295 492 -291 ct 
+492 -287 492 -282 493 -277 ct 493 -272 493 -262 493 -247 ct 494 -247 l  506 -268 519 -283 534 -291 ct 
+549 -300 567 -304 590 -304 ct 622 -304 646 -296 661 -280 ct 676 -263 684 -236 684 -199 ct 
+684 0 l  634 0 l  p ef
+796 -150 m  796 -111 802 -81 814 -62 ct 827 -43 846 -33 871 -33 ct 889 -33 903 -38 915 -48 ct 
+927 -57 934 -72 937 -92 ct 987 -88 l  983 -60 971 -37 951 -20 ct 930 -3 904 6 872 6 ct 
+831 6 799 -7 777 -34 ct 755 -60 744 -99 744 -149 ct 744 -200 755 -238 777 -264 ct 
+799 -291 831 -304 872 -304 ct 902 -304 928 -296 948 -280 ct 968 -264 980 -243 985 -215 ct 
+935 -211 l  932 -227 925 -241 915 -250 ct 905 -260 890 -265 870 -265 ct 844 -265 825 -256 813 -239 ct 
+802 -221 796 -192 796 -150 ct p ef
+1077 -138 m  1077 -104 1084 -78 1098 -59 ct 1112 -41 1133 -31 1160 -31 ct 1182 -31 1199 -36 1212 -44 ct 
+1225 -53 1234 -64 1238 -77 ct 1282 -65 l  1264 -18 1223 6 1160 6 ct 1116 6 1083 -7 1060 -33 ct 
+1036 -60 1025 -99 1025 -151 ct 1025 -200 1036 -238 1060 -264 ct 1083 -291 1115 -304 1158 -304 ct 
+1246 -304 1290 -251 1290 -145 ct 1290 -138 l  1077 -138 l  p
+1238 -176 m  1236 -208 1228 -231 1214 -245 ct 1201 -260 1182 -267 1157 -267 ct 
+1133 -267 1114 -259 1100 -243 ct 1086 -227 1079 -204 1078 -176 ct 1238 -176 l 
+p ef
+1532 -351 m  1489 -351 1456 -337 1432 -309 ct 1408 -282 1396 -244 1396 -196 ct 
+1396 -148 1409 -110 1433 -81 ct 1458 -52 1492 -37 1534 -37 ct 1589 -37 1630 -64 1657 -118 ct 
+1700 -97 l  1684 -63 1661 -38 1632 -20 ct 1604 -3 1570 6 1532 6 ct 1493 6 1459 -2 1430 -18 ct 
+1402 -35 1380 -58 1365 -88 ct 1350 -118 1343 -154 1343 -196 ct 1343 -258 1359 -306 1393 -341 ct 
+1426 -376 1472 -394 1532 -394 ct 1573 -394 1607 -386 1635 -370 ct 1663 -354 1683 -330 1696 -298 ct 
+1646 -281 l  1637 -304 1623 -321 1603 -333 ct 1583 -345 1559 -351 1532 -351 ct 
+p ef
+1874 -3 m  1857 2 1841 4 1823 4 ct 1784 4 1764 -19 1764 -64 ct 1764 -263 l  1730 -263 l 
+1730 -299 l  1766 -299 l  1780 -366 l  1814 -366 l  1814 -299 l  1869 -299 l 
+1869 -263 l  1814 -263 l  1814 -74 l  1814 -60 1816 -50 1821 -44 ct 1825 -38 1833 -35 1845 -35 ct 
+1852 -35 1861 -37 1874 -39 ct 1874 -3 l  p ef
+2139 -82 m  2139 -54 2128 -32 2107 -17 ct 2086 -2 2056 6 2018 6 ct 1981 6 1952 0 1932 -12 ct 
+1912 -25 1899 -44 1893 -70 ct 1936 -78 l  1941 -62 1949 -50 1963 -43 ct 1976 -36 1994 -32 2018 -32 ct 
+2043 -32 2061 -36 2073 -43 ct 2085 -51 2090 -63 2090 -78 ct 2090 -90 2086 -99 2078 -107 ct 
+2070 -114 2057 -120 2039 -125 ct 2004 -134 l  1975 -142 1955 -149 1943 -156 ct 
+1931 -163 1922 -172 1915 -182 ct 1908 -192 1905 -204 1905 -219 ct 1905 -246 1914 -267 1934 -281 ct 
+1953 -295 1981 -303 2018 -303 ct 2051 -303 2077 -297 2097 -285 ct 2116 -274 2128 -255 2133 -229 ct 
+2089 -224 l  2086 -237 2079 -247 2067 -254 ct 2055 -261 2038 -265 2018 -265 ct 
+1996 -265 1979 -262 1969 -255 ct 1958 -248 1953 -238 1953 -224 ct 1953 -215 1955 -208 1959 -203 ct 
+1964 -197 1970 -193 1979 -189 ct 1988 -185 2006 -180 2033 -173 ct 2060 -166 2079 -160 2090 -155 ct 
+2102 -149 2111 -143 2118 -136 ct 2124 -129 2129 -121 2133 -112 ct 2137 -103 2139 -93 2139 -82 ct 
+p ef
+2357 -346 m  2357 -1 l  2305 -1 l  2305 -346 l  2172 -346 l  2172 -389 l 
+2491 -389 l  2491 -346 l  2357 -346 l  p ef
+2541 -362 m  2541 -409 l  2590 -409 l  2590 -362 l  2541 -362 l  p
+2541 0 m  2541 -298 l  2590 -298 l  2590 0 l  2541 0 l  p ef
+2840 0 m  2840 -189 l  2840 -218 2836 -238 2828 -249 ct 2820 -260 2806 -266 2785 -266 ct 
+2764 -266 2747 -258 2735 -241 ct 2723 -225 2716 -202 2716 -173 ct 2716 0 l  2667 0 l 
+2667 -235 l  2667 -270 2667 -291 2665 -298 ct 2712 -298 l  2712 -298 2713 -295 2713 -291 ct 
+2713 -287 2713 -282 2714 -277 ct 2714 -272 2714 -262 2714 -247 ct 2715 -247 l 
+2726 -269 2738 -283 2752 -292 ct 2766 -300 2783 -304 2802 -304 ct 2825 -304 2843 -300 2856 -290 ct 
+2869 -281 2878 -267 2883 -247 ct 2884 -247 l  2894 -268 2907 -282 2921 -291 ct 
+2936 -300 2954 -304 2974 -304 ct 3005 -304 3026 -296 3040 -279 ct 3054 -263 3061 -236 3061 -199 ct 
+3061 0 l  3012 0 l  3012 -189 l  3012 -218 3008 -238 3000 -249 ct 2992 -260 2978 -266 2957 -266 ct 
+2935 -266 2919 -258 2907 -242 ct 2895 -225 2889 -203 2889 -173 ct 2889 0 l  2840 0 l 
+p ef
+3173 -138 m  3173 -104 3180 -78 3194 -59 ct 3208 -41 3229 -31 3256 -31 ct 3278 -31 3295 -36 3308 -44 ct 
+3321 -53 3330 -64 3334 -77 ct 3378 -65 l  3360 -18 3319 6 3256 6 ct 3212 6 3179 -7 3156 -33 ct 
+3132 -60 3121 -99 3121 -151 ct 3121 -200 3132 -238 3156 -264 ct 3179 -291 3211 -304 3254 -304 ct 
+3342 -304 3386 -251 3386 -145 ct 3386 -138 l  3173 -138 l  p
+3334 -176 m  3332 -208 3324 -231 3310 -245 ct 3297 -260 3278 -267 3253 -267 ct 
+3229 -267 3210 -259 3196 -243 ct 3182 -227 3175 -204 3174 -176 ct 3334 -176 l 
+p ef
+3700 -149 m  3700 -97 3689 -58 3666 -32 ct 3643 -7 3609 6 3566 6 ct 3522 6 3489 -7 3467 -34 ct 
+3445 -60 3434 -99 3434 -149 ct 3434 -252 3478 -304 3567 -304 ct 3613 -304 3646 -291 3668 -266 ct 
+3689 -241 3700 -202 3700 -149 ct p
+3648 -149 m  3648 -190 3642 -220 3630 -239 ct 3617 -258 3597 -267 3568 -267 ct 
+3539 -267 3518 -257 3505 -238 ct 3492 -219 3486 -190 3486 -149 ct 3486 -110 3492 -80 3505 -60 ct 
+3518 -41 3538 -31 3565 -31 ct 3595 -31 3616 -40 3629 -59 ct 3642 -79 3648 -108 3648 -149 ct 
+p ef
+3809 -298 m  3809 -109 l  3809 -89 3811 -74 3815 -63 ct 3819 -52 3825 -44 3834 -40 ct 
+3842 -35 3855 -32 3871 -32 ct 3895 -32 3914 -41 3927 -57 ct 3941 -73 3948 -96 3948 -125 ct 
+3948 -298 l  3998 -298 l  3998 -63 l  3998 -28 3998 -7 3999 0 ct 3952 0 l 
+3952 0 3952 -3 3952 -7 ct 3952 -11 3951 -16 3951 -21 ct 3951 -26 3951 -36 3950 -51 ct 
+3949 -51 l  3938 -30 3925 -15 3910 -7 ct 3895 2 3876 6 3854 6 ct 3821 6 3797 -2 3782 -18 ct 
+3767 -35 3760 -62 3760 -99 ct 3760 -298 l  3809 -298 l  p ef
+4189 -3 m  4172 2 4156 4 4138 4 ct 4099 4 4079 -19 4079 -64 ct 4079 -263 l  4045 -263 l 
+4045 -299 l  4081 -299 l  4095 -366 l  4129 -366 l  4129 -299 l  4184 -299 l 
+4184 -263 l  4129 -263 l  4129 -74 l  4129 -60 4131 -50 4136 -44 ct 4140 -38 4148 -35 4160 -35 ct 
+4167 -35 4176 -37 4189 -39 ct 4189 -3 l  p ef
 pom
 gs
 1 lj 4584 2943 m  7820 2943 l  ps
@@ -1491,70 +1475,70 @@
 19250 2754 m  19250 3516 l  ps
 gr
 pum
-19285 3433 t
-0.750 0.003 0.257 c 33 -316 m  33 -357 l  76 -357 l  76 -316 l  33 -316 l 
+19285 3437 t
+0.750 0.003 0.257 c 33 -316 m  33 -358 l  76 -358 l  76 -316 l  33 -316 l 
 p
-33 0 m  33 -260 l  76 -260 l  76 0 l  33 0 l  p ef
-308 0 m  308 -165 l  308 -182 306 -195 303 -205 ct 299 -214 294 -221 286 -225 ct 
-279 -229 268 -232 254 -232 ct 233 -232 217 -224 205 -210 ct 193 -196 187 -176 187 -151 ct 
-187 0 l  143 0 l  143 -205 l  143 -235 143 -253 142 -260 ct 183 -260 l  183 -259 183 -257 183 -254 ct 
-183 -250 184 -246 184 -242 ct 184 -237 184 -228 185 -216 ct 185 -216 l  195 -234 207 -246 220 -254 ct 
-233 -261 249 -265 269 -265 ct 297 -265 318 -258 331 -244 ct 345 -230 351 -206 351 -173 ct 
-351 0 l  308 0 l  p ef
-515 -2 m  501 2 486 4 472 4 ct 437 4 420 -16 420 -55 ct 420 -229 l  389 -229 l 
-389 -260 l  421 -260 l  434 -318 l  463 -318 l  463 -260 l  511 -260 l 
-511 -229 l  463 -229 l  463 -64 l  463 -52 465 -43 469 -38 ct 473 -33 480 -30 490 -30 ct 
-496 -30 504 -32 515 -34 ct 515 -2 l  p ef
-585 -121 m  585 -91 592 -68 604 -52 ct 616 -36 634 -27 658 -27 ct 677 -27 692 -31 703 -39 ct 
-715 -46 722 -56 726 -67 ct 764 -57 l  749 -16 713 5 658 5 ct 620 5 590 -6 570 -29 ct 
-550 -52 540 -86 540 -132 ct 540 -175 550 -208 570 -231 ct 590 -254 619 -265 656 -265 ct 
-733 -265 771 -219 771 -127 ct 771 -121 l  585 -121 l  p
-727 -154 m  724 -181 717 -201 706 -214 ct 694 -227 677 -233 656 -233 ct 635 -233 618 -226 606 -212 ct 
-594 -198 587 -179 586 -154 ct 727 -154 l  p ef
-826 0 m  826 -200 l  826 -218 826 -238 825 -260 ct 866 -260 l  867 -231 868 -213 868 -207 ct 
-869 -207 l  875 -229 883 -245 892 -253 ct 901 -261 914 -265 930 -265 ct 936 -265 942 -264 948 -263 ct 
-948 -223 l  942 -225 935 -225 925 -225 ct 907 -225 893 -218 884 -202 ct 874 -187 870 -164 870 -136 ct 
-870 0 l  826 0 l  p ef
-989 0 m  989 -200 l  989 -218 989 -238 988 -260 ct 1029 -260 l  1030 -231 1031 -213 1031 -207 ct 
-1032 -207 l  1038 -229 1046 -245 1055 -253 ct 1064 -261 1077 -265 1093 -265 ct 
-1099 -265 1105 -264 1111 -263 ct 1111 -223 l  1105 -225 1098 -225 1088 -225 ct 
-1070 -225 1056 -218 1047 -202 ct 1037 -187 1033 -164 1033 -136 ct 1033 0 l  989 0 l 
-p ef
-1195 -260 m  1195 -95 l  1195 -78 1196 -65 1200 -55 ct 1203 -46 1208 -39 1216 -35 ct 
-1223 -31 1234 -28 1248 -28 ct 1269 -28 1286 -36 1298 -50 ct 1310 -64 1316 -84 1316 -109 ct 
-1316 -260 l  1359 -260 l  1359 -55 l  1359 -25 1359 -7 1360 0 ct 1320 0 l 
-1319 -1 1319 -3 1319 -6 ct 1319 -10 1319 -14 1318 -18 ct 1318 -23 1318 -32 1318 -44 ct 
-1317 -44 l  1307 -26 1295 -14 1282 -6 ct 1269 1 1253 5 1234 5 ct 1205 5 1184 -2 1171 -16 ct 
-1158 -30 1151 -54 1151 -87 ct 1151 -260 l  1195 -260 l  p ef
-1645 -131 m  1645 -40 1614 5 1550 5 ct 1510 5 1483 -10 1469 -40 ct 1468 -40 l 
-1468 -39 1469 -25 1469 1 ct 1469 102 l  1425 102 l  1425 -207 l  1425 -234 1425 -252 1424 -260 ct 
-1466 -260 l  1466 -260 1466 -258 1466 -254 ct 1467 -250 1467 -244 1467 -235 ct 
-1468 -227 1468 -222 1468 -219 ct 1469 -219 l  1477 -235 1487 -246 1500 -254 ct 
-1512 -261 1529 -265 1550 -265 ct 1582 -265 1606 -254 1622 -233 ct 1638 -211 1645 -177 1645 -131 ct 
+33 0 m  33 -261 l  76 -261 l  76 0 l  33 0 l  p ef
+309 0 m  309 -166 l  309 -183 307 -196 304 -206 ct 301 -215 295 -222 288 -226 ct 
+280 -230 270 -232 255 -232 ct 234 -232 218 -225 206 -211 ct 194 -197 188 -177 188 -151 ct 
+188 0 l  144 0 l  144 -205 l  144 -236 144 -254 143 -261 ct 184 -261 l  184 -260 184 -258 184 -255 ct 
+184 -251 185 -247 185 -242 ct 185 -238 185 -229 186 -217 ct 186 -217 l  196 -235 208 -247 221 -255 ct 
+234 -262 250 -266 270 -266 ct 299 -266 319 -259 333 -245 ct 346 -230 353 -207 353 -174 ct 
+353 0 l  309 0 l  p ef
+520 -2 m  505 2 491 4 476 4 ct 441 4 424 -16 424 -55 ct 424 -229 l  393 -229 l 
+393 -261 l  425 -261 l  438 -320 l  467 -320 l  467 -261 l  515 -261 l 
+515 -229 l  467 -229 l  467 -65 l  467 -52 469 -43 473 -38 ct 477 -33 484 -31 495 -31 ct 
+500 -31 509 -32 520 -34 ct 520 -2 l  p ef
+590 -121 m  590 -91 596 -68 608 -52 ct 621 -36 639 -28 662 -28 ct 681 -28 696 -31 708 -39 ct 
+719 -46 727 -56 731 -68 ct 769 -57 l  753 -16 718 5 662 5 ct 624 5 594 -7 574 -30 ct 
+554 -53 544 -87 544 -132 ct 544 -175 554 -208 574 -231 ct 594 -254 623 -266 661 -266 ct 
+737 -266 776 -220 776 -127 ct 776 -121 l  590 -121 l  p
+731 -154 m  729 -182 722 -202 710 -215 ct 698 -228 682 -234 660 -234 ct 639 -234 622 -227 610 -213 ct 
+598 -199 591 -179 590 -154 ct 731 -154 l  p ef
+833 0 m  833 -200 l  833 -219 833 -239 832 -261 ct 873 -261 l  874 -232 875 -214 875 -208 ct 
+876 -208 l  883 -230 891 -245 900 -254 ct 909 -262 921 -266 938 -266 ct 943 -266 949 -265 955 -264 ct 
+955 -224 l  950 -225 942 -226 932 -226 ct 914 -226 900 -218 891 -203 ct 881 -187 877 -165 877 -136 ct 
+877 0 l  833 0 l  p ef
+998 0 m  998 -200 l  998 -219 998 -239 997 -261 ct 1038 -261 l  1039 -232 1040 -214 1040 -208 ct 
+1041 -208 l  1048 -230 1056 -245 1065 -254 ct 1074 -262 1086 -266 1103 -266 ct 
+1108 -266 1114 -265 1120 -264 ct 1120 -224 l  1115 -225 1107 -226 1097 -226 ct 
+1079 -226 1065 -218 1056 -203 ct 1046 -187 1042 -165 1042 -136 ct 1042 0 l  998 0 l 
+p ef
+1204 -261 m  1204 -95 l  1204 -78 1205 -65 1209 -55 ct 1212 -46 1218 -39 1225 -35 ct 
+1232 -31 1243 -29 1258 -29 ct 1278 -29 1295 -36 1307 -50 ct 1319 -64 1325 -84 1325 -110 ct 
+1325 -261 l  1368 -261 l  1368 -56 l  1368 -25 1369 -7 1370 0 ct 1329 0 l 
+1329 -1 1329 -3 1328 -6 ct 1328 -10 1328 -14 1328 -19 ct 1328 -23 1327 -32 1327 -44 ct 
+1326 -44 l  1316 -26 1305 -14 1292 -6 ct 1279 1 1262 5 1243 5 ct 1214 5 1193 -2 1180 -16 ct 
+1167 -31 1160 -54 1160 -87 ct 1160 -261 l  1204 -261 l  p ef
+1658 -132 m  1658 -40 1626 5 1562 5 ct 1522 5 1495 -10 1481 -40 ct 1480 -40 l 
+1480 -39 1481 -25 1481 1 ct 1481 103 l  1437 103 l  1437 -208 l  1437 -234 1437 -252 1436 -261 ct 
+1478 -261 l  1478 -260 1478 -258 1479 -254 ct 1479 -250 1479 -244 1480 -236 ct 
+1480 -228 1480 -222 1480 -219 ct 1481 -219 l  1489 -235 1499 -247 1512 -254 ct 
+1525 -262 1541 -266 1562 -266 ct 1594 -266 1618 -255 1634 -233 ct 1650 -212 1658 -178 1658 -132 ct 
 p
-1600 -130 m  1600 -167 1595 -193 1585 -208 ct 1576 -224 1560 -232 1539 -232 ct 
-1521 -232 1508 -228 1498 -221 ct 1489 -214 1481 -202 1476 -187 ct 1471 -172 1469 -152 1469 -127 ct 
-1469 -93 1474 -68 1485 -51 ct 1496 -35 1514 -27 1538 -27 ct 1560 -27 1575 -35 1585 -51 ct 
-1595 -67 1600 -93 1600 -130 ct p ef
-1798 -2 m  1784 2 1769 4 1755 4 ct 1720 4 1703 -16 1703 -55 ct 1703 -229 l  1672 -229 l 
-1672 -260 l  1704 -260 l  1717 -318 l  1746 -318 l  1746 -260 l  1794 -260 l 
-1794 -229 l  1746 -229 l  1746 -64 l  1746 -52 1748 -43 1752 -38 ct 1756 -33 1763 -30 1773 -30 ct 
-1779 -30 1787 -32 1798 -34 ct 1798 -2 l  p ef
-1867 -121 m  1867 -91 1874 -68 1886 -52 ct 1898 -36 1916 -27 1940 -27 ct 1959 -27 1974 -31 1985 -39 ct 
-1997 -46 2004 -56 2008 -67 ct 2046 -57 l  2031 -16 1995 5 1940 5 ct 1902 5 1872 -6 1852 -29 ct 
-1832 -52 1822 -86 1822 -132 ct 1822 -175 1832 -208 1852 -231 ct 1872 -254 1901 -265 1938 -265 ct 
-2015 -265 2053 -219 2053 -127 ct 2053 -121 l  1867 -121 l  p
-2009 -154 m  2006 -181 1999 -201 1988 -214 ct 1976 -227 1959 -233 1938 -233 ct 
-1917 -233 1900 -226 1888 -212 ct 1876 -198 1869 -179 1868 -154 ct 2009 -154 l 
-p ef
-2273 -42 m  2265 -26 2254 -14 2241 -6 ct 2228 1 2211 4 2192 4 ct 2159 4 2134 -7 2119 -29 ct 
-2103 -51 2096 -84 2096 -129 ct 2096 -220 2128 -265 2192 -265 ct 2211 -265 2228 -261 2241 -254 ct 
-2254 -247 2265 -236 2273 -220 ct 2273 -220 l  2273 -249 l  2273 -357 l  2316 -357 l 
-2316 -54 l  2316 -27 2316 -9 2317 0 ct 2276 0 l  2276 -3 2275 -9 2274 -18 ct 
-2274 -27 2274 -35 2274 -42 ct 2273 -42 l  p
-2141 -131 m  2141 -94 2146 -68 2156 -53 ct 2165 -37 2181 -29 2203 -29 ct 2227 -29 2245 -37 2256 -54 ct 
-2267 -71 2273 -98 2273 -133 ct 2273 -168 2267 -193 2256 -209 ct 2245 -225 2227 -233 2203 -233 ct 
-2181 -233 2165 -225 2156 -209 ct 2146 -193 2141 -167 2141 -131 ct p ef
+1612 -131 m  1612 -167 1608 -193 1598 -209 ct 1588 -224 1572 -232 1551 -232 ct 
+1534 -232 1520 -228 1511 -221 ct 1501 -214 1493 -203 1488 -187 ct 1483 -172 1481 -152 1481 -127 ct 
+1481 -93 1486 -68 1497 -51 ct 1508 -35 1526 -27 1550 -27 ct 1572 -27 1588 -35 1598 -51 ct 
+1607 -67 1612 -93 1612 -131 ct p ef
+1813 -2 m  1798 2 1784 4 1769 4 ct 1734 4 1717 -16 1717 -55 ct 1717 -229 l  1686 -229 l 
+1686 -261 l  1718 -261 l  1731 -320 l  1760 -320 l  1760 -261 l  1808 -261 l 
+1808 -229 l  1760 -229 l  1760 -65 l  1760 -52 1762 -43 1766 -38 ct 1770 -33 1777 -31 1788 -31 ct 
+1793 -31 1802 -32 1813 -34 ct 1813 -2 l  p ef
+1884 -121 m  1884 -91 1890 -68 1902 -52 ct 1915 -36 1933 -28 1956 -28 ct 1975 -28 1990 -31 2002 -39 ct 
+2013 -46 2021 -56 2025 -68 ct 2063 -57 l  2047 -16 2012 5 1956 5 ct 1918 5 1888 -7 1868 -30 ct 
+1848 -53 1838 -87 1838 -132 ct 1838 -175 1848 -208 1868 -231 ct 1888 -254 1917 -266 1955 -266 ct 
+2031 -266 2070 -220 2070 -127 ct 2070 -121 l  1884 -121 l  p
+2025 -154 m  2023 -182 2016 -202 2004 -215 ct 1992 -228 1976 -234 1954 -234 ct 
+1933 -234 1916 -227 1904 -213 ct 1892 -199 1885 -179 1884 -154 ct 2025 -154 l 
+p ef
+2290 -42 m  2282 -25 2271 -13 2258 -6 ct 2245 1 2228 5 2209 5 ct 2176 5 2152 -6 2136 -28 ct 
+2121 -51 2113 -84 2113 -129 ct 2113 -220 2145 -266 2209 -266 ct 2229 -266 2245 -262 2258 -255 ct 
+2271 -248 2282 -236 2290 -221 ct 2291 -221 l  2290 -250 l  2290 -358 l  2333 -358 l 
+2333 -54 l  2333 -26 2334 -9 2335 0 ct 2293 0 l  2293 -2 2292 -8 2292 -18 ct 
+2291 -27 2291 -35 2291 -42 ct 2290 -42 l  p
+2158 -131 m  2158 -94 2163 -68 2173 -52 ct 2182 -36 2198 -29 2220 -29 ct 2244 -29 2262 -37 2273 -54 ct 
+2284 -71 2290 -98 2290 -134 ct 2290 -168 2284 -194 2273 -210 ct 2262 -226 2245 -234 2220 -234 ct 
+2198 -234 2183 -226 2173 -210 ct 2163 -193 2158 -167 2158 -131 ct p ef
 pom
 gr
 gs
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/doc/source/wifi-design.rst ns-3.45/src/wifi/doc/source/wifi-design.rst
--- ns-3.44/src/wifi/doc/source/wifi-design.rst	2025-03-09 16:55:49.775372500 -0700
+++ ns-3.45/src/wifi/doc/source/wifi-design.rst	2025-06-01 20:34:45.607702300 -0700
@@ -803,9 +803,12 @@
 
 Association in infrastructure mode is a high-level MAC function performed by
 the Association Manager, which is implemented through a base class (``WifiAssocManager``)
-and a default subclass (``WifiDefaultAssocManager``). The interaction between
-the station MAC, the Association Manager base class and subclass is illustrated
-in Figure :ref:`fig-assoc-manager`.
+and a default subclass (``WifiDefaultAssocManager``), and controlled by the ``AssocType``
+attribute of the ``StaWifiMac`` class. This attribute controls whether the non-AP STA/MLD
+performs a legacy association or an ML setup with the AP device (the latter is only available for
+EHT devices associating with a multi-link AP; if this option is selected when this condition is not
+met, it falls back to legacy association automatically). The interaction between the station MAC,
+the Association Manager base class and subclass is illustrated in Figure :ref:`fig-assoc-manager`.
 
 .. _fig-assoc-manager:
 
@@ -1165,11 +1168,12 @@
 Enabling/disabling EMLSR mode
 -----------------------------
 
-EMLSR mode can be enabled on the links (at least two) of a non-AP MLD that supports the EMLSR
+EMLSR mode can be enabled on the link(s) of a non-AP EHT device that supports the EMLSR
 operating mode and performs ML setup with an AP MLD that supports the EMLSR operating mode. The
-``EmlsrActivated`` attribute of the EHT configuration of an MLD determines whether the EMLSR
-operating mode is supported by the MLD. When the ``EmlsrActivated`` attribute is set to true for
-a non-AP MLD, the WifiMacHelper will install an EMLSR Manager by using the type and attribute
+``EmlsrActivated`` attribute of the EHT configuration of an EHT device determines whether the EMLSR
+operating mode is supported by the device. When the ``EmlsrActivated`` attribute is set to true for
+a non-AP EHT device and the ``ns3::StaWifiMac::AssocType`` attribute is set to ``ML_SETUP``, the
+WifiMacHelper will install an EMLSR Manager by using the type and attribute
 values configured through the ``SetEmlsrManager`` method.
 
 EMLSR mode on the links of a non-AP MLD can be enabled or disabled by using the ``EmlsrLinkSet``
@@ -1208,6 +1212,13 @@
 the transmission of the data frame starts, otherwise. Aux PHYs are resumed from sleep when the TXOP
 ends.
 
+EMLSR operations, as detailed below, may lead to situations in which no PHY operates on a link for
+a certain time interval. Whether to freeze or reset the backoff counters for that link during such
+intervals is controlled by the ``ResetBackoffThreshold`` attribute of the ``ChannelAccessManager``:
+if the duration of the interval during which no PHY operates on a link is longer than the value of
+this attribute, the backoff counters are reset; otherwise, they are frozen until a PHY is connected
+to the link.
+
 Downlink TXOP
 -------------
 
@@ -1357,14 +1368,19 @@
 to the auxiliary link:
 
 * the main PHY is not in TX state
-* the main PHY is not switching nor is it trying to get channel access on another auxiliary link
+* the main PHY is not switching (unless switching can be interrupted, see below) nor is it trying
+  to get channel access on another auxiliary link
 * no MediumSyncDelay timer is running on the auxiliary link or the maximum number of TXOP attempts
   has not yet been reached
-* the main PHY is expected to get channel access on the auxiliary link more quickly, i.e., ALL the
-  ACs with queued frames (that can be transmitted on the link on which the main PHY is currently
-  operating) and with priority higher than or equal to that of the AC for which Aux PHY gained TXOP
-  have their backoff counter greater than the maximum between the expected delay in gaining channel
-  access on the auxiliary and the channel switch delay (plus PIFS if we cannot use aux PHY CCA)
+* the main PHY is expected to get channel access on the auxiliary link more quickly. More precisely,
+  let AC X be the AC that is about to gain channel access on the aux PHY link, the main PHY is
+  requested to switch if we do not expect any AC, with priority higher than or equal to AC X and
+  with frames to send on the main PHY link, to gain channel access on the main PHY link before AC X
+  is able to start transmitting on the aux PHY link.
+
+Note that the last condition is not checked if the ``CheckAccessOnMainPhyLink`` attribute is set to
+false and AC X has a priority higher than or equal to the AC specified by the ``MinAcToSkipCheckAccess``
+attribute.
 
 If the main PHY switches to the auxiliary link, it cannot transmit as soon as it completes the
 channel switch, but it has to verify that the medium has been virtually and physically idle
@@ -1403,28 +1419,61 @@
 A similar check is applied to possibly postpone the switch back to the preferred link when the
 SwitchMainPhyBack timer expires.
 
+The Advanced EMLSR Manager provides the ``KeepMainPhyAfterDlTxop`` attribute to control the behavior
+of the main PHY at the end of a DL TXOP carried out on an aux PHY link, in case aux PHYs are not TX
+capable and do not switch link. If such attribute is set to false (default value), the main PHY
+immediately switches back to the preferred link. If such attribute is set to true, it is checked
+whether channel access on the aux PHY link is expected to be gained within a switch main PHY back
+delay plus a channel switch delay: if it is, the main PHY stays on the aux PHY link and a switch
+main PHY back timer is started; otherwise, the main PHY switches back to the preferred link.
+
 The Advanced EMLSR Manager also connects a callback to the ``NSlotsLeftAlert`` trace source of the
-Channel Access Manager, which sends notifications when at most a configurable number of slots
-remain until the backoff of an AC expires. When the Advanced EMLSR Manager receives such a
-notification, it evaluates the opportunity of switching the main PHY to the auxiliary link on which
-the notification has been received. Specifically, the Advanced EMLSR Manager performs the check
-described above to determine whether the potential UL transmit opportunity shall be dropped (it is
-dropped if a PPDU being received on another EMLSR link might be an ICF and the ``AllowUlTxopInRx``
-attribute is set to false) and then it checks whether it is convenient for the main PHY to switch
-to the auxiliary link as described above (with the exception that the expected delay until backoff
-end is also taken into account). If the main PHY is requested to switch to the auxiliary link and
-the backoff on the auxiliary link counts down to zero while the main PHY is switching, a NAV and
-CCA check is performed as described above (by the aux PHY in the PIFS period preceding the main PHY
-channel switch end or by the main PHY in the PIFS period following the main PHY channel switch end).
-Similarly, a NAV and CCA check is performed (by the main PHY) if the remaining backoff time when
-the main PHY switch is completed is less than a PIFS. Otherwise, SwitchMainPhyBack timer is started
-having a duration of SwitchMainPhyBackDelay plus the remaining time until the backoff of the AC
-involved in the Channel Access Manager notification is expected to expire.
+Channel Access Manager, which sends notifications when at most a configurable number of slots remain
+until the backoff of an AC expires. It must be noted that this notification is only sent if channel
+access has been requested by the AC for which the number of remaining backoff slots has reached
+the given threshold. Thus, if an AC terminates a TXOP and generates a new backoff value, but it
+has no packets in the queue, then channel access is not requested and the notification is not
+scheduled; if a new packet arrives after that the backoff counter has reached zero, channel access
+is requested and notification is sent immediately (while channel access is gained at the next slot
+boundary, which may be a few microseconds later). If channel access is requested while the backoff
+counter is non-zero, the notification is sent when the number of slots remaining until the backoff
+of an AC expires reaches the configured value, if the backoff counter starts at a value greater than
+or equal to the configured value, or as soon as the notification can be sent based on the value of
+the ``NSlotsLeftMinDelay`` attribute  of the Channel Access Manager. This attribute indicates the
+minimum amount of time that must elapse since the start of the AIFS to enable the dispatching of
+the notification. Example:
+
+::
+
+  BE AC (thus AIFS = SIFS + 3 * slots), Backoff = 3, NSlotsLeft >= 5, NSlotsLeftMinDelay = PIFS
+
+  |------AIFS--------|
+  | SIFS | s | s | s | s | s | s |
+             ^
+             |
+      send notification
+
+When the Advanced EMLSR Manager receives such a notification, it evaluates the opportunity of
+switching the main PHY to the auxiliary link on which the notification has been received. Specifically,
+the Advanced EMLSR Manager performs the check described above to determine whether the potential UL
+transmit opportunity shall be dropped (it is dropped if a PPDU being received on another EMLSR link
+might be an ICF and the ``AllowUlTxopInRx`` attribute is set to false) and then it checks whether it is
+convenient for the main PHY to switch to the auxiliary link as described above (with the exception that
+the expected delay until backoff end is also taken into account). If the main PHY is requested to switch
+to the auxiliary link and the backoff on the auxiliary link counts down to zero while the main PHY is
+switching, a NAV and CCA check is performed as described above (by the aux PHY in the PIFS period
+preceding the main PHY channel switch end or by the main PHY in the PIFS period following the main PHY
+channel switch end). If the remaining backoff time when the main PHY completes the switch to the aux
+PHY link is greater than or equal to a PIFS, no NAV and CCA check is scheduled, as the main PHY has
+enough time to perform CCA on the aux PHY link. If the remaining backoff time when the main PHY
+completes the switch to the aux PHY link is less than a PIFS, the UL TXOP starts as soon as the
+backoff counter reaches zero, if aux PHY CCA can be used, or a PIFS after the end of the main PHY
+switch (provided that the NAV and CCA check indicates medium idle), if main PHY CCA is requested.
 
 The Advanced EMLSR Manager has the ``InterruptSwitch`` attribute that can be set to true to
 interrupt a main PHY switch when it is determined that the main PHY shall switch to a different
 link while still completing the previous switch; in such cases, the previous switch is interrupted
-and the new channel switch starts. This opportunity is exploited in two situations:
+and the new channel switch starts. This opportunity is exploited in some situations:
 
 * If the main PHY is switching while a TX capable aux PHY transmits an RTS to start an UL TXOP,
   the main PHY switch can be interrupted and the main PHY can start switching to the link on
@@ -1434,6 +1483,26 @@
   a CTS timeout occurs while the main PHY is switching. If the aux PHYs do not switch link, the
   main PHY switch is interrupted and the main PHY returns to the preferred link; if the aux PHYs
   switch link, the main PHY switch is interrupted and the main PHY returns to the link it just left.
+* If the main PHY is switching while an aux PHY is receiving an ICF, the switch can be interrupted
+  so that the main PHY can start switching to the aux PHY link and be ready to operate on that link
+  upon reception of the ICF.
+* If channel access is gained, or is about to be gained, on a link on which a non-TX capable aux PHY
+  is operating and the main PHY is switching, the main PHY switch can be interrupted and the main
+  PHY can start switching to the aux PHY link, provided that the main PHY was not switching to start
+  a (DL or UL) TXOP and the other conditions to request the main PHY to switch are satisfied.
+
+AP EMLSR Manager
+----------------
+A manager which takes EMLSR specific decisions can also be installed on the AP MLD side. The base
+class is named ``ApEmlsrManager``, which is inherited by the ``DefaultApEmlsrManager`` and the
+``AdvancedApEmlsrManager``. One of the choices that the AP MLD has to take is how to behave in case
+the transmission of an ICF fails due to a cross link collision, i.e., an ICF that is addressed to
+EMLSR client(s) fails because the EMLSR client(s) are sending or have sent an ICF on another EMLSR
+link. By default, an ICF failure is treated just like any other failure: the contention window is
+updated and the failure is notified to the remote station manager. However, the advanced AP EMLSR
+manager provides two attributes, ``UpdateCwAfterFailedIcf`` and ``ReportFailedIcf``, that can be
+used, respectively, to control whether to update the contention window and report the failure to the
+remote station manager in case of ICF failure due to cross link collision.
 
 EMLSR traces
 ------------
@@ -1462,10 +1531,12 @@
     switching and be operating on the link the ICF is received on at the end of the ICF reception
 
 * The ``StaWifiMac::EmlsrLinkSwitch`` trace provides information about start/end of EMLSR link
-  switch events: when a PHY operating on a link starts switching to another link, the trace provides
-  the ID of the link the PHY is leaving and a null pointer (indicating that no PHY is operating on
-  that link); when a PHY completes switching to a link, the trace provides the ID of the link and a
-  pointer to the PHY (which is now operating on that link)
+  switch events. This trace is fired: (i) when a PHY operating on a link starts switching to
+  another link, thus the PHY is disconnected from the previous link; (ii) when a PHY is connected
+  to a new link after performing a channel switch. This trace provides: the ID of the previous link,
+  in case the PHY is disconnected, or the ID of the new link, in case the PHY is connected; a
+  pointer to the PHY that switches link; a boolean value indicating if the PHY is connected to
+  (true) or disconnected from (false) the given link
 * The ``EmlsrManager::MainPhySwitch`` trace is fired when the main PHY switches channel to operate
   on another link. Information associated with the main PHY switch is provided through a struct
   that is inherited from ``struct EmlsrMainPhySwitchTrace``. Different inherited structs are defined
@@ -1478,20 +1549,33 @@
   * ``EmlsrUlTxopRtsSentByAuxPhyTrace``: main PHY is starting switching to another link to take over
     an UL TXOP started by a TX capable aux PHY that transmitted an RTS frame on that link
   * ``EmlsrTxopEndedTrace``: main PHY is starting switching because a (DL or UL) TXOP ended. This
-    trace has a parameter, remTime, whose value is set as follows. When a TXOP ends after a
-    successful transmission and aux PHYs do not switch link, the main PHY switches back to the
-    preferred link; in such a case, the remTime parameter is set to zero. However, a TXOP may end
-    due to a CTS timeout after that a TX capable aux PHY had sent an RTS to start an UL TXOP and
-    the main PHY may be switching when the CTS timeout occurs. If the main PHY switch cannot be
-    interrupted (see case a) in Fig. :ref:`fig-emlsr-txop-ended-trace`), which is the case with the
-    Default EMLSR Manager or with the Advanced EMLSR Manager when the ``InterruptSwitch`` attribute
-    is false, the remTime parameter is set to the remaining channel switch delay at the time the
-    TXOP ends. If the main PHY switch can be interrupted (see case b) in Fig.
-    :ref:`fig-emlsr-txop-ended-trace`), which is the case with the Advanced EMLSR Manager when the
-    ``InterruptSwitch`` attribute is true, the remTime parameter indicates the time that was left
-    to complete the previous channel switch. Note that, in the latter case, this channel switch can
-    also occur when the aux PHYs switch link, as the main PHY returns to the link it was operating
-    on before starting the previous channel switch.
+    trace is called when aux PHYs do not switch link and the main PHY switches back to the preferred
+    link when a TXOP carried out on another link ends
+  * ``EmlsrRtsSentByAuxPhyCtsTimeoutTrace``: main PHY is starting switching after a CTS timeout
+    occurred on the link on which an RTS was transmitted to start an UL TXOP. This trace
+    has a parameter, sinceCtsTimeout, that provides the time elapsed since the CTS timeout occurred.
+    Normally, this trace is called when aux PHYs do not switch links, because the main PHY has to
+    return to the preferred link upon CTS timeout, because a TXOP did not start. In some cases, the
+    main PHY may be switching when CTS timeout occurs; this happens when an aux PHY that is TX
+    capable transmits an RTS and the main PHY starts switching to the aux PHY link. In such a case,
+    the main PHY completes the current link switch and then it starts switching to return back to
+    the preferred link (see case (a) in Fig. :ref:`fig-emlsr-txop-ended-trace`). If the
+    main PHY switch can be interrupted (see case (b) in Fig. :ref:`fig-emlsr-txop-ended-trace`),
+    which is the case with the Advanced EMLSR Manager when the ``InterruptSwitch`` attribute is
+    false, the previous switch is interrupted and the main PHY starts switching to the previous
+    link (in this case, the time elapsed since the CTS timeout occurred is zero). This holds true
+    for both the case aux PHYs do not switch link and the case aux PHYs switch link.
+  * ``EmlsrSwitchMainPhyBackTrace``: main PHY is switching back to the preferred link after that it
+    did not manage to gain channel access on an aux PHY link before the expiration of the switch
+    main PHY back timer, whose duration is set to the value of the
+    ``ns3::AdvancedEmlsrManager::SwitchMainPhyBackDelay`` attribute. The main PHY can switch back
+    before the timer expiration in case it is determined that channel access is not expected to be
+    gained within the timer expiration plus a channel switch delay. This trace has three parameters:
+    the time elapsed since the switch main PHY back timer started, the reason for switching back
+    before the timer expiration (if that is the case) and a boolean value indicating whether
+    the main PHY is switching when it is requested to switch back. This trace is provided by the
+    ``AdvancedEmlsrManager`` and is only fired when aux PHYs are not TX capable and do not switch
+    link.
 
 Ack manager
 ###########
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/doc/source/wifi-user.rst ns-3.45/src/wifi/doc/source/wifi-user.rst
--- ns-3.44/src/wifi/doc/source/wifi-user.rst	2025-03-09 16:55:49.775372500 -0700
+++ ns-3.45/src/wifi/doc/source/wifi-user.rst	2025-06-01 20:34:45.607702300 -0700
@@ -216,7 +216,7 @@
  wifiPhyHelper.Set("MaxSupportedTxSpatialStreams", UintegerValue(2));
  wifiPhyHelper.Set("MaxSupportedRxSpatialStreams", UintegerValue(1));
 
-802.11n PHY layer can support both 20 (default) or 40 MHz channel width, and 802.11ac/ax PHY layer can use either 20, 40, 80 (default) or 160 MHz channel width.  See below for further documentation on setting the frequency, channel width, and channel number.
+802.11n PHY layer can support both 20 (default) or 40 MHz channel width, and 802.11ac/ax PHY layer can use either 20, 40, 80 (default), 160 or 320 MHz channel width.  See below for further documentation on setting the frequency, channel width, and channel number.
 
 .. sourcecode:: cpp
 
@@ -475,33 +475,35 @@
    +------------------+-------------------------------------------+
 
 
-The following channel numbers are well-defined for 6 GHz standards (802.11ax only):
+The following channel numbers are well-defined for 6 GHz standards (802.11ax and later):
 
 .. table:: 6 GHz channel numbers
    :widths: 20 70
 
-   +------------------+-------------------------------------------+
-   | ``ChannelWidth`` | ``ChannelNumber``                         |
-   +------------------+-------------------------------------------+
-   | 20 MHz           | 1, 5, 9, 13, 17, 21, 25, 29, 33, 37, 41,  |
-   |                  | 45, 49, 53, 57, 61, 65, 69, 73, 77, 81,   |
-   |                  | 85, 89, 93, 97, 101, 105, 109, 113, 117,  |
-   |                  | 121, 125, 129, 133, 137, 141, 145, 149,   |
-   |                  | 153, 157, 161, 165, 169, 173, 177, 181,   |
-   |                  | 185, 189, 193, 197, 201, 205, 209, 213,   |
-   |                  | 217, 221, 225, 229, 233                   |
-   +------------------+-------------------------------------------+
-   | 40 MHz           | 3, 11, 19, 27, 35, 43, 51, 59, 67, 75,    |
-   |                  | 83, 91, 99, 107, 115, 123, 131, 139, 147, |
-   |                  | 155, 163, 171, 179, 187, 195, 203, 211,   |
-   |                  | 219, 227                                  |
-   +------------------+-------------------------------------------+
-   | 80 MHz           | 7, 23, 39, 55, 71, 87, 103, 119, 135,     |
-   |                  | 151, 167, 183, 199, 215                   |
-   +------------------+-------------------------------------------+
-   | 160 MHz          | 15, 47, 79, 111, 143, 175, 207            |
-   +------------------+-------------------------------------------+
-
+   +-------------------+------------------------------------------+
+   | ``ChannelWidth``  | ``ChannelNumber``                        |
+   +-------------------+------------------------------------------+
+   | 20 MHz            | 1, 5, 9, 13, 17, 21, 25, 29, 33, 37, 41, |
+   |                   | 45, 49, 53, 57, 61, 65, 69, 73, 77, 81,  |
+   |                   | 85, 89, 93, 97, 101, 105, 109, 113, 117, |
+   |                   | 121, 125, 129, 133, 137, 141, 145, 149,  |
+   |                   | 153, 157, 161, 165, 169, 173, 177, 181,  |
+   |                   | 185, 189, 193, 197, 201, 205, 209, 213,  |
+   |                   | 217, 221, 225, 229, 233                  |
+   +-------------------+------------------------------------------+
+   | 40 MHz            | 3, 11, 19, 27, 35, 43, 51, 59, 67, 75,   |
+   |                   | 83, 91, 99, 107, 115, 123, 131, 139, 147,|
+   |                   | 155, 163, 171, 179, 187, 195, 203, 211,  |
+   |                   | 219, 227                                 |
+   +-------------------+------------------------------------------+
+   | 80 MHz            | 7, 23, 39, 55, 71, 87, 103, 119, 135,    |
+   |                   | 151, 167, 183, 199, 215                  |
+   +-------------------+------------------------------------------+
+   | 160 MHz           | 15, 47, 79, 111, 143, 175, 207           |
+   +-------------------+------------------------------------------+
+   | 320 MHz (802.11be | 31, 95, 159 (320 MHz-1)                  |
+   | and later)        | 63, 127, 191 (320 MHz-2)                 |
+   +-------------------+------------------------------------------+
 
 The channel number may be set either before or after creation of the
 WifiPhy object.
@@ -533,6 +535,9 @@
 In the above, while channel number 14 is well-defined in practice for 802.11b
 only, it is for 2.4 GHz band, not 5 GHz band.
 
+If a limitation is configured for the supported bandwidth of the PHY radio through the MaxRadioBw attribute,
+the simulator will exit with an error if the configured bandwidth exceeds the maximum allowed bandwidth.
+
 WifiPhy::Primary20MHzIndex
 ++++++++++++++++++++++++++
 
@@ -576,6 +581,32 @@
 change standard during a simulation. It is instead possible to change the
 channel settings at any time.
 
+Advertisement of the channel width
+++++++++++++++++++++++++++++++++++
+
+STAs are advertizing their channel width in capabilities and operations (for APs) information elements
+contained in management frames.
+
+The channel width that is being advertised is the value that is returned by WifiPhy::ChannelWidth, which corresponds to
+the value that is set in the ChannelSettings attribute (or the total width in case of non-contiguous channel operation).
+
+Not all the channel widths can be advertised for non-AP STAs, depending on the standard and the band.
+This is not a problem as long as the AP the non-AP STA is associated with is operating on the same channel width
+or on a narrower one. Otherwise, the AP might select a larger channel width for the transmission of downlink PPDUs,
+which would then be dropped by the PHY of the non-AP STA.
+
+For example, since VHT Capabilities Information Elements only allow the advertisement of 80 and 160 MHz channel widths,
+a VHT non-AP STA with its ChannelSettings set to use a 40 MHz channel width won't be able to receive any downlink PPDUs
+if the VHT AP has its ChannelSettings set to operate on an 80 MHz channel width.
+
+It is possible to configure the behavior of the association manager to either abort the simulation when such
+a problematic situation is detected (default) or to allow the association anyway, depending on the configured value
+for the ``ns3::WifiMac::AllowAssociationWithDifferentChannelWidth`` attribute.
+
+If the default association manager is used, it is also possible to skip candidate APs that are operating on a
+larger channel width than the non-AP STA and which would result in the problematic situation described above.
+This is done by setting the ``ns3::WifiMac::SkipCandidateAPsWithLargerChannelWidth`` attribute to true.
+
 
 SpectrumWifiPhyHelper
 =====================
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/examples/wifi-manager-example.cc ns-3.45/src/wifi/examples/wifi-manager-example.cc
--- ns-3.44/src/wifi/examples/wifi-manager-example.cc	2025-03-09 16:55:49.775372500 -0700
+++ ns-3.45/src/wifi/examples/wifi-manager-example.cc	2025-06-01 20:34:45.608702200 -0700
@@ -248,7 +248,8 @@
     cmd.AddValue(
         "standard",
         "Set standard (802.11a, 802.11b, 802.11g, 802.11p-10MHz, 802.11p-5MHz, 802.11n-5GHz, "
-        "802.11n-2.4GHz, 802.11ac, 802.11ax-6GHz, 802.11ax-5GHz, 802.11ax-2.4GHz)",
+        "802.11n-2.4GHz, 802.11ac, 802.11ax-6GHz, 802.11ax-5GHz, 802.11ax-2.4GHz, 802.11be-6GHz, "
+        "802.11be-5GHz, 802.11be-2.4GHz)",
         standard);
     cmd.AddValue("wifiManager",
                  "Set wifi rate manager (Aarf, Aarfcd, Amrr, Arf, Cara, Ideal, Minstrel, "
@@ -334,7 +335,8 @@
             serverChannelWidth = GetDefaultChannelWidth(WIFI_STANDARD_80211ac, WIFI_PHY_BAND_5GHZ);
         }
         NS_ABORT_MSG_IF(serverChannelWidth != MHz_u{20} && serverChannelWidth != MHz_u{40} &&
-                            serverChannelWidth != MHz_u{80} && serverChannelWidth != MHz_u{160},
+                            serverChannelWidth != MHz_u{80} && serverChannelWidth != MHz_u{160} &&
+                            serverChannelWidth != MHz_u{320},
                         "Invalid channel width for standard " << standard);
         NS_ABORT_MSG_IF(serverNss == 0 || serverNss > 4,
                         "Invalid nss " << serverNss << " for standard " << standard);
@@ -343,13 +345,15 @@
             clientChannelWidth = GetDefaultChannelWidth(WIFI_STANDARD_80211ac, WIFI_PHY_BAND_5GHZ);
         }
         NS_ABORT_MSG_IF(clientChannelWidth != MHz_u{20} && clientChannelWidth != MHz_u{40} &&
-                            clientChannelWidth != MHz_u{80} && clientChannelWidth != MHz_u{160},
+                            clientChannelWidth != MHz_u{80} && clientChannelWidth != MHz_u{160} &&
+                            clientChannelWidth != MHz_u{320},
                         "Invalid channel width for standard " << standard);
         NS_ABORT_MSG_IF(clientNss == 0 || clientNss > 4,
                         "Invalid nss " << clientNss << " for standard " << standard);
     }
     else if (standard == "802.11ax-6GHz" || standard == "802.11ax-5GHz" ||
-             standard == "802.11ax-2.4GHz")
+             standard == "802.11ax-2.4GHz" || standard == "802.11be-6GHz" ||
+             standard == "802.11be-5GHz" || standard == "802.11be-2.4GHz")
     {
         WifiPhyBand band = (standard == "802.11ax-2.4GHz" ? WIFI_PHY_BAND_2_4GHZ
                             : standard == "802.11ax-6GHz" ? WIFI_PHY_BAND_6GHZ
@@ -359,7 +363,8 @@
             serverChannelWidth = GetDefaultChannelWidth(WIFI_STANDARD_80211ax, band);
         }
         NS_ABORT_MSG_IF(serverChannelWidth != MHz_u{20} && serverChannelWidth != MHz_u{40} &&
-                            serverChannelWidth != MHz_u{80} && serverChannelWidth != MHz_u{160},
+                            serverChannelWidth != MHz_u{80} && serverChannelWidth != MHz_u{160} &&
+                            serverChannelWidth != MHz_u{320},
                         "Invalid channel width for standard " << standard);
         NS_ABORT_MSG_IF(serverNss == 0 || serverNss > 4,
                         "Invalid nss " << serverNss << " for standard " << standard);
@@ -368,7 +373,8 @@
             clientChannelWidth = GetDefaultChannelWidth(WIFI_STANDARD_80211ax, band);
         }
         NS_ABORT_MSG_IF(clientChannelWidth != MHz_u{20} && clientChannelWidth != MHz_u{40} &&
-                            clientChannelWidth != MHz_u{80} && clientChannelWidth != MHz_u{160},
+                            clientChannelWidth != MHz_u{80} && clientChannelWidth != MHz_u{160} &&
+                            clientChannelWidth != MHz_u{320},
                         "Invalid channel width for standard " << standard);
         NS_ABORT_MSG_IF(clientNss == 0 || clientNss > 4,
                         "Invalid nss " << clientNss << " for standard " << standard);
@@ -481,6 +487,33 @@
                      0,
                      60,
                      120 * channelRateFactor),
+        StandardInfo("802.11be-6GHz",
+                     WIFI_STANDARD_80211be,
+                     WIFI_PHY_BAND_6GHZ,
+                     serverChannelWidth,
+                     5,
+                     55,
+                     0,
+                     60,
+                     120 * channelRateFactor),
+        StandardInfo("802.11be-5GHz",
+                     WIFI_STANDARD_80211be,
+                     WIFI_PHY_BAND_5GHZ,
+                     serverChannelWidth,
+                     5,
+                     55,
+                     0,
+                     60,
+                     120 * channelRateFactor),
+        StandardInfo("802.11be-2.4GHz",
+                     WIFI_STANDARD_80211be,
+                     WIFI_PHY_BAND_2_4GHZ,
+                     serverChannelWidth,
+                     5,
+                     55,
+                     0,
+                     60,
+                     120 * channelRateFactor),
     };
 
     clientStandards = {
@@ -583,6 +616,33 @@
                      0,
                      60,
                      160 * channelRateFactor),
+        StandardInfo("802.11be-6GHz",
+                     WIFI_STANDARD_80211be,
+                     WIFI_PHY_BAND_6GHZ,
+                     clientChannelWidth,
+                     5,
+                     55,
+                     0,
+                     60,
+                     160 * channelRateFactor),
+        StandardInfo("802.11be-5GHz",
+                     WIFI_STANDARD_80211be,
+                     WIFI_PHY_BAND_5GHZ,
+                     clientChannelWidth,
+                     5,
+                     55,
+                     0,
+                     60,
+                     160 * channelRateFactor),
+        StandardInfo("802.11be-2.4GHz",
+                     WIFI_STANDARD_80211ax,
+                     WIFI_PHY_BAND_2_4GHZ,
+                     clientChannelWidth,
+                     5,
+                     55,
+                     0,
+                     60,
+                     160 * channelRateFactor),
     };
 
     for (std::vector<StandardInfo>::size_type i = 0; i != serverStandards.size(); i++)
@@ -780,7 +840,10 @@
     }
     else if (serverSelectedStandard.m_name == "802.11ax-6GHz" ||
              serverSelectedStandard.m_name == "802.11ax-5GHz" ||
-             serverSelectedStandard.m_name == "802.11ax-2.4GHz")
+             serverSelectedStandard.m_name == "802.11ax-2.4GHz" ||
+             serverSelectedStandard.m_name == "802.11be-6GHz" ||
+             serverSelectedStandard.m_name == "802.11be-5GHz" ||
+             serverSelectedStandard.m_name == "802.11be-2.4GHz")
     {
         wndServer->GetHeConfiguration()->SetGuardInterval(NanoSeconds(serverShortGuardInterval));
         wndClient->GetHeConfiguration()->SetGuardInterval(NanoSeconds(clientShortGuardInterval));
@@ -884,7 +947,9 @@
     title.append(wifiManager);
     title.append("\\n");
     if (standard == "802.11n-5GHz" || standard == "802.11n-2.4GHz" || standard == "802.11ac" ||
-        standard == "802.11ax-6GHz" || standard == "802.11ax-5GHz" || standard == "802.11ax-2.4GHz")
+        standard == "802.11ax-6GHz" || standard == "802.11ax-5GHz" ||
+        standard == "802.11ax-2.4GHz" || standard == "802.11be-6GHz" ||
+        standard == "802.11be-5GHz" || standard == "802.11be-2.4GHz")
     {
         std::ostringstream serverGiStrStr;
         std::ostringstream serverWidthStrStr;
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/helper/athstats-helper.h ns-3.45/src/wifi/helper/athstats-helper.h
--- ns-3.44/src/wifi/helper/athstats-helper.h	2025-03-09 16:55:49.779372700 -0700
+++ ns-3.45/src/wifi/helper/athstats-helper.h	2025-06-01 20:34:45.608702200 -0700
@@ -232,8 +232,7 @@
     std::ofstream* m_writer; ///< output stream
 
     Time m_interval; ///< interval
-
-}; // class AthstatsWifiTraceSink
+};
 
 } // namespace ns3
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/helper/wifi-helper.cc ns-3.45/src/wifi/helper/wifi-helper.cc
--- ns-3.44/src/wifi/helper/wifi-helper.cc	2025-03-09 16:55:49.779372700 -0700
+++ ns-3.45/src/wifi/helper/wifi-helper.cc	2025-06-01 20:34:45.609702000 -0700
@@ -34,6 +34,9 @@
 #include <bit>
 #include <memory>
 
+namespace ns3
+{
+
 namespace
 {
 /**
@@ -49,10 +52,17 @@
     const auto shift = std::countr_zero(mask);
     return (val << shift) & mask;
 }
-} // namespace
 
-namespace ns3
-{
+/// 320 MHz channelization map
+const std::map<MHz_u, RadiotapHeader::UsigCommonBw> channelization320MHzMap{
+    {MHz_u{6105}, RadiotapHeader::USIG_COMMON_BW_320MHZ_1},
+    {MHz_u{6425}, RadiotapHeader::USIG_COMMON_BW_320MHZ_1},
+    {MHz_u{6745}, RadiotapHeader::USIG_COMMON_BW_320MHZ_1},
+    {MHz_u{6265}, RadiotapHeader::USIG_COMMON_BW_320MHZ_2},
+    {MHz_u{6585}, RadiotapHeader::USIG_COMMON_BW_320MHZ_2},
+    {MHz_u{6905}, RadiotapHeader::USIG_COMMON_BW_320MHZ_2},
+};
+} // namespace
 
 NS_LOG_COMPONENT_DEFINE("WifiHelper");
 
@@ -522,13 +532,13 @@
         heFields.data2 = RadiotapHeader::HE_DATA2_GI_KNOWN;
         if (preamble == WIFI_PREAMBLE_HE_MU || preamble == WIFI_PREAMBLE_HE_TB)
         {
+            NS_ASSERT(WifiRu::IsHe(txVector.GetHeMuUserInfo(staId).ru));
+            auto heRu = std::get<HeRu::RuSpec>(txVector.GetHeMuUserInfo(staId).ru);
             heFields.data2 |=
                 RadiotapHeader::HE_DATA2_RU_OFFSET_KNOWN |
                 // HeRu indices start at 1 whereas RadioTap starts at 0
-                GetRadiotapField(RadiotapHeader::HE_DATA2_RU_OFFSET,
-                                 txVector.GetHeMuUserInfo(staId).ru.GetIndex() - 1) |
-                GetRadiotapField(RadiotapHeader::HE_DATA2_PRISEC_80_SEC,
-                                 !txVector.GetHeMuUserInfo(staId).ru.GetPrimary80MHz());
+                GetRadiotapField(RadiotapHeader::HE_DATA2_RU_OFFSET, heRu.GetIndex() - 1) |
+                GetRadiotapField(RadiotapHeader::HE_DATA2_PRISEC_80_SEC, !heRu.GetPrimary80MHz());
         }
 
         heFields.data3 =
@@ -542,28 +552,28 @@
         heFields.data5 = 0;
         if (preamble == WIFI_PREAMBLE_HE_MU || preamble == WIFI_PREAMBLE_HE_TB)
         {
-            HeRu::RuType ruType = txVector.GetHeMuUserInfo(staId).ru.GetRuType();
+            const auto ruType = WifiRu::GetRuType(txVector.GetHeMuUserInfo(staId).ru);
             switch (ruType)
             {
-            case HeRu::RU_26_TONE:
+            case RuType::RU_26_TONE:
                 heFields.data5 |= RadiotapHeader::HE_DATA5_DATA_BW_RU_ALLOC_26T;
                 break;
-            case HeRu::RU_52_TONE:
+            case RuType::RU_52_TONE:
                 heFields.data5 |= RadiotapHeader::HE_DATA5_DATA_BW_RU_ALLOC_52T;
                 break;
-            case HeRu::RU_106_TONE:
+            case RuType::RU_106_TONE:
                 heFields.data5 |= RadiotapHeader::HE_DATA5_DATA_BW_RU_ALLOC_106T;
                 break;
-            case HeRu::RU_242_TONE:
+            case RuType::RU_242_TONE:
                 heFields.data5 |= RadiotapHeader::HE_DATA5_DATA_BW_RU_ALLOC_242T;
                 break;
-            case HeRu::RU_484_TONE:
+            case RuType::RU_484_TONE:
                 heFields.data5 |= RadiotapHeader::HE_DATA5_DATA_BW_RU_ALLOC_484T;
                 break;
-            case HeRu::RU_996_TONE:
+            case RuType::RU_996_TONE:
                 heFields.data5 |= RadiotapHeader::HE_DATA5_DATA_BW_RU_ALLOC_996T;
                 break;
-            case HeRu::RU_2x996_TONE:
+            case RuType::RU_2x996_TONE:
                 heFields.data5 |= RadiotapHeader::HE_DATA5_DATA_BW_RU_ALLOC_2x996T;
                 break;
             default:
@@ -628,6 +638,10 @@
             usigFields.common |= GetRadiotapField(RadiotapHeader::USIG_COMMON_BW,
                                                   RadiotapHeader::USIG_COMMON_BW_160MHZ);
             break;
+        case 320:
+            usigFields.common |= GetRadiotapField(RadiotapHeader::USIG_COMMON_BW,
+                                                  channelization320MHzMap.at(channelFreqMhz));
+            break;
         default:
             NS_ABORT_MSG("Unexpected channel width");
             break;
@@ -646,9 +660,8 @@
             std::optional<bool> isLow80MHz;
             if (txVector.IsDlMu() && channelWidth > MHz_u{80})
             {
-                const auto isLowP80 = p20Index < (channelWidth / MHz_u{40});
-                const auto isP80 = txVector.GetHeMuUserInfo(staId).ru.GetPrimary80MHz();
-                isLow80MHz = (isLowP80 && isP80) || (!isLowP80 && !isP80);
+                isLow80MHz = true;
+                // TODO: fix once EHT RUs are used
             }
             const auto puncturedChannelInfo =
                 EhtPpdu::GetPuncturedInfo(txVector.GetInactiveSubchannels(),
@@ -690,44 +703,49 @@
             break;
         }
         ehtFields.data.at(1) = RadiotapHeader::EHT_DATA1_RU_ALLOC_CC_1_1_1_KNOWN;
-        const auto ruType = (txVector.GetEhtPpduType() == 1) ? HeRu::GetRuType(channelWidth)
-                                                             : txVector.GetRu(staId).GetRuType();
+        const auto ruType = (txVector.GetEhtPpduType() == 1)
+                                ? WifiRu::GetRuType(channelWidth)
+                                : WifiRu::GetRuType(txVector.GetRu(staId));
         switch (ruType)
         {
-        case HeRu::RU_26_TONE:
+        case RuType::RU_26_TONE:
             ehtFields.data.at(1) |= GetRadiotapField(RadiotapHeader::EHT_DATA1_RU_MRU_SIZE,
                                                      RadiotapHeader::EHT_DATA1_RU_MRU_SIZE_26);
             break;
-        case HeRu::RU_52_TONE:
+        case RuType::RU_52_TONE:
             ehtFields.data.at(1) |= GetRadiotapField(RadiotapHeader::EHT_DATA1_RU_MRU_SIZE,
                                                      RadiotapHeader::EHT_DATA1_RU_MRU_SIZE_52);
             break;
-        case HeRu::RU_106_TONE:
+        case RuType::RU_106_TONE:
             ehtFields.data.at(1) |= GetRadiotapField(RadiotapHeader::EHT_DATA1_RU_MRU_SIZE,
                                                      RadiotapHeader::EHT_DATA1_RU_MRU_SIZE_106);
             break;
-        case HeRu::RU_242_TONE:
+        case RuType::RU_242_TONE:
             ehtFields.data.at(1) |= GetRadiotapField(RadiotapHeader::EHT_DATA1_RU_MRU_SIZE,
                                                      RadiotapHeader::EHT_DATA1_RU_MRU_SIZE_242);
             break;
-        case HeRu::RU_484_TONE:
+        case RuType::RU_484_TONE:
             ehtFields.data.at(1) |= GetRadiotapField(RadiotapHeader::EHT_DATA1_RU_MRU_SIZE,
                                                      RadiotapHeader::EHT_DATA1_RU_MRU_SIZE_484);
             break;
-        case HeRu::RU_996_TONE:
+        case RuType::RU_996_TONE:
             ehtFields.data.at(1) |= GetRadiotapField(RadiotapHeader::EHT_DATA1_RU_MRU_SIZE,
                                                      RadiotapHeader::EHT_DATA1_RU_MRU_SIZE_996);
             break;
-        case HeRu::RU_2x996_TONE:
+        case RuType::RU_2x996_TONE:
             ehtFields.data.at(1) |= GetRadiotapField(RadiotapHeader::EHT_DATA1_RU_MRU_SIZE,
                                                      RadiotapHeader::EHT_DATA1_RU_MRU_SIZE_2x996);
             break;
+        case RuType::RU_4x996_TONE:
+            ehtFields.data.at(1) |= GetRadiotapField(RadiotapHeader::EHT_DATA1_RU_MRU_SIZE,
+                                                     RadiotapHeader::EHT_DATA1_RU_MRU_SIZE_4x996);
+            break;
         default:
             NS_ABORT_MSG("Unexpected RU type");
             break;
         }
         const auto ruIndex =
-            (txVector.GetEhtPpduType() == 1) ? 1 : txVector.GetRu(staId).GetIndex();
+            (txVector.GetEhtPpduType() == 1) ? 1 : WifiRu::GetIndex(txVector.GetRu(staId));
         const auto& ruAllocation = txVector.GetRuAllocation(p20Index);
         ehtFields.data.at(1) |=
             GetRadiotapField(RadiotapHeader::EHT_DATA1_RU_MRU_INDEX, ruIndex) |
@@ -765,7 +783,28 @@
                                  (isLowP80 ? RadiotapHeader::EHT_DATA1_PRIMARY_80_LOWEST
                                            : RadiotapHeader::EHT_DATA1_PRIMARY_80_HIGHEST));
         }
-        // TODO: handle 320 MHz when supported
+        if (channelWidth >= MHz_u{320})
+        {
+            ehtFields.data.at(4) |=
+                RadiotapHeader::EHT_DATA4_RU_ALLOC_CC_1_2_3_KNOWN |
+                RadiotapHeader::EHT_DATA4_RU_ALLOC_CC_2_2_3_KNOWN |
+                GetRadiotapField(RadiotapHeader::EHT_DATA4_RU_ALLOC_CC_1_2_3, ruAllocation.at(8)) |
+                GetRadiotapField(RadiotapHeader::EHT_DATA4_RU_ALLOC_CC_2_2_3, ruAllocation.at(9));
+            ehtFields.data.at(5) =
+                RadiotapHeader::EHT_DATA5_RU_ALLOC_CC_1_2_4_KNOWN |
+                RadiotapHeader::EHT_DATA5_RU_ALLOC_CC_2_2_4_KNOWN |
+                RadiotapHeader::EHT_DATA5_RU_ALLOC_CC_1_2_5_KNOWN |
+                GetRadiotapField(RadiotapHeader::EHT_DATA5_RU_ALLOC_CC_1_2_4, ruAllocation.at(10)) |
+                GetRadiotapField(RadiotapHeader::EHT_DATA5_RU_ALLOC_CC_2_2_4, ruAllocation.at(11)) |
+                GetRadiotapField(RadiotapHeader::EHT_DATA5_RU_ALLOC_CC_1_2_5, ruAllocation.at(12));
+            ehtFields.data.at(6) =
+                RadiotapHeader::EHT_DATA6_RU_ALLOC_CC_2_2_5_KNOWN |
+                RadiotapHeader::EHT_DATA6_RU_ALLOC_CC_1_2_6_KNOWN |
+                RadiotapHeader::EHT_DATA6_RU_ALLOC_CC_2_2_6_KNOWN |
+                GetRadiotapField(RadiotapHeader::EHT_DATA6_RU_ALLOC_CC_2_2_5, ruAllocation.at(13)) |
+                GetRadiotapField(RadiotapHeader::EHT_DATA6_RU_ALLOC_CC_1_2_6, ruAllocation.at(14)) |
+                GetRadiotapField(RadiotapHeader::EHT_DATA6_RU_ALLOC_CC_2_2_6, ruAllocation.at(15));
+        }
         uint32_t userInfo = RadiotapHeader::EHT_USER_INFO_STA_ID_KNOWN |
                             RadiotapHeader::EHT_USER_INFO_MCS_KNOWN |
                             RadiotapHeader::EHT_USER_INFO_NSS_KNOWN_O |
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/helper/wifi-mac-helper.cc ns-3.45/src/wifi/helper/wifi-mac-helper.cc
--- ns-3.44/src/wifi/helper/wifi-mac-helper.cc	2025-03-09 16:55:49.779372700 -0700
+++ ns-3.45/src/wifi/helper/wifi-mac-helper.cc	2025-06-01 20:34:45.609702000 -0700
@@ -149,21 +149,19 @@
         staMac->SetAssocManager(assocManager);
     }
 
-    // create and install the EMLSR Manager if this is an EHT non-AP MLD with EMLSR activated
-    if (BooleanValue emlsrActivated;
-        standard >= WIFI_STANDARD_80211be && staMac && staMac->GetNLinks() > 1 &&
-        device->GetEhtConfiguration()->GetAttributeFailSafe("EmlsrActivated", emlsrActivated) &&
-        emlsrActivated.Get())
+    // create and install the EMLSR Manager if this is an EHT non-AP device with EMLSR activated
+    // and association type set to ML setup
+    if (standard >= WIFI_STANDARD_80211be && staMac &&
+        device->GetEhtConfiguration()->m_emlsrActivated &&
+        staMac->GetAssocType() == WifiAssocType::ML_SETUP)
     {
         auto emlsrManager = m_emlsrManager.Create<EmlsrManager>();
         staMac->SetEmlsrManager(emlsrManager);
     }
 
     // create and install the AP EMLSR Manager if this is an EHT AP MLD with EMLSR activated
-    if (BooleanValue emlsrActivated;
-        standard >= WIFI_STANDARD_80211be && apMac && apMac->GetNLinks() > 1 &&
-        device->GetEhtConfiguration()->GetAttributeFailSafe("EmlsrActivated", emlsrActivated) &&
-        emlsrActivated.Get())
+    if (standard >= WIFI_STANDARD_80211be && apMac && apMac->GetNLinks() > 1 &&
+        device->GetEhtConfiguration()->m_emlsrActivated)
     {
         auto apEmlsrManager = m_apEmlsrManager.Create<ApEmlsrManager>();
         apMac->SetApEmlsrManager(apEmlsrManager);
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/helper/wifi-phy-rx-trace-helper.h ns-3.45/src/wifi/helper/wifi-phy-rx-trace-helper.h
--- ns-3.44/src/wifi/helper/wifi-phy-rx-trace-helper.h	2025-03-09 16:55:49.779372700 -0700
+++ ns-3.45/src/wifi/helper/wifi-phy-rx-trace-helper.h	2025-06-01 20:34:45.609702000 -0700
@@ -669,8 +669,7 @@
      */
     void CountStatisticsForRecord(WifiPhyTraceStatistics& statistics,
                                   const WifiPpduRxRecord& record) const;
-
-}; // class WifiPhyRxTraceSink
+};
 
 // Non-member function declarations
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/addba-extension.cc ns-3.45/src/wifi/model/addba-extension.cc
--- ns-3.44/src/wifi/model/addba-extension.cc	2025-03-09 16:55:49.779372700 -0700
+++ ns-3.45/src/wifi/model/addba-extension.cc	2025-06-01 20:34:45.609702000 -0700
@@ -14,7 +14,9 @@
 void
 AddbaExtension::Print(std::ostream& os) const
 {
-    os << "extBufferSize=" << +m_extParamSet.extBufferSize;
+    os << "ADDBA Extension=[No Fragmentation: " << +m_extParamSet.noFragment
+       << ", HE Fragmentation Operation: " << +m_extParamSet.heFragmentOp
+       << ", Extended Buffer Size: " << +m_extParamSet.extBufferSize << "]";
 }
 
 WifiInformationElementId
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/ap-wifi-mac.cc ns-3.45/src/wifi/model/ap-wifi-mac.cc
--- ns-3.44/src/wifi/model/ap-wifi-mac.cc	2025-03-09 16:55:49.783372600 -0700
+++ ns-3.45/src/wifi/model/ap-wifi-mac.cc	2025-06-01 20:34:45.611702200 -0700
@@ -209,7 +209,8 @@
 }
 
 ApWifiMac::ApWifiMac()
-    : m_enableBeaconGeneration(false)
+    : m_enableBeaconGeneration(false),
+      m_grpAddrBuIndicExp(0)
 {
     NS_LOG_FUNCTION(this);
     m_beaconTxop = CreateObjectWithAttributes<Txop>("AcIndex", StringValue("AC_BEACON"));
@@ -342,6 +343,14 @@
     {
         GetLink(linkId).channelAccessManager->Add(m_beaconTxop);
     }
+
+    // the value 'exp' for the Group Addressed BU Indication Exponent must be such that 2^(exp+1)-1
+    // is at least equal to N-1, where N is the number of links (Sec. 35.3.15.1 of 802.11be D7.0).
+    // The max value for Group Addressed BU Indication Exponent is 3 (encoded in a 2-bit subfield)
+    while ((m_grpAddrBuIndicExp < 3) && ((1 << (m_grpAddrBuIndicExp + 1)) - 1 < GetNLinks() - 1))
+    {
+        ++m_grpAddrBuIndicExp;
+    }
 }
 
 Ptr<WifiMacQueue>
@@ -1139,8 +1148,9 @@
     NS_ASSERT(GetEhtSupported());
     EhtOperation operation;
     auto remoteStationManager = GetWifiRemoteStationManager(linkId);
+    const auto phy = GetWifiPhy(linkId);
 
-    auto maxSpatialStream = GetWifiPhy(linkId)->GetMaxSupportedRxSpatialStreams();
+    auto maxSpatialStream = phy->GetMaxSupportedRxSpatialStreams();
     for (const auto& sta : GetLink(linkId).staList)
     {
         if (remoteStationManager->GetEhtSupported(sta.second))
@@ -1153,6 +1163,14 @@
     }
     operation.SetMaxRxNss(maxSpatialStream, 0, WIFI_EHT_MAX_MCS_INDEX);
     operation.SetMaxTxNss(maxSpatialStream, 0, WIFI_EHT_MAX_MCS_INDEX);
+    operation.m_params.grpBuExp = m_grpAddrBuIndicExp;
+
+    if (const auto bw = phy->GetChannelWidth();
+        (phy->GetPhyBand() == WIFI_PHY_BAND_6GHZ) && (bw == MHz_u{320}))
+    {
+        operation.m_opInfo.emplace(EhtOperation::EhtOpInfo{{.channelWidth = 4}});
+        operation.m_params.opInfoPresent = 1;
+    }
     return operation;
 }
 
@@ -2672,8 +2690,13 @@
 {
     const auto& links = GetLinks();
 
-    // Return the first AID value between 1 and 2007 that is free for all the links
-    for (uint16_t nextAid = 1; nextAid <= 2007; ++nextAid)
+    // if this is an AP MLD, AIDs from 1 to N, where N is 2^(Group_addr_BU_Indic_Exp + 1) - 1
+    // shall not be allocated (see Section 35.3.15.1 of 802.11be D7.0)
+    const uint16_t startAid = links.size() == 1 ? MIN_AID : (1 << (m_grpAddrBuIndicExp + 1));
+
+    // Return the first AID value between min and max that is free for all the links
+    const auto maxAid = GetEhtSupported() ? EHT_MAX_AID : MAX_AID;
+    for (uint16_t nextAid = startAid; nextAid <= maxAid; ++nextAid)
     {
         if (std::none_of(links.cbegin(), links.cend(), [&](auto&& idLinkPair) {
                 return GetStaList(idLinkPair.first).contains(nextAid);
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/ap-wifi-mac.h ns-3.45/src/wifi/model/ap-wifi-mac.h
--- ns-3.44/src/wifi/model/ap-wifi-mac.h	2025-03-09 16:55:49.783372600 -0700
+++ ns-3.45/src/wifi/model/ap-wifi-mac.h	2025-06-01 20:34:45.611702200 -0700
@@ -123,6 +123,9 @@
      */
     uint16_t GetAssociationId(Mac48Address addr, uint8_t linkId) const;
 
+    /// @return the next Association ID to be allocated by the AP
+    uint16_t GetNextAssociationId() const;
+
     /**
      * Get the ID of a link (if any) that has been setup with the station having the given MAC
      * address. The address can be either a link address or an MLD address. In the former case,
@@ -623,11 +626,6 @@
     void DoDispose() override;
     void DoInitialize() override;
 
-    /**
-     * @return the next Association ID to be allocated by the AP
-     */
-    uint16_t GetNextAssociationId() const;
-
     Ptr<Txop> m_beaconTxop;        //!< Dedicated Txop for beacons
     bool m_enableBeaconGeneration; //!< Flag whether beacons are being generated
     Time m_beaconInterval;         //!< Beacon interval
@@ -639,6 +637,7 @@
     Time m_bsrLifetime;            //!< Lifetime of Buffer Status Reports
     /// transition timeout events running for EMLSR clients
     std::map<Mac48Address, EventId> m_transitionTimeoutEvents;
+    uint8_t m_grpAddrBuIndicExp; //!< Group Addressed BU Indication Exponent of EHT Operation IE
     Ptr<ApEmlsrManager> m_apEmlsrManager; ///< AP EMLSR Manager
     Ptr<GcrManager> m_gcrManager;         //!< GCR Manager
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/channel-access-manager.cc ns-3.45/src/wifi/model/channel-access-manager.cc
--- ns-3.44/src/wifi/model/channel-access-manager.cc	2025-03-09 16:55:49.783372600 -0700
+++ ns-3.45/src/wifi/model/channel-access-manager.cc	2025-06-01 20:34:45.612702100 -0700
@@ -29,6 +29,8 @@
 
 NS_OBJECT_ENSURE_REGISTERED(ChannelAccessManager);
 
+const Time ChannelAccessManager::DEFAULT_N_SLOTS_LEFT_MIN_DELAY = MicroSeconds(25);
+
 /**
  * Listener for PHY events. Forwards to ChannelAccessManager.
  * The ChannelAccessManager may handle multiple PHY listeners connected to distinct PHYs,
@@ -88,11 +90,11 @@
         }
     }
 
-    void NotifyRxEndError() override
+    void NotifyRxEndError(const WifiTxVector& txVector) override
     {
         if (m_active)
         {
-            m_cam->NotifyRxEndErrorNow();
+            m_cam->NotifyRxEndErrorNow(txVector);
         }
     }
 
@@ -186,17 +188,30 @@
                           BooleanValue(false),
                           MakeBooleanAccessor(&ChannelAccessManager::m_proactiveBackoff),
                           MakeBooleanChecker())
+            .AddAttribute("ResetBackoffThreshold",
+                          "If no PHY operates on this link for a period greater than this "
+                          "threshold, all the backoffs are reset.",
+                          TimeValue(Time{0}),
+                          MakeTimeAccessor(&ChannelAccessManager::m_resetBackoffThreshold),
+                          MakeTimeChecker())
             .AddAttribute("NSlotsLeft",
-                          "Fire the NSlotsLeftAlert trace source when the backoff counter with "
-                          "the minimum value among all ACs reaches this value or it is started "
-                          "with a value less than this attribute. If this value is zero, the "
-                          "trace source is never fired.",
+                          "The NSlotsLeftAlert trace source is fired when the number of remaining "
+                          "backoff slots for any AC is equal to or less than the value of this "
+                          "attribute. Note that the trace source is fired only if the AC for which "
+                          "the previous condition is met has requested channel access. Also, if "
+                          "the value of this attribute is zero, the trace source is never fired.",
                           UintegerValue(0),
                           MakeUintegerAccessor(&ChannelAccessManager::m_nSlotsLeft),
                           MakeUintegerChecker<uint8_t>())
+            .AddAttribute("NSlotsLeftMinDelay",
+                          "The minimum gap between the end of a medium busy event and the time "
+                          "the NSlotsLeftAlert trace source can be fired.",
+                          TimeValue(ChannelAccessManager::DEFAULT_N_SLOTS_LEFT_MIN_DELAY),
+                          MakeTimeAccessor(&ChannelAccessManager::m_nSlotsLeftMinDelay),
+                          MakeTimeChecker())
             .AddTraceSource("NSlotsLeftAlert",
-                            "The backoff counter of the AC with the given index reached the "
-                            "threshold set through the NSlotsLeft attribute.",
+                            "The number of remaining backoff slots for the AC with the given index "
+                            "reached the threshold set through the NSlotsLeft attribute.",
                             MakeTraceSourceAccessor(&ChannelAccessManager::m_nSlotsLeftCallback),
                             "ns3::ChannelAccessManager::NSlotsLeftCallback");
     return tid;
@@ -210,8 +225,8 @@
       m_lastRxReceivedOk(true),
       m_lastTxEnd(0),
       m_lastSwitchingEnd(0),
-      m_sleeping(false),
-      m_off(false),
+      m_lastSleepEnd(0),
+      m_lastOffEnd(0),
       m_linkId(0)
 {
     NS_LOG_FUNCTION(this);
@@ -259,6 +274,7 @@
 {
     NS_LOG_FUNCTION(this << phy);
 
+    const auto now = Simulator::Now();
     auto phyListener = GetPhyListener(phy);
 
     if (phyListener)
@@ -272,21 +288,32 @@
         // channel access manager; unregister the listener and register again (below) to get
         // updated CCA busy information
         phy->UnregisterListener(phyListener);
+        // we expect that the PHY is reconnected immediately after the other PHY left the link:
+        // reset the start of m_lastNoPhy so as to ignore this event
+        NS_ASSERT(m_lastNoPhy.start == now);
+        NS_ASSERT(m_lastNoPhy.end <= m_lastNoPhy.start);
+        m_lastNoPhy.start = m_lastNoPhy.end;
     }
     else
     {
         phyListener = std::make_shared<PhyListener>(this);
         m_phyListeners.emplace(phy, phyListener);
-        if (!m_phy)
+        if (m_phy)
+        {
+            DeactivatePhyListener(m_phy);
+        }
+        else
         {
             // no PHY operating on this link and no previous PHY listener to reactivate
-            m_lastSwitchingEnd = Simulator::Now();
+            m_lastSwitchingEnd = now;
+            m_lastNoPhy.end = now;
+            if (now - m_lastNoPhy.start > m_resetBackoffThreshold)
+            {
+                ResetAllBackoffs();
+            }
         }
     }
-    if (m_phy)
-    {
-        DeactivatePhyListener(m_phy);
-    }
+
     m_phy = phy; // this is the new active PHY
     ResizeLastBusyStructs();
     phy->RegisterListener(phyListener);
@@ -303,7 +330,10 @@
         // reset m_phy if we are removing listener registered for the active PHY
         if (m_phy == phy)
         {
+            UpdateBackoff();
+            UpdateLastIdlePeriod();
             m_phy = nullptr;
+            m_lastNoPhy.start = Simulator::Now();
         }
     }
 }
@@ -316,10 +346,6 @@
     {
         listener->SetActive(false);
     }
-    if (m_phy == phy)
-    {
-        m_phy = nullptr;
-    }
 }
 
 void
@@ -351,19 +377,27 @@
 Time
 ChannelAccessManager::GetSlot() const
 {
-    return m_phy->GetSlot();
+    if (m_phy)
+    {
+        m_cachedSlot = m_phy->GetSlot();
+    }
+    return m_cachedSlot;
 }
 
 Time
 ChannelAccessManager::GetSifs() const
 {
-    return m_phy->GetSifs();
+    if (m_phy)
+    {
+        m_cachedSifs = m_phy->GetSifs();
+    }
+    return m_cachedSifs;
 }
 
 Time
 ChannelAccessManager::GetEifsNoDifs() const
 {
-    return m_phy->GetSifs() + m_phy->GetAckTxTime();
+    return m_eifsNoDifs;
 }
 
 void
@@ -426,6 +460,17 @@
         m_lastIdle.erase(WIFI_CHANLIST_SECONDARY80);
     }
 
+    if (width >= MHz_u{320})
+    {
+        m_lastBusyEnd.emplace(WIFI_CHANLIST_SECONDARY160, now);
+        m_lastIdle.emplace(WIFI_CHANLIST_SECONDARY160, Timespan{now, now});
+    }
+    else
+    {
+        m_lastBusyEnd.erase(WIFI_CHANLIST_SECONDARY160);
+        m_lastIdle.erase(WIFI_CHANLIST_SECONDARY160);
+    }
+
     // TODO Add conditions for new channel widths as they get supported
 }
 
@@ -476,7 +521,7 @@
 
     // No backoff needed if in sleep mode or off. Checking if m_phy is nullptr is a workaround
     // needed for EMLSR and may be removed in the future
-    if (m_sleeping || m_off || !m_phy)
+    if (!m_phy || m_phy->IsStateSleep() || m_phy->IsStateOff())
     {
         return false;
     }
@@ -537,7 +582,7 @@
     }
     // Deny access if in sleep mode or off. Checking if m_phy is nullptr is a workaround
     // needed for EMLSR and may be removed in the future
-    if (m_sleeping || m_off || !m_phy)
+    if (!m_phy || m_phy->IsStateSleep() || m_phy->IsStateOff())
     {
         return;
     }
@@ -651,39 +696,74 @@
 ChannelAccessManager::AccessTimeout()
 {
     NS_LOG_FUNCTION(this);
+
+    if (!m_phy && Simulator::Now() - m_lastNoPhy.start > m_resetBackoffThreshold)
+    {
+        ResetAllBackoffs();
+        return;
+    }
+
     UpdateBackoff();
     DoGrantDcfAccess();
     DoRestartAccessTimeoutIfNeeded();
 }
 
-Time
-ChannelAccessManager::GetAccessGrantStart(bool ignoreNav) const
+std::multimap<Time, WifiExpectedAccessReason>
+ChannelAccessManager::DoGetAccessGrantStart(bool ignoreNav) const
 {
     NS_LOG_FUNCTION(this << ignoreNav);
+    const auto now = Simulator::Now();
+
+    std::multimap<Time, WifiExpectedAccessReason> ret;
+
+    // an EDCA TXOP is obtained based solely on activity of the primary channel
+    // (Sec. 10.23.2.5 of IEEE 802.11-2020)
+    const auto busyAccessStart = m_lastBusyEnd.at(WIFI_CHANLIST_PRIMARY);
+    ret.emplace(busyAccessStart, WifiExpectedAccessReason::BUSY_END);
+
     auto rxAccessStart = m_lastRx.end;
-    if ((m_lastRx.end <= Simulator::Now()) && !m_lastRxReceivedOk)
+    if ((m_lastRx.end <= now) && !m_lastRxReceivedOk)
     {
         rxAccessStart += GetEifsNoDifs();
     }
-    // an EDCA TXOP is obtained based solely on activity of the primary channel
-    // (Sec. 10.23.2.5 of IEEE 802.11-2020)
-    const auto busyAccessStart = m_lastBusyEnd.at(WIFI_CHANLIST_PRIMARY);
+    ret.emplace(rxAccessStart, WifiExpectedAccessReason::RX_END);
+
+    ret.emplace(m_lastTxEnd, WifiExpectedAccessReason::TX_END);
+
     const auto navAccessStart = ignoreNav ? Time{0} : m_lastNavEnd;
+    ret.emplace(navAccessStart, WifiExpectedAccessReason::NAV_END);
+
+    ret.emplace(m_lastAckTimeoutEnd, WifiExpectedAccessReason::ACK_TIMER_END);
+    ret.emplace(m_lastCtsTimeoutEnd, WifiExpectedAccessReason::CTS_TIMER_END);
+    ret.emplace(m_lastSwitchingEnd, WifiExpectedAccessReason::SWITCHING_END);
+
+    const auto noPhyStart = m_phy ? m_lastNoPhy.end : now;
+    ret.emplace(noPhyStart, WifiExpectedAccessReason::NO_PHY_END);
+
+    ret.emplace(m_lastSleepEnd, WifiExpectedAccessReason::SLEEP_END);
+    ret.emplace(m_lastOffEnd, WifiExpectedAccessReason::OFF_END);
+
+    NS_LOG_INFO("rx access start=" << rxAccessStart.As(Time::US)
+                                   << ", busy access start=" << busyAccessStart.As(Time::US)
+                                   << ", tx access start=" << m_lastTxEnd.As(Time::US)
+                                   << ", nav access start=" << navAccessStart.As(Time::US)
+                                   << ", switching access start=" << m_lastSwitchingEnd.As(Time::US)
+                                   << ", no PHY start=" << noPhyStart.As(Time::US)
+                                   << ", sleep access start=" << m_lastSleepEnd.As(Time::US)
+                                   << ", off access start=" << m_lastOffEnd.As(Time::US));
+    return ret;
+}
+
+Time
+ChannelAccessManager::GetAccessGrantStart(bool ignoreNav) const
+{
+    NS_LOG_FUNCTION(this << ignoreNav);
+
+    auto timeReasonMap = DoGetAccessGrantStart(ignoreNav);
+    NS_ASSERT(!timeReasonMap.empty());
+    const auto accessGrantedStart = timeReasonMap.crbegin()->first;
+    NS_LOG_INFO("access grant start=" << accessGrantedStart.As(Time::US));
 
-    const auto accessGrantedStart = std::max({rxAccessStart,
-                                              busyAccessStart,
-                                              m_lastTxEnd,
-                                              navAccessStart,
-                                              m_lastAckTimeoutEnd,
-                                              m_lastCtsTimeoutEnd,
-                                              m_lastSwitchingEnd});
-
-    NS_LOG_INFO("access grant start="
-                << accessGrantedStart.As(Time::US)
-                << ", rx access start=" << rxAccessStart.As(Time::US) << ", busy access start="
-                << busyAccessStart.As(Time::US) << ", tx access start=" << m_lastTxEnd.As(Time::US)
-                << ", nav access start=" << navAccessStart.As(Time::US)
-                << ", switching access start=" << m_lastSwitchingEnd.As(Time::US));
     return accessGrantedStart + GetSifs();
 }
 
@@ -724,6 +804,70 @@
     return backoffEnd;
 }
 
+WifiExpectedAccessReason
+ChannelAccessManager::GetExpectedAccessWithin(const Time& delay) const
+{
+    NS_LOG_FUNCTION(this << delay.As(Time::US));
+
+    const auto now = Simulator::Now();
+    const auto deadline = now + delay;
+    const auto timeReasonMap = DoGetAccessGrantStart(false);
+    NS_ASSERT(!timeReasonMap.empty());
+    auto accessGrantStart = timeReasonMap.crbegin()->first;
+
+    if (accessGrantStart >= deadline)
+    {
+        // return the earliest reason for which access cannot be granted in time
+        for (const auto& [time, reason] : timeReasonMap)
+        {
+            if (time >= deadline)
+            {
+                NS_ASSERT(reason != WifiExpectedAccessReason::ACCESS_EXPECTED);
+                NS_ASSERT(reason != WifiExpectedAccessReason::NOTHING_TO_TX);
+                NS_ASSERT(reason != WifiExpectedAccessReason::NOT_REQUESTED);
+                NS_ASSERT(reason != WifiExpectedAccessReason::BACKOFF_END);
+                NS_LOG_DEBUG("Access grant start (" << accessGrantStart.As(Time::US)
+                                                    << ") too late for reason " << reason);
+                return reason;
+            }
+        }
+        NS_ABORT_MSG("No reason found that exceeds the deadline!");
+    }
+
+    accessGrantStart += GetSifs();
+    auto reason = WifiExpectedAccessReason::NOT_REQUESTED;
+
+    for (auto txop : m_txops)
+    {
+        if (txop->GetAccessStatus(m_linkId) != Txop::REQUESTED)
+        {
+            continue;
+        }
+
+        if (!txop->HasFramesToTransmit(m_linkId))
+        {
+            if (reason != WifiExpectedAccessReason::BACKOFF_END)
+            {
+                reason = WifiExpectedAccessReason::NOTHING_TO_TX;
+            }
+            continue;
+        }
+
+        reason = WifiExpectedAccessReason::BACKOFF_END;
+        const auto backoffEnd = GetBackoffEndFor(txop, accessGrantStart);
+
+        if (backoffEnd >= now && backoffEnd <= deadline)
+        {
+            NS_LOG_DEBUG("Backoff end for " << txop->GetWifiMacQueue()->GetAc() << " on link "
+                                            << +m_linkId << ": " << backoffEnd.As(Time::US));
+            return WifiExpectedAccessReason::ACCESS_EXPECTED;
+        }
+    }
+
+    NS_LOG_DEBUG("Access grant not expected for reason: " << reason);
+    return reason;
+}
+
 Time
 ChannelAccessManager::GetNavEnd() const
 {
@@ -799,10 +943,14 @@
 
         if (m_nSlotsLeft > 0)
         {
-            if (const auto slots = m_nSlotsLeft * GetSlot(); expectedBackoffDelay > slots)
+            const auto expectedNotifyTime =
+                Max(expectedBackoffEnd - m_nSlotsLeft * GetSlot(),
+                    accessGrantStart - GetSifs() + m_nSlotsLeftMinDelay);
+
+            if (expectedNotifyTime > now)
             {
-                // make the timer expire when the specified number of slots are left
-                expectedBackoffDelay -= slots;
+                // make the timer expire when it's time to notify that the given slots are left
+                expectedBackoffDelay = expectedNotifyTime - now;
             }
             else
             {
@@ -932,13 +1080,14 @@
 }
 
 void
-ChannelAccessManager::NotifyRxEndErrorNow()
+ChannelAccessManager::NotifyRxEndErrorNow(const WifiTxVector& txVector)
 {
     NS_LOG_FUNCTION(this);
     NS_LOG_DEBUG("rx end error");
     // we expect the PHY to notify us of the start of a CCA busy period, if needed
     m_lastRx.end = Simulator::Now();
     m_lastRxReceivedOk = false;
+    m_eifsNoDifs = m_phy->GetSifs() + GetEstimatedAckTxTime(txVector);
 }
 
 void
@@ -1070,6 +1219,7 @@
     m_lastNavEnd = std::min(m_lastNavEnd, now);
     m_lastAckTimeoutEnd = std::min(m_lastAckTimeoutEnd, now);
     m_lastCtsTimeoutEnd = std::min(m_lastCtsTimeoutEnd, now);
+    m_lastNoPhy.end = std::min(m_lastNoPhy.end, now);
 
     InitLastBusyStructs();
 }
@@ -1105,7 +1255,6 @@
 ChannelAccessManager::NotifySleepNow()
 {
     NS_LOG_FUNCTION(this);
-    m_sleeping = true;
     // Reset backoffs
     ResetAllBackoffs();
     m_feManager->NotifySleepNow();
@@ -1119,7 +1268,6 @@
 ChannelAccessManager::NotifyOffNow()
 {
     NS_LOG_FUNCTION(this);
-    m_off = true;
     // Cancel timeout
     if (m_accessTimeout.IsPending())
     {
@@ -1137,7 +1285,7 @@
 ChannelAccessManager::NotifyWakeupNow()
 {
     NS_LOG_FUNCTION(this);
-    m_sleeping = false;
+    m_lastSleepEnd = Simulator::Now();
     for (auto txop : m_txops)
     {
         ResetBackoff(txop);
@@ -1149,7 +1297,7 @@
 ChannelAccessManager::NotifyOnNow()
 {
     NS_LOG_FUNCTION(this);
-    m_off = false;
+    m_lastOffEnd = Simulator::Now();
     for (auto txop : m_txops)
     {
         ResetBackoff(txop);
@@ -1225,7 +1373,12 @@
 ChannelAccessManager::UpdateLastIdlePeriod()
 {
     NS_LOG_FUNCTION(this);
-    Time idleStart = std::max({m_lastTxEnd, m_lastRx.end, m_lastSwitchingEnd});
+    Time idleStart = std::max({m_lastTxEnd,
+                               m_lastRx.end,
+                               m_lastSwitchingEnd,
+                               m_lastNoPhy.end,
+                               m_lastSleepEnd,
+                               m_lastOffEnd});
     Time now = Simulator::Now();
 
     if (idleStart >= now)
@@ -1248,4 +1401,43 @@
     }
 }
 
+std::ostream&
+operator<<(std::ostream& os, const WifiExpectedAccessReason& reason)
+{
+    switch (reason)
+    {
+    case WifiExpectedAccessReason::ACCESS_EXPECTED:
+        return (os << "ACCESS EXPECTED");
+    case WifiExpectedAccessReason::NOT_REQUESTED:
+        return (os << "NOT_REQUESTED");
+    case WifiExpectedAccessReason::NOTHING_TO_TX:
+        return (os << "NOTHING_TO_TX");
+    case WifiExpectedAccessReason::RX_END:
+        return (os << "RX_END");
+    case WifiExpectedAccessReason::BUSY_END:
+        return (os << "BUSY_END");
+    case WifiExpectedAccessReason::TX_END:
+        return (os << "TX_END");
+    case WifiExpectedAccessReason::NAV_END:
+        return (os << "NAV_END");
+    case WifiExpectedAccessReason::ACK_TIMER_END:
+        return (os << "ACK_TIMER_END");
+    case WifiExpectedAccessReason::CTS_TIMER_END:
+        return (os << "CTS_TIMER_END");
+    case WifiExpectedAccessReason::SWITCHING_END:
+        return (os << "SWITCHING_END");
+    case WifiExpectedAccessReason::NO_PHY_END:
+        return (os << "NO_PHY_END");
+    case WifiExpectedAccessReason::SLEEP_END:
+        return (os << "SLEEP_END");
+    case WifiExpectedAccessReason::OFF_END:
+        return (os << "OFF_END");
+    case WifiExpectedAccessReason::BACKOFF_END:
+        return (os << "BACKOFF_END");
+    default:
+        NS_ABORT_MSG("Unknown expected access reason");
+        return (os << "Unknown");
+    }
+}
+
 } // namespace ns3
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/channel-access-manager.h ns-3.45/src/wifi/model/channel-access-manager.h
--- ns-3.44/src/wifi/model/channel-access-manager.h	2025-03-09 16:55:49.783372600 -0700
+++ ns-3.45/src/wifi/model/channel-access-manager.h	2025-06-01 20:34:45.612702100 -0700
@@ -33,9 +33,34 @@
 class PhyListener;
 class Txop;
 class FrameExchangeManager;
+class WifiTxVector;
 enum AcIndex : uint8_t; // opaque enum declaration
 
 /**
+ * @brief Enumeration values for the outcome of the check whether channel access is expected to be
+ *        gained within a given time interval
+ * @see ChannelAccessManager::GetExpectedAccessWithin
+ * @ingroup wifi
+ */
+enum class WifiExpectedAccessReason : uint8_t
+{
+    ACCESS_EXPECTED = 0,
+    NOT_REQUESTED,
+    NOTHING_TO_TX,
+    RX_END,
+    BUSY_END,
+    TX_END,
+    NAV_END,
+    ACK_TIMER_END,
+    CTS_TIMER_END,
+    SWITCHING_END,
+    NO_PHY_END,
+    SLEEP_END,
+    OFF_END,
+    BACKOFF_END
+};
+
+/**
  * @brief Manage a set of ns3::Txop
  * @ingroup wifi
  *
@@ -171,6 +196,21 @@
     Time GetBackoffEndFor(Ptr<Txop> txop) const;
 
     /**
+     * Check whether channel access is expected to be granted within the given delay. If it is,
+     * ACCESS_EXPECTED is returned. If channel access is not expected to be granted because no
+     * AC has requested channel access, NOT_REQUESTED is returned. If no AC has frames to send,
+     * NOTHING_TO_TX is returned. If any of the times returned by DoGetAccessGrantStart() exceeds
+     * the given deadline, the reason corresponding to the earliest of such times is returned.
+     * Otherwise, it means that access cannot be granted in time due to the backoff slots to wait
+     * and BACKOFF_END is returned.
+     *
+     * @see DoGetAccessGrantStart
+     * @param delay the given delay
+     * @return ACCESS_EXPECTED or the reason why channel access is not expected to be gained in time
+     */
+    WifiExpectedAccessReason GetExpectedAccessWithin(const Time& delay) const;
+
+    /**
      * @return the time until the NAV has been set
      */
     Time GetNavEnd() const;
@@ -236,8 +276,10 @@
     /**
      * Notify the Txop that a packet reception was just
      * completed unsuccessfuly.
+     *
+     * @param txVector the TXVECTOR used for transmission
      */
-    void NotifyRxEndErrorNow();
+    void NotifyRxEndErrorNow(const WifiTxVector& txVector);
     /**
      * @param duration expected duration of transmission
      *
@@ -408,6 +450,20 @@
     Time GetBackoffEndFor(Ptr<Txop> txop, Time accessGrantStart) const;
 
     /**
+     * Return a map containing (Time, WifiExpectedAccessReason) pairs sorted in increasing order
+     * of times. For each of the events preventing channel access (e.g., medium busy, RX state,
+     * TX state, etc), a pair is present in the map indicating the latest known time for which
+     * channel access cannot be granted due to that event. Therefore, the returned map does not
+     * contain a pair for some WifiExpectedAccessReason enum values (ACCESS_EXPECTED, NOTHING_TO_TX,
+     * NOT_REQUESTED and BACKOFF_END).
+     *
+     * @param ignoreNav whether NAV should be ignored
+     * @return a map containing (Time, WifiExpectedAccessReason) pairs sorted in increasing order
+     *         of times
+     */
+    std::multimap<Time, WifiExpectedAccessReason> DoGetAccessGrantStart(bool ignoreNav) const;
+
+    /**
      * This method determines whether the medium has been idle during a period (of
      * non-null duration) immediately preceding the time this method is called. If
      * so, the last idle start time and end time for each channel type are updated.
@@ -480,9 +536,12 @@
     std::map<WifiChannelListType, Timespan>
         m_lastIdle;               //!< the last idle start and end time for each channel type
     Time m_lastSwitchingEnd;      //!< the last switching end time
-    bool m_sleeping;              //!< flag whether it is in sleeping state
-    bool m_off;                   //!< flag whether it is in off state
+    Time m_lastSleepEnd;          //!< the last sleep end time
+    Time m_lastOffEnd;            //!< the last off end time
     Time m_eifsNoDifs;            //!< EIFS no DIFS time
+    Timespan m_lastNoPhy;         //!< the last start and end time no PHY was operating on the link
+    mutable Time m_cachedSifs;    //!< cached value for SIFS, to be only used without a PHY
+    mutable Time m_cachedSlot;    //!< cached value for slot, to be only used without a PHY
     EventId m_accessTimeout;      //!< the access timeout ID
     bool m_generateBackoffOnNoTx; //!< whether the backoff should be invoked when the AC gains the
                                   //!< right to start a TXOP but it does not transmit any frame
@@ -490,6 +549,8 @@
                                   //!< provided that the queue is not actually empty
     bool m_proactiveBackoff; //!< whether a new backoff value is generated when a CCA busy period
                              //!< starts and the backoff counter is zero
+    Time m_resetBackoffThreshold; //!< if no PHY operates on a link for a period greater than this
+                                  //!< threshold, the backoff on that link is reset
 
     /// Information associated with each PHY that is going to operate on another EMLSR link
     struct EmlsrLinkSwitchInfo
@@ -511,6 +572,11 @@
     uint8_t m_nSlotsLeft;                  //!< fire the NSlotsLeftAlert trace source when the
                                            //!< backoff counter with the minimum value among all
                                            //!< ACs reaches this value
+    Time m_nSlotsLeftMinDelay; //!< the minimum gap between the end of a medium busy event and
+                               //!< the time the NSlotsLeftAlert trace source can be fired
+
+    /// default value for the NSlotsLeftMinDelay attribute, corresponds to a PIFS in 5GHz/6GHz bands
+    static const Time DEFAULT_N_SLOTS_LEFT_MIN_DELAY;
 
     /**
      * TracedCallback signature for NSlotsLeft alerts.
@@ -527,6 +593,15 @@
     NSlotsLeftTracedCallback m_nSlotsLeftCallback; //!< traced callback for NSlotsLeft alerts
 };
 
+/**
+ * @brief Stream insertion operator.
+ *
+ * @param os the stream
+ * @param reason the expected access reason
+ * @return a reference to the stream
+ */
+std::ostream& operator<<(std::ostream& os, const WifiExpectedAccessReason& reason);
+
 } // namespace ns3
 
 #endif /* CHANNEL_ACCESS_MANAGER_H */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/ctrl-headers.cc ns-3.45/src/wifi/model/ctrl-headers.cc
--- ns-3.44/src/wifi/model/ctrl-headers.cc	2025-03-09 16:55:49.783372600 -0700
+++ ns-3.45/src/wifi/model/ctrl-headers.cc	2025-06-01 20:34:45.612702100 -0700
@@ -1187,7 +1187,7 @@
       m_ulFecCodingType(false),
       m_ulMcs(0),
       m_ulDcm(false),
-      m_ps160(true),
+      m_ps160(false),
       m_ulTargetRssi(0),
       m_triggerType(triggerType),
       m_basicTriggerDependentUserInfo(0)
@@ -1391,6 +1391,9 @@
 void
 CtrlTriggerUserInfoField::SetAid12(uint16_t aid)
 {
+    NS_ASSERT_MSG((m_variant == TriggerFrameVariant::HE) || (aid != AID_SPECIAL_USER),
+                  std::to_string(AID_SPECIAL_USER)
+                      << " is reserved for Special User Info Field in EHT variant");
     m_aid12 = aid & 0x0fff;
 }
 
@@ -1413,95 +1416,116 @@
 }
 
 void
-CtrlTriggerUserInfoField::SetRuAllocation(HeRu::RuSpec ru)
+CtrlTriggerUserInfoField::SetRuAllocation(WifiRu::RuSpec ru)
 {
-    NS_ABORT_MSG_IF(ru.GetIndex() == 0, "Valid indices start at 1");
+    const auto ruIndex = WifiRu::GetIndex(ru);
+    const auto ruType = WifiRu::GetRuType(ru);
+    NS_ABORT_MSG_IF(ruIndex == 0, "Valid indices start at 1");
     NS_ABORT_MSG_IF(m_triggerType == TriggerFrameType::MU_RTS_TRIGGER,
                     "SetMuRtsRuAllocation() must be used for MU-RTS");
 
-    switch (ru.GetRuType())
+    switch (ruType)
     {
-    case HeRu::RU_26_TONE:
-        m_ruAllocation = ru.GetIndex() - 1;
+    case RuType::RU_26_TONE:
+        m_ruAllocation = ruIndex - 1;
+        NS_ABORT_MSG_IF(!WifiRu::IsHe(ru) && (m_ruAllocation == 18), "Reserved value.");
+        NS_ASSERT(m_ruAllocation <= 36);
         break;
-    case HeRu::RU_52_TONE:
-        m_ruAllocation = ru.GetIndex() + 36;
+    case RuType::RU_52_TONE:
+        m_ruAllocation = ruIndex + 36;
+        NS_ASSERT(m_ruAllocation <= 52);
         break;
-    case HeRu::RU_106_TONE:
-        m_ruAllocation = ru.GetIndex() + 52;
+    case RuType::RU_106_TONE:
+        m_ruAllocation = ruIndex + 52;
+        NS_ASSERT(m_ruAllocation <= 60);
         break;
-    case HeRu::RU_242_TONE:
-        m_ruAllocation = ru.GetIndex() + 60;
+    case RuType::RU_242_TONE:
+        m_ruAllocation = ruIndex + 60;
+        NS_ASSERT(m_ruAllocation <= 64);
         break;
-    case HeRu::RU_484_TONE:
-        m_ruAllocation = ru.GetIndex() + 64;
+    case RuType::RU_484_TONE:
+        m_ruAllocation = ruIndex + 64;
+        NS_ASSERT(m_ruAllocation <= 67);
         break;
-    case HeRu::RU_996_TONE:
+    case RuType::RU_996_TONE:
         m_ruAllocation = 67;
         break;
-    case HeRu::RU_2x996_TONE:
+    case RuType::RU_2x996_TONE:
         m_ruAllocation = 68;
         break;
+    case RuType::RU_4x996_TONE:
+        m_ruAllocation = 69;
+        break;
     default:
         NS_FATAL_ERROR("RU type unknown.");
         break;
     }
 
-    NS_ABORT_MSG_IF(m_ruAllocation > 68, "Reserved value.");
+    NS_ABORT_MSG_IF(m_ruAllocation > 69, "Reserved value.");
+
+    auto b0 = (WifiRu::IsHe(ru) && !std::get<HeRu::RuSpec>(ru).GetPrimary80MHz()) ||
+              (WifiRu::IsEht(ru) && !std::get<EhtRu::RuSpec>(ru).GetPrimary80MHzOrLower80MHz());
+    m_ps160 = (WifiRu::IsEht(ru) && !std::get<EhtRu::RuSpec>(ru).GetPrimary160MHz());
 
     m_ruAllocation <<= 1;
-    if (!ru.GetPrimary80MHz())
+    if (b0)
     {
         m_ruAllocation++;
     }
 }
 
-HeRu::RuSpec
+WifiRu::RuSpec
 CtrlTriggerUserInfoField::GetRuAllocation() const
 {
     NS_ABORT_MSG_IF(m_triggerType == TriggerFrameType::MU_RTS_TRIGGER,
                     "GetMuRtsRuAllocation() must be used for MU-RTS");
 
-    HeRu::RuType ruType;
+    RuType ruType;
     std::size_t index;
 
-    bool primary80MHz = ((m_ruAllocation & 0x01) == 0);
+    const auto primaryOrLower80MHz = ((m_ruAllocation & 0x01) == 0);
 
     uint8_t val = m_ruAllocation >> 1;
 
     if (val < 37)
     {
-        ruType = HeRu::RU_26_TONE;
+        ruType = RuType::RU_26_TONE;
         index = val + 1;
     }
     else if (val < 53)
     {
-        ruType = HeRu::RU_52_TONE;
+        ruType = RuType::RU_52_TONE;
         index = val - 36;
     }
     else if (val < 61)
     {
-        ruType = HeRu::RU_106_TONE;
+        ruType = RuType::RU_106_TONE;
         index = val - 52;
     }
     else if (val < 65)
     {
-        ruType = HeRu::RU_242_TONE;
+        ruType = RuType::RU_242_TONE;
         index = val - 60;
     }
     else if (val < 67)
     {
-        ruType = HeRu::RU_484_TONE;
+        ruType = RuType::RU_484_TONE;
         index = val - 64;
     }
     else if (val == 67)
     {
-        ruType = HeRu::RU_996_TONE;
+        ruType = RuType::RU_996_TONE;
         index = 1;
     }
     else if (val == 68)
     {
-        ruType = HeRu::RU_2x996_TONE;
+        ruType = RuType::RU_2x996_TONE;
+        index = 1;
+    }
+    else if (val == 69)
+    {
+        NS_ASSERT(m_variant == TriggerFrameVariant::EHT);
+        ruType = RuType::RU_4x996_TONE;
         index = 1;
     }
     else
@@ -1509,7 +1533,12 @@
         NS_FATAL_ERROR("Reserved value.");
     }
 
-    return HeRu::RuSpec(ruType, index, primary80MHz);
+    if (m_variant == TriggerFrameVariant::EHT)
+    {
+        return EhtRu::RuSpec{ruType, index, !m_ps160, primaryOrLower80MHz};
+    }
+
+    return HeRu::RuSpec{ruType, index, primaryOrLower80MHz};
 }
 
 void
@@ -1518,17 +1547,22 @@
     NS_ABORT_MSG_IF(m_triggerType != TriggerFrameType::MU_RTS_TRIGGER,
                     "SetMuRtsRuAllocation() can only be used for MU-RTS");
     NS_ABORT_MSG_IF(
-        value < 61 || value > 68,
+        value < 61 || value > 69,
         "Value "
             << +value
             << " is not admitted for B7-B1 of the RU Allocation subfield of MU-RTS Trigger Frames");
 
     m_ruAllocation = (value << 1);
-    if (value == 68)
+    if (value >= 68)
     {
-        // set B0 for 160 MHz and 80+80 MHz indication
+        // set B0 for 160 MHz, 80+80 MHz and 320 MHz indication
         m_ruAllocation++;
     }
+    if (value == 69)
+    {
+        // set 160 for 320 MHz indication
+        m_ps160 = true;
+    }
 }
 
 uint8_t
@@ -1538,7 +1572,7 @@
                     "GetMuRtsRuAllocation() can only be used for MU-RTS");
     uint8_t value = (m_ruAllocation >> 1);
     NS_ABORT_MSG_IF(
-        value < 61 || value > 68,
+        value < 61 || value > 69,
         "Value "
             << +value
             << " is not admitted for B7-B1 of the RU Allocation subfield of MU-RTS Trigger Frames");
@@ -1727,6 +1761,176 @@
     return m_muBarTriggerDependentUserInfo;
 }
 
+/*****************************************
+ * Trigger frame - Special User Info field
+ *****************************************/
+
+CtrlTriggerSpecialUserInfoField::CtrlTriggerSpecialUserInfoField(TriggerFrameType triggerType)
+    : m_triggerType(triggerType)
+{
+}
+
+CtrlTriggerSpecialUserInfoField&
+CtrlTriggerSpecialUserInfoField::operator=(const CtrlTriggerSpecialUserInfoField& other)
+{
+    // check for self-assignment
+    if (&other == this)
+    {
+        return *this;
+    }
+
+    m_triggerType = other.m_triggerType;
+    m_ulBwExt = other.m_ulBwExt;
+    m_muBarTriggerDependentUserInfo = other.m_muBarTriggerDependentUserInfo;
+
+    return *this;
+}
+
+uint32_t
+CtrlTriggerSpecialUserInfoField::GetSerializedSize() const
+{
+    uint32_t size = 0;
+    size += 5; // User Info (excluding Trigger Dependent User Info)
+
+    switch (m_triggerType)
+    {
+    case TriggerFrameType::BASIC_TRIGGER:
+    case TriggerFrameType::BFRP_TRIGGER:
+        size += 1;
+        break;
+    case TriggerFrameType::MU_BAR_TRIGGER:
+        size +=
+            m_muBarTriggerDependentUserInfo.GetSerializedSize(); // BAR Control and BAR Information
+        break;
+    default:;
+        // The Trigger Dependent User Info subfield is not present in the other variants
+    }
+
+    return size;
+}
+
+Buffer::Iterator
+CtrlTriggerSpecialUserInfoField::Serialize(Buffer::Iterator start) const
+{
+    NS_ABORT_MSG_IF(m_triggerType == TriggerFrameType::BFRP_TRIGGER,
+                    "BFRP Trigger frame is not supported");
+    NS_ABORT_MSG_IF(m_triggerType == TriggerFrameType::GCR_MU_BAR_TRIGGER,
+                    "GCR-MU-BAR Trigger frame is not supported");
+    NS_ABORT_MSG_IF(m_triggerType == TriggerFrameType::NFRP_TRIGGER,
+                    "NFRP Trigger frame is not supported");
+
+    Buffer::Iterator i = start;
+
+    uint32_t userInfo = 0;
+    userInfo |= (AID_SPECIAL_USER & 0x0fff);
+    userInfo |= (static_cast<uint32_t>(m_ulBwExt) << 15);
+    i.WriteHtolsbU32(userInfo);
+    i.WriteU8(0);
+    // TODO: EHT Spatial Reuse and U-SIG Disregard And Validate
+
+    if (m_triggerType == TriggerFrameType::BASIC_TRIGGER)
+    {
+        // The length is one octet and all the subfields are reserved in a Basic Trigger frame and
+        // in a BFRP Trigger frame
+        i.WriteU8(0);
+    }
+    else if (m_triggerType == TriggerFrameType::MU_BAR_TRIGGER)
+    {
+        m_muBarTriggerDependentUserInfo.Serialize(i);
+        i.Next(m_muBarTriggerDependentUserInfo.GetSerializedSize());
+    }
+
+    return i;
+}
+
+Buffer::Iterator
+CtrlTriggerSpecialUserInfoField::Deserialize(Buffer::Iterator start)
+{
+    NS_ABORT_MSG_IF(m_triggerType == TriggerFrameType::BFRP_TRIGGER,
+                    "BFRP Trigger frame is not supported");
+    NS_ABORT_MSG_IF(m_triggerType == TriggerFrameType::GCR_MU_BAR_TRIGGER,
+                    "GCR-MU-BAR Trigger frame is not supported");
+    NS_ABORT_MSG_IF(m_triggerType == TriggerFrameType::NFRP_TRIGGER,
+                    "NFRP Trigger frame is not supported");
+
+    Buffer::Iterator i = start;
+
+    const auto userInfo = i.ReadLsbtohU32();
+    i.ReadU8();
+    // TODO: EHT Spatial Reuse and U-SIG Disregard And Validate
+
+    const uint16_t aid12 = userInfo & 0x0fff;
+    NS_ABORT_MSG_IF(aid12 != AID_SPECIAL_USER, "Failed to deserialize Special User Info field");
+    m_ulBwExt = (userInfo >> 15) & 0x03;
+
+    if (m_triggerType == TriggerFrameType::BASIC_TRIGGER)
+    {
+        i.ReadU8();
+    }
+    else if (m_triggerType == TriggerFrameType::MU_BAR_TRIGGER)
+    {
+        const auto len = m_muBarTriggerDependentUserInfo.Deserialize(i);
+        i.Next(len);
+    }
+
+    return i;
+}
+
+TriggerFrameType
+CtrlTriggerSpecialUserInfoField::GetType() const
+{
+    return m_triggerType;
+}
+
+void
+CtrlTriggerSpecialUserInfoField::SetUlBwExt(MHz_u bw)
+{
+    switch (static_cast<uint16_t>(bw))
+    {
+    case 20:
+    case 40:
+    case 80:
+        m_ulBwExt = 0;
+        break;
+    case 160:
+        m_ulBwExt = 1;
+        break;
+    case 320:
+        m_ulBwExt = 2;
+        // TODO: differentiate channelization 1 from channelization 2
+        break;
+    default:
+        NS_FATAL_ERROR("Bandwidth value not allowed.");
+        break;
+    }
+}
+
+uint8_t
+CtrlTriggerSpecialUserInfoField::GetUlBwExt() const
+{
+    return m_ulBwExt;
+}
+
+void
+CtrlTriggerSpecialUserInfoField::SetMuBarTriggerDepUserInfo(const CtrlBAckRequestHeader& bar)
+{
+    NS_ABORT_MSG_IF(m_triggerType != TriggerFrameType::MU_BAR_TRIGGER,
+                    "Not a MU-BAR Trigger frame");
+    NS_ABORT_MSG_IF(bar.GetType().m_variant != BlockAckReqType::COMPRESSED &&
+                        bar.GetType().m_variant != BlockAckReqType::MULTI_TID,
+                    "BAR Control indicates it is neither the Compressed nor the Multi-TID variant");
+    m_muBarTriggerDependentUserInfo = bar;
+}
+
+const CtrlBAckRequestHeader&
+CtrlTriggerSpecialUserInfoField::GetMuBarTriggerDepUserInfo() const
+{
+    NS_ABORT_MSG_IF(m_triggerType != TriggerFrameType::MU_BAR_TRIGGER,
+                    "Not a MU-BAR Trigger frame");
+
+    return m_muBarTriggerDependentUserInfo;
+}
+
 /***********************************
  *       Trigger frame
  ***********************************/
@@ -1750,6 +1954,7 @@
 CtrlTriggerHeader::CtrlTriggerHeader(TriggerFrameType type, const WifiTxVector& txVector)
     : CtrlTriggerHeader()
 {
+    m_triggerType = type;
     NS_ABORT_MSG_IF(m_triggerType == TriggerFrameType::MU_RTS_TRIGGER,
                     "This constructor cannot be used for MU-RTS");
 
@@ -1766,7 +1971,13 @@
                      << txVector.GetPreambleType());
     }
 
-    m_triggerType = type;
+    // special user is always present if solicited TB PPDU format is EHT or later
+    if (txVector.GetModulationClass() >= WifiModulationClass::WIFI_MOD_CLASS_EHT)
+    {
+        NS_ASSERT(m_variant == TriggerFrameVariant::EHT);
+        m_specialUserInfoField.emplace(m_triggerType);
+    }
+
     SetUlBandwidth(txVector.GetChannelWidth());
     SetUlLength(txVector.GetLength());
     const auto gi = txVector.GetGuardInterval().GetNanoSeconds();
@@ -1778,6 +1989,7 @@
     {
         m_giAndLtfType = 2;
     }
+
     for (auto& userInfo : txVector.GetHeMuUserInfoMap())
     {
         CtrlTriggerUserInfoField& ui = AddUserInfoField();
@@ -1811,6 +2023,8 @@
     m_apTxPower = trigger.m_apTxPower;
     m_ulSpatialReuse = trigger.m_ulSpatialReuse;
     m_padding = trigger.m_padding;
+    m_specialUserInfoField.reset();
+    m_specialUserInfoField = trigger.m_specialUserInfoField;
     m_userInfoFields.clear();
     m_userInfoFields = trigger.m_userInfoFields;
     return *this;
@@ -1850,6 +2064,11 @@
     NS_ABORT_MSG_IF(!m_userInfoFields.empty(),
                     "Cannot change Common Info field variant if User Info fields are present");
     m_variant = variant;
+    // special user is always present if User Info field variant is EHT or later
+    if (!m_specialUserInfoField && (m_variant >= TriggerFrameVariant::EHT))
+    {
+        m_specialUserInfoField.emplace(m_triggerType);
+    }
 }
 
 TriggerFrameVariant
@@ -1870,6 +2089,12 @@
         size += 4;
     }
 
+    if (m_specialUserInfoField)
+    {
+        NS_ASSERT(m_variant == TriggerFrameVariant::EHT);
+        size += m_specialUserInfoField->GetSerializedSize();
+    }
+
     for (auto& ui : m_userInfoFields)
     {
         size += ui.GetSerializedSize();
@@ -1909,6 +2134,12 @@
 
     i.WriteHtolsbU64(commonInfo);
 
+    if (m_specialUserInfoField)
+    {
+        NS_ASSERT(m_variant == TriggerFrameVariant::EHT);
+        i = m_specialUserInfoField->Serialize(i);
+    }
+
     for (auto& ui : m_userInfoFields)
     {
         i = ui.Serialize(i);
@@ -1947,6 +2178,18 @@
     NS_ABORT_MSG_IF(m_triggerType == TriggerFrameType::NFRP_TRIGGER,
                     "NFRP Trigger frame is not supported");
 
+    if (m_variant == TriggerFrameVariant::EHT)
+    {
+        m_specialUserInfoField.reset();
+        const auto userInfo = i.ReadLsbtohU16();
+        i.Prev(2);
+        if (const auto aid12 = userInfo & 0x0fff; aid12 == AID_SPECIAL_USER)
+        {
+            m_specialUserInfoField.emplace(m_triggerType);
+            i = m_specialUserInfoField->Deserialize(i);
+        }
+    }
+
     while (i.GetRemainingSize() >= 2)
     {
         // read the first 2 bytes to check if we encountered the Padding field
@@ -2125,17 +2368,35 @@
         m_ulBandwidth = 2;
         break;
     case 160:
+    case 320:
         m_ulBandwidth = 3;
         break;
     default:
         NS_FATAL_ERROR("Bandwidth value not allowed.");
         break;
     }
+    if (bw > MHz_u{160})
+    {
+        NS_ASSERT(m_specialUserInfoField);
+    }
+    if (m_specialUserInfoField)
+    {
+        NS_ASSERT(m_variant == TriggerFrameVariant::EHT);
+        m_specialUserInfoField->SetUlBwExt(bw);
+    }
 }
 
 MHz_u
 CtrlTriggerHeader::GetUlBandwidth() const
 {
+    if (m_specialUserInfoField)
+    {
+        NS_ASSERT(m_variant == TriggerFrameVariant::EHT);
+        if (m_specialUserInfoField->GetUlBwExt() > 1)
+        {
+            return MHz_u{320};
+        }
+    }
     return (1 << m_ulBandwidth) * MHz_u{20};
 }
 
@@ -2243,8 +2504,10 @@
 CtrlTriggerHeader
 CtrlTriggerHeader::GetCommonInfoField() const
 {
-    // make a copy of this Trigger Frame and remove the User Info fields from the copy
+    // make a copy of this Trigger Frame and remove the User Info fields (including the Special User
+    // Info field) from the copy
     CtrlTriggerHeader trigger(*this);
+    trigger.m_specialUserInfoField.reset();
     trigger.m_userInfoFields.clear();
     return trigger;
 }
@@ -2352,11 +2615,10 @@
 
     // check that allocated RUs do not overlap
     // TODO This is not a problem in case of UL MU-MIMO
-    std::vector<HeRu::RuSpec> prevRus;
-
+    std::vector<WifiRu::RuSpec> prevRus;
     for (auto& ui : m_userInfoFields)
     {
-        if (HeRu::DoesOverlap(GetUlBandwidth(), ui.GetRuAllocation(), prevRus))
+        if (WifiRu::DoesOverlap(GetUlBandwidth(), ui.GetRuAllocation(), prevRus))
         {
             return false;
         }
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/ctrl-headers.h ns-3.45/src/wifi/model/ctrl-headers.h
--- ns-3.44/src/wifi/model/ctrl-headers.h	2025-03-09 16:55:49.783372600 -0700
+++ ns-3.45/src/wifi/model/ctrl-headers.h	2025-06-01 20:34:45.612702100 -0700
@@ -11,12 +11,13 @@
 
 #include "block-ack-type.h"
 #include "wifi-phy-common.h"
+#include "wifi-ru.h"
 
-#include "ns3/he-ru.h"
 #include "ns3/header.h"
 #include "ns3/mac48-address.h"
 
 #include <list>
+#include <optional>
 #include <vector>
 
 namespace ns3
@@ -674,14 +675,14 @@
      *
      * @param ru the RU this User Info field is allocating
      */
-    void SetRuAllocation(HeRu::RuSpec ru);
+    void SetRuAllocation(WifiRu::RuSpec ru);
     /**
      * Get the RU specified by the RU Allocation subfield.
      * This method cannot be called on MU-RTS Trigger Frames (call GetMuRtsRuAllocation instead).
      *
      * @return the RU this User Info field is allocating
      */
-    HeRu::RuSpec GetRuAllocation() const;
+    WifiRu::RuSpec GetRuAllocation() const;
     /**
      * Set the RU Allocation subfield based on the given value for the B7-B1 bits.
      * This method can only be called on MU-RTS Trigger Frames.
@@ -912,6 +913,107 @@
 
 /**
  * @ingroup wifi
+ * @brief Special User Info field of Trigger frames.
+ *
+ * Trigger frames have been extended by 802.11be amendment and may include one Special User Info
+ * field for a solicited EHT TB PPDU (see Section 9.3.1.22.3 of D7.0). The Special User Info field
+ * is located immediately after the Common Info field, it does not carry user specific information
+ * but carries extended common information not provided in the Common Info field.
+ */
+class CtrlTriggerSpecialUserInfoField
+{
+  public:
+    /**
+     * Constructor
+     *
+     * @param triggerType the Trigger frame type
+     */
+    explicit CtrlTriggerSpecialUserInfoField(TriggerFrameType triggerType);
+
+    /**
+     * Copy assignment operator.
+     *
+     * @param other the Special User Info field to copy
+     * @return a reference to the copied object
+     *
+     * Checks that the given Special User Info fields is included in the same type of Trigger Frame.
+     */
+    CtrlTriggerSpecialUserInfoField& operator=(const CtrlTriggerSpecialUserInfoField& other);
+
+    /**
+     * Get the expected size of this Special User Info field
+     *
+     * @return the expected size of this Special User Info field.
+     */
+    uint32_t GetSerializedSize() const;
+
+    /**
+     * Serialize the Special User Info field to the given buffer.
+     *
+     * @param start an iterator which points to where the header should
+     *        be written
+     * @return Buffer::Iterator to the next available buffer
+     */
+    Buffer::Iterator Serialize(Buffer::Iterator start) const;
+
+    /**
+     * Deserialize the Special User Info field from the given buffer.
+     *
+     * @param start an iterator which points to where the header should
+     *        read from
+     * @return Buffer::Iterator to the next available buffer
+     */
+    Buffer::Iterator Deserialize(Buffer::Iterator start);
+
+    /**
+     * Get the type of the Trigger Frame this Special User Info field belongs to.
+     *
+     * @return the type of the Trigger Frame this Special User Info field belongs to
+     */
+    TriggerFrameType GetType() const;
+
+    /**
+     * Set the UL Bandwidth Extension subfield value of the solicited EHT TB PPDU.
+     *
+     * @param bw bandwidth (allowed values: 20 MHz, 40 MHz, 80 MHz, 160 MHz, 320 MHz)
+     */
+    void SetUlBwExt(MHz_u bw);
+
+    /**
+     * Get the UL Bandwidth Extension subfield value of the solicited EHT TB PPDU.
+     *
+     * @return the UL Bandwidth Extension subfield value
+     */
+    uint8_t GetUlBwExt() const;
+
+    /**
+     * Set the Trigger Dependent Special User Info subfield for the MU-BAR variant of Trigger
+     * frames, which includes the BAR Type subfield. The BAR Type subfield must indicate a
+     * Compressed BAR in an MU BAR Trigger frame.
+     *
+     * @param bar the BlockAckRequest header object including the BAR Control
+     *            subfield and the BAR Information subfield
+     */
+    void SetMuBarTriggerDepUserInfo(const CtrlBAckRequestHeader& bar);
+
+    /**
+     * Get the Trigger Dependent Special User Info subfield for the MU-BAR variant of
+     * Trigger frames, which includes a BAR Type subfield.
+     *
+     * @return the BlockAckRequest header object including the BAR Control
+     *         subfield and the BAR Information subfield
+     */
+    const CtrlBAckRequestHeader& GetMuBarTriggerDepUserInfo() const;
+
+  private:
+    TriggerFrameType m_triggerType{};                        //!< Trigger type
+    uint8_t m_ulBwExt{};                                     //!< UL Bandwidth Extension
+    CtrlBAckRequestHeader m_muBarTriggerDependentUserInfo{}; //!< MU-BAR variant of Trigger
+                                                             //!< Dependent User Info subfield
+};
+
+/**
+ * @ingroup wifi
  * @brief Headers for Trigger frames.
  *
  * 802.11ax amendment defines eight types of Trigger frames (see Section 9.3.1.23 of D3.0):
@@ -1116,15 +1218,15 @@
      */
     bool GetCsRequired() const;
     /**
-     * Set the bandwidth of the solicited HE TB PPDU.
+     * Set the bandwidth of the solicited HE/EHT TB PPDU.
      *
-     * @param bw bandwidth (allowed values: 20, 40, 80, 160)
+     * @param bw bandwidth (allowed values: 20, 40, 80, 160, 320)
      */
     void SetUlBandwidth(MHz_u bw);
     /**
-     * Get the bandwidth of the solicited HE TB PPDU.
+     * Get the bandwidth of the solicited HE/EHT TB PPDU.
      *
-     * @return the bandwidth (20, 40, 80 or 160)
+     * @return the bandwidth (20, 40, 80, 160 or 320)
      */
     MHz_u GetUlBandwidth() const;
     /**
@@ -1139,15 +1241,15 @@
      */
     void SetGiAndLtfType(Time guardInterval, uint8_t ltfType);
     /**
-     * Get the guard interval duration of the solicited HE TB PPDU.
+     * Get the guard interval duration of the solicited HE/EHT TB PPDU.
      *
-     * @return the guard interval duration  of the solicited HE TB PPDU
+     * @return the guard interval duration of the solicited HE/EHT TB PPDU
      */
     Time GetGuardInterval() const;
     /**
-     * Get the LTF type of the solicited HE TB PPDU.
+     * Get the LTF type of the solicited HE/EHT TB PPDU.
      *
-     * @return the LTF type of the solicited HE TB PPDU
+     * @return the LTF type of the solicited HE/EHT TB PPDU
      */
     uint8_t GetLtfType() const;
     /**
@@ -1339,6 +1441,9 @@
     uint16_t m_ulSpatialReuse;      //!< Value for the Spatial Reuse field in HE-SIG-A
     std::size_t m_padding;          //!< the size in bytes of the Padding field
 
+    std::optional<CtrlTriggerSpecialUserInfoField>
+        m_specialUserInfoField; //!< Special User Info field (EHT variant only)
+
     /**
      * List of User Info fields
      */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/edca-parameter-set.cc ns-3.45/src/wifi/model/edca-parameter-set.cc
--- ns-3.44/src/wifi/model/edca-parameter-set.cc	2025-03-09 16:55:49.783372600 -0700
+++ ns-3.45/src/wifi/model/edca-parameter-set.cc	2025-06-01 20:34:45.612702100 -0700
@@ -303,4 +303,12 @@
     return length;
 }
 
+void
+EdcaParameterSet::Print(std::ostream& os) const
+{
+    os << "EDCA Parameter Set=["
+       << "QosInfo: " << +m_qosInfo << ", AC_BE: " << m_acBE << ", AC_BK: " << m_acBK
+       << ", AC_VI: " << m_acVI << ", AC_VO: " << m_acVO << "]";
+}
+
 } // namespace ns3
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/edca-parameter-set.h ns-3.45/src/wifi/model/edca-parameter-set.h
--- ns-3.44/src/wifi/model/edca-parameter-set.h	2025-03-09 16:55:49.783372600 -0700
+++ ns-3.45/src/wifi/model/edca-parameter-set.h	2025-06-01 20:34:45.612702100 -0700
@@ -18,7 +18,7 @@
  * @brief The EDCA Parameter Set
  * @ingroup wifi
  *
- * This class knows how to serialise and deserialise the EDCA Parameter Set.
+ * This class knows how to serialize and deserialize the EDCA Parameter Set.
  */
 class EdcaParameterSet : public WifiInformationElement
 {
@@ -262,6 +262,7 @@
     uint16_t GetInformationFieldSize() const override;
     void SerializeInformationField(Buffer::Iterator start) const override;
     uint16_t DeserializeInformationField(Buffer::Iterator start, uint16_t length) override;
+    void Print(std::ostream& os) const override;
 
     uint8_t m_qosInfo;  ///< QOS info
     uint8_t m_reserved; ///< reserved
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/eht/advanced-ap-emlsr-manager.cc ns-3.45/src/wifi/model/eht/advanced-ap-emlsr-manager.cc
--- ns-3.44/src/wifi/model/eht/advanced-ap-emlsr-manager.cc	2025-03-09 16:55:49.783372600 -0700
+++ ns-3.45/src/wifi/model/eht/advanced-ap-emlsr-manager.cc	2025-06-01 20:34:45.612702100 -0700
@@ -60,6 +60,14 @@
                           "another link.",
                           BooleanValue(true),
                           MakeBooleanAccessor(&AdvancedApEmlsrManager::m_updateCwAfterFailedIcf),
+                          MakeBooleanChecker())
+            .AddAttribute("ReportFailedIcf",
+                          "Whether the AP MLD shall report an ICF failure to the remote station "
+                          "manager when all the clients solicited by the MU-RTS are EMLSR "
+                          "clients that have sent (or are sending) a frame to the AP on "
+                          "another link.",
+                          BooleanValue(true),
+                          MakeBooleanAccessor(&AdvancedApEmlsrManager::m_reportFailedIcf),
                           MakeBooleanChecker());
     return tid;
 }
@@ -191,9 +199,15 @@
 }
 
 bool
-AdvancedApEmlsrManager::UpdateCwAfterFailedIcf()
+AdvancedApEmlsrManager::UpdateCwAfterFailedIcf() const
 {
     return m_updateCwAfterFailedIcf;
 }
 
+bool
+AdvancedApEmlsrManager::ReportFailedIcf() const
+{
+    return m_reportFailedIcf;
+}
+
 } // namespace ns3
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/eht/advanced-ap-emlsr-manager.h ns-3.45/src/wifi/model/eht/advanced-ap-emlsr-manager.h
--- ns-3.44/src/wifi/model/eht/advanced-ap-emlsr-manager.h	2025-03-09 16:55:49.783372600 -0700
+++ ns-3.45/src/wifi/model/eht/advanced-ap-emlsr-manager.h	2025-06-01 20:34:45.612702100 -0700
@@ -45,7 +45,8 @@
     Time GetDelayOnTxPsduNotForEmlsr(Ptr<const WifiPsdu> psdu,
                                      const WifiTxVector& txVector,
                                      WifiPhyBand band) override;
-    bool UpdateCwAfterFailedIcf() override;
+    bool UpdateCwAfterFailedIcf() const override;
+    bool ReportFailedIcf() const override;
 
   protected:
     void DoDispose() override;
@@ -79,6 +80,9 @@
     bool m_updateCwAfterFailedIcf;      //!< Whether the AP MLD shall double the CW upon CTS timeout
                                    //!< after an MU-RTS in case all the clients solicited by the
                                    //!< MU-RTS are EMLSR clients that have sent a frame to the AP
+    bool m_reportFailedIcf; //!< Whether the AP MLD shall report an ICF failure to the remote
+                            //!< station manager when all the clients solicited by the MU-RTS
+                            //!< are EMLSR clients that have sent a frame to the AP
 };
 
 } // namespace ns3
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/eht/advanced-emlsr-manager.cc ns-3.45/src/wifi/model/eht/advanced-emlsr-manager.cc
--- ns-3.44/src/wifi/model/eht/advanced-emlsr-manager.cc	2025-03-09 16:55:49.783372600 -0700
+++ ns-3.45/src/wifi/model/eht/advanced-emlsr-manager.cc	2025-06-01 20:34:45.612702100 -0700
@@ -17,6 +17,7 @@
 #include "ns3/wifi-phy.h"
 
 #include <algorithm>
+#include <sstream>
 
 namespace ns3
 {
@@ -63,7 +64,7 @@
                             m_emlsrManager);
     }
 
-    void NotifyRxEndError() override
+    void NotifyRxEndError(const WifiTxVector& /* txVector */) override
     {
     }
 
@@ -141,7 +142,40 @@
                           "expires, the main PHY is switched back to the preferred link.",
                           TimeValue(MilliSeconds(5)),
                           MakeTimeAccessor(&AdvancedEmlsrManager::m_switchMainPhyBackDelay),
-                          MakeTimeChecker());
+                          MakeTimeChecker())
+            .AddAttribute("KeepMainPhyAfterDlTxop",
+                          "In case aux PHYs are not TX capable and do not switch link, after the "
+                          "end of a DL TXOP carried out on an aux PHY link, the main PHY stays on "
+                          "that link for a switch main PHY back delay, if this attribute is true, "
+                          "or it returns to the preferred link, otherwise.",
+                          BooleanValue(false),
+                          MakeBooleanAccessor(&AdvancedEmlsrManager::m_keepMainPhyAfterDlTxop),
+                          MakeBooleanChecker())
+            .AddAttribute("CheckAccessOnMainPhyLink",
+                          "In case aux PHYs are not TX capable and an Access Category, say it AC "
+                          "X, is about to gain channel access on an aux PHY link, determine "
+                          "whether the time the ACs with priority higher than or equal to AC X and "
+                          "with frames to send on the main PHY link are expected to gain access on "
+                          "the main PHY link should be taken into account when taking the decision "
+                          "to switch the main PHY to the aux PHY link.",
+                          BooleanValue(true),
+                          MakeBooleanAccessor(&AdvancedEmlsrManager::m_checkAccessOnMainPhyLink),
+                          MakeBooleanChecker())
+            .AddAttribute(
+                "MinAcToSkipCheckAccess",
+                "If the CheckAccessOnMainPhyLink attribute is set to false, indicate the "
+                "minimum priority AC for which it is allowed to skip the check related "
+                "to the expected channel access time on the main PHY link.",
+                EnumValue(AcIndex::AC_BK),
+                MakeEnumAccessor<AcIndex>(&AdvancedEmlsrManager::m_minAcToSkipCheckAccess),
+                MakeEnumChecker(AcIndex::AC_BE,
+                                "AC_BE",
+                                AcIndex::AC_VI,
+                                "AC_VI",
+                                AcIndex::AC_VO,
+                                "AC_VO",
+                                AcIndex::AC_BK,
+                                "AC_BK"));
     return tid;
 }
 
@@ -166,10 +200,7 @@
             "PhyRxMacHeaderEnd",
             MakeCallback(&AdvancedEmlsrManager::ReceivedMacHdr, this).Bind(phy));
     }
-    if (!GetAuxPhyTxCapable())
-    {
-        GetStaMac()->GetDevice()->GetPhy(GetMainPhyId())->UnregisterListener(m_phyListener);
-    }
+    UnregisterListener();
     m_phyListener.reset();
     DefaultEmlsrManager::DoDispose();
 }
@@ -211,10 +242,30 @@
             "PhyRxMacHeaderEnd",
             MakeCallback(&AdvancedEmlsrManager::ReceivedMacHdr, this).Bind(phy));
     }
-    if (!GetAuxPhyTxCapable())
+}
+
+void
+AdvancedEmlsrManager::RegisterListener(Ptr<WifiPhy> phy)
+{
+    NS_LOG_FUNCTION(this << phy->GetPhyId());
+
+    NS_ASSERT_MSG(!m_auxPhyWithListener,
+                  "PHY listener is still connected to PHY " << +m_auxPhyWithListener->GetPhyId());
+    phy->RegisterListener(m_phyListener);
+    m_auxPhyWithListener = phy;
+}
+
+void
+AdvancedEmlsrManager::UnregisterListener()
+{
+    if (!m_auxPhyWithListener)
     {
-        mac->GetDevice()->GetPhy(GetMainPhyId())->RegisterListener(m_phyListener);
+        return; // do nothing
     }
+
+    NS_LOG_FUNCTION(this << m_auxPhyWithListener->GetPhyId());
+    m_auxPhyWithListener->UnregisterListener(m_phyListener);
+    m_auxPhyWithListener = nullptr;
 }
 
 std::pair<bool, Time>
@@ -245,12 +296,20 @@
         }
     }
 
-    if (GetStaMac()->GetWifiPhy(linkId) == GetStaMac()->GetDevice()->GetPhy(GetMainPhyId()) &&
-        !m_auxPhyTxCapable && m_ccaLastPifs.IsPending())
+    auto phy = GetStaMac()->GetWifiPhy(linkId);
+    auto mainPhy = GetStaMac()->GetDevice()->GetPhy(m_mainPhyId);
+
+    if (phy == mainPhy)
     {
-        // main PHY has got access on the link it switched to (because the aux PHY is not TX
-        // capable) before a PIFS interval was elapsed: do not start the TXOP now
-        return {false, Time{0}};
+        if (!m_auxPhyTxCapable && m_ccaLastPifs.IsPending())
+        {
+            // main PHY has got access on the link it switched to (because the aux PHY is not TX
+            // capable) before a PIFS interval was elapsed: do not start the TXOP now
+            return {false, Time{0}};
+        }
+
+        // UL TXOP is going to start
+        m_rtsStartingUlTxop[linkId] = {Simulator::Now(), false};
     }
 
     return {true, Time{0}};
@@ -263,7 +322,7 @@
                                      Time psduDuration)
 {
     auto linkId = GetStaMac()->GetLinkForPhy(phy);
-    if (!linkId.has_value())
+    if (!linkId.has_value() || !m_useNotifiedMacHdr)
     {
         return;
     }
@@ -271,8 +330,8 @@
 
     auto& ongoingTxopEnd = GetEhtFem(*linkId)->GetOngoingTxopEndEvent();
 
-    if (m_useNotifiedMacHdr && ongoingTxopEnd.IsPending() &&
-        macHdr.GetAddr1() != GetEhtFem(*linkId)->GetAddress() && !macHdr.GetAddr1().IsBroadcast() &&
+    if (ongoingTxopEnd.IsPending() && macHdr.GetAddr1() != GetEhtFem(*linkId)->GetAddress() &&
+        !macHdr.GetAddr1().IsBroadcast() &&
         !(macHdr.IsCts() && macHdr.GetAddr1() == GetEhtFem(*linkId)->GetBssid() /* CTS-to-self */))
     {
         // the EMLSR client is no longer involved in the TXOP and switching to listening mode
@@ -284,28 +343,34 @@
         // another callback (FEM::ReceivedMacHdr) from the PhyRxMacHeaderEnd trace source of
         // the main PHY, thus invalidating the list of callbacks on which the for loop iterates.
         // Hence, schedule the call to NotifyTxopEnd to execute it outside such for loop.
-        Simulator::ScheduleNow(&AdvancedEmlsrManager::NotifyTxopEnd, this, *linkId, false, false);
+        Simulator::ScheduleNow(&AdvancedEmlsrManager::NotifyTxopEnd, this, *linkId, nullptr);
     }
 
-    // if the MAC header has been received on the link on which the main PHY is operating, the
-    // switch main PHY back timer is running and channel access is not expected to be gained by
-    // the main PHY before the switch main PHY back timer expires (plus a channel switch delay),
-    // try to switch the main PHY back to the preferred link
-    if (m_switchMainPhyBackEvent.IsPending() &&
-        phy == GetStaMac()->GetDevice()->GetPhy(GetMainPhyId()) &&
-        !GetExpectedAccessWithinDelay(*linkId,
-                                      Simulator::GetDelayLeft(m_switchMainPhyBackEvent) +
-                                          phy->GetChannelSwitchDelay()))
-    {
-        m_switchMainPhyBackEvent.Cancel();
-        SwitchMainPhyBackDelayExpired(*linkId);
-    }
+    // if the MAC header has been received on the link on which the main PHY is operating (or on
+    // the link the main PHY is switching to), the switch main PHY back timer is running and channel
+    // access is not expected to be gained by the main PHY before the switch main PHY back timer
+    // expires (plus a channel switch delay), try to switch the main PHY back to the preferred link
+    const auto mainPhyInvolved =
+        (phy->GetPhyId() == GetMainPhyId()) ||
+        (m_mainPhySwitchInfo.disconnected && m_mainPhySwitchInfo.to == *linkId);
+    const auto delay =
+        Simulator::GetDelayLeft(m_switchMainPhyBackEvent) + phy->GetChannelSwitchDelay();
+
+    Simulator::ScheduleNow([=, this]() {
+        if (WifiExpectedAccessReason reason;
+            m_switchMainPhyBackEvent.IsPending() && mainPhyInvolved &&
+            (reason = GetStaMac()->GetChannelAccessManager(*linkId)->GetExpectedAccessWithin(
+                 delay)) != WifiExpectedAccessReason::ACCESS_EXPECTED)
+        {
+            SwitchMainPhyBackDelayExpired(*linkId, reason);
+        }
+    });
 }
 
 void
-AdvancedEmlsrManager::DoNotifyTxopEnd(uint8_t linkId)
+AdvancedEmlsrManager::DoNotifyTxopEnd(uint8_t linkId, Ptr<QosTxop> edca)
 {
-    NS_LOG_FUNCTION(this << linkId);
+    NS_LOG_FUNCTION(this << linkId << edca);
 
     auto mainPhy = GetStaMac()->GetDevice()->GetPhy(m_mainPhyId);
 
@@ -326,6 +391,44 @@
     // or
     // - SwitchAuxPhy is false and there is an aux PHY to reconnect
 
+    if (!m_auxPhyTxCapable && !m_switchAuxPhy && !edca && m_keepMainPhyAfterDlTxop)
+    {
+        // DL TXOP ended, check if the main PHY must be kept on this link to try to gain an UL TXOP
+        NS_ASSERT_MSG(!m_switchMainPhyBackEvent.IsPending(),
+                      "Switch main PHY back timer should not be running at the end of a DL TXOP");
+        NS_ASSERT_MSG(!mainPhy->IsStateSwitching(),
+                      "Main PHY should not be switching at the end of a DL TXOP");
+
+        if (GetStaMac()->GetChannelAccessManager(linkId)->GetExpectedAccessWithin(
+                m_switchMainPhyBackDelay) == WifiExpectedAccessReason::ACCESS_EXPECTED)
+        {
+            NS_LOG_DEBUG("Keep main PHY on link " << +linkId << " to try to gain an UL TXOP");
+            m_switchMainPhyBackEvent =
+                Simulator::Schedule(m_switchMainPhyBackDelay,
+                                    &AdvancedEmlsrManager::SwitchMainPhyBackDelayExpired,
+                                    this,
+                                    linkId,
+                                    std::nullopt);
+            // start checking PHY activity on the link the main PHY is operating
+            RegisterListener(GetStaMac()->GetWifiPhy(linkId));
+            return;
+        }
+    }
+
+    std::shared_ptr<EmlsrMainPhySwitchTrace> traceInfo;
+
+    if (const auto it = m_rtsStartingUlTxop.find(linkId);
+        it != m_rtsStartingUlTxop.cend() && it->second.second)
+    {
+        // TXOP ended due to a CTS timeout following the RTS that started a TXOP
+        traceInfo = std::make_shared<EmlsrCtsAfterRtsTimeoutTrace>(Time{0});
+        m_rtsStartingUlTxop.erase(it);
+    }
+    else
+    {
+        traceInfo = std::make_shared<EmlsrTxopEndedTrace>();
+    }
+
     // Note that the main PHY may be switching at the end of a TXOP when, e.g., the main PHY
     // starts switching to a link on which an aux PHY gained a TXOP and sent an RTS, but the CTS
     // is not received and the UL TXOP ends before the main PHY channel switch is completed.
@@ -336,35 +439,45 @@
     if (m_switchAuxPhy || !mainPhy->IsStateSwitching() || m_interruptSwitching)
     {
         NS_ASSERT_MSG(
-            !m_switchAuxPhy || m_mainPhySwitchInfo.end >= Simulator::Now(),
+            !m_switchAuxPhy || m_mainPhySwitchInfo.disconnected,
             "Aux PHY next link ID should have a value when interrupting a main PHY switch");
         uint8_t nextLinkId = m_switchAuxPhy ? m_mainPhySwitchInfo.from : GetMainPhyId();
-        const auto delay = mainPhy->IsStateSwitching() ? mainPhy->GetDelayUntilIdle() : Time{0};
-        SwitchMainPhy(nextLinkId,
-                      false,
-                      DONT_RESET_BACKOFF,
-                      REQUEST_ACCESS,
-                      EmlsrTxopEndedTrace(delay));
+        SwitchMainPhy(nextLinkId, false, REQUEST_ACCESS, std::move(*traceInfo));
     }
     else
     {
         // delay link switch until current channel switching is completed
         const auto delay = mainPhy->GetDelayUntilIdle();
+
+        if (auto info = std::dynamic_pointer_cast<EmlsrCtsAfterRtsTimeoutTrace>(traceInfo))
+        {
+            info->sinceCtsTimeout = delay;
+        }
+
         Simulator::Schedule(delay, [=, this]() {
             // request the main PHY to switch back to the preferred link only if in the meantime
             // no TXOP started on another link (which will require the main PHY to switch link)
             if (!GetEhtFem(linkId)->UsingOtherEmlsrLink())
             {
-                SwitchMainPhy(GetMainPhyId(),
-                              false,
-                              DONT_RESET_BACKOFF,
-                              REQUEST_ACCESS,
-                              EmlsrTxopEndedTrace(delay));
+                SwitchMainPhy(GetMainPhyId(), false, REQUEST_ACCESS, std::move(*traceInfo));
             }
         });
     }
 }
 
+std::optional<WifiIcfDrop>
+AdvancedEmlsrManager::CheckMainPhyTakesOverDlTxop(uint8_t linkId) const
+{
+    auto reason = DefaultEmlsrManager::CheckMainPhyTakesOverDlTxop(linkId);
+
+    // if the switching can be interrupted, do not drop an ICF due to not enough time for switching
+    if (reason == WifiIcfDrop::NOT_ENOUGH_TIME_SWITCH && m_interruptSwitching)
+    {
+        return std::nullopt;
+    }
+    return reason;
+}
+
 std::pair<bool, Time>
 AdvancedEmlsrManager::GetDelayUnlessMainPhyTakesOverUlTxop(uint8_t linkId)
 {
@@ -396,7 +509,7 @@
 
     // TXOP can be started, main PHY will be scheduled to switch by NotifyRtsSent as soon as the
     // transmission of the RTS is notified
-    m_switchMainPhyOnRtsTx[linkId] = Simulator::Now();
+    m_rtsStartingUlTxop[linkId] = {Simulator::Now(), false};
 
     return {true, Time{0}};
 }
@@ -413,7 +526,36 @@
     // check CCA on the entire channel
     auto width = caManager->GetLargestIdlePrimaryChannel(pifs, Simulator::Now());
 
-    if (!isBusy && width > MHz_u{0})
+    // lambda to perform the actions needed when a TXOP is not started
+    auto txopNotStarted = [=, this]() {
+        // check when access may be granted to determine whether to switch the main PHY back
+        // to the preferred link (if aux PHYs do not switch link)
+        const auto mainPhy = GetStaMac()->GetDevice()->GetPhy(GetMainPhyId());
+        const auto delay =
+            Simulator::GetDelayLeft(m_switchMainPhyBackEvent) + mainPhy->GetChannelSwitchDelay();
+
+        if (WifiExpectedAccessReason reason;
+            !m_switchAuxPhy && m_switchMainPhyBackEvent.IsPending() &&
+            (reason = GetStaMac()->GetChannelAccessManager(linkId)->GetExpectedAccessWithin(
+                 delay)) != WifiExpectedAccessReason::ACCESS_EXPECTED)
+        {
+            NS_LOG_DEBUG("No AC is expected to get backoff soon, switch main PHY back");
+            SwitchMainPhyBackDelayExpired(linkId, reason);
+        }
+
+        // restart channel access
+        edca->NotifyChannelReleased(linkId); // to set access to NOT_REQUESTED
+        edca->StartAccessAfterEvent(linkId,
+                                    Txop::DIDNT_HAVE_FRAMES_TO_TRANSMIT,
+                                    Txop::CHECK_MEDIUM_BUSY);
+    };
+
+    if (!m_switchAuxPhy && !m_switchMainPhyBackEvent.IsPending())
+    {
+        NS_LOG_DEBUG("Main PHY switched back (or scheduled to switch back) before PIFS check");
+        txopNotStarted();
+    }
+    else if (!isBusy && width > MHz_u{0})
     {
         // medium idle, start TXOP
         width = std::min(width, GetChannelForMainPhy(linkId).GetTotalWidth());
@@ -422,61 +564,41 @@
         // main PHY is connected to this link in order to use the CCA information of the aux PHY.
         // Schedule now the TXOP start so that we first connect the main PHY to this link.
         m_ccaLastPifs = Simulator::ScheduleNow([=, this]() {
-            if (GetEhtFem(linkId)->HeFrameExchangeManager::StartTransmission(edca, width))
+            if (GetEhtFem(linkId)->StartTransmission(edca, width))
             {
                 NotifyUlTxopStart(linkId);
             }
-            else if (!m_switchAuxPhy)
+            else
             {
-                // switch main PHY back to preferred link if SwitchAuxPhy is false
-                SwitchMainPhyBackToPreferredLink(linkId, EmlsrSwitchMainPhyBackTrace(true));
+                txopNotStarted();
             }
         });
     }
     else
     {
-        // medium busy, check when access may be granted
-        if (!GetExpectedAccessWithinDelay(linkId,
-                                          m_switchMainPhyBackDelay + phy->GetChannelSwitchDelay()))
-        {
-            NS_LOG_DEBUG("No AC is expected to get backoff soon, switch main PHY back");
-            if (auto mainPhy = GetStaMac()->GetDevice()->GetPhy(GetMainPhyId());
-                !mainPhy->IsStateSwitching())
-            {
-                SwitchMainPhyBackDelayExpired(linkId);
-            }
-            return;
-        }
-
-        // medium busy, restart channel access
         NS_LOG_DEBUG("Medium busy in the last PIFS interval");
-        edca->NotifyChannelReleased(linkId); // to set access to NOT_REQUESTED
-        edca->StartAccessAfterEvent(linkId,
-                                    Txop::DIDNT_HAVE_FRAMES_TO_TRANSMIT,
-                                    Txop::CHECK_MEDIUM_BUSY);
-
-        // the main PHY must stay for some time on this link to check if it gets channel access.
-        // The timer is stopped if a DL or UL TXOP is started. When the timer expires, the main PHY
-        // switches back to the preferred link if SwitchAuxPhy is false
-        m_switchMainPhyBackEvent.Cancel();
-        m_switchMainPhyBackEvent =
-            Simulator::Schedule(m_switchMainPhyBackDelay,
-                                &AdvancedEmlsrManager::SwitchMainPhyBackDelayExpired,
-                                this,
-                                linkId);
+        txopNotStarted();
     }
 }
 
 void
-AdvancedEmlsrManager::SwitchMainPhyBackDelayExpired(uint8_t linkId)
+AdvancedEmlsrManager::SwitchMainPhyBackDelayExpired(
+    uint8_t linkId,
+    std::optional<WifiExpectedAccessReason> stopReason)
 {
-    NS_LOG_FUNCTION(this << linkId);
-
-    if (m_switchAuxPhy)
+    if (g_log.IsEnabled(ns3::LOG_FUNCTION))
     {
-        return; // nothing to do
+        std::stringstream ss;
+        if (stopReason.has_value())
+        {
+            ss << stopReason.value();
+        }
+        NS_LOG_FUNCTION(this << linkId << ss.str());
     }
 
+    m_switchMainPhyBackEvent.Cancel();
+
+    NS_ASSERT_MSG(!m_switchAuxPhy, "Don't expect this to be called when aux PHYs switch link");
     Time extension{0};
 
     // check if the timer must be restarted because a frame is being received on any link
@@ -507,7 +629,8 @@
             // this is the link on which the main PHY is operating. If an AC with traffic is
             // expected to get channel access soon (within a channel switch delay), restart
             // the timer to have the main PHY stay a bit longer on this link
-            if (GetExpectedAccessWithinDelay(linkId, phy->GetChannelSwitchDelay()))
+            if (GetStaMac()->GetChannelAccessManager(linkId)->GetExpectedAccessWithin(
+                    phy->GetChannelSwitchDelay()) == WifiExpectedAccessReason::ACCESS_EXPECTED)
             {
                 extension = Max(extension, phy->GetChannelSwitchDelay());
             }
@@ -521,12 +644,51 @@
             Simulator::Schedule(extension,
                                 &AdvancedEmlsrManager::SwitchMainPhyBackDelayExpired,
                                 this,
-                                linkId);
+                                linkId,
+                                stopReason);
+        return;
+    }
+
+    // no need to wait further, switch the main PHY back to the preferred link and unregister
+    // the PHY listener from the aux PHY
+    const auto elapsed = Simulator::Now() - m_mainPhySwitchInfo.start;
+    const auto isSwitching = GetStaMac()->GetDevice()->GetPhy(GetMainPhyId())->IsStateSwitching();
+    SwitchMainPhyBackToPreferredLink(linkId,
+                                     EmlsrSwitchMainPhyBackTrace(elapsed, stopReason, isSwitching));
+    // if scheduled, invoke CheckNavAndCcaLastPifs(), which will just restart channel access
+    if (m_ccaLastPifs.IsPending())
+    {
+        m_ccaLastPifs.PeekEventImpl()->Invoke();
+        m_ccaLastPifs.Cancel();
+    }
+    UnregisterListener();
+}
+
+void
+AdvancedEmlsrManager::SwitchMainPhyBackToPreferredLink(uint8_t linkId,
+                                                       EmlsrMainPhySwitchTrace&& traceInfo)
+{
+    if (!m_interruptSwitching)
+    {
+        DefaultEmlsrManager::SwitchMainPhyBackToPreferredLink(
+            linkId,
+            std::forward<EmlsrMainPhySwitchTrace>(traceInfo));
+        return;
+    }
+
+    NS_LOG_FUNCTION(this << linkId << traceInfo.GetName());
+
+    NS_ABORT_MSG_IF(m_switchAuxPhy, "This method can only be called when SwitchAuxPhy is false");
+
+    if (!m_auxPhyToReconnect)
+    {
         return;
     }
 
-    // no need to wait further, switch the main PHY back to the preferred link
-    SwitchMainPhyBackToPreferredLink(linkId, EmlsrSwitchMainPhyBackTrace(false));
+    SwitchMainPhy(GetMainPhyId(),
+                  false,
+                  REQUEST_ACCESS,
+                  std::forward<EmlsrMainPhySwitchTrace>(traceInfo));
 }
 
 void
@@ -545,25 +707,27 @@
 
     if (!linkId.has_value())
     {
-        NS_LOG_DEBUG("Main PHY is not operating on any link");
-        return;
+        NS_ASSERT(m_mainPhySwitchInfo.disconnected);
+        linkId = m_mainPhySwitchInfo.to;
+        NS_LOG_DEBUG("Main PHY is switching to link " << +linkId.value());
     }
 
     const auto delay =
         Simulator::GetDelayLeft(m_switchMainPhyBackEvent) + mainPhy->GetChannelSwitchDelay();
-    if (!GetExpectedAccessWithinDelay(*linkId, delay))
+    if (auto reason = GetStaMac()->GetChannelAccessManager(*linkId)->GetExpectedAccessWithin(delay);
+        reason != WifiExpectedAccessReason::ACCESS_EXPECTED)
     {
-        m_switchMainPhyBackEvent.Cancel();
-        SwitchMainPhyBackDelayExpired(*linkId);
+        SwitchMainPhyBackDelayExpired(*linkId, reason);
     }
 }
 
 void
-AdvancedEmlsrManager::DoNotifyIcfReceived(uint8_t linkId)
+AdvancedEmlsrManager::DoNotifyDlTxopStart(uint8_t linkId)
 {
     NS_LOG_FUNCTION(this << linkId);
     m_switchMainPhyBackEvent.Cancel();
     m_ccaLastPifs.Cancel();
+    UnregisterListener();
 }
 
 void
@@ -572,6 +736,7 @@
     NS_LOG_FUNCTION(this << linkId);
     m_switchMainPhyBackEvent.Cancel();
     m_ccaLastPifs.Cancel();
+    UnregisterListener();
 }
 
 bool
@@ -581,12 +746,14 @@
 
     // the aux PHY is not TX capable; check if main PHY has to switch to the aux PHY's link
     auto mainPhy = GetStaMac()->GetDevice()->GetPhy(m_mainPhyId);
-    const auto mainPhyLinkId = GetStaMac()->GetLinkForPhy(mainPhy);
 
-    // if main PHY is not operating on a link, it is switching, hence do not request another switch
-    if (!mainPhyLinkId.has_value())
+    // if main PHY is not operating on a link and is trying to start a (DL or UL) TXOP, then do
+    // not request another switch
+    if (m_mainPhySwitchInfo.disconnected &&
+        (!m_interruptSwitching || m_mainPhySwitchInfo.reason == "DlTxopIcfReceivedByAuxPhy" ||
+         m_mainPhySwitchInfo.reason == "UlTxopAuxPhyNotTxCapable"))
     {
-        NS_LOG_DEBUG("Main PHY is not operating on any link");
+        NS_LOG_DEBUG("Main PHY is not operating on any link and cannot switch to another link");
         return false;
     }
 
@@ -603,7 +770,14 @@
                             GetChannelForMainPhy(linkId).GetTotalWidth()))
     {
         // cannot use aux PHY CCA
-        minDelay += GetStaMac()->GetWifiPhy(linkId)->GetPifs();
+        const auto pifs = GetStaMac()->GetWifiPhy(linkId)->GetPifs();
+        if (m_switchMainPhyBackDelay < pifs)
+        {
+            NS_LOG_DEBUG(
+                "Main PHY has to perform CCA but switch main PHY back delay is less than PIFS");
+            return false;
+        }
+        minDelay += pifs;
     }
     minDelay = std::max(delay, minDelay);
 
@@ -615,45 +789,74 @@
         return false;
     }
 
-    // DoGetDelayUntilAccessRequest has already checked if the main PHY is receiving an ICF
+    // DoGetDelayUntilAccessRequest has already checked if the main PHY is receiving an ICF and
+    // above it is checked whether we can request another switch while already switching
     if (const auto state = mainPhy->GetState()->GetState();
-        state != WifiPhyState::IDLE && state != WifiPhyState::CCA_BUSY && state != WifiPhyState::RX)
+        state != WifiPhyState::IDLE && state != WifiPhyState::CCA_BUSY &&
+        state != WifiPhyState::RX && state != WifiPhyState::SWITCHING)
     {
         NS_LOG_DEBUG("Cannot request main PHY to switch when in state " << state);
         return false;
     }
 
-    // request to switch main PHY if we expect the main PHY to get channel access on this link more
-    // quickly, i.e., if ALL the ACs with queued frames (that can be transmitted on the link on
-    // which the main PHY is currently operating) and with priority higher than or equal to that of
-    // the AC for which Aux PHY gained TXOP have their backoff counter greater than the maximum
-    // between the expected delay in gaining channel access and the channel switch delay (plus PIFS
-    // if we cannot use aux PHY CCA)
+    // if the AC that is about to get channel access on the aux PHY link has no frames to send on
+    // that link, do not request the main PHY to switch
+    if (!GetStaMac()->GetQosTxop(aci)->HasFramesToTransmit(linkId))
+    {
+        NS_LOG_DEBUG("No frames of " << aci << " to send on link " << +linkId);
+        return false;
+    }
+
+    // if user has configured to skip the check related to the expected channel access time on
+    // the main PHY link and the AC that is about to gain access on the aux PHY link has a priority
+    // greater than or equal to the minimum priority that has been configured, switch the main PHY
+    if (!m_checkAccessOnMainPhyLink && (aci >= m_minAcToSkipCheckAccess))
+    {
+        NS_LOG_DEBUG("Skipping check related to the expected channel access time on main PHY link");
+        return true;
+    }
+
+    const auto mainPhyLinkId = GetStaMac()->GetLinkForPhy(mainPhy);
+    if (!mainPhyLinkId.has_value())
+    {
+        NS_ASSERT(m_mainPhySwitchInfo.disconnected);
+        NS_LOG_DEBUG("The main PHY is not connected to any link");
+        // we don't know when the main PHY will be connected to the link it is switching to, nor
+        // which backoff value it will possibly generate; therefore, request it to switch to the
+        // aux PHY link
+        return true;
+    }
+
+    // let AC X be the AC that is about to gain channel access on the aux PHY link, request to
+    // switch the main PHY if we do not expect any AC, with priority higher than or equal to that
+    // of AC X and with frames to send on the main PHY link, to gain channel access on the main PHY
+    // link before AC X is able to start transmitting on the aux PHY link.
 
-    auto requestSwitch = false;
     const auto now = Simulator::Now();
 
     for (const auto& [acIndex, ac] : wifiAcList)
     {
-        if (auto edca = GetStaMac()->GetQosTxop(acIndex);
-            acIndex >= aci && edca->HasFramesToTransmit(linkId))
+        // ignore ACs with lower priority than the AC that is about to get access on aux PHY link
+        if (acIndex < aci)
         {
-            requestSwitch = true;
+            continue;
+        }
 
-            const auto backoffEnd =
-                GetStaMac()->GetChannelAccessManager(*mainPhyLinkId)->GetBackoffEndFor(edca);
-            NS_LOG_DEBUG("Backoff end for " << acIndex
-                                            << " on preferred link: " << backoffEnd.As(Time::US));
+        const auto edca = GetStaMac()->GetQosTxop(acIndex);
+        const auto backoffEnd =
+            GetStaMac()->GetChannelAccessManager(*mainPhyLinkId)->GetBackoffEndFor(edca);
+        NS_LOG_DEBUG("Backoff end for " << acIndex
+                                        << " on main PHY link: " << backoffEnd.As(Time::US));
 
-            if ((backoffEnd <= now + minDelay) && edca->HasFramesToTransmit(*mainPhyLinkId))
-            {
-                requestSwitch = false;
-                break;
-            }
+        if ((backoffEnd <= now + minDelay) && edca->HasFramesToTransmit(*mainPhyLinkId))
+        {
+            NS_LOG_DEBUG(acIndex << " is expected to gain access on link " << +mainPhyLinkId.value()
+                                 << " sooner than " << aci << " on link " << +linkId);
+            return false;
         }
     }
 
-    return requestSwitch;
+    return true;
 }
 
 void
@@ -716,9 +919,24 @@
 
         SwitchMainPhy(linkId,
                       false,
-                      RESET_BACKOFF,
                       DONT_REQUEST_ACCESS,
                       EmlsrUlTxopAuxPhyNotTxCapableTrace(aci, Time{0}, remNav));
+
+        // if SwitchAuxPhy is false, the main PHY must stay for some time on this link to check if
+        // it gets channel access. The timer is stopped if a DL or UL TXOP is started. When the
+        // timer expires, the main PHY switches back to the preferred link
+        if (!m_switchAuxPhy)
+        {
+            m_switchMainPhyBackEvent.Cancel();
+            m_switchMainPhyBackEvent =
+                Simulator::Schedule(mainPhy->GetChannelSwitchDelay() + m_switchMainPhyBackDelay,
+                                    &AdvancedEmlsrManager::SwitchMainPhyBackDelayExpired,
+                                    this,
+                                    linkId,
+                                    std::nullopt);
+            // start checking PHY activity on the link the main PHY is switching to
+            RegisterListener(auxPhy);
+        }
         return;
     }
 
@@ -739,33 +957,33 @@
     // case, do nothing because the main PHY will start a TXOP and at the end of such TXOP
     // links will be unblocked and the channel access requested on all links
 
-    Time delay{};
+    std::optional<Time> delay;
 
     if (m_ccaLastPifs.IsPending() || m_switchMainPhyBackEvent.IsPending())
     {
         delay = std::max(Simulator::GetDelayLeft(m_ccaLastPifs),
                          Simulator::GetDelayLeft(m_switchMainPhyBackEvent));
     }
-    else if (mainPhy->IsStateSwitching() || mainPhy->IsStateCcaBusy() || mainPhy->IsStateRx())
+    else if (mainPhy->GetState()->GetLastTime(
+                 {WifiPhyState::SWITCHING, WifiPhyState::CCA_BUSY, WifiPhyState::RX}) ==
+             Simulator::Now())
     {
         delay = mainPhy->GetDelayUntilIdle();
-        NS_ASSERT(delay.IsStrictlyPositive());
     }
 
     NS_LOG_DEBUG("Main PHY state is " << mainPhy->GetState()->GetState());
+    auto edca = GetStaMac()->GetQosTxop(aci);
+    edca->NotifyChannelReleased(linkId); // to set access to NOT_REQUESTED
 
-    if (delay.IsZero())
+    if (!delay.has_value())
     {
         NS_LOG_DEBUG("Do nothing");
         return;
     }
 
-    auto edca = GetStaMac()->GetQosTxop(aci);
-    edca->NotifyChannelReleased(linkId); // to set access to NOT_REQUESTED
-
     NS_LOG_DEBUG("Schedule channel access request on link "
-                 << +linkId << " at time " << (Simulator::Now() + delay).As(Time::NS));
-    Simulator::Schedule(delay, [=]() {
+                 << +linkId << " at time " << (Simulator::Now() + *delay).As(Time::NS));
+    Simulator::Schedule(*delay, [=]() {
         edca->StartAccessAfterEvent(linkId,
                                     Txop::DIDNT_HAVE_FRAMES_TO_TRANSMIT,
                                     Txop::CHECK_MEDIUM_BUSY);
@@ -834,57 +1052,59 @@
     // use aux PHY CCA (if allowed) if the backoff has already counted down to zero on the aux PHY
     // link when the main PHY completes the switch
     const auto edca = GetStaMac()->GetQosTxop(aci);
-    const auto cam = GetStaMac()->GetChannelAccessManager(linkId);
     const auto auxPhy = GetStaMac()->GetWifiPhy(linkId);
     const auto switchDelay = mainPhy->GetChannelSwitchDelay();
-    const auto now = Simulator::Now();
     const auto auxPhyCcaCanBeUsed =
         m_useAuxPhyCca || (GetChannelForAuxPhy(linkId).GetTotalWidth() >=
                            GetChannelForMainPhy(linkId).GetTotalWidth());
-    const auto backoffEndBeforeSwitch = (cam->GetBackoffEndFor(edca) - now) <= switchDelay;
-
-    if (auxPhyCcaCanBeUsed && backoffEndBeforeSwitch)
-    {
-        NS_LOG_DEBUG("Schedule CCA check at the end of main PHY switch");
-        m_ccaLastPifs = Simulator::Schedule(switchDelay, [=, this]() {
-            // check NAV and CCA only if the backoff actually counted down to zero already
-            if (cam->GetBackoffEndFor(edca) <= Simulator::Now())
-            {
-                CheckNavAndCcaLastPifs(auxPhy, linkId, edca);
-            }
-        });
-    }
-
-    Time remNav{0};
-    if (const auto mainPhyLinkId = GetStaMac()->GetLinkForPhy(mainPhy))
-    {
-        auto mainPhyNavEnd = GetStaMac()->GetChannelAccessManager(*mainPhyLinkId)->GetNavEnd();
-        remNav = Max(remNav, mainPhyNavEnd - now);
-    }
-
-    SwitchMainPhy(linkId,
-                  false,
-                  RESET_BACKOFF,
-                  DONT_REQUEST_ACCESS,
-                  EmlsrUlTxopAuxPhyNotTxCapableTrace(aci, delay, remNav));
 
     // check expected channel access delay when switch is completed
     Simulator::Schedule(switchDelay, [=, this]() {
-        const auto accessDelay = cam->GetBackoffEndFor(edca) - Simulator::Now();
+        // this is scheduled before starting the main PHY switch, hence it is executed before the
+        // main PHY is connected to the aux PHY link
 
-        if (auxPhyCcaCanBeUsed && backoffEndBeforeSwitch && accessDelay.IsNegative())
+        if (!m_switchAuxPhy && !m_switchMainPhyBackEvent.IsPending())
         {
-            // backoff already counted down to zero and we used aux PHY CCA
+            // if SwitchAuxPhy is false and the switch main PHY back timer is not running, it means
+            // that the channel switch was interrupted, hence there is nothing to check
             return;
         }
 
+        const auto backoffEnd =
+            GetStaMac()->GetChannelAccessManager(linkId)->GetBackoffEndFor(edca);
         const auto pifs = GetStaMac()->GetWifiPhy(linkId)->GetPifs();
+        const auto now = Simulator::Now();
 
-        // if the remaining backoff time is shorter than PIFS when the main PHY completes the
-        // switch, we need to schedule a CCA check a PIFS after the end of the main PHY switch
-        if (accessDelay <= pifs)
+        // In case aux PHY CCA can be used and the backoff has not yet reached zero, no NAV and CCA
+        // check is needed. The channel width that will be used is the width of the aux PHY if less
+        // than a PIFS remains until the backoff reaches zero, and the width of the main PHY,
+        // otherwise. If aux PHY CCA can be used and the backoff has already reached zero, a NAV and
+        // CCA check is needed.
+
+        if (auxPhyCcaCanBeUsed && backoffEnd < now)
         {
-            // use main PHY CCA in the last PIFS interval after main PHY switch end
+            /**
+             * use aux PHY CCA in the last PIFS interval before main PHY switch end
+             *
+             *        Backoff    Switch
+             *          end     end (now)
+             * ──────────┴─────────┴──────────
+             *      |---- PIFS ----|
+             */
+            CheckNavAndCcaLastPifs(auxPhy, linkId, edca);
+        }
+        else if (!auxPhyCcaCanBeUsed && (backoffEnd - now <= pifs))
+        {
+            /**
+             * the remaining backoff time (if any) when the main PHY completes the switch is shorter
+             * than or equal to a PIFS, thus the main PHY performs CCA in the last PIFS interval
+             * after switch end
+             *
+             *        Switch    Backoff                 Backoff    Switch
+             *       end (now)    end                     end     end (now)
+             * ──────────┴─────────┴──────────   ──────────┴─────────┴──────────
+             *           |---- PIFS ----|                            |---- PIFS ----|
+             */
             NS_LOG_DEBUG("Schedule CCA check a PIFS after the end of main PHY switch");
             m_ccaLastPifs = Simulator::Schedule(pifs,
                                                 &AdvancedEmlsrManager::CheckNavAndCcaLastPifs,
@@ -893,27 +1113,45 @@
                                                 linkId,
                                                 edca);
         }
-        else if (!GetExpectedAccessWithinDelay(linkId,
-                                               accessDelay + m_switchMainPhyBackDelay +
-                                                   mainPhy->GetChannelSwitchDelay()))
+        else if (WifiExpectedAccessReason reason;
+                 !m_switchAuxPhy &&
+                 (reason = GetStaMac()->GetChannelAccessManager(linkId)->GetExpectedAccessWithin(
+                      Simulator::GetDelayLeft(m_switchMainPhyBackEvent) +
+                      mainPhy->GetChannelSwitchDelay())) !=
+                     WifiExpectedAccessReason::ACCESS_EXPECTED)
         {
             NS_LOG_DEBUG("No AC is expected to get backoff soon, switch main PHY back");
-            SwitchMainPhyBackDelayExpired(linkId);
-        }
-        else
-        {
-            // the main PHY must stay for some time on this link to check if it gets channel
-            // access. The timer is stopped if a DL or UL TXOP is started. When the timer
-            // expires, the main PHY switches back to the preferred link if SwitchAuxPhy is
-            // false
-            m_switchMainPhyBackEvent.Cancel();
-            m_switchMainPhyBackEvent =
-                Simulator::Schedule(accessDelay + m_switchMainPhyBackDelay,
-                                    &AdvancedEmlsrManager::SwitchMainPhyBackDelayExpired,
-                                    this,
-                                    linkId);
+            SwitchMainPhyBackDelayExpired(linkId, reason);
         }
     });
+
+    Time remNav{0};
+    if (const auto mainPhyLinkId = GetStaMac()->GetLinkForPhy(mainPhy))
+    {
+        auto mainPhyNavEnd = GetStaMac()->GetChannelAccessManager(*mainPhyLinkId)->GetNavEnd();
+        remNav = Max(remNav, mainPhyNavEnd - Simulator::Now());
+    }
+
+    SwitchMainPhy(linkId,
+                  false,
+                  DONT_REQUEST_ACCESS,
+                  EmlsrUlTxopAuxPhyNotTxCapableTrace(aci, delay, remNav));
+
+    // if SwitchAuxPhy is false, the main PHY must stay for some time on this link to check if it
+    // gets channel access. The timer is stopped if a DL or UL TXOP is started. When the timer
+    // expires, the main PHY switches back to the preferred link
+    if (!m_switchAuxPhy)
+    {
+        m_switchMainPhyBackEvent.Cancel();
+        m_switchMainPhyBackEvent =
+            Simulator::Schedule(switchDelay + m_switchMainPhyBackDelay,
+                                &AdvancedEmlsrManager::SwitchMainPhyBackDelayExpired,
+                                this,
+                                linkId,
+                                std::nullopt);
+        // start checking PHY activity on the link the main PHY is switching to
+        RegisterListener(auxPhy);
+    }
 }
 
 } // namespace ns3
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/eht/advanced-emlsr-manager.h ns-3.45/src/wifi/model/eht/advanced-emlsr-manager.h
--- ns-3.44/src/wifi/model/eht/advanced-emlsr-manager.h	2025-03-09 16:55:49.783372600 -0700
+++ ns-3.45/src/wifi/model/eht/advanced-emlsr-manager.h	2025-06-01 20:34:45.613702300 -0700
@@ -11,8 +11,12 @@
 
 #include "default-emlsr-manager.h"
 
+#include "ns3/channel-access-manager.h"
+
 #include <memory>
 
+class EmlsrSwitchMainPhyBackTest;
+
 namespace ns3
 {
 
@@ -25,6 +29,9 @@
  */
 class AdvancedEmlsrManager : public DefaultEmlsrManager
 {
+    /// Allow test cases to access private members
+    friend class ::EmlsrSwitchMainPhyBackTest;
+
   public:
     /**
      * @brief Get the type ID.
@@ -35,6 +42,8 @@
     AdvancedEmlsrManager();
     ~AdvancedEmlsrManager() override;
 
+    std::optional<WifiIcfDrop> CheckMainPhyTakesOverDlTxop(uint8_t linkId) const override;
+
     /**
      * This method is called by the PHY listener attached to the main PHY when a switch main PHY
      * back timer is started to notify of events that may delay the channel access for the main
@@ -50,6 +59,8 @@
     std::pair<bool, Time> GetDelayUnlessMainPhyTakesOverUlTxop(uint8_t linkId) override;
     void SwitchMainPhyIfTxopGainedByAuxPhy(uint8_t linkId, AcIndex aci) override;
     void NotifyEmlsrModeChanged() override;
+    void SwitchMainPhyBackToPreferredLink(uint8_t linkId,
+                                          EmlsrMainPhySwitchTrace&& traceInfo) override;
 
     /**
      * Possibly take actions when notified of the MAC header of the MPDU being received by the
@@ -103,18 +114,33 @@
     void SwitchMainPhyIfTxopToBeGainedByAuxPhy(uint8_t linkId, AcIndex aci, const Time& delay);
 
     /**
-     * This method is called when the switch main PHY back delay timer (which is started when the
-     * main PHY switches to the link of an aux PHY that does not switch and is not TX capable)
-     * expires and decides whether to delay the request to switch the main PHY back to the preferred
-     * link or to execute it immediately.
+     * This method is called when the switch main PHY back timer (which is started when the main PHY
+     * switches to the link of an aux PHY that does not switch and is not TX capable) expires and
+     * decides whether to delay the request to switch the main PHY back to the preferred link or to
+     * execute it immediately. This method can also be called to terminate a running switch main PHY
+     * back timer, in case it is determined that channel access is not expected to be gained before
+     * the expiration of the timer plus the channel switch delay.
      *
      * @param linkId the ID of the link that the main PHY is leaving
+     * @param stopReason the reason for terminating the switch main PHY back timer before expiration
+     */
+    void SwitchMainPhyBackDelayExpired(uint8_t linkId,
+                                       std::optional<WifiExpectedAccessReason> stopReason);
+
+    /**
+     * Register a PHY listener so that this EMLSR Manager is notified of PHY events generated by
+     * the given PHY.
+     *
+     * @param phy the PHY which a listener is connected to
      */
-    void SwitchMainPhyBackDelayExpired(uint8_t linkId);
+    void RegisterListener(Ptr<WifiPhy> phy);
+
+    /// Disconnect the PHY listener from the PHY it is connected to (if any)
+    void UnregisterListener();
 
   private:
-    void DoNotifyTxopEnd(uint8_t linkId) override;
-    void DoNotifyIcfReceived(uint8_t linkId) override;
+    void DoNotifyTxopEnd(uint8_t linkId, Ptr<QosTxop> edca) override;
+    void DoNotifyDlTxopStart(uint8_t linkId) override;
     void DoNotifyUlTxopStart(uint8_t linkId) override;
 
     bool m_allowUlTxopInRx;        //!< whether a (main or aux) PHY is allowed to start an UL
@@ -128,15 +154,31 @@
     Time m_switchMainPhyBackDelay; //!< duration of the timer started in case of non-TX capable aux
                                    //!< PHY when medium is sensed busy during the PIFS interval
                                    //!< preceding/following the main PHY switch end
-    EventId m_ccaLastPifs;         //!< event scheduled in case of non-TX capable aux PHY to
-                                   //!< determine whether TX can be started based on whether
-                                   //!< the medium has been idle during the last PIFS interval
+    bool m_keepMainPhyAfterDlTxop; //!< whether the main PHY must stay, for a switch main PHY back
+                                   //!< delay, on an aux PHY link after a DL TXOP, in case aux PHYs
+                                   //!< are not TX capable and do not switch
+    bool m_checkAccessOnMainPhyLink; //!< in case aux PHYs are not TX capable and an Access
+                                     //!< Category, say it AC X, is about to gain channel access on
+                                     //!< an aux PHY link, determine whether the time the ACs with
+                                     //!< priority higher than or equal to AC X and with frames to
+                                     //!< send on the main PHY link are expected to gain access on
+                                     //!< the main PHY link should be taken into account when taking
+                                     //!< the decision to switch the main PHY to the aux PHY link
+    AcIndex m_minAcToSkipCheckAccess; //!< if m_checkAccessOnMainPhyLink is set to false, indicate
+                                      //!< the minimum priority AC for which it is allowed to skip
+                                      //!< the check related to the expected channel access time on
+                                      //!< the main PHY link
+    EventId m_ccaLastPifs;            //!< event scheduled in case of non-TX capable aux PHY to
+                                      //!< determine whether TX can be started based on whether
+                                      //!< the medium has been idle during the last PIFS interval
     EventId m_switchMainPhyBackEvent; //!< event scheduled in case of non-TX capable aux PHY when
                                       //!< medium is sensed busy during the PIFS interval
                                       //!< preceding/following the main PHY switch end
     std::shared_ptr<WifiPhyListener>
-        m_phyListener; //!< PHY listener connected to the main PHY while operating on the link of
-                       //!< an aux PHY that is not TX capable
+        m_phyListener; //!< PHY listener connected to an aux PHY (that is not TX capable and does
+                       //!< not switch link) while the main PHY attempts to gain access on the aux
+                       //!< PHY link
+    Ptr<WifiPhy> m_auxPhyWithListener; //!< aux PHY which a PHY listener is connected to
 };
 
 /**
@@ -147,16 +189,26 @@
 {
     static constexpr std::string_view m_name = "TxopNotGainedOnAuxPhyLink"; //!< trace name
 
-    bool nothingToTx; //!< if true, the main PHY managed to gain a TXOP but had nothing to transmit
+    Time elapsed; //!< the time elapsed since the switch main PHY back timer started
+    std::optional<WifiExpectedAccessReason>
+        earlySwitchReason; //!< the reason why the main PHY switches back before the expiration of
+                           //!< the switch main PHY back timer
+    bool isSwitching; //!< whether the main PHY is switching while it is requested to switch back
 
     /**
      * Constructor provided because this struct is not an aggregate (it has a base struct), hence
      * we cannot use designated initializers.
      *
-     * @param nothing the value for the nothingToTx field
-     */
-    EmlsrSwitchMainPhyBackTrace(bool nothing)
-        : nothingToTx(nothing)
+     * @param time the value for the elapsed field
+     * @param reason the value for the earlySwitchReason field
+     * @param switching the value for the isSwitching field
+     */
+    EmlsrSwitchMainPhyBackTrace(Time time,
+                                std::optional<WifiExpectedAccessReason> reason,
+                                bool switching)
+        : elapsed(time),
+          earlySwitchReason(reason),
+          isSwitching(switching)
     {
     }
 };
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/eht/ap-emlsr-manager.h ns-3.45/src/wifi/model/eht/ap-emlsr-manager.h
--- ns-3.44/src/wifi/model/eht/ap-emlsr-manager.h	2025-03-09 16:55:49.783372600 -0700
+++ ns-3.45/src/wifi/model/eht/ap-emlsr-manager.h	2025-06-01 20:34:45.613702300 -0700
@@ -79,7 +79,14 @@
      *         all the clients solicited by the MU-RTS are EMLSR clients that have sent (or
      *         are sending) a frame to the AP
      */
-    virtual bool UpdateCwAfterFailedIcf() = 0;
+    virtual bool UpdateCwAfterFailedIcf() const = 0;
+
+    /**
+     * @return whether the AP MLD shall report an ICF failure to the remote station manager when
+     *         all the clients solicited by the MU-RTS are EMLSR clients that have sent (or are
+     *         sending) a frame to the AP
+     */
+    virtual bool ReportFailedIcf() const = 0;
 
   protected:
     void DoDispose() override;
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/eht/default-ap-emlsr-manager.cc ns-3.45/src/wifi/model/eht/default-ap-emlsr-manager.cc
--- ns-3.44/src/wifi/model/eht/default-ap-emlsr-manager.cc	2025-03-09 16:55:49.783372600 -0700
+++ ns-3.45/src/wifi/model/eht/default-ap-emlsr-manager.cc	2025-06-01 20:34:45.613702300 -0700
@@ -50,7 +50,13 @@
 }
 
 bool
-DefaultApEmlsrManager::UpdateCwAfterFailedIcf()
+DefaultApEmlsrManager::UpdateCwAfterFailedIcf() const
+{
+    return true;
+}
+
+bool
+DefaultApEmlsrManager::ReportFailedIcf() const
 {
     return true;
 }
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/eht/default-ap-emlsr-manager.h ns-3.45/src/wifi/model/eht/default-ap-emlsr-manager.h
--- ns-3.44/src/wifi/model/eht/default-ap-emlsr-manager.h	2025-03-09 16:55:49.783372600 -0700
+++ ns-3.45/src/wifi/model/eht/default-ap-emlsr-manager.h	2025-06-01 20:34:45.613702300 -0700
@@ -34,7 +34,8 @@
     Time GetDelayOnTxPsduNotForEmlsr(Ptr<const WifiPsdu> psdu,
                                      const WifiTxVector& txVector,
                                      WifiPhyBand band) override;
-    bool UpdateCwAfterFailedIcf() override;
+    bool UpdateCwAfterFailedIcf() const override;
+    bool ReportFailedIcf() const override;
 };
 
 } // namespace ns3
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/eht/default-emlsr-manager.cc ns-3.45/src/wifi/model/eht/default-emlsr-manager.cc
--- ns-3.44/src/wifi/model/eht/default-emlsr-manager.cc	2025-03-09 16:55:49.787372600 -0700
+++ ns-3.45/src/wifi/model/eht/default-emlsr-manager.cc	2025-06-01 20:34:45.613702300 -0700
@@ -124,7 +124,6 @@
 
         // the Aux PHY is not actually switching (hence no switching delay)
         GetStaMac()->NotifySwitchingEmlsrLink(m_auxPhyToReconnect, *currLinkId, Seconds(0));
-        SetCcaEdThresholdOnLinkSwitch(m_auxPhyToReconnect, *currLinkId);
     }
 
     // if currLinkId has no value, it means that the main PHY switch is interrupted, hence reset
@@ -189,11 +188,20 @@
 DefaultEmlsrManager::DoGetDelayUntilAccessRequest(uint8_t linkId)
 {
     NS_LOG_FUNCTION(this << linkId);
+    auto phy = GetStaMac()->GetWifiPhy(linkId);
+    auto mainPhy = GetStaMac()->GetDevice()->GetPhy(m_mainPhyId);
+
+    if (phy == mainPhy)
+    {
+        // UL TXOP is going to start
+        m_rtsStartingUlTxop[linkId] = {Simulator::Now(), false};
+    }
+
     return {true, Time{0}}; // start the TXOP
 }
 
 void
-DefaultEmlsrManager::DoNotifyIcfReceived(uint8_t linkId)
+DefaultEmlsrManager::DoNotifyDlTxopStart(uint8_t linkId)
 {
     NS_LOG_FUNCTION(this << linkId);
 }
@@ -205,17 +213,28 @@
 }
 
 void
-DefaultEmlsrManager::DoNotifyTxopEnd(uint8_t linkId)
+DefaultEmlsrManager::DoNotifyTxopEnd(uint8_t linkId, Ptr<QosTxop> edca)
 {
-    NS_LOG_FUNCTION(this << linkId);
+    NS_LOG_FUNCTION(this << linkId << edca);
+
+    if (m_switchAuxPhy)
+    {
+        return; // nothing to do
+    }
 
     // switch main PHY to the previous link, if needed
-    if (!m_switchAuxPhy)
+    if (const auto it = m_rtsStartingUlTxop.find(linkId);
+        it != m_rtsStartingUlTxop.cend() && it->second.second)
     {
+        // TXOP ended due to a CTS timeout following the RTS that started a TXOP
         const auto mainPhy = GetStaMac()->GetDevice()->GetPhy(m_mainPhyId);
         const auto delay = mainPhy->IsStateSwitching() ? mainPhy->GetDelayUntilIdle() : Time{0};
-        SwitchMainPhyBackToPreferredLink(linkId, EmlsrTxopEndedTrace(delay));
+        SwitchMainPhyBackToPreferredLink(linkId, EmlsrCtsAfterRtsTimeoutTrace(delay));
+        m_rtsStartingUlTxop.erase(it);
+        return;
     }
+
+    SwitchMainPhyBackToPreferredLink(linkId, EmlsrTxopEndedTrace());
 }
 
 void
@@ -244,7 +263,6 @@
     {
         SwitchMainPhy(GetMainPhyId(),
                       false,
-                      DONT_RESET_BACKOFF,
                       REQUEST_ACCESS,
                       std::forward<EmlsrMainPhySwitchTrace>(traceInfo));
     }
@@ -256,11 +274,7 @@
             // require the main PHY to switch link)
             if (!GetEhtFem(linkId)->UsingOtherEmlsrLink())
             {
-                SwitchMainPhy(GetMainPhyId(),
-                              false,
-                              DONT_RESET_BACKOFF,
-                              REQUEST_ACCESS,
-                              std::move(*info));
+                SwitchMainPhy(GetMainPhyId(), false, REQUEST_ACCESS, std::move(*info));
             }
         });
     }
@@ -304,7 +318,7 @@
 
     // the main PHY shall terminate the channel switch at the end of CTS reception;
     // the time remaining to the end of CTS reception includes two propagation delays
-    return rtsTxTime + phy->GetSifs() + ctsTxTime + MicroSeconds(2 * MAX_PROPAGATION_DELAY_USEC);
+    return rtsTxTime + phy->GetSifs() + ctsTxTime + 2 * MAX_PROPAGATION_DELAY;
 }
 
 std::pair<bool, Time>
@@ -341,7 +355,7 @@
 
     // TXOP can be started, main PHY will be scheduled to switch by NotifyRtsSent as soon as the
     // transmission of the RTS is notified
-    m_switchMainPhyOnRtsTx[linkId] = Simulator::Now();
+    m_rtsStartingUlTxop[linkId] = {Simulator::Now(), false};
 
     return {true, Time{0}};
 }
@@ -353,30 +367,38 @@
 {
     NS_LOG_FUNCTION(this << *rts << txVector);
 
-    const auto it = m_switchMainPhyOnRtsTx.find(linkId);
+    const auto it = m_rtsStartingUlTxop.find(linkId);
 
-    if (it == m_switchMainPhyOnRtsTx.cend() || it->second != Simulator::Now())
+    if (it == m_rtsStartingUlTxop.cend() || it->second.first != Simulator::Now())
     {
-        // No request for main PHY to switch or obsolete request
-        return;
+        return; // Not an RTS starting an UL TXOP
     }
+    it->second.second = true;
 
-    // Main PHY shall terminate the channel switch at the end of CTS reception
+    auto phy = GetStaMac()->GetWifiPhy(linkId);
     auto mainPhy = GetStaMac()->GetDevice()->GetPhy(m_mainPhyId);
+
+    if (phy == mainPhy)
+    {
+        return; // RTS sent by the main PHY
+    }
+
+    // Main PHY shall terminate the channel switch at the end of CTS reception
     const auto delay = GetTimeToCtsEnd(linkId, txVector) - mainPhy->GetChannelSwitchDelay();
     NS_ASSERT_MSG(delay.IsPositive(),
                   "RTS is being sent, but not enough time for main PHY to switch");
 
     NS_LOG_DEBUG("Schedule main Phy switch in " << delay.As(Time::US));
     m_ulMainPhySwitch[linkId] = Simulator::Schedule(delay, [=, this]() {
-        SwitchMainPhy(linkId,
-                      false,
-                      RESET_BACKOFF,
-                      DONT_REQUEST_ACCESS,
-                      EmlsrUlTxopRtsSentByAuxPhyTrace{});
+        SwitchMainPhy(linkId, false, DONT_REQUEST_ACCESS, EmlsrUlTxopRtsSentByAuxPhyTrace{});
     });
+}
 
-    m_switchMainPhyOnRtsTx.erase(it);
+void
+DefaultEmlsrManager::DoNotifyProtectionCompleted(uint8_t linkId)
+{
+    NS_LOG_FUNCTION(this << linkId);
+    m_rtsStartingUlTxop.erase(linkId);
 }
 
 } // namespace ns3
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/eht/default-emlsr-manager.h ns-3.45/src/wifi/model/eht/default-emlsr-manager.h
--- ns-3.44/src/wifi/model/eht/default-emlsr-manager.h	2025-03-09 16:55:49.787372600 -0700
+++ ns-3.45/src/wifi/model/eht/default-emlsr-manager.h	2025-06-01 20:34:45.613702300 -0700
@@ -73,7 +73,8 @@
      * @param traceInfo information to pass to the main PHY switch traced callback (the fromLinkId
      *                  and toLinkId fields are set by SwitchMainPhy)
      */
-    void SwitchMainPhyBackToPreferredLink(uint8_t linkId, EmlsrMainPhySwitchTrace&& traceInfo);
+    virtual void SwitchMainPhyBackToPreferredLink(uint8_t linkId,
+                                                  EmlsrMainPhySwitchTrace&& traceInfo);
 
     bool m_switchAuxPhy; /**< whether Aux PHY should switch channel to operate on the link on which
                               the Main PHY was operating before moving to the link of the Aux PHY */
@@ -81,9 +82,9 @@
                                       //!< the main PHY is operating has to connect a listener to
                                       //!< when the main PHY is back operating on its previous link
     EventId m_auxPhySwitchEvent;      //!< event scheduled for an aux PHY to switch link
-    std::map<uint8_t, Time> m_switchMainPhyOnRtsTx; //!< link ID-indexed map of the time when an RTS
-                                                    //!< that requires the main PHY to switch link
-                                                    //!< is expected to be transmitted on the link
+    std::map<uint8_t, std::pair<Time, bool>>
+        m_rtsStartingUlTxop; //!< link ID-indexed map indicating the time when an UL TXOP is going
+                             //!< to start and whether it is starting with an RTS
 
   private:
     /**
@@ -108,9 +109,10 @@
                              uint8_t nextLinkId,
                              Ptr<WifiPhy> auxPhy,
                              Time duration) override;
-    void DoNotifyIcfReceived(uint8_t linkId) override;
+    void DoNotifyDlTxopStart(uint8_t linkId) override;
     void DoNotifyUlTxopStart(uint8_t linkId) override;
-    void DoNotifyTxopEnd(uint8_t linkId) override;
+    void DoNotifyTxopEnd(uint8_t linkId, Ptr<QosTxop> edca) override;
+    void DoNotifyProtectionCompleted(uint8_t linkId) override;
 };
 
 } // namespace ns3
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/eht/eht-capabilities.cc ns-3.45/src/wifi/model/eht/eht-capabilities.cc
--- ns-3.44/src/wifi/model/eht/eht-capabilities.cc	2025-03-09 16:55:49.787372600 -0700
+++ ns-3.45/src/wifi/model/eht/eht-capabilities.cc	2025-06-01 20:34:45.613702300 -0700
@@ -415,7 +415,7 @@
 void
 EhtCapabilities::Print(std::ostream& os) const
 {
-    os << "EHT Capabilities="; // TODO
+    os << "EHT Capabilities=[]"; // TODO
 }
 
 uint16_t
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/eht/eht-capabilities.h ns-3.45/src/wifi/model/eht/eht-capabilities.h
--- ns-3.44/src/wifi/model/eht/eht-capabilities.h	2025-03-09 16:55:49.787372600 -0700
+++ ns-3.45/src/wifi/model/eht/eht-capabilities.h	2025-06-01 20:34:45.613702300 -0700
@@ -103,6 +103,7 @@
     uint8_t
         support20MhzOperatingStaReceivingNdpWithWiderBw : 1; //!< Support For 20 MHz Operating STA
                                                              //!< Receiving NDP With Wider Bandwidth
+
     uint8_t nonOfdmaUlMuMimoBwNotLargerThan80Mhz : 1; //!< Non-OFDMA UL MU-MIMO (BW ≤ 80 MHz)
     uint8_t nonOfdmaUlMuMimo160Mhz : 1;               //!< Non-OFDMA UL MU-MIMO (BW = 160 MHz)
     uint8_t nonOfdmaUlMuMimo320Mhz : 1;               //!< Non-OFDMA UL MU-MIMO (BW = 320 MHz)
@@ -176,11 +177,14 @@
      * Deserialize the Supported EHT-MCS And NSS Set subfield
      *
      * @param start iterator pointing to where the Supported EHT-MCS And NSS Set subfield should be
-     * read from \param is2_4Ghz indicating whether PHY is operating in 2.4 GHz based on previously
-     * serialized IEs \param heSupportedChannelWidthSet supported channel width set based on
-     * previously deserialized HE capabilities IE \param support320MhzIn6Ghz flag whether 320 MHz is
-     * supported in 6 GHz band based on EHT PHY capabilities subfield \return the number of bytes
-     * read
+     * read from
+     * @param is2_4Ghz indicating whether PHY is operating in 2.4 GHz based on previously serialized
+     * IEs
+     * @param heSupportedChannelWidthSet supported channel width set based on previously
+     * deserialized HE capabilities IE
+     * @param support320MhzIn6Ghz flag whether 320 MHz is supported in 6 GHz band based on EHT PHY
+     * capabilities subfield
+     * @return the number of bytes read
      */
     uint16_t Deserialize(Buffer::Iterator start,
                          bool is2_4Ghz,
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/eht/eht-configuration.cc ns-3.45/src/wifi/model/eht/eht-configuration.cc
--- ns-3.44/src/wifi/model/eht/eht-configuration.cc	2025-03-09 16:55:49.787372600 -0700
+++ ns-3.45/src/wifi/model/eht/eht-configuration.cc	2025-06-01 20:34:45.613702300 -0700
@@ -11,6 +11,7 @@
 
 #include "ns3/attribute-container.h"
 #include "ns3/boolean.h"
+#include "ns3/double.h"
 #include "ns3/enum.h"
 #include "ns3/integer.h"
 #include "ns3/log.h"
@@ -162,7 +163,12 @@
                         MakeAttributeContainerChecker<UintegerValue>(
                             MakeUintegerChecker<uint8_t>()),
                         MakeAttributeContainerChecker<UintegerValue>(
-                            MakeUintegerChecker<uint8_t>()))));
+                            MakeUintegerChecker<uint8_t>()))))
+            .AddAttribute("Per20CcaSensitivityThreshold",
+                          "CCA threshold (dBm) for Per 20MHz check.",
+                          DoubleValue(-72.0),
+                          MakeDoubleAccessor(&EhtConfiguration::m_per20CcaSensitivityThreshold),
+                          MakeDoubleChecker<dBm_u>());
     return tid;
 }
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/eht/eht-configuration.h ns-3.45/src/wifi/model/eht/eht-configuration.h
--- ns-3.44/src/wifi/model/eht/eht-configuration.h	2025-03-09 16:55:49.787372600 -0700
+++ ns-3.45/src/wifi/model/eht/eht-configuration.h	2025-06-01 20:34:45.613702300 -0700
@@ -110,7 +110,8 @@
     std::map<std::list<uint64_t>, std::list<uint64_t>>
         m_linkMappingDl; //!< TIDs-indexed Link Mapping for downlink
     std::map<std::list<uint64_t>, std::list<uint64_t>>
-        m_linkMappingUl; //!< TIDs-indexed Link Mapping for uplink
+        m_linkMappingUl;                 //!< TIDs-indexed Link Mapping for uplink
+    dB_u m_per20CcaSensitivityThreshold; //!< CCA threshold for Per 20MHz check
 };
 
 } // namespace ns3
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/eht/eht-frame-exchange-manager.cc ns-3.45/src/wifi/model/eht/eht-frame-exchange-manager.cc
--- ns-3.44/src/wifi/model/eht/eht-frame-exchange-manager.cc	2025-03-09 16:55:49.787372600 -0700
+++ ns-3.45/src/wifi/model/eht/eht-frame-exchange-manager.cc	2025-06-01 20:34:45.614702200 -0700
@@ -30,8 +30,6 @@
 namespace ns3
 {
 
-const Time EMLSR_RX_PHY_START_DELAY = MicroSeconds(20);
-
 /**
  * Additional time (exceeding 20 us) to wait for a PHY-RXSTART.indication when the PHY is
  * decoding a PHY header.
@@ -111,7 +109,9 @@
     NS_LOG_FUNCTION(this << *mpdu);
 
     // alias needs only be created for non-broadcast QoS data frames exchanged between two MLDs
-    if (!mpdu->GetHeader().IsQosData() || m_mac->GetNLinks() == 1 ||
+    if (auto staMac = DynamicCast<StaWifiMac>(m_mac);
+        !mpdu->GetHeader().IsQosData() ||
+        (staMac ? (staMac->GetAssocType() == WifiAssocType::LEGACY) : (m_mac->GetNLinks() == 1)) ||
         mpdu->GetHeader().GetAddr1().IsGroup() ||
         !GetWifiRemoteStationManager()->GetMldAddress(mpdu->GetHeader().GetAddr1()))
     {
@@ -155,13 +155,9 @@
     {
         return false;
     }
-    auto apAddress = GetWifiRemoteStationManager()->GetMldAddress(m_bssid);
-    NS_ASSERT_MSG(apAddress, "MLD address not found for BSSID " << m_bssid);
-    // when EMLSR links are blocked, all TIDs are blocked (we test TID 0 here)
-    WifiContainerQueueId queueId(WIFI_QOSDATA_QUEUE, WIFI_UNICAST, *apAddress, 0);
-    auto mask = m_staMac->GetMacQueueScheduler()->GetQueueLinkMask(AC_BE, queueId, m_linkId);
-    NS_ASSERT_MSG(mask, "No mask for AP " << *apAddress << " on link " << m_linkId);
-    return mask->test(static_cast<std::size_t>(WifiQueueBlockedReason::USING_OTHER_EMLSR_LINK));
+    return m_staMac->GetMacQueueScheduler()->GetAllQueuesBlockedOnLink(
+        m_linkId,
+        WifiQueueBlockedReason::USING_OTHER_EMLSR_LINK);
 }
 
 bool
@@ -410,18 +406,7 @@
     {
         NS_ASSERT(m_staMac->GetEmlsrManager());
         m_staMac->GetEmlsrManager()->NotifyInDeviceInterferenceStart(m_linkId, txDuration);
-
-        for (const auto linkId : m_staMac->GetLinkIds())
-        {
-            if (auto phy = m_mac->GetWifiPhy(linkId);
-                phy && linkId != m_linkId && m_staMac->IsEmlsrLink(linkId))
-            {
-                const auto txPower = phy->GetPower(txVector.GetTxPowerLevel()) + phy->GetTxGain();
-                // generate in-device interference on the other EMLSR link for the duration of this
-                // transmission
-                GenerateInDeviceInterference(linkId, txDuration, DbmToW(txPower));
-            }
-        }
+        GenerateInDeviceInterferenceForAll(txDuration, txVector);
     }
 }
 
@@ -499,47 +484,73 @@
     {
         NS_ASSERT(m_staMac->GetEmlsrManager());
         m_staMac->GetEmlsrManager()->NotifyInDeviceInterferenceStart(m_linkId, txDuration);
+        GenerateInDeviceInterferenceForAll(txDuration, txVector);
+    }
+}
 
-        for (const auto linkId : m_staMac->GetLinkIds())
+void
+EhtFrameExchangeManager::GenerateInDeviceInterferenceForAll(const Time& txDuration,
+                                                            const WifiTxVector& txVector)
+{
+    NS_LOG_FUNCTION(this << txDuration.As(Time::MS) << txVector);
+
+    NS_ASSERT(m_staMac);
+    NS_ASSERT(m_staMac->GetEmlsrManager());
+
+    for (const auto& phy : m_staMac->GetDevice()->GetPhys())
+    {
+        // generate in-device interference for a PHY provided that:
+        // - the PHY is not the one the client is using to transmit
+        // - either the PHY is not operating on any link or it is operating on an EMLSR link
+        // Interference is generated for the duration of this transmission
+        if (auto id = m_staMac->GetLinkForPhy(phy);
+            phy != m_phy && (!id || m_staMac->IsEmlsrLink(*id)))
         {
-            if (auto phy = m_mac->GetWifiPhy(linkId);
-                phy && linkId != m_linkId && m_staMac->IsEmlsrLink(linkId))
-            {
-                const auto txPower = phy->GetPower(txVector.GetTxPowerLevel()) + phy->GetTxGain();
-                // generate in-device interference on the other EMLSR link for the duration of this
-                // transmission
-                GenerateInDeviceInterference(linkId, txDuration, DbmToW(txPower));
-            }
+            const auto txPower = phy->GetPower(txVector.GetTxPowerLevel()) + phy->GetTxGain();
+            GenerateInDeviceInterference(phy, txDuration, DbmToW(txPower));
         }
     }
 }
 
 void
-EhtFrameExchangeManager::GenerateInDeviceInterference(uint8_t linkId, Time duration, Watt_u txPower)
+EhtFrameExchangeManager::GenerateInDeviceInterference(Ptr<WifiPhy> phy,
+                                                      Time duration,
+                                                      Watt_u txPower)
 {
-    NS_LOG_FUNCTION(this << linkId << duration.As(Time::US) << txPower);
+    NS_LOG_FUNCTION(this << phy << duration.As(Time::US) << txPower);
 
-    auto rxPhy = DynamicCast<SpectrumWifiPhy>(m_mac->GetWifiPhy(linkId));
+    auto rxPhy = DynamicCast<SpectrumWifiPhy>(phy);
 
     if (!rxPhy)
     {
-        NS_LOG_DEBUG("No spectrum PHY operating on link " << +linkId);
+        NS_LOG_DEBUG("No spectrum PHY");
         return;
     }
 
     auto txPhy = DynamicCast<SpectrumWifiPhy>(m_phy);
     NS_ASSERT(txPhy);
 
-    auto psd = Create<SpectrumValue>(rxPhy->GetCurrentInterface()->GetRxSpectrumModel());
-    *psd = txPower;
+    for (const auto& [range, interface] : rxPhy->GetSpectrumPhyInterfaces())
+    {
+        if (!interface->GetRxSpectrumModel())
+        {
+            // we may have created a PHY interface but never set a frequency channel comprised
+            // in the frequency range associated with that PHY interface, thus the RX spectrum
+            // model may have not been created
+            continue;
+        }
 
-    auto spectrumSignalParams = Create<SpectrumSignalParameters>();
-    spectrumSignalParams->duration = duration;
-    spectrumSignalParams->txPhy = txPhy->GetCurrentInterface();
-    spectrumSignalParams->txAntenna = txPhy->GetAntenna();
-    spectrumSignalParams->psd = psd;
+        auto psd = Create<SpectrumValue>(interface->GetRxSpectrumModel());
+        *psd = txPower;
 
-    rxPhy->StartRx(spectrumSignalParams, rxPhy->GetCurrentInterface());
+        auto spectrumSignalParams = Create<SpectrumSignalParameters>();
+        spectrumSignalParams->duration = duration;
+        spectrumSignalParams->txPhy = txPhy->GetCurrentInterface();
+        spectrumSignalParams->txAntenna = txPhy->GetAntenna();
+        spectrumSignalParams->psd = psd;
+
+        rxPhy->StartRx(spectrumSignalParams, interface);
+    }
 }
 
 void
@@ -567,9 +578,9 @@
 }
 
 bool
-EhtFrameExchangeManager::UnblockEmlsrLinksIfAllowed(Mac48Address address)
+EhtFrameExchangeManager::UnblockEmlsrLinksIfAllowed(Mac48Address address, bool checkThisLink)
 {
-    NS_LOG_FUNCTION(this << address);
+    NS_LOG_FUNCTION(this << address << checkThisLink);
 
     auto mldAddress = GetWifiRemoteStationManager()->GetMldAddress(address);
     NS_ASSERT_MSG(mldAddress, "MLD address not found for " << address);
@@ -621,9 +632,8 @@
             return false;
         }
 
-        if (linkId == m_linkId)
+        if (linkId == m_linkId && !checkThisLink)
         {
-            // no need to check if the EMLSR client is involved in a DL TXOP on this link
             continue;
         }
 
@@ -657,8 +667,8 @@
     NS_ASSERT_MSG(mldAddress, "MLD address not found for " << address);
     NS_ASSERT_MSG(m_apMac, "This function shall only be called by AP MLDs");
 
-    auto blockLinks = [=, this]() {
-        if (!UnblockEmlsrLinksIfAllowed(address))
+    auto blockLinks = [=, this](bool checkThisLink) {
+        if (!UnblockEmlsrLinksIfAllowed(address, checkThisLink))
         {
             NS_LOG_DEBUG("Could not unblock transmissions to " << address);
             return;
@@ -696,7 +706,16 @@
                                                   Simulator::Schedule(endDelay, unblockLinks));
     };
 
-    delay.IsZero() ? blockLinks() : static_cast<void>(Simulator::Schedule(delay, blockLinks));
+    // it makes sense to check if the EMLSR client is involved in a DL TXOP on this link only if
+    // the transition delay start is scheduled to start after some delay, because the AP MLD may
+    // start another DL TXOP in the meantime. An example is when the AP MLD terminates a TXOP on
+    // this link due to the remaining TXOP time being not enough to send another frame (not even a
+    // CF-End), delays the start of the transition delay to align with the EMLSR client (which is
+    // waiting for a SIFS + slot + PHY RXSTART delay after the last frame to switch to listening
+    // operations), gains channel access on this link again before starting the transition delay
+    // timer and sends an ICF.
+    delay.IsZero() ? blockLinks(false)
+                   : static_cast<void>(Simulator::Schedule(delay, [=]() { blockLinks(true); }));
 }
 
 void
@@ -909,8 +928,8 @@
         {
             // EMLSR client switched to listening operations if it was protected, otherwise
             // simply unblock transmissions
-            m_protectedStas.contains(address) ? EmlsrSwitchToListening(address, Seconds(0))
-                                              : (void)(UnblockEmlsrLinksIfAllowed(address));
+            m_protectedStas.contains(address) ? EmlsrSwitchToListening(address, Time{0})
+                                              : (void)(UnblockEmlsrLinksIfAllowed(address, false));
             m_protectedStas.erase(address);
         }
     }
@@ -941,6 +960,23 @@
     return HeFrameExchangeManager::GetUpdateCwOnCtsTimeout();
 }
 
+bool
+EhtFrameExchangeManager::GetReportRtsFailed() const
+{
+    NS_LOG_FUNCTION(this);
+
+    if (m_apMac)
+    {
+        if (const auto apEmlsrManager = m_apMac->GetApEmlsrManager();
+            apEmlsrManager && IsCrossLinkCollision(m_sentRtsTo))
+        {
+            return apEmlsrManager->ReportFailedIcf();
+        }
+    }
+
+    return HeFrameExchangeManager::GetReportRtsFailed();
+}
+
 void
 EhtFrameExchangeManager::TbPpduTimeout(WifiPsduMap* psduMap, std::size_t nSolicitedStations)
 {
@@ -1037,8 +1073,12 @@
                             on the given link ID */
                          [=, this](uint8_t id) {
                              auto macHdr = m_mac->GetFrameExchangeManager(id)->GetReceivedMacHdr();
-                             return macHdr.has_value() &&
-                                    m_mac->GetMldAddress(macHdr->get().GetAddr2()) == mldAddress;
+                             if (!macHdr.has_value())
+                             {
+                                 return false;
+                             }
+                             auto addr2 = macHdr->get().GetAddr2();
+                             return m_mac->GetMldAddress(addr2) == mldAddress;
                          }))
         {
             crossLinkCollision = false;
@@ -1050,18 +1090,20 @@
 
 void
 EhtFrameExchangeManager::SendCtsAfterRts(const WifiMacHeader& rtsHdr,
-                                         WifiMode rtsTxMode,
+                                         const WifiTxVector& rtsTxVector,
                                          double rtsSnr)
 {
-    NS_LOG_FUNCTION(this << rtsHdr << rtsTxMode << rtsSnr);
+    NS_LOG_FUNCTION(this << rtsHdr << rtsTxVector << rtsSnr);
+
+    auto addr2 = rtsHdr.GetAddr2();
 
-    if (m_apMac && GetWifiRemoteStationManager()->GetEmlsrEnabled(rtsHdr.GetAddr2()))
+    if (m_apMac && GetWifiRemoteStationManager()->GetEmlsrEnabled(addr2))
     {
         // we are going to send a CTS to an EMLSR client, transmissions to such EMLSR client
         // must be blocked on the other EMLSR links
 
-        auto mldAddress = GetWifiRemoteStationManager()->GetMldAddress(rtsHdr.GetAddr2());
-        NS_ASSERT_MSG(mldAddress, "MLD address not found for " << rtsHdr.GetAddr2());
+        auto mldAddress = GetWifiRemoteStationManager()->GetMldAddress(addr2);
+        NS_ASSERT_MSG(mldAddress, "MLD address not found for " << addr2);
 
         for (uint8_t linkId = 0; linkId < m_apMac->GetNLinks(); ++linkId)
         {
@@ -1089,7 +1131,7 @@
         }
     }
 
-    HeFrameExchangeManager::SendCtsAfterRts(rtsHdr, rtsTxMode, rtsSnr);
+    HeFrameExchangeManager::SendCtsAfterRts(rtsHdr, rtsTxVector, rtsSnr);
 }
 
 bool
@@ -1197,13 +1239,21 @@
 
     if (m_apMac)
     {
-        // the channel has been released; all EMLSR clients are switching back to
-        // listening operation
+        // the channel has been released; if the TXNAV is still set, it means that there is not
+        // enough time left to send a CF-End. In this case, EMLSR clients wait for a slot plus the
+        // PHY RX start delay before switching back to listening operation (in this case, this
+        // function is called a SIFS after the last frame in the TXOP)
+        Time delay{0};
+        if (const auto remTxNav = m_txNav - Simulator::Now(); remTxNav.IsStrictlyPositive())
+        {
+            delay = Min(m_phy->GetSlot() + EMLSR_RX_PHY_START_DELAY, remTxNav);
+        }
+
         for (const auto& address : m_protectedStas)
         {
             if (GetWifiRemoteStationManager()->GetEmlsrEnabled(address))
             {
-                EmlsrSwitchToListening(address, Seconds(0));
+                EmlsrSwitchToListening(address, delay);
             }
         }
     }
@@ -1212,12 +1262,9 @@
         // Notify the UL TXOP end to the EMLSR Manager
         auto edca = DynamicCast<QosTxop>(txop);
         NS_ASSERT(edca);
-        auto txopStart = edca->GetTxopStartTime(m_linkId);
 
         NS_ASSERT(m_staMac->GetEmlsrManager());
-        m_staMac->GetEmlsrManager()->NotifyTxopEnd(m_linkId,
-                                                   (!txopStart || *txopStart == Simulator::Now()),
-                                                   m_ongoingTxopEnd.IsPending());
+        m_staMac->GetEmlsrManager()->NotifyTxopEnd(m_linkId, edca);
     }
 
     HeFrameExchangeManager::NotifyChannelReleased(txop);
@@ -1287,7 +1334,9 @@
     if (m_apMac && m_txopHolder == psdu->GetAddr2() &&
         GetWifiRemoteStationManager()->GetEmlsrEnabled(*m_txopHolder))
     {
-        if (!m_ongoingTxopEnd.IsPending())
+        const auto unrespondedRts = (psdu->GetHeader(0).IsRts() && !m_sendCtsEvent.IsPending());
+
+        if (!m_ongoingTxopEnd.IsPending() && !unrespondedRts)
         {
             // an EMLSR client has started an UL TXOP. Start the ongoingTxopEnd timer so that
             // the next call to UpdateTxopEndOnRxEnd does its job
@@ -1312,11 +1361,19 @@
         }
     }
 
-    if (m_staMac && m_icfReceived)
+    if (m_staMac && m_dlTxopStart)
     {
+        // we just got involved in a DL TXOP. Check if we are still involved in the TXOP in a
+        // SIFS (we are expected to reply in a SIFS)
+        m_ongoingTxopEnd.Cancel();
+        NS_LOG_DEBUG("Expected TXOP end=" << (Simulator::Now() + m_phy->GetSifs()).As(Time::S));
+        m_ongoingTxopEnd = Simulator::Schedule(m_phy->GetSifs() + TimeStep(1),
+                                               &EhtFrameExchangeManager::TxopEnd,
+                                               this,
+                                               psdu->GetAddr2());
         // notify the EMLSR manager
-        m_staMac->GetEmlsrManager()->NotifyIcfReceived(m_linkId);
-        m_icfReceived = false;
+        m_staMac->GetEmlsrManager()->NotifyDlTxopStart(m_linkId);
+        m_dlTxopStart = false;
     }
 }
 
@@ -1424,7 +1481,7 @@
     NS_ASSERT(mpdu->GetHeader().GetAddr1().IsGroup() || mpdu->GetHeader().GetAddr1() == m_self);
 
     const auto& hdr = mpdu->GetHeader();
-    const auto sender = hdr.GetAddr2();
+    auto sender = hdr.GetAddr2();
 
     if (hdr.IsTrigger())
     {
@@ -1453,23 +1510,18 @@
                 return;
             }
 
-            auto emlsrManager = m_staMac->GetEmlsrManager();
-            NS_ASSERT(emlsrManager);
-
-            m_icfReceived = true;
-
-            // we just got involved in a DL TXOP. Check if we are still involved in the TXOP in a
-            // SIFS (we are expected to reply by sending a CTS frame)
-            m_ongoingTxopEnd.Cancel();
-            NS_LOG_DEBUG("Expected TXOP end=" << (Simulator::Now() + m_phy->GetSifs()).As(Time::S));
-            m_ongoingTxopEnd = Simulator::Schedule(m_phy->GetSifs() + NanoSeconds(1),
-                                                   &EhtFrameExchangeManager::TxopEnd,
-                                                   this,
-                                                   sender);
+            m_dlTxopStart = true;
         }
     }
+    else if (m_staMac && m_staMac->IsEmlsrLink(m_linkId) && !m_ongoingTxopEnd.IsPending() &&
+             m_phy->GetPhyId() == m_staMac->GetEmlsrManager()->GetMainPhyId() &&
+             (hdr.IsRts() || hdr.IsBlockAckReq() || (hdr.IsData() && hdr.GetAddr1() == m_self)))
+    {
+        // a frame that is starting a DL TXOP has been received by the main PHY
+        m_dlTxopStart = true;
+    }
 
-    if (!m_icfReceived && ShallDropReceivedMpdu(mpdu))
+    if (!m_dlTxopStart && ShallDropReceivedMpdu(mpdu))
     {
         NS_LOG_DEBUG("Drop received MPDU: " << *mpdu);
         return;
@@ -1502,7 +1554,16 @@
         this << *psdu << rxSignalInfo << txVector << perMpduStatus.size()
              << std::all_of(perMpduStatus.begin(), perMpduStatus.end(), [](bool v) { return v; }));
 
-    if (ShallDropReceivedMpdu(*psdu->begin()))
+    const auto& hdr = psdu->GetHeader(0);
+    if (m_staMac && m_staMac->IsEmlsrLink(m_linkId) && !m_ongoingTxopEnd.IsPending() &&
+        m_phy->GetPhyId() == m_staMac->GetEmlsrManager()->GetMainPhyId() &&
+        (hdr.IsData() && hdr.GetAddr1() == m_self))
+    {
+        // a frame that is starting a DL TXOP has been received by the main PHY
+        m_dlTxopStart = true;
+    }
+
+    if (!m_dlTxopStart && ShallDropReceivedMpdu(*psdu->begin()))
     {
         return;
     }
@@ -1521,6 +1582,25 @@
         return false;
     }
 
+    // discard any frame received after scheduling a CTS response. It has been observed that
+    // an ICF may be received by both the main PHY and an aux PHY (leading to scheduling a
+    // CTS response twice) if:
+    // - the main PHY switches to an aux PHY link and completes the switch during the preamble
+    //   detection period for a PPDU (that is not an ICF), hence main PHY connection is postponed
+    // - right afterwards, an ICF is transmitted on the aux PHY link (collision with the other
+    //   PPDU)
+    // - the main PHY starts receiving the ICF, and so does the aux PHY because the ICF signal
+    //   is stronger
+    // - at the end of the ICF reception, the aux PHY notifies the ICF to the FEM, which schedules
+    //   a CTS and connects the main PHY to the link; then, the main PHY notifies the ICF to the
+    //   FEM again
+    if (m_sendCtsEvent.IsPending())
+    {
+        NS_LOG_DEBUG("Dropping " << *mpdu << " received when CTS is scheduled for TX on link "
+                                 << +m_linkId);
+        return true;
+    }
+
     const auto& hdr = mpdu->GetHeader();
 
     // We impose that an aux PHY is only able to receive an ICF, a CF-End, a CTS or a management
@@ -1604,7 +1684,7 @@
             // started before the reception of the ICF ended. We drop this ICF and let the
             // UL TXOP continue.
             NS_LOG_DEBUG("Drop ICF because another EMLSR link is being used");
-            m_icfDropCallback(WifiIcfDrop::USING_OTHER_LINK, m_linkId);
+            m_icfDropCallback({WifiIcfDrop::USING_OTHER_LINK, m_linkId, m_bssid});
             return true;
         }
     }
@@ -1631,30 +1711,14 @@
     else if (auto mainPhy = m_staMac->GetDevice()->GetPhy(emlsrManager->GetMainPhyId());
              mainPhy != m_phy)
     {
-        const auto delay = mainPhy->GetChannelSwitchDelay();
-        auto lastTime = mainPhy->GetState()->GetLastTime({WifiPhyState::TX});
-        auto reason = WifiIcfDrop::NOT_ENOUGH_TIME_TX;
-
-        if (auto lastSwitch = mainPhy->GetState()->GetLastTime({WifiPhyState::SWITCHING});
-            lastSwitch > lastTime)
-        {
-            lastTime = lastSwitch;
-            reason = WifiIcfDrop::NOT_ENOUGH_TIME_SWITCH;
-        }
-        if (auto lastSleep = mainPhy->GetState()->GetLastTime({WifiPhyState::SLEEP});
-            lastSleep > lastTime)
-        {
-            lastTime = lastSleep;
-            reason = WifiIcfDrop::NOT_ENOUGH_TIME_SLEEP;
-        }
-        // ignore RX state for now
+        auto reason = emlsrManager->CheckMainPhyTakesOverDlTxop(m_linkId);
 
-        if (lastTime > Simulator::Now() - delay)
+        if (reason.has_value())
         {
             NS_LOG_DEBUG(
                 "Drop ICF due to not enough time for the main PHY to switch link; reason = "
-                << reason);
-            m_icfDropCallback(reason, m_linkId);
+                << *reason);
+            m_icfDropCallback({*reason, m_linkId, m_bssid});
             return true;
         }
     }
@@ -1726,6 +1790,8 @@
         // after the end of this PPDU, hence we need to postpone the TXOP end in order to
         // get the PHY-RXSTART.indication
         delay = txDuration + m_phy->GetSifs() + m_phy->GetSlot() + EMLSR_RX_PHY_START_DELAY;
+        // TXOP end cannot be beyond the period protected via Duration/ID
+        delay = Min(delay, txDuration + durationId);
     }
 
     NS_LOG_DEBUG("Expected TXOP end=" << (Simulator::Now() + delay).As(Time::S));
@@ -1779,6 +1845,8 @@
     // we may send a response after a SIFS or we may receive another frame after a SIFS.
     // Postpone the TXOP end by considering the latter (which takes longer)
     auto delay = m_phy->GetSifs() + m_phy->GetSlot() + EMLSR_RX_PHY_START_DELAY;
+    // TXOP end cannot be beyond the period protected via Duration/ID
+    delay = Min(delay, durationId);
     NS_LOG_DEBUG("Expected TXOP end=" << (Simulator::Now() + delay).As(Time::S));
     m_ongoingTxopEnd =
         Simulator::Schedule(delay, &EhtFrameExchangeManager::TxopEnd, this, m_txopHolder);
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/eht/eht-frame-exchange-manager.h ns-3.45/src/wifi/model/eht/eht-frame-exchange-manager.h
--- ns-3.44/src/wifi/model/eht/eht-frame-exchange-manager.h	2025-03-09 16:55:49.787372600 -0700
+++ ns-3.45/src/wifi/model/eht/eht-frame-exchange-manager.h	2025-06-01 20:34:45.614702200 -0700
@@ -17,10 +17,6 @@
 namespace ns3
 {
 
-/// aRxPHYStartDelay value to use when waiting for a new frame in the context of EMLSR operations
-/// (Sec. 35.3.17 of 802.11be D3.1)
-extern const Time EMLSR_RX_PHY_START_DELAY;
-
 class MgtEmlOmn;
 
 /**
@@ -171,7 +167,7 @@
     void SetIcfPaddingAndTxVector(CtrlTriggerHeader& trigger, WifiTxVector& txVector) const;
 
     /// ICF drop reason traced callback (WifiMac exposes this trace source)
-    TracedCallback<WifiIcfDrop, uint8_t> m_icfDropCallback;
+    WifiMac::IcfDropTracedCallback m_icfDropCallback;
 
   protected:
     void DoDispose() override;
@@ -180,6 +176,7 @@
     void ForwardPsduMapDown(WifiConstPsduMap psduMap, WifiTxVector& txVector) override;
     void CtsAfterMuRtsTimeout(Ptr<WifiMpdu> muRts, const WifiTxVector& txVector) override;
     bool GetUpdateCwOnCtsTimeout() const override;
+    bool GetReportRtsFailed() const override;
     void SendCtsAfterMuRts(const WifiMacHeader& muRtsHdr,
                            const CtrlTriggerHeader& trigger,
                            double muRtsSnr) override;
@@ -198,7 +195,9 @@
                          const std::vector<bool>& perMpduStatus) override;
     void NavResetTimeout() override;
     void IntraBssNavResetTimeout() override;
-    void SendCtsAfterRts(const WifiMacHeader& rtsHdr, WifiMode rtsTxMode, double rtsSnr) override;
+    void SendCtsAfterRts(const WifiMacHeader& rtsHdr,
+                         const WifiTxVector& rtsTxVector,
+                         double rtsSnr) override;
     void PsduRxError(Ptr<const WifiPsdu> psdu) override;
     void ReceivedQosNullAfterBsrpTf(Mac48Address sender) override;
     void SendQosNullFramesInTbPpdu(const CtrlTriggerHeader& trigger,
@@ -242,9 +241,11 @@
      * is not involved in any DL or UL TXOP on another link.
      *
      * @param address the link MAC address of the given EMLSR client
+     * @param checkThisLink whether to check if the EMLSR client is involved in a DL TXOP on
+     *                      this link
      * @return whether transmissions could be unblocked
      */
-    bool UnblockEmlsrLinksIfAllowed(Mac48Address address);
+    bool UnblockEmlsrLinksIfAllowed(Mac48Address address, bool checkThisLink);
 
   private:
     /**
@@ -263,14 +264,23 @@
     void SwitchToListeningOrUnblockLinks(const std::set<Mac48Address>& clients);
 
     /**
-     * Generate an in-device interference of the given power on the given link for the given
-     * duration.
+     * Generate an in-device interference of the given power for the given duration for the given
+     * PHY.
      *
-     * @param linkId the ID of the link on which in-device interference is generated
+     * @param phy the PHY for which in-device interference is generated
      * @param duration the duration of the in-device interference
      * @param txPower the TX power
      */
-    void GenerateInDeviceInterference(uint8_t linkId, Time duration, Watt_u txPower);
+    void GenerateInDeviceInterference(Ptr<WifiPhy> phy, Time duration, Watt_u txPower);
+
+    /**
+     * Generate in-device interference caused by a transmission on this link for all the other PHYs
+     * of this EMLSR client.
+     *
+     * @param txDuration the duration of the transmission
+     * @param txVector the TXVECTOR used to transmit the frame
+     */
+    void GenerateInDeviceInterferenceForAll(const Time& txDuration, const WifiTxVector& txVector);
 
     /**
      * Update the TXOP end timer when starting a frame transmission.
@@ -301,8 +311,8 @@
      */
     void TxopEnd(const std::optional<Mac48Address>& txopHolder);
 
-    bool m_icfReceived{false}; //!< whether an ICF has been received and needs to be notified to
-                               //!< the EMLSR manager after post-processing the frame
+    bool m_dlTxopStart{false}; //!< whether a DL TXOP start is detected and needs to be notified to
+                               //!< the EMLSR manager after post-processing the initial frame
     EventId m_ongoingTxopEnd;  //!< event indicating the possible end of the current TXOP (of which
                                //!< we are not the holder)
     std::unordered_map<Mac48Address, EventId, WifiAddressHash>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/eht/eht-operation.cc ns-3.45/src/wifi/model/eht/eht-operation.cc
--- ns-3.44/src/wifi/model/eht/eht-operation.cc	2025-03-09 16:55:49.787372600 -0700
+++ ns-3.45/src/wifi/model/eht/eht-operation.cc	2025-06-01 20:34:45.614702200 -0700
@@ -18,28 +18,12 @@
 void
 EhtOperation::Print(std::ostream& os) const
 {
-    os << "EHT Operation=" << +m_params.opInfoPresent << "|" << +m_params.disabledSubchBmPresent
-       << "|" << +m_params.defaultPeDur << "|" << +m_params.grpBuIndLimit << "|"
-       << +m_params.grpBuExp << "|[";
-    for (const auto& maxRxNss : m_mcsNssSet.maxRxNss)
-    {
-        os << +maxRxNss << "|";
-    }
-    os << "]|[";
-    for (const auto& maxTxNss : m_mcsNssSet.maxTxNss)
-    {
-        os << +maxTxNss << "|";
-    }
-    os << "]";
+    os << "EHT Operation=[";
     if (m_opInfo.has_value())
     {
-        os << "|" << +m_opInfo->control.channelWidth << "|" << +m_opInfo->ccfs0 << "|"
-           << +m_opInfo->ccfs1;
-        if (m_opInfo->disabledSubchBm.has_value())
-        {
-            os << "|" << m_opInfo->disabledSubchBm.value();
-        }
+        os << "Channel Width: " << +m_opInfo->control.channelWidth;
     }
+    os << "]";
 }
 
 void
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/eht/eht-phy.cc ns-3.45/src/wifi/model/eht/eht-phy.cc
--- ns-3.44/src/wifi/model/eht/eht-phy.cc	2025-03-09 16:55:49.787372600 -0700
+++ ns-3.45/src/wifi/model/eht/eht-phy.cc	2025-06-01 20:34:45.614702200 -0700
@@ -8,9 +8,12 @@
 
 #include "eht-phy.h"
 
+#include "eht-configuration.h"
 #include "eht-ppdu.h"
 
 #include "ns3/interference-helper.h"
+#include "ns3/obss-pd-algorithm.h"
+#include "ns3/wifi-net-device.h"
 #include "ns3/wifi-phy.h"
 #include "ns3/wifi-psdu.h"
 #include "ns3/wifi-utils.h"
@@ -43,6 +46,16 @@
                               WIFI_PPDU_FIELD_DATA } }
 };
 
+/**
+ * \brief map a given secondary channel width to its channel list type
+ */
+const std::map<MHz_u, WifiChannelListType> ehtSecondaryChannels {
+    {20, WIFI_CHANLIST_SECONDARY},
+    {40, WIFI_CHANLIST_SECONDARY40},
+    {80, WIFI_CHANLIST_SECONDARY80},
+    {160, WIFI_CHANLIST_SECONDARY160},
+};
+
 // clang-format on
 
 EhtPhy::EhtPhy(bool buildModeList /* = true */)
@@ -76,6 +89,16 @@
     }
 }
 
+uint16_t
+EhtPhy::GetUsableSubcarriers(MHz_u channelWidth)
+{
+    if (channelWidth == MHz_u{320})
+    {
+        return 3920;
+    }
+    return HePhy::GetUsableSubcarriers(channelWidth);
+}
+
 WifiMode
 EhtPhy::GetSigMode(WifiPpduField field, const WifiTxVector& txVector) const
 {
@@ -339,7 +362,7 @@
     auto bw = txVector.GetChannelWidth();
     if (txVector.IsMu())
     {
-        bw = HeRu::GetBandwidth(txVector.GetRu(staId).GetRuType());
+        bw = WifiRu::GetBandwidth(WifiRu::GetRuType(txVector.GetRu(staId)));
     }
     return EhtPhy::GetPhyRate(txVector.GetMode(staId).GetMcsValue(),
                               bw,
@@ -353,7 +376,7 @@
     auto bw = txVector.GetChannelWidth();
     if (txVector.IsMu())
     {
-        bw = HeRu::GetBandwidth(txVector.GetRu(staId).GetRuType());
+        bw = WifiRu::GetBandwidth(WifiRu::GetRuType(txVector.GetRu(staId)));
     }
     return EhtPhy::GetDataRate(txVector.GetMode(staId).GetMcsValue(),
                                bw,
@@ -405,6 +428,129 @@
     return dataRate;
 }
 
+dBm_u
+EhtPhy::Per20MHzCcaThreshold(const Ptr<const WifiPpdu> ppdu) const
+{
+    if (!ppdu)
+    {
+        /**
+         * A signal is present on the 20 MHz subchannel at or above a threshold of –62 dBm at the
+         * receiver's antenna(s). The PHY shall indicate that the 20 MHz subchannel is busy a period
+         * aCCATime after the signal starts and shall continue to indicate the 20 MHz subchannel is
+         * busy while the threshold continues to be exceeded (Sec. 36.3.21.6.4 - Per 20 MHz CCA
+         * sensitivity - of 802.11be D7.0).
+         */
+        return m_wifiPhy->GetCcaEdThreshold();
+    }
+
+    /**
+     * A non-HT, HT_MF, HT_GF, VHT, HE, or EHT PPDU for which the power measured within
+     * this 20 MHz subchannel is at or above max(–72 dBm, OBSS_PD level) at the
+     * receiver’s antenna(s). The PHY shall indicate that the 20 MHz subchannel is busy
+     * with greater than 90% probability within a period aCCAMidTime (Sec. 36.3.21.6.4 - Per 20 MHz
+     * CCA sensitivity - of 802.11be D7.0).
+     */
+    auto ehtConfiguration = m_wifiPhy->GetDevice()->GetEhtConfiguration();
+    NS_ASSERT(ehtConfiguration);
+    const auto ccaThresholdNonObss = ehtConfiguration->m_per20CcaSensitivityThreshold;
+    return GetObssPdAlgorithm()
+               ? std::max(ccaThresholdNonObss, GetObssPdAlgorithm()->GetObssPdLevel())
+               : ccaThresholdNonObss;
+}
+
+dBm_u
+EhtPhy::GetCcaThreshold(const Ptr<const WifiPpdu> ppdu, WifiChannelListType channelType) const
+{
+    if (channelType != WIFI_CHANLIST_PRIMARY)
+    {
+        return Per20MHzCcaThreshold(ppdu);
+    }
+    return HePhy::GetCcaThreshold(ppdu, channelType);
+}
+
+const std::map<MHz_u, WifiChannelListType>&
+EhtPhy::GetCcaSecondaryChannels() const
+{
+    return ehtSecondaryChannels;
+}
+
+PhyEntity::CcaIndication
+EhtPhy::GetCcaIndicationOnSecondary(const Ptr<const WifiPpdu> ppdu)
+{
+    const auto secondaryWidthsToCheck = GetCcaSecondaryWidths(ppdu);
+
+    for (auto secondaryWidth : secondaryWidthsToCheck)
+    {
+        const auto channelType = ehtSecondaryChannels.at(secondaryWidth);
+        const auto ccaThreshold = GetCcaThreshold(ppdu, channelType);
+        const auto indices =
+            m_wifiPhy->GetOperatingChannel().GetAll20MHzChannelIndicesInSecondary(secondaryWidth);
+        for (auto index : indices)
+        {
+            const auto band = m_wifiPhy->GetBand(20, index);
+            if (const auto delayUntilCcaEnd = GetDelayUntilCcaEnd(ccaThreshold, band);
+                delayUntilCcaEnd.IsStrictlyPositive())
+            {
+                return std::make_pair(delayUntilCcaEnd, channelType);
+            }
+        }
+    }
+
+    return std::nullopt;
+}
+
+std::vector<Time>
+EhtPhy::GetPer20MHzDurations(const Ptr<const WifiPpdu> ppdu)
+{
+    NS_LOG_FUNCTION(this);
+
+    /**
+     * 36.3.21.6.4 Per 20 MHz CCA sensitivity:
+     * If the operating channel width is greater than 20 MHz and the PHY issues a PHY-CCA.indication
+     * primitive, the PHY shall set the per20bitmap to indicate the busy/idle status of each 20 MHz
+     * subchannel.
+     */
+    if (m_wifiPhy->GetChannelWidth() < 40)
+    {
+        return {};
+    }
+
+    std::vector<Time> per20MhzDurations{};
+    const auto indices = m_wifiPhy->GetOperatingChannel().GetAll20MHzChannelIndicesInPrimary(
+        m_wifiPhy->GetChannelWidth());
+    for (auto index : indices)
+    {
+        auto band = m_wifiPhy->GetBand(20, index);
+        /**
+         * A signal is present on the 20 MHz subchannel at or above a threshold of –62 dBm at the
+         * receiver's antenna(s). The PHY shall indicate that the 20 MHz subchannel is busy a period
+         * aCCATime after the signal starts and shall continue to indicate the 20 MHz subchannel is
+         * busy while the threshold continues to be exceeded.
+         */
+        dBm_u ccaThreshold = -62;
+        auto delayUntilCcaEnd = GetDelayUntilCcaEnd(ccaThreshold, band);
+
+        if (ppdu)
+        {
+            const MHz_u subchannelMinFreq =
+                m_wifiPhy->GetFrequency() - (m_wifiPhy->GetChannelWidth() / 2) + (index * 20);
+            const MHz_u subchannelMaxFreq = subchannelMinFreq + 20;
+            const auto ppduBw = ppdu->GetTxVector().GetChannelWidth();
+
+            if ((ppduBw <= m_wifiPhy->GetChannelWidth()) &&
+                ppdu->DoesOverlapChannel(subchannelMinFreq, subchannelMaxFreq))
+            {
+                ccaThreshold = Per20MHzCcaThreshold(ppdu);
+                const auto ppduCcaDuration = GetDelayUntilCcaEnd(ccaThreshold, band);
+                delayUntilCcaEnd = std::max(delayUntilCcaEnd, ppduCcaDuration);
+            }
+        }
+        per20MhzDurations.push_back(delayUntilCcaEnd);
+    }
+
+    return per20MhzDurations;
+}
+
 } // namespace ns3
 
 namespace
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/eht/eht-phy.h ns-3.45/src/wifi/model/eht/eht-phy.h
--- ns-3.44/src/wifi/model/eht/eht-phy.h	2025-03-09 16:55:49.787372600 -0700
+++ ns-3.45/src/wifi/model/eht/eht-phy.h	2025-06-01 20:34:45.614702200 -0700
@@ -54,6 +54,8 @@
                             const WifiTxVector& txVector,
                             Time ppduDuration) override;
     WifiMode GetSigBMode(const WifiTxVector& txVector) const override;
+    Time CalculateNonHeDurationForHeTb(const WifiTxVector& txVector) const override;
+    Time CalculateNonHeDurationForHeMu(const WifiTxVector& txVector) const override;
 
     /**
      * Initialize all EHT modes.
@@ -249,9 +251,12 @@
                                 PhyFieldRxStatus status,
                                 WifiPpduField field) override;
     WifiPhyRxfailureReason GetFailureReason(WifiPpduField field) const override;
-    Time CalculateNonHeDurationForHeTb(const WifiTxVector& txVector) const override;
-    Time CalculateNonHeDurationForHeMu(const WifiTxVector& txVector) const override;
     uint32_t GetSigBSize(const WifiTxVector& txVector) const override;
+    dBm_u GetCcaThreshold(const Ptr<const WifiPpdu> ppdu,
+                          WifiChannelListType channelType) const override;
+    const std::map<MHz_u, WifiChannelListType>& GetCcaSecondaryChannels() const override;
+    PhyEntity::CcaIndication GetCcaIndicationOnSecondary(const Ptr<const WifiPpdu> ppdu) override;
+    std::vector<Time> GetPer20MHzDurations(const Ptr<const WifiPpdu> ppdu) override;
 
     /**
      * Create and return the EHT MCS corresponding to
@@ -278,8 +283,24 @@
      */
     static uint64_t CalculateNonHtReferenceRate(WifiCodeRate codeRate, uint16_t constellationSize);
 
+    /**
+     * @param channelWidth the channel width
+     * @return he number of usable subcarriers for data
+     */
+    static uint16_t GetUsableSubcarriers(MHz_u channelWidth);
+
+    /**
+     * Compute the CCA threshold for Per 20MHz check.
+     * This threshold is used for CCA check when signal is not occupying P20 or for Per 20MHz CCA
+     * check.
+     *
+     * @param ppdu the incoming PPDU or nullptr for any signal
+     * @return the CCA threshold for Per 20MHz check
+     */
+    dBm_u Per20MHzCcaThreshold(const Ptr<const WifiPpdu> ppdu) const;
+
     static const PpduFormats m_ehtPpduFormats; //!< EHT PPDU formats
-};                                             // class EhtPhy
+};
 
 } // namespace ns3
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/eht/eht-ppdu.cc ns-3.45/src/wifi/model/eht/eht-ppdu.cc
--- ns-3.44/src/wifi/model/eht/eht-ppdu.cc	2025-03-09 16:55:49.787372600 -0700
+++ ns-3.45/src/wifi/model/eht/eht-ppdu.cc	2025-06-01 20:34:45.614702200 -0700
@@ -13,8 +13,10 @@
 #include "ns3/log.h"
 #include "ns3/wifi-phy-operating-channel.h"
 #include "ns3/wifi-psdu.h"
+#include "ns3/wifi-utils.h"
 
 #include <algorithm>
+#include <initializer_list>
 #include <numeric>
 
 namespace ns3
@@ -28,7 +30,7 @@
                  Time ppduDuration,
                  uint64_t uid,
                  TxPsdFlag flag)
-    : HePpdu(psdus, txVector, channel, ppduDuration, uid, flag)
+    : HePpdu(psdus, txVector, channel, ppduDuration, uid, flag, false)
 {
     NS_LOG_FUNCTION(this << psdus << txVector << channel << ppduDuration << uid << flag);
     SetPhyHeaders(txVector, ppduDuration);
@@ -38,6 +40,7 @@
 EhtPpdu::SetPhyHeaders(const WifiTxVector& txVector, Time ppduDuration)
 {
     NS_LOG_FUNCTION(this << txVector << ppduDuration);
+    SetLSigHeader(ppduDuration);
     SetEhtPhyHeader(txVector);
 }
 
@@ -50,7 +53,8 @@
     {
         const auto p20Index = m_operatingChannel.GetPrimaryChannelIndex(MHz_u{20});
         m_ehtPhyHeader.emplace<EhtMuPhyHeader>(EhtMuPhyHeader{
-            .m_bandwidth = GetChannelWidthEncodingFromMhz(txVector.GetChannelWidth()),
+            .m_bandwidth =
+                GetChannelWidthEncodingFromMhz(txVector.GetChannelWidth(), m_operatingChannel),
             .m_bssColor = bssColor,
             .m_ppduType = txVector.GetEhtPpduType(),
             // TODO: EHT PPDU should store U-SIG per 20 MHz band, assume it is the lowest 20 MHz
@@ -70,18 +74,54 @@
              * sounding NDP, the Common field of the EHT-SIG content channel is encoded together
              * with the first User field and this encoding block contains a CRC and Tail, referred
              * to as a common encoding block. */
-            .m_ruAllocationA =
-                txVector.IsMu() ? std::optional{txVector.GetRuAllocation(p20Index)} : std::nullopt,
+            .m_ruAllocationA = txVector.IsMu() && !txVector.IsSigBCompression()
+                                   ? std::optional{txVector.GetRuAllocation(p20Index)}
+                                   : std::nullopt,
             // TODO: RU Allocation-B not supported yet
             .m_contentChannels = GetEhtSigContentChannels(txVector, p20Index)});
     }
     else if (ns3::IsUlMu(m_preamble))
     {
-        m_ehtPhyHeader.emplace<EhtTbPhyHeader>(EhtTbPhyHeader{
-            .m_bandwidth = GetChannelWidthEncodingFromMhz(txVector.GetChannelWidth()),
-            .m_bssColor = bssColor,
-            .m_ppduType = txVector.GetEhtPpduType()});
+        m_ehtPhyHeader.emplace<EhtTbPhyHeader>(
+            EhtTbPhyHeader{.m_bandwidth = GetChannelWidthEncodingFromMhz(txVector.GetChannelWidth(),
+                                                                         m_operatingChannel),
+                           .m_bssColor = bssColor,
+                           .m_ppduType = txVector.GetEhtPpduType()});
+    }
+}
+
+uint8_t
+EhtPpdu::GetChannelWidthEncodingFromMhz(MHz_u channelWidth, const WifiPhyOperatingChannel& channel)
+{
+    NS_ASSERT(channel.GetTotalWidth() >= channelWidth);
+    if (channelWidth == MHz_u{320})
+    {
+        switch (channel.GetNumber())
+        {
+        case 31:
+        case 95:
+        case 159:
+            return 4;
+        case 63:
+        case 127:
+        case 191:
+            return 5;
+        default:
+            NS_ASSERT_MSG(false, "Invalid 320 MHz channel number " << +channel.GetNumber());
+            return 4;
+        }
+    }
+    return HePpdu::GetChannelWidthEncodingFromMhz(channelWidth);
+}
+
+MHz_u
+EhtPpdu::GetChannelWidthMhzFromEncoding(uint8_t bandwidth)
+{
+    if ((bandwidth == 4) || (bandwidth == 5))
+    {
+        return MHz_u{320};
     }
+    return HePpdu::GetChannelWidthMhzFromEncoding(bandwidth);
 }
 
 WifiPpduType
@@ -132,7 +172,7 @@
         {
             // TODO: use punctured channel information
         }
-        txVector.SetSigBMode(HePhy::GetVhtMcs(ehtPhyHeader->m_ehtSigMcs));
+        txVector.SetSigBMode(EhtPhy::GetVhtMcs(ehtPhyHeader->m_ehtSigMcs));
         txVector.SetGuardInterval(GetGuardIntervalFromEncoding(ehtPhyHeader->m_giLtfSize));
         const auto ruAllocation = ehtPhyHeader->m_ruAllocationA; // RU Allocation-B not supported
                                                                  // yet
@@ -149,12 +189,14 @@
                                       [](uint8_t prev, const auto& cc) { return prev + cc.size(); })
                     : 0;
             SetHeMuUserInfos(txVector,
+                             WIFI_MOD_CLASS_EHT,
                              ruAllocation.value(),
+                             std::nullopt,
                              ehtPhyHeader->m_contentChannels,
                              ehtPhyHeader->m_ppduType == 2,
                              muMimoUsers);
         }
-        if (ehtPhyHeader->m_ppduType == 1) // EHT SU
+        else if (ehtPhyHeader->m_ppduType == 1) // EHT SU
         {
             NS_ASSERT(ehtPhyHeader->m_contentChannels.size() == 1 &&
                       ehtPhyHeader->m_contentChannels.front().size() == 1);
@@ -162,6 +204,14 @@
                 EhtPhy::GetEhtMcs(ehtPhyHeader->m_contentChannels.front().front().mcs));
             txVector.SetNss(ehtPhyHeader->m_contentChannels.front().front().nss);
         }
+        else
+        {
+            const auto fullBwRu{EhtRu::RuSpec(WifiRu::GetRuType(bw), 1, true, true)};
+            txVector.SetHeMuUserInfo(ehtPhyHeader->m_contentChannels.front().front().staId,
+                                     {fullBwRu,
+                                      ehtPhyHeader->m_contentChannels.front().front().mcs,
+                                      ehtPhyHeader->m_contentChannels.front().front().nss});
+        }
     }
     else if (ns3::IsUlMu(m_preamble))
     {
@@ -185,7 +235,9 @@
         return {1, 0};
     }
     return HePpdu::GetNumRusPerHeSigBContentChannel(channelWidth,
+                                                    WIFI_MOD_CLASS_EHT,
                                                     ruAllocation,
+                                                    std::nullopt,
                                                     compression,
                                                     numMuMimoUsers);
 }
@@ -302,6 +354,64 @@
     return 0;
 }
 
+Ptr<const WifiPsdu>
+EhtPpdu::GetPsdu(uint8_t bssColor, uint16_t staId /* = SU_STA_ID */) const
+{
+    if (m_psdus.contains(SU_STA_ID))
+    {
+        NS_ASSERT(m_psdus.size() == 1);
+        return m_psdus.at(SU_STA_ID);
+    }
+
+    if (IsUlMu())
+    {
+        auto ehtPhyHeader = std::get_if<EhtTbPhyHeader>(&m_ehtPhyHeader);
+        NS_ASSERT(ehtPhyHeader);
+        NS_ASSERT(m_psdus.size() == 1);
+        if ((bssColor == 0) || (ehtPhyHeader->m_bssColor == 0) ||
+            (bssColor == ehtPhyHeader->m_bssColor))
+        {
+            return m_psdus.cbegin()->second;
+        }
+    }
+    else if (IsDlMu())
+    {
+        auto ehtPhyHeader = std::get_if<EhtMuPhyHeader>(&m_ehtPhyHeader);
+        NS_ASSERT(ehtPhyHeader);
+        if ((bssColor == 0) || (ehtPhyHeader->m_bssColor == 0) ||
+            (bssColor == ehtPhyHeader->m_bssColor))
+        {
+            const auto it = m_psdus.find(staId);
+            if (it != m_psdus.cend())
+            {
+                return it->second;
+            }
+        }
+    }
+
+    return nullptr;
+}
+
+WifiRu::RuSpec
+EhtPpdu::GetRuSpec(std::size_t ruAllocIndex, MHz_u bw, RuType ruType, std::size_t phyIndex) const
+{
+    if (ruType == RuType::RU_26_TONE)
+    {
+        for (const auto undefinedRu : std::initializer_list<std::size_t>{19, 56, 93, 130})
+        {
+            if (phyIndex >= undefinedRu)
+            {
+                ++phyIndex;
+            }
+        }
+    }
+    const auto p20Index = m_operatingChannel.GetPrimaryChannelIndex(MHz_u{20});
+    const auto& [primary160, primary80OrLow80] =
+        EhtRu::GetPrimaryFlags(bw, ruType, phyIndex, p20Index);
+    const auto index = EhtRu::GetIndexIn80MHzSegment(bw, ruType, phyIndex);
+    return EhtRu::RuSpec{ruType, index, primary160, primary80OrLow80};
+}
+
 Ptr<WifiPpdu>
 EhtPpdu::Copy() const
 {
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/eht/eht-ppdu.h ns-3.45/src/wifi/model/eht/eht-ppdu.h
--- ns-3.44/src/wifi/model/eht/eht-ppdu.h	2025-03-09 16:55:49.787372600 -0700
+++ ns-3.45/src/wifi/model/eht/eht-ppdu.h	2025-06-01 20:34:45.614702200 -0700
@@ -41,7 +41,7 @@
         uint8_t m_bandwidth : 3 {0};    ///< Bandwidth field
         uint8_t m_bssColor : 6 {0};     ///< BSS color field
         uint8_t m_ppduType : 2 {0};     ///< PPDU Type And Compressed Mode field
-    };                                  // struct EhtTbPhyHeader
+    };
 
     /**
      * PHY header for EHT MU PPDUs
@@ -65,7 +65,7 @@
                                                      //!< carried in EHT-SIG common subfields
 
         HeSigBContentChannels m_contentChannels; //!< EHT-SIG Content Channels
-    };                                           // struct EhtMuPhyHeader
+    };
 
     /// type of the EHT PHY header
     using EhtPhyHeader = std::variant<std::monostate, EhtTbPhyHeader, EhtMuPhyHeader>;
@@ -90,6 +90,7 @@
             TxPsdFlag flag);
 
     WifiPpduType GetType() const override;
+    Ptr<const WifiPsdu> GetPsdu(uint8_t bssColor, uint16_t staId = SU_STA_ID) const override;
     Ptr<WifiPpdu> Copy() const override;
 
     /**
@@ -150,6 +151,12 @@
                                     uint8_t ehtPpduType,
                                     std::optional<bool> isLow80MHz);
 
+  protected:
+    WifiRu::RuSpec GetRuSpec(std::size_t ruAllocIndex,
+                             MHz_u bw,
+                             RuType ruType,
+                             std::size_t phyIndex) const override;
+
   private:
     bool IsDlMu() const override;
     bool IsUlMu() const override;
@@ -161,7 +168,7 @@
      * @param txVector the TXVECTOR that was used for this PPDU
      * @param ppduDuration the transmission duration of this PPDU
      */
-    void SetPhyHeaders(const WifiTxVector& txVector, Time ppduDuration);
+    void SetPhyHeaders(const WifiTxVector& txVector, Time ppduDuration) override;
 
     /**
      * Fill in the EHT PHY header.
@@ -170,8 +177,26 @@
      */
     void SetEhtPhyHeader(const WifiTxVector& txVector);
 
+    /**
+     * Convert channel width expressed in MHz to bandwidth field encoding in U-SIG.
+     *
+     * @param channelWidth the channel width in MHz to use for the transmission
+     * @param channel the operating channel of the PHY
+     * @return the value used to encode the bandwidth field in U-SIG
+     */
+    static uint8_t GetChannelWidthEncodingFromMhz(MHz_u channelWidth,
+                                                  const WifiPhyOperatingChannel& channel);
+
+    /**
+     * Convert channel width expressed in MHz from bandwidth field encoding in U-SIG.
+     *
+     * @param bandwidth the value of the bandwidth field in U-SIG
+     * @return the channel width in MHz
+     */
+    static MHz_u GetChannelWidthMhzFromEncoding(uint8_t bandwidth);
+
     EhtPhyHeader m_ehtPhyHeader; //!< the EHT PHY header
-};                               // class EhtPpdu
+};
 
 } // namespace ns3
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/eht/eht-ru.cc ns-3.45/src/wifi/model/eht/eht-ru.cc
--- ns-3.44/src/wifi/model/eht/eht-ru.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.45/src/wifi/model/eht/eht-ru.cc	2025-06-01 20:34:45.614702200 -0700
@@ -0,0 +1,1220 @@
+/*
+ * Copyright (c) 2024
+ *
+ * SPDX-License-Identifier: GPL-2.0-only
+ *
+ * Author: Sébastien Deronne <sebastien.deronne@gmail.com>
+ */
+
+#include "eht-ru.h"
+
+#include "ns3/abort.h"
+#include "ns3/assert.h"
+#include "ns3/wifi-ru.h"
+
+#include <algorithm>
+#include <optional>
+#include <set>
+#include <tuple>
+
+namespace ns3
+{
+
+const SubcarrierGroups EhtRu::m_ruSubcarrierGroups{
+    // TODO: cleanup code duplication with HeRu
+    // RUs in a 20 MHz HE PPDU (Table 27-7 IEEE802.11ax-2021)
+    {{MHz_u{20}, RuType::RU_26_TONE},
+     {/* 1 */ {{-121, -96}},
+      /* 2 */ {{-95, -70}},
+      /* 3 */ {{-68, -43}},
+      /* 4 */ {{-42, -17}},
+      /* 5 */ {{-16, -4}, {4, 16}},
+      /* 6 */ {{17, 42}},
+      /* 7 */ {{43, 68}},
+      /* 8 */ {{70, 95}},
+      /* 9 */ {{96, 121}}}},
+    {{MHz_u{20}, RuType::RU_52_TONE},
+     {/* 1 */ {{-121, -70}},
+      /* 2 */ {{-68, -17}},
+      /* 3 */ {{17, 68}},
+      /* 4 */ {{70, 121}}}},
+    {{MHz_u{20}, RuType::RU_106_TONE},
+     {/* 1 */ {{-122, -17}},
+      /* 2 */ {{17, 122}}}},
+    {{MHz_u{20}, RuType::RU_242_TONE}, {/* 1 */ {{-122, -2}, {2, 122}}}},
+    // RUs in a 40 MHz HE PPDU (Table 27-8 IEEE802.11ax-2021)
+    {{MHz_u{40}, RuType::RU_26_TONE},
+     {/* 1 */ {{-243, -218}},
+      /* 2 */ {{-217, -192}},
+      /* 3 */ {{-189, -164}},
+      /* 4 */ {{-163, -138}},
+      /* 5 */ {{-136, -111}},
+      /* 6 */ {{-109, -84}},
+      /* 7 */ {{-83, -58}},
+      /* 8 */ {{-55, -30}},
+      /* 9 */ {{-29, -4}},
+      /* 10 */ {{4, 29}},
+      /* 11 */ {{30, 55}},
+      /* 12 */ {{58, 83}},
+      /* 13 */ {{84, 109}},
+      /* 14 */ {{111, 136}},
+      /* 15 */ {{138, 163}},
+      /* 16 */ {{164, 189}},
+      /* 17 */ {{192, 217}},
+      /* 18 */ {{218, 243}}}},
+    {{MHz_u{40}, RuType::RU_52_TONE},
+     {/* 1 */ {{-243, -192}},
+      /* 2 */ {{-189, -138}},
+      /* 3 */ {{-109, -58}},
+      /* 4 */ {{-55, -4}},
+      /* 5 */ {{4, 55}},
+      /* 6 */ {{58, 109}},
+      /* 7 */ {{138, 189}},
+      /* 8 */ {{192, 243}}}},
+    {{MHz_u{40}, RuType::RU_106_TONE},
+     {/* 1 */ {{-243, -138}},
+      /* 2 */ {{-109, -4}},
+      /* 3 */ {{4, 109}},
+      /* 4 */ {{138, 243}}}},
+    {{MHz_u{40}, RuType::RU_242_TONE},
+     {/* 1 */ {{-244, -3}},
+      /* 2 */ {{3, 244}}}},
+    {{MHz_u{40}, RuType::RU_484_TONE}, {/* 1 */ {{-244, -3}, {3, 244}}}},
+    // RUs in an 80 MHz EHT PPDU (Table 36-5 IEEE802.11be-D7.0)
+    {{MHz_u{80}, RuType::RU_26_TONE},
+     {/* 1 */ {{-499, -474}},
+      /* 2 */ {{-473, -448}},
+      /* 3 */ {{-445, -420}},
+      /* 4 */ {{-419, -394}},
+      /* 5 */ {{-392, -367}},
+      /* 6 */ {{-365, -340}},
+      /* 7 */ {{-339, -314}},
+      /* 8 */ {{-311, -286}},
+      /* 9 */ {{-285, -260}},
+      /* 10 */ {{-252, -227}},
+      /* 11 */ {{-226, -201}},
+      /* 12 */ {{-198, -173}},
+      /* 13 */ {{-172, -147}},
+      /* 14 */ {{-145, -120}},
+      /* 15 */ {{-118, -93}},
+      /* 16 */ {{-92, -67}},
+      /* 17 */ {{-64, -39}},
+      /* 18 */ {{-38, -13}},
+      /* 19 not defined */ {},
+      /* 20 */ {{13, 38}},
+      /* 21 */ {{39, 64}},
+      /* 22 */ {{67, 92}},
+      /* 23 */ {{93, 118}},
+      /* 24 */ {{120, 145}},
+      /* 25 */ {{147, 172}},
+      /* 26 */ {{173, 198}},
+      /* 27 */ {{201, 226}},
+      /* 28 */ {{227, 252}},
+      /* 29 */ {{260, 285}},
+      /* 30 */ {{286, 311}},
+      /* 31 */ {{314, 339}},
+      /* 32 */ {{340, 365}},
+      /* 33 */ {{367, 392}},
+      /* 34 */ {{394, 419}},
+      /* 35 */ {{420, 445}},
+      /* 36 */ {{448, 473}},
+      /* 37 */ {{474, 499}}}},
+    {{MHz_u{80}, RuType::RU_52_TONE},
+     {/* 1 */ {{-499, -448}},
+      /* 2 */ {{-445, -394}},
+      /* 3 */ {{-365, -314}},
+      /* 4 */ {{-311, -260}},
+      /* 5 */ {{-252, -201}},
+      /* 6 */ {{-198, -147}},
+      /* 7 */ {{-118, -67}},
+      /* 8 */ {{-64, -13}},
+      /* 9 */ {{13, 64}},
+      /* 10 */ {{67, 118}},
+      /* 11 */ {{147, 198}},
+      /* 12 */ {{201, 252}},
+      /* 13 */ {{260, 311}},
+      /* 14 */ {{314, 365}},
+      /* 15 */ {{394, 445}},
+      /* 16 */ {{448, 499}}}},
+    {{MHz_u{80}, RuType::RU_106_TONE},
+     {/* 1 */ {{-499, -394}},
+      /* 2 */ {{-365, -260}},
+      /* 3 */ {{-252, -147}},
+      /* 4 */ {{-118, -13}},
+      /* 5 */ {{13, 118}},
+      /* 6 */ {{147, 252}},
+      /* 7 */ {{260, 365}},
+      /* 8 */ {{394, 499}}}},
+    {{MHz_u{80}, RuType::RU_242_TONE},
+     {/* 1 */ {{-500, -259}},
+      /* 2 */ {{-253, -12}},
+      /* 3 */ {{12, 253}},
+      /* 4 */ {{259, 500}}}},
+    {{MHz_u{80}, RuType::RU_484_TONE},
+     {/* 1 */ {{-500, -259}, {-253, -12}},
+      /* 2 */ {{12, 253}, {259, 500}}}},
+    {{MHz_u{80}, RuType::RU_996_TONE}, {/* 1 */ {{-500, -3}, {3, 500}}}},
+    // RUs in an 160 MHz EHT PPDU (Table 36-6 IEEE802.11be-D7.0)
+    {{MHz_u{160}, RuType::RU_26_TONE},
+     {/* 1 */ {{-1011, -986}},
+      /* 2 */ {{-985, -960}},
+      /* 3 */ {{-957, -932}},
+      /* 4 */ {{-931, -906}},
+      /* 5 */ {{-904, -879}},
+      /* 6 */ {{-877, -852}},
+      /* 7 */ {{-851, -826}},
+      /* 8 */ {{-823, -798}},
+      /* 9 */ {{-797, -772}},
+      /* 10 */ {{-764, -739}},
+      /* 11 */ {{-738, -713}},
+      /* 12 */ {{-710, -685}},
+      /* 13 */ {{-684, -659}},
+      /* 14 */ {{-657, -632}},
+      /* 15 */ {{-630, -605}},
+      /* 16 */ {{-604, -579}},
+      /* 17 */ {{-576, -551}},
+      /* 18 */ {{-550, -525}},
+      /* 19 not defined */ {},
+      /* 20 */ {{-499, -474}},
+      /* 21 */ {{-473, -448}},
+      /* 22 */ {{-445, -420}},
+      /* 23 */ {{-419, -394}},
+      /* 24 */ {{-392, -367}},
+      /* 25 */ {{-365, -340}},
+      /* 26 */ {{-339, -314}},
+      /* 27 */ {{-311, -286}},
+      /* 28 */ {{-285, -260}},
+      /* 29 */ {{-252, -227}},
+      /* 30 */ {{-226, -201}},
+      /* 31 */ {{-198, -173}},
+      /* 32 */ {{-172, -147}},
+      /* 33 */ {{-145, -120}},
+      /* 34 */ {{-118, -93}},
+      /* 35 */ {{-92, -67}},
+      /* 36 */ {{-64, -39}},
+      /* 37 */ {{-38, -13}},
+      /* 38 */ {{13, 38}},
+      /* 39 */ {{39, 64}},
+      /* 40 */ {{67, 92}},
+      /* 41 */ {{93, 118}},
+      /* 42 */ {{120, 145}},
+      /* 43 */ {{147, 172}},
+      /* 44 */ {{173, 198}},
+      /* 45 */ {{201, 226}},
+      /* 46 */ {{227, 252}},
+      /* 47 */ {{260, 285}},
+      /* 48 */ {{286, 311}},
+      /* 49 */ {{314, 339}},
+      /* 50 */ {{340, 365}},
+      /* 51 */ {{367, 392}},
+      /* 52 */ {{394, 419}},
+      /* 53 */ {{420, 445}},
+      /* 54 */ {{448, 473}},
+      /* 55 */ {{474, 499}},
+      /* 56 not defined */ {},
+      /* 57 */ {{525, 550}},
+      /* 58 */ {{551, 576}},
+      /* 59 */ {{579, 604}},
+      /* 60 */ {{605, 630}},
+      /* 61 */ {{632, 657}},
+      /* 62 */ {{659, 684}},
+      /* 63 */ {{685, 710}},
+      /* 64 */ {{713, 738}},
+      /* 65 */ {{739, 764}},
+      /* 66 */ {{772, 797}},
+      /* 67 */ {{798, 823}},
+      /* 68 */ {{826, 851}},
+      /* 69 */ {{852, 877}},
+      /* 70 */ {{879, 904}},
+      /* 71 */ {{906, 931}},
+      /* 72 */ {{932, 957}},
+      /* 73 */ {{960, 985}},
+      /* 74 */ {{986, 1011}}}},
+    {{MHz_u{160}, RuType::RU_52_TONE},
+     {/* 1 */ {{-1011, -960}},
+      /* 2 */ {{-957, -906}},
+      /* 3 */ {{-877, -826}},
+      /* 4 */ {{-823, -772}},
+      /* 5 */ {{-764, -713}},
+      /* 6 */ {{-710, -659}},
+      /* 7 */ {{-630, -579}},
+      /* 8 */ {{-576, -525}},
+      /* 9 */ {{-499, -448}},
+      /* 10 */ {{-445, -394}},
+      /* 11 */ {{-365, -314}},
+      /* 12 */ {{-311, -260}},
+      /* 13 */ {{-252, -201}},
+      /* 14 */ {{-198, -147}},
+      /* 15 */ {{-118, -67}},
+      /* 16 */ {{-64, -13}},
+      /* 17 */ {{13, 64}},
+      /* 18 */ {{67, 118}},
+      /* 19 */ {{147, 198}},
+      /* 20 */ {{201, 252}},
+      /* 21 */ {{260, 311}},
+      /* 22 */ {{314, 365}},
+      /* 23 */ {{394, 445}},
+      /* 24 */ {{448, 499}},
+      /* 25 */ {{525, 576}},
+      /* 26 */ {{579, 630}},
+      /* 27 */ {{659, 710}},
+      /* 28 */ {{713, 764}},
+      /* 29 */ {{772, 823}},
+      /* 30 */ {{826, 877}},
+      /* 31 */ {{906, 957}},
+      /* 32 */ {{960, 1011}}}},
+    {{MHz_u{160}, RuType::RU_106_TONE},
+     {/* 1 */ {{-1011, -906}},
+      /* 2 */ {{-877, -772}},
+      /* 3 */ {{-764, -659}},
+      /* 4 */ {{-630, -525}},
+      /* 5 */ {{-499, -394}},
+      /* 6 */ {{-365, -260}},
+      /* 7 */ {{-252, -147}},
+      /* 8 */ {{-118, -13}},
+      /* 9 */ {{13, 118}},
+      /* 10 */ {{147, 252}},
+      /* 11 */ {{260, 365}},
+      /* 12 */ {{394, 499}},
+      /* 13 */ {{525, 630}},
+      /* 14 */ {{659, 764}},
+      /* 15 */ {{772, 877}},
+      /* 16 */ {{906, 1011}}}},
+    {{MHz_u{160}, RuType::RU_242_TONE},
+     {/* 1 */ {{-1012, -771}},
+      /* 2 */ {{-765, -524}},
+      /* 3 */ {{-500, -259}},
+      /* 4 */ {{-253, -12}},
+      /* 5 */ {{12, 253}},
+      /* 6 */ {{259, 500}},
+      /* 7 */ {{524, 765}},
+      /* 8 */ {{771, 1012}}}},
+    {{MHz_u{160}, RuType::RU_484_TONE},
+     {/* 1 */ {{-1012, -771}, {-765, -524}},
+      /* 2 */ {{-500, -259}, {-253, -12}},
+      /* 3 */ {{12, 253}, {259, 500}},
+      /* 4 */ {{524, 765}, {771, 1012}}}},
+    {{MHz_u{160}, RuType::RU_996_TONE},
+     {/* 1 */ {{-1012, -515}, {-509, -12}},
+      /* 2 */ {{12, 509}, {515, 1012}}}},
+    {{MHz_u{160}, RuType::RU_2x996_TONE},
+     {/* 1 */ {{-1012, -515}, {-509, -12}, {12, 509}, {515, 1012}}}},
+    // RUs in an 320 MHz EHT PPDU (Table 36-7 IEEE802.11be-D7.0)
+    {{MHz_u{320}, RuType::RU_26_TONE},
+     {/* 1 */ {{-2035, -2010}},
+      /* 2 */ {{-2009, -1984}},
+      /* 3 */ {{-1981, -1956}},
+      /* 4 */ {{-1955, -1930}},
+      /* 5 */ {{-1928, -1903}},
+      /* 6 */ {{-1901, -1876}},
+      /* 7 */ {{-1875, -1850}},
+      /* 8 */ {{-1847, -1822}},
+      /* 9 */ {{-1821, -1796}},
+      /* 10 */ {{-1788, -1763}},
+      /* 11 */ {{-1762, -1737}},
+      /* 12 */ {{-1734, -1709}},
+      /* 13 */ {{-1708, -1683}},
+      /* 14 */ {{-1681, -1656}},
+      /* 15 */ {{-1654, -1629}},
+      /* 16 */ {{-1628, -1603}},
+      /* 17 */ {{-1600, -1575}},
+      /* 18 */ {{-1574, -1549}},
+      /* 19 not defined */ {},
+      /* 20 */ {{-1523, -1498}},
+      /* 21 */ {{-1497, -1472}},
+      /* 22 */ {{-1469, -1444}},
+      /* 23 */ {{-1443, -1418}},
+      /* 24 */ {{-1416, -1391}},
+      /* 25 */ {{-1389, -1364}},
+      /* 26 */ {{-1363, -1338}},
+      /* 27 */ {{-1335, -1310}},
+      /* 28 */ {{-1309, -1284}},
+      /* 29 */ {{-1276, -1251}},
+      /* 30 */ {{-1250, -1225}},
+      /* 31 */ {{-1222, -1197}},
+      /* 32 */ {{-1196, -1171}},
+      /* 33 */ {{-1169, -1144}},
+      /* 34 */ {{-1142, -1117}},
+      /* 35 */ {{-1116, -1091}},
+      /* 36 */ {{-1088, -1063}},
+      /* 37 */ {{-1062, -1037}},
+      /* 38 */ {{-1011, -986}},
+      /* 39 */ {{-985, -960}},
+      /* 40 */ {{-957, -932}},
+      /* 41 */ {{-931, -906}},
+      /* 42 */ {{-904, -879}},
+      /* 43 */ {{-877, -852}},
+      /* 44 */ {{-851, -826}},
+      /* 45 */ {{-823, -798}},
+      /* 46 */ {{-797, -772}},
+      /* 47 */ {{-764, -739}},
+      /* 48 */ {{-738, -713}},
+      /* 49 */ {{-710, -685}},
+      /* 50 */ {{-684, -659}},
+      /* 51 */ {{-657, -632}},
+      /* 52 */ {{-630, -605}},
+      /* 53 */ {{-604, -579}},
+      /* 54 */ {{-576, -551}},
+      /* 55 */ {{-550, -525}},
+      /* 56 not defined */ {},
+      /* 57 */ {{-499, -474}},
+      /* 58 */ {{-473, -448}},
+      /* 59 */ {{-445, -420}},
+      /* 60 */ {{-419, -394}},
+      /* 61 */ {{-392, -367}},
+      /* 62 */ {{-365, -340}},
+      /* 63 */ {{-339, -314}},
+      /* 64 */ {{-311, -286}},
+      /* 65 */ {{-285, -260}},
+      /* 66 */ {{-252, -227}},
+      /* 67 */ {{-226, -201}},
+      /* 68 */ {{-198, -173}},
+      /* 69 */ {{-172, -147}},
+      /* 70 */ {{-145, -120}},
+      /* 71 */ {{-118, -93}},
+      /* 72 */ {{-92, -67}},
+      /* 73 */ {{-64, -39}},
+      /* 74 */ {{-38, -13}},
+      /* 75 */ {{13, 38}},
+      /* 76 */ {{39, 64}},
+      /* 77 */ {{67, 92}},
+      /* 78 */ {{93, 118}},
+      /* 79 */ {{120, 145}},
+      /* 80 */ {{147, 172}},
+      /* 81 */ {{173, 198}},
+      /* 82 */ {{201, 226}},
+      /* 83 */ {{227, 252}},
+      /* 84 */ {{260, 285}},
+      /* 85 */ {{286, 311}},
+      /* 86 */ {{314, 339}},
+      /* 87 */ {{340, 365}},
+      /* 88 */ {{367, 392}},
+      /* 89 */ {{394, 419}},
+      /* 90 */ {{420, 445}},
+      /* 91 */ {{448, 473}},
+      /* 92 */ {{474, 499}},
+      /* 93 not defined */ {},
+      /* 94 */ {{525, 550}},
+      /* 95 */ {{551, 576}},
+      /* 96 */ {{579, 604}},
+      /* 97 */ {{605, 630}},
+      /* 98 */ {{632, 657}},
+      /* 99 */ {{659, 684}},
+      /* 100 */ {{685, 710}},
+      /* 101 */ {{713, 738}},
+      /* 102 */ {{739, 764}},
+      /* 103 */ {{772, 797}},
+      /* 104 */ {{798, 823}},
+      /* 105 */ {{826, 851}},
+      /* 106 */ {{852, 877}},
+      /* 107 */ {{879, 904}},
+      /* 108 */ {{906, 931}},
+      /* 109 */ {{932, 957}},
+      /* 110 */ {{960, 985}},
+      /* 111 */ {{986, 1011}},
+      /* 112 */ {{1037, 1062}},
+      /* 113 */ {{1063, 1088}},
+      /* 114 */ {{1091, 1116}},
+      /* 115 */ {{1117, 1142}},
+      /* 116 */ {{1144, 1169}},
+      /* 117 */ {{1171, 1196}},
+      /* 118 */ {{1197, 1222}},
+      /* 119 */ {{1225, 1250}},
+      /* 120 */ {{1251, 1276}},
+      /* 121 */ {{1284, 1309}},
+      /* 122 */ {{1310, 1335}},
+      /* 123 */ {{1338, 1363}},
+      /* 124 */ {{1364, 1389}},
+      /* 125 */ {{1391, 1416}},
+      /* 126 */ {{1418, 1443}},
+      /* 127 */ {{1444, 1469}},
+      /* 128 */ {{1472, 1497}},
+      /* 129 */ {{1498, 1523}},
+      /* 130 not defined */ {},
+      /* 131 */ {{1549, 1574}},
+      /* 132 */ {{1575, 1600}},
+      /* 133 */ {{1603, 1628}},
+      /* 134 */ {{1629, 1654}},
+      /* 135 */ {{1656, 1681}},
+      /* 136 */ {{1683, 1708}},
+      /* 137 */ {{1709, 1734}},
+      /* 138 */ {{1737, 1762}},
+      /* 139 */ {{1763, 1788}},
+      /* 140 */ {{1796, 1821}},
+      /* 141 */ {{1822, 1847}},
+      /* 142 */ {{1850, 1875}},
+      /* 143 */ {{1876, 1901}},
+      /* 144 */ {{1903, 1928}},
+      /* 145 */ {{1930, 1955}},
+      /* 146 */ {{1956, 1981}},
+      /* 147 */ {{1984, 2009}},
+      /* 148 */ {{2010, 2035}}}},
+    {{MHz_u{320}, RuType::RU_52_TONE},
+     {/* 1 */ {{-2035, -1984}},
+      /* 2 */ {{-1981, -1930}},
+      /* 3 */ {{-1901, -1850}},
+      /* 4 */ {{-1847, -1796}},
+      /* 5 */ {{-1788, -1737}},
+      /* 6 */ {{-1734, -1683}},
+      /* 7 */ {{-1654, -1603}},
+      /* 8 */ {{-1600, -1549}},
+      /* 9 */ {{-1523, -1472}},
+      /* 10 */ {{-1469, -1418}},
+      /* 11 */ {{-1389, -1338}},
+      /* 12 */ {{-1335, -1284}},
+      /* 13 */ {{-1276, -1225}},
+      /* 14 */ {{-1222, -1171}},
+      /* 15 */ {{-1142, -1091}},
+      /* 16 */ {{-1088, -1037}},
+      /* 17 */ {{-1011, -960}},
+      /* 18 */ {{-957, -906}},
+      /* 19 */ {{-877, -826}},
+      /* 20 */ {{-823, -772}},
+      /* 21 */ {{-764, -713}},
+      /* 22 */ {{-710, -659}},
+      /* 23 */ {{-630, -579}},
+      /* 24 */ {{-576, -525}},
+      /* 25 */ {{-499, -448}},
+      /* 26 */ {{-445, -394}},
+      /* 27 */ {{-365, -314}},
+      /* 28 */ {{-311, -260}},
+      /* 29 */ {{-252, -201}},
+      /* 30 */ {{-198, -147}},
+      /* 31 */ {{-118, -67}},
+      /* 32 */ {{-64, -13}},
+      /* 33 */ {{13, 64}},
+      /* 34 */ {{67, 118}},
+      /* 35 */ {{147, 198}},
+      /* 36 */ {{201, 252}},
+      /* 37 */ {{260, 311}},
+      /* 38 */ {{314, 365}},
+      /* 39 */ {{394, 445}},
+      /* 40 */ {{448, 499}},
+      /* 41 */ {{525, 576}},
+      /* 42 */ {{579, 630}},
+      /* 43 */ {{659, 710}},
+      /* 44 */ {{713, 764}},
+      /* 45 */ {{772, 823}},
+      /* 46 */ {{826, 877}},
+      /* 47 */ {{906, 957}},
+      /* 48 */ {{960, 1011}},
+      /* 49 */ {{1037, 1088}},
+      /* 50 */ {{1091, 1142}},
+      /* 51 */ {{1171, 1222}},
+      /* 52 */ {{1225, 1276}},
+      /* 53 */ {{1284, 1335}},
+      /* 54 */ {{1338, 1389}},
+      /* 55 */ {{1418, 1469}},
+      /* 56 */ {{1472, 1523}},
+      /* 57 */ {{1549, 1600}},
+      /* 58 */ {{1603, 1654}},
+      /* 59 */ {{1683, 1734}},
+      /* 60 */ {{1737, 1788}},
+      /* 61 */ {{1796, 1847}},
+      /* 62 */ {{1850, 1901}},
+      /* 63 */ {{1930, 1981}},
+      /* 64 */ {{1984, 2035}}}},
+    {{MHz_u{320}, RuType::RU_106_TONE},
+     {/* 1 */ {{-2035, -1930}},
+      /* 2 */ {{-1901, -1796}},
+      /* 3 */ {{-1788, -1683}},
+      /* 4 */ {{-1654, -1549}},
+      /* 5 */ {{-1523, -1418}},
+      /* 6 */ {{-1389, -1284}},
+      /* 7 */ {{-1276, -1171}},
+      /* 8 */ {{-1142, -1037}},
+      /* 9 */ {{-1011, -906}},
+      /* 10 */ {{-877, -772}},
+      /* 11 */ {{-764, -659}},
+      /* 12 */ {{-630, -525}},
+      /* 13 */ {{-499, -394}},
+      /* 14 */ {{-365, -260}},
+      /* 15 */ {{-252, -147}},
+      /* 16 */ {{-118, -13}},
+      /* 17 */ {{13, 118}},
+      /* 18 */ {{147, 252}},
+      /* 19 */ {{260, 365}},
+      /* 20 */ {{394, 499}},
+      /* 21 */ {{525, 630}},
+      /* 22 */ {{659, 764}},
+      /* 23 */ {{772, 877}},
+      /* 24 */ {{906, 1011}},
+      /* 25 */ {{1037, 1142}},
+      /* 26 */ {{1171, 1276}},
+      /* 27 */ {{1284, 1389}},
+      /* 28 */ {{1418, 1523}},
+      /* 29 */ {{1549, 1654}},
+      /* 30 */ {{1683, 1788}},
+      /* 31 */ {{1796, 1901}},
+      /* 32 */ {{1930, 2035}}}},
+    {{MHz_u{320}, RuType::RU_242_TONE},
+     {/* 1 */ {{-2036, -1795}},
+      /* 2 */ {{-1789, -1548}},
+      /* 3 */ {{-1524, -1283}},
+      /* 4 */ {{-1277, -1036}},
+      /* 5 */ {{-1012, -771}},
+      /* 6 */ {{-765, -524}},
+      /* 7 */ {{-500, -259}},
+      /* 8 */ {{-253, -12}},
+      /* 9 */ {{12, 253}},
+      /* 10 */ {{259, 500}},
+      /* 11 */ {{524, 765}},
+      /* 12 */ {{771, 1012}},
+      /* 13 */ {{1036, 1277}},
+      /* 14 */ {{1283, 1524}},
+      /* 15 */ {{1548, 1789}},
+      /* 16 */ {{1795, 2036}}}},
+    {{MHz_u{320}, RuType::RU_484_TONE},
+     {/* 1 */ {{-2036, -1795}, {-1789, -1548}},
+      /* 2 */ {{-1524, -1283}, {-1277, -1036}},
+      /* 3 */ {{-1012, -771}, {-765, -524}},
+      /* 4 */ {{-500, -259}, {-253, -12}},
+      /* 5 */ {{12, 253}, {259, 500}},
+      /* 6 */ {{524, 765}, {771, 1012}},
+      /* 7 */ {{1036, 1277}, {1283, 1524}},
+      /* 8 */ {{1548, 1789}, {1795, 2036}}}},
+    {{MHz_u{320}, RuType::RU_996_TONE},
+     {/* 1 */ {{-2036, -1539}, {-1533, -1036}},
+      /* 2 */ {{-1012, -515}, {-509, -12}},
+      /* 3 */ {{12, 509}, {515, 1012}},
+      /* 4 */ {{1036, 1533}, {1539, 2036}}}},
+    {{MHz_u{320}, RuType::RU_2x996_TONE},
+     {/* 1 */ {{-2036, -1539}, {-1533, -1036}, {-1012, -515}, {-509, -12}},
+      /* 2 */ {{12, 509}, {515, 1012}, {1036, 1533}, {1539, 2036}}}},
+    {{MHz_u{320}, RuType::RU_4x996_TONE},
+     {/* 1 */ {{-2036, -1539},
+               {-1533, -1036},
+               {-1012, -515},
+               {-509, -12},
+               {12, 509},
+               {515, 1012},
+               {1036, 1533},
+               {1539, 2036}}}},
+};
+
+// Table 36-34 IEEE802.11be-D7.0
+const EhtRu::RuAllocationMap EhtRu::m_ruAllocations = {
+    // clang-format off
+    {0,
+     {EhtRu::RuSpec{RuType::RU_26_TONE, 1, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 2, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 3, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 4, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 5, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 6, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 7, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 8, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 9, true, true}}},
+    {1,
+     {EhtRu::RuSpec{RuType::RU_26_TONE, 1, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 2, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 3, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 4, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 5, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 6, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 7, true, true},
+      EhtRu::RuSpec{RuType::RU_52_TONE, 4, true, true}}},
+    {2,
+     {EhtRu::RuSpec{RuType::RU_26_TONE, 1, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 2, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 3, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 4, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 5, true, true},
+      EhtRu::RuSpec{RuType::RU_52_TONE, 3, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 8, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 9, true, true}}},
+    {3,
+     {EhtRu::RuSpec{RuType::RU_26_TONE, 1, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 2, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 3, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 4, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 5, true, true},
+      EhtRu::RuSpec{RuType::RU_52_TONE, 3, true, true},
+      EhtRu::RuSpec{RuType::RU_52_TONE, 4, true, true}}},
+    {4,
+     {EhtRu::RuSpec{RuType::RU_26_TONE, 1, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 2, true, true},
+      EhtRu::RuSpec{RuType::RU_52_TONE, 2, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 5, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 6, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 7, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 8, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 9, true, true}}},
+    {5,
+     {EhtRu::RuSpec{RuType::RU_26_TONE, 1, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 2, true, true},
+      EhtRu::RuSpec{RuType::RU_52_TONE, 2, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 5, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 6, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 7, true, true},
+      EhtRu::RuSpec{RuType::RU_52_TONE, 4, true, true}}},
+    {6,
+     {EhtRu::RuSpec{RuType::RU_26_TONE, 1, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 2, true, true},
+      EhtRu::RuSpec{RuType::RU_52_TONE, 2, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 5, true, true},
+      EhtRu::RuSpec{RuType::RU_52_TONE, 3, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 8, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 9, true, true}}},
+    {7,
+     {EhtRu::RuSpec{RuType::RU_26_TONE, 1, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 2, true, true},
+      EhtRu::RuSpec{RuType::RU_52_TONE, 2, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 5, true, true},
+      EhtRu::RuSpec{RuType::RU_52_TONE, 3, true, true},
+      EhtRu::RuSpec{RuType::RU_52_TONE, 4, true, true}}},
+    {8,
+     {EhtRu::RuSpec{RuType::RU_52_TONE, 1, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 3, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 4, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 5, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 6, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 7, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 8, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 9, true, true}}},
+    {9,
+     {EhtRu::RuSpec{RuType::RU_52_TONE, 1, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 3, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 4, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 5, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 6, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 7, true, true},
+      EhtRu::RuSpec{RuType::RU_52_TONE, 4, true, true}}},
+    {10,
+     {EhtRu::RuSpec{RuType::RU_52_TONE, 1, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 3, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 4, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 5, true, true},
+      EhtRu::RuSpec{RuType::RU_52_TONE, 3, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 8, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 9, true, true}}},
+    {11,
+     {EhtRu::RuSpec{RuType::RU_52_TONE, 1, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 3, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 4, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 5, true, true},
+      EhtRu::RuSpec{RuType::RU_52_TONE, 3, true, true},
+      EhtRu::RuSpec{RuType::RU_52_TONE, 4, true, true}}},
+    {12,
+     {EhtRu::RuSpec{RuType::RU_52_TONE, 1, true, true},
+      EhtRu::RuSpec{RuType::RU_52_TONE, 2, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 5, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 6, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 7, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 8, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 9, true, true}}},
+    {13,
+     {EhtRu::RuSpec{RuType::RU_52_TONE, 1, true, true},
+      EhtRu::RuSpec{RuType::RU_52_TONE, 2, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 5, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 6, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 7, true, true},
+      EhtRu::RuSpec{RuType::RU_52_TONE, 4, true, true}}},
+    {14,
+     {EhtRu::RuSpec{RuType::RU_52_TONE, 1, true, true},
+      EhtRu::RuSpec{RuType::RU_52_TONE, 2, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 5, true, true},
+      EhtRu::RuSpec{RuType::RU_52_TONE, 3, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 8, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 9, true, true}}},
+    {15,
+     {EhtRu::RuSpec{RuType::RU_52_TONE, 1, true, true},
+      EhtRu::RuSpec{RuType::RU_52_TONE, 2, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 5, true, true},
+      EhtRu::RuSpec{RuType::RU_52_TONE, 3, true, true},
+      EhtRu::RuSpec{RuType::RU_52_TONE, 4, true, true}}},
+    {16,
+     {EhtRu::RuSpec{RuType::RU_26_TONE, 1, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 2, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 3, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 4, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 5, true, true},
+      EhtRu::RuSpec{RuType::RU_106_TONE, 2, true, true}}},
+    {17,
+     {EhtRu::RuSpec{RuType::RU_26_TONE, 1, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 2, true, true},
+      EhtRu::RuSpec{RuType::RU_52_TONE, 2, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 5, true, true},
+      EhtRu::RuSpec{RuType::RU_106_TONE, 2, true, true}}},
+    {18,
+     {EhtRu::RuSpec{RuType::RU_52_TONE, 1, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 3, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 4, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 5, true, true},
+      EhtRu::RuSpec{RuType::RU_106_TONE, 2, true, true}}},
+    {19,
+     {EhtRu::RuSpec{RuType::RU_52_TONE, 1, true, true},
+      EhtRu::RuSpec{RuType::RU_52_TONE, 2, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 5, true, true},
+      EhtRu::RuSpec{RuType::RU_106_TONE, 2, true, true}}},
+    {20,
+     {EhtRu::RuSpec{RuType::RU_106_TONE, 1, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 5, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 6, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 7, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 8, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 9, true, true}}},
+    {21,
+     {EhtRu::RuSpec{RuType::RU_106_TONE, 1, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 5, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 6, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 7, true, true},
+      EhtRu::RuSpec{RuType::RU_52_TONE, 4, true, true}}},
+    {22,
+     {EhtRu::RuSpec{RuType::RU_106_TONE, 1, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 5, true, true},
+      EhtRu::RuSpec{RuType::RU_52_TONE, 3, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 8, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 9, true, true}}},
+    {23,
+     {EhtRu::RuSpec{RuType::RU_106_TONE, 1, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 5, true, true},
+      EhtRu::RuSpec{RuType::RU_52_TONE, 3, true, true},
+      EhtRu::RuSpec{RuType::RU_52_TONE, 4, true, true}}},
+    {24,
+     {EhtRu::RuSpec{RuType::RU_52_TONE, 1, true, true},
+      EhtRu::RuSpec{RuType::RU_52_TONE, 2, true, true},
+      EhtRu::RuSpec{RuType::RU_52_TONE, 3, true, true},
+      EhtRu::RuSpec{RuType::RU_52_TONE, 4, true, true}}},
+    {25,
+     {EhtRu::RuSpec{RuType::RU_106_TONE, 1, true, true},
+      EhtRu::RuSpec{RuType::RU_26_TONE, 5, true, true},
+      EhtRu::RuSpec{RuType::RU_106_TONE, 2, true, true}}},
+    {48, // FIXME: map 106/106 to 106+26/106 as long as MRU is not supported
+     {EhtRu::RuSpec{RuType::RU_106_TONE, 1, true, true},
+      EhtRu::RuSpec{RuType::RU_106_TONE, 2, true, true}}},
+    {64,
+      {EhtRu::RuSpec{RuType::RU_242_TONE, 1, true, true}}},
+    {72,
+      {EhtRu::RuSpec{RuType::RU_484_TONE, 1, true, true}}},
+    {80,
+      {EhtRu::RuSpec{RuType::RU_996_TONE, 1, true, true}}},
+    {88,
+      {EhtRu::RuSpec{RuType::RU_2x996_TONE, 1, true, true}}},
+    // clang-format on
+};
+
+std::vector<EhtRu::RuSpec>
+EhtRu::GetRuSpecs(uint16_t ruAllocation)
+{
+    std::optional<std::size_t> idx;
+    if ((ruAllocation <= 25) || (ruAllocation == 48))
+    {
+        idx = ruAllocation;
+    }
+    else if ((ruAllocation >= 26) && (ruAllocation <= 31))
+    {
+        // unassigned RU, punctured RU or contributes to zero User fields
+    }
+    else if (((ruAllocation >= 64) && (ruAllocation <= 95)))
+    {
+        idx = ruAllocation & 0x1F8;
+    }
+    else
+    {
+        NS_FATAL_ERROR("Unsupported RU allocation " << ruAllocation);
+    }
+    return idx.has_value() ? m_ruAllocations.at(idx.value()) : std::vector<EhtRu::RuSpec>{};
+}
+
+uint16_t
+EhtRu::GetEqualizedRuAllocation(RuType ruType, bool isOdd, bool hasUsers)
+{
+    switch (ruType)
+    {
+    case RuType::RU_26_TONE:
+        return 0;
+    case RuType::RU_52_TONE:
+        return isOdd ? 15 : 24;
+    case RuType::RU_106_TONE:
+        // FIXME: map 106/106 to 106+26/106 as long as MRU is not supported
+        return isOdd ? 25 : 48;
+    case RuType::RU_242_TONE:
+        return hasUsers ? 64 : 28;
+    case RuType::RU_484_TONE:
+        return hasUsers ? 72 : 29;
+    default:
+        const auto ruAlloc = (ruType == RuType::RU_2x996_TONE) ? 88 : 80;
+        return hasUsers ? ruAlloc : 30;
+    }
+}
+
+EhtRu::RuSpec::RuSpec(RuType ruType,
+                      std::size_t index,
+                      bool primary160MHz,
+                      bool primary80MHzOrLower80MHz)
+    : m_ruType{ruType},
+      m_index{index},
+      m_primary160MHz{primary160MHz},
+      m_primary80MHzOrLower80MHz{primary80MHzOrLower80MHz}
+{
+    NS_ABORT_MSG_IF(index == 0, "Index cannot be zero");
+}
+
+RuType
+EhtRu::RuSpec::GetRuType() const
+{
+    NS_ABORT_MSG_IF(m_index == 0, "Undefined RU");
+    return m_ruType;
+}
+
+std::size_t
+EhtRu::RuSpec::GetIndex() const
+{
+    NS_ABORT_MSG_IF(m_index == 0, "Undefined RU");
+    return m_index;
+}
+
+bool
+EhtRu::RuSpec::GetPrimary160MHz() const
+{
+    NS_ABORT_MSG_IF(m_index == 0, "Undefined RU");
+    return m_primary160MHz;
+}
+
+bool
+EhtRu::RuSpec::GetPrimary80MHzOrLower80MHz() const
+{
+    NS_ABORT_MSG_IF(m_index == 0, "Undefined RU");
+    return m_primary80MHzOrLower80MHz;
+}
+
+std::size_t
+EhtRu::RuSpec::GetPhyIndex(MHz_u bw, uint8_t p20Index) const
+{
+    auto phyIndex{m_index};
+    const auto primary160IsLower160 = (p20Index < (MHz_u{320} / MHz_u{20}) / 2);
+    if ((bw > MHz_u{160}) && (m_ruType == RuType::RU_2x996_TONE) &&
+        ((primary160IsLower160 && !m_primary160MHz) || (!primary160IsLower160 && m_primary160MHz)))
+    {
+        phyIndex += 1;
+    }
+    const auto indicesPer80MHz = GetNRus(MHz_u{80}, m_ruType, true);
+    if ((bw > MHz_u{160}) && (m_ruType < RuType::RU_2x996_TONE) &&
+        ((primary160IsLower160 && !m_primary160MHz) || (!primary160IsLower160 && m_primary160MHz)))
+    {
+        phyIndex += 2 * indicesPer80MHz;
+    }
+    const uint8_t num20MHzSubchannelsIn160 = MHz_u{160} / MHz_u{20};
+    const auto primary80IsLower80 =
+        ((p20Index % num20MHzSubchannelsIn160) < (num20MHzSubchannelsIn160 / 2));
+    if ((bw > MHz_u{80}) && (m_ruType < RuType::RU_4x996_TONE) &&
+        ((m_primary160MHz && ((primary80IsLower80 && !m_primary80MHzOrLower80MHz) ||
+                              (!primary80IsLower80 && m_primary80MHzOrLower80MHz))) ||
+         (!m_primary160MHz && !m_primary80MHzOrLower80MHz)))
+    {
+        phyIndex += indicesPer80MHz;
+    }
+    return phyIndex;
+}
+
+std::pair<bool, bool>
+EhtRu::GetPrimaryFlags(MHz_u bw, RuType ruType, std::size_t phyIndex, uint8_t p20Index)
+{
+    const auto nRus = GetNRus(bw, ruType);
+    const auto ruWidth = WifiRu::GetBandwidth(ruType);
+    const auto indicesPer80MHz = (ruWidth <= MHz_u{80}) ? GetNRus(MHz_u{80}, ruType, true) : 1;
+    const auto undefinedRusPer80MHz =
+        (ruWidth <= MHz_u{80}) ? (indicesPer80MHz - GetNRus(MHz_u{80}, ruType)) : 0;
+    const auto primary160IsLower160 = (p20Index < (MHz_u{320} / MHz_u{20}) / 2);
+    const auto primary160 =
+        (bw < MHz_u{320} || ruType == RuType::RU_4x996_TONE ||
+         (primary160IsLower160 && phyIndex <= (nRus / 2) + (2 * undefinedRusPer80MHz)) ||
+         (!primary160IsLower160 && phyIndex > (nRus / 2) + (2 * undefinedRusPer80MHz)));
+    bool primary80OrLow80;
+    if (primary160)
+    {
+        const uint8_t num20MHzSubchannelsIn160 = MHz_u{160} / MHz_u{20};
+        const auto primary80IsLower80 =
+            ((p20Index % num20MHzSubchannelsIn160) < (num20MHzSubchannelsIn160 / 2));
+        const auto threshold =
+            ((bw < MHz_u{320}) || primary160IsLower160) ? indicesPer80MHz : 3 * indicesPer80MHz;
+        primary80OrLow80 = (bw < MHz_u{160}) || (ruType >= RuType::RU_2x996_TONE) ||
+                           (primary80IsLower80 && phyIndex <= threshold) ||
+                           (!primary80IsLower80 && phyIndex > threshold);
+    }
+    else
+    {
+        primary80OrLow80 = (bw < MHz_u{160}) || (ruType >= RuType::RU_2x996_TONE) ||
+                           ((((phyIndex - 1) / indicesPer80MHz) % 2) == 0);
+    }
+    return {primary160, primary80OrLow80};
+}
+
+std::size_t
+EhtRu::GetIndexIn80MHzSegment(MHz_u bw, RuType ruType, std::size_t phyIndex)
+{
+    if (WifiRu::GetBandwidth(ruType) > MHz_u{80})
+    {
+        return 1;
+    }
+
+    if (const auto indicesPer80MHz = GetNRus(MHz_u{80}, ruType, true);
+        bw > MHz_u{80} && phyIndex > indicesPer80MHz)
+    {
+        return (((phyIndex - 1) % indicesPer80MHz) + 1);
+    }
+
+    return phyIndex;
+}
+
+std::size_t
+EhtRu::GetNRus(MHz_u bw, RuType ruType, bool includeUndefinedRus /* = false */)
+{
+    if (WifiRu::GetBandwidth(ruType) >= MHz_u{20})
+    {
+        return bw / WifiRu::GetBandwidth(ruType);
+    }
+
+    const auto it = m_ruSubcarrierGroups.find({bw, ruType});
+    if (it == m_ruSubcarrierGroups.end())
+    {
+        return 0;
+    }
+
+    auto nRus = it->second.size();
+    if (!includeUndefinedRus)
+    {
+        const auto num80MHz = std::max<uint16_t>(bw / MHz_u{80}, 1);
+        const auto undefinedRus =
+            ((ruType == RuType::RU_26_TONE) && (bw >= MHz_u{80})) ? num80MHz : 0;
+        nRus -= undefinedRus;
+    }
+    return nRus;
+}
+
+std::vector<EhtRu::RuSpec>
+EhtRu::GetRusOfType(MHz_u bw, RuType ruType)
+{
+    if (GetNRus(bw, ruType) == 0)
+    {
+        return {};
+    }
+
+    if (WifiRu::GetBandwidth(ruType) == bw)
+    {
+        return {{ruType, 1, true, true}};
+    }
+
+    if (ruType == RuType::RU_2x996_TONE)
+    {
+        NS_ASSERT(bw >= MHz_u{160});
+        return {{ruType, 1, true, true}, {ruType, 1, false, true}};
+    }
+
+    std::vector<EhtRu::RuSpec> ret;
+    const auto subcarrierGroup = EhtRu::m_ruSubcarrierGroups.at({bw, ruType});
+    const auto indices = GetNRus(std::min(bw, MHz_u{80}), ruType, true);
+    for (uint8_t idx80MHz = 0; idx80MHz < (bw / MHz_u{80}); ++idx80MHz)
+    {
+        const auto p160 = (idx80MHz < 2);
+        const auto p80orLow80 = ((idx80MHz % 2) == 0);
+        for (std::size_t ruIndex = 1; ruIndex <= indices; ++ruIndex)
+        {
+            if (subcarrierGroup.at(ruIndex - 1).empty())
+            {
+                // undefined RU
+                continue;
+            }
+            ret.emplace_back(ruType, ruIndex, p160, p80orLow80);
+        }
+    }
+    return ret;
+}
+
+std::vector<EhtRu::RuSpec>
+EhtRu::GetCentral26TonesRus(MHz_u bw, RuType ruType)
+{
+    if ((ruType == RuType::RU_26_TONE) || (ruType >= RuType::RU_242_TONE))
+    {
+        return {};
+    }
+
+    std::vector<std::size_t> indices;
+    if (bw >= MHz_u{20})
+    {
+        indices.push_back(5);
+    }
+    if (bw >= MHz_u{40})
+    {
+        indices.push_back(14);
+    }
+    if (bw >= MHz_u{80})
+    {
+        indices.insert(indices.end(), {24, 33});
+    }
+
+    std::vector<EhtRu::RuSpec> ret;
+    for (uint8_t idx80MHz = 0; idx80MHz < (bw / MHz_u{80}); ++idx80MHz)
+    {
+        const auto p160 = (idx80MHz < 2);
+        const auto p80orLow80 = ((idx80MHz % 2) == 0);
+        std::transform(indices.cbegin(),
+                       indices.cend(),
+                       std::back_inserter(ret),
+                       [p160, p80orLow80](const auto indice) {
+                           return EhtRu::RuSpec{RuType::RU_26_TONE, indice, p160, p80orLow80};
+                       });
+    }
+    return ret;
+}
+
+SubcarrierGroup
+EhtRu::GetSubcarrierGroup(MHz_u bw, RuType ruType, std::size_t phyIndex)
+{
+    const auto it = m_ruSubcarrierGroups.find({bw, ruType});
+    NS_ABORT_MSG_IF(it == m_ruSubcarrierGroups.cend(), "RU not found");
+    return it->second.at(phyIndex - 1);
+}
+
+bool
+EhtRu::DoesOverlap(MHz_u bw, EhtRu::RuSpec ru, const std::vector<EhtRu::RuSpec>& v)
+{
+    // A 4x996-tone RU spans 320 MHz, hence it overlaps with any other RU
+    if (bw == MHz_u{320} && ru.GetRuType() == RuType::RU_4x996_TONE && !v.empty())
+    {
+        return true;
+    }
+
+    // This function may be called by the MAC layer, hence the PHY index may have
+    // not been set yet. Hence, we pass the "MAC" index to GetSubcarrierGroup instead
+    // of the PHY index. This is fine because we compare the primary 80 MHz bands of
+    // the two RUs below.
+    const auto rangesRu = GetSubcarrierGroup(bw, ru.GetRuType(), ru.GetIndex());
+    const auto ruBw = WifiRu::GetBandwidth(ru.GetRuType());
+    for (auto& p : v)
+    {
+        // A 4x996-tone RU spans 160 MHz, hence it overlaps
+        if (bw == MHz_u{320} && p.GetRuType() == RuType::RU_4x996_TONE)
+        {
+            return true;
+        }
+        if ((ru.GetPrimary160MHz() != p.GetPrimary160MHz()))
+        {
+            // the two RUs are located in distinct 160MHz bands
+            continue;
+        }
+        if (const auto otherRuBw = WifiRu::GetBandwidth(p.GetRuType());
+            (ruBw <= MHz_u{80}) && (otherRuBw <= MHz_u{80}) &&
+            (ru.GetPrimary80MHzOrLower80MHz() != p.GetPrimary80MHzOrLower80MHz()))
+        {
+            // the two RUs are located in distinct 80MHz bands
+            continue;
+        }
+        for (const auto& rangeRu : rangesRu)
+        {
+            SubcarrierGroup rangesP = GetSubcarrierGroup(bw, p.GetRuType(), p.GetIndex());
+            for (auto& rangeP : rangesP)
+            {
+                if (rangeP.second >= rangeRu.first && rangeRu.second >= rangeP.first)
+                {
+                    return true;
+                }
+            }
+        }
+    }
+    return false;
+}
+
+EhtRu::RuSpec
+EhtRu::FindOverlappingRu(MHz_u bw, EhtRu::RuSpec referenceRu, RuType searchedRuType)
+{
+    const auto numRus = EhtRu::GetNRus(bw, searchedRuType);
+    for (uint8_t idx80MHz = 0; idx80MHz < (bw / MHz_u{80}); ++idx80MHz)
+    {
+        const auto p160 = (idx80MHz < 2);
+        const auto p80orLow80 = ((idx80MHz % 2) == 0);
+        for (std::size_t index = 1; index <= numRus; ++index)
+        {
+            EhtRu::RuSpec searchedRu(searchedRuType, index, p160, p80orLow80);
+            if (DoesOverlap(bw, referenceRu, {searchedRu}))
+            {
+                return searchedRu;
+            }
+        }
+    }
+    NS_ABORT_MSG("The searched RU type " << searchedRuType << " was not found for bw=" << bw
+                                         << " and referenceRu=" << referenceRu);
+    return EhtRu::RuSpec();
+}
+
+RuType
+EhtRu::GetEqualSizedRusForStations(MHz_u bandwidth,
+                                   std::size_t& nStations,
+                                   std::size_t& nCentral26TonesRus)
+{
+    RuType ruType{RuType::RU_TYPE_MAX};
+    for (int i = static_cast<int>(RuType::RU_4x996_TONE); i >= static_cast<int>(RuType::RU_26_TONE);
+         i--)
+    {
+        if (WifiRu::GetBandwidth(static_cast<RuType>(i)) > bandwidth)
+        {
+            continue;
+        }
+        if (GetNRus(bandwidth, static_cast<RuType>(i)) > nStations)
+        {
+            /* the number of RUs that can be allocated using that RU type
+             * is larger than the number of stations to allocate, the RU type
+             * to return is hence the previous one and we can stop here */
+            break;
+        }
+        ruType = static_cast<RuType>(i);
+    }
+    NS_ASSERT_MSG(ruType != RuType::RU_TYPE_MAX, "Cannot find equal size RUs");
+    nStations = GetNRus(bandwidth, ruType);
+    nCentral26TonesRus = GetNumCentral26TonesRus(bandwidth, ruType);
+    return ruType;
+}
+
+uint8_t
+EhtRu::GetNumCentral26TonesRus(MHz_u bandwidth, RuType ruType)
+{
+    return ((ruType == RuType::RU_52_TONE) || (ruType == RuType::RU_106_TONE))
+               ? (bandwidth / MHz_u{20})
+               : 0;
+}
+
+bool
+EhtRu::RuSpec::operator==(const EhtRu::RuSpec& other) const
+{
+    // we do not compare the RU PHY indices because they may be uninitialized for
+    // one of the compared RUs. This event should not cause the comparison to evaluate
+    // to false
+    return std::tie(m_ruType, m_index, m_primary160MHz, m_primary80MHzOrLower80MHz) ==
+           std::tie(other.m_ruType, other.m_index, m_primary160MHz, m_primary80MHzOrLower80MHz);
+}
+
+bool
+EhtRu::RuSpec::operator!=(const EhtRu::RuSpec& other) const
+{
+    return !(*this == other);
+}
+
+bool
+EhtRu::RuSpec::operator<(const EhtRu::RuSpec& other) const
+{
+    // we do not compare the RU PHY indices because they may be uninitialized for
+    // one of the compared RUs. This event should not cause the comparison to evaluate
+    // to false
+    return std::tie(m_ruType, m_index, m_primary160MHz, m_primary80MHzOrLower80MHz) <
+           std::tie(other.m_ruType, other.m_index, m_primary160MHz, m_primary80MHzOrLower80MHz);
+}
+
+std::ostream&
+operator<<(std::ostream& os, const EhtRu::RuSpec& ru)
+{
+    os << "RU{" << ru.GetRuType() << "/" << ru.GetIndex() << "/"
+       << (ru.GetPrimary160MHz() ? "primary160MHz" : "secondary160MHz") << "/";
+    if (ru.GetPrimary160MHz())
+    {
+        os << (ru.GetPrimary80MHzOrLower80MHz() ? "primary80MHz" : "secondary80MHz");
+    }
+    else
+    {
+        os << (ru.GetPrimary80MHzOrLower80MHz() ? "Lower80MHz" : "high80MHz");
+    }
+    os << "}";
+    return os;
+}
+
+} // namespace ns3
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/eht/eht-ru.h ns-3.45/src/wifi/model/eht/eht-ru.h
--- ns-3.44/src/wifi/model/eht/eht-ru.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.45/src/wifi/model/eht/eht-ru.h	2025-06-01 20:34:45.614702200 -0700
@@ -0,0 +1,282 @@
+/*
+ * Copyright (c) 2024
+ *
+ * SPDX-License-Identifier: GPL-2.0-only
+ *
+ * Author: Sébastien Deronne <sebastien.deronne@gmail.com>
+ */
+
+#ifndef EHT_RU_H
+#define EHT_RU_H
+
+#include "ns3/wifi-phy-common.h"
+
+#include <cstdint>
+#include <map>
+#include <optional>
+#include <ostream>
+#include <utility>
+#include <vector>
+
+namespace ns3
+{
+
+/**
+ * This class stores the subcarrier groups of all the available EHT RUs.
+ */
+class EhtRu
+{
+  public:
+    /**
+     * RU Specification.
+     */
+    class RuSpec
+    {
+      public:
+        /**
+         * Default constructor
+         */
+        RuSpec() = default;
+        /**
+         * Constructor
+         *
+         * @param ruType the RU type
+         * @param index the RU index (starting at 1) within the 80 MHz segment
+         * @param primary160MHz whether the RU is allocated in the primary 160MHz channel
+         * @param primary80MHzOrLower80MHz if the RU is allocated in the primary 160MHz channel,
+         * whether the RU is allocated in the primary 80MHz channel, otherwise whether the RU is
+         * allocated in the lower 80MHz channel of the secondary 160 MHz channel
+         */
+        RuSpec(RuType ruType, std::size_t index, bool primary160MHz, bool primary80MHzOrLower80MHz);
+
+        /**
+         * Get the RU type
+         *
+         * @return the RU type
+         */
+        RuType GetRuType() const;
+
+        /**
+         * Get the RU index within the 80 MHz segment
+         *
+         * @return the RU index within the 80 MHz segment
+         */
+        std::size_t GetIndex() const;
+
+        /**
+         * Get the RU PHY index
+         *
+         * @param bw the width of the channel of which the RU is part
+         * @param p20Index the index of the primary20 channel
+         * @return the RU PHY index
+         */
+        std::size_t GetPhyIndex(MHz_u bw, uint8_t p20Index) const;
+
+        /**
+         * Get whether the RU is allocated in the primary 160MHz channel
+         *
+         * @return true if the RU is in the primary 160 MHz channel and false otherwise
+         */
+        bool GetPrimary160MHz() const;
+
+        /**
+         * @return if the RU is allocated in the primary 160MHz channel, true if the RU is allocated
+         * in the primary 80MHz channel, otherwise true if the RU is allocated in the lower 80MHz
+         * channel
+         */
+        bool GetPrimary80MHzOrLower80MHz() const;
+
+        /**
+         * Compare this RU to the given RU.
+         *
+         * @param other the given RU
+         * @return true if this RU compares equal to the given RU, false otherwise
+         */
+        bool operator==(const RuSpec& other) const;
+
+        /**
+         * Compare this RU to the given RU.
+         *
+         * @param other the given RU
+         * @return true if this RU differs from the given RU, false otherwise
+         */
+        bool operator!=(const RuSpec& other) const;
+
+        /**
+         * Compare this RU to the given RU.
+         *
+         * @param other the given RU
+         * @return true if this RU is smaller than the given RU, false otherwise
+         */
+        bool operator<(const RuSpec& other) const;
+
+      private:
+        RuType m_ruType{};      //!< RU type
+        std::size_t m_index{};  /**< RU index (starting at 1) within the 80 MHz segment */
+        bool m_primary160MHz{}; //!< true if the RU is allocated in the primary 160MHz channel
+        bool m_primary80MHzOrLower80MHz{}; //!< if the RU is allocated in the primary 160MHz
+                                           //!< channel, true if the RU is allocated in the primary
+                                           //!< 80MHz channel, otherwise true if the RU is allocated
+                                           //!< in the lower 80MHz channel
+    };
+
+    /**
+     * Get the primary flags of a given RU transmitted in a PPDU.
+     * The first flag identifies whether the RU is in the primary 160 MHz.
+     * The second flag identifies whether the RU is allocated in the primary 80MHz channel if the RU
+     * is allocated in the primary 160MHz channel, or whether the RU is allocated in the lower 80MHz
+     * channel if the RU is allocated in the secondary 160MHz channel
+     *
+     * @param bw the bandwidth of the PPDU (20, 40, 80, 160, 320)
+     * @param ruType the RU type (number of tones)
+     * @param phyIndex the PHY index (starting at 1) of the RU
+     * @param p20Index the index of the primary20 channel
+     * @return the primary flags
+     */
+    static std::pair<bool, bool> GetPrimaryFlags(MHz_u bw,
+                                                 RuType ruType,
+                                                 std::size_t phyIndex,
+                                                 uint8_t p20Index);
+
+    /**
+     * Get the index of a given RU transmitted in a PPDU within its 80 MHz segment.
+     *
+     * @param bw the bandwidth of the PPDU (20, 40, 80, 160, 320)
+     * @param ruType the RU type (number of tones)
+     * @param phyIndex the PHY index (starting at 1) of the RU
+     * @return the index within the 80 MHz segment
+     */
+    static std::size_t GetIndexIn80MHzSegment(MHz_u bw, RuType ruType, std::size_t phyIndex);
+
+    /**
+     * Get the number of distinct RUs of the given type (number of tones)
+     * available in a PPDU of the given bandwidth.
+     *
+     * @param bw the bandwidth of the PPDU (20, 40, 80, 160, 320)
+     * @param ruType the RU type (number of tones)
+     * @param includeUndefinedRus whether undefined RUs should be taken account.
+     * @return the number of distinct RUs available
+     */
+    static std::size_t GetNRus(MHz_u bw, RuType ruType, bool includeUndefinedRus = false);
+
+    /**
+     * Get the set of distinct RUs of the given type (number of tones)
+     * available in an PPDU of the given bandwidth.
+     * This does not take undefined RUs into account.
+     *
+     * @param bw the bandwidth of the PPDU (20, 40, 80, 160, 320)
+     * @param ruType the RU type (number of tones)
+     * @return the set of distinct RUs available
+     */
+    static std::vector<RuSpec> GetRusOfType(MHz_u bw, RuType ruType);
+
+    /**
+     * Get the set of 26-tone RUs that can be additionally allocated if the given
+     * bandwidth is split in RUs of the given type.
+     *
+     * @param bw the bandwidth of the PPDU (20, 40, 80, 160, 320)
+     * @param ruType the RU type (number of tones)
+     * @return the set of 26-tone RUs that can be additionally allocated
+     */
+    static std::vector<RuSpec> GetCentral26TonesRus(MHz_u bw, RuType ruType);
+
+    /**
+     * Get the subcarrier group of the RU having the given PHY index among all the RUs of the given
+     * type (number of tones) available in an PPDU of the given bandwidth. A subcarrier group is
+     * defined as one or more pairs indicating the lowest frequency index and the highest frequency
+     * index.
+     *
+     * @param bw the bandwidth of the PPDU (20, 40, 80, 160, 320)
+     * @param ruType the RU type (number of tones)
+     * @param phyIndex the PHY index (starting at 1) of the RU
+     * @return the subcarrier range of the specified RU
+     */
+    static SubcarrierGroup GetSubcarrierGroup(MHz_u bw, RuType ruType, std::size_t phyIndex);
+
+    /**
+     * Check whether the given RU overlaps with the given set of RUs.
+     * Note that for channel width of 160 MHz the returned range is relative to
+     * the 160 MHz channel (i.e. -1012 to 1012).
+     *
+     * @param bw the bandwidth of the PPDU (20, 40, 80, 160, 320)
+     * @param ru the given RU allocation
+     * @param v the given set of RUs
+     * @return true if the given RU overlaps with the given set of RUs.
+     */
+    static bool DoesOverlap(MHz_u bw, RuSpec ru, const std::vector<RuSpec>& v);
+
+    /**
+     * Find the RU allocation of the given RU type overlapping the given
+     * reference RU allocation.
+     * Note that an assert is generated if the RU allocation is not found.
+     *
+     * @param bw the bandwidth of the PPDU (20, 40, 80, 160, 320)
+     * @param referenceRu the reference RU allocation
+     * @param searchedRuType the searched RU type
+     * @return the searched RU allocation.
+     */
+    static RuSpec FindOverlappingRu(MHz_u bw, RuSpec referenceRu, RuType searchedRuType);
+
+    /**
+     * Given the channel bandwidth and the number of stations candidate for being
+     * assigned an RU, maximize the number of candidate stations that can be assigned
+     * an RU subject to the constraint that all the stations must be assigned an RU
+     * of the same size (in terms of number of tones).
+     *
+     * @param bandwidth the channel bandwidth
+     * @param nStations the number of candidate stations. On return, it is set to
+     *                  the number of stations that are assigned an RU
+     * @param[out] nCentral26TonesRus the number of additional 26-tone RUs that can be
+     *                                allocated if the returned RU size is greater than 26 tones
+     * @return the RU type
+     */
+    static RuType GetEqualSizedRusForStations(MHz_u bandwidth,
+                                              std::size_t& nStations,
+                                              std::size_t& nCentral26TonesRus);
+
+    /// Get the RU specs based on RU_ALLOCATION
+    /// @param ruAllocation 9 bit RU_ALLOCATION value
+    /// @return RU spec associated with the RU_ALLOCATION
+    static std::vector<RuSpec> GetRuSpecs(uint16_t ruAllocation);
+
+    /// Get the RU_ALLOCATION value for equal size RUs
+    /// @param ruType equal size RU type (generated by GetEqualSizedRusForStations)
+    /// @param isOdd if number of stations is an odd number
+    /// @param hasUsers whether it contributes to User field(s) in the content channel this RU
+    /// Allocation belongs to;
+    /// @return RU_ALLOCATION value
+    static uint16_t GetEqualizedRuAllocation(RuType ruType, bool isOdd, bool hasUsers);
+
+  private:
+    /**
+     * Get the number of 26-tone RUs that can be allocated if returned RU size is greater than 26
+     * tones.
+     *
+     * @param bw the bandwidth of the PPDU (20, 40, 80, 160, 320)
+     * @param ruType the RU type (number of tones)
+     * @return the number of 26-tone RUs that can be allocated
+     */
+    static uint8_t GetNumCentral26TonesRus(MHz_u bw, RuType ruType);
+
+    /// Subcarrier groups for all EHT RUs
+    static const SubcarrierGroups m_ruSubcarrierGroups;
+
+    /// RU allocation map
+    using RuAllocationMap = std::map<uint8_t, std::vector<RuSpec>>;
+
+    /// Table 36-34 of IEEE802.11be-D7.0
+    static const RuAllocationMap m_ruAllocations;
+};
+
+/**
+ * @brief Stream insertion operator.
+ *
+ * @param os the stream
+ * @param ru the RU
+ * @returns a reference to the stream
+ */
+std::ostream& operator<<(std::ostream& os, const EhtRu::RuSpec& ru);
+
+} // namespace ns3
+
+#endif /* EHT_RU_H */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/eht/emlsr-manager.cc ns-3.45/src/wifi/model/eht/emlsr-manager.cc
--- ns-3.44/src/wifi/model/eht/emlsr-manager.cc	2025-03-09 16:55:49.787372600 -0700
+++ ns-3.45/src/wifi/model/eht/emlsr-manager.cc	2025-06-01 20:34:45.615702200 -0700
@@ -58,14 +58,12 @@
                 MakeUintegerAccessor(&EmlsrManager::SetMainPhyId, &EmlsrManager::GetMainPhyId),
                 MakeUintegerChecker<uint8_t>())
             .AddAttribute("AuxPhyChannelWidth",
-                          "The maximum channel width (MHz) supported by Aux PHYs. Note that the "
-                          "maximum channel width is capped to the maximum channel width supported "
-                          "by the configured maximum modulation class supported.",
+                          "The maximum channel width (MHz) supported by Aux PHYs.",
                           TypeId::ATTR_GET |
                               TypeId::ATTR_CONSTRUCT, // prevent setting after construction
                           UintegerValue(20),
                           MakeUintegerAccessor(&EmlsrManager::m_auxPhyMaxWidth),
-                          MakeUintegerChecker<MHz_u>(20, 160))
+                          MakeUintegerChecker<MHz_u>(20, 320))
             .AddAttribute("AuxPhyMaxModClass",
                           "The maximum modulation class supported by Aux PHYs. Use "
                           "WIFI_MOD_CLASS_OFDM for non-HT.",
@@ -143,10 +141,9 @@
 }
 
 EmlsrManager::EmlsrManager()
-    : m_mainPhySwitchInfo{},
-      // The STA initializes dot11MSDTimerDuration to aPPDUMaxTime defined in Table 36-70
-      // (Sec. 35.3.16.8.1 of 802.11be D3.1)
-      m_mediumSyncDuration(MicroSeconds(DEFAULT_MSD_DURATION_USEC)),
+    // The STA initializes dot11MSDTimerDuration to aPPDUMaxTime defined in Table 36-70
+    // (Sec. 35.3.16.8.1 of 802.11be D3.1)
+    : m_mediumSyncDuration(MicroSeconds(DEFAULT_MSD_DURATION_USEC)),
       // The default value of dot11MSDOFDMEDthreshold is –72 dBm and the default value of
       // dot11MSDTXOPMax is 1, respectively (Sec. 35.3.16.8.1 of 802.11be D3.1)
       m_msdOfdmEdThreshold(DEFAULT_MSD_OFDM_ED_THRESH),
@@ -184,9 +181,13 @@
     m_staMac = mac;
 
     NS_ABORT_MSG_IF(!m_staMac->GetEhtConfiguration(), "EmlsrManager requires EHT support");
-    NS_ABORT_MSG_IF(m_staMac->GetNLinks() <= 1, "EmlsrManager can only be installed on MLDs");
+    NS_ABORT_MSG_IF(!m_staMac->GetEhtConfiguration()->m_emlsrActivated,
+                    "EmlsrManager requires EMLSR to be activated");
     NS_ABORT_MSG_IF(m_staMac->GetTypeOfStation() != STA,
                     "EmlsrManager can only be installed on non-AP MLDs");
+    NS_ABORT_MSG_IF(m_mainPhyId >= m_staMac->GetDevice()->GetNPhys(),
+                    "Main PHY ID (" << +m_mainPhyId << ") invalid given the number of PHY objects ("
+                                    << +m_staMac->GetDevice()->GetNPhys() << ")");
 
     m_staMac->TraceConnectWithoutContext("AckedMpdu", MakeCallback(&EmlsrManager::TxOk, this));
     m_staMac->TraceConnectWithoutContext("DroppedMpdu",
@@ -204,39 +205,72 @@
 }
 
 void
-EmlsrManager::EmlsrLinkSwitchCallback(uint8_t linkId, Ptr<WifiPhy> phy)
+EmlsrManager::EmlsrLinkSwitchCallback(uint8_t linkId, Ptr<WifiPhy> phy, bool connected)
 {
-    NS_LOG_FUNCTION(this << linkId << phy);
+    NS_LOG_FUNCTION(this << linkId << phy << connected);
 
-    if (!phy)
+    // TODO the ScheduleNow calls in this function can be removed once we get rid of the
+    // instantaneous main PHY switch at the end of ICF reception
+
+    if (!connected)
     {
-        NS_ASSERT(!m_noPhySince.contains(linkId));
+        NS_ASSERT_MSG(phy->GetPhyId() == m_mainPhyId,
+                      "Main PHY only is expected to leave a link on which it is operating");
         NS_LOG_DEBUG("Record that no PHY is operating on link " << +linkId);
-        m_noPhySince[linkId] = Simulator::Now();
+
+        if (phy->GetChannelSwitchDelay().IsZero())
+        {
+            // a PHY that was operating on a link has left the link and the channel switch delay is
+            // zero; this must be an instantaneous switch of the main PHY at the end of ICF
+            // reception. ScheduleNow the setting of m_noPhySince to get the "real" channel switch
+            // delay, so that the actual time the main PHY started switching can be determined. Due
+            // to this scheduling, all other actions must be scheduled now, too
+            Simulator::ScheduleNow([=, this]() {
+                NS_ASSERT(!m_noPhySince.contains(linkId));
+                m_noPhySince[linkId] = Simulator::Now() - phy->GetChannelSwitchDelay();
+            });
+        }
+        else
+        {
+            Simulator::ScheduleNow([=, this]() {
+                NS_ASSERT(!m_noPhySince.contains(linkId));
+                m_noPhySince[linkId] = Simulator::Now();
+            });
+        }
         return;
     }
 
-    // phy switched to operate on the link with ID equal to linkId
-    auto it = m_noPhySince.find(linkId);
+    SetCcaEdThresholdOnLinkSwitch(phy, linkId);
 
-    if (it == m_noPhySince.end())
+    if (phy->GetPhyId() == m_mainPhyId)
     {
-        // phy switched to a link on which another PHY was operating, do nothing
-        return;
+        // main PHY has been connected to a link
+        m_mainPhySwitchInfo.disconnected = false;
     }
 
-    auto duration = Simulator::Now() - it->second;
-    NS_ASSERT_MSG(duration.IsPositive(), "Interval duration should not be negative");
+    Simulator::ScheduleNow([=, this]() {
+        // phy switched to operate on the link with ID equal to linkId
+        auto it = m_noPhySince.find(linkId);
 
-    NS_LOG_DEBUG("PHY " << +phy->GetPhyId() << " switched to link " << +linkId << " after "
-                        << duration.As(Time::US)
-                        << " since last time a PHY was operating on this link");
-    if (duration > MicroSeconds(MEDIUM_SYNC_THRESHOLD_USEC))
-    {
-        StartMediumSyncDelayTimer(linkId);
-    }
+        if (it == m_noPhySince.end())
+        {
+            // phy switched to a link on which another PHY was operating, do nothing
+            return;
+        }
+
+        auto duration = Simulator::Now() - it->second;
+        NS_ASSERT_MSG(duration.IsPositive(), "Interval duration should not be negative");
+
+        NS_LOG_DEBUG("PHY " << +phy->GetPhyId() << " switched to link " << +linkId << " after "
+                            << duration.As(Time::US)
+                            << " since last time a PHY was operating on this link");
+        if (duration > MEDIUM_SYNC_THRESHOLD)
+        {
+            StartMediumSyncDelayTimer(linkId);
+        }
 
-    m_noPhySince.erase(it);
+        m_noPhySince.erase(it);
+    });
 }
 
 void
@@ -379,7 +413,6 @@
         std::copy(linkIds.cbegin(), linkIds.cend(), std::ostream_iterator<uint16_t>(ss, " "));
     }
     NS_LOG_FUNCTION(this << ss.str());
-    NS_ABORT_MSG_IF(linkIds.size() == 1, "Cannot enable EMLSR mode on a single link");
 
     if (linkIds != m_emlsrLinks)
     {
@@ -434,7 +467,7 @@
 }
 
 void
-EmlsrManager::NotifyIcfReceived(uint8_t linkId)
+EmlsrManager::NotifyDlTxopStart(uint8_t linkId)
 {
     NS_LOG_FUNCTION(this << linkId);
 
@@ -479,7 +512,6 @@
     {
         SwitchMainPhy(linkId,
                       true, // channel switch should occur instantaneously
-                      RESET_BACKOFF,
                       DONT_REQUEST_ACCESS,
                       EmlsrDlTxopIcfReceivedByAuxPhyTrace{});
     }
@@ -506,7 +538,7 @@
         SetSleepStateForAllAuxPhys(true);
     }
 
-    DoNotifyIcfReceived(linkId);
+    DoNotifyDlTxopStart(linkId);
 }
 
 std::pair<bool, Time>
@@ -558,7 +590,12 @@
         return {false, Time{0}};
     }
 
-    if (auto macHdr = GetEhtFem(linkId)->GetReceivedMacHdr(); macHdr && m_useNotifiedMacHdr)
+    if (auto endPreamble = phy->GetTimeToPreambleDetectionEnd())
+    {
+        NS_LOG_DEBUG("Detecting a PPDU preamble, postpone by " << endPreamble->As(Time::US));
+        return {true, endPreamble.value()};
+    }
+    else if (auto macHdr = GetEhtFem(linkId)->GetReceivedMacHdr(); macHdr && m_useNotifiedMacHdr)
     {
         NS_LOG_DEBUG("Receiving the MAC payload of a PSDU and MAC header info can be used");
         NS_ASSERT(phy->GetState()->GetLastTime({WifiPhyState::RX}) == Simulator::Now());
@@ -589,9 +626,8 @@
     {
         // we have not yet received the MAC header or we cannot use its info
 
-        auto ongoingRxInfo = GetEhtFem(linkId)->GetOngoingRxInfo();
-        // if a PHY is in RX state, it should have info about received MAC header.
-        // The exception is represented by this situation:
+        // even if a PHY is in RX state, it may not have info about received MAC header.
+        // This may happen, e.g., when:
         // - an aux PHY is disconnected from the MAC stack because the main PHY is
         //   operating on its link
         // - the main PHY notifies the MAC header info to the FEM and then leaves the
@@ -600,15 +636,9 @@
         //   MAC header info to be discarded by the FEM
         // - the aux PHY is re-connected to the MAC stack and is still in RX state
         //   when the main PHY gets channel access on another link (and we get here)
-        if (!ongoingRxInfo.has_value())
-        {
-            NS_ASSERT_MSG(phy != GetStaMac()->GetDevice()->GetPhy(GetMainPhyId()),
-                          "Main PHY should have MAC header info when in RX state");
-            // we are in the situation described above; if the MPDU being received
-            // by the aux PHY is not addressed to the EMLSR client, we can ignore it
-        }
-        else if (const auto& txVector = ongoingRxInfo->get().txVector;
-                 txVector.GetModulationClass() < WIFI_MOD_CLASS_HT)
+        if (auto ongoingRxInfo = GetEhtFem(linkId)->GetOngoingRxInfo();
+            ongoingRxInfo.has_value() &&
+            ongoingRxInfo->get().txVector.GetModulationClass() < WIFI_MOD_CLASS_HT)
         {
             if (auto remTime = phy->GetTimeToMacHdrEnd(SU_STA_ID);
                 m_useNotifiedMacHdr && remTime.has_value() && remTime->IsStrictlyPositive())
@@ -629,6 +659,38 @@
     return {false, Time{0}};
 }
 
+std::optional<WifiIcfDrop>
+EmlsrManager::CheckMainPhyTakesOverDlTxop(uint8_t linkId) const
+{
+    auto mainPhy = m_staMac->GetDevice()->GetPhy(m_mainPhyId);
+
+    const auto delay = mainPhy->GetChannelSwitchDelay();
+    auto lastTime = mainPhy->GetState()->GetLastTime({WifiPhyState::TX});
+    auto reason = WifiIcfDrop::NOT_ENOUGH_TIME_TX;
+
+    if (auto lastSwitch = mainPhy->GetState()->GetLastTime({WifiPhyState::SWITCHING});
+        m_mainPhySwitchInfo.to != linkId && lastSwitch > lastTime)
+    {
+        lastTime = lastSwitch;
+        reason = WifiIcfDrop::NOT_ENOUGH_TIME_SWITCH;
+    }
+    if (auto lastSleep = mainPhy->GetState()->GetLastTime({WifiPhyState::SLEEP});
+        lastSleep > lastTime)
+    {
+        lastTime = lastSleep;
+        reason = WifiIcfDrop::NOT_ENOUGH_TIME_SLEEP;
+    }
+    // ignore RX state for now
+
+    if (lastTime > Simulator::Now() - delay)
+    {
+        NS_LOG_DEBUG("Not enough time for the main PHY to switch link; reason = "
+                     << reason << " lastTime = " << lastTime.As(Time::US));
+        return reason;
+    }
+    return std::nullopt;
+}
+
 void
 EmlsrManager::NotifyUlTxopStart(uint8_t linkId)
 {
@@ -665,11 +727,22 @@
 
     if (m_auxPhyToSleep && m_staMac->IsEmlsrLink(linkId))
     {
+        // if main PHY is switching (or has been scheduled to switch) to this link to take over the
+        // UL TXOP, postpone aux PHY sleeping until after the main PHY has completed switching
+        Time delay{0};
         if (auto mainPhy = m_staMac->GetDevice()->GetPhy(m_mainPhyId); mainPhy->IsStateSwitching())
         {
-            // main PHY is switching to this link to take over the UL TXOP. Postpone aux PHY
-            // sleeping until after the main PHY has completed switching
-            Simulator::Schedule(mainPhy->GetDelayUntilIdle() + TimeStep(1),
+            delay = mainPhy->GetDelayUntilIdle();
+        }
+        else if (auto it = m_ulMainPhySwitch.find(linkId);
+                 it != m_ulMainPhySwitch.end() && it->second.IsPending())
+        {
+            delay = Simulator::GetDelayLeft(it->second) + mainPhy->GetChannelSwitchDelay();
+        }
+
+        if (delay.IsStrictlyPositive())
+        {
+            Simulator::Schedule(delay + TimeStep(1),
                                 &EmlsrManager::SetSleepStateForAllAuxPhys,
                                 this,
                                 true);
@@ -680,12 +753,14 @@
             SetSleepStateForAllAuxPhys(true);
         }
     }
+
+    DoNotifyProtectionCompleted(linkId);
 }
 
 void
-EmlsrManager::NotifyTxopEnd(uint8_t linkId, bool ulTxopNotStarted, bool ongoingDlTxop)
+EmlsrManager::NotifyTxopEnd(uint8_t linkId, Ptr<QosTxop> edca)
 {
-    NS_LOG_FUNCTION(this << linkId << ulTxopNotStarted << ongoingDlTxop);
+    NS_LOG_FUNCTION(this << linkId << edca);
 
     if (!m_staMac->IsEmlsrLink(linkId))
     {
@@ -713,15 +788,19 @@
     // this link of an ICF starting a DL TXOP. If the EMLSR Manager unblocked the other EMLSR
     // links, another TXOP could be started on another EMLSR link (possibly leading to a crash)
     // while the DL TXOP on this link is ongoing.
-    if (ongoingDlTxop)
+    if (GetEhtFem(linkId)->GetOngoingTxopEndEvent().IsPending())
     {
         NS_LOG_DEBUG("DL TXOP ongoing");
         return;
     }
-    if (ulTxopNotStarted)
+    if (edca)
     {
-        NS_LOG_DEBUG("TXOP did not even start");
-        return;
+        if (auto txopStart = edca->GetTxopStartTime(linkId);
+            !txopStart || *txopStart == Simulator::Now())
+        {
+            NS_LOG_DEBUG("UL TXOP did not even start");
+            return;
+        }
     }
 
     if (m_auxPhyToSleep)
@@ -730,7 +809,7 @@
         SetSleepStateForAllAuxPhys(false);
     }
 
-    DoNotifyTxopEnd(linkId);
+    DoNotifyTxopEnd(linkId, edca);
 
     // unblock transmissions and resume medium access on other EMLSR links
     std::set<uint8_t> linkIds;
@@ -752,7 +831,7 @@
 
     // The STA may choose not to (re)start the MediumSyncDelay timer if the transmission duration
     // is less than or equal to aMediumSyncThreshold. (Sec. 35.3.16.8.1 802.11be D5.1)
-    if (duration <= MicroSeconds(MEDIUM_SYNC_THRESHOLD_USEC))
+    if (duration <= MEDIUM_SYNC_THRESHOLD)
     {
         return;
     }
@@ -777,8 +856,9 @@
     if (auto statusIt = m_mediumSyncDelayStatus.find(linkId);
         statusIt != m_mediumSyncDelayStatus.cend() && statusIt->second.timer.IsPending())
     {
-        NS_LOG_DEBUG("Setting CCA ED threshold of PHY " << phy << " to " << +m_msdOfdmEdThreshold
-                                                        << " on link " << +linkId);
+        NS_LOG_DEBUG("Setting CCA ED threshold of PHY " << +phy->GetPhyId() << " to "
+                                                        << +m_msdOfdmEdThreshold << " on link "
+                                                        << +linkId);
 
         // store the current CCA ED threshold in the m_prevCcaEdThreshold map, if not present
         m_prevCcaEdThreshold.try_emplace(phy, phy->GetCcaEdThreshold());
@@ -789,8 +869,8 @@
     else if (auto threshIt = m_prevCcaEdThreshold.find(phy);
              threshIt != m_prevCcaEdThreshold.cend())
     {
-        NS_LOG_DEBUG("Resetting CCA ED threshold of PHY " << phy << " to " << threshIt->second
-                                                          << " on link " << +linkId);
+        NS_LOG_DEBUG("Resetting CCA ED threshold of PHY "
+                     << +phy->GetPhyId() << " to " << threshIt->second << " on link " << +linkId);
         phy->SetCcaEdThreshold(threshIt->second);
         m_prevCcaEdThreshold.erase(threshIt);
     }
@@ -799,12 +879,10 @@
 void
 EmlsrManager::SwitchMainPhy(uint8_t linkId,
                             bool noSwitchDelay,
-                            bool resetBackoff,
                             bool requestAccess,
                             EmlsrMainPhySwitchTrace&& traceInfo)
 {
-    NS_LOG_FUNCTION(this << linkId << noSwitchDelay << resetBackoff << requestAccess
-                         << traceInfo.GetName());
+    NS_LOG_FUNCTION(this << linkId << noSwitchDelay << requestAccess << traceInfo.GetName());
 
     auto mainPhy = m_staMac->GetDevice()->GetPhy(m_mainPhyId);
 
@@ -817,6 +895,12 @@
     traceInfo.toLinkId = linkId;
     m_mainPhySwitchTrace(traceInfo);
 
+    m_mainPhySwitchInfo.from = currMainPhyLinkId.value_or(m_mainPhySwitchInfo.from);
+    m_mainPhySwitchInfo.to = linkId;
+    m_mainPhySwitchInfo.start = Simulator::Now();
+    m_mainPhySwitchInfo.disconnected = true;
+    m_mainPhySwitchInfo.reason = traceInfo.GetName();
+
     const auto newMainPhyChannel = GetChannelForMainPhy(linkId);
 
     NS_LOG_DEBUG("Main PHY (" << mainPhy << ") is about to switch to " << newMainPhyChannel
@@ -840,12 +924,14 @@
     // request the main PHY to switch channel
     const auto delay = mainPhy->GetChannelSwitchDelay();
     const auto pifs = mainPhy->GetSifs() + mainPhy->GetSlot();
-    NS_ASSERT_MSG(noSwitchDelay || delay <= std::max(m_lastAdvTransitionDelay, pifs),
-                  "Channel switch delay ("
-                      << delay.As(Time::US)
-                      << ") should be shorter than the maximum between the Transition delay ("
-                      << m_lastAdvTransitionDelay.As(Time::US) << ") and a PIFS ("
-                      << pifs.As(Time::US) << ")");
+    if (!noSwitchDelay && delay > std::max(m_lastAdvTransitionDelay, pifs))
+    {
+        NS_LOG_WARN("Channel switch delay ("
+                    << delay.As(Time::US)
+                    << ") should be shorter than the maximum between the Transition delay ("
+                    << m_lastAdvTransitionDelay.As(Time::US) << ") and a PIFS ("
+                    << pifs.As(Time::US) << ")");
+    }
     if (noSwitchDelay)
     {
         mainPhy->SetAttribute("ChannelSwitchDelay", TimeValue(Seconds(0)));
@@ -871,12 +957,6 @@
         m_staMac->NotifySwitchingEmlsrLink(mainPhy, linkId, timeToSwitchEnd);
     }
 
-    if (resetBackoff && currMainPhyLinkId.has_value())
-    {
-        // reset the backoffs on the link left by the main PHY
-        m_staMac->GetChannelAccessManager(*currMainPhyLinkId)->ResetAllBackoffs();
-    }
-
     if (requestAccess)
     {
         // schedule channel access request on the new link when switch is completed
@@ -891,11 +971,6 @@
         });
     }
 
-    m_mainPhySwitchInfo.from = currMainPhyLinkId.value_or(m_mainPhySwitchInfo.from);
-    m_mainPhySwitchInfo.to = linkId;
-    m_mainPhySwitchInfo.end = Simulator::Now() + timeToSwitchEnd;
-
-    SetCcaEdThresholdOnLinkSwitch(mainPhy, linkId);
     NotifyMainPhySwitch(currMainPhyLinkId, linkId, auxPhy, timeToSwitchEnd);
 }
 
@@ -930,8 +1005,6 @@
                 Txop::CHECK_MEDIUM_BUSY);
         }
     });
-
-    SetCcaEdThresholdOnLinkSwitch(auxPhy, nextLinkId);
 }
 
 void
@@ -962,7 +1035,7 @@
     if (!it->second.timer.IsPending())
     {
         NS_LOG_DEBUG("Setting CCA ED threshold on link "
-                     << +linkId << " to " << +m_msdOfdmEdThreshold << " PHY " << phy);
+                     << +linkId << " to " << +m_msdOfdmEdThreshold << " PHY " << +phy->GetPhyId());
         m_prevCcaEdThreshold[phy] = phy->GetCcaEdThreshold();
         phy->SetCcaEdThreshold(m_msdOfdmEdThreshold);
     }
@@ -1058,28 +1131,6 @@
     return timerIt->second.msdNTxopsLeft == 0;
 }
 
-bool
-EmlsrManager::GetExpectedAccessWithinDelay(uint8_t linkId, const Time& delay) const
-{
-    const auto deadline = Simulator::Now() + delay;
-    for (const auto& [acIndex, ac] : wifiAcList)
-    {
-        if (auto edca = m_staMac->GetQosTxop(acIndex); edca->HasFramesToTransmit(linkId))
-        {
-            const auto backoffEnd =
-                m_staMac->GetChannelAccessManager(linkId)->GetBackoffEndFor(edca);
-
-            if (backoffEnd <= deadline)
-            {
-                NS_LOG_DEBUG("Backoff end for " << acIndex << " on link " << +linkId << ": "
-                                                << backoffEnd.As(Time::US));
-                return true;
-            }
-        }
-    }
-    return false;
-}
-
 MgtEmlOmn
 EmlsrManager::GetEmlOmn()
 {
@@ -1250,14 +1301,18 @@
         auto auxPhy = m_staMac->GetWifiPhy(linkId);
         auto channel = GetChannelForAuxPhy(linkId);
 
-        if (linkId == currMainPhyLinkId || !m_staMac->IsEmlsrLink(linkId) ||
-            auxPhy->GetOperatingChannel() == channel)
+        if (linkId == currMainPhyLinkId || !m_staMac->IsEmlsrLink(linkId))
         {
-            continue;
+            continue; // main PHY link or not an EMLSR link
         }
 
         auxPhy->SetMaxModulationClassSupported(m_auxPhyMaxModClass);
 
+        if (auxPhy->GetOperatingChannel() == channel)
+        {
+            continue;
+        }
+
         NS_LOG_DEBUG("Aux PHY (" << auxPhy << ") is about to switch to " << channel
                                  << " to operate on link " << +linkId);
         // We cannot simply set the new channel, because otherwise the MAC will disable
@@ -1273,20 +1328,6 @@
         auxPhy->SetAttribute("ChannelSwitchDelay", TimeValue(Time{0}));
         auxPhy->SetOperatingChannel(channel);
         auxPhy->SetAttribute("ChannelSwitchDelay", TimeValue(delay));
-
-        // the way the ChannelAccessManager handles EMLSR link switch implies that a PHY listener
-        // is removed when the channel switch starts and another one is attached when the channel
-        // switch ends. In the meantime, no PHY is connected to the ChannelAccessManager. Thus,
-        // reset all backoffs (so that access timeout is also cancelled) when the channel switch
-        // starts and request channel access (if needed) when the channel switch ends.
-        cam->ResetAllBackoffs();
-        for (const auto& [acIndex, ac] : wifiAcList)
-        {
-            m_staMac->GetQosTxop(acIndex)->StartAccessAfterEvent(
-                linkId,
-                Txop::DIDNT_HAVE_FRAMES_TO_TRANSMIT,
-                Txop::CHECK_MEDIUM_BUSY);
-        }
     }
 }
 
@@ -1306,27 +1347,25 @@
         m_mainPhyChannels.emplace(linkId, channel);
 
         auto mainPhyChWidth = channel.GetWidth();
-        auto auxPhyMaxWidth =
-            std::min(m_auxPhyMaxWidth, GetMaximumChannelWidth(m_auxPhyMaxModClass));
-        if (auxPhyMaxWidth >= mainPhyChWidth)
+        if (m_auxPhyMaxWidth >= mainPhyChWidth)
         {
             // same channel can be used by aux PHYs
             m_auxPhyChannels.emplace(linkId, channel);
             continue;
         }
         // aux PHYs will operate on a primary subchannel
-        auto freq = channel.GetPrimaryChannelCenterFrequency(auxPhyMaxWidth);
+        auto freq = channel.GetPrimaryChannelCenterFrequency(m_auxPhyMaxWidth);
         auto chIt = WifiPhyOperatingChannel::FindFirst(0,
                                                        freq,
-                                                       auxPhyMaxWidth,
+                                                       m_auxPhyMaxWidth,
                                                        WIFI_STANDARD_UNSPECIFIED,
                                                        channel.GetPhyBand());
         NS_ASSERT_MSG(chIt != WifiPhyOperatingChannel::m_frequencyChannels.end(),
-                      "Primary" << auxPhyMaxWidth << " channel not found");
+                      "Primary" << m_auxPhyMaxWidth << " channel not found");
         m_auxPhyChannels.emplace(linkId, chIt);
         // find the P20 index for the channel used by the aux PHYs
         auto p20Index = channel.GetPrimaryChannelIndex(MHz_u{20});
-        while (mainPhyChWidth > auxPhyMaxWidth)
+        while (mainPhyChWidth > m_auxPhyMaxWidth)
         {
             mainPhyChWidth /= 2;
             p20Index /= 2;
@@ -1405,7 +1444,7 @@
                 const auto sleepDuration = Simulator::Now() - it->second;
                 m_startSleep.erase(it);
 
-                if (sleepDuration > MicroSeconds(MEDIUM_SYNC_THRESHOLD_USEC))
+                if (sleepDuration > MEDIUM_SYNC_THRESHOLD)
                 {
                     StartMediumSyncDelayTimer(*linkId);
                 }
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/eht/emlsr-manager.h ns-3.45/src/wifi/model/eht/emlsr-manager.h
--- ns-3.44/src/wifi/model/eht/emlsr-manager.h	2025-03-09 16:55:49.787372600 -0700
+++ ns-3.45/src/wifi/model/eht/emlsr-manager.h	2025-06-01 20:34:45.615702200 -0700
@@ -82,9 +82,6 @@
     friend class ::EmlsrCcaBusyTest;
 
   public:
-    /// The aMediumSyncThreshold defined by Sec. 35.3.16.18.1 of 802.11be D4.0
-    static constexpr uint16_t MEDIUM_SYNC_THRESHOLD_USEC = 72;
-
     /**
      * @brief Get the type ID.
      * @return the object TypeId
@@ -234,11 +231,11 @@
     void NotifyMgtFrameReceived(Ptr<const WifiMpdu> mpdu, uint8_t linkId);
 
     /**
-     * Notify the reception of an initial Control frame on the given link.
+     * Notify the start of a DL TXOP on the given link.
      *
-     * @param linkId the ID of the link on which the initial Control frame was received
+     * @param linkId the ID of the given link
      */
-    void NotifyIcfReceived(uint8_t linkId);
+    void NotifyDlTxopStart(uint8_t linkId);
 
     /**
      * Notify the start of an UL TXOP on the given link
@@ -270,12 +267,10 @@
      * Notify the end of a TXOP on the given link.
      *
      * @param linkId the ID of the given link
-     * @param ulTxopNotStarted whether this is a notification of the end of an UL TXOP that did
-     *                      not even start (no frame transmitted)
-     * @param ongoingDlTxop whether a DL TXOP is ongoing on the given link (if true, this is
-     *                      a notification of the end of an UL TXOP)
+     * @param edca the EDCAF that carried out the TXOP, in case of UL TXOP, or a null pointer,
+     *             in case of DL TXOP
      */
-    void NotifyTxopEnd(uint8_t linkId, bool ulTxopNotStarted = false, bool ongoingDlTxop = false);
+    void NotifyTxopEnd(uint8_t linkId, Ptr<QosTxop> edca = nullptr);
 
     /**
      * Notify that an STA affiliated with the EMLSR client is causing in-device interference
@@ -344,6 +339,16 @@
      */
     std::pair<bool, Time> CheckPossiblyReceivingIcf(uint8_t linkId) const;
 
+    /**
+     * This method is called when an aux PHY has completed reception of an ICF to determine whether
+     * there is any reason preventing the main PHY from switching link and be on the aux PHY link
+     * by the time the ICF reception is completed to take over the DL TXOP.
+     *
+     * @param linkId the ID of the link on which ICF has been received
+     * @return the reason, if any, preventing the main PHY from switching link
+     */
+    virtual std::optional<WifiIcfDrop> CheckMainPhyTakesOverDlTxop(uint8_t linkId) const;
+
   protected:
     void DoDispose() override;
 
@@ -398,8 +403,6 @@
      *
      * @param linkId the ID of the link on which the main PHY has to operate
      * @param noSwitchDelay whether switching delay should be zero
-     * @param resetBackoff whether backoff should be reset on the link on which the main PHY
-     *                     is operating
      * @param requestAccess whether channel access should be requested on the link on which the
      *                      main PHY is moving onto
      * @param traceInfo information to pass to the main PHY switch traced callback (the fromLinkId
@@ -407,12 +410,9 @@
      */
     void SwitchMainPhy(uint8_t linkId,
                        bool noSwitchDelay,
-                       bool resetBackoff,
                        bool requestAccess,
                        EmlsrMainPhySwitchTrace&& traceInfo);
 
-    static constexpr bool RESET_BACKOFF = true;       //!< reset backoff on main PHY switch
-    static constexpr bool DONT_RESET_BACKOFF = false; //!< do not reset backoff on main PHY switch
     static constexpr bool REQUEST_ACCESS = true; //!< request channel access when PHY switch ends
     static constexpr bool DONT_REQUEST_ACCESS =
         false; //!< do not request channel access when PHY switch ends
@@ -430,10 +430,11 @@
     /**
      * Callback connected to the EmlsrLinkSwitch trace source of StaWifiMac.
      *
-     * @param linkId the ID of the link involved in the EMLSR link switch event
-     * @param phy a pointer to the PHY involved in the EMLSR link switch event
+     * @param linkId the ID of the link which the PHY is connected to/disconnected from
+     * @param phy a pointer to the PHY that is connected to/disconnected from the given link
+     * @param connected true if the PHY is connected, false if the PHY is disconnected
      */
-    virtual void EmlsrLinkSwitchCallback(uint8_t linkId, Ptr<WifiPhy> phy);
+    virtual void EmlsrLinkSwitchCallback(uint8_t linkId, Ptr<WifiPhy> phy, bool connected);
 
     /**
      * Set the CCA ED threshold (if needed) on the given PHY that is switching channel to
@@ -498,23 +499,15 @@
      */
     void CancelAllSleepEvents();
 
-    /**
-     * Get whether channel access is expected to be granted on the given link within the given
-     * delay to an Access Category that has traffic to send on the given link.
-     *
-     * @param linkId the ID of the given link
-     * @param delay the given delay
-     * @return whether channel access is expected to be granted on the given link within the given
-     *         delay
-     */
-    bool GetExpectedAccessWithinDelay(uint8_t linkId, const Time& delay) const;
-
     /// Store information about a main PHY switch.
     struct MainPhySwitchInfo
     {
-        Time end;       //!< end of channel switching
-        uint8_t from{}; //!< ID of the link which the main PHY is/has been leaving
-        uint8_t to{};   //!< ID of the link which the main PHY is moving to
+        Time start;               //!< start of channel switching
+        bool disconnected{false}; //!< true if the main PHY is not connected to any link, i.e., it
+                                  //!< is switching or waiting to be connected to a link
+        uint8_t from{};           //!< ID of the link which the main PHY is/has been leaving
+        uint8_t to{};             //!< ID of the link which the main PHY is moving to
+        std::string reason;       //!< the reason for switching the main PHY
     };
 
     Time m_emlsrPaddingDelay;    //!< EMLSR Padding delay
@@ -584,7 +577,7 @@
      *
      * @param linkId the ID of the link on which the initial Control frame was received
      */
-    virtual void DoNotifyIcfReceived(uint8_t linkId) = 0;
+    virtual void DoNotifyDlTxopStart(uint8_t linkId) = 0;
 
     /**
      * Notify the subclass of the start of an UL TXOP on the given link
@@ -594,11 +587,21 @@
     virtual void DoNotifyUlTxopStart(uint8_t linkId) = 0;
 
     /**
+     * Notify the subclass that protection (if required) is completed and data frame exchange can
+     * start on the given link.
+     *
+     * @param linkId the ID of the given link
+     */
+    virtual void DoNotifyProtectionCompleted(uint8_t linkId) = 0;
+
+    /**
      * Notify the subclass of the end of a TXOP on the given link.
      *
      * @param linkId the ID of the given link
+     * @param edca the EDCAF that carried out the TXOP, in case of UL TXOP, or a null pointer,
+     *             in case of DL TXOP
      */
-    virtual void DoNotifyTxopEnd(uint8_t linkId) = 0;
+    virtual void DoNotifyTxopEnd(uint8_t linkId, Ptr<QosTxop> edca) = 0;
 
     /**
      * Notify the acknowledgment of the given MPDU.
@@ -723,61 +726,58 @@
 /**
  * Struct to trace that main PHY switched when a (DL or UL) TXOP ended.
  *
- * This trace is normally called when aux PHYs do not switch link and the main PHY switches back to
- * the preferred link when a TXOP carried out on another link ends. In such a case, the remTime
- * field is set to zero.
- *
- * Note that the main PHY may be already switching when the TXOP ends; this happens, e.g., when the
- * main PHY starts switching to a link on which an aux PHY gained a TXOP and sent an RTS, but the
- * CTS is not received and the UL TXOP ends before the main PHY channel switch is completed. In this
- * case, the main PHY switch is postponed until the previous switch is completed and the remTime
- * field is set to the remaining channel switch delay at the time the TXOP ends:
+ * This trace is called when aux PHYs do not switch link and the main PHY switches back to the
+ * preferred link when a TXOP carried out on another link ends.
+ */
+struct EmlsrTxopEndedTrace : public EmlsrMainPhySwitchTraceImpl<EmlsrTxopEndedTrace>
+{
+    static constexpr std::string_view m_name = "TxopEnded"; //!< trace name
+};
+
+/**
+ * Struct to trace that main PHY started switching after a CTS timeout occurred on the link on
+ * which an RTS was transmitted to start an UL TXOP. Provides the time elapsed since the
+ * CTS timeout occurred.
  *
  *                                |-- main PHY switch --|
  *                                |----- to link 1 -----|
  *                                          ┌───────────┐
  *                                          │    CTS    │
  *  ────────────────────────┬───────────┬───┴X──────────┴─────────────────────────────
- *  [link 1]                │    RTS    │     │-remTime-│
- *                          └───────────┘     │         |-- main PHY switch --|
+ *  [link 1]                │    RTS    │     │-elapsed-│
+ *                          └───────────┘     │-- time--|-- main PHY switch --|
  *                                            │         |- to preferred link -|
- *                                         CTS timeout
+ *                                        CTS timeout
  *
- * Note also that the Advanced EMLSR manager may allow a main PHY switch to be interrupted. If this
- * option is enabled and the main PHY is switching when the TXOP ends, the previous switch is
- * interrupted and the main PHY starts switching to the preferred link (in this case, the remTime
- * field indicates the time that was left to complete the previous switch). Also note that, with
- * the Advanced EMLSR manager, this trace may also be called when aux PHYs switch link. This happens
- * when the TXOP ends while the main PHY is switching; in this case, the previous switch is
- * interrupted and the main PHY returns to the link on which it was operating before the previous
- * switch.
+ * Normally, this trace is called when aux PHYs do not switch links, because the main PHY has to
+ * return to the preferred link upon CTS timeout, because a TXOP did not start. In some cases, the
+ * main PHY may be switching when CTS timeout occurs; this happens when an aux PHY that is TX
+ * capable transmits an RTS and the main PHY starts switching to the aux PHY link (the start time
+ * of the main PHY switch is computed such that the main PHY switch ends slightly after the
+ * reception of the CTS). In such a case, the main PHY completes the current link switch and then
+ * it starts switching to return back to the preferred link.
  *
- *                                |-- main PHY switch --|
- *                                |----- to link 1 -----|(interrupted)
- *                                          ┌───────────┐
- *                                          │    CTS    │
- *  ────────────────────────┬───────────┬───┴X──────────┴─────────────────────────────
- *  [link 1]                │    RTS    │     │-remTime-│
- *                          └───────────┘     │-- main PHY switch --|
- *                                            │- to preferred link -|
- *                                         CTS timeout
+ * Note that the Advanced EMLSR manager may allow a main PHY switch to be interrupted. If this
+ * option is enabled and the main PHY is switching when CTS timeout occurs, the previous switch is
+ * interrupted and the main PHY starts switching to the previous link (in this case, the time
+ * elapsed since the CTS timeout occurred is zero). This holds true for both the case aux PHYs do
+ * not switch link and the case aux PHYs switch link.
  */
-struct EmlsrTxopEndedTrace : public EmlsrMainPhySwitchTraceImpl<EmlsrTxopEndedTrace>
+struct EmlsrCtsAfterRtsTimeoutTrace
+    : public EmlsrMainPhySwitchTraceImpl<EmlsrCtsAfterRtsTimeoutTrace>
 {
-    static constexpr std::string_view m_name = "TxopEnded"; //!< trace name
+    static constexpr std::string_view m_name = "CtsAfterRtsTimeout"; //!< trace name
 
-    Time remTime; //!< the remaining time (at TXOP end) until the main PHY completes the
-                  //!< channel switch, in case the main PHY is completing a previous switch
-                  //!< when the TXOP ends
+    Time sinceCtsTimeout; //!< time elapsed since CTS timeout occurred
 
     /**
      * Constructor provided because this struct is not an aggregate (it has a base struct), hence
      * we cannot use designated initializers.
      *
-     * @param t the value for the sinceTxopEnd field
+     * @param elapsed the value for the sinceCtsTimeout field
      */
-    EmlsrTxopEndedTrace(const Time& t)
-        : remTime(t)
+    EmlsrCtsAfterRtsTimeoutTrace(const Time& elapsed)
+        : sinceCtsTimeout(elapsed)
     {
     }
 };
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/eht/multi-link-element.cc ns-3.45/src/wifi/model/eht/multi-link-element.cc
--- ns-3.44/src/wifi/model/eht/multi-link-element.cc	2025-03-09 16:55:49.787372600 -0700
+++ ns-3.45/src/wifi/model/eht/multi-link-element.cc	2025-06-01 20:34:45.615702200 -0700
@@ -677,6 +677,23 @@
 }
 
 void
+MultiLinkElement::PerStaProfileSubelement::Print(std::ostream& os) const
+{
+    os << "Per-STA Profile Subelement=[";
+    os << "Variant: " << +static_cast<uint8_t>(m_variant);
+    os << ", STA Control: " << +m_staControl;
+    if (HasStaMacAddress())
+    {
+        os << ", STA MAC Address: " << m_staMacAddress;
+    }
+    if (m_bssParamsChgCnt)
+    {
+        os << ", BSS Params Change Count: " << +m_bssParamsChgCnt.value();
+    }
+    os << "]";
+}
+
+void
 MultiLinkElement::AddPerStaProfileSubelement()
 {
     auto variant = GetVariant();
@@ -808,4 +825,15 @@
     return count;
 }
 
+void
+MultiLinkElement::Print(std::ostream& os) const
+{
+    os << "Multi-Link Element=[Per-STA Profile Subelements: {";
+    for (const auto& subelement : m_perStaProfileSubelements)
+    {
+        subelement.Print(os);
+    }
+    os << "}]";
+}
+
 } // namespace ns3
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/eht/multi-link-element.h ns-3.45/src/wifi/model/eht/multi-link-element.h
--- ns-3.44/src/wifi/model/eht/multi-link-element.h	2025-03-09 16:55:49.787372600 -0700
+++ ns-3.45/src/wifi/model/eht/multi-link-element.h	2025-06-01 20:34:45.615702200 -0700
@@ -98,6 +98,7 @@
     uint16_t GetInformationFieldSize() const override;
     void SerializeInformationField(Buffer::Iterator start) const override;
     uint16_t DeserializeInformationField(Buffer::Iterator start, uint16_t length) override;
+    void Print(std::ostream& os) const override;
 
     /**
      * Get the Multi-Link element variant
@@ -306,6 +307,7 @@
         PerStaProfileSubelement& operator=(PerStaProfileSubelement&& perStaProfile) = default;
 
         WifiInformationElementId ElementId() const override;
+        void Print(std::ostream& os) const override;
 
         /**
          * Set the Link ID subfield in the STA Control field
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/eht/tid-to-link-mapping-element.cc ns-3.45/src/wifi/model/eht/tid-to-link-mapping-element.cc
--- ns-3.44/src/wifi/model/eht/tid-to-link-mapping-element.cc	2025-03-09 16:55:49.787372600 -0700
+++ ns-3.45/src/wifi/model/eht/tid-to-link-mapping-element.cc	2025-06-01 20:34:45.615702200 -0700
@@ -291,4 +291,34 @@
     return count;
 }
 
+void
+TidToLinkMapping::Print(std::ostream& os) const
+{
+    os << "TID-To-Link Mapping=["
+       << "Direction: " << static_cast<uint16_t>(m_control.direction)
+       << ", Default Mapping: " << m_control.defaultMapping
+       << ", Link Mapping Size: " << +m_control.linkMappingSize;
+    if (m_control.mappingSwitchTimePresent)
+    {
+        os << ", Mapping Switch Time: " << *m_mappingSwitchTime;
+    }
+    if (m_control.expectedDurationPresent)
+    {
+        os << ", Expected Duration: " << *m_expectedDuration;
+    }
+    os << ", Link Mapping: {";
+    for (const auto& [tid, linkMapping] : m_linkMapping)
+    {
+        os << "TID " << +tid << ": ";
+        for (uint8_t linkId = 0; linkId < 15; linkId++)
+        {
+            if (((linkMapping >> linkId) & 0x0001) == 1)
+            {
+                os << +linkId << " ";
+            }
+        }
+    }
+    os << "}]";
+}
+
 } // namespace ns3
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/eht/tid-to-link-mapping-element.h ns-3.45/src/wifi/model/eht/tid-to-link-mapping-element.h
--- ns-3.44/src/wifi/model/eht/tid-to-link-mapping-element.h	2025-03-09 16:55:49.787372600 -0700
+++ ns-3.45/src/wifi/model/eht/tid-to-link-mapping-element.h	2025-06-01 20:34:45.615702200 -0700
@@ -132,6 +132,7 @@
     uint16_t GetInformationFieldSize() const override;
     void SerializeInformationField(Buffer::Iterator start) const override;
     uint16_t DeserializeInformationField(Buffer::Iterator start, uint16_t length) override;
+    void Print(std::ostream& os) const override;
 };
 
 } // namespace ns3
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/extended-capabilities.cc ns-3.45/src/wifi/model/extended-capabilities.cc
--- ns-3.44/src/wifi/model/extended-capabilities.cc	2025-03-09 16:55:49.787372600 -0700
+++ ns-3.45/src/wifi/model/extended-capabilities.cc	2025-06-01 20:34:45.615702200 -0700
@@ -20,7 +20,7 @@
 void
 ExtendedCapabilities::Print(std::ostream& os) const
 {
-    os << "Extended Capabilities=";
+    os << "Extended Capabilities=[]";
     // TODO: print useful capabilities
 }
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/extended-capabilities.h ns-3.45/src/wifi/model/extended-capabilities.h
--- ns-3.44/src/wifi/model/extended-capabilities.h	2025-03-09 16:55:49.787372600 -0700
+++ ns-3.45/src/wifi/model/extended-capabilities.h	2025-06-01 20:34:45.615702200 -0700
@@ -18,7 +18,7 @@
  * @brief The Extended Capabilities Information Element
  * @ingroup wifi
  *
- * This class knows how to serialise and deserialise the Extended Capabilities Information Element
+ * This class knows how to serialize and deserialize the Extended Capabilities Information Element
  */
 class ExtendedCapabilities : public WifiInformationElement
 {
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/frame-exchange-manager.cc ns-3.45/src/wifi/model/frame-exchange-manager.cc
--- ns-3.44/src/wifi/model/frame-exchange-manager.cc	2025-03-09 16:55:49.787372600 -0700
+++ ns-3.45/src/wifi/model/frame-exchange-manager.cc	2025-06-01 20:34:45.616702300 -0700
@@ -322,6 +322,7 @@
 {
     NS_LOG_FUNCTION(this << macHdr << txVector << psduDuration.As(Time::MS));
     m_ongoingRxInfo = {macHdr, txVector, Simulator::Now() + psduDuration};
+    UpdateNav(macHdr, txVector, psduDuration);
 }
 
 std::optional<std::reference_wrapper<const FrameExchangeManager::OngoingRxInfo>>
@@ -612,14 +613,8 @@
     auto psdu = Create<WifiPsdu>(mpdu, false);
     FinalizeMacHeader(psdu);
     m_allowedWidth = std::min(m_allowedWidth, txVector.GetChannelWidth());
-    auto txDuration = WifiPhy::CalculateTxDuration(psdu, txVector, m_phy->GetPhyBand());
-    // The TXNAV timer is a single timer, shared by the EDCAFs within a STA, that is initialized
-    // with the duration from the Duration/ID field in the frame most recently successfully
-    // transmitted by the TXOP holder, except for PS-Poll frames. (Sec.10.23.2.2 IEEE 802.11-2020)
-    if (!mpdu->GetHeader().IsPsPoll())
-    {
-        m_txNav = Max(m_txNav, Simulator::Now() + txDuration + mpdu->GetHeader().GetDuration());
-    }
+    const auto txDuration = WifiPhy::CalculateTxDuration(psdu, txVector, m_phy->GetPhyBand());
+    SetTxNav(mpdu, txDuration);
     m_phy->Send(psdu, txVector);
 }
 
@@ -871,13 +866,13 @@
 
 void
 FrameExchangeManager::SendCtsAfterRts(const WifiMacHeader& rtsHdr,
-                                      WifiMode rtsTxMode,
+                                      const WifiTxVector& rtsTxVector,
                                       double rtsSnr)
 {
-    NS_LOG_FUNCTION(this << rtsHdr << rtsTxMode << rtsSnr);
+    NS_LOG_FUNCTION(this << rtsHdr << rtsTxVector << rtsSnr);
 
     WifiTxVector ctsTxVector =
-        GetWifiRemoteStationManager()->GetCtsTxVector(rtsHdr.GetAddr2(), rtsTxMode);
+        GetWifiRemoteStationManager()->GetCtsTxVector(rtsHdr.GetAddr2(), rtsTxVector.GetMode());
     DoSendCtsAfterRts(rtsHdr, ctsTxVector, rtsSnr);
 }
 
@@ -1018,11 +1013,11 @@
         m_dcf->UpdateFailedCw(m_linkId);
     }
     m_sentFrameTo.clear();
+    // reset TXNAV because transmission failed
+    ResetTxNav();
     // A non-QoS station always releases the channel upon a transmission failure
     NotifyChannelReleased(m_dcf);
     m_dcf = nullptr;
-    // reset TXNAV because transmission failed
-    m_txNav = Simulator::Now();
 }
 
 void
@@ -1089,38 +1084,50 @@
 {
     NS_LOG_FUNCTION(this << *rts << txVector);
 
-    DoCtsTimeout(Create<WifiPsdu>(m_mpdu, true));
+    DoCtsTimeout(WifiPsduMap{{SU_STA_ID, Create<WifiPsdu>(m_mpdu, true)}});
     m_mpdu = nullptr;
 }
 
 void
-FrameExchangeManager::DoCtsTimeout(Ptr<WifiPsdu> psdu)
+FrameExchangeManager::DoCtsTimeout(const WifiPsduMap& psduMap)
 {
-    NS_LOG_FUNCTION(this << *psdu);
+    NS_LOG_FUNCTION(this << psduMap);
 
-    // GetUpdateCwOnCtsTimeout() needs to be called before resetting m_sentRtsTo
+    // these functions need to be called before resetting m_sentRtsTo
     const auto updateCw = GetUpdateCwOnCtsTimeout();
+    const auto reportRts = GetReportRtsFailed();
 
     m_sentRtsTo.clear();
-    for (const auto& mpdu : *PeekPointer(psdu))
+    for (const auto& [staId, psdu] : psduMap)
     {
-        if (mpdu->IsQueued())
+        for (const auto& mpdu : *PeekPointer(psdu))
         {
-            mpdu->ResetInFlight(m_linkId);
+            if (mpdu->IsQueued())
+            {
+                mpdu->ResetInFlight(m_linkId);
+            }
         }
-    }
 
-    GetWifiRemoteStationManager()->ReportRtsFailed(psdu->GetHeader(0));
-    if (auto droppedMpdu = DropMpduIfRetryLimitReached(psdu))
-    {
-        GetWifiRemoteStationManager()->ReportFinalRtsFailed(droppedMpdu->GetHeader());
-    }
+        if (const auto& hdr = psdu->GetHeader(0);
+            !GetIndividuallyAddressedRecipient(m_mac, hdr).IsGroup())
+        {
+            if (reportRts)
+            {
+                GetWifiRemoteStationManager()->ReportRtsFailed(hdr);
+            }
+
+            if (auto droppedMpdu = DropMpduIfRetryLimitReached(psdu))
+            {
+                GetWifiRemoteStationManager()->ReportFinalRtsFailed(droppedMpdu->GetHeader());
+            }
+        }
 
-    // Make the sequence numbers of the MPDUs available again if the MPDUs have never
-    // been transmitted, both in case the MPDUs have been discarded and in case the
-    // MPDUs have to be transmitted (because a new sequence number is assigned to
-    // MPDUs that have never been transmitted and are selected for transmission)
-    ReleaseSequenceNumbers(psdu);
+        // Make the sequence numbers of the MPDUs available again if the MPDUs have never
+        // been transmitted, both in case the MPDUs have been discarded and in case the
+        // MPDUs have to be transmitted (because a new sequence number is assigned to
+        // MPDUs that have never been transmitted and are selected for transmission)
+        ReleaseSequenceNumbers(psdu);
+    }
 
     TransmissionFailed(!updateCw);
 }
@@ -1131,6 +1138,12 @@
     return true;
 }
 
+bool
+FrameExchangeManager::GetReportRtsFailed() const
+{
+    return true;
+}
+
 void
 FrameExchangeManager::ReleaseSequenceNumbers(Ptr<const WifiPsdu> psdu) const
 {
@@ -1243,11 +1256,9 @@
             // has been correctly received)
             NS_ASSERT(perMpduStatus.empty() || (perMpduStatus.size() == 1 && perMpduStatus[0]));
             // Ack and CTS do not carry Addr2
-            if (!psdu->GetHeader(0).IsAck() && !psdu->GetHeader(0).IsCts())
+            if (const auto& hdr = psdu->GetHeader(0); !hdr.IsAck() && !hdr.IsCts())
             {
-                GetWifiRemoteStationManager()->ReportRxOk(psdu->GetHeader(0).GetAddr2(),
-                                                          rxSignalInfo,
-                                                          txVector);
+                GetWifiRemoteStationManager()->ReportRxOk(psdu->GetAddr2(), rxSignalInfo, txVector);
             }
             ReceiveMpdu(*(psdu->begin()), rxSignalInfo, txVector, perMpduStatus.empty());
         }
@@ -1285,23 +1296,26 @@
 {
     NS_LOG_FUNCTION(this << psdu << txVector);
 
-    UpdateNav(psdu, txVector);
+    UpdateNav(psdu->GetHeader(0), txVector);
 }
 
 void
-FrameExchangeManager::UpdateNav(Ptr<const WifiPsdu> psdu, const WifiTxVector& txVector)
+FrameExchangeManager::UpdateNav(const WifiMacHeader& hdr,
+                                const WifiTxVector& txVector,
+                                const Time& surplus)
 {
-    NS_LOG_FUNCTION(this << psdu << txVector);
+    NS_LOG_FUNCTION(this << hdr << txVector << surplus.As(Time::US));
 
-    if (!psdu->HasNav())
+    if (!hdr.HasNav())
     {
         return;
     }
 
-    Time duration = psdu->GetDuration();
+    Time duration = hdr.GetDuration();
     NS_LOG_DEBUG("Duration/ID=" << duration);
+    duration += surplus;
 
-    if (psdu->GetAddr1() == m_self)
+    if (hdr.GetAddr1() == m_self)
     {
         // When the received frame's RA is equal to the STA's own MAC address, the STA
         // shall not update its NAV (IEEE 802.11-2016, sec. 10.3.2.4)
@@ -1325,14 +1339,16 @@
         // The “CTS_Time” shall be calculated using the length of the CTS frame and the data
         // rate at which the RTS frame used for the most recent NAV update was received
         // (IEEE 802.11-2016 sec. 10.3.2.4)
-        if (psdu->GetHeader(0).IsRts())
+        if (hdr.IsRts())
         {
+            auto addr2 = hdr.GetAddr2();
             WifiTxVector ctsTxVector =
-                GetWifiRemoteStationManager()->GetCtsTxVector(psdu->GetAddr2(), txVector.GetMode());
+                GetWifiRemoteStationManager()->GetCtsTxVector(addr2, txVector.GetMode());
             Time navResetDelay =
                 2 * m_phy->GetSifs() +
                 WifiPhy::CalculateTxDuration(GetCtsSize(), ctsTxVector, m_phy->GetPhyBand()) +
                 WifiPhy::CalculatePhyPreambleAndHeaderDuration(ctsTxVector) + 2 * m_phy->GetSlot();
+            m_navResetEvent.Cancel();
             m_navResetEvent =
                 Simulator::Schedule(navResetDelay, &FrameExchangeManager::NavResetTimeout, this);
         }
@@ -1350,6 +1366,29 @@
     m_channelAccessManager->NotifyNavResetNow(Seconds(0));
 }
 
+void
+FrameExchangeManager::SetTxNav(Ptr<const WifiMpdu> mpdu, const Time& txDuration)
+{
+    // The TXNAV timer is a single timer, shared by the EDCAFs within a STA, that is initialized
+    // with the duration from the Duration/ID field in the frame most recently successfully
+    // transmitted by the TXOP holder, except for PS-Poll frames. The TXNAV timer begins counting
+    // down from the end of the transmission of the PPDU containing that frame.
+    // (Sec.10.23.2.2 IEEE 802.11-2020)
+    if (!mpdu->GetHeader().IsPsPoll())
+    {
+        const auto txNav = Simulator::Now() + txDuration + mpdu->GetHeader().GetDuration();
+        NS_LOG_DEBUG("Setting TXNAV to " << txNav.As(Time::S));
+        m_txNav = Max(m_txNav, txNav);
+    }
+}
+
+void
+FrameExchangeManager::ResetTxNav()
+{
+    NS_LOG_FUNCTION(this);
+    m_txNav = Simulator::Now();
+}
+
 bool
 FrameExchangeManager::VirtualCsMediumIdle() const
 {
@@ -1386,7 +1425,7 @@
                                                      &FrameExchangeManager::SendCtsAfterRts,
                                                      this,
                                                      hdr,
-                                                     txVector.GetMode(),
+                                                     txVector,
                                                      rxSnr);
             }
             else
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/frame-exchange-manager.h ns-3.45/src/wifi/model/frame-exchange-manager.h
--- ns-3.44/src/wifi/model/frame-exchange-manager.h	2025-03-09 16:55:49.787372600 -0700
+++ ns-3.45/src/wifi/model/frame-exchange-manager.h	2025-06-01 20:34:45.616702300 -0700
@@ -353,12 +353,17 @@
     virtual void ProtectionCompleted();
 
     /**
-     * Update the NAV, if needed, based on the Duration/ID of the given <i>psdu</i>.
+     * Update the NAV, if needed, based on the Duration/ID of the given MAC header and the given
+     * surplus.
      *
-     * @param psdu the received PSDU
-     * @param txVector TxVector of the received PSDU
-     */
-    virtual void UpdateNav(Ptr<const WifiPsdu> psdu, const WifiTxVector& txVector);
+     * @param hdr the given MAC header
+     * @param txVector TxVector of the PSDU containing the MAC header
+     * @param surplus the surplus to add to the Duration/ID value. This is needed, e.g., when
+     *                setting the NAV at the end of the reception of the MAC header
+     */
+    virtual void UpdateNav(const WifiMacHeader& hdr,
+                           const WifiTxVector& txVector,
+                           const Time& surplus = Time{0});
 
     /**
      * Reset the NAV upon expiration of the NAV reset timer.
@@ -366,6 +371,17 @@
     virtual void NavResetTimeout();
 
     /**
+     * Set the TXNAV upon sending an MPDU.
+     *
+     * @param mpdu the MPDU being sent
+     * @param txDuration the TX duration of the MPDU
+     */
+    void SetTxNav(Ptr<const WifiMpdu> mpdu, const Time& txDuration);
+
+    /// Reset the TXNAV
+    void ResetTxNav();
+
+    /**
      * This method is called when the reception of a PSDU fails.
      *
      * @param psdu the PSDU whose reception failed
@@ -595,10 +611,12 @@
      * Send CTS after receiving RTS.
      *
      * @param rtsHdr the header of the received RTS
-     * @param rtsTxMode the TX mode used to transmit the RTS
+     * @param rtsTxVector the TXVECTOR used to transmit the RTS
      * @param rtsSnr the SNR of the RTS in linear scale
      */
-    virtual void SendCtsAfterRts(const WifiMacHeader& rtsHdr, WifiMode rtsTxMode, double rtsSnr);
+    virtual void SendCtsAfterRts(const WifiMacHeader& rtsHdr,
+                                 const WifiTxVector& rtsTxVector,
+                                 double rtsSnr);
 
     /**
      * Send CTS after receiving RTS.
@@ -688,12 +706,12 @@
      */
     virtual void CtsTimeout(Ptr<WifiMpdu> rts, const WifiTxVector& txVector);
     /**
-     * Take required actions when the CTS timer fired after sending an RTS to
-     * protect the given PSDU expires.
+     * Take required actions when the CTS timer fired after sending an (MU-)RTS to
+     * protect the given PSDU map expires.
      *
-     * @param psdu the PSDU protected by the failed RTS
+     * @param psduMap the PSDU map protected by the failed (MU-)RTS
      */
-    void DoCtsTimeout(Ptr<WifiPsdu> psdu);
+    void DoCtsTimeout(const WifiPsduMap& psduMap);
 
     /**
      * @return whether CW shall be updated on CTS timeout
@@ -701,6 +719,11 @@
     virtual bool GetUpdateCwOnCtsTimeout() const;
 
     /**
+     * @return whether an (MU-)RTS failure shall be reported to the remote station manager
+     */
+    virtual bool GetReportRtsFailed() const;
+
+    /**
      * Reset this frame exchange manager.
      */
     virtual void Reset();
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/gcr-group-address.cc ns-3.45/src/wifi/model/gcr-group-address.cc
--- ns-3.44/src/wifi/model/gcr-group-address.cc	2025-03-09 16:55:49.787372600 -0700
+++ ns-3.45/src/wifi/model/gcr-group-address.cc	2025-06-01 20:34:45.616702300 -0700
@@ -16,7 +16,7 @@
 void
 GcrGroupAddress::Print(std::ostream& os) const
 {
-    os << "gcrGroupAddress=" << m_gcrGroupAddress;
+    os << "GCR Group Address=[" << m_gcrGroupAddress << "]";
 }
 
 WifiInformationElementId
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/he/he-6ghz-band-capabilities.cc ns-3.45/src/wifi/model/he/he-6ghz-band-capabilities.cc
--- ns-3.44/src/wifi/model/he/he-6ghz-band-capabilities.cc	2025-03-09 16:55:49.791372500 -0700
+++ ns-3.45/src/wifi/model/he/he-6ghz-band-capabilities.cc	2025-06-01 20:34:45.616702300 -0700
@@ -124,14 +124,14 @@
 void
 He6GhzBandCapabilities::Print(std::ostream& os) const
 {
-    os << "HE 6GHz Band Capabilities=[Capabilities Information|"
-       << " Min MPDU start spacing: " << +m_capabilitiesInfo.m_minMpduStartSpacing
-       << " Max A-MPDU Length Exp: " << +m_capabilitiesInfo.m_maxAmpduLengthExponent
-       << " Max MPDU Length: " << +m_capabilitiesInfo.m_maxMpduLength
-       << " SM Power Save: " << +m_capabilitiesInfo.m_smPowerSave
-       << " RD Responder: " << +m_capabilitiesInfo.m_rdResponder
-       << " RX Antenna Pattern: " << +m_capabilitiesInfo.m_rxAntennaPatternConsistency
-       << " TX Antenna Pattern: " << +m_capabilitiesInfo.m_txAntennaPatternConsistency << "]";
+    os << "HE 6GHz Band Capabilities=["
+       << "Min MPDU start spacing: " << +m_capabilitiesInfo.m_minMpduStartSpacing
+       << ", Max A-MPDU Length Exp: " << +m_capabilitiesInfo.m_maxAmpduLengthExponent
+       << ", Max MPDU Length: " << +m_capabilitiesInfo.m_maxMpduLength
+       << ", SM Power Save: " << +m_capabilitiesInfo.m_smPowerSave
+       << ", RD Responder: " << +m_capabilitiesInfo.m_rdResponder
+       << ", RX Antenna Pattern: " << +m_capabilitiesInfo.m_rxAntennaPatternConsistency
+       << ", TX Antenna Pattern: " << +m_capabilitiesInfo.m_txAntennaPatternConsistency << "]";
 }
 
 } // namespace ns3
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/he/he-capabilities.cc ns-3.45/src/wifi/model/he/he-capabilities.cc
--- ns-3.44/src/wifi/model/he/he-capabilities.cc	2025-03-09 16:55:49.791372500 -0700
+++ ns-3.45/src/wifi/model/he/he-capabilities.cc	2025-06-01 20:34:45.616702300 -0700
@@ -128,9 +128,8 @@
 void
 HeCapabilities::Print(std::ostream& os) const
 {
-    os << "HE Capabilities=" << GetHeMacCapabilitiesInfo1() << "|" << +GetHeMacCapabilitiesInfo2()
-       << "|" << GetHePhyCapabilitiesInfo1() << "|" << GetHePhyCapabilitiesInfo2() << "|"
-       << +GetHePhyCapabilitiesInfo3() << "|" << GetSupportedMcsAndNss();
+    os << "HE Capabilities=[Max AMPDU Length Exponent: " << +m_maxAmpduLengthExponent
+       << ", Channel Width Set: " << +m_channelWidthSet << "]";
 }
 
 uint16_t
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/he/he-frame-exchange-manager.cc ns-3.45/src/wifi/model/he/he-frame-exchange-manager.cc
--- ns-3.44/src/wifi/model/he/he-frame-exchange-manager.cc	2025-03-09 16:55:49.791372500 -0700
+++ ns-3.45/src/wifi/model/he/he-frame-exchange-manager.cc	2025-06-01 20:34:45.616702300 -0700
@@ -334,20 +334,31 @@
 {
     NS_LOG_FUNCTION(this << muRtsSize << muRtsTxVector << txDuration << response);
 
+    WifiTxVector txVector;
+    txVector.SetMode(GetCtsModeAfterMuRts());
+    const auto singleDurationId =
+        VhtFrameExchangeManager::GetRtsDurationId(txVector, txDuration, response);
+
     if (m_edca->GetTxopLimit(m_linkId).IsZero())
     {
-        WifiTxVector txVector;
-        txVector.SetMode(GetCtsModeAfterMuRts());
-        return VhtFrameExchangeManager::GetRtsDurationId(txVector, txDuration, response);
+        return singleDurationId;
     }
 
     // under multiple protection settings, if the TXOP limit is not null, Duration/ID
     // is set to cover the remaining TXOP time (Sec. 9.2.5.2 of 802.11-2016).
     // The TXOP holder may exceed the TXOP limit in some situations (Sec. 10.22.2.8
     // of 802.11-2016)
-    return std::max(m_edca->GetRemainingTxop(m_linkId) -
-                        WifiPhy::CalculateTxDuration(muRtsSize, muRtsTxVector, m_phy->GetPhyBand()),
-                    Seconds(0));
+    auto duration =
+        std::max(m_edca->GetRemainingTxop(m_linkId) -
+                     WifiPhy::CalculateTxDuration(muRtsSize, muRtsTxVector, m_phy->GetPhyBand()),
+                 Seconds(0));
+
+    if (m_protectSingleExchange)
+    {
+        duration = std::min(duration, singleDurationId + m_singleExchangeProtectionSurplus);
+    }
+
+    return duration;
 }
 
 void
@@ -421,55 +432,10 @@
         return;
     }
 
-    DoCtsAfterMuRtsTimeout(m_psduMap);
+    DoCtsTimeout(m_psduMap);
     m_psduMap.clear();
 }
 
-void
-HeFrameExchangeManager::DoCtsAfterMuRtsTimeout(const WifiPsduMap& psduMap)
-{
-    NS_LOG_FUNCTION(this);
-
-    // GetUpdateCwOnCtsTimeout() needs to be called before resetting m_sentRtsTo
-    const auto updateCw = GetUpdateCwOnCtsTimeout();
-
-    m_sentRtsTo.clear();
-    for (const auto& psdu : psduMap)
-    {
-        for (const auto& mpdu : *PeekPointer(psdu.second))
-        {
-            if (mpdu->IsQueued())
-            {
-                mpdu->ResetInFlight(m_linkId);
-            }
-        }
-    }
-
-    if (const auto& hdr = psduMap.cbegin()->second->GetHeader(0); !hdr.GetAddr1().IsGroup())
-    {
-        GetWifiRemoteStationManager()->ReportRtsFailed(hdr);
-    }
-
-    for (const auto& [staId, psdu] : psduMap)
-    {
-        if (psdu->GetAddr1().IsGroup())
-        {
-            continue;
-        }
-        if (auto droppedMpdu = DropMpduIfRetryLimitReached(psdu))
-        {
-            GetWifiRemoteStationManager()->ReportFinalRtsFailed(droppedMpdu->GetHeader());
-        }
-        // Make the sequence numbers of the MPDUs available again if the MPDUs have never
-        // been transmitted, both in case the MPDUs have been discarded and in case the
-        // MPDUs have to be transmitted (because a new sequence number is assigned to
-        // MPDUs that have never been transmitted and are selected for transmission)
-        ReleaseSequenceNumbers(psdu);
-    }
-
-    TransmissionFailed(!updateCw);
-}
-
 Ptr<WifiPsdu>
 HeFrameExchangeManager::GetPsduTo(Mac48Address to, const WifiPsduMap& psduMap)
 {
@@ -498,7 +464,7 @@
     }
 
     NS_ABORT_MSG_IF(m_psduMap.size() > 1, "RTS/CTS cannot be used to protect an MU PPDU");
-    DoCtsTimeout(m_psduMap.begin()->second);
+    DoCtsTimeout(m_psduMap);
     m_psduMap.clear();
 }
 
@@ -986,11 +952,8 @@
         txVector.SetAggregation(true);
     }
 
-    auto txDuration = WifiPhy::CalculateTxDuration(psduMap, txVector, m_phy->GetPhyBand());
-    // The TXNAV timer is a single timer, shared by the EDCAFs within a STA, that is initialized
-    // with the duration from the Duration/ID field in the frame most recently successfully
-    // transmitted by the TXOP holder, except for PS-Poll frames. (Sec.10.23.2.2 IEEE 802.11-2020)
-    m_txNav = Max(m_txNav, Simulator::Now() + txDuration + psduMap.cbegin()->second->GetDuration());
+    const auto txDuration = WifiPhy::CalculateTxDuration(psduMap, txVector, m_phy->GetPhyBand());
+    SetTxNav(*psduMap.cbegin()->second->begin(), txDuration);
 
     m_phy->Send(psduMap, txVector);
 }
@@ -1166,7 +1129,13 @@
         std::tie(dlMuTfMuBarAcknowledgment->ulLength, duration) =
             HePhy::ConvertHeTbPpduDurationToLSigLength(duration, txVector, m_phy->GetPhyBand());
 
-        uint32_t muBarSize = GetMuBarSize(dlMuTfMuBarAcknowledgment->barTypes);
+        const auto muBarVariant = (txVector.GetModulationClass() == WIFI_MOD_CLASS_HE)
+                                      ? TriggerFrameVariant::HE
+                                      : TriggerFrameVariant::EHT;
+        uint32_t muBarSize =
+            GetMuBarSize(muBarVariant,
+                         dlMuTfMuBarAcknowledgment->muBarTxVector.GetChannelWidth(),
+                         dlMuTfMuBarAcknowledgment->barTypes);
         if (dlMuTfMuBarAcknowledgment->muBarTxVector.GetModulationClass() >= WIFI_MOD_CLASS_VHT)
         {
             // MU-BAR TF will be sent as an S-MPDU
@@ -1272,11 +1241,15 @@
     {
         bw = MHz_u{80};
     }
-    else
+    else if (ru == 68)
     {
-        NS_ASSERT(ru == 68);
         bw = MHz_u{160};
     }
+    else
+    {
+        NS_ASSERT(ru == 69);
+        bw = MHz_u{320};
+    }
 
     auto txVector = GetWifiRemoteStationManager()->GetCtsTxVector(m_bssid, GetCtsModeAfterMuRts());
     // set the channel width of the CTS TXVECTOR according to the allocated RU
@@ -1307,8 +1280,13 @@
         NS_ASSERT_MSG(!psduInfo->seqNumbers.empty(), "No sequence number for " << receiver);
         const auto tid = psduInfo->seqNumbers.cbegin()->first;
 
+        const auto muBarVariant = (txParams.m_txVector.GetModulationClass() == WIFI_MOD_CLASS_HE)
+                                      ? TriggerFrameVariant::HE
+                                      : TriggerFrameVariant::EHT;
         ppduPayloadSize = MpduAggregator::GetSizeIfAggregated(
-            GetMuBarSize({m_mac->GetBarTypeAsOriginator(receiver, tid)}),
+            GetMuBarSize(muBarVariant,
+                         txParams.m_txVector.GetChannelWidth(),
+                         {m_mac->GetBarTypeAsOriginator(receiver, tid)}),
             ppduPayloadSize);
     }
 
@@ -1585,12 +1563,13 @@
                                                   << m_phy->GetTxPowerEnd() << "dBm)");
     }
     v.SetTxPowerLevel(powerLevel);
-    NS_LOG_LOGIC("UL power control: "
-                 << "input {pathLoss=" << pathLossDb << "dB, reqTxPower=" << reqTxPower << "dBm}"
-                 << " output {powerLevel=" << +powerLevel << " -> " << m_phy->GetPower(powerLevel)
-                 << "dBm}"
-                 << " PHY power capa {min=" << m_phy->GetTxPowerStart() << "dBm, max="
-                 << m_phy->GetTxPowerEnd() << "dBm, levels:" << +numPowerLevels << "}");
+    NS_LOG_LOGIC("UL power control: input "
+                 << "{pathLoss=" << pathLossDb << "dB, reqTxPower=" << reqTxPower << "dBm}"
+                 << " output "
+                 << "{powerLevel=" << +powerLevel << " -> " << m_phy->GetPower(powerLevel) << "dBm}"
+                 << " PHY power capa "
+                 << "{min=" << m_phy->GetTxPowerStart() << "dBm, max=" << m_phy->GetTxPowerEnd()
+                 << "dBm, levels:" << +numPowerLevels << "}");
 
     return v;
 }
@@ -1771,15 +1750,19 @@
      * settings defined in 9.2.5.2. (Sec. 9.2.5.7 of 802.11ax-2021)
      */
     NS_ASSERT(m_edca);
-    if (m_edca->GetTxopLimit(m_linkId).IsZero())
+    const auto singleDurationId = Max(durationId - m_phy->GetSifs() - txDuration, Seconds(0));
+    if (m_edca->GetTxopLimit(m_linkId).IsZero()) // single protection settings
     {
-        // single protection settings
-        psdu->SetDuration(Max(durationId - m_phy->GetSifs() - txDuration, Seconds(0)));
+        psdu->SetDuration(singleDurationId);
     }
-    else
+    else // multiple protection settings
     {
-        // multiple protection settings
-        psdu->SetDuration(Max(m_edca->GetRemainingTxop(m_linkId) - txDuration, Seconds(0)));
+        auto duration = Max(m_edca->GetRemainingTxop(m_linkId) - txDuration, Seconds(0));
+        if (m_protectSingleExchange)
+        {
+            duration = std::min(duration, singleDurationId + m_singleExchangeProtectionSurplus);
+        }
+        psdu->SetDuration(duration);
     }
 
     psdu->GetPayload(0)->AddPacketTag(m_muSnrTag);
@@ -2003,9 +1986,9 @@
 }
 
 bool
-HeFrameExchangeManager::IsIntraBssPpdu(Ptr<const WifiPsdu> psdu, const WifiTxVector& txVector) const
+HeFrameExchangeManager::IsIntraBssPpdu(const WifiMacHeader& hdr, const WifiTxVector& txVector) const
 {
-    NS_LOG_FUNCTION(this << psdu << txVector);
+    NS_LOG_FUNCTION(this << hdr << txVector);
 
     // "If, based on the MAC address information of a frame carried in a received PPDU, the
     // received PPDU satisfies both intra-BSS and inter-BSS conditions, then the received PPDU is
@@ -2013,9 +1996,9 @@
     // Hence, check first if the intra-BSS conditions using MAC address information are satisfied:
     // 1. "The PPDU carries a frame that has an RA, TA, or BSSID field value that is equal to
     //    the BSSID of the BSS in which the STA is associated"
-    const auto ra = psdu->GetAddr1();
-    const auto ta = psdu->GetAddr2();
-    const auto bssid = psdu->GetHeader(0).GetAddr3();
+    const auto ra = hdr.GetAddr1();
+    auto ta = hdr.GetAddr2();
+    const auto bssid = hdr.GetAddr3();
     const auto empty = Mac48Address();
 
     if (ra == m_bssid || ta == m_bssid || bssid == m_bssid)
@@ -2026,7 +2009,7 @@
     // 2. "The PPDU carries a Control frame that does not have a TA field and that has an
     //    RA field value that matches the saved TXOP holder address of the BSS in which
     //    the STA is associated"
-    if (psdu->GetHeader(0).IsCtl() && ta == empty && ra == m_txopHolder)
+    if (hdr.IsCtl() && ta == empty && ra == m_txopHolder)
     {
         return true;
     }
@@ -2068,16 +2051,18 @@
 }
 
 void
-HeFrameExchangeManager::UpdateNav(Ptr<const WifiPsdu> psdu, const WifiTxVector& txVector)
+HeFrameExchangeManager::UpdateNav(const WifiMacHeader& hdr,
+                                  const WifiTxVector& txVector,
+                                  const Time& surplus)
 {
-    NS_LOG_FUNCTION(this << psdu << txVector);
+    NS_LOG_FUNCTION(this << hdr << txVector << surplus.As(Time::US));
 
-    if (!psdu->HasNav())
+    if (!hdr.HasNav())
     {
         return;
     }
 
-    if (psdu->GetAddr1() == m_self)
+    if (hdr.GetAddr1() == m_self)
     {
         // When the received frame's RA is equal to the STA's own MAC address, the STA
         // shall not update its NAV (IEEE 802.11-2020, sec. 10.3.2.4)
@@ -2087,18 +2072,19 @@
     // The intra-BSS NAV is updated by an intra-BSS PPDU. The basic NAV is updated by an
     // inter-BSS PPDU or a PPDU that cannot be classified as intra-BSS or inter-BSS.
     // (Section 26.2.4 of 802.11ax-2021)
-    if (!IsIntraBssPpdu(psdu, txVector))
+    if (!IsIntraBssPpdu(hdr, txVector))
     {
         NS_LOG_DEBUG("PPDU not classified as intra-BSS, update the basic NAV");
-        VhtFrameExchangeManager::UpdateNav(psdu, txVector);
+        VhtFrameExchangeManager::UpdateNav(hdr, txVector, surplus);
         return;
     }
 
     NS_LOG_DEBUG("PPDU classified as intra-BSS, update the intra-BSS NAV");
-    Time duration = psdu->GetDuration();
+    Time duration = hdr.GetDuration();
     NS_LOG_DEBUG("Duration/ID=" << duration);
+    duration += surplus;
 
-    if (psdu->GetHeader(0).IsCfEnd())
+    if (hdr.IsCfEnd())
     {
         // An HE STA that maintains two NAVs (see 26.2.4) and receives a CF-End frame should reset
         // the basic NAV if the received CF-End frame is carried in an inter-BSS PPDU and reset the
@@ -2126,14 +2112,16 @@
         // The “CTS_Time” shall be calculated using the length of the CTS frame and the data
         // rate at which the RTS frame used for the most recent NAV update was received
         // (IEEE 802.11-2016 sec. 10.3.2.4)
-        if (psdu->GetHeader(0).IsRts())
+        if (hdr.IsRts())
         {
+            auto addr2 = hdr.GetAddr2();
             WifiTxVector ctsTxVector =
-                GetWifiRemoteStationManager()->GetCtsTxVector(psdu->GetAddr2(), txVector.GetMode());
+                GetWifiRemoteStationManager()->GetCtsTxVector(addr2, txVector.GetMode());
             auto navResetDelay =
                 2 * m_phy->GetSifs() +
                 WifiPhy::CalculateTxDuration(GetCtsSize(), ctsTxVector, m_phy->GetPhyBand()) +
                 WifiPhy::CalculatePhyPreambleAndHeaderDuration(ctsTxVector) + 2 * m_phy->GetSlot();
+            m_intraBssNavResetEvent.Cancel();
             m_intraBssNavResetEvent =
                 Simulator::Schedule(navResetDelay,
                                     &HeFrameExchangeManager::IntraBssNavResetTimeout,
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/he/he-frame-exchange-manager.h ns-3.45/src/wifi/model/he/he-frame-exchange-manager.h
--- ns-3.44/src/wifi/model/he/he-frame-exchange-manager.h	2025-03-09 16:55:49.791372500 -0700
+++ ns-3.45/src/wifi/model/he/he-frame-exchange-manager.h	2025-06-01 20:34:45.617702200 -0700
@@ -99,13 +99,13 @@
      * Return whether the received frame is classified as intra-BSS. It is assumed that
      * this station is already associated with an AP.
      *
-     * @param psdu the received PSDU
+     * @param hdr the MAC header of the received PSDU
      * @param txVector TX vector of the received PSDU
      * @return true if the received frame is classified as intra-BSS, false otherwise
      *         (the received frame is classified as inter-BSS or it cannot be classified
      *         as intra-BSS or inter-BSS)
      */
-    bool IsIntraBssPpdu(Ptr<const WifiPsdu> psdu, const WifiTxVector& txVector) const;
+    bool IsIntraBssPpdu(const WifiMacHeader& hdr, const WifiTxVector& txVector) const;
 
     /**
      * This method is intended to be called a SIFS after the reception of a Trigger Frame
@@ -144,7 +144,9 @@
     void NormalAckTimeout(Ptr<WifiMpdu> mpdu, const WifiTxVector& txVector) override;
     void BlockAckTimeout(Ptr<WifiPsdu> psdu, const WifiTxVector& txVector) override;
     void CtsTimeout(Ptr<WifiMpdu> rts, const WifiTxVector& txVector) override;
-    void UpdateNav(Ptr<const WifiPsdu> psdu, const WifiTxVector& txVector) override;
+    void UpdateNav(const WifiMacHeader& hdr,
+                   const WifiTxVector& txVector,
+                   const Time& surplus = Time{0}) override;
     void NavResetTimeout() override;
     void StartProtection(const WifiTxParameters& txParams) override;
     void ProtectionCompleted() override;
@@ -192,13 +194,6 @@
     virtual void CtsAfterMuRtsTimeout(Ptr<WifiMpdu> muRts, const WifiTxVector& txVector);
 
     /**
-     * Called when no CTS frame is received after an MU-RTS.
-     *
-     * @param psduMap the PSDU map protected by the failed MU-RTS
-     */
-    void DoCtsAfterMuRtsTimeout(const WifiPsduMap& psduMap);
-
-    /**
      * Send CTS after receiving an MU-RTS.
      *
      * @param muRtsHdr the MAC header of the received MU-RTS
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/he/he-operation.cc ns-3.45/src/wifi/model/he/he-operation.cc
--- ns-3.44/src/wifi/model/he/he-operation.cc	2025-03-09 16:55:49.791372500 -0700
+++ ns-3.45/src/wifi/model/he/he-operation.cc	2025-06-01 20:34:45.617702200 -0700
@@ -33,11 +33,12 @@
 void
 HeOperation::HeOperationParams::Print(std::ostream& os) const
 {
-    os << "Default PE Duration: " << +m_defaultPeDuration << " TWT Required: " << +m_twtRequired
-       << " TXOP Duration RTS Threshold: " << m_txopDurRtsThresh
-       << " VHT Operation Information Present: " << +m_vhOpPresent
-       << " Co-Hosted BSS: " << +m_coHostedBss << " ER SU Disable: " << +m_erSuDisable
-       << " 6 GHz Operation Information Present: " << m_6GHzOpPresent;
+    os << "HE Operation=[Default PE Duration: " << +m_defaultPeDuration
+       << ", TWT Required: " << +m_twtRequired
+       << ", TXOP Duration RTS Threshold: " << m_txopDurRtsThresh
+       << ", VHT Operation Information Present: " << +m_vhOpPresent
+       << ", Co-Hosted BSS: " << +m_coHostedBss << ", ER SU Disable: " << +m_erSuDisable
+       << ", 6 GHz Operation Information Present: " << m_6GHzOpPresent << "]";
 }
 
 uint16_t
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/he/he-operation.h ns-3.45/src/wifi/model/he/he-operation.h
--- ns-3.44/src/wifi/model/he/he-operation.h	2025-03-09 16:55:49.791372500 -0700
+++ ns-3.45/src/wifi/model/he/he-operation.h	2025-06-01 20:34:45.617702200 -0700
@@ -20,7 +20,7 @@
  * @brief The HE Operation Information Element
  * @ingroup wifi
  *
- * This class knows how to serialise and deserialise
+ * This class knows how to serialize and deserialize
  * the HE Operation Information Element
  */
 class HeOperation : public WifiInformationElement
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/he/he-phy.cc ns-3.45/src/wifi/model/he/he-phy.cc
--- ns-3.44/src/wifi/model/he/he-phy.cc	2025-03-09 16:55:49.791372500 -0700
+++ ns-3.45/src/wifi/model/he/he-phy.cc	2025-06-01 20:34:45.617702200 -0700
@@ -216,8 +216,10 @@
         NS_ASSERT(txVector.GetModulationClass() >= WIFI_MOD_CLASS_HE);
         return HePpdu::GetSigBFieldSize(
             txVector.GetChannelWidth(),
+            txVector.GetModulationClass(),
             txVector.GetRuAllocation(
                 m_wifiPhy ? m_wifiPhy->GetOperatingChannel().GetPrimaryChannelIndex(MHz_u{20}) : 0),
+            txVector.GetCenter26ToneRuIndication(),
             txVector.IsSigBCompression(),
             txVector.IsSigBCompression() ? txVector.GetHeMuUserInfoMap().size() : 0);
     }
@@ -872,7 +874,7 @@
     NS_LOG_FUNCTION(this << *psdu << txVector << snr);
     if (!txVector.IsUlMu())
     {
-        m_state->SwitchFromRxEndError();
+        m_state->SwitchFromRxEndError(txVector);
     }
 }
 
@@ -905,7 +907,7 @@
             }
             else
             {
-                m_state->SwitchFromRxEndError();
+                m_state->SwitchFromRxEndError(ppdu->GetTxVector());
             }
             NotifyInterferenceRxEndAndClear(true); // reset WifiPhy
             m_rxHeTbPpdus = 0;
@@ -966,7 +968,7 @@
 {
     if (txVector.IsMu())
     {
-        return {HeRu::GetBandwidth(txVector.GetRu(staId).GetRuType()),
+        return {WifiRu::GetBandwidth(WifiRu::GetRuType(txVector.GetRu(staId))),
                 GetRuBandForRx(txVector, staId)};
     }
     else
@@ -979,23 +981,27 @@
 HePhy::GetRuBandForTx(const WifiTxVector& txVector, uint16_t staId) const
 {
     NS_ASSERT(txVector.IsMu());
-    HeRu::RuSpec ru = txVector.GetRu(staId);
+    auto ru = txVector.GetRu(staId);
     const auto channelWidth = txVector.GetChannelWidth();
     NS_ASSERT(channelWidth <= m_wifiPhy->GetChannelWidth());
-    HeRu::SubcarrierGroup group = HeRu::GetSubcarrierGroup(
+    const auto mc = txVector.GetModulationClass();
+    const auto group = WifiRu::GetSubcarrierGroup(
         channelWidth,
-        ru.GetRuType(),
-        ru.GetPhyIndex(channelWidth,
-                       m_wifiPhy->GetOperatingChannel().GetPrimaryChannelIndex(MHz_u{20})));
+        WifiRu::GetRuType(ru),
+        WifiRu::GetPhyIndex(ru,
+                            channelWidth,
+                            m_wifiPhy->GetOperatingChannel().GetPrimaryChannelIndex(MHz_u{20})),
+        mc);
     // for a TX spectrum, the guard bandwidth is a function of the transmission channel width
     // and the spectrum width equals the transmission channel width (hence bandIndex equals 0)
-    const auto indices = ConvertHeRuSubcarriers(channelWidth,
-                                                GetGuardBandwidth(channelWidth),
-                                                m_wifiPhy->GetOperatingChannel().GetFrequencies(),
-                                                m_wifiPhy->GetChannelWidth(),
-                                                m_wifiPhy->GetSubcarrierSpacing(),
-                                                {group.front().first, group.back().second},
-                                                0);
+    const auto indices = ConvertRuSubcarriers({channelWidth,
+                                               GetGuardBandwidth(channelWidth),
+                                               m_wifiPhy->GetOperatingChannel().GetFrequencies(),
+                                               m_wifiPhy->GetChannelWidth(),
+                                               m_wifiPhy->GetSubcarrierSpacing(),
+                                               mc,
+                                               {group.front().first, group.back().second},
+                                               0});
     WifiSpectrumBandInfo ruBandForTx{};
     for (const auto& indicesPerSegment : indices)
     {
@@ -1010,24 +1016,28 @@
 HePhy::GetRuBandForRx(const WifiTxVector& txVector, uint16_t staId) const
 {
     NS_ASSERT(txVector.IsMu());
-    HeRu::RuSpec ru = txVector.GetRu(staId);
+    auto ru = txVector.GetRu(staId);
     const auto channelWidth = txVector.GetChannelWidth();
     NS_ASSERT(channelWidth <= m_wifiPhy->GetChannelWidth());
-    HeRu::SubcarrierGroup group = HeRu::GetSubcarrierGroup(
+    const auto mc = txVector.GetModulationClass();
+    const auto group = WifiRu::GetSubcarrierGroup(
         channelWidth,
-        ru.GetRuType(),
-        ru.GetPhyIndex(channelWidth,
-                       m_wifiPhy->GetOperatingChannel().GetPrimaryChannelIndex(MHz_u{20})));
+        WifiRu::GetRuType(ru),
+        WifiRu::GetPhyIndex(ru,
+                            channelWidth,
+                            m_wifiPhy->GetOperatingChannel().GetPrimaryChannelIndex(MHz_u{20})),
+        mc);
     // for an RX spectrum, the guard bandwidth is a function of the operating channel width
     // and the spectrum width equals the operating channel width
-    const auto indices = ConvertHeRuSubcarriers(
-        channelWidth,
-        GetGuardBandwidth(m_wifiPhy->GetChannelWidth()),
-        m_wifiPhy->GetOperatingChannel().GetFrequencies(),
-        m_wifiPhy->GetChannelWidth(),
-        m_wifiPhy->GetSubcarrierSpacing(),
-        {group.front().first, group.back().second},
-        m_wifiPhy->GetOperatingChannel().GetPrimaryChannelIndex(channelWidth));
+    const auto indices = ConvertRuSubcarriers(
+        {channelWidth,
+         GetGuardBandwidth(m_wifiPhy->GetChannelWidth()),
+         m_wifiPhy->GetOperatingChannel().GetFrequencies(),
+         m_wifiPhy->GetChannelWidth(),
+         m_wifiPhy->GetSubcarrierSpacing(),
+         mc,
+         {group.front().first, group.back().second},
+         m_wifiPhy->GetOperatingChannel().GetPrimaryChannelIndex(channelWidth)});
     WifiSpectrumBandInfo ruBandForRx{};
     for (const auto& indicesPerSegment : indices)
     {
@@ -1038,53 +1048,17 @@
     return ruBandForRx;
 }
 
-WifiSpectrumBandInfo
-HePhy::GetNonOfdmaBand(const WifiTxVector& txVector, uint16_t staId) const
-{
-    NS_ASSERT(txVector.IsUlMu() && (txVector.GetModulationClass() >= WIFI_MOD_CLASS_HE));
-    const auto channelWidth = txVector.GetChannelWidth();
-    NS_ASSERT(channelWidth <= m_wifiPhy->GetChannelWidth());
-
-    HeRu::RuSpec ru = txVector.GetRu(staId);
-    const auto nonOfdmaWidth = GetNonOfdmaWidth(ru);
-
-    // Find the RU that encompasses the non-OFDMA part of the HE TB PPDU for the STA-ID
-    HeRu::RuSpec nonOfdmaRu =
-        HeRu::FindOverlappingRu(channelWidth, ru, HeRu::GetRuType(nonOfdmaWidth));
-
-    HeRu::SubcarrierGroup groupPreamble = HeRu::GetSubcarrierGroup(
-        channelWidth,
-        nonOfdmaRu.GetRuType(),
-        nonOfdmaRu.GetPhyIndex(channelWidth,
-                               m_wifiPhy->GetOperatingChannel().GetPrimaryChannelIndex(MHz_u{20})));
-    const auto indices = ConvertHeRuSubcarriers(
-        channelWidth,
-        GetGuardBandwidth(m_wifiPhy->GetChannelWidth()),
-        m_wifiPhy->GetOperatingChannel().GetFrequencies(),
-        m_wifiPhy->GetChannelWidth(),
-        m_wifiPhy->GetSubcarrierSpacing(),
-        {groupPreamble.front().first, groupPreamble.back().second},
-        m_wifiPhy->GetOperatingChannel().GetPrimaryChannelIndex(channelWidth));
-    WifiSpectrumBandInfo nonOfdmaBand{};
-    for (const auto& indicesPerSegment : indices)
-    {
-        nonOfdmaBand.indices.emplace_back(indicesPerSegment);
-        nonOfdmaBand.frequencies.emplace_back(
-            m_wifiPhy->ConvertIndicesToFrequencies(indicesPerSegment));
-    }
-    return nonOfdmaBand;
-}
-
 MHz_u
-HePhy::GetNonOfdmaWidth(HeRu::RuSpec ru) const
+HePhy::GetNonOfdmaWidth(WifiRu::RuSpec ru) const
 {
-    if (ru.GetRuType() == HeRu::RU_26_TONE && ru.GetIndex() == 19)
+    const auto ruType = WifiRu::GetRuType(ru);
+    if (ruType == RuType::RU_26_TONE && WifiRu::GetIndex(ru) == 19)
     {
         // the center 26-tone RU in an 80 MHz channel is not fully covered by
         // any 20 MHz channel, but only by an 80 MHz channel
         return MHz_u{80};
     }
-    return std::max(HeRu::GetBandwidth(ru.GetRuType()), MHz_u{20});
+    return std::max(WifiRu::GetBandwidth(ruType), MHz_u{20});
 }
 
 uint64_t
@@ -1217,7 +1191,7 @@
          * aCCATime after the signal starts and shall continue to indicate the 20 MHz subchannel is
          * busy while the threshold continues to be exceeded.
          */
-        dBm_u ccaThreshold = -62;
+        auto ccaThreshold = m_wifiPhy->GetCcaEdThreshold();
         auto delayUntilCcaEnd = GetDelayUntilCcaEnd(ccaThreshold, band);
 
         if (ppdu)
@@ -1374,7 +1348,7 @@
         {
             // non-HE portion is sent only on the 20 MHz channels covering the RU
             const auto staId = GetStaId(ppdu);
-            const auto ruWidth = HeRu::GetBandwidth(txVector.GetRu(staId).GetRuType());
+            const auto ruWidth = WifiRu::GetBandwidth(WifiRu::GetRuType(txVector.GetRu(staId)));
             channelWidth = (ruWidth < MHz_u{20}) ? MHz_u{20} : ruWidth;
             return WifiSpectrumValueHelper::CreateDuplicated20MhzTxPowerSpectralDensity(
                 GetCenterFrequenciesForNonHePart(ppdu, staId),
@@ -1447,19 +1421,20 @@
     auto centerFrequencies = ppdu->GetTxCenterFreqs();
     const auto currentWidth = txVector.GetChannelWidth();
 
-    HeRu::RuSpec ru = txVector.GetRu(staId);
+    auto ru = txVector.GetRu(staId);
     const auto nonOfdmaWidth = GetNonOfdmaWidth(ru);
     if (nonOfdmaWidth != currentWidth)
     {
         // Obtain the index of the non-OFDMA portion
-        HeRu::RuSpec nonOfdmaRu =
-            HeRu::FindOverlappingRu(currentWidth, ru, HeRu::GetRuType(nonOfdmaWidth));
+        const auto nonOfdmaRu =
+            WifiRu::FindOverlappingRu(currentWidth, ru, WifiRu::GetRuType(nonOfdmaWidth));
 
         const MHz_u startingFrequency = centerFrequencies.front() - (currentWidth / 2);
         centerFrequencies.front() =
             startingFrequency +
             nonOfdmaWidth *
-                (nonOfdmaRu.GetPhyIndex(
+                (WifiRu::GetPhyIndex(
+                     nonOfdmaRu,
                      currentWidth,
                      m_wifiPhy->GetOperatingChannel().GetPrimaryChannelIndex(MHz_u{20})) -
                  1) +
@@ -1682,7 +1657,7 @@
     auto bw = txVector.GetChannelWidth();
     if (txVector.IsMu())
     {
-        bw = HeRu::GetBandwidth(txVector.GetRu(staId).GetRuType());
+        bw = WifiRu::GetBandwidth(WifiRu::GetRuType(txVector.GetRu(staId)));
     }
     return HePhy::GetPhyRate(txVector.GetMode(staId).GetMcsValue(),
                              bw,
@@ -1696,7 +1671,7 @@
     auto bw = txVector.GetChannelWidth();
     if (txVector.IsMu())
     {
-        bw = HeRu::GetBandwidth(txVector.GetRu(staId).GetRuType());
+        bw = WifiRu::GetBandwidth(WifiRu::GetRuType(txVector.GetRu(staId)));
     }
     return HePhy::GetDataRate(txVector.GetMode(staId).GetMcsValue(),
                               bw,
@@ -1729,7 +1704,6 @@
     case 8: // 106-tone RU
         return 102;
     case 20:
-    default:
         return 234;
     case 40:
         return 468;
@@ -1737,6 +1711,9 @@
         return 980;
     case 160:
         return 1960;
+    default:
+        NS_ASSERT_MSG(false, "Invalid channel width: " << channelWidth);
+        return 234;
     }
 }
 
@@ -1849,70 +1826,51 @@
 }
 
 std::vector<WifiSpectrumBandIndices>
-HePhy::ConvertHeRuSubcarriers(MHz_u bandWidth,
-                              MHz_u guardBandwidth,
-                              const std::vector<MHz_u>& centerFrequencies,
-                              MHz_u totalWidth,
-                              Hz_u subcarrierSpacing,
-                              HeRu::SubcarrierRange subcarrierRange,
-                              uint8_t bandIndex)
-{
-    NS_ASSERT_MSG(bandWidth <= totalWidth,
-                  "Bandwidth (" << bandWidth << ") cannot exceed total operating channel width ("
-                                << totalWidth << ")");
+HePhy::ConvertRuSubcarriers(const RuSubcarriersInfo& info)
+{
+    NS_ASSERT_MSG(info.bandWidth <= info.totalWidth,
+                  "Bandwidth (" << info.bandWidth
+                                << ") cannot exceed total operating channel width ("
+                                << info.totalWidth << ")");
     std::vector<WifiSpectrumBandIndices> convertedSubcarriers{};
-    guardBandwidth /= centerFrequencies.size();
+    const auto guardBandwidth{info.guardBandwidth / info.centerFrequencies.size()};
     const auto nGuardBands =
-        static_cast<uint32_t>(((2 * MHzToHz(guardBandwidth)) / subcarrierSpacing) + 0.5);
-    if (bandWidth > (totalWidth / centerFrequencies.size()))
-    {
-        NS_ASSERT(bandIndex == 0);
-        bandWidth /= centerFrequencies.size();
-    }
-    uint32_t centerFrequencyIndex = 0;
-    switch (static_cast<uint16_t>(bandWidth))
-    {
-    case 20:
-        centerFrequencyIndex = (nGuardBands / 2) + 6 + 122;
-        break;
-    case 40:
-        centerFrequencyIndex = (nGuardBands / 2) + 12 + 244;
-        break;
-    case 80:
-        centerFrequencyIndex = (nGuardBands / 2) + 12 + 500;
-        break;
-    case 160:
-        centerFrequencyIndex = (nGuardBands / 2) + 12 + 1012;
-        break;
-    default:
-        NS_FATAL_ERROR("ChannelWidth " << bandWidth << " unsupported");
-        break;
-    }
-
-    const auto numBandsInBand = static_cast<size_t>(MHzToHz(bandWidth) / subcarrierSpacing);
-    centerFrequencyIndex += numBandsInBand * bandIndex;
+        static_cast<uint32_t>(((2 * MHzToHz(guardBandwidth)) / info.subcarrierSpacing) + 0.5);
+    auto bw{info.bandWidth};
+    if (bw > (info.totalWidth / info.centerFrequencies.size()))
+    {
+        NS_ASSERT(info.bandIndex == 0);
+        bw /= info.centerFrequencies.size();
+    }
+    // Figures 27-5 to 27-7 of IEEE 802.11ax-2021: the number of guard subcarriers is 6 for 20 MHz
+    // MHz HE PPDUs and 12 for 40/80/160 MHz HE PPDUs
+    const uint32_t guardSubcarriers = (bw < MHz_u{40}) ? 6 : 12;
+    const auto refRu = WifiRu::GetRuType(bw);
+    const auto offset = WifiRu::GetSubcarrierGroup(bw, refRu, 1, info.mc).back().second;
+    uint32_t centerFrequencyIndex = (nGuardBands / 2) + guardSubcarriers + offset;
+    const auto numBandsInBand = static_cast<size_t>(MHzToHz(bw) / info.subcarrierSpacing);
+    centerFrequencyIndex += numBandsInBand * info.bandIndex;
     // start and stop subcarriers might be in different frequency segments, hence define a low and a
     // high center frequency
     auto centerFrequencyIndexLow = centerFrequencyIndex;
     auto centerFrequencyIndexHigh = centerFrequencyIndex;
-    if (centerFrequencies.size() > 1)
+    if (info.centerFrequencies.size() > 1)
     {
         const auto numBandsBetweenSegments =
-            SpectrumWifiPhy::GetNumBandsBetweenSegments(centerFrequencies,
-                                                        totalWidth,
-                                                        subcarrierSpacing);
-        if (subcarrierRange.first > 0)
+            SpectrumWifiPhy::GetNumBandsBetweenSegments(info.centerFrequencies,
+                                                        info.totalWidth,
+                                                        info.subcarrierSpacing);
+        if (info.subcarrierRange.first > 0)
         {
             centerFrequencyIndexLow += numBandsBetweenSegments;
         }
-        if (subcarrierRange.second > 0)
+        if (info.subcarrierRange.second > 0)
         {
             centerFrequencyIndexHigh += numBandsBetweenSegments;
         }
     }
-    convertedSubcarriers.emplace_back(centerFrequencyIndexLow + subcarrierRange.first,
-                                      centerFrequencyIndexHigh + subcarrierRange.second);
-    ++bandIndex;
+    convertedSubcarriers.emplace_back(centerFrequencyIndexLow + info.subcarrierRange.first,
+                                      centerFrequencyIndexHigh + info.subcarrierRange.second);
     return convertedSubcarriers;
 }
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/he/he-phy.h ns-3.45/src/wifi/model/he/he-phy.h
--- ns-3.44/src/wifi/model/he/he-phy.h	2025-03-09 16:55:49.791372500 -0700
+++ ns-3.45/src/wifi/model/he/he-phy.h	2025-06-01 20:34:45.617702200 -0700
@@ -174,21 +174,12 @@
      */
     WifiSpectrumBandInfo GetRuBandForRx(const WifiTxVector& txVector, uint16_t staId) const;
     /**
-     * Get the band used to transmit the non-OFDMA part of an HE TB PPDU.
-     *
-     * @param txVector the TXVECTOR used for the transmission
-     * @param staId the STA-ID of the station taking part of the UL MU
-     *
-     * @return the spectrum band used to transmit the non-OFDMA part of an HE TB PPDU
-     */
-    WifiSpectrumBandInfo GetNonOfdmaBand(const WifiTxVector& txVector, uint16_t staId) const;
-    /**
      * Get the width of the non-OFDMA portion of an HE TB PPDU
      *
      * @param ru the RU in which the HE TB PPDU is sent
      * @return the width of the non-OFDMA portion of an HE TB PPDU
      */
-    MHz_u GetNonOfdmaWidth(HeRu::RuSpec ru) const;
+    MHz_u GetNonOfdmaWidth(WifiRu::RuSpec ru) const;
 
     /**
      * @return the UID of the HE TB PPDU being received
@@ -436,29 +427,30 @@
      */
     static Time GetSymbolDuration(Time guardInterval);
 
-    /**
-     * @param bandWidth the width of the band used for the OFDMA transmission. Must be a multiple of
-     * 20 MHz
-     * @param guardBandwidth width of the guard band
-     * @param centerFrequencies the center frequency of each segment
-     * @param totalWidth the width of the operating channel
-     * @param subcarrierSpacing the subcarrier spacing
-     * @param subcarrierRange the subcarrier range of the HE RU
-     * @param bandIndex the index (starting at 0) of the band within the operating channel
-     * @return the converted subcarriers
-     *
-     * This is a helper function to convert HE RU subcarriers, which are relative to the center
-     * frequency subcarrier, to the indexes used by the Spectrum model. The size of the returned
-     * vector corresponds to the number of segments covered by the HE RU.
-     */
-    static std::vector<WifiSpectrumBandIndices> ConvertHeRuSubcarriers(
-        MHz_u bandWidth,
-        MHz_u guardBandwidth,
-        const std::vector<MHz_u>& centerFrequencies,
-        MHz_u totalWidth,
-        Hz_u subcarrierSpacing,
-        HeRu::SubcarrierRange subcarrierRange,
-        uint8_t bandIndex = 0);
+    /// structure containing the information about the RU subcarriers to be able to converted to the
+    /// indices used by the Spectrum model
+    struct RuSubcarriersInfo
+    {
+        MHz_u bandWidth; ///< width of the band used for the OFDMA transmission. Must be a multiple
+                         ///< of 20 MHz
+        MHz_u guardBandwidth;                        ///< width of the guard band
+        const std::vector<MHz_u>& centerFrequencies; ///< center frequency of each segment
+        MHz_u totalWidth;                            ///< width of the operating channel
+        Hz_u subcarrierSpacing;                      ///< subcarrier spacing
+        WifiModulationClass mc;                      ///< modulation class used for the transmission
+        SubcarrierRange subcarrierRange;             ///< subcarrier range of the RU
+        uint8_t bandIndex{0}; ///< index (starting at 0) of the band within the operating channel
+    };
+
+    /**
+     * This is a helper function to convert RU subcarriers, which are relative to the center
+     * frequency subcarrier, to the indices used by the Spectrum model. The size of the returned
+     * vector corresponds to the number of segments covered by the RU.
+     *
+     * @param info the information about the RU subcarrier to convert
+     * @return the indices used by the Spectrum model for the provided RU subcarrier
+     */
+    static std::vector<WifiSpectrumBandIndices> ConvertRuSubcarriers(const RuSubcarriersInfo& info);
 
   protected:
     PhyFieldRxStatus ProcessSig(Ptr<Event> event,
@@ -549,6 +541,18 @@
      */
     static uint16_t GetUsableSubcarriers(MHz_u channelWidth);
 
+    /**
+     * Compute the per-20 MHz CCA durations vector that indicates
+     * for how long each 20 MHz subchannel (corresponding to the
+     * index of the element in the vector) is busy and where a zero duration
+     * indicates that the subchannel is idle. The vector is non-empty if the
+     * operational channel width is larger than 20 MHz.
+     *
+     * @param ppdu the incoming PPDU or nullptr for any signal
+     * @return the per-20 MHz CCA durations vector
+     */
+    virtual std::vector<Time> GetPer20MHzDurations(const Ptr<const WifiPpdu> ppdu);
+
     uint64_t m_previouslyTxPpduUid; //!< UID of the previously sent PPDU, used by AP to recognize
                                     //!< response HE TB PPDUs
     uint64_t m_currentMuPpduUid;    //!< UID of the HE MU or HE TB PPDU being received
@@ -605,18 +609,6 @@
                        const std::vector<Time>& per20MHzDurations);
 
     /**
-     * Compute the per-20 MHz CCA durations vector that indicates
-     * for how long each 20 MHz subchannel (corresponding to the
-     * index of the element in the vector) is busy and where a zero duration
-     * indicates that the subchannel is idle. The vector is non-empty if the
-     * operational channel width is larger than 20 MHz.
-     *
-     * @param ppdu the incoming PPDU or nullptr for any signal
-     * @return the per-20 MHz CCA durations vector
-     */
-    std::vector<Time> GetPer20MHzDurations(const Ptr<const WifiPpdu> ppdu);
-
-    /**
      * Given a PPDU duration value, the TXVECTOR used to transmit the PPDU and
      * the PHY band, compute a valid PPDU duration considering the number and
      * duration of symbols, the preamble duration and the guard interval.
@@ -635,7 +627,7 @@
     std::size_t m_rxHeTbPpdus;                 //!< Number of successfully received HE TB PPDUS
     Ptr<ObssPdAlgorithm> m_obssPdAlgorithm;    //!< OBSS-PD algorithm
     std::vector<Time> m_lastPer20MHzDurations; //!< Hold the last per-20 MHz CCA durations vector
-};                                             // class HePhy
+};
 
 } // namespace ns3
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/he/he-ppdu.cc ns-3.45/src/wifi/model/he/he-ppdu.cc
--- ns-3.44/src/wifi/model/he/he-ppdu.cc	2025-03-09 16:55:49.791372500 -0700
+++ ns-3.45/src/wifi/model/he/he-ppdu.cc	2025-06-01 20:34:45.617702200 -0700
@@ -19,6 +19,7 @@
 #include "ns3/wifi-utils.h"
 
 #include <algorithm>
+#include <numeric>
 
 namespace ns3
 {
@@ -45,7 +46,8 @@
                const WifiPhyOperatingChannel& channel,
                Time ppduDuration,
                uint64_t uid,
-               TxPsdFlag flag)
+               TxPsdFlag flag,
+               bool instantiateHeaders /* = true */)
     : OfdmPpdu(psdus.begin()->second,
                txVector,
                channel,
@@ -53,20 +55,25 @@
                false), // don't instantiate LSigHeader of OfdmPpdu
       m_txPsdFlag(flag)
 {
-    NS_LOG_FUNCTION(this << psdus << txVector << channel << ppduDuration << uid << flag);
+    NS_LOG_FUNCTION(this << psdus << txVector << channel << ppduDuration << uid << flag
+                         << instantiateHeaders);
 
     // overwrite with map (since only first element used by OfdmPpdu)
     m_psdus.begin()->second = nullptr;
     m_psdus.clear();
     m_psdus = psdus;
-    SetPhyHeaders(txVector, ppduDuration);
+    if (instantiateHeaders)
+    {
+        SetPhyHeaders(txVector, ppduDuration);
+    }
 }
 
 HePpdu::HePpdu(Ptr<const WifiPsdu> psdu,
                const WifiTxVector& txVector,
                const WifiPhyOperatingChannel& channel,
                Time ppduDuration,
-               uint64_t uid)
+               uint64_t uid,
+               bool instantiateHeaders /* = true */)
     : OfdmPpdu(psdu,
                txVector,
                channel,
@@ -74,9 +81,13 @@
                false), // don't instantiate LSigHeader of OfdmPpdu
       m_txPsdFlag(PSD_NON_HE_PORTION)
 {
-    NS_LOG_FUNCTION(this << psdu << txVector << channel << ppduDuration << uid);
+    NS_LOG_FUNCTION(this << psdu << txVector << channel << ppduDuration << uid
+                         << instantiateHeaders);
     NS_ASSERT(!IsMu());
-    SetPhyHeaders(txVector, ppduDuration);
+    if (instantiateHeaders)
+    {
+        SetPhyHeaders(txVector, ppduDuration);
+    }
 }
 
 void
@@ -191,7 +202,9 @@
         txVector.SetGuardInterval(GetGuardIntervalFromEncoding(heSigHeader->m_giLtfSize));
         txVector.SetBssColor(heSigHeader->m_bssColor);
         SetHeMuUserInfos(txVector,
+                         WIFI_MOD_CLASS_HE,
                          heSigHeader->m_ruAllocation,
+                         heSigHeader->m_center26ToneRuIndication,
                          heSigHeader->m_contentChannels,
                          heSigHeader->m_sigBCompression,
                          GetMuMimoUsersFromEncoding(heSigHeader->m_muMimoUsers));
@@ -210,33 +223,99 @@
     }
 }
 
+WifiRu::RuSpec
+HePpdu::GetRuSpec(std::size_t ruAllocIndex, MHz_u bw, RuType ruType, std::size_t phyIndex) const
+{
+    auto isPrimary80{true};
+    auto index{phyIndex};
+    if (bw > MHz_u{80})
+    {
+        const auto isLow80 = ruAllocIndex < 4;
+        const auto p20Index = m_operatingChannel.GetPrimaryChannelIndex(MHz_u{20});
+        const auto primary80IsLower80 = (p20Index < bw / MHz_u{40});
+        if (!isLow80)
+        {
+            const auto numRusP80 = HeRu::GetRusOfType(MHz_u{80}, ruType).size();
+            index -= (ruType == RuType::RU_26_TONE) ? (numRusP80 - 1) : numRusP80;
+        }
+        isPrimary80 = ((primary80IsLower80 && isLow80) || (!primary80IsLower80 && !isLow80));
+    }
+    if ((ruType == RuType::RU_26_TONE) && (ruAllocIndex >= 2) && (index >= 19))
+    {
+        index++;
+    }
+    return HeRu::RuSpec{ruType, index, isPrimary80};
+}
+
 void
 HePpdu::SetHeMuUserInfos(WifiTxVector& txVector,
+                         WifiModulationClass mc,
                          const RuAllocation& ruAllocation,
+                         std::optional<Center26ToneRuIndication> center26ToneRuIndication,
                          const HeSigBContentChannels& contentChannels,
                          bool sigBcompression,
                          uint8_t numMuMimoUsers) const
 {
+    NS_ASSERT(ruAllocation.size() == Count20MHzSubchannels(txVector.GetChannelWidth()));
+    std::vector<uint8_t> remainingRuAllocIndices(ruAllocation.size());
+    std::iota(remainingRuAllocIndices.begin(), remainingRuAllocIndices.end(), 0);
     std::size_t contentChannelIndex = 0;
+    std::size_t ruAllocIndex = 0;
     for (const auto& contentChannel : contentChannels)
     {
         std::size_t numRusLeft = 0;
         std::size_t numUsersLeft = 0;
-        std::size_t ruAllocIndex = contentChannelIndex;
+        ruAllocIndex = remainingRuAllocIndices.front();
+        std::size_t numUsersLeftInCc = contentChannel.size();
+        if (contentChannel.empty())
+        {
+            const auto pos = std::find(remainingRuAllocIndices.cbegin(),
+                                       remainingRuAllocIndices.cend(),
+                                       ruAllocIndex);
+            remainingRuAllocIndices.erase(pos);
+            ++contentChannelIndex;
+            continue;
+        }
         for (const auto& userInfo : contentChannel)
         {
-            if (userInfo.staId == NO_USER_STA_ID)
+            if (center26ToneRuIndication && (numUsersLeftInCc == 1))
             {
-                continue;
+                // handle central 26 tones
+                if ((contentChannelIndex == 0) &&
+                    ((*center26ToneRuIndication ==
+                      Center26ToneRuIndication::CENTER_26_TONE_RU_LOW_80_MHZ_ALLOCATED) ||
+                     (*center26ToneRuIndication ==
+                      Center26ToneRuIndication::CENTER_26_TONE_RU_LOW_AND_HIGH_80_MHZ_ALLOCATED)))
+                {
+                    txVector.SetHeMuUserInfo(
+                        userInfo.staId,
+                        {HeRu::RuSpec{RuType::RU_26_TONE, 19, true}, userInfo.mcs, userInfo.nss});
+                    continue;
+                }
+                else if ((contentChannelIndex == 1) &&
+                         ((*center26ToneRuIndication ==
+                           Center26ToneRuIndication::CENTER_26_TONE_RU_HIGH_80_MHZ_ALLOCATED) ||
+                          (*center26ToneRuIndication ==
+                           Center26ToneRuIndication::
+                               CENTER_26_TONE_RU_LOW_AND_HIGH_80_MHZ_ALLOCATED)))
+                {
+                    txVector.SetHeMuUserInfo(
+                        userInfo.staId,
+                        {HeRu::RuSpec{RuType::RU_26_TONE, 19, false}, userInfo.mcs, userInfo.nss});
+                    continue;
+                }
             }
-            if (ruAllocIndex >= ruAllocation.size())
-            {
-                break;
-            }
-            auto ruSpecs = HeRu::GetRuSpecs(ruAllocation.at(ruAllocIndex));
-            if (ruSpecs.empty())
-            {
-                continue;
+            NS_ASSERT(ruAllocIndex < ruAllocation.size());
+            auto ruSpecs = WifiRu::GetRuSpecs(ruAllocation.at(ruAllocIndex), mc);
+            while (ruSpecs.empty() && (ruAllocIndex < ruAllocation.size()))
+            {
+                const auto pos = std::find(remainingRuAllocIndices.cbegin(),
+                                           remainingRuAllocIndices.cend(),
+                                           ruAllocIndex);
+                remainingRuAllocIndices.erase(pos);
+                ruAllocIndex += 2;
+                NS_ASSERT(ruAllocIndex < ruAllocation.size());
+                ruSpecs = WifiRu::GetRuSpecs(ruAllocation.at(ruAllocIndex), mc);
             }
             if (numRusLeft == 0)
             {
@@ -255,44 +334,41 @@
                 }
             }
             auto ruIndex = (ruSpecs.size() - numRusLeft);
-            auto ruSpec = ruSpecs.at(ruIndex);
-            auto ruType = ruSpec.GetRuType();
-            if ((ruAllocation.size() == 8) && (ruType == HeRu::RU_996_TONE) &&
-                (((txVector.GetChannelWidth() == MHz_u{160}) && sigBcompression) ||
-                 std::all_of(
-                     contentChannel.cbegin(),
-                     contentChannel.cend(),
-                     [&userInfo](const auto& item) { return userInfo.staId == item.staId; })))
-            {
-                ruType = HeRu::RU_2x996_TONE;
-            }
-            const auto ruBw = HeRu::GetBandwidth(ruType);
-            auto primary80 = ruAllocIndex < 4;
-            const uint8_t num20MhzSubchannelsInRu =
-                (ruBw < MHz_u{20}) ? 1 : Count20MHzSubchannels(ruBw);
-            auto numRuAllocsInContentChannel = std::max(1, num20MhzSubchannelsInRu / 2);
-            auto ruIndexOffset = (ruBw < MHz_u{20}) ? (ruSpecs.size() * ruAllocIndex)
-                                                    : (ruAllocIndex / num20MhzSubchannelsInRu);
-            if (!primary80)
+            const auto ruSpec = ruSpecs.at(ruIndex);
+            auto ruType = WifiRu::GetRuType(ruSpec);
+            if (sigBcompression)
             {
-                ruIndexOffset -= HeRu::GetRusOfType(MHz_u{80}, ruType).size();
+                ruType = WifiRu::GetRuType(ruAllocation.size() * MHz_u{20});
             }
-            if (!txVector.IsAllocated(userInfo.staId))
-            {
-                txVector.SetHeMuUserInfo(userInfo.staId,
-                                         {{ruType, ruSpec.GetIndex() + ruIndexOffset, primary80},
-                                          userInfo.mcs,
-                                          userInfo.nss});
-            }
-            if ((ruType == HeRu::RU_2x996_TONE) && !sigBcompression)
+            const auto ruBw = WifiRu::GetBandwidth(ruType);
+            const auto num20MhzSubchannelsInRu =
+                (ruBw < MHz_u{20}) ? 1 : Count20MHzSubchannels(ruBw);
+            if (userInfo.staId != NO_USER_STA_ID)
             {
-                return;
+                const std::size_t numRus =
+                    (ruBw > MHz_u{20}) ? 1 : HeRu::GetNRus(MHz_u{20}, ruType);
+                const std::size_t ruIndexOffset = (ruBw < MHz_u{20})
+                                                      ? (numRus * ruAllocIndex)
+                                                      : (ruAllocIndex / num20MhzSubchannelsInRu);
+                std::size_t phyIndex = WifiRu::GetIndex(ruSpecs.at(ruIndex)) + ruIndexOffset;
+                const auto ru{
+                    GetRuSpec(ruAllocIndex, txVector.GetChannelWidth(), ruType, phyIndex)};
+                txVector.SetHeMuUserInfo(userInfo.staId, {ru, userInfo.mcs, userInfo.nss});
             }
             numRusLeft--;
             numUsersLeft--;
+            numUsersLeftInCc--;
             if (numRusLeft == 0 && numUsersLeft == 0)
             {
-                ruAllocIndex += (2 * numRuAllocsInContentChannel);
+                const auto pos = std::find(remainingRuAllocIndices.cbegin(),
+                                           remainingRuAllocIndices.cend(),
+                                           ruAllocIndex);
+                remainingRuAllocIndices.erase(pos);
+                ruAllocIndex += num20MhzSubchannelsInRu;
+                if (ruAllocIndex % 2 != contentChannelIndex)
+                {
+                    ++ruAllocIndex;
+                }
             }
         }
         contentChannelIndex++;
@@ -410,11 +486,11 @@
         txVector.IsValid() && txVector.IsUlMu() && GetStaId() != SU_STA_ID)
     {
         TxPsdFlag flag = GetTxPsdFlag();
-        const auto ruWidth = HeRu::GetBandwidth(txVector.GetRu(GetStaId()).GetRuType());
+        const auto ruWidth = WifiRu::GetBandwidth(WifiRu::GetRuType(txVector.GetRu(GetStaId())));
         MHz_u channelWidth =
             (flag == PSD_NON_HE_PORTION && ruWidth < MHz_u{20}) ? MHz_u{20} : ruWidth;
-        NS_LOG_INFO("Use channelWidth=" << channelWidth << " MHz for HE TB from " << GetStaId()
-                                        << " for " << flag);
+        NS_LOG_INFO("Use " << channelWidth << " MHz for TB PPDU from " << GetStaId() << " for "
+                           << flag);
         return channelWidth;
     }
     else
@@ -468,15 +544,18 @@
         // Set dummy user info, PPDU will be dropped later after decoding PHY headers.
         m_txVector->SetHeMuUserInfo(
             staId,
-            {{HeRu::GetRuType(m_txVector->GetChannelWidth()), 1, true}, 0, 1});
+            {HeRu::RuSpec{(WifiRu::GetRuType(m_txVector->GetChannelWidth())), 1, true}, 0, 1});
     }
 }
 
 std::pair<std::size_t, std::size_t>
-HePpdu::GetNumRusPerHeSigBContentChannel(MHz_u channelWidth,
-                                         const RuAllocation& ruAllocation,
-                                         bool sigBCompression,
-                                         uint8_t numMuMimoUsers)
+HePpdu::GetNumRusPerHeSigBContentChannel(
+    MHz_u channelWidth,
+    WifiModulationClass mc,
+    const RuAllocation& ruAllocation,
+    std::optional<Center26ToneRuIndication> center26ToneRuIndication,
+    bool sigBCompression,
+    uint8_t numMuMimoUsers)
 {
     std::pair<std::size_t /* number of RUs in content channel 1 */,
               std::size_t /* number of RUs in content channel 2 */>
@@ -507,36 +586,76 @@
     switch (static_cast<uint16_t>(channelWidth))
     {
     case 40:
-        chSize.second += HeRu::GetRuSpecs(ruAllocation[1]).size();
+        chSize.second += WifiRu::GetRuSpecs(ruAllocation[1], mc).size();
         [[fallthrough]];
     case 20:
-        chSize.first += HeRu::GetRuSpecs(ruAllocation[0]).size();
+        chSize.first += WifiRu::GetRuSpecs(ruAllocation[0], mc).size();
         break;
     default:
         for (std::size_t n = 0; n < Count20MHzSubchannels(channelWidth);)
         {
-            chSize.first += HeRu::GetRuSpecs(ruAllocation[n]).size();
-            if (ruAllocation[n] >= 208)
+            std::size_t ccIndex;
+            const auto ruAlloc = ruAllocation.at(n);
+            std::size_t num20MHz{1};
+            const auto ruSpecs = WifiRu::GetRuSpecs(ruAlloc, mc);
+            const auto nRuSpecs = ruSpecs.size();
+            if (nRuSpecs == 1)
             {
-                // 996 tone RU occupies 80 MHz
-                n += 4;
-                continue;
+                const auto ruBw = WifiRu::GetBandwidth(WifiRu::GetRuType(ruSpecs.front()));
+                num20MHz = Count20MHzSubchannels(ruBw);
             }
-            n += 2;
-        }
-        for (std::size_t n = 0; n < Count20MHzSubchannels(channelWidth);)
-        {
-            chSize.second += HeRu::GetRuSpecs(ruAllocation[n + 1]).size();
-            if (ruAllocation[n + 1] >= 208)
+            if (nRuSpecs == 0)
             {
-                // 996 tone RU occupies 80 MHz
-                n += 4;
+                ++n;
                 continue;
             }
-            n += 2;
+            if (num20MHz > 1)
+            {
+                ccIndex = (chSize.first <= chSize.second) ? 0 : 1;
+            }
+            else
+            {
+                ccIndex = (n % 2 == 0) ? 0 : 1;
+            }
+            if (ccIndex == 0)
+            {
+                chSize.first += nRuSpecs;
+            }
+            else
+            {
+                chSize.second += nRuSpecs;
+            }
+            if (num20MHz > 1)
+            {
+                const auto skipNumIndices = (ccIndex == 0) ? num20MHz : num20MHz - 1;
+                n += skipNumIndices;
+            }
+            else
+            {
+                ++n;
+            }
         }
         break;
     }
+    if (center26ToneRuIndication)
+    {
+        switch (*center26ToneRuIndication)
+        {
+        case Center26ToneRuIndication::CENTER_26_TONE_RU_LOW_80_MHZ_ALLOCATED:
+            chSize.first++;
+            break;
+        case Center26ToneRuIndication::CENTER_26_TONE_RU_HIGH_80_MHZ_ALLOCATED:
+            chSize.second++;
+            break;
+        case Center26ToneRuIndication::CENTER_26_TONE_RU_LOW_AND_HIGH_80_MHZ_ALLOCATED:
+            chSize.first++;
+            chSize.second++;
+            break;
+        case Center26ToneRuIndication::CENTER_26_TONE_RU_UNALLOCATED:
+        default:
+            break;
+        }
+    }
     return chSize;
 }
 
@@ -551,29 +670,91 @@
         contentChannels.emplace_back();
     }
 
+    std::optional<HeSigBUserSpecificField> cc1Central26ToneRu;
+    std::optional<HeSigBUserSpecificField> cc2Central26ToneRu;
+
     const auto& orderedMap = txVector.GetUserInfoMapOrderedByRus(p20Index);
+    RuType prevRuType{RuType::RU_TYPE_MAX};
+    std::size_t prevRuIndex{0};
+    std::size_t prevCcIndex{0};
     for (const auto& [ru, staIds] : orderedMap)
     {
-        const auto ruType = ru.GetRuType();
-        if ((ruType > HeRu::RU_242_TONE) && !txVector.IsSigBCompression())
+        const auto ruType = WifiRu::GetRuType(ru);
+        auto ruIdx = WifiRu::GetIndex(ru);
+        if ((ruType == RuType::RU_26_TONE) && (ruIdx == 19))
         {
-            for (auto i = 0; i < ((ruType == HeRu::RU_2x996_TONE) ? 2 : 1); ++i)
+            NS_ASSERT(WifiRu::IsHe(ru));
+            const auto staId = *staIds.cbegin();
+            const auto& userInfo = txVector.GetHeMuUserInfo(staId);
+            if (std::get<HeRu::RuSpec>(ru).GetPrimary80MHz())
             {
-                for (auto staId : staIds)
-                {
-                    const auto& userInfo = txVector.GetHeMuUserInfo(staId);
-                    NS_ASSERT(ru == userInfo.ru);
-                    contentChannels[0].push_back({staId, userInfo.nss, userInfo.mcs});
-                    contentChannels[1].push_back({staId, userInfo.nss, userInfo.mcs});
-                }
+                NS_ASSERT(!cc1Central26ToneRu);
+                cc1Central26ToneRu = HeSigBUserSpecificField{staId, userInfo.nss, userInfo.mcs};
+            }
+            else
+            {
+                NS_ASSERT(!cc2Central26ToneRu);
+                cc2Central26ToneRu = HeSigBUserSpecificField{staId, userInfo.nss, userInfo.mcs};
+            }
+            continue;
+        }
+
+        const auto ruIndex = WifiRu::GetPhyIndex(ru, channelWidth, p20Index);
+        if ((prevRuType < RuType::RU_TYPE_MAX) && (prevRuType != ruType))
+        {
+            prevRuIndex *= WifiRu::GetBandwidth(prevRuType) / WifiRu::GetBandwidth(ruType);
+        }
+        if (ruType >= RuType::RU_484_TONE)
+        {
+            for (auto staId : staIds)
+            {
+                // equal split
+                const auto ccIndex =
+                    (contentChannels.at(0).size() <= contentChannels.at(1).size()) ? 0 : 1;
+                const auto& userInfo = txVector.GetHeMuUserInfo(staId);
+                NS_ASSERT(ru == userInfo.ru);
+                contentChannels[ccIndex].push_back({staId, userInfo.nss, userInfo.mcs});
             }
             continue;
         }
 
-        std::size_t numRus = (ruType >= HeRu::RU_242_TONE)
-                                 ? 1
-                                 : HeRu::m_heRuSubcarrierGroups.at({MHz_u{20}, ruType}).size();
-        const auto ruIdx = ru.GetIndex();
+        const auto mc = txVector.GetModulationClass();
+        const auto numRus = WifiRu::GetNRus(MHz_u{20}, ruType, mc);
+        while (prevRuIndex < ruIndex - 1)
+        {
+            std::size_t ccIndex{0};
+            if (channelWidth < MHz_u{40})
+            {
+                // only one content channel
+                ccIndex = 0;
+            }
+            else if (txVector.IsSigBCompression())
+            {
+                // equal split
+                ccIndex = (contentChannels.at(0).size() <= contentChannels.at(1).size()) ? 0 : 1;
+            }
+            else
+            {
+                ccIndex = ((prevRuIndex / numRus) % 2 == 0) ? 0 : 1;
+            }
+            const auto central26TonesRus =
+                WifiRu::GetCentral26TonesRus(channelWidth, prevRuType, mc);
+            const auto isCentral26ToneRu = std::none_of(
+                central26TonesRus.cbegin(),
+                central26TonesRus.cend(),
+                [ruIndex, channelWidth, p20Index](const auto& ruSpec) {
+                    return WifiRu::GetPhyIndex(ruSpec, channelWidth, p20Index) == ruIndex;
+                });
+            if (ruType < RuType::RU_242_TONE && prevCcIndex == ccIndex &&
+                (ruType != RuType::RU_26_TONE || isCentral26ToneRu))
+            {
+                contentChannels[ccIndex].push_back({NO_USER_STA_ID, 0, 0});
+            }
+            ++prevRuIndex;
+            prevCcIndex = ccIndex;
+        }
+        prevRuIndex = ruIndex;
+        prevRuType = ruType;
         for (auto staId : staIds)
         {
             const auto& userInfo = txVector.GetHeMuUserInfo(staId);
@@ -586,24 +767,46 @@
             }
             else if (txVector.IsSigBCompression())
             {
-                // equal split
+                // MU-MIMO: equal split
                 ccIndex = (contentChannels.at(0).size() <= contentChannels.at(1).size()) ? 0 : 1;
             }
-            else // MU-MIMO
+            else
             {
+                if (ruType == RuType::RU_26_TONE && ruIdx > 19)
+                {
+                    // "ignore" the center 26-tone RUs in 80 MHz channels
+                    ruIdx--;
+                    if (ruIdx > 37)
+                    {
+                        NS_ASSERT(!WifiRu::IsHe(ru));
+                        ruIdx -= (ruIdx - 19) / 37;
+                    }
+                }
                 ccIndex = (((ruIdx - 1) / numRus) % 2 == 0) ? 0 : 1;
             }
             contentChannels.at(ccIndex).push_back({staId, userInfo.nss, userInfo.mcs});
+            prevCcIndex = ccIndex;
         }
     }
 
+    if (cc1Central26ToneRu)
+    {
+        contentChannels.at(0).push_back(*cc1Central26ToneRu);
+    }
+    if (cc2Central26ToneRu)
+    {
+        contentChannels.at(1).push_back(*cc2Central26ToneRu);
+    }
+
     const auto isSigBCompression = txVector.IsSigBCompression();
     if (!isSigBCompression)
     {
         // Add unassigned RUs
         auto numNumRusPerHeSigBContentChannel = GetNumRusPerHeSigBContentChannel(
             channelWidth,
+            txVector.GetModulationClass(),
             txVector.GetRuAllocation(p20Index),
+            txVector.GetCenter26ToneRuIndication(),
             isSigBCompression,
             isSigBCompression ? txVector.GetHeMuUserInfoMap().size() : 0);
         std::size_t contentChannelIndex = 1;
@@ -627,7 +830,9 @@
 
 uint32_t
 HePpdu::GetSigBFieldSize(MHz_u channelWidth,
+                         WifiModulationClass mc,
                          const RuAllocation& ruAllocation,
+                         std::optional<Center26ToneRuIndication> center26ToneRuIndication,
                          bool sigBCompression,
                          std::size_t numMuMimoUsers)
 {
@@ -649,7 +854,9 @@
     }
 
     auto numRusPerContentChannel = GetNumRusPerHeSigBContentChannel(channelWidth,
+                                                                    mc,
                                                                     ruAllocation,
+                                                                    center26ToneRuIndication,
                                                                     sigBCompression,
                                                                     numMuMimoUsers);
     auto maxNumRusPerContentChannel =
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/he/he-ppdu.h ns-3.45/src/wifi/model/he/he-ppdu.h
--- ns-3.44/src/wifi/model/he/he-ppdu.h	2025-03-09 16:55:49.791372500 -0700
+++ ns-3.45/src/wifi/model/he/he-ppdu.h	2025-06-01 20:34:45.617702200 -0700
@@ -60,7 +60,7 @@
         uint8_t m_bandwidth{0}; ///< Bandwidth field
         uint8_t m_giLtfSize{0}; ///< GI+LTF Size field
         uint8_t m_nsts{0};      ///< NSTS
-    };                          // struct HeSuSigHeader
+    };
 
     /**
      * HE-SIG PHY header for HE TB PPDUs (HE-SIG-A1/A2)
@@ -70,7 +70,7 @@
         uint8_t m_format{0};    ///< Format bit
         uint8_t m_bssColor{0};  ///< BSS color field
         uint8_t m_bandwidth{0}; ///< Bandwidth field
-    };                          // struct HeTbSigHeader
+    };
 
     /**
      * HE-SIG PHY header for HE MU PPDUs (HE-SIG-A1/A2/B)
@@ -81,7 +81,7 @@
         uint8_t m_bssColor{0};        ///< BSS color field
         uint8_t m_bandwidth{0};       ///< Bandwidth field
         uint8_t m_sigBMcs{0};         ///< HE-SIG-B MCS
-        uint8_t m_muMimoUsers;        ///< MU-MIMO users
+        uint8_t m_muMimoUsers{0};     ///< MU-MIMO users
         uint8_t m_sigBCompression{0}; ///< SIG-B compression
         uint8_t m_giLtfSize{0};       ///< GI+LTF Size field
 
@@ -91,7 +91,7 @@
         HeSigBContentChannels m_contentChannels; //!< HE SIG-B Content Channels
         std::optional<Center26ToneRuIndication>
             m_center26ToneRuIndication; //!< center 26 tone RU indication in SIG-B common subfields
-    };                                  // struct HeMuSigHeader
+    };
 
     /// type of the HE-SIG PHY header
     using HeSigHeader = std::variant<std::monostate, HeSuSigHeader, HeTbSigHeader, HeMuSigHeader>;
@@ -114,12 +114,15 @@
      * @param channel the operating channel of the PHY used to transmit this PPDU
      * @param ppduDuration the transmission duration of this PPDU
      * @param uid the unique ID of this PPDU
+     * @param instantiateHeaders flag used to instantiate HE header, should be disabled by child
+     * classes
      */
     HePpdu(Ptr<const WifiPsdu> psdu,
            const WifiTxVector& txVector,
            const WifiPhyOperatingChannel& channel,
            Time ppduDuration,
-           uint64_t uid);
+           uint64_t uid,
+           bool instantiateHeaders = true);
     /**
      * Create an MU HE PPDU, storing a map of PSDUs.
      *
@@ -131,13 +134,16 @@
      * @param ppduDuration the transmission duration of this PPDU
      * @param uid the unique ID of this PPDU or of the triggering PPDU if this is an HE TB PPDU
      * @param flag the flag indicating the type of Tx PSD to build
+     * @param instantiateHeaders flag used to instantiate HE header, should be disabled by child
+     * classes
      */
     HePpdu(const WifiConstPsduMap& psdus,
            const WifiTxVector& txVector,
            const WifiPhyOperatingChannel& channel,
            Time ppduDuration,
            uint64_t uid,
-           TxPsdFlag flag);
+           TxPsdFlag flag,
+           bool instantiateHeaders = true);
 
     Time GetTxDuration() const override;
     Ptr<WifiPpdu> Copy() const override;
@@ -152,7 +158,7 @@
      * @param staId the STA-ID of the PHY calling this function.
      * @return the PSDU
      */
-    Ptr<const WifiPsdu> GetPsdu(uint8_t bssColor, uint16_t staId = SU_STA_ID) const;
+    virtual Ptr<const WifiPsdu> GetPsdu(uint8_t bssColor, uint16_t staId = SU_STA_ID) const;
 
     /**
      * @return the transmit PSD flag set for this PPDU
@@ -183,14 +189,18 @@
      * See section 27.3.10.8.3 of IEEE 802.11ax draft 4.0.
      *
      * @param channelWidth the channel width occupied by the PPDU
+     * @param mc the modulation class used for the transmission of the PPDU
      * @param ruAllocation 8 bit RU_ALLOCATION per 20 MHz
+     * @param center26ToneRuIndication the center 26 tone RU indication
      * @param sigBCompression flag whether SIG-B compression is used by the PPDU
      * @param numMuMimoUsers the number of MU-MIMO users addressed by the PPDU
      * @return a pair containing the number of RUs in each HE-SIG-B content channel (resp. 1 and 2)
      */
     static std::pair<std::size_t, std::size_t> GetNumRusPerHeSigBContentChannel(
         MHz_u channelWidth,
+        WifiModulationClass mc,
         const RuAllocation& ruAllocation,
+        std::optional<Center26ToneRuIndication> center26ToneRuIndication,
         bool sigBCompression,
         uint8_t numMuMimoUsers);
 
@@ -208,15 +218,20 @@
     /**
      * Get variable length HE SIG-B field size
      * @param channelWidth the channel width occupied by the PPDU
+     * @param mc the modulation class used for the transmission of the PPDU
      * @param ruAllocation 8 bit RU_ALLOCATION per 20 MHz
+     * @param center26ToneRuIndication the center 26 tone RU indication
      * @param sigBCompression flag whether SIG-B compression is used by the PPDU
      * @param numMuMimoUsers the number of MU-MIMO users addressed by the PPDU
      * @return field size in bytes
      */
-    static uint32_t GetSigBFieldSize(MHz_u channelWidth,
-                                     const RuAllocation& ruAllocation,
-                                     bool sigBCompression,
-                                     std::size_t numMuMimoUsers);
+    static uint32_t GetSigBFieldSize(
+        MHz_u channelWidth,
+        WifiModulationClass mc,
+        const RuAllocation& ruAllocation,
+        std::optional<Center26ToneRuIndication> center26ToneRuIndication,
+        bool sigBCompression,
+        std::size_t numMuMimoUsers);
 
   protected:
     /**
@@ -227,21 +242,46 @@
     virtual void SetTxVectorFromPhyHeaders(WifiTxVector& txVector) const;
 
     /**
+     * Fill in the L-SIG header.
+     *
+     * @param ppduDuration the transmission duration of this PPDU
+     */
+    void SetLSigHeader(Time ppduDuration);
+
+    /**
      * Reconstruct HeMuUserInfoMap from HE-SIG-B header.
      *
      * @param txVector the TXVECTOR to set its HeMuUserInfoMap
+     * @param mc the modulation class used for the transmission of the PPDU
      * @param ruAllocation the RU_ALLOCATION per 20 MHz
+     * @param center26ToneRuIndication the center 26 tone RU indication
      * @param contentChannels the HE-SIG-B content channels
      * @param sigBCompression flag whether SIG-B compression is used by the PPDU
      * @param numMuMimoUsers the number of MU-MIMO users addressed by the PPDU
      */
     void SetHeMuUserInfos(WifiTxVector& txVector,
+                          WifiModulationClass mc,
                           const RuAllocation& ruAllocation,
+                          std::optional<Center26ToneRuIndication> center26ToneRuIndication,
                           const HeSigBContentChannels& contentChannels,
                           bool sigBCompression,
                           uint8_t numMuMimoUsers) const;
 
     /**
+     * Get the RU specification that has been assigned a given user.
+     *
+     * @param ruAllocIndex the index of the RU allocation
+     * @param bw the total bandwidth used for the transmission
+     * @param ruType RU type of the user to be assigned
+     * @param phyIndex RU PHY index of the user to be assigned
+     * @return the value used to encode the bandwidth field in HE-SIG-A
+     */
+    virtual WifiRu::RuSpec GetRuSpec(std::size_t ruAllocIndex,
+                                     MHz_u bw,
+                                     RuType ruType,
+                                     std::size_t phyIndex) const;
+
+    /**
      * Convert channel width expressed in MHz to bandwidth field encoding in HE-SIG-A.
      *
      * @param channelWidth the channel width in MHz
@@ -318,14 +358,7 @@
      * @param txVector the TXVECTOR that was used for this PPDU
      * @param ppduDuration the transmission duration of this PPDU
      */
-    void SetPhyHeaders(const WifiTxVector& txVector, Time ppduDuration);
-
-    /**
-     * Fill in the L-SIG header.
-     *
-     * @param ppduDuration the transmission duration of this PPDU
-     */
-    void SetLSigHeader(Time ppduDuration);
+    virtual void SetPhyHeaders(const WifiTxVector& txVector, Time ppduDuration);
 
     /**
      * Fill in the HE-SIG header.
@@ -353,7 +386,7 @@
     virtual bool IsUlMu() const;
 
     HeSigHeader m_heSig; //!< the HE-SIG PHY header
-};                       // class HePpdu
+};
 
 /**
  * @brief Stream insertion operator.
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/he/he-ru.cc ns-3.45/src/wifi/model/he/he-ru.cc
--- ns-3.44/src/wifi/model/he/he-ru.cc	2025-03-09 16:55:49.791372500 -0700
+++ ns-3.45/src/wifi/model/he/he-ru.cc	2025-06-01 20:34:45.617702200 -0700
@@ -10,6 +10,7 @@
 
 #include "ns3/abort.h"
 #include "ns3/assert.h"
+#include "ns3/wifi-ru.h"
 
 #include <optional>
 #include <tuple>
@@ -17,9 +18,9 @@
 namespace ns3
 {
 
-const HeRu::SubcarrierGroups HeRu::m_heRuSubcarrierGroups = {
-    // RUs in a 20 MHz HE PPDU (Table 28-6)
-    {{MHz_u{20}, HeRu::RU_26_TONE},
+const SubcarrierGroups HeRu::m_heRuSubcarrierGroups{
+    // RUs in a 20 MHz HE PPDU (Table 27-7 IEEE802.11ax-2021)
+    {{MHz_u{20}, RuType::RU_26_TONE},
      {/* 1 */ {{-121, -96}},
       /* 2 */ {{-95, -70}},
       /* 3 */ {{-68, -43}},
@@ -29,17 +30,17 @@
       /* 7 */ {{43, 68}},
       /* 8 */ {{70, 95}},
       /* 9 */ {{96, 121}}}},
-    {{MHz_u{20}, HeRu::RU_52_TONE},
+    {{MHz_u{20}, RuType::RU_52_TONE},
      {/* 1 */ {{-121, -70}},
       /* 2 */ {{-68, -17}},
       /* 3 */ {{17, 68}},
       /* 4 */ {{70, 121}}}},
-    {{MHz_u{20}, HeRu::RU_106_TONE},
+    {{MHz_u{20}, RuType::RU_106_TONE},
      {/* 1 */ {{-122, -17}},
       /* 2 */ {{17, 122}}}},
-    {{MHz_u{20}, HeRu::RU_242_TONE}, {/* 1 */ {{-122, -2}, {2, 122}}}},
-    // RUs in a 40 MHz HE PPDU (Table 28-7)
-    {{MHz_u{40}, HeRu::RU_26_TONE},
+    {{MHz_u{20}, RuType::RU_242_TONE}, {/* 1 */ {{-122, -2}, {2, 122}}}},
+    // RUs in a 40 MHz HE PPDU (Table 27-8 IEEE802.11ax-2021)
+    {{MHz_u{40}, RuType::RU_26_TONE},
      {/* 1 */ {{-243, -218}},
       /* 2 */ {{-217, -192}},
       /* 3 */ {{-189, -164}},
@@ -58,7 +59,7 @@
       /* 16 */ {{164, 189}},
       /* 17 */ {{192, 217}},
       /* 18 */ {{218, 243}}}},
-    {{MHz_u{40}, HeRu::RU_52_TONE},
+    {{MHz_u{40}, RuType::RU_52_TONE},
      {/* 1 */ {{-243, -192}},
       /* 2 */ {{-189, -138}},
       /* 3 */ {{-109, -58}},
@@ -67,17 +68,17 @@
       /* 6 */ {{58, 109}},
       /* 7 */ {{138, 189}},
       /* 8 */ {{192, 243}}}},
-    {{MHz_u{40}, HeRu::RU_106_TONE},
+    {{MHz_u{40}, RuType::RU_106_TONE},
      {/* 1 */ {{-243, -138}},
       /* 2 */ {{-109, -4}},
       /* 3 */ {{4, 109}},
       /* 4 */ {{138, 243}}}},
-    {{MHz_u{40}, HeRu::RU_242_TONE},
+    {{MHz_u{40}, RuType::RU_242_TONE},
      {/* 1 */ {{-244, -3}},
       /* 2 */ {{3, 244}}}},
-    {{MHz_u{40}, HeRu::RU_484_TONE}, {/* 1 */ {{-244, -3}, {3, 244}}}},
-    // RUs in an 80 MHz HE PPDU (Table 28-8)
-    {{MHz_u{80}, HeRu::RU_26_TONE},
+    {{MHz_u{40}, RuType::RU_484_TONE}, {/* 1 */ {{-244, -3}, {3, 244}}}},
+    // RUs in an 80 MHz HE PPDU (Table 27-9 IEEE802.11ax-2021)
+    {{MHz_u{80}, RuType::RU_26_TONE},
      {/* 1 */ {{-499, -474}},
       /* 2 */ {{-473, -448}},
       /* 3 */ {{-445, -420}},
@@ -115,7 +116,7 @@
       /* 35 */ {{420, 445}},
       /* 36 */ {{448, 473}},
       /* 37 */ {{474, 499}}}},
-    {{MHz_u{80}, HeRu::RU_52_TONE},
+    {{MHz_u{80}, RuType::RU_52_TONE},
      {/* 1 */ {{-499, -448}},
       /* 2 */ {{-445, -394}},
       /* 3 */ {{-365, -314}},
@@ -132,7 +133,7 @@
       /* 14 */ {{314, 365}},
       /* 15 */ {{394, 445}},
       /* 16 */ {{448, 499}}}},
-    {{MHz_u{80}, HeRu::RU_106_TONE},
+    {{MHz_u{80}, RuType::RU_106_TONE},
      {/* 1 */ {{-499, -394}},
       /* 2 */ {{-365, -260}},
       /* 3 */ {{-257, -152}},
@@ -141,248 +142,230 @@
       /* 6 */ {{152, 257}},
       /* 7 */ {{260, 365}},
       /* 8 */ {{394, 499}}}},
-    {{MHz_u{80}, HeRu::RU_242_TONE},
+    {{MHz_u{80}, RuType::RU_242_TONE},
      {/* 1 */ {{-500, -259}},
       /* 2 */ {{-258, -17}},
       /* 3 */ {{17, 258}},
       /* 4 */ {{259, 500}}}},
-    {{MHz_u{80}, HeRu::RU_484_TONE},
+    {{MHz_u{80}, RuType::RU_484_TONE},
      {/* 1 */ {{-500, -17}},
       /* 2 */ {{17, 500}}}},
-    {{MHz_u{80}, HeRu::RU_996_TONE}, {/* 1 */ {{-500, -3}, {3, 500}}}},
+    {{MHz_u{80}, RuType::RU_996_TONE}, {/* 1 */ {{-500, -3}, {3, 500}}}},
 };
 
 // Table 27-26 IEEE802.11ax-2021
 const HeRu::RuAllocationMap HeRu::m_heRuAllocations = {
     // clang-format off
     {0,
-     {HeRu::RuSpec{HeRu::RU_26_TONE, 1, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 2, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 3, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 4, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 5, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 6, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 7, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 8, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 9, true}}},
+     {HeRu::RuSpec{RuType::RU_26_TONE, 1, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 2, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 3, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 4, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 5, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 6, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 7, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 8, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 9, true}}},
     {1,
-     {HeRu::RuSpec{HeRu::RU_26_TONE, 1, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 2, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 3, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 4, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 5, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 6, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 7, true},
-      HeRu::RuSpec{HeRu::RU_52_TONE, 4, true}}},
+     {HeRu::RuSpec{RuType::RU_26_TONE, 1, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 2, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 3, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 4, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 5, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 6, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 7, true},
+      HeRu::RuSpec{RuType::RU_52_TONE, 4, true}}},
     {2,
-     {HeRu::RuSpec{HeRu::RU_26_TONE, 1, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 2, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 3, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 4, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 5, true},
-      HeRu::RuSpec{HeRu::RU_52_TONE, 3, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 8, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 9, true}}},
+     {HeRu::RuSpec{RuType::RU_26_TONE, 1, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 2, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 3, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 4, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 5, true},
+      HeRu::RuSpec{RuType::RU_52_TONE, 3, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 8, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 9, true}}},
     {3,
-     {HeRu::RuSpec{HeRu::RU_26_TONE, 1, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 2, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 3, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 4, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 5, true},
-      HeRu::RuSpec{HeRu::RU_52_TONE, 3, true},
-      HeRu::RuSpec{HeRu::RU_52_TONE, 4, true}}},
+     {HeRu::RuSpec{RuType::RU_26_TONE, 1, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 2, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 3, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 4, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 5, true},
+      HeRu::RuSpec{RuType::RU_52_TONE, 3, true},
+      HeRu::RuSpec{RuType::RU_52_TONE, 4, true}}},
     {4,
-     {HeRu::RuSpec{HeRu::RU_26_TONE, 1, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 2, true},
-      HeRu::RuSpec{HeRu::RU_52_TONE, 2, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 5, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 6, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 7, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 8, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 9, true}}},
+     {HeRu::RuSpec{RuType::RU_26_TONE, 1, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 2, true},
+      HeRu::RuSpec{RuType::RU_52_TONE, 2, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 5, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 6, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 7, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 8, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 9, true}}},
     {5,
-     {HeRu::RuSpec{HeRu::RU_26_TONE, 1, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 2, true},
-      HeRu::RuSpec{HeRu::RU_52_TONE, 2, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 5, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 6, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 7, true},
-      HeRu::RuSpec{HeRu::RU_52_TONE, 4, true}}},
+     {HeRu::RuSpec{RuType::RU_26_TONE, 1, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 2, true},
+      HeRu::RuSpec{RuType::RU_52_TONE, 2, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 5, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 6, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 7, true},
+      HeRu::RuSpec{RuType::RU_52_TONE, 4, true}}},
     {6,
-     {HeRu::RuSpec{HeRu::RU_26_TONE, 1, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 2, true},
-      HeRu::RuSpec{HeRu::RU_52_TONE, 2, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 5, true},
-      HeRu::RuSpec{HeRu::RU_52_TONE, 3, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 8, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 9, true}}},
+     {HeRu::RuSpec{RuType::RU_26_TONE, 1, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 2, true},
+      HeRu::RuSpec{RuType::RU_52_TONE, 2, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 5, true},
+      HeRu::RuSpec{RuType::RU_52_TONE, 3, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 8, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 9, true}}},
     {7,
-     {HeRu::RuSpec{HeRu::RU_26_TONE, 1, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 2, true},
-      HeRu::RuSpec{HeRu::RU_52_TONE, 2, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 5, true},
-      HeRu::RuSpec{HeRu::RU_52_TONE, 3, true},
-      HeRu::RuSpec{HeRu::RU_52_TONE, 4, true}}},
+     {HeRu::RuSpec{RuType::RU_26_TONE, 1, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 2, true},
+      HeRu::RuSpec{RuType::RU_52_TONE, 2, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 5, true},
+      HeRu::RuSpec{RuType::RU_52_TONE, 3, true},
+      HeRu::RuSpec{RuType::RU_52_TONE, 4, true}}},
     {8,
-     {HeRu::RuSpec{HeRu::RU_52_TONE, 1, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 3, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 4, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 5, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 6, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 7, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 8, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 9, true}}},
+     {HeRu::RuSpec{RuType::RU_52_TONE, 1, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 3, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 4, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 5, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 6, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 7, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 8, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 9, true}}},
     {9,
-     {HeRu::RuSpec{HeRu::RU_52_TONE, 1, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 3, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 4, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 5, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 6, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 7, true},
-      HeRu::RuSpec{HeRu::RU_52_TONE, 4, true}}},
+     {HeRu::RuSpec{RuType::RU_52_TONE, 1, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 3, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 4, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 5, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 6, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 7, true},
+      HeRu::RuSpec{RuType::RU_52_TONE, 4, true}}},
     {10,
-     {HeRu::RuSpec{HeRu::RU_52_TONE, 1, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 3, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 4, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 5, true},
-      HeRu::RuSpec{HeRu::RU_52_TONE, 3, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 8, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 9, true}}},
+     {HeRu::RuSpec{RuType::RU_52_TONE, 1, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 3, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 4, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 5, true},
+      HeRu::RuSpec{RuType::RU_52_TONE, 3, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 8, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 9, true}}},
     {11,
-     {HeRu::RuSpec{HeRu::RU_52_TONE, 1, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 3, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 4, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 5, true},
-      HeRu::RuSpec{HeRu::RU_52_TONE, 3, true},
-      HeRu::RuSpec{HeRu::RU_52_TONE, 4, true}}},
+     {HeRu::RuSpec{RuType::RU_52_TONE, 1, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 3, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 4, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 5, true},
+      HeRu::RuSpec{RuType::RU_52_TONE, 3, true},
+      HeRu::RuSpec{RuType::RU_52_TONE, 4, true}}},
     {12,
-     {HeRu::RuSpec{HeRu::RU_52_TONE, 1, true},
-      HeRu::RuSpec{HeRu::RU_52_TONE, 2, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 5, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 6, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 7, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 8, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 9, true}}},
+     {HeRu::RuSpec{RuType::RU_52_TONE, 1, true},
+      HeRu::RuSpec{RuType::RU_52_TONE, 2, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 5, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 6, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 7, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 8, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 9, true}}},
     {13,
-     {HeRu::RuSpec{HeRu::RU_52_TONE, 1, true},
-      HeRu::RuSpec{HeRu::RU_52_TONE, 2, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 5, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 6, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 7, true},
-      HeRu::RuSpec{HeRu::RU_52_TONE, 4, true}}},
+     {HeRu::RuSpec{RuType::RU_52_TONE, 1, true},
+      HeRu::RuSpec{RuType::RU_52_TONE, 2, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 5, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 6, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 7, true},
+      HeRu::RuSpec{RuType::RU_52_TONE, 4, true}}},
     {14,
-     {HeRu::RuSpec{HeRu::RU_52_TONE, 1, true},
-      HeRu::RuSpec{HeRu::RU_52_TONE, 2, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 5, true},
-      HeRu::RuSpec{HeRu::RU_52_TONE, 3, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 8, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 9, true}}},
+     {HeRu::RuSpec{RuType::RU_52_TONE, 1, true},
+      HeRu::RuSpec{RuType::RU_52_TONE, 2, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 5, true},
+      HeRu::RuSpec{RuType::RU_52_TONE, 3, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 8, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 9, true}}},
     {15,
-     {HeRu::RuSpec{HeRu::RU_52_TONE, 1, true},
-      HeRu::RuSpec{HeRu::RU_52_TONE, 2, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 5, true},
-      HeRu::RuSpec{HeRu::RU_52_TONE, 3, true},
-      HeRu::RuSpec{HeRu::RU_52_TONE, 4, true}}},
+     {HeRu::RuSpec{RuType::RU_52_TONE, 1, true},
+      HeRu::RuSpec{RuType::RU_52_TONE, 2, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 5, true},
+      HeRu::RuSpec{RuType::RU_52_TONE, 3, true},
+      HeRu::RuSpec{RuType::RU_52_TONE, 4, true}}},
     {16,
-     {HeRu::RuSpec{HeRu::RU_52_TONE, 1, true},
-      HeRu::RuSpec{HeRu::RU_52_TONE, 2, true},
-      HeRu::RuSpec{HeRu::RU_106_TONE, 2, true}}},
+     {HeRu::RuSpec{RuType::RU_52_TONE, 1, true},
+      HeRu::RuSpec{RuType::RU_52_TONE, 2, true},
+      HeRu::RuSpec{RuType::RU_106_TONE, 2, true}}},
     {24,
-     {HeRu::RuSpec{HeRu::RU_106_TONE, 1, true},
-      HeRu::RuSpec{HeRu::RU_52_TONE, 3, true},
-      HeRu::RuSpec{HeRu::RU_52_TONE, 4, true}}},
+     {HeRu::RuSpec{RuType::RU_106_TONE, 1, true},
+      HeRu::RuSpec{RuType::RU_52_TONE, 3, true},
+      HeRu::RuSpec{RuType::RU_52_TONE, 4, true}}},
     {32,
-     {HeRu::RuSpec{HeRu::RU_26_TONE, 1, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 2, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 3, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 4, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 5, true},
-      HeRu::RuSpec{HeRu::RU_106_TONE, 2, true}}},
+     {HeRu::RuSpec{RuType::RU_26_TONE, 1, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 2, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 3, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 4, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 5, true},
+      HeRu::RuSpec{RuType::RU_106_TONE, 2, true}}},
     {40,
-     {HeRu::RuSpec{HeRu::RU_26_TONE, 1, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 2, true},
-      HeRu::RuSpec{HeRu::RU_52_TONE, 2, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 5, true},
-      HeRu::RuSpec{HeRu::RU_106_TONE, 2, true}}},
+     {HeRu::RuSpec{RuType::RU_26_TONE, 1, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 2, true},
+      HeRu::RuSpec{RuType::RU_52_TONE, 2, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 5, true},
+      HeRu::RuSpec{RuType::RU_106_TONE, 2, true}}},
     {48,
-     {HeRu::RuSpec{HeRu::RU_52_TONE, 1, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 3, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 4, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 5, true},
-      HeRu::RuSpec{HeRu::RU_106_TONE, 2, true}}},
+     {HeRu::RuSpec{RuType::RU_52_TONE, 1, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 3, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 4, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 5, true},
+      HeRu::RuSpec{RuType::RU_106_TONE, 2, true}}},
     {56,
-     {HeRu::RuSpec{HeRu::RU_52_TONE, 1, true},
-      HeRu::RuSpec{HeRu::RU_52_TONE, 2, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 5, true},
-      HeRu::RuSpec{HeRu::RU_106_TONE, 2, true}}},
+     {HeRu::RuSpec{RuType::RU_52_TONE, 1, true},
+      HeRu::RuSpec{RuType::RU_52_TONE, 2, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 5, true},
+      HeRu::RuSpec{RuType::RU_106_TONE, 2, true}}},
     {64,
-     {HeRu::RuSpec{HeRu::RU_106_TONE, 1, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 5, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 6, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 7, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 8, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 9, true}}},
+     {HeRu::RuSpec{RuType::RU_106_TONE, 1, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 5, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 6, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 7, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 8, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 9, true}}},
     {72,
-     {HeRu::RuSpec{HeRu::RU_106_TONE, 1, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 5, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 6, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 7, true},
-      HeRu::RuSpec{HeRu::RU_52_TONE, 4, true}}},
+     {HeRu::RuSpec{RuType::RU_106_TONE, 1, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 5, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 6, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 7, true},
+      HeRu::RuSpec{RuType::RU_52_TONE, 4, true}}},
     {80,
-     {HeRu::RuSpec{HeRu::RU_106_TONE, 1, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 5, true},
-      HeRu::RuSpec{HeRu::RU_52_TONE, 3, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 8, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 9, true}}},
+     {HeRu::RuSpec{RuType::RU_106_TONE, 1, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 5, true},
+      HeRu::RuSpec{RuType::RU_52_TONE, 3, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 8, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 9, true}}},
     {88,
-     {HeRu::RuSpec{HeRu::RU_106_TONE, 1, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 5, true},
-      HeRu::RuSpec{HeRu::RU_52_TONE, 3, true},
-      HeRu::RuSpec{HeRu::RU_52_TONE, 4, true}}},
+     {HeRu::RuSpec{RuType::RU_106_TONE, 1, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 5, true},
+      HeRu::RuSpec{RuType::RU_52_TONE, 3, true},
+      HeRu::RuSpec{RuType::RU_52_TONE, 4, true}}},
     {96,
-     {HeRu::RuSpec{HeRu::RU_106_TONE, 1, true},
-      HeRu::RuSpec{HeRu::RU_106_TONE, 2, true}}},
+     {HeRu::RuSpec{RuType::RU_106_TONE, 1, true},
+      HeRu::RuSpec{RuType::RU_106_TONE, 2, true}}},
     {112,
-     {HeRu::RuSpec{HeRu::RU_52_TONE, 1, true},
-      HeRu::RuSpec{HeRu::RU_52_TONE, 2, true},
-      HeRu::RuSpec{HeRu::RU_52_TONE, 3, true},
-      HeRu::RuSpec{HeRu::RU_52_TONE, 4, true}}},
+     {HeRu::RuSpec{RuType::RU_52_TONE, 1, true},
+      HeRu::RuSpec{RuType::RU_52_TONE, 2, true},
+      HeRu::RuSpec{RuType::RU_52_TONE, 3, true},
+      HeRu::RuSpec{RuType::RU_52_TONE, 4, true}}},
     {128,
-     {HeRu::RuSpec{HeRu::RU_106_TONE, 1, true},
-      HeRu::RuSpec{HeRu::RU_26_TONE, 5, true},
-      HeRu::RuSpec{HeRu::RU_106_TONE, 2, true}}},
+     {HeRu::RuSpec{RuType::RU_106_TONE, 1, true},
+      HeRu::RuSpec{RuType::RU_26_TONE, 5, true},
+      HeRu::RuSpec{RuType::RU_106_TONE, 2, true}}},
     {192,
-      {HeRu::RuSpec{HeRu::RU_242_TONE, 1, true}}},
+      {HeRu::RuSpec{RuType::RU_242_TONE, 1, true}}},
     {200,
-      {HeRu::RuSpec{HeRu::RU_484_TONE, 1, true}}},
+      {HeRu::RuSpec{RuType::RU_484_TONE, 1, true}}},
     {208,
-      {HeRu::RuSpec{HeRu::RU_996_TONE, 1, true}}},
+      {HeRu::RuSpec{RuType::RU_996_TONE, 1, true}}},
     // clang-format on
 };
 
-HeRu::RuSpecCompare::RuSpecCompare(MHz_u channelWidth, uint8_t p20Index)
-    : m_channelWidth(channelWidth),
-      m_p20Index(p20Index)
-{
-}
-
-bool
-HeRu::RuSpecCompare::operator()(const HeRu::RuSpec& lhs, const HeRu::RuSpec& rhs) const
-{
-    const auto lhsIndex = lhs.GetPhyIndex(m_channelWidth, m_p20Index);
-    const auto rhsIndex = rhs.GetPhyIndex(m_channelWidth, m_p20Index);
-    const auto lhsStartTone =
-        HeRu::GetSubcarrierGroup(m_channelWidth, lhs.GetRuType(), lhsIndex).front().first;
-    const auto rhsStartTone =
-        HeRu::GetSubcarrierGroup(m_channelWidth, rhs.GetRuType(), rhsIndex).front().first;
-    return lhsStartTone < rhsStartTone;
-}
-
 std::vector<HeRu::RuSpec>
-HeRu::GetRuSpecs(uint8_t ruAllocation)
+HeRu::GetRuSpecs(uint16_t ruAllocation)
 {
     std::optional<std::size_t> idx;
-    if (((ruAllocation >= 0) && (ruAllocation <= 15)) || (ruAllocation == 112))
+    if ((ruAllocation <= 15) || (ruAllocation == 112))
     {
         idx = ruAllocation;
     }
@@ -405,36 +388,31 @@
     }
     else
     {
-        NS_FATAL_ERROR("Reserved RU allocation " << +ruAllocation);
+        NS_FATAL_ERROR("Reserved RU allocation " << ruAllocation);
     }
     return idx.has_value() ? m_heRuAllocations.at(idx.value()) : std::vector<HeRu::RuSpec>{};
 }
 
-uint8_t
-HeRu::GetEqualizedRuAllocation(RuType ruType, bool isOdd)
+uint16_t
+HeRu::GetEqualizedRuAllocation(RuType ruType, bool isOdd, bool hasUsers)
 {
     switch (ruType)
     {
-    case HeRu::RU_26_TONE:
+    case RuType::RU_26_TONE:
         return 0;
-    case HeRu::RU_52_TONE:
+    case RuType::RU_52_TONE:
         return isOdd ? 15 : 112;
-    case HeRu::RU_106_TONE:
+    case RuType::RU_106_TONE:
         return isOdd ? 128 : 96;
-    case HeRu::RU_242_TONE:
-        return 192;
-    case HeRu::RU_484_TONE:
-        return 200;
+    case RuType::RU_242_TONE:
+        return hasUsers ? 192 : 113;
+    case RuType::RU_484_TONE:
+        return hasUsers ? 200 : 114;
     default:
-        return 208;
+        return hasUsers ? 208 : 115;
     }
 }
 
-HeRu::RuSpec::RuSpec()
-    : m_index(0) // indicates undefined RU
-{
-}
-
 HeRu::RuSpec::RuSpec(RuType ruType, std::size_t index, bool primary80MHz)
     : m_ruType(ruType),
       m_index(index),
@@ -443,7 +421,7 @@
     NS_ABORT_MSG_IF(index == 0, "Index cannot be zero");
 }
 
-HeRu::RuType
+RuType
 HeRu::RuSpec::GetRuType() const
 {
     NS_ABORT_MSG_IF(m_index == 0, "Undefined RU");
@@ -469,7 +447,7 @@
 {
     bool primary80IsLower80 = (p20Index < bw / MHz_u{40});
 
-    if (bw < MHz_u{160} || m_ruType == HeRu::RU_2x996_TONE ||
+    if (bw < MHz_u{160} || m_ruType == RuType::RU_2x996_TONE ||
         (primary80IsLower80 && m_primary80MHz) || (!primary80IsLower80 && !m_primary80MHz))
     {
         return m_index;
@@ -480,10 +458,39 @@
     }
 }
 
+bool
+HeRu::GetPrimary80MHzFlag(MHz_u bw, RuType ruType, std::size_t phyIndex, uint8_t p20Index)
+{
+    if (bw < MHz_u{160} || ruType == RuType::RU_2x996_TONE)
+    {
+        return true;
+    }
+    const auto primary80IsLower80 = (p20Index < bw / MHz_u{40});
+    const auto indicesPer80MHz = GetNRus(MHz_u{80}, ruType);
+    return ((primary80IsLower80 && (phyIndex <= indicesPer80MHz)) ||
+            (!primary80IsLower80 && (phyIndex > indicesPer80MHz)));
+}
+
+std::size_t
+HeRu::GetIndexIn80MHzSegment(MHz_u bw, RuType ruType, std::size_t phyIndex)
+{
+    std::size_t index{phyIndex};
+    const auto indicesPer80MHz = GetNRus(MHz_u{80}, ruType);
+    if (WifiRu::GetBandwidth(ruType) > MHz_u{80})
+    {
+        index = 1;
+    }
+    else if (bw > MHz_u{80} && phyIndex > indicesPer80MHz)
+    {
+        index = (((phyIndex - 1) % indicesPer80MHz) + 1);
+    }
+    return index;
+}
+
 std::size_t
 HeRu::GetNRus(MHz_u bw, RuType ruType)
 {
-    if (bw == MHz_u{160} && ruType == RU_2x996_TONE)
+    if (bw == MHz_u{160} && ruType == RuType::RU_2x996_TONE)
     {
         return 1;
     }
@@ -501,9 +508,14 @@
 }
 
 std::vector<HeRu::RuSpec>
-HeRu::GetRusOfType(MHz_u bw, HeRu::RuType ruType)
+HeRu::GetRusOfType(MHz_u bw, RuType ruType)
 {
-    if (ruType == HeRu::RU_2x996_TONE)
+    if (GetNRus(bw, ruType) == 0)
+    {
+        return {};
+    }
+
+    if (ruType == RuType::RU_2x996_TONE)
     {
         NS_ASSERT(bw >= MHz_u{160});
         return {{ruType, 1, true}};
@@ -531,11 +543,11 @@
 }
 
 std::vector<HeRu::RuSpec>
-HeRu::GetCentral26TonesRus(MHz_u bw, HeRu::RuType ruType)
+HeRu::GetCentral26TonesRus(MHz_u bw, RuType ruType)
 {
     std::vector<std::size_t> indices;
 
-    if (ruType == HeRu::RU_52_TONE || ruType == HeRu::RU_106_TONE)
+    if (ruType == RuType::RU_52_TONE || ruType == RuType::RU_106_TONE)
     {
         if (bw == MHz_u{20})
         {
@@ -550,7 +562,7 @@
             indices.insert(indices.end(), {5, 14, 19, 24, 33});
         }
     }
-    else if (ruType == HeRu::RU_242_TONE || ruType == HeRu::RU_484_TONE)
+    else if (ruType == RuType::RU_242_TONE || ruType == RuType::RU_484_TONE)
     {
         if (bw >= MHz_u{80})
         {
@@ -570,19 +582,19 @@
     {
         for (const auto& index : indices)
         {
-            ret.emplace_back(HeRu::RU_26_TONE, index, primary80MHz);
+            ret.emplace_back(RuType::RU_26_TONE, index, primary80MHz);
         }
     }
     return ret;
 }
 
-HeRu::SubcarrierGroup
+SubcarrierGroup
 HeRu::GetSubcarrierGroup(MHz_u bw, RuType ruType, std::size_t phyIndex)
 {
-    if (ruType == HeRu::RU_2x996_TONE) // handle special case of RU covering 160 MHz channel
+    if (ruType == RuType::RU_2x996_TONE) // handle special case of RU covering 160 MHz channel
     {
         NS_ABORT_MSG_IF(bw != MHz_u{160}, "2x996 tone RU can only be used on 160 MHz band");
-        return {{-1012, -3}, {3, 1012}};
+        return {{-1012, -515}, {-509, -12}, {12, 509}, {515, 1012}};
     }
 
     // Determine the shift to apply to tone indices for 160 MHz channel (i.e. -1012 to 1012), since
@@ -619,7 +631,7 @@
 HeRu::DoesOverlap(MHz_u bw, RuSpec ru, const std::vector<RuSpec>& v)
 {
     // A 2x996-tone RU spans 160 MHz, hence it overlaps with any other RU
-    if (bw == MHz_u{160} && ru.GetRuType() == RU_2x996_TONE && !v.empty())
+    if (bw == MHz_u{160} && ru.GetRuType() == RuType::RU_2x996_TONE && !v.empty())
     {
         return true;
     }
@@ -631,6 +643,12 @@
     SubcarrierGroup rangesRu = GetSubcarrierGroup(bw, ru.GetRuType(), ru.GetIndex());
     for (auto& p : v)
     {
+        // A 2x996-tone RU spans 160 MHz, hence it overlaps
+        if (bw == MHz_u{160} && p.GetRuType() == RuType::RU_2x996_TONE)
+        {
+            return true;
+        }
+
         if (ru.GetPrimary80MHz() != p.GetPrimary80MHz())
         {
             // the two RUs are located in distinct 80MHz bands
@@ -651,29 +669,6 @@
     return false;
 }
 
-bool
-HeRu::DoesOverlap(MHz_u bw, RuSpec ru, const SubcarrierGroup& toneRanges, uint8_t p20Index)
-{
-    for (const auto& range : toneRanges)
-    {
-        if (bw == MHz_u{160} && ru.GetRuType() == RU_2x996_TONE)
-        {
-            return true;
-        }
-
-        SubcarrierGroup rangesRu =
-            GetSubcarrierGroup(bw, ru.GetRuType(), ru.GetPhyIndex(bw, p20Index));
-        for (auto& r : rangesRu)
-        {
-            if (range.second >= r.first && r.second >= range.first)
-            {
-                return true;
-            }
-        }
-    }
-    return false;
-}
-
 HeRu::RuSpec
 HeRu::FindOverlappingRu(MHz_u bw, RuSpec referenceRu, RuType searchedRuType)
 {
@@ -685,7 +680,7 @@
     {
         primary80MhzFlags.push_back(true);
         primary80MhzFlags.push_back(false);
-        numRusPer80Mhz = (searchedRuType == HeRu::RU_2x996_TONE ? 1 : numRus / 2);
+        numRusPer80Mhz = (searchedRuType == RuType::RU_2x996_TONE ? 1 : numRus / 2);
     }
     else
     {
@@ -712,38 +707,6 @@
 }
 
 std::ostream&
-operator<<(std::ostream& os, const HeRu::RuType& ruType)
-{
-    switch (ruType)
-    {
-    case HeRu::RU_26_TONE:
-        os << "26-tones";
-        break;
-    case HeRu::RU_52_TONE:
-        os << "52-tones";
-        break;
-    case HeRu::RU_106_TONE:
-        os << "106-tones";
-        break;
-    case HeRu::RU_242_TONE:
-        os << "242-tones";
-        break;
-    case HeRu::RU_484_TONE:
-        os << "484-tones";
-        break;
-    case HeRu::RU_996_TONE:
-        os << "996-tones";
-        break;
-    case HeRu::RU_2x996_TONE:
-        os << "2x996-tones";
-        break;
-    default:
-        NS_FATAL_ERROR("Unknown RU type");
-    }
-    return os;
-}
-
-std::ostream&
 operator<<(std::ostream& os, const HeRu::RuSpec& ru)
 {
     os << "RU{" << ru.GetRuType() << "/" << ru.GetIndex() << "/"
@@ -752,57 +715,7 @@
     return os;
 }
 
-MHz_u
-HeRu::GetBandwidth(RuType ruType)
-{
-    switch (ruType)
-    {
-    case RU_26_TONE:
-        return MHz_u{2};
-    case RU_52_TONE:
-        return MHz_u{4};
-    case RU_106_TONE:
-        return MHz_u{8};
-    case RU_242_TONE:
-        return MHz_u{20};
-    case RU_484_TONE:
-        return MHz_u{40};
-    case RU_996_TONE:
-        return MHz_u{80};
-    case RU_2x996_TONE:
-        return MHz_u{160};
-    default:
-        NS_ABORT_MSG("RU type " << ruType << " not found");
-        return MHz_u{0};
-    }
-}
-
-HeRu::RuType
-HeRu::GetRuType(MHz_u bandwidth)
-{
-    switch (static_cast<uint16_t>(bandwidth))
-    {
-    case 2:
-        return RU_26_TONE;
-    case 4:
-        return RU_52_TONE;
-    case 8:
-        return RU_106_TONE;
-    case 20:
-        return RU_242_TONE;
-    case 40:
-        return RU_484_TONE;
-    case 80:
-        return RU_996_TONE;
-    case 160:
-        return RU_2x996_TONE;
-    default:
-        NS_ABORT_MSG(bandwidth << " MHz bandwidth not found");
-        return RU_242_TONE;
-    }
-}
-
-HeRu::RuType
+RuType
 HeRu::GetEqualSizedRusForStations(MHz_u bandwidth,
                                   std::size_t& nStations,
                                   std::size_t& nCentral26TonesRus)
@@ -831,15 +744,23 @@
     {
         NS_ABORT_IF(bandwidth != MHz_u{160} || nStations != 1);
         nRusAssigned = 1;
-        ruType = RU_2x996_TONE;
+        ruType = RuType::RU_2x996_TONE;
     }
 
     nStations = nRusAssigned;
+    nCentral26TonesRus = GetNumCentral26TonesRus(bandwidth, ruType);
+
+    return ruType;
+}
 
+uint8_t
+HeRu::GetNumCentral26TonesRus(MHz_u bandwidth, RuType ruType)
+{
+    uint8_t nCentral26TonesRus{0};
     switch (ruType)
     {
-    case RU_52_TONE:
-    case RU_106_TONE:
+    case RuType::RU_52_TONE:
+    case RuType::RU_106_TONE:
         if (bandwidth == MHz_u{20})
         {
             nCentral26TonesRus = 1;
@@ -853,8 +774,8 @@
             nCentral26TonesRus = 5;
         }
         break;
-    case RU_242_TONE:
-    case RU_484_TONE:
+    case RuType::RU_242_TONE:
+    case RuType::RU_484_TONE:
         nCentral26TonesRus = (bandwidth >= MHz_u{80} ? 1 : 0);
         break;
     default:
@@ -866,7 +787,7 @@
         nCentral26TonesRus *= 2;
     }
 
-    return ruType;
+    return nCentral26TonesRus;
 }
 
 bool
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/he/he-ru.h ns-3.45/src/wifi/model/he/he-ru.h
--- ns-3.44/src/wifi/model/he/he-ru.h	2025-03-09 16:55:49.791372500 -0700
+++ ns-3.45/src/wifi/model/he/he-ru.h	2025-06-01 20:34:45.617702200 -0700
@@ -26,26 +26,6 @@
 {
   public:
     /**
-     * The different HE Resource Unit (RU) types.
-     */
-    enum RuType
-    {
-        RU_26_TONE = 0,
-        RU_52_TONE,
-        RU_106_TONE,
-        RU_242_TONE,
-        RU_484_TONE,
-        RU_996_TONE,
-        RU_2x996_TONE
-    };
-
-    /// (lowest index, highest index) pair defining a subcarrier range
-    typedef std::pair<int16_t, int16_t> SubcarrierRange;
-
-    /// a vector of subcarrier ranges defining a subcarrier group
-    typedef std::vector<SubcarrierRange> SubcarrierGroup;
-
-    /**
      * RU Specification. Stores the information carried by the RU Allocation subfield
      * of the User Info field of Trigger frames (see 9.3.1.22.1 of 802.11ax D8.0).
      * Note that primary80MHz must be true if ruType is RU_2x996_TONE.
@@ -59,7 +39,7 @@
         /**
          * Default constructor
          */
-        RuSpec();
+        RuSpec() = default;
         /**
          * Constructor
          *
@@ -119,39 +99,36 @@
         bool operator<(const RuSpec& other) const;
 
       private:
-        RuType m_ruType;     //!< RU type
-        std::size_t m_index; /**< RU index (starting at 1) as defined by Tables 27-7
+        RuType m_ruType{};     //!< RU type
+        std::size_t m_index{}; /**< RU index (starting at 1) as defined by Tables 27-7
                                   to 27-9 of 802.11ax D8.0 */
-        bool m_primary80MHz; //!< true if the RU is allocated in the primary 80MHz channel
+        bool m_primary80MHz{}; //!< true if the RU is allocated in the primary 80MHz channel
     };
 
     /**
-     * Struct providing a function call operator to compare two RUs.
+     * Get the primary 80 MHz flag of a given RU transmitted in a PPDU.
+     * The flag identifies whether the RU is in the primary 80 MHz.
+     *
+     * @param bw the bandwidth of the PPDU (20, 40, 80, 160)
+     * @param ruType the RU type (number of tones)
+     * @param phyIndex the PHY index (starting at 1) of the RU
+     * @param p20Index the index of the primary20 channel
+     * @return the primary 80 MHz flag
      */
-    struct RuSpecCompare
-    {
-        /**
-         * Constructor.
-         *
-         * @param channelWidth the channel width
-         * @param p20Index the index of the primary20 channel
-         */
-        RuSpecCompare(MHz_u channelWidth, uint8_t p20Index);
-        /**
-         * Function call operator.
-         *
-         * @param lhs left hand side RU
-         * @param rhs right hand side RU
-         * @return true if the left hand side RU has its leftmost tone at a lower
-         *         frequency than the leftmost tone of the right hand side RU,
-         *         false otherwise
-         */
-        bool operator()(const RuSpec& lhs, const RuSpec& rhs) const;
+    static bool GetPrimary80MHzFlag(MHz_u bw,
+                                    RuType ruType,
+                                    std::size_t phyIndex,
+                                    uint8_t p20Index);
 
-      private:
-        MHz_u m_channelWidth; ///< The channel width
-        uint8_t m_p20Index;   ///< Primary20 channel index
-    };
+    /**
+     * Get the index of a given RU transmitted in a PPDU within its 80 MHz segment.
+     *
+     * @param bw the bandwidth of the PPDU (20, 40, 80, 160)
+     * @param ruType the RU type (number of tones)
+     * @param phyIndex the PHY index (starting at 1) of the RU
+     * @return the index within the 80 MHz segment
+     */
+    static std::size_t GetIndexIn80MHzSegment(MHz_u bw, RuType ruType, std::size_t phyIndex);
 
     /**
      * Get the number of distinct RUs of the given type (number of tones)
@@ -171,7 +148,7 @@
      * @param ruType the RU type (number of tones)
      * @return the set of distinct RUs available
      */
-    static std::vector<HeRu::RuSpec> GetRusOfType(MHz_u bw, HeRu::RuType ruType);
+    static std::vector<RuSpec> GetRusOfType(MHz_u bw, RuType ruType);
 
     /**
      * Get the set of 26-tone RUs that can be additionally allocated if the given
@@ -181,7 +158,7 @@
      * @param ruType the RU type (number of tones)
      * @return the set of 26-tone RUs that can be additionally allocated
      */
-    static std::vector<HeRu::RuSpec> GetCentral26TonesRus(MHz_u bw, HeRu::RuType ruType);
+    static std::vector<RuSpec> GetCentral26TonesRus(MHz_u bw, RuType ruType);
 
     /**
      * Get the subcarrier group of the RU having the given PHY index among all the
@@ -212,22 +189,6 @@
     static bool DoesOverlap(MHz_u bw, RuSpec ru, const std::vector<RuSpec>& v);
 
     /**
-     * Check whether the given RU overlaps with the given tone ranges.
-     * Note that for channel width of 160 MHz the returned range is relative to
-     * the 160 MHz channel (i.e. -1012 to 1012).
-     *
-     * @param bw the bandwidth of the HE PPDU (20, 40, 80, 160)
-     * @param ru the given RU allocation
-     * @param toneRanges the given set of tone ranges
-     * @param p20Index the index of the primary20 channel
-     * @return true if the given RU overlaps with the given set of tone ranges.
-     */
-    static bool DoesOverlap(MHz_u bw,
-                            RuSpec ru,
-                            const SubcarrierGroup& toneRanges,
-                            uint8_t p20Index);
-
-    /**
      * Find the RU allocation of the given RU type overlapping the given
      * reference RU allocation.
      * Note that an assert is generated if the RU allocation is not found.
@@ -240,22 +201,6 @@
     static RuSpec FindOverlappingRu(MHz_u bw, RuSpec referenceRu, RuType searchedRuType);
 
     /**
-     * Get the approximate bandwidth occupied by a RU.
-     *
-     * @param ruType the RU type
-     * @return the approximate bandwidth occupied by the RU
-     */
-    static MHz_u GetBandwidth(RuType ruType);
-
-    /**
-     * Get the RU corresponding to the approximate bandwidth.
-     *
-     * @param bandwidth the approximate bandwidth occupied by the RU
-     * @return the RU type
-     */
-    static RuType GetRuType(MHz_u bandwidth);
-
-    /**
      * Given the channel bandwidth and the number of stations candidate for being
      * assigned an RU, maximize the number of candidate stations that can be assigned
      * an RU subject to the constraint that all the stations must be assigned an RU
@@ -272,12 +217,6 @@
                                               std::size_t& nStations,
                                               std::size_t& nCentral26TonesRus);
 
-    /// (bandwidth, number of tones) pair
-    typedef std::pair<MHz_u, RuType> BwTonesPair;
-
-    /// map (bandwidth, number of tones) pairs to the group of subcarrier ranges
-    typedef std::map<BwTonesPair, std::vector<SubcarrierGroup>> SubcarrierGroups;
-
     /// Subcarrier groups for all RUs (with indices being applicable to primary 80 MHz channel)
     static const SubcarrierGroups m_heRuSubcarrierGroups;
 
@@ -288,31 +227,32 @@
     static const RuAllocationMap m_heRuAllocations;
 
     /// Get the RU specs based on RU_ALLOCATION
-    /// @param ruAllocation 8 bit RU_ALLOCATION value
+    /// @param ruAllocation 9 bit RU_ALLOCATION value
     /// @return RU spec associated with the RU_ALLOCATION
-    static std::vector<RuSpec> GetRuSpecs(uint8_t ruAllocation);
+    static std::vector<RuSpec> GetRuSpecs(uint16_t ruAllocation);
 
     /// Get the RU_ALLOCATION value for equal size RUs
     /// @param ruType equal size RU type (generated by GetEqualSizedRusForStations)
     /// @param isOdd if number of stations is an odd number
+    /// @param hasUsers whether it contributes to User field(s) in the content channel this RU
+    /// Allocation belongs to
     /// @return RU_ALLOCATION value
-    static uint8_t GetEqualizedRuAllocation(RuType ruType, bool isOdd);
+    static uint16_t GetEqualizedRuAllocation(RuType ruType, bool isOdd, bool hasUsers);
 
-    /// Empty 242-tone RU identifier
-    static constexpr uint8_t EMPTY_242_TONE_RU = 113;
+  private:
+    /**
+     * Get the number of 26-tone RUs that can be allocated if returned RU size is greater than 26
+     * tones.
+     *
+     * @param bw the bandwidth (MHz) of the HE PPDU (20, 40, 80, 160)
+     * @param ruType the RU type (number of tones)
+     * @return the number of 26-tone RUs that can be allocated
+     */
+    static uint8_t GetNumCentral26TonesRus(MHz_u bw, RuType ruType);
 };
 
 /**
  * @brief Stream insertion operator.
- *
- * @param os the stream
- * @param ruType the RU type
- * @returns a reference to the stream
- */
-std::ostream& operator<<(std::ostream& os, const HeRu::RuType& ruType);
-
-/**
- * @brief Stream insertion operator.
  *
  * @param os the stream
  * @param ru the RU
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/he/mu-edca-parameter-set.cc ns-3.45/src/wifi/model/he/mu-edca-parameter-set.cc
--- ns-3.44/src/wifi/model/he/mu-edca-parameter-set.cc	2025-03-09 16:55:49.791372500 -0700
+++ ns-3.45/src/wifi/model/he/mu-edca-parameter-set.cc	2025-06-01 20:34:45.617702200 -0700
@@ -155,4 +155,16 @@
     return 13;
 }
 
+void
+MuEdcaParameterSet::Print(std::ostream& os) const
+{
+    os << "MU EDCA Parameter Set=[QoS Info: " << +m_qosInfo << ", MU Parameter Records=";
+    for (const auto& record : m_records)
+    {
+        os << "{AIFSN: " << +record.aifsnField << ", CWmin/max: " << +record.cwMinMax
+           << ", MU EDCA Timer: " << +record.muEdcaTimer << "}, ";
+    }
+    os << "]";
+}
+
 } // namespace ns3
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/he/mu-edca-parameter-set.h ns-3.45/src/wifi/model/he/mu-edca-parameter-set.h
--- ns-3.44/src/wifi/model/he/mu-edca-parameter-set.h	2025-03-09 16:55:49.791372500 -0700
+++ ns-3.45/src/wifi/model/he/mu-edca-parameter-set.h	2025-06-01 20:34:45.618702200 -0700
@@ -120,6 +120,7 @@
     uint16_t GetInformationFieldSize() const override;
     void SerializeInformationField(Buffer::Iterator start) const override;
     uint16_t DeserializeInformationField(Buffer::Iterator start, uint16_t length) override;
+    void Print(std::ostream& os) const override;
 
     /**
      * MU AC Parameter Record type
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/he/multi-user-scheduler.h ns-3.45/src/wifi/model/he/multi-user-scheduler.h
--- ns-3.44/src/wifi/model/he/multi-user-scheduler.h	2025-03-09 16:55:49.791372500 -0700
+++ ns-3.45/src/wifi/model/he/multi-user-scheduler.h	2025-06-01 20:34:45.618702200 -0700
@@ -9,8 +9,6 @@
 #ifndef MULTI_USER_SCHEDULER_H
 #define MULTI_USER_SCHEDULER_H
 
-#include "he-ru.h"
-
 #include "ns3/ap-wifi-mac.h"
 #include "ns3/ctrl-headers.h"
 #include "ns3/object.h"
@@ -189,7 +187,9 @@
      */
     virtual void UpdateTriggerFrameAfterProtection(uint8_t linkId,
                                                    CtrlTriggerHeader& trigger,
-                                                   WifiTxParameters& txParams) const {};
+                                                   WifiTxParameters& txParams) const
+    {
+    }
 
     /**
      * Update the given PSDU map after protection is completed on the given link.
@@ -200,7 +200,9 @@
      */
     virtual void UpdateDlMuAfterProtection(uint8_t linkId,
                                            WifiPsduMap& psduMap,
-                                           WifiTxParameters& txParams) const {};
+                                           WifiTxParameters& txParams) const
+    {
+    }
 
     /**
      * Remove the User Info fields for which the given predicate is true from the given Trigger
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/he/rr-multi-user-scheduler.cc ns-3.45/src/wifi/model/he/rr-multi-user-scheduler.cc
--- ns-3.44/src/wifi/model/he/rr-multi-user-scheduler.cc	2025-03-09 16:55:49.791372500 -0700
+++ ns-3.45/src/wifi/model/he/rr-multi-user-scheduler.cc	2025-06-01 20:34:45.618702200 -0700
@@ -174,10 +174,32 @@
 {
     NS_LOG_FUNCTION(this);
 
+    auto heConfiguration = m_apMac->GetHeConfiguration();
+    NS_ASSERT(heConfiguration);
+
+    WifiTxVector txVector;
+    txVector.SetChannelWidth(m_allowedWidth);
+    txVector.SetGuardInterval(heConfiguration->GetGuardInterval());
+    txVector.SetBssColor(heConfiguration->m_bssColor);
+    txVector.SetPreambleType(WIFI_PREAMBLE_HE_TB);
+
+    const auto firstCandidate =
+        std::find_if(m_staListUl.begin(), m_staListUl.end(), canBeSolicited);
+    if (firstCandidate == m_staListUl.cend())
+    {
+        NS_LOG_DEBUG("No candidate");
+        return txVector;
+    }
+
     // determine RUs to allocate to stations
+    const auto isEht =
+        (m_apMac->GetEhtSupported() && m_apMac->GetEhtSupported(firstCandidate->address));
     auto count = std::min<std::size_t>(m_nStations, m_staListUl.size());
     std::size_t nCentral26TonesRus;
-    HeRu::GetEqualSizedRusForStations(m_allowedWidth, count, nCentral26TonesRus);
+    WifiRu::GetEqualSizedRusForStations(m_allowedWidth,
+                                        count,
+                                        nCentral26TonesRus,
+                                        isEht ? WIFI_MOD_CLASS_EHT : WIFI_MOD_CLASS_HE);
     NS_ASSERT(count >= 1);
 
     if (!m_useCentral26TonesRus)
@@ -185,17 +207,15 @@
         nCentral26TonesRus = 0;
     }
 
-    Ptr<HeConfiguration> heConfiguration = m_apMac->GetHeConfiguration();
-    NS_ASSERT(heConfiguration);
-
-    WifiTxVector txVector;
-    txVector.SetPreambleType(WIFI_PREAMBLE_HE_TB);
-    txVector.SetChannelWidth(m_allowedWidth);
-    txVector.SetGuardInterval(heConfiguration->GetGuardInterval());
-    txVector.SetBssColor(heConfiguration->m_bssColor);
+    if (isEht)
+    {
+        txVector.SetPreambleType(WIFI_PREAMBLE_EHT_TB);
+        txVector.SetEhtPpduType(0);
+    }
+    // TODO otherwise make sure the TX width does not exceed 160 MHz
 
     // iterate over the associated stations until an enough number of stations is identified
-    auto staIt = m_staListUl.begin();
+    auto staIt = firstCandidate;
     m_candidates.clear();
 
     while (staIt != m_staListUl.end() &&
@@ -204,51 +224,15 @@
     {
         NS_LOG_DEBUG("Next candidate STA (MAC=" << staIt->address << ", AID=" << staIt->aid << ")");
 
-        if (!canBeSolicited(*staIt))
-        {
-            NS_LOG_DEBUG("Skipping station based on provided function object");
-            staIt++;
-            continue;
-        }
-
         if (txVector.GetPreambleType() == WIFI_PREAMBLE_EHT_TB &&
             !m_apMac->GetEhtSupported(staIt->address))
         {
             NS_LOG_DEBUG(
                 "Skipping non-EHT STA because this Trigger Frame is only soliciting EHT STAs");
-            staIt++;
-            continue;
-        }
-
-        uint8_t tid = 0;
-        while (tid < 8)
-        {
-            // check that a BA agreement is established with the receiver for the
-            // considered TID, since ack sequences for UL MU require block ack
-            if (m_apMac->GetBaAgreementEstablishedAsRecipient(staIt->address, tid))
-            {
-                break;
-            }
-            ++tid;
-        }
-        if (tid == 8)
-        {
-            NS_LOG_DEBUG("No Block Ack agreement established with " << staIt->address);
-            staIt++;
+            staIt = std::find_if(++staIt, m_staListUl.end(), canBeSolicited);
             continue;
         }
 
-        // if the first candidate STA is an EHT STA, we switch to soliciting EHT TB PPDUs
-        if (txVector.GetHeMuUserInfoMap().empty())
-        {
-            if (m_apMac->GetEhtSupported() && m_apMac->GetEhtSupported(staIt->address))
-            {
-                txVector.SetPreambleType(WIFI_PREAMBLE_EHT_TB);
-                txVector.SetEhtPpduType(0);
-            }
-            // TODO otherwise, make sure the TX width does not exceed 160 MHz
-        }
-
         // prepare the MAC header of a frame that would be sent to the candidate station,
         // just for the purpose of retrieving the TXVECTOR used to transmit to that station
         WifiMacHeader hdr(WIFI_MAC_QOSDATA);
@@ -264,8 +248,8 @@
                                   suTxVector.GetNss()});
         m_candidates.emplace_back(staIt, nullptr);
 
-        // move to the next station in the list
-        staIt++;
+        // move to the next candidate station in the list
+        staIt = std::find_if(++staIt, m_staListUl.end(), canBeSolicited);
     }
 
     if (txVector.GetHeMuUserInfoMap().empty())
@@ -284,7 +268,26 @@
     // check if station has setup the current link
     if (!m_apMac->GetStaList(m_linkId).contains(info.aid))
     {
-        NS_LOG_INFO("STA with AID " << info.aid << " has not setup link " << +m_linkId);
+        NS_LOG_INFO("STA with AID " << info.aid << " has not setup link " << +m_linkId
+                                    << ": skipping station");
+        return false;
+    }
+
+    uint8_t tid = 0;
+    while (tid < 8)
+    {
+        // check that a BA agreement is established with the receiver for the
+        // considered TID, since ack sequences for UL MU require block ack
+        if (m_apMac->GetBaAgreementEstablishedAsRecipient(info.address, tid))
+        {
+            break;
+        }
+        ++tid;
+    }
+    if (tid == 8)
+    {
+        NS_LOG_DEBUG("No Block Ack agreement established with " << info.address
+                                                                << ": skipping station");
         return false;
     }
 
@@ -309,7 +312,8 @@
 
     if (!mapped)
     {
-        NS_LOG_DEBUG("MLD " << *mldAddr << " has not mapped any TID on link " << +m_linkId);
+        NS_LOG_DEBUG("MLD " << *mldAddr << " has not mapped any TID on link " << +m_linkId
+                            << ": skipping station");
         return false;
     }
 
@@ -324,7 +328,7 @@
                                      m_linkId,
                                      WifiQueueBlockedReason::WAITING_EMLSR_TRANSITION_DELAY)))
     {
-        NS_LOG_INFO("EMLSR client " << *mldAddr << " is using another link");
+        NS_LOG_INFO("EMLSR client " << *mldAddr << " is using another link: skipping station");
         return false;
     }
 
@@ -749,15 +753,7 @@
 
     std::size_t count =
         std::min(static_cast<std::size_t>(m_nStations), m_staListDl[primaryAc].size());
-    std::size_t nCentral26TonesRus;
-    HeRu::RuType ruType =
-        HeRu::GetEqualSizedRusForStations(m_allowedWidth, count, nCentral26TonesRus);
-    NS_ASSERT(count >= 1);
-
-    if (!m_useCentral26TonesRus)
-    {
-        nCentral26TonesRus = 0;
-    }
+    std::size_t nCentral26TonesRus{0};
 
     uint8_t currTid = wifiAcList.at(primaryAc).GetHighTid();
 
@@ -809,6 +805,7 @@
     ruAllocations.resize(numRuAllocs);
     NS_ASSERT((m_candidates.size() % numRuAllocs) == 0);
 
+    RuType ruType{RuType::RU_TYPE_MAX};
     while (staIt != m_staListDl[primaryAc].end() &&
            m_candidates.size() <
                std::min(static_cast<std::size_t>(m_nStations), count + nCentral26TonesRus))
@@ -823,8 +820,6 @@
             continue;
         }
 
-        HeRu::RuType currRuType = (m_candidates.size() < count ? ruType : HeRu::RU_26_TONE);
-
         // check if the AP has at least one frame to be sent to the current station
         for (uint8_t tid : tids)
         {
@@ -852,17 +847,37 @@
                     WifiTxVector txVectorCopy = m_txParams.m_txVector;
 
                     // the first candidate STA determines the preamble type for the DL MU PPDU
-                    if (m_candidates.empty() &&
-                        suTxVector.GetPreambleType() == WIFI_PREAMBLE_EHT_MU)
+                    if (m_candidates.empty())
                     {
-                        m_txParams.m_txVector.SetPreambleType(WIFI_PREAMBLE_EHT_MU);
-                        m_txParams.m_txVector.SetEhtPpduType(0); // indicates DL OFDMA transmission
+                        WifiModulationClass mc = WIFI_MOD_CLASS_HE;
+                        if (suTxVector.GetPreambleType() == WIFI_PREAMBLE_EHT_MU)
+                        {
+                            m_txParams.m_txVector.SetPreambleType(WIFI_PREAMBLE_EHT_MU);
+                            m_txParams.m_txVector.SetEhtPpduType(
+                                0); // indicates DL OFDMA transmission
+                            mc = WIFI_MOD_CLASS_EHT;
+                        }
+                        ruType = WifiRu::GetEqualSizedRusForStations(m_allowedWidth,
+                                                                     count,
+                                                                     nCentral26TonesRus,
+                                                                     mc);
+                        NS_ASSERT(count >= 1);
+                        if (!m_useCentral26TonesRus)
+                        {
+                            nCentral26TonesRus = 0;
+                        }
                     }
 
-                    m_txParams.m_txVector.SetHeMuUserInfo(staIt->aid,
-                                                          {{currRuType, 1, true},
-                                                           suTxVector.GetMode().GetMcsValue(),
-                                                           suTxVector.GetNss()});
+                    NS_ASSERT(ruType != RuType::RU_TYPE_MAX);
+                    const auto currRuType =
+                        (m_candidates.size() < count ? ruType : RuType::RU_26_TONE);
+                    const auto ru =
+                        (m_txParams.m_txVector.GetPreambleType() == WIFI_PREAMBLE_EHT_MU)
+                            ? WifiRu::RuSpec(EhtRu::RuSpec{currRuType, 1, true, true})
+                            : WifiRu::RuSpec(HeRu::RuSpec{currRuType, 1, true});
+                    m_txParams.m_txVector.SetHeMuUserInfo(
+                        staIt->aid,
+                        {ru, suTxVector.GetMode().GetMcsValue(), suTxVector.GetNss()});
 
                     if (!GetHeFem(m_linkId)->TryAddMpdu(mpdu, m_txParams, actualAvailableTime))
                     {
@@ -915,8 +930,10 @@
     // compute how many stations can be granted an RU and the RU size
     std::size_t nRusAssigned = m_candidates.size();
     std::size_t nCentral26TonesRus;
-    HeRu::RuType ruType =
-        HeRu::GetEqualSizedRusForStations(m_allowedWidth, nRusAssigned, nCentral26TonesRus);
+    const auto ruType = WifiRu::GetEqualSizedRusForStations(m_allowedWidth,
+                                                            nRusAssigned,
+                                                            nCentral26TonesRus,
+                                                            txVector.GetModulationClass());
 
     NS_LOG_DEBUG(nRusAssigned << " stations are being assigned a " << ruType << " RU");
 
@@ -934,10 +951,11 @@
     WifiTxVector::HeMuUserInfoMap heMuUserInfoMap;
     std::swap(heMuUserInfoMap, txVector.GetHeMuUserInfoMap());
 
+    const auto mc = IsEht(txVector.GetPreambleType()) ? WIFI_MOD_CLASS_EHT : WIFI_MOD_CLASS_HE;
     auto candidateIt = m_candidates.begin(); // iterator over the list of candidate receivers
-    auto ruSet = HeRu::GetRusOfType(m_allowedWidth, ruType);
+    auto ruSet = WifiRu::GetRusOfType(m_allowedWidth, ruType, mc);
     auto ruSetIt = ruSet.begin();
-    auto central26TonesRus = HeRu::GetCentral26TonesRus(m_allowedWidth, ruType);
+    auto central26TonesRus = WifiRu::GetCentral26TonesRus(m_allowedWidth, ruType, mc);
     auto central26TonesRusIt = central26TonesRus.begin();
 
     for (std::size_t i = 0; i < nRusAssigned + nCentral26TonesRus; i++)
@@ -965,10 +983,10 @@
     NS_LOG_FUNCTION(this << txDuration.As(Time::US) << txVector);
 
     // find how many RUs have been allocated for each RU type
-    std::map<HeRu::RuType, std::size_t> ruMap;
+    std::map<RuType, std::size_t> ruMap;
     for (const auto& userInfo : txVector.GetHeMuUserInfoMap())
     {
-        ruMap.insert({userInfo.second.ru.GetRuType(), 0}).first->second++;
+        ruMap.insert({WifiRu::GetRuType(userInfo.second.ru), 0}).first->second++;
     }
 
     // The amount of credits received by each station equals the TX duration (in
@@ -979,7 +997,7 @@
     double debitsPerMhz =
         txDuration.ToDouble(Time::US) /
         std::accumulate(ruMap.begin(), ruMap.end(), 0, [](uint16_t sum, auto pair) {
-            return sum + pair.second * HeRu::GetBandwidth(pair.first);
+            return sum + pair.second * WifiRu::GetBandwidth(pair.first);
         });
 
     // assign credits to all stations
@@ -995,7 +1013,8 @@
         auto mapIt = txVector.GetHeMuUserInfoMap().find(candidate.first->aid);
         NS_ASSERT(mapIt != txVector.GetHeMuUserInfoMap().end());
 
-        candidate.first->credits -= debitsPerMhz * HeRu::GetBandwidth(mapIt->second.ru.GetRuType());
+        candidate.first->credits -=
+            debitsPerMhz * WifiRu::GetBandwidth(WifiRu::GetRuType(mapIt->second.ru));
     }
 
     // sort the list in decreasing order of credits
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/ht/ht-capabilities.cc ns-3.45/src/wifi/model/ht/ht-capabilities.cc
--- ns-3.44/src/wifi/model/ht/ht-capabilities.cc	2025-03-09 16:55:49.791372500 -0700
+++ ns-3.45/src/wifi/model/ht/ht-capabilities.cc	2025-06-01 20:34:45.618702200 -0700
@@ -89,12 +89,18 @@
 void
 HtCapabilities::Print(std::ostream& os) const
 {
-    os << "HT Capabilities=" << bool(GetLdpc()) << "|" << bool(GetSupportedChannelWidth()) << "|"
-       << bool(GetShortGuardInterval20()) << "|";
+    os << "HT Capabilities=[LDPC: " << +m_ldpc
+       << ", Supported Channel Width: " << +m_supportedChannelWidth
+       << ", SGI 20MHz: " << +m_shortGuardInterval20 << ", SGI 40MHz: " << +m_shortGuardInterval40
+       << ", Supported MCS Set: {";
     for (uint8_t i = 0; i < MAX_SUPPORTED_MCS; i++)
     {
-        os << IsSupportedMcs(i) << " ";
+        if (IsSupportedMcs(i))
+        {
+            os << +i << " ";
+        }
     }
+    os << "}]";
 }
 
 void
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/ht/ht-capabilities.h ns-3.45/src/wifi/model/ht/ht-capabilities.h
--- ns-3.44/src/wifi/model/ht/ht-capabilities.h	2025-03-09 16:55:49.791372500 -0700
+++ ns-3.45/src/wifi/model/ht/ht-capabilities.h	2025-06-01 20:34:45.618702200 -0700
@@ -25,7 +25,7 @@
  * @brief The HT Capabilities Information Element
  * @ingroup wifi
  *
- * This class knows how to serialise and deserialise the HT Capabilities Information Element
+ * This class knows how to serialize and deserialize the HT Capabilities Information Element
  */
 class HtCapabilities : public WifiInformationElement
 {
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/ht/ht-configuration.cc ns-3.45/src/wifi/model/ht/ht-configuration.cc
--- ns-3.44/src/wifi/model/ht/ht-configuration.cc	2025-03-09 16:55:49.791372500 -0700
+++ ns-3.45/src/wifi/model/ht/ht-configuration.cc	2025-06-01 20:34:45.618702200 -0700
@@ -47,11 +47,15 @@
                           BooleanValue(false),
                           MakeBooleanAccessor(&HtConfiguration::m_ldpcSupported),
                           MakeBooleanChecker())
+            // NS_DEPRECATED_3_45
             .AddAttribute("Support40MHzOperation",
                           "Whether or not 40 MHz operation is to be supported.",
                           BooleanValue(true),
                           MakeBooleanAccessor(&HtConfiguration::m_40MHzSupported),
-                          MakeBooleanChecker());
+                          MakeBooleanChecker(),
+                          TypeId::SupportLevel::OBSOLETE,
+                          "Set an initial channel via WifiPhy::ChannelSettings whose width "
+                          "corresponds to the maximum desired width instead");
     return tid;
 }
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/ht/ht-configuration.h ns-3.45/src/wifi/model/ht/ht-configuration.h
--- ns-3.44/src/wifi/model/ht/ht-configuration.h	2025-03-09 16:55:49.791372500 -0700
+++ ns-3.45/src/wifi/model/ht/ht-configuration.h	2025-06-01 20:34:45.618702200 -0700
@@ -77,14 +77,14 @@
      * @param enable true if both 20 MHz and 40 MHz operation is to be supported,
      *               false if only 20 MHz operation is to be supported
      */
-    NS_DEPRECATED_3_44("Set the m_40MHzSupported member variable instead")
+    NS_DEPRECATED_3_44("Set the ChannelSettings of the WifiPhy instead")
     void Set40MHzOperationSupported(bool enable);
 
     /**
      * @return true if both 20 MHz and 40 MHz operation is supported, false if
      *         only 20 MHz operation is supported
      */
-    NS_DEPRECATED_3_44("Get the m_40MHzSupported member variable instead")
+    NS_DEPRECATED_3_45("Use WifiPhy::GetChannelWidth instead")
     bool Get40MHzOperationSupported() const;
 
     bool m_sgiSupported;   ///< flag whether short guard interval is supported
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/ht/ht-frame-exchange-manager.cc ns-3.45/src/wifi/model/ht/ht-frame-exchange-manager.cc
--- ns-3.44/src/wifi/model/ht/ht-frame-exchange-manager.cc	2025-03-09 16:55:49.791372500 -0700
+++ ns-3.45/src/wifi/model/ht/ht-frame-exchange-manager.cc	2025-06-01 20:34:45.619702300 -0700
@@ -624,18 +624,21 @@
         }
     }
 
-    if (selectedBar && selectedBar->GetHeader().GetAddr2() != m_self)
+    if (selectedBar)
     {
-        // the selected BAR has MLD addresses in Addr1/Addr2, replace them with link addresses
-        // and move to the appropriate container queue
-        NS_ASSERT(selectedBar->GetHeader().GetAddr2() == m_mac->GetAddress());
-        DequeueMpdu(selectedBar);
-        const auto currAddr1 = selectedBar->GetHeader().GetAddr1();
-        auto addr1 =
-            GetWifiRemoteStationManager()->GetAffiliatedStaAddress(currAddr1).value_or(currAddr1);
-        selectedBar->GetHeader().SetAddr1(addr1);
-        selectedBar->GetHeader().SetAddr2(m_self);
-        queue->Enqueue(selectedBar);
+        if (const auto currAddr1 = selectedBar->GetHeader().GetAddr1();
+            currAddr1 == m_mac->GetMldAddress(currAddr1))
+        {
+            // the selected BAR has MLD addresses in Addr1/Addr2, replace them with link addresses
+            // and move to the appropriate container queue
+            DequeueMpdu(selectedBar);
+            const auto addr1 =
+                GetWifiRemoteStationManager()->GetAffiliatedStaAddress(currAddr1).value_or(
+                    currAddr1);
+            selectedBar->GetHeader().SetAddr1(addr1);
+            selectedBar->GetHeader().SetAddr2(m_self);
+            queue->Enqueue(selectedBar);
+        }
     }
 
     return selectedBar;
@@ -1031,19 +1034,28 @@
     NS_LOG_FUNCTION(this << txDuration << &txParams);
 
     NS_ASSERT(m_edca);
+    NS_ASSERT(txParams.m_acknowledgment &&
+              txParams.m_acknowledgment->acknowledgmentTime.has_value());
+
+    const auto singleDurationId = *txParams.m_acknowledgment->acknowledgmentTime;
 
     if (m_edca->GetTxopLimit(m_linkId).IsZero())
     {
-        NS_ASSERT(txParams.m_acknowledgment &&
-                  txParams.m_acknowledgment->acknowledgmentTime.has_value());
-        return *txParams.m_acknowledgment->acknowledgmentTime;
+        return singleDurationId;
     }
 
     // under multiple protection settings, if the TXOP limit is not null, Duration/ID
     // is set to cover the remaining TXOP time (Sec. 9.2.5.2 of 802.11-2016).
     // The TXOP holder may exceed the TXOP limit in some situations (Sec. 10.22.2.8
     // of 802.11-2016)
-    return std::max(m_edca->GetRemainingTxop(m_linkId) - txDuration, Seconds(0));
+    auto duration = std::max(m_edca->GetRemainingTxop(m_linkId) - txDuration, Seconds(0));
+
+    if (m_protectSingleExchange)
+    {
+        duration = std::min(duration, singleDurationId + m_singleExchangeProtectionSurplus);
+    }
+
+    return duration;
 }
 
 void
@@ -1123,7 +1135,7 @@
         return;
     }
 
-    DoCtsTimeout(m_psdu);
+    DoCtsTimeout(WifiPsduMap{{SU_STA_ID, m_psdu}});
     m_psdu = nullptr;
 }
 
@@ -1364,14 +1376,8 @@
         txVector.SetAggregation(true);
     }
 
-    auto txDuration = WifiPhy::CalculateTxDuration(psdu, txVector, m_phy->GetPhyBand());
-    // The TXNAV timer is a single timer, shared by the EDCAFs within a STA, that is initialized
-    // with the duration from the Duration/ID field in the frame most recently successfully
-    // transmitted by the TXOP holder, except for PS-Poll frames. (Sec.10.23.2.2 IEEE 802.11-2020)
-    if (!psdu->GetHeader(0).IsPsPoll())
-    {
-        m_txNav = Max(m_txNav, Simulator::Now() + txDuration + psdu->GetDuration());
-    }
+    const auto txDuration = WifiPhy::CalculateTxDuration(psdu, txVector, m_phy->GetPhyBand());
+    SetTxNav(*psdu->begin(), txDuration);
 
     m_phy->Send(psdu, txVector);
 }
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/ht/ht-operation.cc ns-3.45/src/wifi/model/ht/ht-operation.cc
--- ns-3.44/src/wifi/model/ht/ht-operation.cc	2025-03-09 16:55:49.791372500 -0700
+++ ns-3.45/src/wifi/model/ht/ht-operation.cc	2025-06-01 20:34:45.619702300 -0700
@@ -54,18 +54,20 @@
 void
 HtOperation::Print(std::ostream& os) const
 {
-    os << "HT Operation=" << bool(GetPrimaryChannel()) << "|" << +GetSecondaryChannelOffset() << "|"
-       << bool(GetStaChannelWidth()) << "|" << bool(GetRifsMode()) << "|" << +GetHtProtection()
-       << "|" << bool(GetNonGfHtStasPresent()) << "|" << bool(GetObssNonHtStasPresent()) << "|"
-       << bool(GetDualBeacon()) << "|" << bool(GetDualCtsProtection()) << "|"
-       << bool(GetStbcBeacon()) << "|" << bool(GetLSigTxopProtectionFullSupport()) << "|"
-       << bool(GetPcoActive()) << "|" << bool(GetPhase()) << "|" << GetRxHighestSupportedDataRate()
-       << "|" << bool(GetTxMcsSetDefined()) << "|" << bool(GetTxRxMcsSetUnequal()) << "|"
-       << +GetTxMaxNSpatialStreams() << "|" << bool(GetTxUnequalModulation()) << "|";
+    os << "HT Operation=[Primary Channel: " << +m_primaryChannel
+       << ", Secondary Channel Offset: " << +m_secondaryChannelOffset
+       << ", STA Channel Width: " << +m_staChannelWidth << ", HT Protection: " << +m_htProtection
+       << ", OBSS NON HT STAs Present: " << +m_obssNonHtStasPresent
+       << ", L-SIG TXOP Protection Full Support: " << +m_lSigTxopProtectionFullSupport
+       << ", RX Highest Supported Data Rate: " << m_rxHighestSupportedDataRate << ", MCS Set: {";
     for (uint8_t i = 0; i < MAX_SUPPORTED_MCS; i++)
     {
-        os << IsSupportedMcs(i) << " ";
+        if (IsSupportedMcs(i))
+        {
+            os << +i << " ";
+        }
     }
+    os << "}]";
 }
 
 uint16_t
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/ht/ht-operation.h ns-3.45/src/wifi/model/ht/ht-operation.h
--- ns-3.44/src/wifi/model/ht/ht-operation.h	2025-03-09 16:55:49.791372500 -0700
+++ ns-3.45/src/wifi/model/ht/ht-operation.h	2025-06-01 20:34:45.619702300 -0700
@@ -33,7 +33,7 @@
  * @brief The HT Operation Information Element
  * @ingroup wifi
  *
- * This class knows how to serialise and deserialise
+ * This class knows how to serialize and deserialize
  * the HT Operation Information Element
  */
 class HtOperation : public WifiInformationElement
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/ht/ht-phy.cc ns-3.45/src/wifi/model/ht/ht-phy.cc
--- ns-3.44/src/wifi/model/ht/ht-phy.cc	2025-03-09 16:55:49.791372500 -0700
+++ ns-3.45/src/wifi/model/ht/ht-phy.cc	2025-06-01 20:34:45.619702300 -0700
@@ -40,6 +40,13 @@
                              WIFI_PPDU_FIELD_DATA } }
 };
 
+/**
+ * \brief map a given secondary channel width to its channel list type
+ */
+const std::map<MHz_u, WifiChannelListType> htSecondaryChannels {
+    {20, WIFI_CHANLIST_SECONDARY},
+};
+
 // clang-format on
 
 HtPhy::HtPhy(uint8_t maxNss /* = 1 */, bool buildModeList /* = true */)
@@ -312,8 +319,8 @@
     case LAST_MPDU_IN_AGGREGATE: {
         // last packet in an A-MPDU
         uint32_t totalSize = totalAmpduSize + size;
-        numSymbols = lrint(
-            stbc * ceil((service + totalSize * 8.0 + 6 * nes) / (stbc * numDataBitsPerSymbol)));
+        numSymbols =
+            stbc * ceil((service + totalSize * 8.0 + 6 * nes) / (stbc * numDataBitsPerSymbol));
         NS_ASSERT(totalAmpduNumSymbols <= numSymbols);
         numSymbols -= totalAmpduNumSymbols;
         if (incFlag)
@@ -329,7 +336,7 @@
         // The number of OFDM symbols in the data field when BCC encoding
         // is used is given in equation 19-32 of the IEEE 802.11-2016 standard.
         numSymbols =
-            lrint(stbc * ceil((service + size * 8.0 + 6.0 * nes) / (stbc * numDataBitsPerSymbol)));
+            stbc * ceil((service + size * 8.0 + 6.0 * nes) / (stbc * numDataBitsPerSymbol));
         break;
     }
     default:
@@ -813,6 +820,71 @@
     return 65535;
 }
 
+const std::map<MHz_u, WifiChannelListType>&
+HtPhy::GetCcaSecondaryChannels() const
+{
+    return htSecondaryChannels;
+}
+
+std::vector<MHz_u>
+HtPhy::GetCcaSecondaryWidths(const Ptr<const WifiPpdu> ppdu) const
+{
+    std::vector<MHz_u> secondaryWidthsToCheck{};
+    if (ppdu)
+    {
+        for (const auto& secondaryChannel : GetCcaSecondaryChannels())
+        {
+            const auto secondaryWidth = secondaryChannel.first;
+            if (secondaryWidth >= m_wifiPhy->GetChannelWidth())
+            {
+                break;
+            }
+            const MHz_u secondaryMinFreq =
+                m_wifiPhy->GetOperatingChannel().GetSecondaryChannelCenterFrequency(
+                    secondaryWidth) -
+                (secondaryWidth / 2);
+            const MHz_u secondaryMaxFreq =
+                m_wifiPhy->GetOperatingChannel().GetSecondaryChannelCenterFrequency(
+                    secondaryWidth) +
+                (secondaryWidth / 2);
+            if (ppdu->DoesOverlapChannel(secondaryMinFreq, secondaryMaxFreq))
+            {
+                secondaryWidthsToCheck.push_back(secondaryWidth);
+            }
+        }
+    }
+    else
+    {
+        for (MHz_u secondaryWidth = 20; secondaryWidth < m_wifiPhy->GetChannelWidth();
+             secondaryWidth *= 2)
+        {
+            secondaryWidthsToCheck.push_back(secondaryWidth);
+        }
+    }
+    return secondaryWidthsToCheck;
+}
+
+PhyEntity::CcaIndication
+HtPhy::GetCcaIndicationOnSecondary(const Ptr<const WifiPpdu> ppdu)
+{
+    const auto& secondaryChannels = GetCcaSecondaryChannels();
+    const auto secondaryWidthsToCheck = GetCcaSecondaryWidths(ppdu);
+    for (auto secondaryWidth : secondaryWidthsToCheck)
+    {
+        const auto channelType = secondaryChannels.at(secondaryWidth);
+
+        const auto ccaThreshold = GetCcaThreshold(ppdu, channelType);
+        const auto band = GetSecondaryBand(secondaryWidth);
+        if (const auto delayUntilCcaEnd = GetDelayUntilCcaEnd(ccaThreshold, band);
+            delayUntilCcaEnd.IsStrictlyPositive())
+        {
+            return std::make_pair(delayUntilCcaEnd, channelType);
+        }
+    }
+
+    return std::nullopt;
+}
+
 PhyEntity::CcaIndication
 HtPhy::GetCcaIndication(const Ptr<const WifiPpdu> ppdu)
 {
@@ -820,6 +892,7 @@
     {
         return OfdmPhy::GetCcaIndication(ppdu);
     }
+
     auto ccaThreshold = GetCcaThreshold(ppdu, WIFI_CHANLIST_PRIMARY);
     auto delayUntilCcaEnd = GetDelayUntilCcaEnd(ccaThreshold, GetPrimaryBand(MHz_u{20}));
     if (delayUntilCcaEnd.IsStrictlyPositive())
@@ -828,6 +901,7 @@
             delayUntilCcaEnd,
             WIFI_CHANLIST_PRIMARY); // if Primary is busy, ignore CCA for Secondary
     }
+
     if (ppdu)
     {
         const MHz_u primaryWidth{20};
@@ -847,24 +921,7 @@
         }
     }
 
-    const MHz_u secondaryWidth{20};
-    const MHz_u s20MinFreq =
-        m_wifiPhy->GetOperatingChannel().GetSecondaryChannelCenterFrequency(secondaryWidth) -
-        (secondaryWidth / 2);
-    const MHz_u s20MaxFreq =
-        m_wifiPhy->GetOperatingChannel().GetSecondaryChannelCenterFrequency(secondaryWidth) +
-        (secondaryWidth / 2);
-    if (!ppdu || ppdu->DoesOverlapChannel(s20MinFreq, s20MaxFreq))
-    {
-        ccaThreshold = GetCcaThreshold(ppdu, WIFI_CHANLIST_SECONDARY);
-        delayUntilCcaEnd = GetDelayUntilCcaEnd(ccaThreshold, GetSecondaryBand(MHz_u{20}));
-        if (delayUntilCcaEnd.IsStrictlyPositive())
-        {
-            return std::make_pair(delayUntilCcaEnd, WIFI_CHANLIST_SECONDARY);
-        }
-    }
-
-    return std::nullopt;
+    return GetCcaIndicationOnSecondary(ppdu);
 }
 
 } // namespace ns3
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/ht/ht-phy.h ns-3.45/src/wifi/model/ht/ht-phy.h
--- ns-3.44/src/wifi/model/ht/ht-phy.h	2025-03-09 16:55:49.791372500 -0700
+++ ns-3.45/src/wifi/model/ht/ht-phy.h	2025-06-01 20:34:45.619702300 -0700
@@ -461,6 +461,32 @@
     CcaIndication GetCcaIndication(const Ptr<const WifiPpdu> ppdu) override;
 
     /**
+     * Get the secondary channel widths and their corresponding channel list types that are
+     * supported by the PHY entity.
+     *
+     * @return the channel list type per supported secondary channel width
+     */
+    virtual const std::map<MHz_u, WifiChannelListType>& GetCcaSecondaryChannels() const;
+
+    /**
+     * Get the widths of the secondary channels to inspect for CCA indication.
+     *
+     * @param ppdu the incoming PPDU or nullptr for any signal
+     * @return the widths of the secondary channels to inspect for CCA indication
+     */
+    std::vector<MHz_u> GetCcaSecondaryWidths(const Ptr<const WifiPpdu> ppdu) const;
+
+    /**
+     * Get CCA end time and its corresponding channel list type when a new signal not occupying the
+     * primary 20 MHz channel has been received by the PHY.
+     *
+     * @param ppdu the incoming PPDU or nullptr for any signal
+     * @return CCA end time and its corresponding channel list type or std::nullopt if all channel
+     * list types are IDLE
+     */
+    virtual PhyEntity::CcaIndication GetCcaIndicationOnSecondary(const Ptr<const WifiPpdu> ppdu);
+
+    /**
      * Build mode list.
      * Should be redone whenever the maximum MCS index per spatial stream
      * ,or any other important parameter having an impact on the MCS index
@@ -567,7 +593,7 @@
                                //!< MCS indices)
 
     static const PpduFormats m_htPpduFormats; //!< HT PPDU formats
-};                                            // class HtPhy
+};
 
 } // namespace ns3
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/ht/ht-ppdu.h ns-3.45/src/wifi/model/ht/ht-ppdu.h
--- ns-3.44/src/wifi/model/ht/ht-ppdu.h	2025-03-09 16:55:49.791372500 -0700
+++ ns-3.45/src/wifi/model/ht/ht-ppdu.h	2025-06-01 20:34:45.619702300 -0700
@@ -109,7 +109,9 @@
         uint16_t m_htLength;   ///< HT length
         uint8_t m_aggregation; ///< Aggregation
         uint8_t m_sgi;         ///< Short Guard Interval
-    };                         // HtSigHeader
+
+        // end of class HtSigHeader
+    };
 
     /**
      * Create an HT PPDU.
@@ -172,7 +174,7 @@
                                    const HtSigHeader& htSig) const;
 
     HtSigHeader m_htSig; //!< the HT-SIG PHY header
-};                       // class HtPpdu
+};
 
 } // namespace ns3
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/interference-helper.cc ns-3.45/src/wifi/model/interference-helper.cc
--- ns-3.44/src/wifi/model/interference-helper.cc	2025-03-09 16:55:49.791372500 -0700
+++ ns-3.45/src/wifi/model/interference-helper.cc	2025-06-01 20:34:45.619702300 -0700
@@ -795,19 +795,16 @@
 }
 
 InterferenceHelper::NiChanges::iterator
-InterferenceHelper::GetNextPosition(Time moment, NiChangesPerBand::iterator niIt)
+InterferenceHelper::GetNextPosition(Time moment, NiChangesPerBand::iterator niIt) const
 {
     return niIt->second.upper_bound(moment);
 }
 
 InterferenceHelper::NiChanges::iterator
-InterferenceHelper::GetPreviousPosition(Time moment, NiChangesPerBand::iterator niIt)
+InterferenceHelper::GetPreviousPosition(Time moment, NiChangesPerBand::iterator niIt) const
 {
-    auto it = GetNextPosition(moment, niIt);
-    // This is safe since there is always an NiChange at time 0,
-    // before moment.
-    --it;
-    return it;
+    // This is safe since there is always an NiChange at time 0, before moment.
+    return std::prev(GetNextPosition(moment, niIt));
 }
 
 InterferenceHelper::NiChanges::iterator
@@ -836,8 +833,7 @@
             continue;
         }
         NS_ASSERT(niIt->second.size() > 1);
-        auto it = GetPreviousPosition(endTime, niIt);
-        it--;
+        auto it = std::prev(GetPreviousPosition(endTime, niIt));
         m_firstPowers.find(niIt->first)->second = it->second.GetPower();
     }
 }
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/interference-helper.h ns-3.45/src/wifi/model/interference-helper.h
--- ns-3.44/src/wifi/model/interference-helper.h	2025-03-09 16:55:49.791372500 -0700
+++ ns-3.45/src/wifi/model/interference-helper.h	2025-06-01 20:34:45.619702300 -0700
@@ -527,7 +527,7 @@
      * @param niIt iterator of the band to check
      * @returns an iterator to the list of NiChanges
      */
-    NiChanges::iterator GetNextPosition(Time moment, NiChangesPerBand::iterator niIt);
+    NiChanges::iterator GetNextPosition(Time moment, NiChangesPerBand::iterator niIt) const;
     /**
      * Returns an iterator to the last NiChange that is before than moment
      *
@@ -535,7 +535,7 @@
      * @param niIt iterator of the band to check
      * @returns an iterator to the list of NiChanges
      */
-    NiChanges::iterator GetPreviousPosition(Time moment, NiChangesPerBand::iterator niIt);
+    NiChanges::iterator GetPreviousPosition(Time moment, NiChangesPerBand::iterator niIt) const;
 
     /**
      * Add NiChange to the list at the appropriate position and
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/mgt-action-headers.cc ns-3.45/src/wifi/model/mgt-action-headers.cc
--- ns-3.44/src/wifi/model/mgt-action-headers.cc	2025-03-09 16:55:49.795372700 -0700
+++ ns-3.45/src/wifi/model/mgt-action-headers.cc	2025-06-01 20:34:45.619702300 -0700
@@ -1767,7 +1767,8 @@
                 : (width == MHz_u{40})                     ? 1
                 : (width == MHz_u{80})                     ? 2
                 : (width == MHz_u{160})                    ? 3
-                                                           : 4;
+                : (width == MHz_u{320})                    ? 4
+                                                           : 5;
 }
 
 MHz_u
@@ -1783,6 +1784,8 @@
         return MHz_u{80};
     case 3:
         return MHz_u{160};
+    case 4:
+        return MHz_u{320};
     default:
         NS_ABORT_MSG("Reserved value: " << +m_chWidth);
     }
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/non-ht/dsss-parameter-set.cc ns-3.45/src/wifi/model/non-ht/dsss-parameter-set.cc
--- ns-3.44/src/wifi/model/non-ht/dsss-parameter-set.cc	2025-03-09 16:55:49.795372700 -0700
+++ ns-3.45/src/wifi/model/non-ht/dsss-parameter-set.cc	2025-06-01 20:34:45.620702300 -0700
@@ -48,4 +48,10 @@
     return length;
 }
 
+void
+DsssParameterSet::Print(std::ostream& os) const
+{
+    os << "DSSS Parameter Set=[Current Channel: " << +m_currentChannel << "]";
+}
+
 } // namespace ns3
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/non-ht/dsss-parameter-set.h ns-3.45/src/wifi/model/non-ht/dsss-parameter-set.h
--- ns-3.44/src/wifi/model/non-ht/dsss-parameter-set.h	2025-03-09 16:55:49.795372700 -0700
+++ ns-3.45/src/wifi/model/non-ht/dsss-parameter-set.h	2025-06-01 20:34:45.620702300 -0700
@@ -18,7 +18,7 @@
  * @brief The DSSS Parameter Set
  * @ingroup wifi
  *
- * This class knows how to serialise and deserialise the DSSS Parameter Set.
+ * This class knows how to serialize and deserialize the DSSS Parameter Set.
  */
 class DsssParameterSet : public WifiInformationElement
 {
@@ -39,6 +39,7 @@
     uint16_t GetInformationFieldSize() const override;
     void SerializeInformationField(Buffer::Iterator start) const override;
     uint16_t DeserializeInformationField(Buffer::Iterator start, uint16_t length) override;
+    void Print(std::ostream& os) const override;
 
     uint8_t m_currentChannel; ///< current channel number
 };
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/non-ht/dsss-phy.cc ns-3.45/src/wifi/model/non-ht/dsss-phy.cc
--- ns-3.44/src/wifi/model/non-ht/dsss-phy.cc	2025-03-09 16:55:49.795372700 -0700
+++ ns-3.45/src/wifi/model/non-ht/dsss-phy.cc	2025-06-01 20:34:45.620702300 -0700
@@ -183,8 +183,7 @@
                             double& /* totalAmpduNumSymbols */,
                             uint16_t /* staId */) const
 {
-    return MicroSeconds(
-        lrint(ceil((size * 8.0) / (txVector.GetMode().GetDataRate(MHz_u{22}) / 1.0e6))));
+    return MicroSeconds(ceil((size * 8.0) / (txVector.GetMode().GetDataRate(MHz_u{22}) / 1.0e6)));
 }
 
 Ptr<WifiPpdu>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/non-ht/dsss-phy.h ns-3.45/src/wifi/model/non-ht/dsss-phy.h
--- ns-3.44/src/wifi/model/non-ht/dsss-phy.h	2025-03-09 16:55:49.795372700 -0700
+++ ns-3.45/src/wifi/model/non-ht/dsss-phy.h	2025-06-01 20:34:45.620702300 -0700
@@ -199,7 +199,7 @@
     static const ModulationLookupTable
         m_dsssModulationLookupTable; //!< lookup table to retrieve code rate and constellation size
                                      //!< corresponding to a unique name of modulation
-};                                   // class DsssPhy
+};
 
 } // namespace ns3
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/non-ht/dsss-ppdu.h ns-3.45/src/wifi/model/non-ht/dsss-ppdu.h
--- ns-3.44/src/wifi/model/non-ht/dsss-ppdu.h	2025-03-09 16:55:49.795372700 -0700
+++ ns-3.45/src/wifi/model/non-ht/dsss-ppdu.h	2025-06-01 20:34:45.620702300 -0700
@@ -70,7 +70,9 @@
       private:
         uint8_t m_rate;    ///< RATE field
         uint16_t m_length; ///< LENGTH field
-    };                     // class DsssSigHeader
+
+        // end of class DsssSigHeader
+    };
 
     /**
      * Create a DSSS (HR/DSSS) PPDU.
@@ -122,7 +124,7 @@
                                            const DsssSigHeader& dsssSig) const;
 
     DsssSigHeader m_dsssSig; //!< the DSSS SIG PHY header
-};                           // class DsssPpdu
+};
 
 } // namespace ns3
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/non-ht/erp-information.cc ns-3.45/src/wifi/model/non-ht/erp-information.cc
--- ns-3.44/src/wifi/model/non-ht/erp-information.cc	2025-03-09 16:55:49.795372700 -0700
+++ ns-3.45/src/wifi/model/non-ht/erp-information.cc	2025-06-01 20:34:45.620702300 -0700
@@ -78,13 +78,12 @@
     return length;
 }
 
-std::ostream&
-operator<<(std::ostream& os, const ErpInformation& erpInformation)
+void
+ErpInformation::Print(std::ostream& os) const
 {
-    os << bool(erpInformation.GetBarkerPreambleMode()) << "|"
-       << bool(erpInformation.GetUseProtection()) << "|" << bool(erpInformation.GetNonErpPresent());
-
-    return os;
+    os << "ERP Information=[Barker Preamble Mode: " << GetBarkerPreambleMode()
+       << ", Use Protection: " << GetUseProtection() << ", Non ERP Present: " << GetNonErpPresent()
+       << "]";
 }
 
 } // namespace ns3
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/non-ht/erp-information.h ns-3.45/src/wifi/model/non-ht/erp-information.h
--- ns-3.44/src/wifi/model/non-ht/erp-information.h	2025-03-09 16:55:49.795372700 -0700
+++ ns-3.45/src/wifi/model/non-ht/erp-information.h	2025-06-01 20:34:45.620702300 -0700
@@ -18,7 +18,7 @@
  * @brief The ErpInformation Information Element
  * @ingroup wifi
  *
- * This class knows how to serialise and deserialise the ErpInformation Information Element.
+ * This class knows how to serialize and deserialize the ErpInformation Information Element.
  */
 class ErpInformation : public WifiInformationElement
 {
@@ -30,6 +30,7 @@
     uint16_t GetInformationFieldSize() const override;
     void SerializeInformationField(Buffer::Iterator start) const override;
     uint16_t DeserializeInformationField(Buffer::Iterator start, uint16_t length) override;
+    void Print(std::ostream& os) const override;
 
     /**
      * Set the Barker_Preamble_Mode field in the ErpInformation information element.
@@ -74,16 +75,6 @@
     uint8_t m_erpInformation; ///< ERP information
 };
 
-/**
- * output stream output operator
- *
- * @param os output stream
- * @param erpInformation the ERP Information
- *
- * @returns output stream
- */
-std::ostream& operator<<(std::ostream& os, const ErpInformation& erpInformation);
-
 } // namespace ns3
 
 #endif /* ERP_INFORMATION_H */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/non-ht/erp-ofdm-phy.h ns-3.45/src/wifi/model/non-ht/erp-ofdm-phy.h
--- ns-3.44/src/wifi/model/non-ht/erp-ofdm-phy.h	2025-03-09 16:55:49.795372700 -0700
+++ ns-3.45/src/wifi/model/non-ht/erp-ofdm-phy.h	2025-06-01 20:34:45.621702200 -0700
@@ -200,7 +200,7 @@
     static const ModulationLookupTable
         m_erpOfdmModulationLookupTable; //!< lookup table to retrieve code rate and constellation
                                         //!< size corresponding to a unique name of modulation
-};                                      // class ErpOfdmPhy
+};
 
 } // namespace ns3
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/non-ht/erp-ofdm-ppdu.h ns-3.45/src/wifi/model/non-ht/erp-ofdm-ppdu.h
--- ns-3.44/src/wifi/model/non-ht/erp-ofdm-ppdu.h	2025-03-09 16:55:49.795372700 -0700
+++ ns-3.45/src/wifi/model/non-ht/erp-ofdm-ppdu.h	2025-06-01 20:34:45.621702200 -0700
@@ -50,7 +50,7 @@
 
   private:
     void SetTxVectorFromLSigHeader(WifiTxVector& txVector, const LSigHeader& lSig) const override;
-}; // class ErpOfdmPpdu
+};
 
 } // namespace ns3
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/non-ht/ofdm-phy.cc ns-3.45/src/wifi/model/non-ht/ofdm-phy.cc
--- ns-3.44/src/wifi/model/non-ht/ofdm-phy.cc	2025-03-09 16:55:49.795372700 -0700
+++ ns-3.45/src/wifi/model/non-ht/ofdm-phy.cc	2025-06-01 20:34:45.621702200 -0700
@@ -260,8 +260,7 @@
 
     // The number of OFDM symbols in the data field when BCC encoding
     // is used is given in equation 19-32 of the IEEE 802.11-2016 standard.
-    double numSymbols =
-        lrint(ceil((GetNumberServiceBits() + size * 8.0 + 6.0) / (numDataBitsPerSymbol)));
+    double numSymbols = ceil((GetNumberServiceBits() + size * 8.0 + 6.0) / (numDataBitsPerSymbol));
 
     Time payloadDuration =
         FemtoSeconds(static_cast<uint64_t>(numSymbols * symbolDuration.GetFemtoSeconds()));
@@ -617,7 +616,7 @@
                            double codingRate)
 {
     double symbolRate = (1e9 / static_cast<double>(symbolDuration.GetNanoSeconds()));
-    return lrint(ceil(symbolRate * usableSubCarriers * numberOfBitsPerSubcarrier * codingRate));
+    return ceil(symbolRate * usableSubCarriers * numberOfBitsPerSubcarrier * codingRate);
 }
 
 uint16_t
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/non-ht/ofdm-phy.h ns-3.45/src/wifi/model/non-ht/ofdm-phy.h
--- ns-3.44/src/wifi/model/non-ht/ofdm-phy.h	2025-03-09 16:55:49.795372700 -0700
+++ ns-3.45/src/wifi/model/non-ht/ofdm-phy.h	2025-06-01 20:34:45.621702200 -0700
@@ -443,7 +443,7 @@
     static const ModulationLookupTable
         m_ofdmModulationLookupTable; //!< lookup table to retrieve code rate and constellation size
                                      //!< corresponding to a unique name of modulation
-};                                   // class OfdmPhy
+};
 
 } // namespace ns3
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/non-ht/ofdm-ppdu.h ns-3.45/src/wifi/model/non-ht/ofdm-ppdu.h
--- ns-3.44/src/wifi/model/non-ht/ofdm-ppdu.h	2025-03-09 16:55:49.795372700 -0700
+++ ns-3.45/src/wifi/model/non-ht/ofdm-ppdu.h	2025-06-01 20:34:45.621702200 -0700
@@ -74,7 +74,9 @@
       private:
         uint8_t m_rate;    ///< RATE field
         uint16_t m_length; ///< LENGTH field
-    };                     // class LSigHeader
+
+        // end of class LSigHeader
+    };
 
     /**
      * Create an OFDM PPDU.
@@ -128,7 +130,7 @@
 
     MHz_u m_channelWidth; //!< the channel width used to transmit that PPDU
                           //!< (needed to distinguish 5 MHz, 10 MHz or 20 MHz PPDUs)
-};                        // class OfdmPpdu
+};
 
 } // namespace ns3
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/originator-block-ack-agreement.h ns-3.45/src/wifi/model/originator-block-ack-agreement.h
--- ns-3.44/src/wifi/model/originator-block-ack-agreement.h	2025-03-09 16:55:49.795372700 -0700
+++ ns-3.45/src/wifi/model/originator-block-ack-agreement.h	2025-06-01 20:34:45.621702200 -0700
@@ -48,6 +48,7 @@
    \endverbatim
 */
 // clang-format on
+
 /**
  *
  * See also OriginatorBlockAckAgreement::State
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/phy-entity.cc ns-3.45/src/wifi/model/phy-entity.cc
--- ns-3.44/src/wifi/model/phy-entity.cc	2025-03-09 16:55:49.795372700 -0700
+++ ns-3.45/src/wifi/model/phy-entity.cc	2025-06-01 20:34:45.621702200 -0700
@@ -785,7 +785,7 @@
 PhyEntity::RxPayloadFailed(Ptr<const WifiPsdu> psdu, double snr, const WifiTxVector& txVector)
 {
     NS_LOG_FUNCTION(this << *psdu << txVector << snr);
-    m_state->SwitchFromRxEndError();
+    m_state->SwitchFromRxEndError(txVector);
 }
 
 void
@@ -845,6 +845,27 @@
 }
 
 std::optional<Time>
+PhyEntity::GetTimeToPreambleDetectionEnd() const
+{
+    if (m_endPreambleDetectionEvents.empty())
+    {
+        return {};
+    }
+
+    std::optional<Time> delayUntilPreambleDetectionEnd;
+    for (const auto& endPreambleDetectionEvent : m_endPreambleDetectionEvents)
+    {
+        if (endPreambleDetectionEvent.IsPending())
+        {
+            delayUntilPreambleDetectionEnd =
+                std::max(delayUntilPreambleDetectionEnd.value_or(Time{0}),
+                         Simulator::GetDelayLeft(endPreambleDetectionEvent));
+        }
+    }
+    return delayUntilPreambleDetectionEnd;
+}
+
+std::optional<Time>
 PhyEntity::GetTimeToMacHdrEnd(uint16_t staId) const
 {
     const auto it = m_endOfMacHdrEvents.find(staId);
@@ -1181,12 +1202,6 @@
     m_endOfMacHdrEvents.clear();
 }
 
-bool
-PhyEntity::NoEndPreambleDetectionEvents() const
-{
-    return m_endPreambleDetectionEvents.empty();
-}
-
 void
 PhyEntity::CancelRunningEndPreambleDetectionEvents()
 {
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/phy-entity.h ns-3.45/src/wifi/model/phy-entity.h
--- ns-3.44/src/wifi/model/phy-entity.h	2025-03-09 16:55:49.795372700 -0700
+++ ns-3.45/src/wifi/model/phy-entity.h	2025-06-01 20:34:45.621702200 -0700
@@ -401,21 +401,14 @@
      */
     virtual void CancelAllEvents();
     /**
-     * @return \c true if there is no end preamble detection event running, \c false otherwise
-     */
-    bool NoEndPreambleDetectionEvents() const;
-    /**
      * Cancel all end preamble detection events.
      */
     void CancelRunningEndPreambleDetectionEvents();
 
-    /**
-     * Get the remaining time to the end of the MAC header reception of the next MPDU being
-     * received from the given STA, if any.
-     *
-     * @param staId the STA-ID of the transmitter; equals SU_STA_ID for SU PPDUs
-     * @return the remaining time to the end of the MAC header reception of the next MPDU, if any
-     */
+    /// @copydoc WifiPhy::GetTimeToPreambleDetectionEnd
+    virtual std::optional<Time> GetTimeToPreambleDetectionEnd() const;
+
+    /// @copydoc WifiPhy::GetTimeToMacHdrEnd
     virtual std::optional<Time> GetTimeToMacHdrEnd(uint16_t staId) const;
 
     /**
@@ -972,7 +965,7 @@
                           //!< includes the noise figure)
 
     static uint64_t m_globalPpduUid; //!< Global counter of the PPDU UID
-};                                   // class PhyEntity
+};
 
 /**
  * @brief Stream insertion operator.
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/qos-frame-exchange-manager.cc ns-3.45/src/wifi/model/qos-frame-exchange-manager.cc
--- ns-3.44/src/wifi/model/qos-frame-exchange-manager.cc	2025-03-09 16:55:49.795372700 -0700
+++ ns-3.45/src/wifi/model/qos-frame-exchange-manager.cc	2025-06-01 20:34:45.622702100 -0700
@@ -44,7 +44,21 @@
                           "of QoS data frames sent by non-AP stations",
                           BooleanValue(false),
                           MakeBooleanAccessor(&QosFrameExchangeManager::m_setQosQueueSize),
-                          MakeBooleanChecker());
+                          MakeBooleanChecker())
+            .AddAttribute("ProtectSingleExchange",
+                          "Whether the Duration/ID field in frames establishing protection only "
+                          "covers the immediate frame exchange instead of rest of the TXOP limit "
+                          "when the latter is non-zero",
+                          BooleanValue(false),
+                          MakeBooleanAccessor(&QosFrameExchangeManager::m_protectSingleExchange),
+                          MakeBooleanChecker())
+            .AddAttribute(
+                "SingleExchangeProtectionSurplus",
+                "Additional time to protect beyond end of the immediate frame exchange in case of "
+                "non-zero TXOP limit when a single frame exchange is protected",
+                TimeValue(Time(0)),
+                MakeTimeAccessor(&QosFrameExchangeManager::m_singleExchangeProtectionSurplus),
+                MakeTimeChecker());
     return tid;
 }
 
@@ -101,6 +115,7 @@
                             &QosFrameExchangeManager::NotifyChannelReleased,
                             this,
                             m_edca);
+        ResetTxNav();
         return true;
     }
 
@@ -470,15 +485,18 @@
 {
     NS_LOG_FUNCTION(this << header << size << &txParams << fragmentedPacket);
 
+    const auto singleDurationId =
+        FrameExchangeManager::GetFrameDurationId(header, size, txParams, fragmentedPacket);
+
     // TODO This will be removed once no Txop is installed on a QoS station
     if (!m_edca)
     {
-        return FrameExchangeManager::GetFrameDurationId(header, size, txParams, fragmentedPacket);
+        return singleDurationId;
     }
 
     if (m_edca->GetTxopLimit(m_linkId).IsZero())
     {
-        return FrameExchangeManager::GetFrameDurationId(header, size, txParams, fragmentedPacket);
+        return singleDurationId;
     }
 
     NS_ASSERT(txParams.m_acknowledgment &&
@@ -488,10 +506,17 @@
     // is set to cover the remaining TXOP time (Sec. 9.2.5.2 of 802.11-2016).
     // The TXOP holder may exceed the TXOP limit in some situations (Sec. 10.22.2.8
     // of 802.11-2016)
-    return std::max(
-        m_edca->GetRemainingTxop(m_linkId) -
-            WifiPhy::CalculateTxDuration(size, txParams.m_txVector, m_phy->GetPhyBand()),
-        *txParams.m_acknowledgment->acknowledgmentTime);
+    auto duration =
+        std::max(m_edca->GetRemainingTxop(m_linkId) -
+                     WifiPhy::CalculateTxDuration(size, txParams.m_txVector, m_phy->GetPhyBand()),
+                 *txParams.m_acknowledgment->acknowledgmentTime);
+
+    if (m_protectSingleExchange)
+    {
+        duration = std::min(duration, singleDurationId + m_singleExchangeProtectionSurplus);
+    }
+
+    return duration;
 }
 
 Time
@@ -501,25 +526,35 @@
 {
     NS_LOG_FUNCTION(this << rtsTxVector << txDuration << response);
 
+    const auto singleDurationId =
+        FrameExchangeManager::GetRtsDurationId(rtsTxVector, txDuration, response);
+
     // TODO This will be removed once no Txop is installed on a QoS station
     if (!m_edca)
     {
-        return FrameExchangeManager::GetRtsDurationId(rtsTxVector, txDuration, response);
+        return singleDurationId;
     }
 
     if (m_edca->GetTxopLimit(m_linkId).IsZero())
     {
-        return FrameExchangeManager::GetRtsDurationId(rtsTxVector, txDuration, response);
+        return singleDurationId;
     }
 
     // under multiple protection settings, if the TXOP limit is not null, Duration/ID
     // is set to cover the remaining TXOP time (Sec. 9.2.5.2 of 802.11-2016).
     // The TXOP holder may exceed the TXOP limit in some situations (Sec. 10.22.2.8
     // of 802.11-2016)
-    return std::max(
-        m_edca->GetRemainingTxop(m_linkId) -
-            WifiPhy::CalculateTxDuration(GetRtsSize(), rtsTxVector, m_phy->GetPhyBand()),
-        Seconds(0));
+    auto duration =
+        std::max(m_edca->GetRemainingTxop(m_linkId) -
+                     WifiPhy::CalculateTxDuration(GetRtsSize(), rtsTxVector, m_phy->GetPhyBand()),
+                 Seconds(0));
+
+    if (m_protectSingleExchange)
+    {
+        duration = std::min(duration, singleDurationId + m_singleExchangeProtectionSurplus);
+    }
+
+    return duration;
 }
 
 Time
@@ -529,25 +564,35 @@
 {
     NS_LOG_FUNCTION(this << ctsTxVector << txDuration << response);
 
+    const auto singleDurationId =
+        FrameExchangeManager::GetCtsToSelfDurationId(ctsTxVector, txDuration, response);
+
     // TODO This will be removed once no Txop is installed on a QoS station
     if (!m_edca)
     {
-        return FrameExchangeManager::GetCtsToSelfDurationId(ctsTxVector, txDuration, response);
+        return singleDurationId;
     }
 
     if (m_edca->GetTxopLimit(m_linkId).IsZero())
     {
-        return FrameExchangeManager::GetCtsToSelfDurationId(ctsTxVector, txDuration, response);
+        return singleDurationId;
     }
 
     // under multiple protection settings, if the TXOP limit is not null, Duration/ID
     // is set to cover the remaining TXOP time (Sec. 9.2.5.2 of 802.11-2016).
     // The TXOP holder may exceed the TXOP limit in some situations (Sec. 10.22.2.8
     // of 802.11-2016)
-    return std::max(
-        m_edca->GetRemainingTxop(m_linkId) -
-            WifiPhy::CalculateTxDuration(GetCtsSize(), ctsTxVector, m_phy->GetPhyBand()),
-        Seconds(0));
+    auto duration =
+        std::max(m_edca->GetRemainingTxop(m_linkId) -
+                     WifiPhy::CalculateTxDuration(GetCtsSize(), ctsTxVector, m_phy->GetPhyBand()),
+                 Seconds(0));
+
+    if (m_protectSingleExchange)
+    {
+        duration = std::min(duration, singleDurationId + m_singleExchangeProtectionSurplus);
+    }
+
+    return duration;
 }
 
 void
@@ -674,7 +719,17 @@
     m_initialFrame = false;
     m_sentFrameTo.clear();
     // reset TXNAV because transmission failed
-    m_txNav = Simulator::Now();
+    ResetTxNav();
+}
+
+void
+QosFrameExchangeManager::ReceivedMacHdr(const WifiMacHeader& macHdr,
+                                        const WifiTxVector& txVector,
+                                        Time psduDuration)
+{
+    NS_LOG_FUNCTION(this << macHdr << txVector << psduDuration.As(Time::MS));
+    FrameExchangeManager::ReceivedMacHdr(macHdr, txVector, psduDuration);
+    SetTxopHolder(macHdr, txVector);
 }
 
 void
@@ -713,15 +768,15 @@
 {
     NS_LOG_FUNCTION(this << psdu << txVector);
 
-    SetTxopHolder(psdu, txVector);
+    SetTxopHolder(psdu->GetHeader(0), txVector);
     FrameExchangeManager::PostProcessFrame(psdu, txVector);
 }
 
 void
-QosFrameExchangeManager::SetTxopHolder(Ptr<const WifiPsdu> psdu, const WifiTxVector& txVector)
+QosFrameExchangeManager::SetTxopHolder(const WifiMacHeader& hdr, const WifiTxVector& txVector)
 {
-    NS_LOG_FUNCTION(this << psdu << txVector);
-    if (auto txopHolder = FindTxopHolder(psdu->GetHeader(0), txVector))
+    NS_LOG_FUNCTION(this << hdr << txVector);
+    if (auto txopHolder = FindTxopHolder(hdr, txVector))
     {
         m_txopHolder = *txopHolder;
     }
@@ -765,17 +820,19 @@
 }
 
 void
-QosFrameExchangeManager::UpdateNav(Ptr<const WifiPsdu> psdu, const WifiTxVector& txVector)
+QosFrameExchangeManager::UpdateNav(const WifiMacHeader& hdr,
+                                   const WifiTxVector& txVector,
+                                   const Time& surplus)
 {
-    NS_LOG_FUNCTION(this << psdu << txVector);
-    if (psdu->GetHeader(0).IsCfEnd())
+    NS_LOG_FUNCTION(this << hdr << txVector << surplus.As(Time::US));
+    if (hdr.IsCfEnd())
     {
         NS_LOG_DEBUG("Received CF-End, resetting NAV");
         NavResetTimeout();
         return;
     }
 
-    FrameExchangeManager::UpdateNav(psdu, txVector);
+    FrameExchangeManager::UpdateNav(hdr, txVector, surplus);
 }
 
 void
@@ -816,7 +873,7 @@
                                                  &QosFrameExchangeManager::SendCtsAfterRts,
                                                  this,
                                                  hdr,
-                                                 txVector.GetMode(),
+                                                 txVector,
                                                  rxSnr);
         }
         else
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/qos-frame-exchange-manager.h ns-3.45/src/wifi/model/qos-frame-exchange-manager.h
--- ns-3.44/src/wifi/model/qos-frame-exchange-manager.h	2025-03-09 16:55:49.795372700 -0700
+++ ns-3.45/src/wifi/model/qos-frame-exchange-manager.h	2025-06-01 20:34:45.622702100 -0700
@@ -108,7 +108,9 @@
     void PreProcessFrame(Ptr<const WifiPsdu> psdu, const WifiTxVector& txVector) override;
     void PostProcessFrame(Ptr<const WifiPsdu> psdu, const WifiTxVector& txVector) override;
     void NavResetTimeout() override;
-    void UpdateNav(Ptr<const WifiPsdu> psdu, const WifiTxVector& txVector) override;
+    void UpdateNav(const WifiMacHeader& hdr,
+                   const WifiTxVector& txVector,
+                   const Time& surplus = Time{0}) override;
     Time GetFrameDurationId(const WifiMacHeader& header,
                             uint32_t size,
                             const WifiTxParameters& txParams,
@@ -122,6 +124,9 @@
     void TransmissionSucceeded() override;
     void TransmissionFailed(bool forceCurrentCw = false) override;
     void ForwardMpduDown(Ptr<WifiMpdu> mpdu, WifiTxVector& txVector) override;
+    void ReceivedMacHdr(const WifiMacHeader& macHdr,
+                        const WifiTxVector& txVector,
+                        Time psduDuration) override;
 
     /**
      * Request the FrameExchangeManager to start a frame exchange sequence.
@@ -186,15 +191,21 @@
     std::optional<Mac48Address> m_txopHolder; //!< MAC address of the TXOP holder
     bool m_setQosQueueSize;                   /**< whether to set the Queue Size subfield of the
                                                    QoS Control field of QoS data frames */
+    bool m_protectSingleExchange; /**< true if the Duration/ID field in frames establishing
+                                     protection only covers the immediate frame exchange instead of
+                                     rest of the TXOP limit when the latter is non-zero */
+    Time m_singleExchangeProtectionSurplus; /**< additional time to protect beyond end of the
+                                               immediate frame exchange in case of non-zero TXOP
+                                               limit when a single frame exchange is protected */
 
   private:
     /**
      * Set the TXOP holder, if needed, based on the received frame
      *
-     * @param psdu the received PSDU
+     * @param hdr the MAC header of the received PSDU
      * @param txVector TX vector of the received PSDU
      */
-    void SetTxopHolder(Ptr<const WifiPsdu> psdu, const WifiTxVector& txVector);
+    void SetTxopHolder(const WifiMacHeader& hdr, const WifiTxVector& txVector);
 
     /**
      * Cancel the PIFS recovery event and have the EDCAF attempting PIFS recovery
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/rate-control/minstrel-ht-wifi-manager.cc ns-3.45/src/wifi/model/rate-control/minstrel-ht-wifi-manager.cc
--- ns-3.44/src/wifi/model/rate-control/minstrel-ht-wifi-manager.cc	2025-03-09 16:55:49.795372700 -0700
+++ ns-3.45/src/wifi/model/rate-control/minstrel-ht-wifi-manager.cc	2025-06-01 20:34:45.623702300 -0700
@@ -79,6 +79,16 @@
             .maxStreams = 8,
         },
     },
+    {
+        WIFI_MOD_CLASS_EHT,
+        {
+            .groupType = WIFI_MINSTREL_GROUP_EHT,
+            .maxMcs = 13,
+            .maxWidth = MHz_u{320},
+            .guardIntervals = {NanoSeconds(3200), NanoSeconds(1600), NanoSeconds(800)},
+            .maxStreams = 8,
+        },
+    },
 };
 
 /// MinstrelHtWifiRemoteStation structure
@@ -307,10 +317,15 @@
         m_numGroups += GetNumGroups(WIFI_MOD_CLASS_HE);
         m_numRates = minstrelHtStandardInfos.at(WIFI_MOD_CLASS_HE).maxMcs + 1;
     }
+    if (GetEhtSupported())
+    {
+        m_numGroups += GetNumGroups(WIFI_MOD_CLASS_EHT);
+        m_numRates = minstrelHtStandardInfos.at(WIFI_MOD_CLASS_EHT).maxMcs + 1;
+    }
 
     /**
      *  Initialize the groups array.
-     *  The HT groups come first, then the VHT ones, and finally the HE ones.
+     *  The HT groups come first, then the VHT ones, then the HE ones, and finally the EHT ones.
      *  Minstrel maintains different types of indexes:
      *  - A global continuous index, which identifies all rates within all groups, in [0,
      * m_numGroups * m_numRates]
@@ -340,6 +355,12 @@
         // Initialize all HE groups
         InitializeGroups(WIFI_MOD_CLASS_HE);
     }
+
+    if (GetEhtSupported())
+    {
+        // Initialize all EHT groups
+        InitializeGroups(WIFI_MOD_CLASS_EHT);
+    }
 }
 
 bool
@@ -1321,8 +1342,7 @@
                     /// set the rate that we're currently sampling
                     station->m_sampleRate = sampleIdx;
 
-                    NS_LOG_DEBUG("FindRate "
-                                 << "sampleRate=" << sampleIdx);
+                    NS_LOG_DEBUG("FindRate sampleRate=" << sampleIdx);
                     station->m_sampleTries--;
                     return sampleIdx;
                 }
@@ -1337,8 +1357,7 @@
                         /// set the rate that we're currently sampling
                         station->m_sampleRate = sampleIdx;
 
-                        NS_LOG_DEBUG("FindRate "
-                                     << "sampleRate=" << sampleIdx);
+                        NS_LOG_DEBUG("FindRate sampleRate=" << sampleIdx);
                         station->m_sampleTries--;
                         return sampleIdx;
                     }
@@ -1353,8 +1372,7 @@
 
     /// Continue using the best rate.
 
-    NS_LOG_DEBUG("FindRate "
-                 << "maxTpRrate=" << station->m_maxTpRate);
+    NS_LOG_DEBUG("FindRate maxTpRrate=" << station->m_maxTpRate);
     return station->m_maxTpRate;
 }
 
@@ -1673,6 +1691,12 @@
         {
             station->m_groupsTable[groupId].m_supported = false;
 
+            if ((m_minstrelGroups[groupId].type == WIFI_MINSTREL_GROUP_EHT) &&
+                !GetEhtSupported(station))
+            {
+                // It is a EHT group but the receiver does not support EHT: skip
+                continue;
+            }
             if ((m_minstrelGroups[groupId].type == WIFI_MINSTREL_GROUP_HE) &&
                 !GetHeSupported(station))
             {
@@ -1685,10 +1709,18 @@
                 // It is a VHT group but the receiver does not support VHT: skip
                 continue;
             }
-            if ((m_minstrelGroups[groupId].type != WIFI_MINSTREL_GROUP_HE) &&
+            if ((m_minstrelGroups[groupId].type != WIFI_MINSTREL_GROUP_EHT) &&
+                GetEhtSupported(station) && m_useLatestAmendmentOnly)
+            {
+                // It is not a EHT group and the receiver supports EHT: skip since
+                // UseLatestAmendmentOnly attribute is enabled
+                continue;
+            }
+            if (!GetEhtSupported(station) &&
+                (m_minstrelGroups[groupId].type != WIFI_MINSTREL_GROUP_HE) &&
                 GetHeSupported(station) && m_useLatestAmendmentOnly)
             {
-                // It is not a HE group and the receiver supports HE: skip since
+                // It is not a HE group and the receiver supports HE (but not EHT): skip since
                 // UseLatestAmendmentOnly attribute is enabled
                 continue;
             }
@@ -1814,9 +1846,7 @@
     uint32_t cwMax = 1023;
     Time cwTime;
     Time txTime;
-    Time dataTxTime;
     const auto slotTime = GetPhy()->GetSlot();
-    const auto ackTime = GetPhy()->GetSifs() + GetPhy()->GetBlockAckTxTime();
 
     if (station->m_groupsTable[groupId].m_ratesTable[rateId].ewmaProb < 1)
     {
@@ -1827,16 +1857,15 @@
         station->m_groupsTable[groupId].m_ratesTable[rateId].retryCount = 2;
         station->m_groupsTable[groupId].m_ratesTable[rateId].retryUpdated = true;
 
-        dataTxTime =
-            GetFirstMpduTxTime(
-                groupId,
-                GetMcsSupported(station,
-                                station->m_groupsTable[groupId].m_ratesTable[rateId].mcsIndex)) +
-            GetMpduTxTime(
-                groupId,
-                GetMcsSupported(station,
-                                station->m_groupsTable[groupId].m_ratesTable[rateId].mcsIndex)) *
-                (station->m_avgAmpduLen - 1);
+        auto mode =
+            GetMcsSupported(station, station->m_groupsTable[groupId].m_ratesTable[rateId].mcsIndex);
+        WifiTxVector txVector;
+        txVector.SetMode(mode);
+        txVector.SetPreambleType(GetPreambleForTransmission(mode.GetModulationClass()));
+
+        const auto dataTxTime = GetFirstMpduTxTime(groupId, mode) +
+                                GetMpduTxTime(groupId, mode) * (station->m_avgAmpduLen - 1);
+        const auto ackTime = GetPhy()->GetSifs() + GetEstimatedAckTxTime(txVector);
 
         /* Contention time for first 2 tries */
         cwTime = (cw / 2) * slotTime;
@@ -2099,6 +2128,19 @@
 }
 
 std::size_t
+MinstrelHtWifiManager::GetEhtGroupId(uint8_t streams, Time guardInterval, MHz_u chWidth)
+{
+    NS_LOG_FUNCTION(this << streams << guardInterval << chWidth);
+    // This check is needed since HT is not supported in 6 GHz band
+    std::size_t allHtGroups = (GetHtSupported()) ? GetNumGroups(WIFI_MOD_CLASS_HT) : 0;
+    // This check is needed since VHT is not supported in 2.4 and 6 GHz bands
+    std::size_t allVhtGroups = (GetVhtSupported()) ? GetNumGroups(WIFI_MOD_CLASS_VHT) : 0;
+    const auto allHeGroups = GetNumGroups(WIFI_MOD_CLASS_HE);
+    const auto ehtGroupId = GetIdInGroup(WIFI_MOD_CLASS_EHT, streams, guardInterval, chWidth);
+    return allHtGroups + allVhtGroups + allHeGroups + ehtGroupId;
+}
+
+std::size_t
 MinstrelHtWifiManager::GetGroupIdForType(McsGroupType type,
                                          uint8_t streams,
                                          Time guardInterval,
@@ -2112,6 +2154,8 @@
         return GetVhtGroupId(streams, guardInterval, chWidth);
     case WIFI_MINSTREL_GROUP_HE:
         return GetHeGroupId(streams, guardInterval, chWidth);
+    case WIFI_MINSTREL_GROUP_EHT:
+        return GetEhtGroupId(streams, guardInterval, chWidth);
     default:
         NS_ABORT_MSG("Unknown group type: " << type);
     }
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/rate-control/minstrel-ht-wifi-manager.h ns-3.45/src/wifi/model/rate-control/minstrel-ht-wifi-manager.h
--- ns-3.44/src/wifi/model/rate-control/minstrel-ht-wifi-manager.h	2025-03-09 16:55:49.795372700 -0700
+++ ns-3.45/src/wifi/model/rate-control/minstrel-ht-wifi-manager.h	2025-06-01 20:34:45.623702300 -0700
@@ -37,6 +37,7 @@
     WIFI_MINSTREL_GROUP_HT,
     WIFI_MINSTREL_GROUP_VHT,
     WIFI_MINSTREL_GROUP_HE,
+    WIFI_MINSTREL_GROUP_EHT,
     WIFI_MINSTREL_GROUP_COUNT
 };
 
@@ -58,6 +59,8 @@
         return (os << "VHT");
     case WIFI_MINSTREL_GROUP_HE:
         return (os << "HE");
+    case WIFI_MINSTREL_GROUP_EHT:
+        return (os << "EHT");
     default:
     case WIFI_MINSTREL_GROUP_INVALID:
         return (os << "INVALID");
@@ -630,6 +633,17 @@
     std::size_t GetHeGroupId(uint8_t streams, Time guardInterval, MHz_u chWidth);
 
     /**
+     * Returns the groupId of an EHT MCS with the given number of streams, GI and channel width
+     * used.
+     *
+     * @param streams the number of streams
+     * @param guardInterval guard interval duration
+     * @param chWidth the channel width
+     * @returns the EHT group ID
+     */
+    std::size_t GetEhtGroupId(uint8_t streams, Time guardInterval, MHz_u chWidth);
+
+    /**
      * Returns the group ID of an MCS of a given group type with the given number of streams, GI and
      * channel width used.
      *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/rate-control/minstrel-wifi-manager.cc ns-3.45/src/wifi/model/rate-control/minstrel-wifi-manager.cc
--- ns-3.44/src/wifi/model/rate-control/minstrel-wifi-manager.cc	2025-03-09 16:55:49.795372700 -0700
+++ ns-3.45/src/wifi/model/rate-control/minstrel-wifi-manager.cc	2025-06-01 20:34:45.623702300 -0700
@@ -1038,7 +1038,7 @@
         {
             NS_LOG_DEBUG("  Checking " << retries << " retries");
             totalTxTimeWithGivenRetries =
-                CalculateTimeUnicastPacket(station->m_minstrelTable[i].perfectTxTime, 0, retries);
+                CalculateTimeUnicastPacket(GetSupported(station, i), 0, retries);
             NS_LOG_DEBUG("   totalTxTimeWithGivenRetries = " << totalTxTimeWithGivenRetries);
             if (totalTxTimeWithGivenRetries > MilliSeconds(6))
             {
@@ -1053,22 +1053,28 @@
 }
 
 Time
-MinstrelWifiManager::CalculateTimeUnicastPacket(Time dataTransmissionTime,
+MinstrelWifiManager::CalculateTimeUnicastPacket(WifiMode mode,
                                                 uint32_t shortRetries,
                                                 uint32_t longRetries)
 {
-    NS_LOG_FUNCTION(this << dataTransmissionTime << shortRetries << longRetries);
+    NS_LOG_FUNCTION(this << mode << shortRetries << longRetries);
     // See rc80211_minstrel.c
 
     // First transmission (Data + Ack timeout)
-    Time tt = dataTransmissionTime + GetPhy()->GetSifs() + GetPhy()->GetAckTxTime();
+    WifiTxVector txVector;
+    txVector.SetMode(mode);
+    txVector.SetPreambleType(
+        GetPreambleForTransmission(mode.GetModulationClass(), GetShortPreambleEnabled()));
+    const auto oneTxTime =
+        GetCalcTxTime(mode) + GetPhy()->GetSifs() + GetEstimatedAckTxTime(txVector);
+    auto tt = oneTxTime;
 
     uint32_t cwMax = 1023;
     uint32_t cw = 31;
     for (uint32_t retry = 0; retry < longRetries; retry++)
     {
         // Add one re-transmission (Data + Ack timeout)
-        tt += dataTransmissionTime + GetPhy()->GetSifs() + GetPhy()->GetAckTxTime();
+        tt += oneTxTime;
 
         // Add average back off (half the current contention window)
         tt += (cw / 2.0) * GetPhy()->GetSlot();
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/rate-control/minstrel-wifi-manager.h ns-3.45/src/wifi/model/rate-control/minstrel-wifi-manager.h
--- ns-3.44/src/wifi/model/rate-control/minstrel-wifi-manager.h	2025-03-09 16:55:49.795372700 -0700
+++ ns-3.45/src/wifi/model/rate-control/minstrel-wifi-manager.h	2025-06-01 20:34:45.623702300 -0700
@@ -314,14 +314,12 @@
      *  - Data transmission
      *  - backoffs according to CW
      *
-     * @param dataTransmissionTime the data transmission time
+     * @param mode the WiFi mode used to transmit the data frame
      * @param shortRetries short retries
      * @param longRetries long retries
      * @returns the unicast packet time
      */
-    Time CalculateTimeUnicastPacket(Time dataTransmissionTime,
-                                    uint32_t shortRetries,
-                                    uint32_t longRetries);
+    Time CalculateTimeUnicastPacket(WifiMode mode, uint32_t shortRetries, uint32_t longRetries);
 
     /**
      * Print Sample Table.
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/rate-control/thompson-sampling-wifi-manager.cc ns-3.45/src/wifi/model/rate-control/thompson-sampling-wifi-manager.cc
--- ns-3.44/src/wifi/model/rate-control/thompson-sampling-wifi-manager.cc	2025-03-09 16:55:49.799372700 -0700
+++ ns-3.45/src/wifi/model/rate-control/thompson-sampling-wifi-manager.cc	2025-06-01 20:34:45.624702200 -0700
@@ -226,10 +226,10 @@
         // Thompson sampling
         frameSuccessRate = SampleBetaVariable(1.0 + station->m_mcsStats.at(i).success,
                                               1.0 + station->m_mcsStats.at(i).fails);
-        NS_LOG_DEBUG("Draw"
-                     << " success=" << station->m_mcsStats.at(i).success
-                     << " fails=" << station->m_mcsStats.at(i).fails
-                     << " frameSuccessRate=" << frameSuccessRate << " mode=" << mode);
+        NS_LOG_DEBUG("Draw success=" << station->m_mcsStats.at(i).success
+                                     << " fails=" << station->m_mcsStats.at(i).fails
+                                     << " frameSuccessRate=" << frameSuccessRate
+                                     << " mode=" << mode);
         if (frameSuccessRate * rate > maxThroughput)
         {
             maxThroughput = frameSuccessRate * rate;
@@ -320,9 +320,8 @@
 
     station->m_lastMode = station->m_nextMode;
 
-    NS_LOG_DEBUG("Using"
-                 << " mode=" << mode << " channelWidth=" << channelWidth << " nss=" << +nss
-                 << " guardInterval=" << guardInterval);
+    NS_LOG_DEBUG("Using mode=" << mode << " channelWidth=" << channelWidth << " nss=" << +nss
+                               << " guardInterval=" << guardInterval);
 
     const auto rate = mode.GetDataRate(channelWidth, guardInterval, nss);
     if (m_currentRate != rate)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/reduced-neighbor-report.cc ns-3.45/src/wifi/model/reduced-neighbor-report.cc
--- ns-3.44/src/wifi/model/reduced-neighbor-report.cc	2025-03-09 16:55:49.799372700 -0700
+++ ns-3.45/src/wifi/model/reduced-neighbor-report.cc	2025-06-01 20:34:45.624702200 -0700
@@ -145,6 +145,10 @@
         {
             operatingClass = 134;
         }
+        else if (channel.GetWidth() == MHz_u{320})
+        {
+            operatingClass = 137;
+        }
         break;
     case WIFI_PHY_BAND_UNSPECIFIED:
     default:
@@ -154,7 +158,7 @@
 
     NS_ABORT_MSG_IF(operatingClass == 0,
                     "Operating class not found for channel number "
-                        << channelNumber << " width " << channel.GetWidth() << " MHz "
+                        << +channelNumber << " width " << channel.GetWidth() << " MHz "
                         << "band " << channel.GetPhyBand());
 
     // find the primary channel number
@@ -240,6 +244,10 @@
         band = WIFI_PHY_BAND_6GHZ;
         width = MHz_u{160};
         break;
+    case 137:
+        band = WIFI_PHY_BAND_6GHZ;
+        width = MHz_u{320};
+        break;
     default:
         break;
     }
@@ -726,4 +734,18 @@
     return count;
 }
 
+void
+ReducedNeighborReport::Print(std::ostream& os) const
+{
+    os << "Reduced Neighbor Report=[";
+    for (const auto& neighborApInfo : m_nbrApInfoFields)
+    {
+        os << "{Operating Class: " << +neighborApInfo.operatingClass
+           << ", Channel Number: " << +neighborApInfo.channelNumber
+           << ", TBTT Information Count: " << +neighborApInfo.tbttInfoHdr.tbttInfoCount
+           << ", TBTT Information Length: " << +neighborApInfo.tbttInfoHdr.tbttInfoLength << "}, ";
+    }
+    os << "]";
+}
+
 } // namespace ns3
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/reduced-neighbor-report.h ns-3.45/src/wifi/model/reduced-neighbor-report.h
--- ns-3.44/src/wifi/model/reduced-neighbor-report.h	2025-03-09 16:55:49.799372700 -0700
+++ ns-3.45/src/wifi/model/reduced-neighbor-report.h	2025-06-01 20:34:45.624702200 -0700
@@ -24,7 +24,7 @@
  * @brief The Reduced Neighbor Report element
  * @ingroup wifi
  *
- * This class knows how to serialise and deserialise the Reduced Neighbor Report element.
+ * This class knows how to serialize and deserialize the Reduced Neighbor Report element.
  */
 class ReducedNeighborReport : public WifiInformationElement
 {
@@ -92,6 +92,7 @@
     uint16_t GetInformationFieldSize() const override;
     void SerializeInformationField(Buffer::Iterator start) const override;
     uint16_t DeserializeInformationField(Buffer::Iterator start, uint16_t length) override;
+    void Print(std::ostream& os) const override;
 
     /**
      * Get the number of Neighbor AP Information fields
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/spectrum-wifi-phy.cc ns-3.45/src/wifi/model/spectrum-wifi-phy.cc
--- ns-3.44/src/wifi/model/spectrum-wifi-phy.cc	2025-03-09 16:55:49.799372700 -0700
+++ ns-3.45/src/wifi/model/spectrum-wifi-phy.cc	2025-06-01 20:34:45.624702200 -0700
@@ -141,57 +141,87 @@
     return bands;
 }
 
-HeRuBands
-SpectrumWifiPhy::GetHeRuBands(Ptr<WifiSpectrumPhyInterface> spectrumPhyInterface,
-                              MHz_u guardBandwidth)
+RuBands
+SpectrumWifiPhy::GetRuBands(Ptr<WifiSpectrumPhyInterface> spectrumPhyInterface,
+                            MHz_u guardBandwidth)
 {
-    HeRuBands heRuBands{};
+    RuBands ruBands{};
     const auto channelWidth = spectrumPhyInterface->GetChannelWidth();
-    for (MHz_u bw = channelWidth; bw >= MHz_u{20}; bw = bw / 2)
+    const auto p20Index = GetOperatingChannel().GetPrimaryChannelIndex(MHz_u{20});
+    std::vector<WifiModulationClass> modClasses{WIFI_MOD_CLASS_HE};
+    if (GetStandard() >= WIFI_STANDARD_80211be)
     {
-        for (uint32_t i = 0; i < (channelWidth / bw); ++i)
+        modClasses.push_back(WIFI_MOD_CLASS_EHT);
+    }
+    for (const auto modClass : modClasses)
+    {
+        for (MHz_u bw = channelWidth; bw >= MHz_u{20}; bw = bw / 2)
         {
-            for (uint32_t type = 0; type < 7; type++)
+            if (bw > GetMaximumChannelWidth(modClass))
             {
-                auto ruType = static_cast<HeRu::RuType>(type);
-                std::size_t nRus = HeRu::GetNRus(bw, ruType);
-                for (std::size_t phyIndex = 1; phyIndex <= nRus; phyIndex++)
+                continue;
+            }
+            for (uint8_t i = 0; i < (channelWidth / bw); ++i)
+            {
+                for (uint32_t type = 0;
+                     type <= static_cast<uint32_t>(WifiRu::GetMaxRuType(modClass));
+                     ++type)
                 {
-                    HeRu::SubcarrierGroup group = HeRu::GetSubcarrierGroup(bw, ruType, phyIndex);
-                    HeRu::SubcarrierRange subcarrierRange =
-                        std::make_pair(group.front().first, group.back().second);
-                    const auto bandIndices =
-                        HePhy::ConvertHeRuSubcarriers(bw,
-                                                      guardBandwidth,
-                                                      spectrumPhyInterface->GetCenterFrequencies(),
-                                                      spectrumPhyInterface->GetChannelWidth(),
-                                                      GetSubcarrierSpacing(),
-                                                      subcarrierRange,
-                                                      i);
-
-                    WifiSpectrumBandInfo band{};
-                    for (const auto& indicesPerSegment : bandIndices)
+                    const auto ruType = static_cast<RuType>(type);
+                    const auto nRus = WifiRu::GetNRus(bw, ruType, modClass);
+                    std::size_t undefRus{0};
+                    for (std::size_t phyIndex = 1; phyIndex <= nRus + undefRus; ++phyIndex)
                     {
-                        band.indices.emplace_back(indicesPerSegment);
-                        band.frequencies.emplace_back(
-                            ConvertIndicesToFrequenciesForInterface(spectrumPhyInterface,
-                                                                    indicesPerSegment));
+                        const auto group =
+                            WifiRu::GetSubcarrierGroup(bw, ruType, phyIndex, modClass);
+                        if (group.empty())
+                        {
+                            ++undefRus;
+                            continue;
+                        }
+                        const auto subcarrierRange =
+                            std::make_pair(group.front().first, group.back().second);
+                        const auto bandIndices = HePhy::ConvertRuSubcarriers(
+                            {bw,
+                             guardBandwidth,
+                             spectrumPhyInterface->GetCenterFrequencies(),
+                             spectrumPhyInterface->GetChannelWidth(),
+                             GetSubcarrierSpacing(),
+                             modClass,
+                             subcarrierRange,
+                             i});
+
+                        WifiSpectrumBandInfo band{};
+                        for (const auto& indicesPerSegment : bandIndices)
+                        {
+                            band.indices.emplace_back(indicesPerSegment);
+                            band.frequencies.emplace_back(
+                                ConvertIndicesToFrequenciesForInterface(spectrumPhyInterface,
+                                                                        indicesPerSegment));
+                        }
+                        WifiRu::RuSpec ru;
+                        if (modClass == WIFI_MOD_CLASS_HE)
+                        {
+                            const auto index = HeRu::GetIndexIn80MHzSegment(bw, ruType, phyIndex);
+                            const auto primary80 =
+                                HeRu::GetPrimary80MHzFlag(bw, ruType, phyIndex, p20Index);
+                            ru = HeRu::RuSpec{ruType, index, primary80};
+                        }
+                        else
+                        {
+                            const auto index = EhtRu::GetIndexIn80MHzSegment(bw, ruType, phyIndex);
+                            const auto& [primary160, primary80OrLow80] =
+                                EhtRu::GetPrimaryFlags(bw, ruType, phyIndex, p20Index);
+                            ru = EhtRu::RuSpec{ruType, index, primary160, primary80OrLow80};
+                        }
+                        NS_ABORT_IF(WifiRu::GetPhyIndex(ru, bw, p20Index) != phyIndex);
+                        ruBands.insert({band, ru});
                     }
-                    std::size_t index =
-                        (bw == MHz_u{160} && phyIndex > nRus / 2 ? phyIndex - nRus / 2 : phyIndex);
-                    const auto p20Index = GetOperatingChannel().GetPrimaryChannelIndex(MHz_u{20});
-                    bool primary80IsLower80 = (p20Index < bw / MHz_u{40});
-                    bool primary80 = (bw < MHz_u{160} || ruType == HeRu::RU_2x996_TONE ||
-                                      (primary80IsLower80 && phyIndex <= nRus / 2) ||
-                                      (!primary80IsLower80 && phyIndex > nRus / 2));
-                    HeRu::RuSpec ru(ruType, index, primary80);
-                    NS_ABORT_IF(ru.GetPhyIndex(bw, p20Index) != phyIndex);
-                    heRuBands.insert({band, ru});
                 }
             }
         }
     }
-    return heRuBands;
+    return ruBands;
 }
 
 void
@@ -203,12 +233,12 @@
     if (GetStandard() >= WIFI_STANDARD_80211ax)
     {
         const auto channelWidth = spectrumPhyInterface->GetChannelWidth();
-        auto&& heRuBands = GetHeRuBands(spectrumPhyInterface, GetGuardBandwidth(channelWidth));
-        for (const auto& bandRuPair : heRuBands)
+        auto&& ruBands = GetRuBands(spectrumPhyInterface, GetGuardBandwidth(channelWidth));
+        for (const auto& bandRuPair : ruBands)
         {
             allBands.push_back(bandRuPair.first);
         }
-        spectrumPhyInterface->SetHeRuBands(std::move(heRuBands));
+        spectrumPhyInterface->SetRuBands(std::move(ruBands));
     }
 
     spectrumPhyInterface->SetBands(std::move(bands));
@@ -527,10 +557,10 @@
 
     if (GetStandard() >= WIFI_STANDARD_80211ax)
     {
-        const auto& heRuBands =
-            interface ? interface->GetHeRuBands() : m_currentSpectrumPhyInterface->GetHeRuBands();
-        NS_ASSERT(!heRuBands.empty());
-        for (const auto& [band, ru] : heRuBands)
+        const auto& ruBands =
+            interface ? interface->GetRuBands() : m_currentSpectrumPhyInterface->GetRuBands();
+        NS_ASSERT(!ruBands.empty());
+        for (const auto& [band, ru] : ruBands)
         {
             auto rxPowerPerBand =
                 WifiSpectrumValueHelper::GetBandPowerW(receivedSignalPsd, band.indices);
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/spectrum-wifi-phy.h ns-3.45/src/wifi/model/spectrum-wifi-phy.h
--- ns-3.44/src/wifi/model/spectrum-wifi-phy.h	2025-03-09 16:55:49.799372700 -0700
+++ ns-3.45/src/wifi/model/spectrum-wifi-phy.h	2025-06-01 20:34:45.624702200 -0700
@@ -33,7 +33,7 @@
 struct WifiSpectrumSignalParameters;
 
 /// Map a spectrum band associated with an RU to the RU specification
-using HeRuBands = std::map<WifiSpectrumBandInfo, HeRu::RuSpec>;
+using RuBands = std::map<WifiSpectrumBandInfo, WifiRu::RuSpec>;
 
 /**
  * @brief 802.11 PHY layer model
@@ -226,8 +226,7 @@
      * @param guardBandwidth width of the guard band
      * @returns the computed RU bands for the spectrum PHY interface
      */
-    HeRuBands GetHeRuBands(Ptr<WifiSpectrumPhyInterface> spectrumPhyInterface,
-                           MHz_u guardBandwidth);
+    RuBands GetRuBands(Ptr<WifiSpectrumPhyInterface> spectrumPhyInterface, MHz_u guardBandwidth);
 
     /**
      * This function computes the bands that belong to a given spectrum PHY interface.
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/ssid.cc ns-3.45/src/wifi/model/ssid.cc
--- ns-3.44/src/wifi/model/ssid.cc	2025-03-09 16:55:49.799372700 -0700
+++ ns-3.45/src/wifi/model/ssid.cc	2025-06-01 20:34:45.624702200 -0700
@@ -43,7 +43,7 @@
 void
 Ssid::Print(std::ostream& os) const
 {
-    os << "ssid=" << PeekString();
+    os << "SSID=[" << PeekString() << "]";
 }
 
 bool
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/sta-wifi-mac.cc ns-3.45/src/wifi/model/sta-wifi-mac.cc
--- ns-3.44/src/wifi/model/sta-wifi-mac.cc	2025-03-09 16:55:49.799372700 -0700
+++ ns-3.45/src/wifi/model/sta-wifi-mac.cc	2025-06-01 20:34:45.625702100 -0700
@@ -30,6 +30,7 @@
 #include "ns3/pair.h"
 #include "ns3/pointer.h"
 #include "ns3/random-variable-stream.h"
+#include "ns3/shuffle.h"
 #include "ns3/simulator.h"
 #include "ns3/string.h"
 
@@ -90,6 +91,20 @@
                           StringValue("ns3::UniformRandomVariable[Min=50.0|Max=250.0]"),
                           MakePointerAccessor(&StaWifiMac::m_probeDelay),
                           MakePointerChecker<RandomVariableStream>())
+            .AddAttribute("AssocType",
+                          "Type of association performed by this device (provided that it is "
+                          "supported by the standard configured for this device, otherwise legacy "
+                          "association is performed). By using this attribute, it is possible for "
+                          "an EHT single-link device to perform ML setup with an AP MLD and for an "
+                          "EHT multi-link device to perform legacy association with an AP MLD.",
+                          TypeId::ATTR_GET |
+                              TypeId::ATTR_CONSTRUCT, // prevent setting after construction
+                          EnumValue(WifiAssocType::ML_SETUP),
+                          MakeEnumAccessor<WifiAssocType>(&StaWifiMac::m_assocType),
+                          MakeEnumChecker(WifiAssocType::LEGACY,
+                                          "LEGACY",
+                                          WifiAssocType::ML_SETUP,
+                                          "ML_SETUP"))
             .AddAttribute(
                 "PowerSaveMode",
                 "Enable/disable power save mode on the given link. The power management mode is "
@@ -131,11 +146,15 @@
                             MakeTraceSourceAccessor(&StaWifiMac::m_beaconInfo),
                             "ns3::ApInfo::TracedCallback")
             .AddTraceSource("EmlsrLinkSwitch",
-                            "Trace start/end of EMLSR link switch events: when a PHY operating on "
-                            "a link starts switching, provides the ID of the link and a null "
-                            "pointer (indicating no PHY is operating on that link); when a PHY "
-                            "completes switching to a link, provides the ID of the link and a "
-                            "pointer to the PHY (that is now operating on that link)",
+                            "Trace start/end of EMLSR link switch events. Specifically, this trace "
+                            "is fired: (i) when a PHY _operating on a link_ starts switching to "
+                            "another link, thus the PHY is disconnected from the previous link; "
+                            "(ii) when a PHY is connected to a new link after performing a channel "
+                            "switch. This trace provides: the ID of the previous link, in "
+                            "case the PHY is disconnected, or the ID of the new link, in case the "
+                            "PHY is connected; a pointer to the PHY that switches link; a boolean "
+                            "value indicating if the PHY is connected to (true) or disconnected "
+                            "from (false) the given link.",
                             MakeTraceSourceAccessor(&StaWifiMac::m_emlsrLinkSwitchLogger),
                             "ns3::StaWifiMac::EmlsrLinkSwitchCallback");
     return tid;
@@ -250,6 +269,13 @@
     m_assocManager->SetStaWifiMac(this);
 }
 
+WifiAssocType
+StaWifiMac::GetAssocType() const
+{
+    // non-EHT devices can only perform legacy association
+    return GetEhtConfiguration() ? m_assocType : WifiAssocType::LEGACY;
+}
+
 void
 StaWifiMac::SetEmlsrManager(Ptr<EmlsrManager> emlsrManager)
 {
@@ -394,11 +420,9 @@
     NS_LOG_FUNCTION(this << linkId << apMldId.has_value());
     auto req = GetProbeRequest(linkId);
 
-    if (GetNLinks() == 1)
+    if (GetAssocType() == WifiAssocType::LEGACY)
     {
-        // Single link (non-EHT) device
-        NS_LOG_DEBUG("Single link device does not support Multi-link operation, not including "
-                     "Multi-link Element");
+        NS_LOG_DEBUG("Legacy association, not including Multi-link Element");
         return req;
     }
 
@@ -697,11 +721,10 @@
 
     auto frame = GetAssociationRequest(isReassoc, linkId);
 
-    // include a Multi-Link Element if this device has multiple links (independently
-    // of how many links will be setup) and the AP is a multi-link device;
-    // if the AP MLD  has indicated a support of TID-to-link mapping negotiation, also
+    // include a Multi-Link Element if this device performs ML Setup and the AP is a multi-link
+    // device; if the AP MLD  has indicated a support of TID-to-link mapping negotiation, also
     // include the TID-to-link Mapping element(s)
-    if (GetNLinks() > 1 &&
+    if (GetAssocType() == WifiAssocType::ML_SETUP &&
         GetWifiRemoteStationManager(linkId)->GetMldAddress(*link.bssid).has_value())
     {
         auto addMle = [&](auto&& frame) {
@@ -841,7 +864,7 @@
     }
 
     NS_LOG_DEBUG("Attempting to associate with AP: " << *bestAp);
-    UpdateApInfo(bestAp->m_frame, bestAp->m_apAddr, bestAp->m_bssid, bestAp->m_linkId);
+    ApplyOperationalSettings(bestAp->m_frame, bestAp->m_apAddr, bestAp->m_bssid, bestAp->m_linkId);
     // reset info on links to setup
     for (auto& [id, link] : GetLinks())
     {
@@ -1014,13 +1037,30 @@
     {
         if (GetStaLink(link).bssid == remoteAddr)
         {
-            // the remote address is the address of the (single link) AP we are associated with;
+            // the remote address is the address of the AP we are associated with;
             return link->feManager->GetAddress();
         }
     }
 
     // the remote address is unknown
-    return GetAddress();
+
+    if (!IsAssociated())
+    {
+        return GetAddress();
+    }
+
+    // if this device has performed ML setup with an AP MLD, return the MLD address of this device
+    const auto linkIds = GetSetupLinkIds();
+    NS_ASSERT(!linkIds.empty());
+    const auto linkId = *linkIds.cbegin(); // a setup link
+
+    if (GetLink(linkId).stationManager->GetMldAddress(GetBssid(linkId)))
+    {
+        return GetAddress();
+    }
+
+    // return the address of the link used to perform association with the AP
+    return GetLink(linkId).feManager->GetAddress();
 }
 
 bool
@@ -1066,46 +1106,46 @@
 {
     NS_LOG_FUNCTION(this << linkId << reason);
 
-    auto bssid = GetBssid(linkId);
-    auto apAddress = GetWifiRemoteStationManager(linkId)->GetMldAddress(bssid).value_or(bssid);
-
-    BlockUnicastTxOnLinks(reason, apAddress, {linkId});
-    // the only type of broadcast frames that a non-AP STA can send are management frames
-    for (const auto& [acIndex, ac] : wifiAcList)
-    {
-        GetMacQueueScheduler()->BlockQueues(reason,
-                                            acIndex,
-                                            {WIFI_MGT_QUEUE},
-                                            Mac48Address::GetBroadcast(),
-                                            GetFrameExchangeManager(linkId)->GetAddress(),
-                                            {},
-                                            {linkId});
-    }
+    GetMacQueueScheduler()->BlockAllQueues(reason, {linkId});
 }
 
 void
 StaWifiMac::UnblockTxOnLink(std::set<uint8_t> linkIds, WifiQueueBlockedReason reason)
 {
+    // shuffle link IDs not to unblock links always in the same order
+    std::vector<uint8_t> shuffledLinkIds(linkIds.cbegin(), linkIds.cend());
+    Shuffle(shuffledLinkIds.begin(), shuffledLinkIds.end(), m_shuffleLinkIdsGen.GetRv());
+
     std::stringstream ss;
-    std::copy(linkIds.cbegin(), linkIds.cend(), std::ostream_iterator<uint16_t>(ss, " "));
-    NS_LOG_FUNCTION(this << ss.str() << reason);
+    if (g_log.IsEnabled(ns3::LOG_FUNCTION))
+    {
+        std::copy(shuffledLinkIds.cbegin(),
+                  shuffledLinkIds.cend(),
+                  std::ostream_iterator<uint16_t>(ss, " "));
+    }
+    NS_LOG_FUNCTION(this << reason << ss.str());
+
+    for (const auto linkId : shuffledLinkIds)
+    {
+        std::map<AcIndex, bool> hasFramesToTransmit;
+        for (const auto& [acIndex, ac] : wifiAcList)
+        {
+            // save the status of the AC queues before unblocking the queues
+            hasFramesToTransmit[acIndex] = GetQosTxop(acIndex)->HasFramesToTransmit(linkId);
+        }
 
-    const auto linkId = *linkIds.cbegin();
-    const auto bssid = GetBssid(linkId);
-    const auto apAddress =
-        GetWifiRemoteStationManager(linkId)->GetMldAddress(bssid).value_or(bssid);
-
-    UnblockUnicastTxOnLinks(reason, apAddress, linkIds);
-    // the only type of broadcast frames that a non-AP STA can send are management frames
-    for (const auto& [acIndex, ac] : wifiAcList)
-    {
-        GetMacQueueScheduler()->UnblockQueues(reason,
-                                              acIndex,
-                                              {WIFI_MGT_QUEUE},
-                                              Mac48Address::GetBroadcast(),
-                                              GetFrameExchangeManager(linkId)->GetAddress(),
-                                              {},
-                                              linkIds);
+        GetMacQueueScheduler()->UnblockAllQueues(reason, {linkId});
+
+        for (const auto& [acIndex, ac] : wifiAcList)
+        {
+            // request channel access if needed (schedule now because multiple invocations
+            // of this method may be done in a loop at the caller)
+            Simulator::ScheduleNow(&Txop::StartAccessAfterEvent,
+                                   GetQosTxop(acIndex),
+                                   linkId,
+                                   hasFramesToTransmit[acIndex],
+                                   Txop::CHECK_MEDIUM_BUSY); // generate backoff if medium busy
+        }
     }
 }
 
@@ -1229,6 +1269,7 @@
 {
     NS_LOG_FUNCTION(this << *mpdu << +linkId);
     const WifiMacHeader& hdr = mpdu->GetHeader();
+    const auto from = hdr.GetAddr2();
     NS_ASSERT(hdr.IsBeacon());
 
     NS_LOG_DEBUG("Beacon received");
@@ -1266,6 +1307,9 @@
         m_beaconInfo(apInfo);
     }
 
+    RecordCapabilities(beacon, from, linkId);
+    RecordOperations(beacon, from, linkId);
+
     if (!goodBeacon)
     {
         NS_LOG_LOGIC("Beacon is not for us");
@@ -1277,7 +1321,7 @@
         Time delay = MicroSeconds(std::get<MgtBeaconHeader>(apInfo.m_frame).GetBeaconIntervalUs() *
                                   m_maxMissedBeacons);
         RestartBeaconWatchdog(delay);
-        UpdateApInfo(apInfo.m_frame, hdr.GetAddr2(), hdr.GetAddr3(), linkId);
+        ApplyOperationalSettings(apInfo.m_frame, hdr.GetAddr2(), hdr.GetAddr3(), linkId);
     }
     else
     {
@@ -1293,9 +1337,14 @@
     const WifiMacHeader& hdr = mpdu->GetHeader();
     NS_ASSERT(hdr.IsProbeResp());
 
-    NS_LOG_DEBUG("Probe response received from " << hdr.GetAddr2());
+    const auto from = hdr.GetAddr2();
+    NS_LOG_DEBUG("Probe response received from " << from);
     MgtProbeResponseHeader probeResp;
     mpdu->GetPacket()->PeekHeader(probeResp);
+
+    RecordCapabilities(probeResp, from, linkId);
+    RecordOperations(probeResp, from, linkId);
+
     if (!CheckSupportedRates(probeResp, linkId))
     {
         return;
@@ -1318,27 +1367,33 @@
     const WifiMacHeader& hdr = mpdu->GetHeader();
     NS_ASSERT(hdr.IsAssocResp() || hdr.IsReassocResp());
 
+    MgtAssocResponseHeader assocResp;
+    mpdu->GetPacket()->PeekHeader(assocResp);
+
+    RecordCapabilities(assocResp, hdr.GetAddr2(), linkId);
+    RecordOperations(assocResp, hdr.GetAddr2(), linkId);
+
     if (m_state != WAIT_ASSOC_RESP)
     {
         return;
     }
 
-    std::optional<Mac48Address> apMldAddress;
-    MgtAssocResponseHeader assocResp;
-    mpdu->GetPacket()->PeekHeader(assocResp);
     if (m_assocRequestEvent.IsPending())
     {
         m_assocRequestEvent.Cancel();
     }
+
+    std::optional<Mac48Address> apMldAddress;
     if (assocResp.GetStatusCode().IsSuccess())
     {
         m_aid = assocResp.GetAssociationId();
         NS_LOG_DEBUG((hdr.IsReassocResp() ? "reassociation done" : "association completed"));
-        UpdateApInfo(assocResp, hdr.GetAddr2(), hdr.GetAddr3(), linkId);
+        ApplyOperationalSettings(assocResp, hdr.GetAddr2(), hdr.GetAddr3(), linkId);
         NS_ASSERT(GetLink(linkId).bssid.has_value() && *GetLink(linkId).bssid == hdr.GetAddr3());
         SetBssid(hdr.GetAddr3(), linkId);
         SetState(ASSOCIATED);
-        if ((GetNLinks() > 1) && assocResp.Get<MultiLinkElement>().has_value())
+        if ((GetAssocType() == WifiAssocType::ML_SETUP) &&
+            assocResp.Get<MultiLinkElement>().has_value())
         {
             // this is an ML setup, trace the setup link
             m_setupCompleted(linkId, hdr.GetAddr3());
@@ -1391,83 +1446,75 @@
         return;
     }
 
-    // if this is an MLD, check if we can setup (other) links
-    if (GetNLinks() > 1)
+    // create a list of all local Link IDs. IDs are removed as we find a corresponding
+    // Per-STA Profile Subelements indicating successful association. Links with
+    // remaining IDs are not setup
+    std::list<uint8_t> setupLinks;
+    for (const auto& [id, link] : GetLinks())
     {
-        // create a list of all local Link IDs. IDs are removed as we find a corresponding
-        // Per-STA Profile Subelements indicating successful association. Links with
-        // remaining IDs are not setup
-        std::list<uint8_t> setupLinks;
-        for (const auto& [id, link] : GetLinks())
-        {
-            setupLinks.push_back(id);
-        }
-        if (assocResp.GetStatusCode().IsSuccess())
-        {
-            setupLinks.remove(linkId);
-        }
+        setupLinks.push_back(id);
+    }
+    if (assocResp.GetStatusCode().IsSuccess())
+    {
+        setupLinks.remove(linkId);
+    }
 
-        // if a Multi-Link Element is present, check its content
-        if (const auto& mle = assocResp.Get<MultiLinkElement>())
-        {
-            NS_ABORT_MSG_IF(!GetLink(linkId).bssid.has_value(),
-                            "The link on which the Association Response was received "
-                            "is not a link we requested to setup");
-            NS_ABORT_MSG_IF(linkId != mle->GetLinkIdInfo(),
-                            "The link ID of the AP that transmitted the Association "
-                            "Response does not match the stored link ID");
-            NS_ABORT_MSG_IF(GetWifiRemoteStationManager(linkId)->GetMldAddress(hdr.GetAddr2()) !=
-                                mle->GetMldMacAddress(),
+    // if a Multi-Link Element is present, this is an ML setup, hence check if we can setup (other)
+    // links
+    if (const auto& mle = assocResp.Get<MultiLinkElement>())
+    {
+        NS_ABORT_MSG_IF(!GetLink(linkId).bssid.has_value(),
+                        "The link on which the Association Response was received "
+                        "is not a link we requested to setup");
+        NS_ABORT_MSG_IF(linkId != mle->GetLinkIdInfo(),
+                        "The link ID of the AP that transmitted the Association "
+                        "Response does not match the stored link ID");
+        NS_ABORT_MSG_IF(GetWifiRemoteStationManager(linkId)->GetMldAddress(hdr.GetAddr2()) !=
+                            mle->GetMldMacAddress(),
+                        "The AP MLD MAC address in the received Multi-Link Element does not "
+                        "match the address stored in the station manager for link "
+                            << +linkId);
+        // process the Per-STA Profile Subelements in the Multi-Link Element
+        for (std::size_t elem = 0; elem < mle->GetNPerStaProfileSubelements(); elem++)
+        {
+            auto& perStaProfile = mle->GetPerStaProfile(elem);
+            uint8_t apLinkId = perStaProfile.GetLinkId();
+            auto it = GetLinks().find(apLinkId);
+            uint8_t staLinkid = 0;
+            std::optional<Mac48Address> bssid;
+            NS_ABORT_MSG_IF(it == GetLinks().cend() ||
+                                !(bssid = GetLink((staLinkid = it->first)).bssid).has_value(),
+                            "Setup for AP link ID " << apLinkId << " was not requested");
+            NS_ABORT_MSG_IF(*bssid != perStaProfile.GetStaMacAddress(),
+                            "The BSSID in the Per-STA Profile for link ID "
+                                << +staLinkid << " does not match the stored BSSID");
+            NS_ABORT_MSG_IF(GetWifiRemoteStationManager(staLinkid)->GetMldAddress(
+                                perStaProfile.GetStaMacAddress()) != mle->GetMldMacAddress(),
                             "The AP MLD MAC address in the received Multi-Link Element does not "
                             "match the address stored in the station manager for link "
-                                << +linkId);
-            // process the Per-STA Profile Subelements in the Multi-Link Element
-            for (std::size_t elem = 0; elem < mle->GetNPerStaProfileSubelements(); elem++)
-            {
-                auto& perStaProfile = mle->GetPerStaProfile(elem);
-                uint8_t apLinkId = perStaProfile.GetLinkId();
-                auto it = GetLinks().find(apLinkId);
-                uint8_t staLinkid = 0;
-                std::optional<Mac48Address> bssid;
-                NS_ABORT_MSG_IF(it == GetLinks().cend() ||
-                                    !(bssid = GetLink((staLinkid = it->first)).bssid).has_value(),
-                                "Setup for AP link ID " << apLinkId << " was not requested");
-                NS_ABORT_MSG_IF(*bssid != perStaProfile.GetStaMacAddress(),
-                                "The BSSID in the Per-STA Profile for link ID "
-                                    << +staLinkid << " does not match the stored BSSID");
-                NS_ABORT_MSG_IF(
-                    GetWifiRemoteStationManager(staLinkid)->GetMldAddress(
-                        perStaProfile.GetStaMacAddress()) != mle->GetMldMacAddress(),
-                    "The AP MLD MAC address in the received Multi-Link Element does not "
-                    "match the address stored in the station manager for link "
-                        << +staLinkid);
-                // process the Association Response contained in this Per-STA Profile
-                MgtAssocResponseHeader assoc = perStaProfile.GetAssocResponse();
-                if (assoc.GetStatusCode().IsSuccess())
+                                << +staLinkid);
+            // process the Association Response contained in this Per-STA Profile
+            MgtAssocResponseHeader assoc = perStaProfile.GetAssocResponse();
+            RecordCapabilities(assoc, *bssid, staLinkid);
+            RecordOperations(assoc, *bssid, staLinkid);
+            if (assoc.GetStatusCode().IsSuccess())
+            {
+                NS_ABORT_MSG_IF(m_aid != 0 && m_aid != assoc.GetAssociationId(),
+                                "AID should be the same for all the links");
+                m_aid = assoc.GetAssociationId();
+                NS_LOG_DEBUG("Setup on link " << staLinkid << " completed");
+                ApplyOperationalSettings(assocResp, *bssid, *bssid, staLinkid);
+                SetBssid(*bssid, staLinkid);
+                m_setupCompleted(staLinkid, *bssid);
+                SetState(ASSOCIATED);
+                apMldAddress = GetWifiRemoteStationManager(staLinkid)->GetMldAddress(*bssid);
+                if (!m_linkUp.IsNull())
                 {
-                    NS_ABORT_MSG_IF(m_aid != 0 && m_aid != assoc.GetAssociationId(),
-                                    "AID should be the same for all the links");
-                    m_aid = assoc.GetAssociationId();
-                    NS_LOG_DEBUG("Setup on link " << staLinkid << " completed");
-                    UpdateApInfo(assoc, *bssid, *bssid, staLinkid);
-                    SetBssid(*bssid, staLinkid);
-                    m_setupCompleted(staLinkid, *bssid);
-                    SetState(ASSOCIATED);
-                    apMldAddress = GetWifiRemoteStationManager(staLinkid)->GetMldAddress(*bssid);
-                    if (!m_linkUp.IsNull())
-                    {
-                        m_linkUp();
-                    }
+                    m_linkUp();
                 }
-                // remove the ID of the link we setup
-                setupLinks.remove(staLinkid);
             }
-        }
-        // remaining links in setupLinks are not setup and hence must be disabled
-        for (const auto& id : setupLinks)
-        {
-            GetLink(id).bssid = std::nullopt;
-            GetLink(id).phy->SetOffMode();
+            // remove the ID of the link we setup
+            setupLinks.remove(staLinkid);
         }
         if (apMldAddress)
         {
@@ -1475,6 +1522,12 @@
             m_assocLogger(*apMldAddress);
         }
     }
+    // remaining links in setupLinks are not setup and hence must be disabled
+    for (const auto& id : setupLinks)
+    {
+        GetLink(id).bssid = std::nullopt;
+        GetLink(id).phy->SetOffMode();
+    }
 
     // the station that associated with the AP may have dissociated and then associated again.
     // In this case, the station may store packets from the previous period in which it was
@@ -1612,10 +1665,66 @@
 }
 
 void
-StaWifiMac::UpdateApInfo(const MgtFrameType& frame,
-                         const Mac48Address& apAddr,
-                         const Mac48Address& bssid,
-                         uint8_t linkId)
+StaWifiMac::RecordOperations(const MgtFrameType& frame, const Mac48Address& from, uint8_t linkId)
+{
+    NS_LOG_FUNCTION(this << frame.index() << from << linkId);
+    auto remoteStationManager = GetWifiRemoteStationManager(linkId);
+    auto phy = GetWifiPhy(linkId);
+
+    // lambda processing Information Elements included in all frame types
+    auto recordFromOpIes = [&](auto&& frame) {
+        const auto& edcaParameters = frame.template Get<EdcaParameterSet>();
+        const auto qosSupported = edcaParameters.has_value();
+        GetWifiRemoteStationManager(linkId)->SetQosSupport(from, qosSupported);
+
+        if (GetHtSupported(linkId))
+        {
+            /* HT station */
+            if (const auto& htOperation = frame.template Get<HtOperation>())
+            {
+                remoteStationManager->AddStationHtOperation(from, *htOperation);
+            }
+        }
+
+        if (GetVhtSupported(linkId))
+        {
+            /* VHT station */
+            if (const auto& vhtOperation = frame.template Get<VhtOperation>())
+            {
+                remoteStationManager->AddStationVhtOperation(from, *vhtOperation);
+            }
+        }
+
+        if (!GetHeSupported())
+        {
+            return;
+        }
+        /* HE station */
+        if (const auto& heOperation = frame.template Get<HeOperation>())
+        {
+            remoteStationManager->AddStationHeOperation(from, *heOperation);
+        }
+
+        if (!GetEhtSupported())
+        {
+            return;
+        }
+        /* EHT station */
+        if (const auto& ehtOperation = frame.template Get<EhtOperation>())
+        {
+            remoteStationManager->AddStationEhtOperation(from, *ehtOperation);
+        }
+    };
+
+    // process Information Elements included in the current frame variant
+    std::visit(recordFromOpIes, frame);
+}
+
+void
+StaWifiMac::ApplyOperationalSettings(const MgtFrameType& frame,
+                                     const Mac48Address& apAddr,
+                                     const Mac48Address& bssid,
+                                     uint8_t linkId)
 {
     NS_LOG_FUNCTION(this << frame.index() << apAddr << bssid << +linkId);
 
@@ -1631,35 +1740,21 @@
         erpInformation = &probe->Get<ErpInformation>();
     }
 
-    // lambda processing Information Elements included in all frame types
-    auto commonOps = [&](auto&& frame) {
+    // lambda processing Information Elements included in all frame types sent by APs
+    auto processOtherIes = [&](auto&& frame) {
         const auto& capabilities = frame.Capabilities();
-        NS_ASSERT(frame.template Get<SupportedRates>());
-        const auto rates = AllSupportedRates{*frame.template Get<SupportedRates>(),
-                                             frame.template Get<ExtendedSupportedRatesIE>()};
-        for (const auto& mode : GetWifiPhy(linkId)->GetModeList())
-        {
-            if (rates.IsSupportedRate(mode.GetDataRate(GetWifiPhy(linkId)->GetChannelWidth())))
-            {
-                GetWifiRemoteStationManager(linkId)->AddSupportedMode(apAddr, mode);
-                if (rates.IsBasicRate(mode.GetDataRate(GetWifiPhy(linkId)->GetChannelWidth())))
-                {
-                    GetWifiRemoteStationManager(linkId)->AddBasicMode(mode);
-                }
-            }
-        }
-
         bool isShortPreambleEnabled = capabilities.IsShortPreamble();
+        auto remoteStationManager = GetWifiRemoteStationManager(linkId);
         if (erpInformation && erpInformation->has_value() && GetErpSupported(linkId))
         {
             isShortPreambleEnabled &= !(*erpInformation)->GetBarkerPreambleMode();
             if ((*erpInformation)->GetUseProtection() != 0)
             {
-                GetWifiRemoteStationManager(linkId)->SetUseNonErpProtection(true);
+                remoteStationManager->SetUseNonErpProtection(true);
             }
             else
             {
-                GetWifiRemoteStationManager(linkId)->SetUseNonErpProtection(false);
+                remoteStationManager->SetUseNonErpProtection(false);
             }
             if (capabilities.IsShortSlotTime() == true)
             {
@@ -1672,20 +1767,17 @@
                 GetWifiPhy(linkId)->SetSlot(MicroSeconds(20));
             }
         }
-        GetWifiRemoteStationManager(linkId)->SetShortPreambleEnabled(isShortPreambleEnabled);
-        GetWifiRemoteStationManager(linkId)->SetShortSlotTimeEnabled(
-            capabilities.IsShortSlotTime());
+        remoteStationManager->SetShortPreambleEnabled(isShortPreambleEnabled);
+        remoteStationManager->SetShortSlotTimeEnabled(capabilities.IsShortSlotTime());
 
         if (!GetQosSupported())
         {
             return;
         }
         /* QoS station */
-        bool qosSupported = false;
         const auto& edcaParameters = frame.template Get<EdcaParameterSet>();
         if (edcaParameters.has_value())
         {
-            qosSupported = true;
             // The value of the TXOP Limit field is specified as an unsigned integer, with the least
             // significant octet transmitted first, in units of 32 μs.
             SetEdcaParameters({AC_BE,
@@ -1713,45 +1805,14 @@
                                32 * MicroSeconds(edcaParameters->GetVoTxopLimit())},
                               linkId);
         }
-        GetWifiRemoteStationManager(linkId)->SetQosSupport(apAddr, qosSupported);
 
         if (GetHtSupported(linkId))
         {
             /* HT station */
             if (const auto& htCapabilities = frame.template Get<HtCapabilities>();
-                htCapabilities.has_value())
-            {
-                GetWifiRemoteStationManager(linkId)->AddStationHtCapabilities(apAddr,
-                                                                              *htCapabilities);
-            }
-            else
-            {
-                GetWifiRemoteStationManager(linkId)->RemoveAllSupportedMcs(apAddr);
-            }
-            // TODO: process ExtendedCapabilities
-            // ExtendedCapabilities extendedCapabilities = frame.GetExtendedCapabilities ();
-        }
-
-        // we do not return if VHT is not supported because HE STAs operating in
-        // the 2.4 GHz band do not support VHT
-        if (GetVhtSupported(linkId))
-        {
-            const auto& vhtCapabilities = frame.template Get<VhtCapabilities>();
-            // we will always fill in RxHighestSupportedLgiDataRate field at TX, so this can be used
-            // to check whether it supports VHT
-            if (vhtCapabilities.has_value() &&
-                vhtCapabilities->GetRxHighestSupportedLgiDataRate() > 0)
+                !htCapabilities.has_value())
             {
-                GetWifiRemoteStationManager(linkId)->AddStationVhtCapabilities(apAddr,
-                                                                               *vhtCapabilities);
-                // const auto& vhtOperation = frame.GetVhtOperation ();
-                for (const auto& mcs : GetWifiPhy(linkId)->GetMcsList(WIFI_MOD_CLASS_VHT))
-                {
-                    if (vhtCapabilities->IsSupportedRxMcs(mcs.GetMcsValue()))
-                    {
-                        GetWifiRemoteStationManager(linkId)->AddSupportedMcs(apAddr, mcs);
-                    }
-                }
+                remoteStationManager->RemoveAllSupportedMcs(apAddr);
             }
         }
 
@@ -1760,22 +1821,9 @@
             return;
         }
         /* HE station */
-        const auto& heCapabilities = frame.template Get<HeCapabilities>();
-        if (heCapabilities.has_value() && heCapabilities->GetSupportedMcsAndNss() != 0)
+        if (const auto& heOperation = frame.template Get<HeOperation>())
         {
-            GetWifiRemoteStationManager(linkId)->AddStationHeCapabilities(apAddr, *heCapabilities);
-            for (const auto& mcs : GetWifiPhy(linkId)->GetMcsList(WIFI_MOD_CLASS_HE))
-            {
-                if (heCapabilities->IsSupportedRxMcs(mcs.GetMcsValue()))
-                {
-                    GetWifiRemoteStationManager(linkId)->AddSupportedMcs(apAddr, mcs);
-                }
-            }
-            if (const auto& heOperation = frame.template Get<HeOperation>();
-                heOperation.has_value())
-            {
-                GetHeConfiguration()->m_bssColor = heOperation->m_bssColorInfo.m_bssColor;
-            }
+            GetHeConfiguration()->m_bssColor = heOperation->m_bssColorInfo.m_bssColor;
         }
 
         const auto& muEdcaParameters = frame.template Get<MuEdcaParameterSet>();
@@ -1807,26 +1855,11 @@
                                 linkId);
         }
 
-        if (Is6GhzBand(linkId))
-        {
-            if (const auto& he6GhzCapabilities = frame.template Get<He6GhzBandCapabilities>())
-            {
-                GetWifiRemoteStationManager(linkId)->AddStationHe6GhzCapabilities(
-                    apAddr,
-                    *he6GhzCapabilities);
-            }
-        }
-
         if (!GetEhtSupported())
         {
             return;
         }
         /* EHT station */
-        const auto& ehtCapabilities = frame.template Get<EhtCapabilities>();
-        // TODO: once we support non constant rate managers, we should add checks here whether EHT
-        // is supported by the peer
-        GetWifiRemoteStationManager(linkId)->AddStationEhtCapabilities(apAddr, *ehtCapabilities);
-
         if (const auto& mle = frame.template Get<MultiLinkElement>(); mle && m_emlsrManager)
         {
             if (mle->HasEmlCapabilities())
@@ -1843,7 +1876,7 @@
     };
 
     // process Information Elements included in the current frame variant
-    std::visit(commonOps, frame);
+    std::visit(processOtherIes, frame);
 }
 
 void
@@ -2070,15 +2103,23 @@
 {
     NS_LOG_FUNCTION(this << phy << linkId << delay.As(Time::US));
 
-    // If the PHY is switching channel to operate on another link, then it is no longer operating
-    // on the current link. If any link (other than the current link) points to the PHY that is
-    // switching channel, reset the phy pointer of the link
+    // if the PHY that is starting a channel switch was operating on a link (i.e., there is a link,
+    // other than the new link, that points to the PHY), then it is no longer operating on that
+    // link and we have to reset the phy pointer of the link.
     for (auto& [id, link] : GetLinks())
     {
         if (link->phy == phy && id != linkId)
         {
+            // we do not get here if the PHY is not operating on any link, which happens if:
+            // - PHY is an aux PHY to reconnect to its link
+            // - PHY is an aux PHY that is starting switching to the link previously occupied by the
+            //   main PHY (because the main PHY is now operating on the aux PHY link)
+            // - PHY is the main PHY that completed the channel switch but connecting it to the link
+            //   was postponed until now (e.g. because the aux PHY on the link was receiving an ICF)
+            // - PHY is the main PHY that was switching, the switch was interrupted and it is
+            //   now starting switching to another link
             link->phy = nullptr;
-            m_emlsrLinkSwitchLogger(id, nullptr);
+            m_emlsrLinkSwitchLogger(id, phy, false);
         }
     }
 
@@ -2101,7 +2142,7 @@
         // Connect the station manager on the new link to the given PHY
         newLink.stationManager->SetupPhy(phy);
         // log link switch
-        m_emlsrLinkSwitchLogger(linkId, phy);
+        m_emlsrLinkSwitchLogger(linkId, phy, true);
     };
 
     // cancel any pending event for the given PHY to switch link
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/sta-wifi-mac.h ns-3.45/src/wifi/model/sta-wifi-mac.h
--- ns-3.44/src/wifi/model/sta-wifi-mac.h	2025-03-09 16:55:49.799372700 -0700
+++ ns-3.45/src/wifi/model/sta-wifi-mac.h	2025-06-01 20:34:45.625702100 -0700
@@ -34,6 +34,18 @@
 /**
  * @ingroup wifi
  *
+ * Type of association performed by this device (provided that it is supported by the standard
+ * configured for this device).
+ */
+enum class WifiAssocType : uint8_t
+{
+    LEGACY = 0,
+    ML_SETUP
+};
+
+/**
+ * @ingroup wifi
+ *
  * Scan type (active or passive)
  */
 enum class WifiScanType : uint8_t
@@ -137,10 +149,6 @@
     friend class ::MultiLinkOperationsTestBase;
     friend class ::ProbeExchTest;
 
-    /// type of the management frames used to get info about APs
-    using MgtFrameType =
-        std::variant<MgtBeaconHeader, MgtProbeResponseHeader, MgtAssocResponseHeader>;
-
     /**
      * Struct to hold information regarding observed AP through
      * active/passive scanning
@@ -267,6 +275,9 @@
      */
     uint16_t GetAssociationId() const;
 
+    /// @return the type of association procedure performed by this device
+    WifiAssocType GetAssocType() const;
+
     /**
      * Enable or disable Power Save mode on the given link.
      *
@@ -316,7 +327,8 @@
      * Notify that the given PHY switched channel to operate on another EMLSR link.
      *
      * @param phy the given PHY
-     * @param linkId the ID of the EMLSR link on which the given PHY is operating
+     * @param linkId the ID of the EMLSR link on which the given PHY operates after
+     *               the channel switch
      * @param delay the delay after which the channel switch will be completed
      */
     void NotifySwitchingEmlsrLink(Ptr<WifiPhy> phy, uint8_t linkId, Time delay);
@@ -452,19 +464,27 @@
     void ReceiveAssocResp(Ptr<const WifiMpdu> mpdu, uint8_t linkId);
 
     /**
-     * Update associated AP's information from the given management frame (Beacon,
-     * Probe Response or Association Response). If STA is not associated, this
-     * information will be used for the association process.
+     * Update operations information from the given management frame.
+     *
+     * @param frame the body of the given management frame
+     * @param addr MAC address of the sender
+     * @param linkId ID of the link the management frame was received over
+     */
+    void RecordOperations(const MgtFrameType& frame, const Mac48Address& addr, uint8_t linkId);
+
+    /**
+     * Update operational settings based on associated AP's information provided by the given
+     * management frame (Beacon, Probe Response or Association Response).
      *
      * @param frame the body of the given management frame
      * @param apAddr MAC address of the AP
      * @param bssid MAC address of BSSID
      * @param linkId ID of the link the management frame was received over
      */
-    void UpdateApInfo(const MgtFrameType& frame,
-                      const Mac48Address& apAddr,
-                      const Mac48Address& bssid,
-                      uint8_t linkId);
+    void ApplyOperationalSettings(const MgtFrameType& frame,
+                                  const Mac48Address& apAddr,
+                                  const Mac48Address& bssid,
+                                  uint8_t linkId);
 
     /**
      * Get the (Re)Association Request frame to send on a given link. The returned frame
@@ -633,6 +653,7 @@
     MacState m_state;                             ///< MAC state
     uint16_t m_aid;                               ///< Association AID
     Ptr<WifiAssocManager> m_assocManager;         ///< Association Manager
+    WifiAssocType m_assocType;                    ///< type of association
     Ptr<EmlsrManager> m_emlsrManager;             ///< EMLSR Manager
     Time m_waitBeaconTimeout;                     ///< wait beacon timeout
     Time m_probeRequestTimeout;                   ///< probe request timeout
@@ -653,12 +674,13 @@
     /// store the UL TID-to-Link Mapping included in the Association Request frame
     WifiTidLinkMapping m_ulTidLinkMappingInAssocReq;
 
-    TracedCallback<Mac48Address> m_assocLogger;                    ///< association logger
-    TracedCallback<uint8_t, Mac48Address> m_setupCompleted;        ///< link setup completed logger
-    TracedCallback<Mac48Address> m_deAssocLogger;                  ///< disassociation logger
-    TracedCallback<Time> m_beaconArrival;                          ///< beacon arrival logger
-    TracedCallback<ApInfo> m_beaconInfo;                           ///< beacon info logger
-    TracedCallback<uint8_t, Ptr<WifiPhy>> m_emlsrLinkSwitchLogger; ///< EMLSR link switch logger
+    TracedCallback<Mac48Address> m_assocLogger;             ///< association logger
+    TracedCallback<uint8_t, Mac48Address> m_setupCompleted; ///< link setup completed logger
+    TracedCallback<Mac48Address> m_deAssocLogger;           ///< disassociation logger
+    TracedCallback<Time> m_beaconArrival;                   ///< beacon arrival logger
+    TracedCallback<ApInfo> m_beaconInfo;                    ///< beacon info logger
+    TracedCallback<uint8_t, Ptr<WifiPhy>, bool>
+        m_emlsrLinkSwitchLogger; ///< EMLSR link switch logger
 
     /// TracedCallback signature for link setup completed/canceled events
     using LinkSetupCallback = void (*)(uint8_t /* link ID */, Mac48Address /* AP address */);
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/supported-rates.cc ns-3.45/src/wifi/model/supported-rates.cc
--- ns-3.44/src/wifi/model/supported-rates.cc	2025-03-09 16:55:49.799372700 -0700
+++ ns-3.45/src/wifi/model/supported-rates.cc	2025-06-01 20:34:45.625702100 -0700
@@ -30,7 +30,7 @@
 void
 SupportedRates::Print(std::ostream& os) const
 {
-    os << "rates=[";
+    os << "Supported Rates=[";
     for (std::size_t i = 0; i < m_rates.size(); i++)
     {
         if ((m_rates[i] & 0x80) > 0)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/supported-rates.h ns-3.45/src/wifi/model/supported-rates.h
--- ns-3.44/src/wifi/model/supported-rates.h	2025-03-09 16:55:49.799372700 -0700
+++ ns-3.45/src/wifi/model/supported-rates.h	2025-06-01 20:34:45.625702100 -0700
@@ -21,7 +21,7 @@
  * @brief The Supported Rates Information Element
  * @ingroup wifi
  *
- * This class knows how to serialise and deserialise the Supported
+ * This class knows how to serialize and deserialize the Supported
  * Rates Element that holds the first 8 (non-HT) supported rates.
  *
  * The \c ExtendedSupportedRatesIE class deals with rates beyond the first 8.
@@ -57,7 +57,7 @@
  * @brief The Extended Supported Rates Information Element
  * @ingroup wifi
  *
- * This class knows how to serialise and deserialise the Extended
+ * This class knows how to serialize and deserialize the Extended
  * Supported Rates Element that holds (non-HT) rates beyond the 8 that
  * the original Supported Rates element can carry.
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/tim.cc ns-3.45/src/wifi/model/tim.cc
--- ns-3.44/src/wifi/model/tim.cc	2025-03-09 16:55:49.799372700 -0700
+++ ns-3.45/src/wifi/model/tim.cc	2025-06-01 20:34:45.625702100 -0700
@@ -8,6 +8,8 @@
 
 #include "tim.h"
 
+#include "wifi-constants.h"
+
 #include <algorithm>
 #include <cstdint>
 
@@ -37,7 +39,7 @@
 void
 Tim::AddAid(uint16_t aid)
 {
-    NS_ABORT_IF(aid > 2007);
+    NS_ABORT_IF(aid > MAX_AID);
 
     m_aidValues.insert(aid);
 }
@@ -205,9 +207,8 @@
 void
 Tim::Print(std::ostream& os) const
 {
-    os << "DTIM Count: " << +m_dtimCount << ", "
-       << "DTIM Period: " << +m_dtimPeriod << ", "
-       << "Has Multicast Pending: " << m_hasMulticastPending << ", AID values:";
+    os << "TIM=[DTIM Count: " << +m_dtimCount << ", DTIM Period: " << +m_dtimPeriod
+       << ", Has Multicast Pending: " << m_hasMulticastPending << ", AID values: ";
     for (uint16_t aid = 0; aid < 2008; ++aid)
     {
         if (HasAid(aid))
@@ -215,6 +216,7 @@
             os << aid << " ";
         }
     }
+    os << "]";
 }
 
 } // namespace ns3
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/txop.cc ns-3.45/src/wifi/model/txop.cc
--- ns-3.44/src/wifi/model/txop.cc	2025-03-09 16:55:49.799372700 -0700
+++ ns-3.45/src/wifi/model/txop.cc	2025-06-01 20:34:45.625702100 -0700
@@ -65,16 +65,18 @@
                                           "AC_BEACON",
                                           AC_UNDEF,
                                           "AC_UNDEF"))
-            .AddAttribute("MinCw",
-                          "The minimum value of the contention window (just for the first link, "
-                          "in case of 11be multi-link devices).",
-                          TypeId::ATTR_GET | TypeId::ATTR_SET, // do not set at construction time
-                          UintegerValue(15),
-                          MakeUintegerAccessor((void(Txop::*)(uint32_t)) & Txop::SetMinCw,
-                                               (uint32_t(Txop::*)() const) & Txop::GetMinCw),
-                          MakeUintegerChecker<uint32_t>(),
-                          TypeId::SupportLevel::OBSOLETE,
-                          "Use MinCws attribute instead of MinCw")
+            // NS_DEPRECATED_3_42
+            .AddAttribute(
+                "MinCw",
+                "The minimum value of the contention window (just for the first link, "
+                "in case of 11be multi-link devices).",
+                TypeId::ATTR_GET | TypeId::ATTR_SET, // do not set at construction time
+                UintegerValue(15),
+                MakeUintegerAccessor(static_cast<void (Txop::*)(uint32_t)>(&Txop::SetMinCw),
+                                     static_cast<uint32_t (Txop::*)() const>(&Txop::GetMinCw)),
+                MakeUintegerChecker<uint32_t>(),
+                TypeId::SupportLevel::OBSOLETE,
+                "Use MinCws attribute instead of MinCw")
             .AddAttribute(
                 "MinCws",
                 "The minimum values of the contention window for all the links (sorted in "
@@ -85,16 +87,18 @@
                 AttributeContainerValue<UintegerValue>(),
                 MakeAttributeContainerAccessor<UintegerValue>(&Txop::SetMinCws, &Txop::GetMinCws),
                 MakeAttributeContainerChecker<UintegerValue>(MakeUintegerChecker<uint32_t>()))
-            .AddAttribute("MaxCw",
-                          "The maximum value of the contention window (just for the first link, "
-                          "in case of 11be multi-link devices).",
-                          TypeId::ATTR_GET | TypeId::ATTR_SET, // do not set at construction time
-                          UintegerValue(1023),
-                          MakeUintegerAccessor((void(Txop::*)(uint32_t)) & Txop::SetMaxCw,
-                                               (uint32_t(Txop::*)() const) & Txop::GetMaxCw),
-                          MakeUintegerChecker<uint32_t>(),
-                          TypeId::SupportLevel::OBSOLETE,
-                          "Use MaxCws attribute instead of MaxCw")
+            // NS_DEPRECATED_3_42
+            .AddAttribute(
+                "MaxCw",
+                "The maximum value of the contention window (just for the first link, "
+                "in case of 11be multi-link devices).",
+                TypeId::ATTR_GET | TypeId::ATTR_SET, // do not set at construction time
+                UintegerValue(1023),
+                MakeUintegerAccessor(static_cast<void (Txop::*)(uint32_t)>(&Txop::SetMaxCw),
+                                     static_cast<uint32_t (Txop::*)() const>(&Txop::GetMaxCw)),
+                MakeUintegerChecker<uint32_t>(),
+                TypeId::SupportLevel::OBSOLETE,
+                "Use MaxCws attribute instead of MaxCw")
             .AddAttribute(
                 "MaxCws",
                 "The maximum values of the contention window for all the links (sorted in "
@@ -105,14 +109,15 @@
                 AttributeContainerValue<UintegerValue>(),
                 MakeAttributeContainerAccessor<UintegerValue>(&Txop::SetMaxCws, &Txop::GetMaxCws),
                 MakeAttributeContainerChecker<UintegerValue>(MakeUintegerChecker<uint32_t>()))
+            // NS_DEPRECATED_3_42
             .AddAttribute(
                 "Aifsn",
                 "The AIFSN: the default value conforms to non-QOS (just for the first link, "
                 "in case of 11be multi-link devices).",
                 TypeId::ATTR_GET | TypeId::ATTR_SET, // do not set at construction time
                 UintegerValue(2),
-                MakeUintegerAccessor((void(Txop::*)(uint8_t)) & Txop::SetAifsn,
-                                     (uint8_t(Txop::*)() const) & Txop::GetAifsn),
+                MakeUintegerAccessor(static_cast<void (Txop::*)(uint8_t)>(&Txop::SetAifsn),
+                                     static_cast<uint8_t (Txop::*)() const>(&Txop::GetAifsn)),
                 MakeUintegerChecker<uint8_t>(),
                 TypeId::SupportLevel::OBSOLETE,
                 "Use Aifsns attribute instead of Aifsn")
@@ -126,16 +131,18 @@
                 AttributeContainerValue<UintegerValue>(),
                 MakeAttributeContainerAccessor<UintegerValue>(&Txop::SetAifsns, &Txop::GetAifsns),
                 MakeAttributeContainerChecker<UintegerValue>(MakeUintegerChecker<uint8_t>()))
-            .AddAttribute("TxopLimit",
-                          "The TXOP limit: the default value conforms to non-QoS "
-                          "(just for the first link, in case of 11be multi-link devices).",
-                          TypeId::ATTR_GET | TypeId::ATTR_SET, // do not set at construction time
-                          TimeValue(MilliSeconds(0)),
-                          MakeTimeAccessor((void(Txop::*)(Time)) & Txop::SetTxopLimit,
-                                           (Time(Txop::*)() const) & Txop::GetTxopLimit),
-                          MakeTimeChecker(),
-                          TypeId::SupportLevel::OBSOLETE,
-                          "Use TxopLimits attribute instead of TxopLimit")
+            // NS_DEPRECATED_3_42
+            .AddAttribute(
+                "TxopLimit",
+                "The TXOP limit: the default value conforms to non-QoS "
+                "(just for the first link, in case of 11be multi-link devices).",
+                TypeId::ATTR_GET | TypeId::ATTR_SET, // do not set at construction time
+                TimeValue(MilliSeconds(0)),
+                MakeTimeAccessor(static_cast<void (Txop::*)(Time)>(&Txop::SetTxopLimit),
+                                 static_cast<Time (Txop::*)() const>(&Txop::GetTxopLimit)),
+                MakeTimeChecker(),
+                TypeId::SupportLevel::OBSOLETE,
+                "Use TxopLimits attribute instead of TxopLimit")
             .AddAttribute(
                 "TxopLimits",
                 "The values of TXOP limit for all the links (sorted in increasing order "
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/txop.h ns-3.45/src/wifi/model/txop.h
--- ns-3.44/src/wifi/model/txop.h	2025-03-09 16:55:49.799372700 -0700
+++ ns-3.45/src/wifi/model/txop.h	2025-06-01 20:34:45.626702300 -0700
@@ -423,6 +423,14 @@
     void StartBackoffNow(uint32_t nSlots, uint8_t linkId);
 
     /**
+     * Return the current number of backoff slots on the given link.
+     *
+     * @param linkId the ID of the given link
+     * @return the current number of backoff slots
+     */
+    uint32_t GetBackoffSlots(uint8_t linkId) const;
+
+    /**
      * Check if the Txop has frames to transmit over the given link
      * @param linkId the ID of the given link.
      * @return true if the Txop has frames to transmit.
@@ -495,13 +503,6 @@
     void RequestAccess(uint8_t linkId);
 
     /**
-     * Return the current number of backoff slots on the given link.
-     *
-     * @param linkId the ID of the given link
-     * @return the current number of backoff slots
-     */
-    uint32_t GetBackoffSlots(uint8_t linkId) const;
-    /**
      * Return the time when the backoff procedure started on the given link.
      *
      * @param linkId the ID of the given link
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/vht/vht-capabilities.cc ns-3.45/src/wifi/model/vht/vht-capabilities.cc
--- ns-3.44/src/wifi/model/vht/vht-capabilities.cc	2025-03-09 16:55:49.799372700 -0700
+++ ns-3.45/src/wifi/model/vht/vht-capabilities.cc	2025-06-01 20:34:45.626702300 -0700
@@ -55,7 +55,10 @@
 void
 VhtCapabilities::Print(std::ostream& os) const
 {
-    os << "VHT Capabilities=" << GetVhtCapabilitiesInfo() << "|" << GetSupportedMcsAndNssSet();
+    os << "VHT Capabilities=[Supported Channel Width Set: " << +m_supportedChannelWidthSet
+       << ", SGI 80 MHz: " << +m_shortGuardIntervalFor80Mhz
+       << ", SGI 160 MHz: " << +m_shortGuardIntervalFor160Mhz
+       << ", Max MPDU Length: " << m_maxMpduLength << "]";
 }
 
 uint16_t
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/vht/vht-configuration.cc ns-3.45/src/wifi/model/vht/vht-configuration.cc
--- ns-3.44/src/wifi/model/vht/vht-configuration.cc	2025-03-09 16:55:49.799372700 -0700
+++ ns-3.45/src/wifi/model/vht/vht-configuration.cc	2025-06-01 20:34:45.626702300 -0700
@@ -39,11 +39,15 @@
             .SetParent<Object>()
             .SetGroupName("Wifi")
             .AddConstructor<VhtConfiguration>()
+            // NS_DEPRECATED_3_45
             .AddAttribute("Support160MHzOperation",
                           "Whether or not 160 MHz operation is to be supported.",
                           BooleanValue(true),
                           MakeBooleanAccessor(&VhtConfiguration::m_160MHzSupported),
-                          MakeBooleanChecker())
+                          MakeBooleanChecker(),
+                          TypeId::SupportLevel::OBSOLETE,
+                          "Set an initial channel via WifiPhy::ChannelSettings whose width "
+                          "corresponds to the maximum desired width instead")
             .AddAttribute("SecondaryCcaSensitivityThresholds",
                           "Tuple {threshold for 20MHz PPDUs, threshold for 40MHz PPDUs, threshold "
                           "for 80MHz PPDUs} "
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/vht/vht-configuration.h ns-3.45/src/wifi/model/vht/vht-configuration.h
--- ns-3.44/src/wifi/model/vht/vht-configuration.h	2025-03-09 16:55:49.799372700 -0700
+++ ns-3.45/src/wifi/model/vht/vht-configuration.h	2025-06-01 20:34:45.626702300 -0700
@@ -45,14 +45,14 @@
      * @param enable true if 20 MHz, 40 MHz, 80 MHz and 160 MHz operation is to be supported,
      *               false if 20 MHz, 40 MHz and 80 MHz operation is to be supported
      */
-    NS_DEPRECATED_3_44("Set the m_160MHzSupported member variable instead")
+    NS_DEPRECATED_3_44("Set the ChannelSettings of the WifiPhy instead")
     void Set160MHzOperationSupported(bool enable);
 
     /**
      * @return true if 20 MHz, 40 MHz, 80 MHz and 160 MHz operation is supported,
      *         false if 20 MHz, 40 MHz and 80 MHz operation is supported
      */
-    NS_DEPRECATED_3_44("Get the m_160MHzSupported member variable instead")
+    NS_DEPRECATED_3_44("Use WifiPhy::GetChannelWidth instead")
     bool Get160MHzOperationSupported() const;
 
     using SecondaryCcaSensitivityThresholds =
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/vht/vht-operation.cc ns-3.45/src/wifi/model/vht/vht-operation.cc
--- ns-3.44/src/wifi/model/vht/vht-operation.cc	2025-03-09 16:55:49.799372700 -0700
+++ ns-3.45/src/wifi/model/vht/vht-operation.cc	2025-06-01 20:34:45.626702300 -0700
@@ -28,8 +28,10 @@
 void
 VhtOperation::Print(std::ostream& os) const
 {
-    os << "VHT Operation=" << +GetChannelWidth() << "|" << +GetChannelCenterFrequencySegment0()
-       << "|" << +GetChannelCenterFrequencySegment1() << "|" << GetBasicVhtMcsAndNssSet();
+    os << "VHT Operation=[Channel Width: " << +m_channelWidth
+       << ", Channel Center Frequency Segment 0: " << +m_channelCenterFrequencySegment0
+       << ", Channel Center Frequency Segment 1: " << +m_channelCenterFrequencySegment1
+       << ", Basic VHT-MCS and NSS Set: " << m_basicVhtMcsAndNssSet << "]";
 }
 
 uint16_t
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/vht/vht-operation.h ns-3.45/src/wifi/model/vht/vht-operation.h
--- ns-3.44/src/wifi/model/vht/vht-operation.h	2025-03-09 16:55:49.799372700 -0700
+++ ns-3.45/src/wifi/model/vht/vht-operation.h	2025-06-01 20:34:45.626702300 -0700
@@ -18,7 +18,7 @@
  * @brief The VHT Operation Information Element
  * @ingroup wifi
  *
- * This class knows how to serialise and deserialise
+ * This class knows how to serialize and deserialize
  * the VHT Operation Information Element
  */
 class VhtOperation : public WifiInformationElement
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/vht/vht-phy.cc ns-3.45/src/wifi/model/vht/vht-phy.cc
--- ns-3.44/src/wifi/model/vht/vht-phy.cc	2025-03-09 16:55:49.799372700 -0700
+++ ns-3.45/src/wifi/model/vht/vht-phy.cc	2025-06-01 20:34:45.626702300 -0700
@@ -68,19 +68,9 @@
 // clang-format on
 
 /**
- * @brief map a given channel list type to the corresponding scaling factor
- */
-const std::map<WifiChannelListType, dBm_u> channelTypeToScalingFactor{
-    {WIFI_CHANLIST_PRIMARY, dBm_u{0.0}},
-    {WIFI_CHANLIST_SECONDARY, dBm_u{0.0}},
-    {WIFI_CHANLIST_SECONDARY40, dBm_u{3.0}},
-    {WIFI_CHANLIST_SECONDARY80, dBm_u{6.0}},
-};
-
-/**
  * @brief map a given secondary channel width to its channel list type
  */
-const std::map<MHz_u, WifiChannelListType> secondaryChannels{
+const std::map<MHz_u, WifiChannelListType> vhtSecondaryChannels{
     {MHz_u{20}, WIFI_CHANLIST_SECONDARY},
     {MHz_u{40}, WIFI_CHANLIST_SECONDARY40},
     {MHz_u{80}, WIFI_CHANLIST_SECONDARY80},
@@ -573,85 +563,10 @@
     }
 }
 
-PhyEntity::CcaIndication
-VhtPhy::GetCcaIndication(const Ptr<const WifiPpdu> ppdu)
+const std::map<MHz_u, WifiChannelListType>&
+VhtPhy::GetCcaSecondaryChannels() const
 {
-    if (m_wifiPhy->GetChannelWidth() < 80)
-    {
-        return HtPhy::GetCcaIndication(ppdu);
-    }
-
-    auto ccaThreshold = GetCcaThreshold(ppdu, WIFI_CHANLIST_PRIMARY);
-    auto delayUntilCcaEnd = GetDelayUntilCcaEnd(ccaThreshold, GetPrimaryBand(20));
-    if (delayUntilCcaEnd.IsStrictlyPositive())
-    {
-        return std::make_pair(
-            delayUntilCcaEnd,
-            WIFI_CHANLIST_PRIMARY); // if Primary is busy, ignore CCA for Secondary
-    }
-
-    if (ppdu)
-    {
-        const MHz_u primaryWidth{20};
-        const MHz_u p20MinFreq =
-            m_wifiPhy->GetOperatingChannel().GetPrimaryChannelCenterFrequency(primaryWidth) -
-            (primaryWidth / 2);
-        const MHz_u p20MaxFreq =
-            m_wifiPhy->GetOperatingChannel().GetPrimaryChannelCenterFrequency(primaryWidth) +
-            (primaryWidth / 2);
-        if (ppdu->DoesOverlapChannel(p20MinFreq, p20MaxFreq))
-        {
-            /*
-             * PPDU occupies primary 20 MHz channel, hence we skip CCA sensitivity rules
-             * for signals not occupying the primary 20 MHz channel.
-             */
-            return std::nullopt;
-        }
-    }
-
-    std::vector<MHz_u> secondaryWidthsToCheck;
-    if (ppdu)
-    {
-        for (const auto& secondaryChannel : secondaryChannels)
-        {
-            const auto secondaryWidth = secondaryChannel.first;
-            const MHz_u secondaryMinFreq =
-                m_wifiPhy->GetOperatingChannel().GetSecondaryChannelCenterFrequency(
-                    secondaryWidth) -
-                (secondaryWidth / 2);
-            const MHz_u secondaryMaxFreq =
-                m_wifiPhy->GetOperatingChannel().GetSecondaryChannelCenterFrequency(
-                    secondaryWidth) +
-                (secondaryWidth / 2);
-            if ((m_wifiPhy->GetChannelWidth() > secondaryWidth) &&
-                ppdu->DoesOverlapChannel(secondaryMinFreq, secondaryMaxFreq))
-            {
-                secondaryWidthsToCheck.push_back(secondaryWidth);
-            }
-        }
-    }
-    else
-    {
-        secondaryWidthsToCheck.push_back(20);
-        secondaryWidthsToCheck.push_back(40);
-        if (m_wifiPhy->GetChannelWidth() > 80)
-        {
-            secondaryWidthsToCheck.push_back(80);
-        }
-    }
-
-    for (auto secondaryWidth : secondaryWidthsToCheck)
-    {
-        auto channelType = secondaryChannels.at(secondaryWidth);
-        ccaThreshold = GetCcaThreshold(ppdu, channelType);
-        delayUntilCcaEnd = GetDelayUntilCcaEnd(ccaThreshold, GetSecondaryBand(secondaryWidth));
-        if (delayUntilCcaEnd.IsStrictlyPositive())
-        {
-            return std::make_pair(delayUntilCcaEnd, channelType);
-        }
-    }
-
-    return std::nullopt;
+    return vhtSecondaryChannels;
 }
 
 } // namespace ns3
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/vht/vht-phy.h ns-3.45/src/wifi/model/vht/vht-phy.h
--- ns-3.44/src/wifi/model/vht/vht-phy.h	2025-03-09 16:55:49.799372700 -0700
+++ ns-3.45/src/wifi/model/vht/vht-phy.h	2025-06-01 20:34:45.626702300 -0700
@@ -267,7 +267,7 @@
     PhyFieldRxStatus DoEndReceiveField(WifiPpduField field, Ptr<Event> event) override;
     bool IsAllConfigSupported(WifiPpduField field, Ptr<const WifiPpdu> ppdu) const override;
     uint32_t GetMaxPsduSize() const override;
-    CcaIndication GetCcaIndication(const Ptr<const WifiPpdu> ppdu) override;
+    const std::map<MHz_u, WifiChannelListType>& GetCcaSecondaryChannels() const override;
 
     /**
      * End receiving the SIG-A or SIG-B, perform VHT-specific actions, and
@@ -347,7 +347,7 @@
     static const NesExceptionMap m_exceptionsMap; //!< exception map for number of BCC encoders
                                                   //!< (extracted from VHT-MCS tables)
     static const PpduFormats m_vhtPpduFormats;    //!< VHT PPDU formats
-};                                                // class VhtPhy
+};
 
 } // namespace ns3
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/vht/vht-ppdu.h ns-3.45/src/wifi/model/vht/vht-ppdu.h
--- ns-3.44/src/wifi/model/vht/vht-ppdu.h	2025-03-09 16:55:49.799372700 -0700
+++ ns-3.45/src/wifi/model/vht/vht-ppdu.h	2025-06-01 20:34:45.626702300 -0700
@@ -124,7 +124,9 @@
 
         /// This is used to decide whether MU SIG-B should be added or not
         bool m_mu;
-    }; // class VhtSigHeader
+
+        // end of class VhtSigHeader
+    };
 
     /**
      * Create a VHT PPDU.
@@ -187,7 +189,7 @@
                                    const VhtSigHeader& vhtSig) const;
 
     VhtSigHeader m_vhtSig; //!< the VHT-SIG PHY header
-};                         // class VhtPpdu
+};
 
 } // namespace ns3
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/wifi-assoc-manager.cc ns-3.45/src/wifi/model/wifi-assoc-manager.cc
--- ns-3.44/src/wifi/model/wifi-assoc-manager.cc	2025-03-09 16:55:49.799372700 -0700
+++ ns-3.45/src/wifi/model/wifi-assoc-manager.cc	2025-06-01 20:34:45.626702300 -0700
@@ -10,8 +10,10 @@
 #include "wifi-assoc-manager.h"
 
 #include "sta-wifi-mac.h"
+#include "wifi-phy.h"
 
 #include "ns3/attribute-container.h"
+#include "ns3/boolean.h"
 #include "ns3/eht-configuration.h"
 #include "ns3/enum.h"
 #include "ns3/log.h"
@@ -67,7 +69,15 @@
                 "set are processed. An empty set is equivalent to the set of all links.",
                 AttributeContainerValue<UintegerValue>(),
                 MakeAttributeContainerAccessor<UintegerValue>(&WifiAssocManager::m_allowedLinks),
-                MakeAttributeContainerChecker<UintegerValue>(MakeUintegerChecker<uint8_t>()));
+                MakeAttributeContainerChecker<UintegerValue>(MakeUintegerChecker<uint8_t>()))
+            .AddAttribute("AllowAssocAllChannelWidths",
+                          "If set to true, it bypasses the check on channel width compatibility "
+                          "with the candidate AP. A channel width is compatible if the STA can "
+                          "advertise it to the AP, or AP operates on a channel width that is equal "
+                          "or lower than that channel width.",
+                          BooleanValue(false),
+                          MakeBooleanAccessor(&WifiAssocManager::m_allowAssocAllChannelWidths),
+                          MakeBooleanChecker());
     return tid;
 }
 
@@ -236,6 +246,10 @@
         m_apListIt.erase(bestAp.m_bssid);
     } while (!CanBeReturned(bestAp));
 
+    NS_ABORT_MSG_IF(!m_allowAssocAllChannelWidths && !IsChannelWidthCompatible(bestAp),
+                    "Channel width of STA is not part of the channel width set that can be "
+                    "advertised to the AP");
+
     m_mac->ScanningTimeout(std::move(bestAp));
 }
 
@@ -250,7 +264,7 @@
 {
     NS_LOG_FUNCTION(this);
 
-    if (m_mac->GetNLinks() == 1 || GetSortedList().empty())
+    if (m_mac->GetAssocType() == WifiAssocType::LEGACY || GetSortedList().empty())
     {
         return false;
     }
@@ -361,4 +375,14 @@
     return apList;
 }
 
+bool
+WifiAssocManager::IsChannelWidthCompatible(const StaWifiMac::ApInfo& apInfo) const
+{
+    auto phy = m_mac->GetWifiPhy(apInfo.m_linkId);
+    return GetSupportedChannelWidthSet(phy->GetStandard(), apInfo.m_channel.band)
+               .contains(phy->GetChannelWidth()) ||
+           (phy->GetChannelWidth() >= m_mac->GetWifiRemoteStationManager(apInfo.m_linkId)
+                                          ->GetChannelWidthSupported(apInfo.m_bssid));
+}
+
 } // namespace ns3
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/wifi-assoc-manager.h ns-3.45/src/wifi/model/wifi-assoc-manager.h
--- ns-3.44/src/wifi/model/wifi-assoc-manager.h	2025-03-09 16:55:49.799372700 -0700
+++ ns-3.45/src/wifi/model/wifi-assoc-manager.h	2025-06-01 20:34:45.626702300 -0700
@@ -200,6 +200,16 @@
     virtual bool CanBeReturned(const StaWifiMac::ApInfo& apInfo) const = 0;
 
     /**
+     * Check whether the channel width of the STA is compatible with the channel width of the
+     * operating channel of a given AP. A channel width is compatible if the STA can advertise it to
+     * the AP, or AP operates on a channel width that is equal or lower than that channel width
+     *
+     * @param apInfo the given AP information
+     * @return true if the channel width of the STA is compatible, false otherwise
+     */
+    bool IsChannelWidthCompatible(const StaWifiMac::ApInfo& apInfo) const;
+
+    /**
      * Extract the best AP to associate with from the sorted list and return
      * it, if any, to the STA wifi MAC along with the notification that scanning
      * is completed.
@@ -226,6 +236,9 @@
     std::set<uint8_t> m_allowedLinks; /**< "Only Beacon and Probe Response frames received on a
                                             link belonging to the this set are processed */
 
+    bool m_allowAssocAllChannelWidths; ///< flag whether the check on channel width compatibility
+                                       ///< with the candidate AP should be skipped
+
   private:
     /**
      * Start a scanning procedure. This method needs to schedule a call to
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/wifi-constants.cc ns-3.45/src/wifi/model/wifi-constants.cc
--- ns-3.44/src/wifi/model/wifi-constants.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.45/src/wifi/model/wifi-constants.cc	2025-06-01 20:34:45.626702300 -0700
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 2024 DERONNE SOFTWARE ENGINEERING
+ *
+ * SPDX-License-Identifier: GPL-2.0-only
+ *
+ * Author: Sébastien Deronne <sebastien.deronne@gmail.com>
+ */
+
+#include "wifi-constants.h"
+
+namespace ns3
+{
+
+const Time WIFI_TU = MicroSeconds(1024);
+
+const Time EMLSR_RX_PHY_START_DELAY = MicroSeconds(20);
+
+const Time OFDM_SIFS_TIME_20MHZ = MicroSeconds(16);
+
+const Time OFDM_SLOT_TIME_20MHZ = MicroSeconds(9);
+
+const Time OFDM_SIFS_TIME_10MHZ = MicroSeconds(32);
+
+const Time OFDM_SLOT_TIME_10MHZ = MicroSeconds(13);
+
+const Time OFDM_SIFS_TIME_5MHZ = MicroSeconds(64);
+
+const Time OFDM_SLOT_TIME_5MHZ = MicroSeconds(21);
+
+const Time DSSS_SIFS_TIME = MicroSeconds(10);
+
+const Time DSSS_SLOT_TIME = MicroSeconds(20);
+
+const Time MAX_PROPAGATION_DELAY = MicroSeconds(1);
+
+const Time MEDIUM_SYNC_THRESHOLD = MicroSeconds(72);
+
+} // namespace ns3
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/wifi-constants.h ns-3.45/src/wifi/model/wifi-constants.h
--- ns-3.44/src/wifi/model/wifi-constants.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.45/src/wifi/model/wifi-constants.h	2025-06-01 20:34:45.626702300 -0700
@@ -0,0 +1,130 @@
+/*
+ * Copyright (c) 2024 DERONNE SOFTWARE ENGINEERING
+ *
+ * SPDX-License-Identifier: GPL-2.0-only
+ *
+ * Author: Sébastien Deronne <sebastien.deronne@gmail.com>
+ */
+
+#ifndef WIFI_CONSTANTS_H
+#define WIFI_CONSTANTS_H
+
+#include "ns3/nstime.h"
+
+/**
+ * @file
+ * @ingroup wifi
+ * Declaration of the constants used across wifi module
+ */
+
+namespace ns3
+{
+
+/// Wi-Fi Time Unit value in microseconds (see IEEE 802.11-2020 sec. 3.1)
+/// Used to initialize WIFI_TU
+extern const Time WIFI_TU;
+
+/// aRxPHYStartDelay value to use when waiting for a new frame in the context of EMLSR operations
+/// (Sec. 35.3.17 of 802.11be D3.1)
+extern const Time EMLSR_RX_PHY_START_DELAY;
+
+/// aSIFSTime value for OFDM (20 MHz channel spacing)
+/// (Table 17-21 "OFDM PHY characteristics" of 802.11-2020)
+extern const Time OFDM_SIFS_TIME_20MHZ;
+
+/// aSlotTime duration for OFDM (20 MHz channel spacing)
+/// (Table 17-21 "OFDM PHY characteristics" of 802.11-2020)
+extern const Time OFDM_SLOT_TIME_20MHZ;
+
+/// aSIFSTime value for OFDM (10 MHz channel spacing)
+/// (Table 17-21 "OFDM PHY characteristics" of 802.11-2020)
+extern const Time OFDM_SIFS_TIME_10MHZ;
+
+/// aSlotTime duration for OFDM (10 MHz channel spacing)
+/// (Table 17-21 "OFDM PHY characteristics" of 802.11-2020)
+extern const Time OFDM_SLOT_TIME_10MHZ;
+
+/// aSIFSTime value for OFDM (5 MHz channel spacing)
+/// (Table 17-21 "OFDM PHY characteristics" of 802.11-2020)
+extern const Time OFDM_SIFS_TIME_5MHZ;
+
+/// aSlotTime duration for OFDM (5 MHz channel spacing)
+/// (Table 17-21 "OFDM PHY characteristics" of 802.11-2020)
+extern const Time OFDM_SLOT_TIME_5MHZ;
+
+/// aSIFSTime duration for DSSS (Table 16-4 "HR/DSSS PHY characteristics" of 802.11-2020)
+extern const Time DSSS_SIFS_TIME;
+
+/// aSlotTime duration for DSSS (Table 16-4 "HR/DSSS PHY characteristics" of 802.11-2020)
+extern const Time DSSS_SLOT_TIME;
+
+/// maximum propagation delay
+extern const Time MAX_PROPAGATION_DELAY;
+
+/// The aMediumSyncThreshold defined by Sec. 35.3.16.18.1 of 802.11be D4.0
+extern const Time MEDIUM_SYNC_THRESHOLD;
+
+/// Subcarrier frequency spacing in Hz (Table 19-6 "Timing-related constants" of 802.11-2020)
+static constexpr uint32_t SUBCARRIER_FREQUENCY_SPACING{312500};
+
+/// Subcarrier frequency spacing for the HE modulated fields in Hz (Table 27-12 "Timing-related
+/// constants" of 802.11ax-2021)
+static constexpr uint32_t SUBCARRIER_FREQUENCY_SPACING_HE{78125};
+
+/// Size of the space of sequence numbers
+static constexpr uint16_t SEQNO_SPACE_SIZE{4096};
+
+/// Size of the half the space of sequence numbers (used to determine old packets)
+static constexpr uint16_t SEQNO_SPACE_HALF_SIZE{SEQNO_SPACE_SIZE / 2};
+
+/// This value conforms to the 802.11 specification
+static constexpr uint16_t MAX_MSDU_SIZE{2304};
+
+/// The length in octets of the IEEE 802.11 MAC FCS field
+static constexpr uint16_t WIFI_MAC_FCS_LENGTH{4};
+
+/// The minimum value for dot11RTSThreshold (C.3 MIB detail in IEEE Std 802.11-2020)
+static constexpr uint32_t WIFI_MIN_RTS_THRESHOLD{0};
+
+/// The maximum value for dot11RTSThreshold (C.3 MIB detail in IEEE Std 802.11-2020)
+static constexpr uint32_t WIFI_MAX_RTS_THRESHOLD{4692480};
+
+/// The default value for dot11RTSThreshold (C.3 MIB detail in IEEE Std 802.11-2020)
+static constexpr uint32_t WIFI_DEFAULT_RTS_THRESHOLD{WIFI_MAX_RTS_THRESHOLD};
+
+/// The minimum value for dot11FragmentationThreshold (C.3 MIB detail in IEEE Std 802.11-2020)
+static constexpr uint32_t WIFI_MIN_FRAG_THRESHOLD{256};
+
+/// The maximum value for dot11FragmentationThreshold (C.3 MIB detail in IEEE Std 802.11-2020)
+static constexpr uint32_t WIFI_MAX_FRAG_THRESHOLD{65535};
+
+/// The default value for dot11FragmentationThreshold (C.3 MIB detail in IEEE Std 802.11-2020)
+static constexpr uint32_t WIFI_DEFAULT_FRAG_THRESHOLD{WIFI_MAX_FRAG_THRESHOLD};
+
+/// STA_ID to identify a single user (SU)
+static constexpr uint16_t SU_STA_ID{65535};
+
+/// Empty 242-tone RU identifier for HE (Section 26.11.7 802.11ax-2021)
+static constexpr uint8_t EMPTY_242_TONE_HE_RU{113};
+
+/// The minimum value for the association ID (Sec. 9.4.1.8 of 802.11-2020)
+static constexpr uint16_t MIN_AID{1};
+
+/// The maximum value for the association ID (Sec. 9.4.1.8 of 802.11-2020)
+static constexpr uint16_t MAX_AID{2007};
+
+/// STA_ID for a RU that is intended for no user (Section 26.11.1 802.11ax-2021)
+static constexpr uint16_t NO_USER_STA_ID{2046};
+
+/// Unassigned 242-tone RU identifier for EHT (Table Table 36-34 IEEE 802.11be D7.0)
+static constexpr uint8_t UNASSIGNED_242_TONE_EHT_RU{27};
+
+/// The maximum value for the association ID updated since 802.11be (Sec. 9.4.1.8 of 802.11be D7.0)
+static constexpr uint16_t EHT_MAX_AID{2006};
+
+/// AID value for Special User Info field in trigger frames (Sec. 9.3.1.22.3 of 802.11be D7.0)
+static constexpr uint16_t AID_SPECIAL_USER{2007};
+
+} // namespace ns3
+
+#endif /* WIFI_CONSTANTS_H */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/wifi-default-ack-manager.cc ns-3.45/src/wifi/model/wifi-default-ack-manager.cc
--- ns-3.44/src/wifi/model/wifi-default-ack-manager.cc	2025-03-09 16:55:49.799372700 -0700
+++ ns-3.45/src/wifi/model/wifi-default-ack-manager.cc	2025-06-01 20:34:45.626702300 -0700
@@ -703,7 +703,10 @@
         acknowledgment->stationsReplyingWithBlockAck.emplace(
             receiver,
             WifiDlMuAggregateTf::BlockAckInfo{
-                GetMuBarSize({m_mac->GetBarTypeAsOriginator(receiver, tid)}),
+                GetMuBarSize(IsEht(txParams.m_txVector.GetPreambleType()) ? TriggerFrameVariant::EHT
+                                                                          : TriggerFrameVariant::HE,
+                             txParams.m_txVector.GetChannelWidth(),
+                             {m_mac->GetBarTypeAsOriginator(receiver, tid)}),
                 edca->GetBaManager()->GetBlockAckReqHeader(
                     mpdu->GetOriginal()->GetHeader().GetAddr1(),
                     tid),
@@ -754,7 +757,10 @@
                 NS_LOG_INFO("Unallocated RU");
                 continue;
             }
-            NS_ABORT_MSG_IF(aid12 == 0 || aid12 > 2007, "Allocation of RA-RUs is not supported");
+            const auto maxAid =
+                IsEht(txParams.m_txVector.GetPreambleType()) ? EHT_MAX_AID : MAX_AID;
+            NS_ABORT_MSG_IF(aid12 < MIN_AID || aid12 > maxAid,
+                            "Allocation of RA-RUs is not supported");
 
             const auto it = apMac->GetStaList(m_linkId).find(aid12);
             NS_ASSERT(it != apMac->GetStaList(m_linkId).end());
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/wifi-default-assoc-manager.cc ns-3.45/src/wifi/model/wifi-default-assoc-manager.cc
--- ns-3.44/src/wifi/model/wifi-default-assoc-manager.cc	2025-03-09 16:55:49.799372700 -0700
+++ ns-3.45/src/wifi/model/wifi-default-assoc-manager.cc	2025-06-01 20:34:45.627702200 -0700
@@ -13,6 +13,7 @@
 #include "wifi-net-device.h"
 #include "wifi-phy.h"
 
+#include "ns3/boolean.h"
 #include "ns3/log.h"
 #include "ns3/simulator.h"
 #include "ns3/vht-configuration.h"
@@ -40,7 +41,16 @@
                           "notified within this amount of time, we give up setting up that link.",
                           TimeValue(MilliSeconds(5)),
                           MakeTimeAccessor(&WifiDefaultAssocManager::m_channelSwitchTimeout),
-                          MakeTimeChecker(Seconds(0)));
+                          MakeTimeChecker(Seconds(0)))
+            .AddAttribute(
+                "SkipAssocIncompatibleChannelWidth",
+                "If set to true, it does not include APs with incompatible channel width with the "
+                "STA in the list of candidate APs. An incompatible channel width is one that the "
+                "STA cannot advertise to the AP, unless AP operates on a channel width that is "
+                "equal or lower than that channel width.",
+                BooleanValue(false),
+                MakeBooleanAccessor(&WifiDefaultAssocManager::m_skipAssocIncompatibleChannelWidth),
+                MakeBooleanChecker());
     return tid;
 }
 
@@ -206,13 +216,13 @@
                     // switching channel while a PHY is in sleep state fails
                     phy->ResumeFromSleep();
                 }
-                // switch this link to using the channel used by a reported AP (or its primary80
-                // in case the reported AP is using a 160 MHz and the non-AP MLD does not support
-                // 160 MHz operations)
-                if (apChannel.GetTotalWidth() > MHz_u{80} &&
-                    !phy->GetDevice()->GetVhtConfiguration()->m_160MHzSupported)
+
+                // switch this link to using the channel used by a reported AP (or one of its
+                // primary subchannels in case the reported AP has larger channel width than the one
+                // supported by the non-AP MLD)
+                if (apChannel.GetTotalWidth() > phy->GetChannelWidth())
                 {
-                    apChannel = apChannel.GetPrimaryChannel(MHz_u{80});
+                    apChannel = apChannel.GetPrimaryChannel(phy->GetChannelWidth());
                 }
 
                 NS_LOG_DEBUG("Switch link " << +linkId << " to using " << apChannel);
@@ -290,7 +300,8 @@
 bool
 WifiDefaultAssocManager::CanBeInserted(const StaWifiMac::ApInfo& apInfo) const
 {
-    return (m_waitBeaconEvent.IsPending() || m_probeRequestEvent.IsPending());
+    return ((m_waitBeaconEvent.IsPending() || m_probeRequestEvent.IsPending()) &&
+            (!m_skipAssocIncompatibleChannelWidth || IsChannelWidthCompatible(apInfo)));
 }
 
 bool
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/wifi-default-assoc-manager.h ns-3.45/src/wifi/model/wifi-default-assoc-manager.h
--- ns-3.44/src/wifi/model/wifi-default-assoc-manager.h	2025-03-09 16:55:49.799372700 -0700
+++ ns-3.45/src/wifi/model/wifi-default-assoc-manager.h	2025-06-01 20:34:45.627702200 -0700
@@ -57,9 +57,11 @@
      */
     void ChannelSwitchTimeout(uint8_t linkId);
 
-    EventId m_waitBeaconEvent;   ///< wait beacon event
-    EventId m_probeRequestEvent; ///< probe request event
-    Time m_channelSwitchTimeout; ///< maximum delay for channel switching
+    EventId m_waitBeaconEvent;                ///< wait beacon event
+    EventId m_probeRequestEvent;              ///< probe request event
+    Time m_channelSwitchTimeout;              ///< maximum delay for channel switching
+    bool m_skipAssocIncompatibleChannelWidth; ///< flag whether to skip APs with incompatible
+                                              ///< channel width
 
     /** Channel switch info */
     struct ChannelSwitchInfo
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/wifi-default-protection-manager.cc ns-3.45/src/wifi/model/wifi-default-protection-manager.cc
--- ns-3.44/src/wifi/model/wifi-default-protection-manager.cc	2025-03-09 16:55:49.799372700 -0700
+++ ns-3.45/src/wifi/model/wifi-default-protection-manager.cc	2025-06-01 20:34:45.627702200 -0700
@@ -291,6 +291,24 @@
             // PE Disambiguity, UL Spatial Reuse, Doppler and UL HE-SIG-A2 Reserved subfields in
             // the Common Info field are reserved. (Sec. 9.3.1.22.5 of 802.11ax)
             protection->muRts.SetType(TriggerFrameType::MU_RTS_TRIGGER);
+            /* 35.2.2.1 MU-RTS Trigger frame transmission (IEEE P802.11be/D7.0):
+             * If a non-AP EHT STA is addressed in an MU-RTS Trigger frame from an EHT AP and any of
+             * the following conditions is met, the User Info field addressed to an EHT STA in the
+             * MU-RTS Trigger frame shall be an EHT variant User Info field:
+             * - The bandwidth of the EHT MU PPDU or non-HT duplicate PPDU carrying the MU-RTS
+             * Trigger frame is 320 MHz.
+             * - The EHT MU PPDU or non-HT duplicate PPDU carrying the MU-RTS Trigger frame is
+             * punctured. Otherwise, the EHT AP may decide whether the User Info field in the MU-RTS
+             * Trigger frame is an HE variant User Info field or an EHT variant User Info field.
+             */
+            const auto& inactiveSubchannels = txParams.m_txVector.GetInactiveSubchannels();
+            const auto isPunctured =
+                std::find(inactiveSubchannels.cbegin(), inactiveSubchannels.cend(), true) !=
+                inactiveSubchannels.cend();
+            const auto muRtsVariant = ((txWidth == MHz_u{320}) || isPunctured)
+                                          ? TriggerFrameVariant::EHT
+                                          : TriggerFrameVariant::HE;
+            protection->muRts.SetVariant(muRtsVariant);
             protection->muRts.SetUlBandwidth(txWidth);
 
             // Add a User Info field for each of the receivers already in the TX params
@@ -351,6 +369,7 @@
     // PE Disambiguity, UL Spatial Reuse, Doppler and UL HE-SIG-A2 Reserved subfields in
     // the Common Info field are reserved. (Sec. 9.3.1.22.5 of 802.11ax)
     protection->muRts.SetType(TriggerFrameType::MU_RTS_TRIGGER);
+    protection->muRts.SetVariant(trigger.GetVariant());
     protection->muRts.SetUlBandwidth(txWidth);
 
     NS_ABORT_MSG_IF(m_mac->GetTypeOfStation() != AP, "HE APs only can send DL MU PPDUs");
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/wifi-information-element.cc ns-3.45/src/wifi/model/wifi-information-element.cc
--- ns-3.44/src/wifi/model/wifi-information-element.cc	2025-03-09 16:55:49.799372700 -0700
+++ ns-3.45/src/wifi/model/wifi-information-element.cc	2025-06-01 20:34:45.627702200 -0700
@@ -123,7 +123,7 @@
     Buffer::Iterator start = i;
     i = DeserializeIfPresent(i);
     // This IE was not optional, so confirm that we did actually
-    // deserialise something.
+    // deserialize something.
     NS_ASSERT(i.GetDistanceFrom(start) != 0);
     return i;
 }
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/wifi-information-element.h ns-3.45/src/wifi/model/wifi-information-element.h
--- ns-3.44/src/wifi/model/wifi-information-element.h	2025-03-09 16:55:49.799372700 -0700
+++ ns-3.45/src/wifi/model/wifi-information-element.h	2025-06-01 20:34:45.627702200 -0700
@@ -262,7 +262,7 @@
  * maintain the relevant state.
  *
  * This class also provides an implementation of the equality
- * operator, which operates by comparing the serialised versions of
+ * operator, which operates by comparing the serialized versions of
  * the two WifiInformationElement objects concerned.
  *
  * Elements are defined to have a common general format consisting of
@@ -347,7 +347,7 @@
     virtual void Print(std::ostream& os) const;
     /**
      * Compare two IEs for equality by ID & Length, and then through
-     * memcmp of serialised version
+     * memcmp of serialized version
      *
      * @param a another information element to compare with
      *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/wifi-mac.cc ns-3.45/src/wifi/model/wifi-mac.cc
--- ns-3.44/src/wifi/model/wifi-mac.cc	2025-03-09 16:55:49.803372600 -0700
+++ ns-3.45/src/wifi/model/wifi-mac.cc	2025-06-01 20:34:45.628702200 -0700
@@ -376,10 +376,10 @@
                 MakeTraceSourceAccessor(&WifiMac::m_psduMapResponseTimeoutCallback),
                 "ns3::WifiMac::PsduMapResponseTimeoutCallback")
             .AddTraceSource("IcfDropReason",
-                            "An ICF is dropped by an EMLSR client for the given reason on the "
-                            "link with the given ID. This trace source is actually fed by the "
-                            "EHT Frame Exchange Manager through the m_icfDropCallback member "
-                            "variable.",
+                            "An ICF sent by the given sender is dropped by an EMLSR client for "
+                            "the given reason on the link with the given ID. This trace source "
+                            "is actually fed by the EHT Frame Exchange Manager through the "
+                            "m_icfDropCallback member variable.",
                             MakeTraceSourceAccessor(&WifiMac::m_icfDropCallback),
                             "ns3::WifiMac::IcfDropCallback");
     return tid;
@@ -1572,7 +1572,7 @@
 
 void
 WifiMac::BlockUnicastTxOnLinks(WifiQueueBlockedReason reason,
-                               const Mac48Address& address,
+                               Mac48Address address,
                                const std::set<uint8_t>& linkIds)
 {
     std::stringstream ss;
@@ -1586,9 +1586,9 @@
     for (const auto linkId : linkIds)
     {
         auto& link = GetLink(linkId);
-        auto linkAddr = link.stationManager->GetAffiliatedStaAddress(address).value_or(address);
+        auto linkAddr = link.stationManager->GetAffiliatedStaAddress(address);
 
-        if (link.stationManager->GetMldAddress(address) == address && linkAddr == address)
+        if (link.stationManager->GetMldAddress(address) == address && !linkAddr.has_value())
         {
             NS_LOG_DEBUG("Link " << +linkId << " has not been setup with the MLD, skip");
             continue;
@@ -1601,14 +1601,14 @@
                                      acIndex,
                                      {WIFI_QOSDATA_QUEUE, WIFI_CTL_QUEUE},
                                      address,
-                                     GetAddress(),
+                                     GetLocalAddress(address),
                                      {ac.GetLowTid(), ac.GetHighTid()},
                                      {linkId});
             // block queues storing management and control frames that use link addresses
             m_scheduler->BlockQueues(reason,
                                      acIndex,
                                      {WIFI_MGT_QUEUE, WIFI_CTL_QUEUE},
-                                     linkAddr,
+                                     linkAddr.value_or(address),
                                      link.feManager->GetAddress(),
                                      {},
                                      {linkId});
@@ -1618,7 +1618,7 @@
 
 void
 WifiMac::UnblockUnicastTxOnLinks(WifiQueueBlockedReason reason,
-                                 const Mac48Address& address,
+                                 Mac48Address address,
                                  const std::set<uint8_t>& linkIds)
 {
     NS_ASSERT(m_scheduler);
@@ -1639,9 +1639,9 @@
     for (const auto linkId : shuffledLinkIds)
     {
         auto& link = GetLink(linkId);
-        auto linkAddr = link.stationManager->GetAffiliatedStaAddress(address).value_or(address);
+        auto linkAddr = link.stationManager->GetAffiliatedStaAddress(address);
 
-        if (link.stationManager->GetMldAddress(address) == address && linkAddr == address)
+        if (link.stationManager->GetMldAddress(address) == address && !linkAddr.has_value())
         {
             NS_LOG_DEBUG("Link " << +linkId << " has not been setup with the MLD, skip");
             continue;
@@ -1657,14 +1657,14 @@
                                        acIndex,
                                        {WIFI_QOSDATA_QUEUE, WIFI_CTL_QUEUE},
                                        address,
-                                       GetAddress(),
+                                       GetLocalAddress(address),
                                        {ac.GetLowTid(), ac.GetHighTid()},
                                        {linkId});
             // unblock queues storing management and control frames that use link addresses
             m_scheduler->UnblockQueues(reason,
                                        acIndex,
                                        {WIFI_MGT_QUEUE, WIFI_CTL_QUEUE},
-                                       linkAddr,
+                                       linkAddr.value_or(address),
                                        link.feManager->GetAddress(),
                                        {},
                                        {linkId});
@@ -1884,14 +1884,14 @@
             return m_address;
         }
     }
-    // we get here if no ML setup was established between this device and the remote device,
-    // i.e., they are not both multi-link devices
+    // we get here if no ML setup was established between this device and the remote device
     if (GetNLinks() == 1)
     {
         // this is a single link device
         return m_address;
     }
-    // this is an MLD (hence the remote device is single link or unknown)
+    // this is an MLD which performed legacy association with the remote device or the remote device
+    // is unknown
     return DoGetLocalAddress(remoteAddr);
 }
 
@@ -2205,10 +2205,11 @@
     HtCapabilities capabilities;
 
     auto phy = GetWifiPhy(linkId);
-    Ptr<HtConfiguration> htConfiguration = GetHtConfiguration();
+    auto htConfiguration = GetHtConfiguration();
     bool sgiSupported = htConfiguration->m_sgiSupported;
     capabilities.SetLdpc(htConfiguration->m_ldpcSupported);
-    capabilities.SetSupportedChannelWidth(htConfiguration->m_40MHzSupported ? 1 : 0);
+    const auto width = phy->GetChannelWidth();
+    capabilities.SetSupportedChannelWidth((width < MHz_u{40}) ? 0 : 1);
     capabilities.SetShortGuardInterval20(sgiSupported);
     capabilities.SetShortGuardInterval40(sgiSupported);
     // Set Maximum A-MSDU Length subfield
@@ -2237,9 +2238,7 @@
         uint8_t nss = (mcs.GetMcsValue() / 8) + 1;
         NS_ASSERT(nss > 0 && nss < 5);
         uint64_t dataRate =
-            mcs.GetDataRate(htConfiguration->m_40MHzSupported ? MHz_u{40} : MHz_u{20},
-                            NanoSeconds(sgiSupported ? 400 : 800),
-                            nss);
+            mcs.GetDataRate(std::min(width, MHz_u{40}), NanoSeconds(sgiSupported ? 400 : 800), nss);
         if (dataRate > maxSupportedRate)
         {
             maxSupportedRate = dataRate;
@@ -2264,12 +2263,10 @@
     VhtCapabilities capabilities;
 
     auto phy = GetWifiPhy(linkId);
-    Ptr<HtConfiguration> htConfiguration = GetHtConfiguration();
-    NS_ABORT_MSG_IF(!htConfiguration->m_40MHzSupported,
-                    "VHT stations have to support 40 MHz operation");
-    Ptr<VhtConfiguration> vhtConfiguration = GetVhtConfiguration();
-    bool sgiSupported = htConfiguration->m_sgiSupported;
-    capabilities.SetSupportedChannelWidthSet(vhtConfiguration->m_160MHzSupported ? 1 : 0);
+    auto htConfiguration = GetHtConfiguration();
+    const auto sgiSupported = htConfiguration->m_sgiSupported;
+    const auto width = phy->GetChannelWidth();
+    capabilities.SetSupportedChannelWidthSet((width < MHz_u{160}) ? 0 : 1);
     // Set Maximum MPDU Length subfield
     uint16_t maxAmsduSize =
         std::max({m_voMaxAmsduSize, m_viMaxAmsduSize, m_beMaxAmsduSize, m_bkMaxAmsduSize});
@@ -2313,16 +2310,15 @@
         capabilities.SetTxMcsMap(maxMcs, nss);
     }
     uint64_t maxSupportedRateLGI = 0; // in bit/s
-    const auto maxWidth = vhtConfiguration->m_160MHzSupported ? MHz_u{160} : MHz_u{80};
     for (const auto& mcs : phy->GetMcsList(WIFI_MOD_CLASS_VHT))
     {
-        if (!mcs.IsAllowed(maxWidth, 1))
+        if (!mcs.IsAllowed(width, 1))
         {
             continue;
         }
-        if (mcs.GetDataRate(maxWidth) > maxSupportedRateLGI)
+        if (mcs.GetDataRate(width) > maxSupportedRateLGI)
         {
-            maxSupportedRateLGI = mcs.GetDataRate(maxWidth);
+            maxSupportedRateLGI = mcs.GetDataRate(width);
             NS_LOG_DEBUG("Updating maxSupportedRateLGI to " << maxSupportedRateLGI);
         }
     }
@@ -2343,24 +2339,32 @@
     NS_ASSERT(GetHeSupported());
     HeCapabilities capabilities;
 
-    Ptr<WifiPhy> phy = GetLink(linkId).phy;
-    Ptr<HtConfiguration> htConfiguration = GetHtConfiguration();
-    Ptr<VhtConfiguration> vhtConfiguration = GetVhtConfiguration();
-    Ptr<HeConfiguration> heConfiguration = GetHeConfiguration();
+    auto phy = GetLink(linkId).phy;
+    auto htConfiguration = GetHtConfiguration();
+    auto heConfiguration = GetHeConfiguration();
     uint8_t channelWidthSet = 0;
-    if ((htConfiguration->m_40MHzSupported) && (phy->GetPhyBand() == WIFI_PHY_BAND_2_4GHZ))
+    const auto width = phy->GetChannelWidth();
+    if (const auto band = phy->GetPhyBand(); band == WIFI_PHY_BAND_2_4GHZ)
     {
-        channelWidthSet |= 0x01;
-    }
-    // we assume that HE stations support 80 MHz operations
-    if ((phy->GetPhyBand() == WIFI_PHY_BAND_5GHZ) || (phy->GetPhyBand() == WIFI_PHY_BAND_6GHZ))
-    {
-        channelWidthSet |= 0x02;
+        if (width >= MHz_u{40})
+        {
+            channelWidthSet |= 0x01;
+        }
     }
-    if ((vhtConfiguration->m_160MHzSupported) &&
-        ((phy->GetPhyBand() == WIFI_PHY_BAND_5GHZ) || (phy->GetPhyBand() == WIFI_PHY_BAND_6GHZ)))
+    else if (band == WIFI_PHY_BAND_5GHZ || band == WIFI_PHY_BAND_6GHZ)
     {
-        channelWidthSet |= 0x04;
+        if (width >= MHz_u{40})
+        {
+            channelWidthSet |= 0x02;
+        }
+        if (width >= MHz_u{160})
+        {
+            channelWidthSet |= 0x04;
+            if (phy->GetOperatingChannel().GetNSegments() > 1)
+            {
+                channelWidthSet |= 0x08;
+            }
+        }
     }
     capabilities.SetChannelWidthSet(channelWidthSet);
     capabilities.SetLdpcCodingInPayload(htConfiguration->m_ldpcSupported);
@@ -2465,15 +2469,16 @@
     capabilities.SetMaxAmpduLength(std::min(std::max(maxAmpduLength, 8388607U), 16777215U));
 
     // Set the PHY capabilities
-    const bool support4096Qam = phy->IsMcsSupported(WIFI_MOD_CLASS_EHT, 12);
+    const auto support4096Qam = phy->IsMcsSupported(WIFI_MOD_CLASS_EHT, 12);
     capabilities.m_phyCapabilities.supportTx1024And4096QamForRuSmallerThan242Tones =
         support4096Qam ? 1 : 0;
     capabilities.m_phyCapabilities.supportRx1024And4096QamForRuSmallerThan242Tones =
         support4096Qam ? 1 : 0;
 
-    const uint8_t maxTxNss = phy->GetMaxSupportedTxSpatialStreams();
-    const uint8_t maxRxNss = phy->GetMaxSupportedRxSpatialStreams();
-    if (auto htConfig = GetHtConfiguration(); !htConfig->m_40MHzSupported)
+    const auto maxTxNss = phy->GetMaxSupportedTxSpatialStreams();
+    const auto maxRxNss = phy->GetMaxSupportedRxSpatialStreams();
+    const auto width = phy->GetChannelWidth();
+    if (width == MHz_u{20})
     {
         for (auto maxMcs : {7, 9, 11, 13})
         {
@@ -2501,7 +2506,7 @@
                 phy->IsMcsSupported(WIFI_MOD_CLASS_EHT, maxMcs) ? maxTxNss : 0);
         }
     }
-    if (auto vhtConfig = GetVhtConfiguration(); vhtConfig->m_160MHzSupported)
+    if (width >= MHz_u{160})
     {
         for (auto maxMcs : {9, 11, 13})
         {
@@ -2515,8 +2520,21 @@
                 phy->IsMcsSupported(WIFI_MOD_CLASS_EHT, maxMcs) ? maxTxNss : 0);
         }
     }
-    // 320 MHz not supported yet
-
+    if (width >= MHz_u{320})
+    {
+        capabilities.m_phyCapabilities.support320MhzIn6Ghz = true;
+        for (auto maxMcs : {9, 11, 13})
+        {
+            capabilities.SetSupportedRxEhtMcsAndNss(
+                EhtMcsAndNssSet::EHT_MCS_MAP_TYPE_320_MHZ,
+                maxMcs,
+                phy->IsMcsSupported(WIFI_MOD_CLASS_EHT, maxMcs) ? maxRxNss : 0);
+            capabilities.SetSupportedTxEhtMcsAndNss(
+                EhtMcsAndNssSet::EHT_MCS_MAP_TYPE_320_MHZ,
+                maxMcs,
+                phy->IsMcsSupported(WIFI_MOD_CLASS_EHT, maxMcs) ? maxTxNss : 0);
+        }
+    }
     return capabilities;
 }
 
@@ -2585,4 +2603,91 @@
     return m_robustAVStreamingSupported;
 }
 
+void
+WifiMac::RecordCapabilities(const MgtFrameType& frame, const Mac48Address& from, uint8_t linkId)
+{
+    NS_LOG_FUNCTION(this << frame.index() << from << linkId);
+    auto remoteStationManager = GetWifiRemoteStationManager(linkId);
+    auto phy = GetWifiPhy(linkId);
+
+    // lambda processing Information Elements included in all frame types
+    auto recordFromIes = [&](auto&& frame) {
+        NS_ASSERT(frame.template Get<SupportedRates>());
+        const auto rates = AllSupportedRates{*frame.template Get<SupportedRates>(),
+                                             frame.template Get<ExtendedSupportedRatesIE>()};
+        for (const auto& mode : phy->GetModeList())
+        {
+            if (rates.IsSupportedRate(mode.GetDataRate(phy->GetChannelWidth())))
+            {
+                remoteStationManager->AddSupportedMode(from, mode);
+                if (rates.IsBasicRate(mode.GetDataRate(phy->GetChannelWidth())))
+                {
+                    remoteStationManager->AddBasicMode(mode);
+                }
+            }
+        }
+
+        // we do not return if HT is not supported because HE STAs operating in
+        // the 6 GHz band do not support VHT
+        if (GetHtSupported(linkId))
+        {
+            /* HT station */
+            if (const auto& htCapabilities = frame.template Get<HtCapabilities>())
+            {
+                remoteStationManager->AddStationHtCapabilities(from, *htCapabilities);
+            }
+            if (const auto& extendedCapabilities = frame.template Get<ExtendedCapabilities>())
+            {
+                remoteStationManager->AddStationExtendedCapabilities(from, *extendedCapabilities);
+            }
+        }
+
+        // we do not return if VHT is not supported because HE STAs operating in
+        // the 2.4 GHz or 6 GHz band do not support VHT
+        if (GetVhtSupported(linkId))
+        {
+            const auto& vhtCapabilities = frame.template Get<VhtCapabilities>();
+            // we will always fill in RxHighestSupportedLgiDataRate field at TX, so this can be used
+            // to check whether it supports VHT
+            if (vhtCapabilities.has_value() &&
+                vhtCapabilities->GetRxHighestSupportedLgiDataRate() > 0)
+            {
+                remoteStationManager->AddStationVhtCapabilities(from, *vhtCapabilities);
+            }
+        }
+
+        if (!GetHeSupported())
+        {
+            return;
+        }
+
+        const auto& heCapabilities = frame.template Get<HeCapabilities>();
+        if (heCapabilities.has_value() && heCapabilities->GetSupportedMcsAndNss() != 0)
+        {
+            remoteStationManager->AddStationHeCapabilities(from, *heCapabilities);
+        }
+
+        if (Is6GhzBand(linkId))
+        {
+            if (const auto& he6GhzCapabilities = frame.template Get<He6GhzBandCapabilities>())
+            {
+                remoteStationManager->AddStationHe6GhzCapabilities(from, *he6GhzCapabilities);
+            }
+        }
+
+        if (!GetEhtSupported())
+        {
+            return;
+        }
+
+        if (const auto& ehtCapabilities = frame.template Get<EhtCapabilities>())
+        {
+            remoteStationManager->AddStationEhtCapabilities(from, *ehtCapabilities);
+        }
+    };
+
+    // process Information Elements included in the current frame variant
+    std::visit(recordFromIes, frame);
+}
+
 } // namespace ns3
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/wifi-mac.h ns-3.45/src/wifi/model/wifi-mac.h
--- ns-3.44/src/wifi/model/wifi-mac.h	2025-03-09 16:55:49.803372600 -0700
+++ ns-3.45/src/wifi/model/wifi-mac.h	2025-06-01 20:34:45.628702200 -0700
@@ -102,6 +102,10 @@
     WifiMac(const WifiMac&) = delete;
     WifiMac& operator=(const WifiMac&) = delete;
 
+    /// type of the management frames
+    using MgtFrameType =
+        std::variant<MgtBeaconHeader, MgtProbeResponseHeader, MgtAssocResponseHeader>;
+
     /**
      * Assign a fixed random variable stream number to the random variables
      * used by this model.  Return the number of streams (possibly zero) that
@@ -337,7 +341,7 @@
      * @param linkIds the IDs of the links to block
      */
     void BlockUnicastTxOnLinks(WifiQueueBlockedReason reason,
-                               const Mac48Address& address,
+                               Mac48Address address,
                                const std::set<uint8_t>& linkIds);
 
     /**
@@ -350,7 +354,7 @@
      * @param linkIds the IDs of the links to unblock
      */
     void UnblockUnicastTxOnLinks(WifiQueueBlockedReason reason,
-                                 const Mac48Address& address,
+                                 Mac48Address address,
                                  const std::set<uint8_t>& linkIds);
 
     /**
@@ -811,6 +815,24 @@
                          uint8_t tid,
                          uint8_t linkId) const;
 
+    /// Information reported by ICF drop trace
+    struct IcfDropInfo
+    {
+        WifiIcfDrop reason{}; ///< the reason why the ICF was dropped by the EMLSR client
+        uint8_t linkId{};     ///< the ID of the link on which the ICF was dropped
+        Mac48Address sender;  ///< the sender of the ICF
+    };
+
+    /**
+     * TracedCallback signature for ICF drop events.
+     *
+     * @param info information reported by ICF drop trace
+     */
+    typedef void (*IcfDropCallback)(const IcfDropInfo& info);
+
+    /// TracedCallback for ICF drop events typedef
+    using IcfDropTracedCallback = TracedCallback<const IcfDropInfo&>;
+
   protected:
     void DoInitialize() override;
     void DoDispose() override;
@@ -965,6 +987,17 @@
                                 WifiDirection dir,
                                 const WifiTidLinkMapping& mapping);
 
+    /**
+     * Update capabilities information from the given management frame.
+     *
+     * @param frame the body of the given management frame
+     * @param addr MAC address of the sender
+     * @param linkId ID of the link the management frame was received over
+     */
+    void RecordCapabilities(const MgtFrameType& frame, const Mac48Address& addr, uint8_t linkId);
+
+    UniformRandomBitGenerator m_shuffleLinkIdsGen; //!< random number generator to shuffle link IDs
+
     Ptr<MacRxMiddle> m_rxMiddle; //!< RX middle (defragmentation etc.)
     Ptr<MacTxMiddle> m_txMiddle; //!< TX middle (aggregation etc.)
     Ptr<Txop> m_txop;            //!< TXOP used for transmission of frames to non-QoS peers.
@@ -1244,8 +1277,6 @@
     uint16_t m_mpduBufferSize;  //!< BlockAck buffer size (in number of MPDUs)
     uint32_t m_frameRetryLimit; //!< the frame retry limit
 
-    UniformRandomBitGenerator m_shuffleLinkIdsGen; //!< random number generator to shuffle link IDs
-
     bool m_robustAVStreamingSupported; ///< flag whether robust AV streaming is supported
 
     /// @brief DL TID-to-Link Mapping negotiated with an MLD (identified by its MLD address)
@@ -1380,17 +1411,6 @@
      */
     PsduMapResponseTimeoutTracedCallback m_psduMapResponseTimeoutCallback;
 
-    /**
-     * TracedCallback signature for ICF drop events.
-     *
-     * @param reason the reason why the ICF was dropped by the EMLSR client
-     * @param linkId the ID of the link on which the ICF was dropped
-     */
-    typedef void (*IcfDropCallback)(WifiIcfDrop reason, uint8_t linkId);
-
-    /// TracedCallback for ICF drop events typedef
-    using IcfDropTracedCallback = TracedCallback<WifiIcfDrop, uint8_t>;
-
     IcfDropTracedCallback m_icfDropCallback; //!< traced callback for ICF drop events
 };
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/wifi-mac-header.cc ns-3.45/src/wifi/model/wifi-mac-header.cc
--- ns-3.44/src/wifi/model/wifi-mac-header.cc	2025-03-09 16:55:49.799372700 -0700
+++ ns-3.45/src/wifi/model/wifi-mac-header.cc	2025-06-01 20:34:45.627702200 -0700
@@ -787,6 +787,16 @@
     return MicroSeconds(m_duration);
 }
 
+bool
+WifiMacHeader::HasNav() const
+{
+    // When the contents of a received Duration/ID field, treated as an unsigned integer,
+    // are greater than 32 768, the contents are interpreted as appropriate for the frame
+    // type and subtype or ignored if the receiving MAC entity does not have a defined
+    // interpretation for that type and subtype (IEEE 802.11-2016 sec. 10.27.3)
+    return (GetRawDuration() & 0x8000) == 0;
+}
+
 uint16_t
 WifiMacHeader::GetSequenceControl() const
 {
@@ -1184,6 +1194,8 @@
         break;
     case WIFI_MAC_CTL_BACKREQ:
     case WIFI_MAC_CTL_BACKRESP:
+        os << "RA=" << m_addr1 << ", TA=" << m_addr2 << ", Duration/ID=" << m_duration << "us";
+        break;
     case WIFI_MAC_CTL_CTLWRAPPER:
     case WIFI_MAC_CTL_END:
     case WIFI_MAC_CTL_END_ACK:
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/wifi-mac-header.h ns-3.45/src/wifi/model/wifi-mac-header.h
--- ns-3.44/src/wifi/model/wifi-mac-header.h	2025-03-09 16:55:49.799372700 -0700
+++ ns-3.45/src/wifi/model/wifi-mac-header.h	2025-06-01 20:34:45.627702200 -0700
@@ -512,6 +512,12 @@
      * @return the duration from the Duration/ID field (Time object)
      */
     Time GetDuration() const;
+
+    /**
+     * @return true if the Duration/ID field contains a value for setting the NAV
+     */
+    bool HasNav() const;
+
     /**
      * Return the raw Sequence Control field.
      *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/wifi-mac-queue-scheduler.h ns-3.45/src/wifi/model/wifi-mac-queue-scheduler.h
--- ns-3.44/src/wifi/model/wifi-mac-queue-scheduler.h	2025-03-09 16:55:49.799372700 -0700
+++ ns-3.45/src/wifi/model/wifi-mac-queue-scheduler.h	2025-06-01 20:34:45.627702200 -0700
@@ -175,6 +175,36 @@
                                const std::set<uint8_t>& tids = {},
                                const std::set<uint8_t>& linkIds = {}) = 0;
 
+    /**
+     * Block the given set of links for all the container queues for the given reason.
+     *
+     * @param reason the reason for blocking the queues
+     * @param linkIds set of links to block (empty to block all setup links)
+     */
+    virtual void BlockAllQueues(WifiQueueBlockedReason reason,
+                                const std::set<uint8_t>& linkIds = {}) = 0;
+
+    /**
+     * Unblock the given set of links for all the container queues for the given reason.
+     *
+     * @param reason the reason for unblocking the queues
+     * @param linkIds set of links to unblock (empty to unblock all setup links)
+     */
+    virtual void UnblockAllQueues(WifiQueueBlockedReason reason,
+                                  const std::set<uint8_t>& linkIds = {}) = 0;
+
+    /**
+     * Return whether all the container queues are blocked for the given link for the given
+     * reason, if different than REASONS_COUNT, or for any reason, otherwise.
+     *
+     * @param linkId the ID of the given link
+     * @param reason the reason to check (if different than REASONS_COUNT)
+     * @return whether all the container queues are blocked for the given link
+     */
+    virtual bool GetAllQueuesBlockedOnLink(
+        uint8_t linkId,
+        WifiQueueBlockedReason reason = WifiQueueBlockedReason::REASONS_COUNT) = 0;
+
     /// Bitset identifying the reasons to block individual links for a container queue
     using Mask = std::bitset<static_cast<std::size_t>(WifiQueueBlockedReason::REASONS_COUNT)>;
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/wifi-mac-queue-scheduler-impl.h ns-3.45/src/wifi/model/wifi-mac-queue-scheduler-impl.h
--- ns-3.44/src/wifi/model/wifi-mac-queue-scheduler-impl.h	2025-03-09 16:55:49.799372700 -0700
+++ ns-3.45/src/wifi/model/wifi-mac-queue-scheduler-impl.h	2025-06-01 20:34:45.627702200 -0700
@@ -87,6 +87,12 @@
                        const Mac48Address& txAddress,
                        const std::set<uint8_t>& tids,
                        const std::set<uint8_t>& linkIds) final;
+    /** @copydoc ns3::WifiMacQueueScheduler::BlockAllQueues */
+    void BlockAllQueues(WifiQueueBlockedReason reason, const std::set<uint8_t>& linkIds) final;
+    /** @copydoc ns3::WifiMacQueueScheduler::UnblockAllQueues */
+    void UnblockAllQueues(WifiQueueBlockedReason reason, const std::set<uint8_t>& linkIds) final;
+    /** @copydoc ns3::WifiMacQueueScheduler::GetAllQueuesBlockedOnLink */
+    bool GetAllQueuesBlockedOnLink(uint8_t linkId, WifiQueueBlockedReason reason) final;
     /** @copydoc ns3::WifiMacQueueScheduler::GetQueueLinkMask */
     std::optional<Mask> GetQueueLinkMask(AcIndex ac,
                                          const WifiContainerQueueId& queueId,
@@ -267,6 +273,24 @@
                        const std::set<uint8_t>& tids,
                        const std::set<uint8_t>& linkIds);
 
+    /**
+     * Block or unblock the given set of links for all the container queues for the given reason.
+     *
+     * @param block true to block the queues, false to unblock
+     * @param reason the reason for blocking the queues
+     * @param linkIds set of links to block (empty to block all setup links)
+     */
+    void DoBlockAllQueues(bool block,
+                          WifiQueueBlockedReason reason,
+                          const std::set<uint8_t>& linkIds);
+
+    /**
+     * When it is requested to block all the queues, an entry is added to this map to store the
+     * reason and the IDs of the links to block. This information is used to block queues that
+     * will be created afterwards.
+     */
+    std::map<WifiQueueBlockedReason, std::set<uint8_t>> m_blockAllInfo;
+
     std::vector<PerAcInfo> m_perAcInfo{AC_UNDEF}; //!< vector of per-AC information
     NS_LOG_TEMPLATE_DECLARE;                      //!< the log component
 };
@@ -366,7 +390,19 @@
                 GetMac()->GetWifiRemoteStationManager(linkId)->GetAffiliatedStaAddress(rxAddr))
             {
                 // the mask is not modified if linkId is already in the map
-                queueInfoIt->second.linkIds.emplace(linkId, Mask{});
+                auto [it, inserted] = queueInfoIt->second.linkIds.try_emplace(linkId);
+
+                if (inserted)
+                {
+                    // linkId was not in the map, set the mask if all queues are blocked
+                    for (const auto& [reason, linkIds] : m_blockAllInfo)
+                    {
+                        if (linkIds.contains(linkId))
+                        {
+                            it->second.set(static_cast<std::size_t>(reason), true);
+                        }
+                    }
+                }
             }
             else
             {
@@ -390,7 +426,16 @@
         // is preserved)
         if (linkIdsMap.empty() || linkIdsMap.cbegin()->first != *linkId)
         {
-            linkIdsMap = {{*linkId, Mask{}}};
+            Mask mask;
+            for (const auto& [reason, linkIds] : m_blockAllInfo)
+            {
+                if (linkIds.contains(*linkId))
+                {
+                    mask.set(static_cast<std::size_t>(reason), true);
+                }
+            }
+
+            linkIdsMap = {{*linkId, mask}};
         }
     }
 
@@ -517,7 +562,7 @@
         auto queueInfoIt = InitQueueInfo(ac, Create<WifiMpdu>(Create<Packet>(), hdr));
         for (auto& [linkId, mask] : queueInfoIt->second.linkIds)
         {
-            if (linkIds.empty() || linkIds.count(linkId) > 0)
+            if (linkIds.empty() || linkIds.contains(linkId))
             {
                 mask.set(static_cast<std::size_t>(reason), block);
             }
@@ -554,6 +599,84 @@
 }
 
 template <class Priority, class Compare>
+void
+WifiMacQueueSchedulerImpl<Priority, Compare>::DoBlockAllQueues(bool block,
+                                                               WifiQueueBlockedReason reason,
+                                                               const std::set<uint8_t>& linkIds)
+{
+    for (auto& perAcInfo : m_perAcInfo)
+    {
+        for (auto& [queueId, queueInfo] : perAcInfo.queueInfoMap)
+        {
+            for (auto& [linkId, mask] : queueInfo.linkIds)
+            {
+                if (linkIds.empty() || linkIds.contains(linkId))
+                {
+                    mask.set(static_cast<std::size_t>(reason), block);
+                }
+            }
+        }
+    }
+}
+
+template <class Priority, class Compare>
+void
+WifiMacQueueSchedulerImpl<Priority, Compare>::BlockAllQueues(WifiQueueBlockedReason reason,
+                                                             const std::set<uint8_t>& linkIds)
+{
+    DoBlockAllQueues(true, reason, linkIds);
+
+    if (linkIds.empty())
+    {
+        m_blockAllInfo[reason] = GetMac()->GetLinkIds(); // all links blocked
+    }
+    else
+    {
+        m_blockAllInfo[reason].merge(std::set<uint8_t>{linkIds});
+    }
+}
+
+template <class Priority, class Compare>
+void
+WifiMacQueueSchedulerImpl<Priority, Compare>::UnblockAllQueues(WifiQueueBlockedReason reason,
+                                                               const std::set<uint8_t>& linkIds)
+{
+    DoBlockAllQueues(false, reason, linkIds);
+
+    auto infoIt = m_blockAllInfo.find(reason);
+
+    if (infoIt == m_blockAllInfo.end())
+    {
+        return; // all queues were not blocked for the given reason
+    }
+    std::erase_if(infoIt->second,
+                  [&](uint8_t id) { return linkIds.empty() || linkIds.contains(id); });
+
+    if (infoIt->second.empty())
+    {
+        // no more links blocked for the given reason
+        m_blockAllInfo.erase(infoIt);
+    }
+}
+
+template <class Priority, class Compare>
+bool
+WifiMacQueueSchedulerImpl<Priority, Compare>::GetAllQueuesBlockedOnLink(
+    uint8_t linkId,
+    WifiQueueBlockedReason reason)
+{
+    for (const auto& [r, linkIds] : m_blockAllInfo)
+    {
+        if ((reason == WifiQueueBlockedReason::REASONS_COUNT || reason == r) &&
+            linkIds.contains(linkId))
+        {
+            return true;
+        }
+    }
+    return false;
+}
+
+template <class Priority, class Compare>
 std::optional<WifiMacQueueScheduler::Mask>
 WifiMacQueueSchedulerImpl<Priority, Compare>::GetQueueLinkMask(AcIndex ac,
                                                                const WifiContainerQueueId& queueId,
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/wifi-mac-trailer.h ns-3.45/src/wifi/model/wifi-mac-trailer.h
--- ns-3.44/src/wifi/model/wifi-mac-trailer.h	2025-03-09 16:55:49.803372600 -0700
+++ ns-3.45/src/wifi/model/wifi-mac-trailer.h	2025-06-01 20:34:45.628702200 -0700
@@ -9,17 +9,14 @@
 #ifndef WIFI_MAC_TRAILER_H
 #define WIFI_MAC_TRAILER_H
 
+#include "wifi-constants.h"
+
 #include "ns3/trailer.h"
 
 namespace ns3
 {
 
 /**
- * The length in octets of the IEEE 802.11 MAC FCS field
- */
-static const uint16_t WIFI_MAC_FCS_LENGTH = 4;
-
-/**
  * @ingroup wifi
  *
  * Implements the IEEE 802.11 MAC trailer
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/wifi-mgt-header.h ns-3.45/src/wifi/model/wifi-mgt-header.h
--- ns-3.44/src/wifi/model/wifi-mgt-header.h	2025-03-09 16:55:49.803372600 -0700
+++ ns-3.45/src/wifi/model/wifi-mgt-header.h	2025-06-01 20:34:45.628702200 -0700
@@ -13,8 +13,10 @@
 #include "supported-rates.h"
 
 #include "ns3/eht-capabilities.h"
+#include "ns3/he-6ghz-band-capabilities.h"
 #include "ns3/header.h"
 #include "ns3/multi-link-element.h"
+#include "ns3/vht-capabilities.h"
 
 #include <algorithm>
 #include <iterator>
@@ -363,11 +365,9 @@
 WifiMgtHeader<Derived, std::tuple<Elems...>>::InitForDeserialization(
     std::optional<EhtCapabilities>& optElem)
 {
-    NS_ASSERT(Get<SupportedRates>());
-    auto rates = AllSupportedRates{*Get<SupportedRates>(), std::nullopt};
-    const bool is2_4Ghz = rates.IsSupportedRate(
-        1000000 /* 1 Mbit/s */); // TODO: use presence of VHT capabilities IE and HE 6 GHz Band
-                                 // Capabilities IE once the later is implemented
+    auto& vhtCapabilities = Get<VhtCapabilities>();
+    auto& he6GhzBandCapabilities = Get<He6GhzBandCapabilities>();
+    const auto is2_4Ghz = !vhtCapabilities && !he6GhzBandCapabilities;
     auto& heCapabilities = Get<HeCapabilities>();
     if (heCapabilities)
     {
@@ -572,7 +572,7 @@
 {
     if (elem.has_value())
     {
-        os << *elem << " , ";
+        os << *elem << ", ";
     }
 }
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/wifi-mode.cc ns-3.45/src/wifi/model/wifi-mode.cc
--- ns-3.44/src/wifi/model/wifi-mode.cc	2025-03-09 16:55:49.803372600 -0700
+++ ns-3.45/src/wifi/model/wifi-mode.cc	2025-06-01 20:34:45.628702200 -0700
@@ -11,7 +11,6 @@
 
 #include "wifi-tx-vector.h"
 
-#include "ns3/he-ru.h"
 #include "ns3/log.h"
 
 #include <cmath>
@@ -158,8 +157,7 @@
     }
     else
     {
-        // We should not go here!
-        NS_ASSERT(false);
+        NS_ASSERT_MSG(false, "GetMcsValue() cannot be called for non-HT modulations");
         return 0;
     }
 }
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/wifi-mode.h ns-3.45/src/wifi/model/wifi-mode.h
--- ns-3.44/src/wifi/model/wifi-mode.h	2025-03-09 16:55:49.803372600 -0700
+++ ns-3.45/src/wifi/model/wifi-mode.h	2025-06-01 20:34:45.628702200 -0700
@@ -10,6 +10,7 @@
 #ifndef WIFI_MODE_H
 #define WIFI_MODE_H
 
+#include "wifi-constants.h"
 #include "wifi-phy-common.h"
 
 #include "ns3/attribute-helper.h"
@@ -20,9 +21,6 @@
 namespace ns3
 {
 
-/// STA_ID to identify a single user (SU)
-static constexpr uint16_t SU_STA_ID = 65535;
-
 class WifiTxVector;
 
 /**
@@ -113,6 +111,9 @@
     uint16_t GetConstellationSize() const;
     /**
      * @returns the MCS value.
+     *
+     * This method cannot be called for non-HT modulations, because Modulation and Coding Scheme
+     * (MCS) is a concept introduced by the 802.11n amendment.
      */
     uint8_t GetMcsValue() const;
     /**
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/wifi-net-device.cc ns-3.45/src/wifi/model/wifi-net-device.cc
--- ns-3.44/src/wifi/model/wifi-net-device.cc	2025-03-09 16:55:49.803372600 -0700
+++ ns-3.45/src/wifi/model/wifi-net-device.cc	2025-06-01 20:34:45.629702300 -0700
@@ -44,19 +44,11 @@
                           UintegerValue(MAX_MSDU_SIZE - LLC_SNAP_HEADER_LENGTH),
                           MakeUintegerAccessor(&WifiNetDevice::SetMtu, &WifiNetDevice::GetMtu),
                           MakeUintegerChecker<uint16_t>(1, MAX_MSDU_SIZE - LLC_SNAP_HEADER_LENGTH))
-            .AddAttribute("Channel",
-                          "The channel attached to this device",
-                          PointerValue(),
-                          MakePointerAccessor(&WifiNetDevice::GetChannel),
-                          MakePointerChecker<Channel>(),
-                          TypeId::SupportLevel::DEPRECATED,
-                          "class WifiNetDevice; use the Channel "
-                          "attribute of WifiPhy")
             .AddAttribute("Phy",
                           "The PHY layer attached to this device.",
                           PointerValue(),
-                          MakePointerAccessor((Ptr<WifiPhy>(WifiNetDevice::*)() const) &
-                                                  WifiNetDevice::GetPhy,
+                          MakePointerAccessor(static_cast<Ptr<WifiPhy> (WifiNetDevice::*)() const>(
+                                                  &WifiNetDevice::GetPhy),
                                               &WifiNetDevice::SetPhy),
                           MakePointerChecker<WifiPhy>())
             .AddAttribute(
@@ -70,14 +62,14 @@
                           PointerValue(),
                           MakePointerAccessor(&WifiNetDevice::GetMac, &WifiNetDevice::SetMac),
                           MakePointerChecker<WifiMac>())
-            .AddAttribute(
-                "RemoteStationManager",
-                "The station manager attached to this device.",
-                PointerValue(),
-                MakePointerAccessor(&WifiNetDevice::SetRemoteStationManager,
-                                    (Ptr<WifiRemoteStationManager>(WifiNetDevice::*)() const) &
-                                        WifiNetDevice::GetRemoteStationManager),
-                MakePointerChecker<WifiRemoteStationManager>())
+            .AddAttribute("RemoteStationManager",
+                          "The station manager attached to this device.",
+                          PointerValue(),
+                          MakePointerAccessor(
+                              &WifiNetDevice::SetRemoteStationManager,
+                              static_cast<Ptr<WifiRemoteStationManager> (WifiNetDevice::*)() const>(
+                                  &WifiNetDevice::GetRemoteStationManager)),
+                          MakePointerChecker<WifiRemoteStationManager>())
             .AddAttribute("RemoteStationManagers",
                           "The remote station managers attached to this device (11be multi-link "
                           "devices only).",
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/wifi-net-device.h ns-3.45/src/wifi/model/wifi-net-device.h
--- ns-3.44/src/wifi/model/wifi-net-device.h	2025-03-09 16:55:49.803372600 -0700
+++ ns-3.45/src/wifi/model/wifi-net-device.h	2025-06-01 20:34:45.629702300 -0700
@@ -28,9 +28,6 @@
 class HeConfiguration;
 class EhtConfiguration;
 
-/// This value conforms to the 802.11 specification
-static const uint16_t MAX_MSDU_SIZE = 2304;
-
 /**
  * @defgroup wifi Wifi Models
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/wifi-phy.cc ns-3.45/src/wifi/model/wifi-phy.cc
--- ns-3.44/src/wifi/model/wifi-phy.cc	2025-03-09 16:55:49.803372600 -0700
+++ ns-3.45/src/wifi/model/wifi-phy.cc	2025-06-01 20:34:45.630702300 -0700
@@ -90,7 +90,8 @@
                 StringValue("{0, 0, BAND_UNSPECIFIED, 0}"),
                 MakeAttributeContainerAccessor<
                     TupleValue<UintegerValue, UintegerValue, EnumValue<WifiPhyBand>, UintegerValue>,
-                    ';'>((void(WifiPhy::*)(const ChannelSegments&)) & WifiPhy::SetOperatingChannel),
+                    ';'>(static_cast<void (WifiPhy::*)(const ChannelSegments&)>(
+                    &WifiPhy::SetOperatingChannel)),
                 MakeAttributeContainerChecker<
                     TupleValue<UintegerValue, UintegerValue, EnumValue<WifiPhyBand>, UintegerValue>,
                     ';'>(MakeTupleChecker<UintegerValue,
@@ -98,7 +99,7 @@
                                           EnumValue<WifiPhyBand>,
                                           UintegerValue>(
                     MakeUintegerChecker<uint8_t>(0, 233),
-                    MakeUintegerChecker<MHz_u>(0, 160),
+                    MakeUintegerChecker<MHz_u>(0, 320),
                     MakeEnumChecker(WifiPhyBand::WIFI_PHY_BAND_2_4GHZ,
                                     "BAND_2_4GHZ",
                                     WifiPhyBand::WIFI_PHY_BAND_5GHZ,
@@ -107,7 +108,7 @@
                                     "BAND_6GHZ",
                                     WifiPhyBand::WIFI_PHY_BAND_UNSPECIFIED,
                                     "BAND_UNSPECIFIED"),
-                    MakeUintegerChecker<uint8_t>(0, 7))))
+                    MakeUintegerChecker<uint8_t>(0, 15))))
             .AddAttribute("Frequency",
                           "The center frequency (MHz) of the current operating channel.",
                           TypeId::ATTR_GET,
@@ -122,12 +123,13 @@
                           MakeUintegerChecker<uint8_t>(0, 233))
             .AddAttribute(
                 "ChannelWidth",
-                "The width in MHz of the current operating channel (5, 10, 20, 22, 40, 80 or 160). "
-                "If 80+80MHz is used, this corresponds to the total channel width, hence 160 MHz.",
+                "The width in MHz of the current operating channel (5, 10, 20, 22, 40, 80, 160 or "
+                "320). If 80+80MHz is used, this corresponds to the total channel width, hence 160 "
+                "MHz.",
                 TypeId::ATTR_GET,
                 UintegerValue(0),
                 MakeUintegerAccessor(&WifiPhy::GetChannelWidth),
-                MakeUintegerChecker<MHz_u>(5, 160))
+                MakeUintegerChecker<MHz_u>(5, 320))
             .AddAttribute(
                 "Primary20MHzIndex",
                 "The index of the primary 20 MHz channel within the current operating channel "
@@ -141,6 +143,15 @@
                           MakeBooleanAccessor(&WifiPhy::SetFixedPhyBand, &WifiPhy::HasFixedPhyBand),
                           MakeBooleanChecker())
             .AddAttribute(
+                "MaxRadioBw",
+                "The maximum width supported by the radio. It is not possible to configure an "
+                "operating channel with a total width larger than this value. A value of 0 means "
+                "no restriction.",
+                TypeId::ATTR_GET | TypeId::ATTR_CONSTRUCT, // prevent setting after construction
+                DoubleValue(MHz_u{0}),
+                MakeDoubleAccessor(&WifiPhy::m_maxRadioBw),
+                MakeDoubleChecker<MHz_u>())
+            .AddAttribute(
                 "RxSensitivity",
                 "The energy of a received signal should be higher than "
                 "this threshold (dBm) for the PHY to detect the signal. "
@@ -388,8 +399,6 @@
       m_sifs(),
       m_slot(),
       m_pifs(),
-      m_ackTxTime(),
-      m_blockAckTxTime(),
       m_powerRestricted(false),
       m_channelAccessRequested(false),
       m_txSpatialStreams(1),
@@ -855,18 +864,6 @@
     return m_pifs;
 }
 
-Time
-WifiPhy::GetAckTxTime() const
-{
-    return m_ackTxTime;
-}
-
-Time
-WifiPhy::GetBlockAckTxTime() const
-{
-    return m_blockAckTxTime;
-}
-
 void
 WifiPhy::Configure80211a()
 {
@@ -874,12 +871,11 @@
     AddPhyEntity(WIFI_MOD_CLASS_OFDM, Create<OfdmPhy>());
 
     // See Table 17-21 "OFDM PHY characteristics" of 802.11-2016
-    SetSifs(MicroSeconds(16));
-    SetSlot(MicroSeconds(9));
+    SetSifs(OFDM_SIFS_TIME_20MHZ);
+    SetSlot(OFDM_SLOT_TIME_20MHZ);
     SetPifs(GetSifs() + GetSlot());
     // See Table 10-5 "Determination of the EstimatedAckTxTime based on properties
     // of the PPDU causing the EIFS" of 802.11-2016
-    m_ackTxTime = MicroSeconds(44);
 }
 
 void
@@ -890,13 +886,11 @@
     AddPhyEntity(WIFI_MOD_CLASS_HR_DSSS, phyEntity);
     AddPhyEntity(WIFI_MOD_CLASS_DSSS, phyEntity); // when plain DSSS modes are used
 
-    // See Table 16-4 "HR/DSSS PHY characteristics" of 802.11-2016
-    SetSifs(MicroSeconds(10));
-    SetSlot(MicroSeconds(20));
+    SetSifs(DSSS_SIFS_TIME);
+    SetSlot(DSSS_SLOT_TIME);
     SetPifs(GetSifs() + GetSlot());
     // See Table 10-5 "Determination of the EstimatedAckTxTime based on properties
     // of the PPDU causing the EIFS" of 802.11-2016
-    m_ackTxTime = MicroSeconds(304);
 }
 
 void
@@ -921,20 +915,18 @@
         AddPhyEntity(WIFI_MOD_CLASS_OFDM, Create<OfdmPhy>(OFDM_PHY_10_MHZ));
 
         // See Table 17-21 "OFDM PHY characteristics" of 802.11-2016
-        SetSifs(MicroSeconds(32));
-        SetSlot(MicroSeconds(13));
+        SetSifs(OFDM_SIFS_TIME_10MHZ);
+        SetSlot(OFDM_SLOT_TIME_10MHZ);
         SetPifs(GetSifs() + GetSlot());
-        m_ackTxTime = MicroSeconds(88);
     }
     else if (GetChannelWidth() == MHz_u{5})
     {
         AddPhyEntity(WIFI_MOD_CLASS_OFDM, Create<OfdmPhy>(OFDM_PHY_5_MHZ));
 
         // See Table 17-21 "OFDM PHY characteristics" of 802.11-2016
-        SetSifs(MicroSeconds(64));
-        SetSlot(MicroSeconds(21));
+        SetSifs(OFDM_SIFS_TIME_5MHZ);
+        SetSlot(OFDM_SLOT_TIME_5MHZ);
         SetPifs(GetSifs() + GetSlot());
-        m_ackTxTime = MicroSeconds(176);
     }
     else
     {
@@ -955,10 +947,6 @@
         Configure80211a();
     }
     AddPhyEntity(WIFI_MOD_CLASS_HT, Create<HtPhy>(m_txSpatialStreams));
-
-    // See Table 10-5 "Determination of the EstimatedAckTxTime based on properties
-    // of the PPDU causing the EIFS" of 802.11-2016
-    m_blockAckTxTime = MicroSeconds(68);
 }
 
 void
@@ -1287,25 +1275,13 @@
     m_operatingChannel.SetPrimary20Index(std::get<3>(m_channelSettings.front()));
 
     // check that the channel width is supported
-    const auto chWidth = GetChannelWidth();
-
-    if (m_device)
+    if (const auto chWidth = GetChannelWidth();
+        (m_maxRadioBw != MHz_u{0}) && (chWidth > m_maxRadioBw))
     {
-        if (auto htConfig = m_device->GetHtConfiguration();
-            htConfig && !htConfig->m_40MHzSupported && chWidth > MHz_u{20})
-        {
-            NS_ABORT_MSG("Attempting to set a " << chWidth
-                                                << " MHz channel on"
-                                                   "a station only supporting 20 MHz operation");
-        }
-
-        if (auto vhtConfig = m_device->GetVhtConfiguration();
-            vhtConfig && !vhtConfig->m_160MHzSupported && chWidth > MHz_u{80})
-        {
-            NS_ABORT_MSG("Attempting to set a " << chWidth
-                                                << " MHz channel on"
-                                                   "a station supporting up to 80 MHz operation");
-        }
+        // throw an exception instead of using NS_ABORT_MSG for unit testing this code
+        throw std::runtime_error("Attempting to set a " + std::to_string(chWidth) +
+                                 " MHz channel on a station only supporting " +
+                                 std::to_string(m_maxRadioBw) + " MHz operation");
     }
 
     if (changingPhyBand)
@@ -1589,6 +1565,7 @@
                              WifiPhyBand band,
                              uint16_t staId)
 {
+    NS_ASSERT(txVector.IsValid(band));
     Time duration = CalculatePhyPreambleAndHeaderDuration(txVector) +
                     GetPayloadDuration(size, txVector, band, NORMAL_MPDU, staId);
     NS_ASSERT(duration.IsStrictlyPositive());
@@ -1608,6 +1585,7 @@
                              const WifiTxVector& txVector,
                              WifiPhyBand band)
 {
+    NS_ASSERT(txVector.IsValid(band));
     return GetStaticPhyEntity(txVector.GetModulationClass())
         ->CalculateTxDuration(psduMap, txVector, band);
 }
@@ -1798,6 +1776,19 @@
 }
 
 std::optional<Time>
+WifiPhy::GetTimeToPreambleDetectionEnd() const
+{
+    for (const auto& [modClass, phyEntity] : m_phyEntities)
+    {
+        if (auto remTime = phyEntity->GetTimeToPreambleDetectionEnd())
+        {
+            return remTime;
+        }
+    }
+    return std::nullopt;
+}
+
+std::optional<Time>
 WifiPhy::GetTimeToMacHdrEnd(uint16_t staId) const
 {
     for (auto& [modClass, phyEntity] : m_phyEntities)
@@ -1876,20 +1867,15 @@
 
     const auto txDuration = CalculateTxDuration(psdus, txVector, GetPhyBand());
 
-    auto noEndPreambleDetectionEvent = true;
-    for (const auto& [mc, entity] : m_phyEntities)
-    {
-        noEndPreambleDetectionEvent =
-            noEndPreambleDetectionEvent && entity->NoEndPreambleDetectionEvents();
-    }
-    if (!noEndPreambleDetectionEvent && !m_currentEvent)
+    if (const auto timeToPreambleDetectionEnd = GetTimeToPreambleDetectionEnd();
+        timeToPreambleDetectionEnd && !m_currentEvent)
     {
         // PHY is in the initial few microseconds during which the
         // start of RX has occurred but the preamble detection period
         // has not elapsed
         AbortCurrentReception(SIGNAL_DETECTION_ABORTED_BY_TX);
     }
-    else if (!noEndPreambleDetectionEvent || m_currentEvent)
+    else if (timeToPreambleDetectionEnd || m_currentEvent)
     {
         AbortCurrentReception(RECEPTION_ABORTED_BY_TX);
     }
@@ -1968,13 +1954,7 @@
 {
     NS_LOG_FUNCTION(this);
     m_currentPreambleEvents.clear();
-    bool noEndPreambleDetectionEvent = true;
-    for (const auto& [mc, entity] : m_phyEntities)
-    {
-        noEndPreambleDetectionEvent =
-            noEndPreambleDetectionEvent && entity->NoEndPreambleDetectionEvents();
-    }
-    if (m_interference && (m_currentEvent || !noEndPreambleDetectionEvent))
+    if (m_interference && (m_currentEvent || GetTimeToPreambleDetectionEnd()))
     {
         m_interference->NotifyRxEnd(Simulator::Now(), GetCurrentFrequencyRange());
     }
@@ -2394,21 +2374,21 @@
     case WIFI_STANDARD_80211b:
     case WIFI_STANDARD_80211n:
     case WIFI_STANDARD_80211ac:
-        subcarrierSpacing = Hz_u{312500};
+        subcarrierSpacing = SUBCARRIER_FREQUENCY_SPACING;
         break;
     case WIFI_STANDARD_80211p:
         if (GetChannelWidth() == MHz_u{5})
         {
-            subcarrierSpacing = Hz_u{78125};
+            subcarrierSpacing = SUBCARRIER_FREQUENCY_SPACING / 4;
         }
         else
         {
-            subcarrierSpacing = Hz_u{156250};
+            subcarrierSpacing = SUBCARRIER_FREQUENCY_SPACING / 2;
         }
         break;
     case WIFI_STANDARD_80211ax:
     case WIFI_STANDARD_80211be:
-        subcarrierSpacing = Hz_u{78125};
+        subcarrierSpacing = SUBCARRIER_FREQUENCY_SPACING_HE;
         break;
     default:
         NS_FATAL_ERROR("Standard unknown: " << GetStandard());
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/wifi-phy-common.cc ns-3.45/src/wifi/model/wifi-phy-common.cc
--- ns-3.44/src/wifi/model/wifi-phy-common.cc	2025-03-09 16:55:49.803372600 -0700
+++ ns-3.45/src/wifi/model/wifi-phy-common.cc	2025-06-01 20:34:45.629702300 -0700
@@ -232,6 +232,45 @@
     return modulationClass;
 }
 
+std::set<MHz_u>
+GetSupportedChannelWidthSet(WifiStandard standard, WifiPhyBand band)
+{
+    switch (standard)
+    {
+    case WIFI_STANDARD_80211p:
+        return {MHz_u{5}};
+    case WIFI_STANDARD_80211a:
+    case WIFI_STANDARD_80211g:
+        return {MHz_u{20}};
+    case WIFI_STANDARD_80211b:
+        return {MHz_u{22}};
+    case WIFI_STANDARD_80211n:
+        return {MHz_u{20}, MHz_u{40}};
+    case WIFI_STANDARD_80211ac:
+        return {MHz_u{80}, MHz_u{160}};
+    case WIFI_STANDARD_80211ax:
+        return (band == WifiPhyBand::WIFI_PHY_BAND_2_4GHZ)
+                   ? std::set<MHz_u>{MHz_u{20}, MHz_u{40}}
+                   : std::set<MHz_u>{MHz_u{20}, MHz_u{80}, MHz_u{160}};
+    case WIFI_STANDARD_80211be:
+        switch (band)
+        {
+        case WifiPhyBand::WIFI_PHY_BAND_2_4GHZ:
+            return {MHz_u{20}, MHz_u{40}};
+        case WifiPhyBand::WIFI_PHY_BAND_5GHZ:
+            return {MHz_u{20}, MHz_u{80}, MHz_u{160}};
+        case WifiPhyBand::WIFI_PHY_BAND_6GHZ:
+            return {MHz_u{20}, MHz_u{80}, MHz_u{160}, MHz_u{320}};
+        default:
+            NS_ABORT_MSG("Unknown band: " << band);
+            return {};
+        }
+    default:
+        NS_ABORT_MSG("Unknown standard: " << standard);
+        return {};
+    }
+}
+
 MHz_u
 GetMaximumChannelWidth(WifiModulationClass modulation)
 {
@@ -245,14 +284,11 @@
         return MHz_u{20};
     case WIFI_MOD_CLASS_HT:
         return MHz_u{40};
-    // NOLINTBEGIN(bugprone-branch-clone)
     case WIFI_MOD_CLASS_VHT:
     case WIFI_MOD_CLASS_HE:
         return MHz_u{160};
     case WIFI_MOD_CLASS_EHT:
-        return MHz_u{
-            160}; // TODO update when 320 MHz channels are supported and remove clang-tidy guards
-    // NOLINTEND(bugprone-branch-clone)
+        return MHz_u{320};
     default:
         NS_ABORT_MSG("Unknown modulation class: " << modulation);
         return MHz_u{0};
@@ -281,6 +317,8 @@
     case WifiChannelWidthType::CW_160MHZ:
     case WifiChannelWidthType::CW_80_PLUS_80MHZ:
         return MHz_u{160};
+    case WifiChannelWidthType::CW_320MHZ:
+        return MHz_u{320};
     case WifiChannelWidthType::CW_2160MHZ:
         return MHz_u{2160};
     default:
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/wifi-phy-common.h ns-3.45/src/wifi/model/wifi-phy-common.h
--- ns-3.44/src/wifi/model/wifi-phy-common.h	2025-03-09 16:55:49.803372600 -0700
+++ ns-3.45/src/wifi/model/wifi-phy-common.h	2025-06-01 20:34:45.629702300 -0700
@@ -19,6 +19,7 @@
 #include "ns3/ptr.h"
 
 #include <ostream>
+#include <set>
 #include <vector>
 
 /**
@@ -39,9 +40,6 @@
 class WifiMode;
 class Time;
 
-/// maximum propagation delay
-static constexpr uint8_t MAX_PROPAGATION_DELAY_USEC = 1;
-
 /**
  * typedef for a pair of start and stop frequencies to represent a band
  */
@@ -515,7 +513,8 @@
     WIFI_CHANLIST_PRIMARY = 0,
     WIFI_CHANLIST_SECONDARY,
     WIFI_CHANLIST_SECONDARY40,
-    WIFI_CHANLIST_SECONDARY80
+    WIFI_CHANLIST_SECONDARY80,
+    WIFI_CHANLIST_SECONDARY160
 };
 
 /**
@@ -538,8 +537,10 @@
         return (os << "SECONDARY40");
     case WIFI_CHANLIST_SECONDARY80:
         return (os << "SECONDARY80");
+    case WIFI_CHANLIST_SECONDARY160:
+        return (os << "SECONDARY160");
     default:
-        NS_FATAL_ERROR("Unknown wifi channel type");
+        NS_FATAL_ERROR("Unknown wifi channel type " << +type);
         return (os << "UNKNOWN");
     }
 }
@@ -572,6 +573,8 @@
         return (os << "160MHz");
     case WifiChannelWidthType::CW_80_PLUS_80MHZ:
         return (os << "80+80MHz");
+    case WifiChannelWidthType::CW_320MHZ:
+        return (os << "320MHz");
     case WifiChannelWidthType::CW_2160MHZ:
         return (os << "2160MHz");
     default:
@@ -682,6 +685,15 @@
 WifiModulationClass GetModulationClassForStandard(WifiStandard standard);
 
 /**
+ * Get the supported channel width set that can be advertised in PHY capabilities.
+ *
+ * @param standard the standard
+ * @param band the PHY band
+ * @return the supported channel width set that can be advertised for the given standard and band
+ */
+std::set<MHz_u> GetSupportedChannelWidthSet(WifiStandard standard, WifiPhyBand band);
+
+/**
  * Get the maximum channel width allowed for the given modulation class.
  *
  * @param modulation the modulation class
@@ -705,6 +717,17 @@
  */
 bool IsEht(WifiPreamble preamble);
 
+/**
+ * @brief map a given channel list type to the corresponding scaling factor
+ */
+const std::map<WifiChannelListType, dBm_u> channelTypeToScalingFactor{
+    {WIFI_CHANLIST_PRIMARY, 0.0},
+    {WIFI_CHANLIST_SECONDARY, 0.0},
+    {WIFI_CHANLIST_SECONDARY40, 3.0},
+    {WIFI_CHANLIST_SECONDARY80, 6.0},
+    {WIFI_CHANLIST_SECONDARY160, 12.0},
+};
+
 } // namespace ns3
 
 #endif /* WIFI_PHY_COMMON_H */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/wifi-phy.h ns-3.45/src/wifi/model/wifi-phy.h
--- ns-3.44/src/wifi/model/wifi-phy.h	2025-03-09 16:55:49.803372600 -0700
+++ ns-3.45/src/wifi/model/wifi-phy.h	2025-06-01 20:34:45.630702300 -0700
@@ -117,7 +117,8 @@
      * @return if the PHY is busy decoding the PHY header fields of a PPDU, return the TXVECTOR
      *         used to transmit the PPDU; otherwise, return a null optional value
      */
-    std::optional<std::reference_wrapper<const WifiTxVector>> GetInfoIfRxingPhyHeader() const;
+    virtual std::optional<std::reference_wrapper<const WifiTxVector>> GetInfoIfRxingPhyHeader()
+        const;
 
     /**
      * For HE receptions only, check and possibly modify the transmit power restriction state at
@@ -429,18 +430,6 @@
      * @return the PIFS duration
      */
     Time GetPifs() const;
-    /**
-     * Return the estimated Ack TX time for this PHY.
-     *
-     * @return the estimated Ack TX time
-     */
-    Time GetAckTxTime() const;
-    /**
-     * Return the estimated BlockAck TX time for this PHY.
-     *
-     * @return the estimated BlockAck TX time
-     */
-    Time GetBlockAckTxTime() const;
 
     /**
      * Get the maximum PSDU size in bytes for the given modulation class.
@@ -895,13 +884,21 @@
     dB_u GetRxGain() const;
 
     /**
+     * Get the remaining time to preamble detection period to elapse, if preamble detection is
+     * ongoing.
+     *
+     * @return the remaining time to the end of the preamble detection detection period, if ongoing
+     */
+    virtual std::optional<Time> GetTimeToPreambleDetectionEnd() const;
+
+    /**
      * Get the remaining time to the end of the MAC header reception of the next MPDU being
      * received from the given STA, if any.
      *
      * @param staId the STA-ID of the transmitter; equals SU_STA_ID for SU PPDUs
      * @return the remaining time to the end of the MAC header reception of the next MPDU, if any
      */
-    std::optional<Time> GetTimeToMacHdrEnd(uint16_t staId) const;
+    virtual std::optional<Time> GetTimeToMacHdrEnd(uint16_t staId) const;
 
     /**
      * Sets the device this PHY is associated with.
@@ -1611,11 +1608,9 @@
     WifiPhyOperatingChannel m_operatingChannel; //!< Operating channel
     bool m_fixedPhyBand; //!< True to prohibit changing PHY band after initialization
 
-    Time m_sifs;           //!< Short Interframe Space (SIFS) duration
-    Time m_slot;           //!< Slot duration
-    Time m_pifs;           //!< PCF Interframe Space (PIFS) duration
-    Time m_ackTxTime;      //!< estimated Ack TX time
-    Time m_blockAckTxTime; //!< estimated BlockAck TX time
+    Time m_sifs; //!< Short Interframe Space (SIFS) duration
+    Time m_slot; //!< Slot duration
+    Time m_pifs; //!< PCF Interframe Space (PIFS) duration
 
     dBm_u m_rxSensitivity;  //!< Receive sensitivity threshold
     dBm_u m_ccaEdThreshold; //!< Clear channel assessment (CCA) energy detection (ED) threshold
@@ -1644,6 +1639,8 @@
 
     Time m_channelSwitchDelay; //!< Time required to switch between channel
 
+    MHz_u m_maxRadioBw; //!< Maximum radio bandwidth
+
     Ptr<WifiNetDevice> m_device;   //!< Pointer to the device
     Ptr<MobilityModel> m_mobility; //!< Pointer to the mobility model
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/wifi-phy-listener.h ns-3.45/src/wifi/model/wifi-phy-listener.h
--- ns-3.44/src/wifi/model/wifi-phy-listener.h	2025-03-09 16:55:49.803372600 -0700
+++ ns-3.45/src/wifi/model/wifi-phy-listener.h	2025-06-01 20:34:45.629702300 -0700
@@ -17,6 +17,8 @@
 namespace ns3
 {
 
+class WifiTxVector;
+
 /**
  * @brief receive notifications about PHY events.
  */
@@ -51,11 +53,13 @@
      */
     virtual void NotifyRxEndOk() = 0;
     /**
+     * @param txVector the TXVECTOR used for transmission
+     *
      * We have received the last bit of a packet for which
      * NotifyRxStart was invoked first and, the packet has
      * _not_ been successfully received.
      */
-    virtual void NotifyRxEndError() = 0;
+    virtual void NotifyRxEndError(const WifiTxVector& txVector) = 0;
     /**
      * @param duration the expected transmission duration.
      * @param txPower the nominal TX power
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/wifi-phy-operating-channel.cc ns-3.45/src/wifi/model/wifi-phy-operating-channel.cc
--- ns-3.44/src/wifi/model/wifi-phy-operating-channel.cc	2025-03-09 16:55:49.803372600 -0700
+++ ns-3.45/src/wifi/model/wifi-phy-operating-channel.cc	2025-06-01 20:34:45.629702300 -0700
@@ -258,6 +258,14 @@
     {143, MHz_u{6665}, MHz_u{160}, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
     {175, MHz_u{6825}, MHz_u{160}, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
     {207, MHz_u{6985}, MHz_u{160}, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    // 320 MHz-1 channels
+    {31, MHz_u{6105}, MHz_u{320}, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {95, MHz_u{6425}, MHz_u{320}, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {159, MHz_u{6745}, MHz_u{320}, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    // 320 MHz-2 channels
+    {63, MHz_u{6265}, MHz_u{320}, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {127, MHz_u{6585}, MHz_u{320}, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {191, MHz_u{6905}, MHz_u{320}, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
 }};
 
 std::ostream&
@@ -600,6 +608,8 @@
     case 160:
         return (m_channelIts.size() == 2) ? WifiChannelWidthType::CW_80_PLUS_80MHZ
                                           : WifiChannelWidthType::CW_160MHZ;
+    case 320:
+        return WifiChannelWidthType::CW_320MHZ;
     case 2160:
         return WifiChannelWidthType::CW_2160MHZ;
     case 0:
@@ -810,58 +820,40 @@
 }
 
 std::set<uint8_t>
-WifiPhyOperatingChannel::Get20MHzIndicesCoveringRu(HeRu::RuSpec ru, MHz_u width) const
+WifiPhyOperatingChannel::Get20MHzIndicesCoveringRu(WifiRu::RuSpec ru, MHz_u width) const
 {
-    auto ruType = ru.GetRuType();
+    const auto ruType = WifiRu::GetRuType(ru);
 
-    NS_ASSERT_MSG(HeRu::GetBandwidth(ruType) <= width,
+    NS_ASSERT_MSG(WifiRu::GetBandwidth(ruType) <= width,
                   "No RU of type " << ruType << " is contained in a " << width << " MHz channel");
     NS_ASSERT_MSG(width <= GetTotalWidth(),
                   "The given width (" << width << " MHz) exceeds the operational width ("
                                       << GetTotalWidth() << ")");
 
-    // trivial case: 2x996-tone RU
-    if (ruType == HeRu::RU_2x996_TONE)
-    {
-        return {0, 1, 2, 3, 4, 5, 6, 7};
-    }
-
     // handle first the special case of center 26-tone RUs
-    if (ruType == HeRu::RU_26_TONE && ru.GetIndex() == 19)
+    if (const auto ruIndex = WifiRu::GetIndex(ru); ruType == RuType::RU_26_TONE && ruIndex == 19)
     {
+        NS_ASSERT_MSG(WifiRu::IsHe(ru), "Center 26-tone RUs can only be used with HE");
         NS_ASSERT_MSG(width >= MHz_u{80},
                       "26-tone RU with index 19 is only present in channels of at least 80 MHz");
         // the center 26-tone RU in an 80 MHz channel is not fully covered by
         // any 20 MHz channel, but by the two central 20 MHz channels in the 80 MHz channel
-        auto indices = ru.GetPrimary80MHz() ? GetAll20MHzChannelIndicesInPrimary(MHz_u{80})
-                                            : GetAll20MHzChannelIndicesInSecondary(MHz_u{80});
+        auto indices = std::get<HeRu::RuSpec>(ru).GetPrimary80MHz()
+                           ? GetAll20MHzChannelIndicesInPrimary(MHz_u{80})
+                           : GetAll20MHzChannelIndicesInSecondary(MHz_u{80});
         indices.erase(indices.begin());
         indices.erase(std::prev(indices.end()));
         return indices;
     }
 
-    auto ruIndex = ru.GetIndex();
-
-    if (ruType == HeRu::RU_26_TONE && ruIndex > 19)
+    auto ruPhyIndex = WifiRu::GetPhyIndex(ru, width, m_primary20Index);
+    if (ruType == RuType::RU_26_TONE && ruPhyIndex > 19)
     {
-        // "ignore" the center 26-tone RU in an 80 MHz channel
-        ruIndex--;
-    }
-
-    // if the RU refers to a 160 MHz channel, we have to update the RU index (which
-    // refers to an 80 MHz channel) if the RU is not in the lower 80 MHz channel
-    if (width == MHz_u{160})
-    {
-        bool primary80IsLower80 = (m_primary20Index < 4);
-        if (primary80IsLower80 != ru.GetPrimary80MHz())
+        // "ignore" the center 26-tone RUs in 80 MHz channels
+        ruPhyIndex--;
+        if (ruPhyIndex > 37)
         {
-            auto nRusIn80MHz = HeRu::GetNRus(MHz_u{80}, ruType);
-            // "ignore" the center 26-tone RU in an 80 MHz channel
-            if (ruType == HeRu::RU_26_TONE)
-            {
-                nRusIn80MHz--;
-            }
-            ruIndex += nRusIn80MHz;
+            ruPhyIndex -= (ruPhyIndex - 19) / 37;
         }
     }
 
@@ -869,29 +861,38 @@
 
     switch (ruType)
     {
-    case HeRu::RU_26_TONE:
-    case HeRu::RU_52_TONE:
-    case HeRu::RU_106_TONE:
-    case HeRu::RU_242_TONE:
+    case RuType::RU_26_TONE:
+    case RuType::RU_52_TONE:
+    case RuType::RU_106_TONE:
+    case RuType::RU_242_TONE:
         n20MHzChannels = 1;
         break;
-    case HeRu::RU_484_TONE:
+    case RuType::RU_484_TONE:
         n20MHzChannels = 2;
         break;
-    case HeRu::RU_996_TONE:
+    case RuType::RU_996_TONE:
         n20MHzChannels = 4;
         break;
+    case RuType::RU_2x996_TONE:
+        n20MHzChannels = 8;
+        break;
+    case RuType::RU_4x996_TONE:
+        n20MHzChannels = 16;
+        break;
     default:
         NS_ABORT_MSG("Unhandled RU type: " << ruType);
     }
 
-    auto nRusInCoveringChannel = HeRu::GetNRus(n20MHzChannels * MHz_u{20}, ruType);
+    auto nRusInCoveringChannel =
+        WifiRu::GetNRus(n20MHzChannels * MHz_u{20},
+                        ruType,
+                        WifiRu::IsHe(ru) ? WIFI_MOD_CLASS_HE : WIFI_MOD_CLASS_EHT);
     // compute the index (starting at 0) of the covering channel within the given width
-    std::size_t indexOfCoveringChannelInGivenWidth = (ruIndex - 1) / nRusInCoveringChannel;
+    std::size_t indexOfCoveringChannelInGivenWidth = (ruPhyIndex - 1) / nRusInCoveringChannel;
 
     // expand the index of the covering channel in the indices of its constituent
     // 20 MHz channels (within the given width)
-    NS_ASSERT(indexOfCoveringChannelInGivenWidth < 8); // max number of 20 MHz channels
+    NS_ASSERT(indexOfCoveringChannelInGivenWidth < 16); // max number of 20 MHz channels
     std::set<uint8_t> indices({static_cast<uint8_t>(indexOfCoveringChannelInGivenWidth)});
 
     while (n20MHzChannels > 1)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/wifi-phy-operating-channel.h ns-3.45/src/wifi/model/wifi-phy-operating-channel.h
--- ns-3.44/src/wifi/model/wifi-phy-operating-channel.h	2025-03-09 16:55:49.803372600 -0700
+++ ns-3.45/src/wifi/model/wifi-phy-operating-channel.h	2025-06-01 20:34:45.629702300 -0700
@@ -12,8 +12,7 @@
 
 #include "wifi-phy-band.h"
 #include "wifi-phy-common.h"
-
-#include "ns3/he-ru.h"
+#include "wifi-ru.h"
 
 #include <optional>
 #include <set>
@@ -388,7 +387,7 @@
      *              it is the width of the PPDU for which the RU is allocated
      * @return the channel indices of the minimum subset of 20 MHz channels containing the given RU
      */
-    std::set<uint8_t> Get20MHzIndicesCoveringRu(HeRu::RuSpec ru, MHz_u width) const;
+    std::set<uint8_t> Get20MHzIndicesCoveringRu(WifiRu::RuSpec ru, MHz_u width) const;
 
     /**
      * Get the index of the segment that contains a given primary channel.
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/wifi-phy-state-helper.cc ns-3.45/src/wifi/model/wifi-phy-state-helper.cc
--- ns-3.44/src/wifi/model/wifi-phy-state-helper.cc	2025-03-09 16:55:49.803372600 -0700
+++ ns-3.45/src/wifi/model/wifi-phy-state-helper.cc	2025-06-01 20:34:45.629702300 -0700
@@ -482,11 +482,11 @@
 }
 
 void
-WifiPhyStateHelper::SwitchFromRxEndError()
+WifiPhyStateHelper::SwitchFromRxEndError(const WifiTxVector& txVector)
 {
     NS_LOG_FUNCTION(this);
     NS_ASSERT(m_endRx == Simulator::Now());
-    NotifyListeners(&WifiPhyListener::NotifyRxEndError);
+    NotifyListeners(&WifiPhyListener::NotifyRxEndError, txVector);
     DoSwitchFromRx();
 }
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/wifi-phy-state-helper.h ns-3.45/src/wifi/model/wifi-phy-state-helper.h
--- ns-3.44/src/wifi/model/wifi-phy-state-helper.h	2025-03-09 16:55:49.803372600 -0700
+++ ns-3.45/src/wifi/model/wifi-phy-state-helper.h	2025-06-01 20:34:45.629702300 -0700
@@ -246,8 +246,10 @@
     void SwitchFromRxEndOk();
     /**
      * Switch from RX after the reception failed.
+     *
+     * @param txVector the TXVECTOR used for transmission of failed frame
      */
-    void SwitchFromRxEndError();
+    void SwitchFromRxEndError(const WifiTxVector& txVector);
     /**
      * Abort current reception following a CCA reset request.
      * @param operatingWidth the channel width the PHY is operating on
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/wifi-ppdu.cc ns-3.45/src/wifi/model/wifi-ppdu.cc
--- ns-3.44/src/wifi/model/wifi-ppdu.cc	2025-03-09 16:55:49.803372600 -0700
+++ ns-3.45/src/wifi/model/wifi-ppdu.cc	2025-06-01 20:34:45.630702300 -0700
@@ -100,6 +100,8 @@
     m_psdus = psdus;
 }
 
+WifiPpdu::~WifiPpdu() = default;
+
 const WifiTxVector&
 WifiPpdu::GetTxVector() const
 {
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/wifi-ppdu.h ns-3.45/src/wifi/model/wifi-ppdu.h
--- ns-3.44/src/wifi/model/wifi-ppdu.h	2025-03-09 16:55:49.803372600 -0700
+++ ns-3.45/src/wifi/model/wifi-ppdu.h	2025-06-01 20:34:45.630702300 -0700
@@ -73,7 +73,7 @@
     /**
      * Destructor for WifiPpdu.
      */
-    virtual ~WifiPpdu() = default;
+    virtual ~WifiPpdu();
 
     /**
      * Get the TXVECTOR used to send the PPDU.
@@ -219,7 +219,7 @@
                                          always be obtained from the PHY headers, especially for
                                          non-HT PPDU, since we do not sense the spectrum to
                                          determine the occupied channel width for simplicity. */
-};                          // class WifiPpdu
+};
 
 /**
  * @brief Stream insertion operator.
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/wifi-protection-manager.cc ns-3.45/src/wifi/model/wifi-protection-manager.cc
--- ns-3.44/src/wifi/model/wifi-protection-manager.cc	2025-03-09 16:55:49.803372600 -0700
+++ ns-3.45/src/wifi/model/wifi-protection-manager.cc	2025-06-01 20:34:45.630702300 -0700
@@ -85,11 +85,11 @@
     auto phy = m_mac->GetWifiPhy(m_linkId);
     std::size_t primaryIdx = phy->GetOperatingChannel().GetPrimaryChannelIndex(ctsTxWidth);
     std::size_t idx80MHz = MHz_u{80} / ctsTxWidth;
-    if ((phy->GetChannelWidth() == MHz_u{160}) && (ctsTxWidth <= MHz_u{40}) &&
+    if ((phy->GetChannelWidth() > MHz_u{80}) && (ctsTxWidth <= MHz_u{40}) &&
         (primaryIdx >= idx80MHz))
     {
-        // the primary80 is in the higher part of the 160 MHz channel
-        primaryIdx -= idx80MHz;
+        // get the index of the primary within the primary80
+        primaryIdx %= idx80MHz;
     }
     switch (static_cast<uint16_t>(ctsTxWidth))
     {
@@ -105,6 +105,9 @@
     case 160:
         ui.SetMuRtsRuAllocation(68);
         break;
+    case 320:
+        ui.SetMuRtsRuAllocation(69);
+        break;
     default:
         NS_ABORT_MSG("Unhandled TX width: " << ctsTxWidth << " MHz");
     }
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/wifi-psdu.cc ns-3.45/src/wifi/model/wifi-psdu.cc
--- ns-3.44/src/wifi/model/wifi-psdu.cc	2025-03-09 16:55:49.803372600 -0700
+++ ns-3.45/src/wifi/model/wifi-psdu.cc	2025-06-01 20:34:45.630702300 -0700
@@ -131,11 +131,7 @@
 bool
 WifiPsdu::HasNav() const
 {
-    // When the contents of a received Duration/ID field, treated as an unsigned integer,
-    // are greater than 32 768, the contents are interpreted as appropriate for the frame
-    // type and subtype or ignored if the receiving MAC entity does not have a defined
-    // interpretation for that type and subtype (IEEE 802.11-2016 sec. 10.27.3)
-    return (m_mpduList.at(0)->GetHeader().GetRawDuration() & 0x8000) == 0;
+    return m_mpduList.at(0)->GetHeader().HasNav();
 }
 
 Time
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/wifi-radio-energy-model.cc ns-3.45/src/wifi/model/wifi-radio-energy-model.cc
--- ns-3.44/src/wifi/model/wifi-radio-energy-model.cc	2025-03-09 16:55:49.803372600 -0700
+++ ns-3.45/src/wifi/model/wifi-radio-energy-model.cc	2025-06-01 20:34:45.630702300 -0700
@@ -514,7 +514,7 @@
 }
 
 void
-WifiRadioEnergyModelPhyListener::NotifyRxEndError()
+WifiRadioEnergyModelPhyListener::NotifyRxEndError(const WifiTxVector& /* txVector */)
 {
     NS_LOG_FUNCTION(this);
     if (m_changeStateCallback.IsNull())
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/wifi-radio-energy-model.h ns-3.45/src/wifi/model/wifi-radio-energy-model.h
--- ns-3.44/src/wifi/model/wifi-radio-energy-model.h	2025-03-09 16:55:49.803372600 -0700
+++ ns-3.45/src/wifi/model/wifi-radio-energy-model.h	2025-06-01 20:34:45.630702300 -0700
@@ -56,7 +56,7 @@
 
     void NotifyRxStart(Time duration) override;
     void NotifyRxEndOk() override;
-    void NotifyRxEndError() override;
+    void NotifyRxEndError(const WifiTxVector& txVector) override;
     void NotifyTxStart(Time duration, dBm_u txPower) override;
     void NotifyCcaBusyStart(Time duration,
                             WifiChannelListType channelType,
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/wifi-remote-station-manager.cc ns-3.45/src/wifi/model/wifi-remote-station-manager.cc
--- ns-3.44/src/wifi/model/wifi-remote-station-manager.cc	2025-03-09 16:55:49.803372600 -0700
+++ ns-3.45/src/wifi/model/wifi-remote-station-manager.cc	2025-06-01 20:34:45.630702300 -0700
@@ -45,6 +45,7 @@
         TypeId("ns3::WifiRemoteStationManager")
             .SetParent<Object>()
             .SetGroupName("Wifi")
+            // NS_DEPRECATED_3_44
             .AddAttribute("MaxSsrc",
                           "The maximum number of retransmission attempts for any packet with size "
                           "<= RtsCtsThreshold. "
@@ -54,6 +55,7 @@
                           MakeUintegerChecker<uint32_t>(),
                           TypeId::SupportLevel::OBSOLETE,
                           "Use WifiMac::FrameRetryLimit instead")
+            // NS_DEPRECATED_3_44
             .AddAttribute("MaxSlrc",
                           "The maximum number of retransmission attempts for any packet with size "
                           "> RtsCtsThreshold. "
@@ -74,18 +76,19 @@
                 BooleanValue(false),
                 MakeBooleanAccessor(&WifiRemoteStationManager::m_incrRetryCountUnderBa),
                 MakeBooleanChecker())
-            .AddAttribute("RtsCtsThreshold",
-                          "If the size of the PSDU is bigger than this value, we use an RTS/CTS "
-                          "handshake before sending the data frame."
-                          "This value will not have any effect on some rate control algorithms.",
-                          UintegerValue(4692480),
-                          MakeUintegerAccessor(&WifiRemoteStationManager::SetRtsCtsThreshold),
-                          MakeUintegerChecker<uint32_t>(0, 4692480))
+            .AddAttribute(
+                "RtsCtsThreshold",
+                "If the size of the PSDU is bigger than this value, we use an RTS/CTS "
+                "handshake before sending the data frame."
+                "This value will not have any effect on some rate control algorithms.",
+                UintegerValue(WIFI_DEFAULT_RTS_THRESHOLD),
+                MakeUintegerAccessor(&WifiRemoteStationManager::SetRtsCtsThreshold),
+                MakeUintegerChecker<uint32_t>(WIFI_MIN_RTS_THRESHOLD, WIFI_MAX_RTS_THRESHOLD))
             .AddAttribute("RtsCtsTxDurationThresh",
                           "If this threshold is a strictly positive value and the TX duration of "
                           "the PSDU is greater than or equal to this threshold, we use an RTS/CTS "
                           "handshake before sending the data frame.",
-                          TimeValue(Time{0}),
+                          TimeValue(),
                           MakeTimeAccessor(&WifiRemoteStationManager::m_rtsCtsTxDurationThresh),
                           MakeTimeChecker())
             .AddAttribute(
@@ -94,10 +97,10 @@
                 "size of the fragments are equal or smaller. "
                 "This value does not apply when it is carried in an A-MPDU. "
                 "This value will not have any effect on some rate control algorithms.",
-                UintegerValue(65535),
+                UintegerValue(WIFI_DEFAULT_FRAG_THRESHOLD),
                 MakeUintegerAccessor(&WifiRemoteStationManager::DoSetFragmentationThreshold,
                                      &WifiRemoteStationManager::DoGetFragmentationThreshold),
-                MakeUintegerChecker<uint32_t>())
+                MakeUintegerChecker<uint32_t>(WIFI_MIN_FRAG_THRESHOLD, WIFI_MAX_FRAG_THRESHOLD))
             .AddAttribute("NonUnicastMode",
                           "Wifi mode used for non-unicast transmissions.",
                           WifiModeValue(),
@@ -700,6 +703,32 @@
                         false);
 }
 
+void
+WifiRemoteStationManager::AdjustTxVectorForCtlResponse(WifiTxVector& txVector,
+                                                       MHz_u allowedWidth) const
+{
+    NS_LOG_FUNCTION(this << txVector << allowedWidth);
+
+    auto modulation = txVector.GetModulationClass();
+
+    if (allowedWidth >= 40 &&
+        (modulation == WIFI_MOD_CLASS_DSSS || modulation == WIFI_MOD_CLASS_HR_DSSS))
+    {
+        // control frame must be sent in a non-HT duplicate PPDU because it must protect a frame
+        // being transmitted on at least 40 MHz. Change the modulation class to ERP-OFDM and the
+        // rate to 6 Mbps
+        txVector.SetMode(ErpOfdmPhy::GetErpOfdmRate6Mbps());
+        modulation = txVector.GetModulationClass();
+    }
+    // do not set allowedWidth as the TX width if the modulation class is (HR-)DSSS (allowedWidth
+    // may be 20 MHz) or allowedWidth is 22 MHz (the selected modulation class may be OFDM)
+    if (modulation != WIFI_MOD_CLASS_DSSS && modulation != WIFI_MOD_CLASS_HR_DSSS &&
+        allowedWidth != 22)
+    {
+        txVector.SetChannelWidth(allowedWidth);
+    }
+}
+
 WifiTxVector
 WifiRemoteStationManager::GetRtsTxVector(Mac48Address address, MHz_u allowedWidth)
 {
@@ -722,24 +751,8 @@
     {
         v = DoGetRtsTxVector(Lookup(address));
     }
-    auto modulation = v.GetModulationClass();
 
-    if (allowedWidth >= 40 &&
-        (modulation == WIFI_MOD_CLASS_DSSS || modulation == WIFI_MOD_CLASS_HR_DSSS))
-    {
-        // RTS must be sent in a non-HT duplicate PPDU because it must protect a frame being
-        // transmitted on at least 40 MHz. Change the modulation class to ERP-OFDM and the rate
-        // to 6 Mbps
-        v.SetMode(ErpOfdmPhy::GetErpOfdmRate6Mbps());
-        modulation = v.GetModulationClass();
-    }
-    // do not set allowedWidth as the TX width if the modulation class is (HR-)DSSS (allowedWidth
-    // may be >= 40 MHz) or allowedWidth is 22 MHz (the selected modulation class may be OFDM)
-    if (modulation != WIFI_MOD_CLASS_DSSS && modulation != WIFI_MOD_CLASS_HR_DSSS &&
-        allowedWidth != 22)
-    {
-        v.SetChannelWidth(allowedWidth);
-    }
+    AdjustTxVectorForCtlResponse(v, allowedWidth);
 
     return v;
 }
@@ -808,6 +821,9 @@
     v.SetChannelWidth(m_wifiPhy->GetTxBandwidth(ackMode));
     v.SetGuardInterval(GetGuardIntervalForMode(ackMode, m_wifiPhy->GetDevice()));
     v.SetNss(1);
+
+    AdjustTxVectorForCtlResponse(v, dataTxVector.GetChannelWidth());
+
     return v;
 }
 
@@ -825,6 +841,9 @@
     v.SetChannelWidth(m_wifiPhy->GetTxBandwidth(blockAckMode));
     v.SetGuardInterval(GetGuardIntervalForMode(blockAckMode, m_wifiPhy->GetDevice()));
     v.SetNss(1);
+
+    AdjustTxVectorForCtlResponse(v, dataTxVector.GetChannelWidth());
+
     return v;
 }
 
@@ -1335,13 +1354,12 @@
 WifiRemoteStationManager::DoSetFragmentationThreshold(uint32_t threshold)
 {
     NS_LOG_FUNCTION(this << threshold);
-    if (threshold < 256)
+    if (threshold < WIFI_MIN_FRAG_THRESHOLD)
     {
-        /*
-         * ASN.1 encoding of the MAC and PHY MIB (256 ... 8000)
-         */
-        NS_LOG_WARN("Fragmentation threshold should be larger than 256. Setting to 256.");
-        m_fragmentationThreshold = 256;
+        NS_LOG_WARN("Fragmentation threshold should be larger than "
+                    << WIFI_MIN_FRAG_THRESHOLD << ". Setting to " << WIFI_MIN_FRAG_THRESHOLD
+                    << ".");
+        m_fragmentationThreshold = WIFI_MIN_FRAG_THRESHOLD;
     }
     else
     {
@@ -1468,12 +1486,8 @@
 std::shared_ptr<WifiRemoteStationState>
 WifiRemoteStationManager::LookupState(Mac48Address address) const
 {
-    NS_LOG_FUNCTION(this << address);
-    auto stateIt = m_states.find(address);
-
-    if (stateIt != m_states.end())
+    if (const auto stateIt = m_states.find(address); stateIt != m_states.cend())
     {
-        NS_LOG_DEBUG("WifiRemoteStationManager::LookupState returning existing state");
         return stateIt->second;
     }
 
@@ -1487,9 +1501,13 @@
     state->m_erpOfdmSupported = false;
     state->m_ofdmSupported = false;
     state->m_htCapabilities = nullptr;
+    state->m_htOperation = nullptr;
     state->m_vhtCapabilities = nullptr;
+    state->m_vhtOperation = nullptr;
     state->m_heCapabilities = nullptr;
+    state->m_heOperation = nullptr;
     state->m_ehtCapabilities = nullptr;
+    state->m_ehtOperation = nullptr;
     state->m_mleCommonInfo = nullptr;
     state->m_emlsrEnabled = false;
     state->m_channelWidth = m_wifiPhy->GetChannelWidth();
@@ -1571,6 +1589,18 @@
 }
 
 void
+WifiRemoteStationManager::AddStationHtOperation(Mac48Address from, const HtOperation& htOperation)
+{
+    NS_LOG_FUNCTION(this << from << htOperation);
+    auto state = LookupState(from);
+    if (htOperation.GetStaChannelWidth() == 0)
+    {
+        state->m_channelWidth = MHz_u{20};
+    }
+    state->m_htOperation = Create<const HtOperation>(htOperation);
+}
+
+void
 WifiRemoteStationManager::AddStationExtendedCapabilities(
     Mac48Address from,
     const ExtendedCapabilities& extendedCapabilities)
@@ -1609,6 +1639,34 @@
 }
 
 void
+WifiRemoteStationManager::AddStationVhtOperation(Mac48Address from,
+                                                 const VhtOperation& vhtOperation)
+{
+    NS_LOG_FUNCTION(this << from << vhtOperation);
+    auto state = LookupState(from);
+    /*
+     * Table 9-274 (VHT Operation Information subfields) of 802.11-2020:
+     * Set to 0 for 20 MHz or 40 MHz BSS bandwidth.
+     * Set to 1 for 80 MHz, 160 MHz or 80+80 MHz BSS bandwidth.
+     */
+    if (vhtOperation.GetChannelWidth() == 0)
+    {
+        state->m_channelWidth = std::min(MHz_u{40}, state->m_channelWidth);
+    }
+    else if (vhtOperation.GetChannelWidth() == 1)
+    {
+        state->m_channelWidth = std::min(MHz_u{160}, state->m_channelWidth);
+    }
+    state->m_vhtOperation = Create<const VhtOperation>(vhtOperation);
+}
+
+Ptr<const VhtOperation>
+WifiRemoteStationManager::GetStationVhtOperation(Mac48Address from)
+{
+    return LookupState(from)->m_vhtOperation;
+}
+
+void
 WifiRemoteStationManager::AddStationHeCapabilities(Mac48Address from,
                                                    const HeCapabilities& heCapabilities)
 {
@@ -1626,6 +1684,10 @@
         {
             state->m_channelWidth = MHz_u{80};
         }
+        else if (heCapabilities.GetChannelWidthSet() == 0x00)
+        {
+            state->m_channelWidth = MHz_u{20};
+        }
         // For other cases at 5 GHz, the supported channel width is set by the VHT capabilities
     }
     else if (m_wifiPhy->GetPhyBand() == WIFI_PHY_BAND_2_4GHZ)
@@ -1660,6 +1722,34 @@
 }
 
 void
+WifiRemoteStationManager::AddStationHeOperation(Mac48Address from, const HeOperation& heOperation)
+{
+    NS_LOG_FUNCTION(this << from << heOperation);
+    auto state = LookupState(from);
+    if (auto operation6GHz = heOperation.m_6GHzOpInfo)
+    {
+        switch (operation6GHz->m_chWid)
+        {
+        case 0:
+            state->m_channelWidth = MHz_u{20};
+            break;
+        case 1:
+            state->m_channelWidth = MHz_u{40};
+            break;
+        case 2:
+            state->m_channelWidth = MHz_u{80};
+            break;
+        case 3:
+            state->m_channelWidth = MHz_u{160};
+            break;
+        default:
+            NS_FATAL_ERROR("Invalid channel width value in 6 GHz Operation Information field");
+        }
+    }
+    state->m_heOperation = Create<const HeOperation>(heOperation);
+}
+
+void
 WifiRemoteStationManager::AddStationHe6GhzCapabilities(
     const Mac48Address& from,
     const He6GhzBandCapabilities& he6GhzCapabilities)
@@ -1678,6 +1768,12 @@
     // Used by all stations to record EHT capabilities of remote stations
     NS_LOG_FUNCTION(this << from << ehtCapabilities);
     auto state = LookupState(from);
+    if (ehtCapabilities.m_phyCapabilities.support320MhzIn6Ghz &&
+        (m_wifiPhy->GetPhyBand() == WIFI_PHY_BAND_6GHZ))
+    {
+        state->m_channelWidth = MHz_u{320};
+    }
+    // For other cases, the supported channel width is set by the HT/VHT capabilities
     for (const auto& mcs : m_wifiPhy->GetMcsList(WIFI_MOD_CLASS_EHT))
     {
         for (uint8_t mapType = 0; mapType < EhtMcsAndNssSet::EHT_MCS_MAP_TYPE_MAX; ++mapType)
@@ -1694,6 +1790,38 @@
 }
 
 void
+WifiRemoteStationManager::AddStationEhtOperation(Mac48Address from,
+                                                 const EhtOperation& ehtOperation)
+{
+    NS_LOG_FUNCTION(this << from << ehtOperation);
+    auto state = LookupState(from);
+    if (auto opControl = ehtOperation.m_opInfo)
+    {
+        switch (opControl->control.channelWidth)
+        {
+        case 0:
+            state->m_channelWidth = MHz_u{20};
+            break;
+        case 1:
+            state->m_channelWidth = MHz_u{40};
+            break;
+        case 2:
+            state->m_channelWidth = MHz_u{80};
+            break;
+        case 3:
+            state->m_channelWidth = MHz_u{160};
+            break;
+        case 4:
+            state->m_channelWidth = MHz_u{320};
+            break;
+        default:
+            NS_FATAL_ERROR("Invalid channel width value in EHT Operation Information field");
+        }
+    }
+    state->m_ehtOperation = Create<const EhtOperation>(ehtOperation);
+}
+
+void
 WifiRemoteStationManager::AddStationMleCommonInfo(
     Mac48Address from,
     const std::shared_ptr<CommonInfoBasicMle>& mleCommonInfo)
@@ -1702,8 +1830,9 @@
     auto state = LookupState(from);
     state->m_mleCommonInfo = mleCommonInfo;
     // insert another entry in m_states indexed by the MLD address and pointing to the same state
-    const_cast<WifiRemoteStationManager*>(this)->m_states.insert(
-        {mleCommonInfo->m_mldMacAddress, state});
+    const_cast<WifiRemoteStationManager*>(this)->m_states.insert_or_assign(
+        mleCommonInfo->m_mldMacAddress,
+        state);
 }
 
 Ptr<const HtCapabilities>
@@ -1712,6 +1841,12 @@
     return LookupState(from)->m_htCapabilities;
 }
 
+Ptr<const HtOperation>
+WifiRemoteStationManager::GetStationHtOperation(Mac48Address from)
+{
+    return LookupState(from)->m_htOperation;
+}
+
 Ptr<const ExtendedCapabilities>
 WifiRemoteStationManager::GetStationExtendedCapabilities(const Mac48Address& from)
 {
@@ -1730,6 +1865,12 @@
     return LookupState(from)->m_heCapabilities;
 }
 
+Ptr<const HeOperation>
+WifiRemoteStationManager::GetStationHeOperation(Mac48Address from)
+{
+    return LookupState(from)->m_heOperation;
+}
+
 Ptr<const He6GhzBandCapabilities>
 WifiRemoteStationManager::GetStationHe6GhzCapabilities(const Mac48Address& from) const
 {
@@ -1742,6 +1883,12 @@
     return LookupState(from)->m_ehtCapabilities;
 }
 
+Ptr<const EhtOperation>
+WifiRemoteStationManager::GetStationEhtOperation(Mac48Address from)
+{
+    return LookupState(from)->m_ehtOperation;
+}
+
 std::optional<std::reference_wrapper<CommonInfoBasicMle::EmlCapabilities>>
 WifiRemoteStationManager::GetStationEmlCapabilities(const Mac48Address& from)
 {
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/wifi-remote-station-manager.h ns-3.45/src/wifi/model/wifi-remote-station-manager.h
--- ns-3.44/src/wifi/model/wifi-remote-station-manager.h	2025-03-09 16:55:49.803372600 -0700
+++ ns-3.45/src/wifi/model/wifi-remote-station-manager.h	2025-06-01 20:34:45.631702200 -0700
@@ -18,13 +18,17 @@
 #include "ns3/common-info-basic-mle.h"
 #include "ns3/data-rate.h"
 #include "ns3/eht-capabilities.h"
+#include "ns3/eht-operation.h"
 #include "ns3/he-6ghz-band-capabilities.h"
 #include "ns3/he-capabilities.h"
+#include "ns3/he-operation.h"
 #include "ns3/ht-capabilities.h"
+#include "ns3/ht-operation.h"
 #include "ns3/mac48-address.h"
 #include "ns3/object.h"
 #include "ns3/traced-callback.h"
 #include "ns3/vht-capabilities.h"
+#include "ns3/vht-operation.h"
 
 #include <array>
 #include <list>
@@ -106,13 +110,17 @@
     bool m_erpOfdmSupported;           //!< Flag if ERP OFDM is supported by the remote station
     bool m_ofdmSupported;              //!< Flag if OFDM is supported by the remote station
     Ptr<const HtCapabilities> m_htCapabilities; //!< remote station HT capabilities
+    Ptr<const HtOperation> m_htOperation;       //!< remote station HT operation
     Ptr<const ExtendedCapabilities>
         m_extendedCapabilities;                   //!< remote station extended capabilities
     Ptr<const VhtCapabilities> m_vhtCapabilities; //!< remote station VHT capabilities
+    Ptr<const VhtOperation> m_vhtOperation;       //!< remote station VHT operation
     Ptr<const HeCapabilities> m_heCapabilities;   //!< remote station HE capabilities
+    Ptr<const HeOperation> m_heOperation;         //!< remote station HE operation
     Ptr<const He6GhzBandCapabilities>
         m_he6GhzBandCapabilities;                 //!< remote station HE 6GHz band capabilities
     Ptr<const EhtCapabilities> m_ehtCapabilities; //!< remote station EHT capabilities
+    Ptr<const EhtOperation> m_ehtOperation;       //!< remote station EHT operation
     /// remote station Multi-Link Element Common Info
     std::shared_ptr<CommonInfoBasicMle> m_mleCommonInfo;
     bool m_emlsrEnabled; //!< whether EMLSR mode is enabled on this link
@@ -254,6 +262,13 @@
      */
     void AddStationHtCapabilities(Mac48Address from, const HtCapabilities& htCapabilities);
     /**
+     * Records HT operation of the remote station.
+     *
+     * @param from the address of the station being recorded
+     * @param htOperation the HT operation of the station
+     */
+    void AddStationHtOperation(Mac48Address from, const HtOperation& htOperation);
+    /**
      * Records extended capabilities of the remote station.
      *
      * @param from the address of the station being recorded
@@ -269,6 +284,13 @@
      */
     void AddStationVhtCapabilities(Mac48Address from, const VhtCapabilities& vhtCapabilities);
     /**
+     * Records VHT operation of the remote station.
+     *
+     * @param from the address of the station being recorded
+     * @param vhtOperation the VHT operation of the station
+     */
+    void AddStationVhtOperation(Mac48Address from, const VhtOperation& vhtOperation);
+    /**
      * Records HE capabilities of the remote station.
      *
      * @param from the address of the station being recorded
@@ -276,6 +298,13 @@
      */
     void AddStationHeCapabilities(Mac48Address from, const HeCapabilities& heCapabilities);
     /**
+     * Records HE operation of the remote station.
+     *
+     * @param from the address of the station being recorded
+     * @param heOperation the HE operation of the station
+     */
+    void AddStationHeOperation(Mac48Address from, const HeOperation& heOperation);
+    /**
      * Records HE 6 GHz Band Capabilities of a remote station
      *
      * @param from the address of the remote station
@@ -291,6 +320,13 @@
      */
     void AddStationEhtCapabilities(Mac48Address from, const EhtCapabilities& ehtCapabilities);
     /**
+     * Records EHT operation of the remote station.
+     *
+     * @param from the address of the station being recorded
+     * @param ehtOperation the EHT operation of the station
+     */
+    void AddStationEhtOperation(Mac48Address from, const EhtOperation& ehtOperation);
+    /**
      * Records the Common Info field advertised by the given remote station in a Multi-Link
      * Element. It includes the MLD address of the remote station.
      *
@@ -307,6 +343,13 @@
      */
     Ptr<const HtCapabilities> GetStationHtCapabilities(Mac48Address from);
     /**
+     * Return the HT operation sent by the remote station.
+     *
+     * @param from the address of the remote station
+     * @return the HT operation sent by the remote station
+     */
+    Ptr<const HtOperation> GetStationHtOperation(Mac48Address from);
+    /**
      * Return the extended capabilities sent by the remote station.
      *
      * @param from the address of the remote station
@@ -321,6 +364,13 @@
      */
     Ptr<const VhtCapabilities> GetStationVhtCapabilities(Mac48Address from);
     /**
+     * Return the VHT operation sent by the remote station.
+     *
+     * @param from the address of the remote station
+     * @return the VHT operation sent by the remote station
+     */
+    Ptr<const VhtOperation> GetStationVhtOperation(Mac48Address from);
+    /**
      * Return the HE capabilities sent by the remote station.
      *
      * @param from the address of the remote station
@@ -328,6 +378,13 @@
      */
     Ptr<const HeCapabilities> GetStationHeCapabilities(Mac48Address from);
     /**
+     * Return the HE operation sent by the remote station.
+     *
+     * @param from the address of the remote station
+     * @return the HE operation sent by the remote station
+     */
+    Ptr<const HeOperation> GetStationHeOperation(Mac48Address from);
+    /**
      * Return the HE 6 GHz Band Capabilities sent by a remote station.
      *
      * @param from the address of the remote station
@@ -342,6 +399,13 @@
      */
     Ptr<const EhtCapabilities> GetStationEhtCapabilities(Mac48Address from);
     /**
+     * Return the EHT operation sent by the remote station.
+     *
+     * @param from the address of the remote station
+     * @return the EHT operation sent by the remote station
+     */
+    Ptr<const EhtOperation> GetStationEhtOperation(Mac48Address from);
+    /**
      * @param from the (MLD or link) address of the remote non-AP MLD
      * @return the EML Capabilities advertised by the remote non-AP MLD
      */
@@ -890,6 +954,16 @@
      */
     WifiTxVector GetCtsToSelfTxVector();
     /**
+     * Adjust the TXVECTOR for a control response frame to ensure that, if appropriate, the non-HT
+     * duplicate format is used and the TX width matches that of the data frame transmitted (in case
+     * of, e.g., Ack or BlockAck) or to transmit (in case of, e.g., RTS or BlockAckReq) in the same
+     * frame exchange sequence.
+     *
+     * @param txVector the TXVECTOR to adjust
+     * @param allowedWidth the allowed width for the data frame in the same frame exchange sequence
+     */
+    void AdjustTxVectorForCtlResponse(WifiTxVector& txVector, MHz_u allowedWidth) const;
+    /**
      * Adjust the TXVECTOR for an initial Control frame to ensure that the modulation class
      * is non-HT and the rate is 6 Mbps, 12 Mbps or 24 Mbps.
      *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/wifi-ru.cc ns-3.45/src/wifi/model/wifi-ru.cc
--- ns-3.44/src/wifi/model/wifi-ru.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.45/src/wifi/model/wifi-ru.cc	2025-06-01 20:34:45.631702200 -0700
@@ -0,0 +1,266 @@
+/*
+ * Copyright (c) 2024
+ *
+ * SPDX-License-Identifier: GPL-2.0-only
+ *
+ * Author: Sébastien Deronne <sebastien.deronne@gmail.com>
+ */
+
+#include "wifi-ru.h"
+
+#include <algorithm>
+
+namespace ns3
+{
+
+WifiRu::RuSpecCompare::RuSpecCompare(MHz_u channelWidth, uint8_t p20Index)
+    : m_channelWidth(channelWidth),
+      m_p20Index(p20Index)
+{
+}
+
+bool
+WifiRu::RuSpecCompare::operator()(const RuSpec& lhs, const RuSpec& rhs) const
+{
+    const auto lhsIndex = WifiRu::GetPhyIndex(lhs, m_channelWidth, m_p20Index);
+    const auto rhsIndex = WifiRu::GetPhyIndex(rhs, m_channelWidth, m_p20Index);
+    const auto lhsStartTone =
+        WifiRu::GetSubcarrierGroup(m_channelWidth,
+                                   WifiRu::GetRuType(lhs),
+                                   lhsIndex,
+                                   WifiRu::IsHe(lhs) ? WIFI_MOD_CLASS_HE : WIFI_MOD_CLASS_EHT)
+            .front()
+            .first;
+    const auto rhsStartTone =
+        WifiRu::GetSubcarrierGroup(m_channelWidth,
+                                   WifiRu::GetRuType(rhs),
+                                   rhsIndex,
+                                   WifiRu::IsHe(lhs) ? WIFI_MOD_CLASS_HE : WIFI_MOD_CLASS_EHT)
+            .front()
+            .first;
+    return lhsStartTone < rhsStartTone;
+}
+
+RuType
+WifiRu::GetRuType(RuSpec ruVariant)
+{
+    return std::visit([&](auto&& ru) { return ru.GetRuType(); }, ruVariant);
+}
+
+std::size_t
+WifiRu::GetIndex(RuSpec ruVariant)
+{
+    return std::visit([&](auto&& ru) { return ru.GetIndex(); }, ruVariant);
+}
+
+std::size_t
+WifiRu::GetPhyIndex(RuSpec ruVariant, MHz_u bw, uint8_t p20Index)
+{
+    return std::visit([&](auto&& ru) { return ru.GetPhyIndex(bw, p20Index); }, ruVariant);
+}
+
+RuType
+WifiRu::GetMaxRuType(WifiModulationClass mc)
+{
+    switch (mc)
+    {
+    case WIFI_MOD_CLASS_HE:
+        return RuType::RU_2x996_TONE;
+    case WIFI_MOD_CLASS_EHT:
+        return RuType::RU_4x996_TONE;
+    default:
+        NS_ABORT_MSG("Unknown modulation class: " << mc);
+        return RuType::RU_TYPE_MAX;
+    }
+}
+
+MHz_u
+WifiRu::GetBandwidth(RuType ruType)
+{
+    switch (ruType)
+    {
+    case RuType::RU_26_TONE:
+        return MHz_u{2};
+    case RuType::RU_52_TONE:
+        return MHz_u{4};
+    case RuType::RU_106_TONE:
+        return MHz_u{8};
+    case RuType::RU_242_TONE:
+        return MHz_u{20};
+    case RuType::RU_484_TONE:
+        return MHz_u{40};
+    case RuType::RU_996_TONE:
+        return MHz_u{80};
+    case RuType::RU_2x996_TONE:
+        return MHz_u{160};
+    case RuType::RU_4x996_TONE:
+        return MHz_u{320};
+    default:
+        NS_ABORT_MSG("RU type " << ruType << " not found");
+        return MHz_u{0};
+    }
+}
+
+RuType
+WifiRu::GetRuType(MHz_u bandwidth)
+{
+    switch (static_cast<uint16_t>(bandwidth))
+    {
+    case 2:
+        return RuType::RU_26_TONE;
+    case 4:
+        return RuType::RU_52_TONE;
+    case 8:
+        return RuType::RU_106_TONE;
+    case 20:
+        return RuType::RU_242_TONE;
+    case 40:
+        return RuType::RU_484_TONE;
+    case 80:
+        return RuType::RU_996_TONE;
+    case 160:
+        return RuType::RU_2x996_TONE;
+    case 320:
+        return RuType::RU_4x996_TONE;
+    default:
+        NS_ABORT_MSG(bandwidth << " bandwidth not found");
+        return RuType::RU_TYPE_MAX;
+    }
+}
+
+std::size_t
+WifiRu::GetNRus(MHz_u bw, RuType ruType, WifiModulationClass mc)
+{
+    if (ruType > GetMaxRuType(mc))
+    {
+        return 0;
+    }
+    return (mc == WIFI_MOD_CLASS_HE) ? HeRu::GetNRus(bw, ruType) : EhtRu::GetNRus(bw, ruType);
+}
+
+SubcarrierGroup
+WifiRu::GetSubcarrierGroup(MHz_u bw, RuType ruType, std::size_t phyIndex, WifiModulationClass mc)
+{
+    return (mc == WIFI_MOD_CLASS_HE) ? HeRu::GetSubcarrierGroup(bw, ruType, phyIndex)
+                                     : EhtRu::GetSubcarrierGroup(bw, ruType, phyIndex);
+}
+
+uint16_t
+WifiRu::GetEqualizedRuAllocation(RuType ruType, bool isOdd, bool hasUsers, WifiModulationClass mc)
+{
+    return (mc == WIFI_MOD_CLASS_HE) ? HeRu::GetEqualizedRuAllocation(ruType, isOdd, hasUsers)
+                                     : EhtRu::GetEqualizedRuAllocation(ruType, isOdd, hasUsers);
+}
+
+std::vector<WifiRu::RuSpec>
+WifiRu::GetRuSpecs(uint16_t ruAllocation, WifiModulationClass mc)
+{
+    std::vector<RuSpec> ruSpecs;
+    if (mc == WIFI_MOD_CLASS_HE)
+    {
+        auto heRuSpecs = HeRu::GetRuSpecs(ruAllocation);
+        std::copy(heRuSpecs.begin(), heRuSpecs.end(), std::back_inserter(ruSpecs));
+    }
+    else
+    {
+        auto ehtRuSpecs = EhtRu::GetRuSpecs(ruAllocation);
+        std::copy(ehtRuSpecs.begin(), ehtRuSpecs.end(), std::back_inserter(ruSpecs));
+    }
+    return ruSpecs;
+}
+
+std::vector<WifiRu::RuSpec>
+WifiRu::GetRusOfType(MHz_u bw, RuType ruType, WifiModulationClass mc)
+{
+    std::vector<RuSpec> rus;
+    if (mc == WIFI_MOD_CLASS_HE)
+    {
+        auto heRuSpecs = HeRu::GetRusOfType(bw, ruType);
+        std::copy(heRuSpecs.begin(), heRuSpecs.end(), std::back_inserter(rus));
+    }
+    else
+    {
+        auto ehtRuSpecs = EhtRu::GetRusOfType(bw, ruType);
+        std::copy(ehtRuSpecs.begin(), ehtRuSpecs.end(), std::back_inserter(rus));
+    }
+    return rus;
+}
+
+std::vector<WifiRu::RuSpec>
+WifiRu::GetCentral26TonesRus(MHz_u bw, RuType ruType, WifiModulationClass mc)
+{
+    std::vector<RuSpec> central26TonesRus;
+    if (mc == WIFI_MOD_CLASS_HE)
+    {
+        auto heRuSpecs = HeRu::GetCentral26TonesRus(bw, ruType);
+        std::copy(heRuSpecs.begin(), heRuSpecs.end(), std::back_inserter(central26TonesRus));
+    }
+    else
+    {
+        auto ehtRuSpecs = EhtRu::GetCentral26TonesRus(bw, ruType);
+        std::copy(ehtRuSpecs.begin(), ehtRuSpecs.end(), std::back_inserter(central26TonesRus));
+    }
+    return central26TonesRus;
+}
+
+bool
+WifiRu::DoesOverlap(MHz_u bw, RuSpec ru, const std::vector<RuSpec>& v)
+{
+    if (IsHe(ru))
+    {
+        std::vector<HeRu::RuSpec> heRus;
+        std::transform(v.cbegin(), v.cend(), std::back_inserter(heRus), [](const auto& heRu) {
+            return std::get<HeRu::RuSpec>(heRu);
+        });
+        return HeRu::DoesOverlap(bw, std::get<HeRu::RuSpec>(ru), heRus);
+    }
+
+    std::vector<EhtRu::RuSpec> ehtRus;
+    std::transform(v.cbegin(), v.cend(), std::back_inserter(ehtRus), [](const auto& ehtRu) {
+        return std::get<EhtRu::RuSpec>(ehtRu);
+    });
+    return EhtRu::DoesOverlap(bw, std::get<EhtRu::RuSpec>(ru), ehtRus);
+}
+
+WifiRu::RuSpec
+WifiRu::FindOverlappingRu(MHz_u bw, RuSpec referenceRu, RuType searchedRuType)
+{
+    return IsHe(referenceRu) ? RuSpec{HeRu::FindOverlappingRu(bw,
+                                                              std::get<HeRu::RuSpec>(referenceRu),
+                                                              searchedRuType)}
+                             : RuSpec{EhtRu::FindOverlappingRu(bw,
+                                                               std::get<EhtRu::RuSpec>(referenceRu),
+                                                               searchedRuType)};
+}
+
+RuType
+WifiRu::GetEqualSizedRusForStations(MHz_u bandwidth,
+                                    std::size_t& nStations,
+                                    std::size_t& nCentral26TonesRus,
+                                    WifiModulationClass mc)
+{
+    return (mc == WIFI_MOD_CLASS_HE)
+               ? HeRu::GetEqualSizedRusForStations(bandwidth, nStations, nCentral26TonesRus)
+               : EhtRu::GetEqualSizedRusForStations(bandwidth, nStations, nCentral26TonesRus);
+}
+
+bool
+WifiRu::IsHe(RuSpec ru)
+{
+    return std::holds_alternative<HeRu::RuSpec>(ru);
+}
+
+bool
+WifiRu::IsEht(RuSpec ru)
+{
+    return std::holds_alternative<EhtRu::RuSpec>(ru);
+}
+
+std::ostream&
+operator<<(std::ostream& os, const WifiRu::RuSpec& ruVariant)
+{
+    std::visit([&os](auto&& arg) { os << arg; }, ruVariant);
+    return os;
+}
+
+} // namespace ns3
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/wifi-ru.h ns-3.45/src/wifi/model/wifi-ru.h
--- ns-3.44/src/wifi/model/wifi-ru.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.45/src/wifi/model/wifi-ru.h	2025-06-01 20:34:45.631702200 -0700
@@ -0,0 +1,251 @@
+/*
+ * Copyright (c) 2024
+ *
+ * SPDX-License-Identifier: GPL-2.0-only
+ *
+ * Author: Sébastien Deronne <sebastien.deronne@gmail.com>
+ */
+
+#ifndef WIFI_RU_H
+#define WIFI_RU_H
+
+#include "ns3/eht-ru.h"
+#include "ns3/he-ru.h"
+
+#include <variant>
+
+namespace ns3
+{
+
+/**
+ * This class handles RU variants.
+ */
+class WifiRu
+{
+  public:
+    /// variant of the RU specification
+    using RuSpec = std::variant<HeRu::RuSpec, EhtRu::RuSpec>;
+
+    /**
+     * Struct providing a function call operator to compare two RUs.
+     */
+    struct RuSpecCompare
+    {
+        /**
+         * Constructor.
+         *
+         * @param channelWidth the channel width
+         * @param p20Index the index of the primary20 channel
+         */
+        RuSpecCompare(MHz_u channelWidth, uint8_t p20Index);
+        /**
+         * Function call operator.
+         *
+         * @param lhs left hand side RU
+         * @param rhs right hand side RU
+         * @return true if the left hand side RU has its leftmost tone at a lower
+         *         frequency than the leftmost tone of the right hand side RU,
+         *         false otherwise
+         */
+        bool operator()(const RuSpec& lhs, const RuSpec& rhs) const;
+
+      private:
+        MHz_u m_channelWidth; ///< The channel width
+        uint8_t m_p20Index;   ///< Primary20 channel index
+    };
+
+    /**
+     * Get the type of a given RU
+     *
+     * @param ru the RU variant
+     * @return the RU type
+     */
+    static RuType GetRuType(RuSpec ru);
+
+    /**
+     * Get the index of a given RU
+     *
+     * @param ru the RU variant
+     * @return the RU index
+     */
+    static std::size_t GetIndex(RuSpec ru);
+
+    /**
+     * Get the RU PHY index
+     *
+     * @param ru the RU variant
+     * @param bw the width of the channel of which the RU is part
+     * @param p20Index the index of the primary20 channel
+     * @return the RU PHY index
+     */
+    static std::size_t GetPhyIndex(RuSpec ru, MHz_u bw, uint8_t p20Index);
+
+    /**
+     * Get the approximate bandwidth occupied by a RU.
+     *
+     * @param ruType the RU type
+     * @return the approximate bandwidth occupied by the RU
+     */
+    static MHz_u GetBandwidth(RuType ruType);
+
+    /**
+     * Get the RU corresponding to the approximate bandwidth.
+     *
+     * @param bandwidth the approximate bandwidth occupied by the RU
+     * @return the RU type
+     */
+    static RuType GetRuType(MHz_u bandwidth);
+
+    /**
+     * Get the number of distinct RUs of the given type (number of tones)
+     * available in a PPDU of the given bandwidth.
+     *
+     * @param bw the bandwidth of the PPDU
+     * @param ruType the RU type (number of tones)
+     * @param mc the modulation class of the PPDU
+     * @return the number of distinct RUs available
+     */
+    static std::size_t GetNRus(MHz_u bw, RuType ruType, WifiModulationClass mc);
+
+    /**
+     * Get the subcarrier group of the RU having the given PHY index among all the
+     * RUs of the given type (number of tones) available in a PPDU of the
+     * given bandwidth. A subcarrier group is defined as one or more pairs
+     * indicating the lowest frequency index and the highest frequency index.
+     *
+     * @param bw the bandwidth of the PPDU
+     * @param ruType the RU type (number of tones)
+     * @param phyIndex the PHY index (starting at 1) of the RU
+     * @param mc the modulation class of the PPDU
+     * @return the subcarrier range of the specified RU
+     */
+    static SubcarrierGroup GetSubcarrierGroup(MHz_u bw,
+                                              RuType ruType,
+                                              std::size_t phyIndex,
+                                              WifiModulationClass mc);
+
+    /**
+     * Get the RU_ALLOCATION value for equal size RUs
+     *
+     * @param ruType equal size RU type (generated by GetEqualSizedRusForStations)
+     * @param isOdd if number of stations is an odd number
+     * @param hasUsers whether it contributes to User field(s) in the content channel this RU
+     * Allocation belongs to
+     * @param mc the modulation class of the PPDU
+     * @return RU_ALLOCATION value
+     */
+    static uint16_t GetEqualizedRuAllocation(RuType ruType,
+                                             bool isOdd,
+                                             bool hasUsers,
+                                             WifiModulationClass mc);
+
+    /**
+     * Get the RU specs based on RU_ALLOCATION
+     *
+     * @param ruAllocation 9 bit RU_ALLOCATION value
+     * @param mc the modulation class of the PPDU
+     * @return RU spec associated with the RU_ALLOCATION
+     */
+    static std::vector<RuSpec> GetRuSpecs(uint16_t ruAllocation, WifiModulationClass mc);
+
+    /**
+     * Get the set of distinct RUs of the given type (number of tones)
+     * available in an MU PPDU of the given bandwidth.
+     *
+     * @param bw the bandwidth of the PPDU
+     * @param ruType the RU type (number of tones)
+     * @param mc the modulation class of the PPDU
+     * @return the set of distinct RUs available
+     */
+    static std::vector<RuSpec> GetRusOfType(MHz_u bw, RuType ruType, WifiModulationClass mc);
+
+    /**
+     * Get the set of 26-tone RUs that can be additionally allocated if the given
+     * bandwidth is split in RUs of the given type.
+     *
+     * @param bw the bandwidth of the PPDU
+     * @param ruType the RU type (number of tones)
+     * @param mc the modulation class of the PPDU
+     * @return the set of 26-tone RUs that can be additionally allocated
+     */
+    static std::vector<RuSpec> GetCentral26TonesRus(MHz_u bw,
+                                                    RuType ruType,
+                                                    WifiModulationClass mc);
+
+    /**
+     * Check whether the given RU overlaps with the given set of RUs.
+     *
+     * @param bw the bandwidth of the PPDU
+     * @param ru the given RU allocation
+     * @param v the given set of RUs
+     * @return true if the given RU overlaps with the given set of RUs.
+     */
+    static bool DoesOverlap(MHz_u bw, RuSpec ru, const std::vector<RuSpec>& v);
+
+    /**
+     * Given the channel bandwidth and the number of stations candidate for being
+     * assigned an RU, maximize the number of candidate stations that can be assigned
+     * an RU subject to the constraint that all the stations must be assigned an RU
+     * of the same size (in terms of number of tones).
+     *
+     * @param bandwidth the channel bandwidth
+     * @param nStations the number of candidate stations. On return, it is set to
+     *                  the number of stations that are assigned an RU
+     * @param nCentral26TonesRus the number of additional 26-tone RUs that can be allocated if the
+     * returned RU size is greater than 26 tones
+     * @param mc the modulation class of the PPDU
+     * @return the RU type
+     */
+    static RuType GetEqualSizedRusForStations(MHz_u bandwidth,
+                                              std::size_t& nStations,
+                                              std::size_t& nCentral26TonesRus,
+                                              WifiModulationClass mc);
+
+    /**
+     * Find the RU allocation of the given RU type overlapping the given
+     * reference RU allocation.
+     *
+     * @param bw the bandwidth of the PPDU
+     * @param referenceRu the reference RU allocation
+     * @param searchedRuType the searched RU type
+     * @return the searched RU allocation.
+     */
+    static RuSpec FindOverlappingRu(MHz_u bw, RuSpec referenceRu, RuType searchedRuType);
+
+    /**
+     * Get whether a given RU variant is a HE RU
+     *
+     * @param ru the RU variant
+     * @return true if the RU is a HE RU, false otherwise
+     */
+    static bool IsHe(RuSpec ru);
+
+    /**
+     * Get whether a given RU variant is a EHT RU
+     *
+     * @param ru the RU variant
+     * @return true if the RU is a EHT RU, false otherwise
+     */
+    static bool IsEht(RuSpec ru);
+
+    /**
+     * Get the maximum RU type supported by a given modulation class.
+     *
+     * @param mc the modulation class
+     * @return the RU type
+     */
+    static RuType GetMaxRuType(WifiModulationClass mc);
+};
+
+/**
+ * @brief Stream insertion operator.
+ *
+ * @param os the stream
+ * @param ru the RU variant
+ * @returns a reference to the stream
+ */
+std::ostream& operator<<(std::ostream& os, const WifiRu::RuSpec& ru);
+
+} // namespace ns3
+
+#endif /* WIFI_RU_H */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/wifi-spectrum-phy-interface.cc ns-3.45/src/wifi/model/wifi-spectrum-phy-interface.cc
--- ns-3.44/src/wifi/model/wifi-spectrum-phy-interface.cc	2025-03-09 16:55:49.803372600 -0700
+++ ns-3.45/src/wifi/model/wifi-spectrum-phy-interface.cc	2025-06-01 20:34:45.631702200 -0700
@@ -36,7 +36,7 @@
       m_centerFrequencies{},
       m_channelWidth{0},
       m_bands{},
-      m_heRuBands{}
+      m_ruBands{}
 {
     NS_LOG_FUNCTION(this << freqRange);
 }
@@ -50,7 +50,7 @@
     m_netDevice = nullptr;
     m_channel = nullptr;
     m_bands.clear();
-    m_heRuBands.clear();
+    m_ruBands.clear();
 }
 
 void
@@ -166,15 +166,15 @@
 }
 
 void
-WifiSpectrumPhyInterface::SetHeRuBands(HeRuBands&& heRuBands)
+WifiSpectrumPhyInterface::SetRuBands(RuBands&& ruBands)
 {
-    m_heRuBands = std::move(heRuBands);
+    m_ruBands = std::move(ruBands);
 }
 
-const HeRuBands&
-WifiSpectrumPhyInterface::GetHeRuBands() const
+const RuBands&
+WifiSpectrumPhyInterface::GetRuBands() const
 {
-    return m_heRuBands;
+    return m_ruBands;
 }
 
 void
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/wifi-spectrum-phy-interface.h ns-3.45/src/wifi/model/wifi-spectrum-phy-interface.h
--- ns-3.44/src/wifi/model/wifi-spectrum-phy-interface.h	2025-03-09 16:55:49.803372600 -0700
+++ ns-3.45/src/wifi/model/wifi-spectrum-phy-interface.h	2025-06-01 20:34:45.631702200 -0700
@@ -132,17 +132,17 @@
     const WifiSpectrumBands& GetBands() const;
 
     /**
-     * Set the HE RU spectrum bands handled by this interface (if any)
+     * Set the RU spectrum bands handled by this interface (if any)
      *
-     * @param heRuBands the HE RU spectrum bands
+     * @param ruBands the RU spectrum bands
      */
-    void SetHeRuBands(HeRuBands&& heRuBands);
+    void SetRuBands(RuBands&& ruBands);
     /**
-     * Get the HE RU spectrum bands handled by this interface
+     * Get the RU spectrum bands handled by this interface
      *
-     * @return the HE RU spectrum bands
+     * @return the RU spectrum bands
      */
-    const HeRuBands& GetHeRuBands() const;
+    const RuBands& GetRuBands() const;
 
   private:
     void DoDispose() override;
@@ -157,7 +157,7 @@
 
     WifiSpectrumBands
         m_bands; /**< Store all the distinct spectrum bands associated with every channels widths */
-    HeRuBands m_heRuBands; /**< Store all the distinct spectrum bands associated with every RU */
+    RuBands m_ruBands; /**< Store all the distinct spectrum bands associated with every RU */
 };
 
 } // namespace ns3
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/wifi-spectrum-value-helper.cc ns-3.45/src/wifi/model/wifi-spectrum-value-helper.cc
--- ns-3.44/src/wifi/model/wifi-spectrum-value-helper.cc	2025-03-09 16:55:49.803372600 -0700
+++ ns-3.45/src/wifi/model/wifi-spectrum-value-helper.cc	2025-06-01 20:34:45.631702200 -0700
@@ -489,6 +489,9 @@
     NS_ASSERT_MSG(
         centerFrequencies.size() == 1 || channelWidth == MHz_u{160},
         "PSD for non-contiguous channels is only possible when the total width is 160 MHz");
+    NS_ASSERT_MSG(
+        (channelWidth != 160) || (centerFrequencies.size() <= 2),
+        "It is not possible to create a PSD made of more than 2 segments for a width of 160 MHz");
     NS_LOG_FUNCTION(printFrequencies(centerFrequencies)
                     << channelWidth << txPower << guardBandwidth << minInnerBand << minOuterBand
                     << lowestPoint);
@@ -511,14 +514,6 @@
                       (nAllocatedBands + nGuardBands + nUnallocatedBands + 1),
                   "Unexpected number of bands " << c->GetSpectrumModel()->GetNumBands());
     Watt_u txPowerPerBand{0.0};
-    uint32_t start1;
-    uint32_t stop1;
-    uint32_t start2;
-    uint32_t stop2;
-    uint32_t start3;
-    uint32_t stop3;
-    uint32_t start4;
-    uint32_t stop4;
     // Prepare spectrum mask specific variables
     auto innerSlopeWidth =
         static_cast<uint32_t>((MHzToHz(MHz_u{1}) / carrierSpacing) +
@@ -526,6 +521,9 @@
     std::vector<std::vector<WifiSpectrumBandIndices>> subBandsPerSegment(
         centerFrequencies.size()); // list of data/pilot-containing subBands (sent at 0dBr)
     WifiSpectrumBandIndices maskBand(0, nAllocatedBands + nGuardBands + nUnallocatedBands);
+    std::size_t skippedSubbands{0};
+    std::size_t numAllocatedSubbands{0};
+    std::size_t numDc{0};
     switch (static_cast<uint16_t>(channelWidth))
     {
     case 20:
@@ -533,75 +531,62 @@
         txPowerPerBand = txPower / 242;
         innerSlopeWidth = static_cast<uint32_t>((Hz_u{5e5} / carrierSpacing) +
                                                 0.5); // [-10.25;-9.75] & [9.75;10.25]
-        // skip the guard band and 6 subbands, then place power in 121 subbands, then
-        // skip 3 DC, then place power in 121 subbands, then skip
-        // the final 5 subbands and the guard band.
-        start1 = (nGuardBands / 2) + 6;
-        stop1 = start1 + 121 - 1;
-        start2 = stop1 + 4;
-        stop2 = start2 + 121 - 1;
-        subBandsPerSegment.at(0).emplace_back(start1, stop1);
-        subBandsPerSegment.at(0).emplace_back(start2, stop2);
+        skippedSubbands = 6;
+        numAllocatedSubbands = 121;
+        numDc = 3;
         break;
     case 40:
         // 484 subcarriers (468 data + 16 pilot)
         txPowerPerBand = txPower / 484;
-        // skip the guard band and 12 subbands, then place power in 242 subbands, then
-        // skip 5 DC, then place power in 242 subbands, then skip
-        // the final 11 subbands and the guard band.
-        start1 = (nGuardBands / 2) + 12;
-        stop1 = start1 + 242 - 1;
-        start2 = stop1 + 6;
-        stop2 = start2 + 242 - 1;
-        subBandsPerSegment.at(0).emplace_back(start1, stop1);
-        subBandsPerSegment.at(0).emplace_back(start2, stop2);
+        skippedSubbands = 12;
+        numAllocatedSubbands = 242;
+        numDc = 5;
         break;
     case 80:
-        // 996 subcarriers (980 data + 16 pilot)
-        txPowerPerBand = txPower / 996;
-        // skip the guard band and 12 subbands, then place power in 498 subbands, then
-        // skip 5 DC, then place power in 498 subbands, then skip
-        // the final 11 subbands and the guard band.
-        start1 = (nGuardBands / 2) + 12;
-        stop1 = start1 + 498 - 1;
-        start2 = stop1 + 6;
-        stop2 = start2 + 498 - 1;
-        subBandsPerSegment.at(0).emplace_back(start1, stop1);
-        subBandsPerSegment.at(0).emplace_back(start2, stop2);
-        break;
-    case 160: {
-        NS_ASSERT_MSG(centerFrequencies.size() <= 2,
-                      "It is not possible to create a PSD made of more than 2 segments for a width "
-                      "of 160 MHz");
-        // 2 x 996 subcarriers (2 x 80 MHZ bands)
-        txPowerPerBand = txPower / (2 * 996);
-        start1 = (nGuardBands / 2) + 12;
-        stop1 = start1 + 498 - 1;
-        start2 = stop1 + 6;
-        stop2 = start2 + 498 - 1;
-        start3 = stop2 + (2 * 12) + nUnallocatedBands;
-        stop3 = start3 + 498 - 1;
-        start4 = stop3 + 6;
-        stop4 = start4 + 498 - 1;
-        subBandsPerSegment.at(0).emplace_back(start1, stop1);
-        subBandsPerSegment.at(0).emplace_back(start2, stop2);
-        subBandsPerSegment.at(subBandsPerSegment.size() - 1).emplace_back(start3, stop3);
-        subBandsPerSegment.at(subBandsPerSegment.size() - 1).emplace_back(start4, stop4);
+    case 160: // 2 x 80 MHz
+    case 320: // 4 x 80 MHz
+        // 996 subcarriers (980 data + 16 pilot) per 80 MHz band
+        txPowerPerBand = txPower / (996 * (channelWidth / 80));
+        skippedSubbands = 12;
+        numAllocatedSubbands = 498;
+        numDc = 5;
         break;
-    }
     default:
         NS_FATAL_ERROR("ChannelWidth " << channelWidth << " unsupported");
         break;
     }
 
+    // skip the guard band and skipped subbands, then place power in allocated subbands, then skip
+    // DC subbands, then place power in allocated subbands, then skip the final 11 subbands and the
+    // guard band.
+    auto start = (nGuardBands / 2) + skippedSubbands;
+    auto stop = start + numAllocatedSubbands - 1;
+    subBandsPerSegment.at(0).emplace_back(start, stop);
+    start = stop + numDc + 1;
+    stop = start + numAllocatedSubbands - 1;
+    subBandsPerSegment.at(0).emplace_back(start, stop);
+    if (channelWidth >= 160)
+    {
+        for (std::size_t i = 1; i < (channelWidth / 80); ++i)
+        {
+            start = subBandsPerSegment.front().back().second + (2 * skippedSubbands) +
+                    nUnallocatedBands;
+            auto stop = start + numAllocatedSubbands - 1;
+            subBandsPerSegment.back().emplace_back(start, stop);
+            start = stop + numDc + 1;
+            stop = start + numAllocatedSubbands - 1;
+            subBandsPerSegment.back().emplace_back(start, stop);
+        }
+    }
+
     // Create punctured bands
     auto puncturedSlopeWidth =
         static_cast<uint32_t>((Hz_u{500e3} / carrierSpacing) +
                               0.5); // size in number of subcarriers of the punctured slope band
     std::vector<std::vector<WifiSpectrumBandIndices>> puncturedBandsPerSegment;
     std::size_t subcarriersPerSuband = (MHzToHz(MHz_u{20}) / carrierSpacing);
-    uint32_t start = (nGuardBands / 2);
-    uint32_t stop = start + subcarriersPerSuband - 1;
+    start = (nGuardBands / 2);
+    stop = start + subcarriersPerSuband - 1;
     if (!puncturedSubchannels.empty())
     {
         for (std::size_t i = 0; i < subBandsPerSegment.size(); ++i)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/wifi-spectrum-value-helper.h ns-3.45/src/wifi/model/wifi-spectrum-value-helper.h
--- ns-3.44/src/wifi/model/wifi-spectrum-value-helper.h	2025-03-09 16:55:49.803372600 -0700
+++ ns-3.45/src/wifi/model/wifi-spectrum-value-helper.h	2025-06-01 20:34:45.631702200 -0700
@@ -125,9 +125,8 @@
         const std::vector<bool>& puncturedSubchannels = {});
 
     /**
-     * Create a transmit power spectral density corresponding to OFDM
-     * High Throughput (HT) (802.11n/ac).  Channel width may vary between
-     * 20, 40, 80, and 160 MHz.
+     * Create a transmit power spectral density corresponding to OFDM High Throughput (HT/VHT)
+     * (802.11n/ac). Channel width may vary between 20, 40, 80, and 160 MHz.
      *
      * @param centerFrequencies center frequency per segment
      * @param channelWidth total allocated channel width over all segments
@@ -149,9 +148,9 @@
         dBr_u lowestPoint = dBr_u{-40});
 
     /**
-     * Create a transmit power spectral density corresponding to OFDM
-     * High Efficiency (HE) (802.11ax) for contiguous channels.
-     * Channel width may vary between 20, 40, 80, and 160 MHz.
+     * Create a transmit power spectral density corresponding to OFDM High Efficiency (HE/EHT)
+     * (802.11ax/be) for contiguous channels. Channel width may vary between 20, 40, 80, 160 and 320
+     * MHz.
      *
      * @param centerFrequency center frequency
      * @param channelWidth channel width
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/wifi-tx-vector.cc ns-3.45/src/wifi/model/wifi-tx-vector.cc
--- ns-3.44/src/wifi/model/wifi-tx-vector.cc	2025-03-09 16:55:49.803372600 -0700
+++ ns-3.45/src/wifi/model/wifi-tx-vector.cc	2025-06-01 20:34:45.632702400 -0700
@@ -75,6 +75,7 @@
       m_triggerResponding(triggerResponding),
       m_modeInitialized(true),
       m_inactiveSubchannels(),
+      m_sigBMcs(EhtPhy::GetVhtMcs(0)),
       m_ruAllocation(),
       m_center26ToneRuIndication(std::nullopt),
       m_ehtPpduType(1) // SU transmission by default
@@ -282,6 +283,9 @@
 {
     NS_ABORT_MSG_IF(!IsMu(), "Not a MU transmission");
     NS_ABORT_MSG_IF(staId > 2048, "STA-ID should be correctly set for MU");
+    NS_ASSERT_MSG(m_muUserInfos.empty() || (mode.GetModulationClass() == GetModulationClass()),
+                  "Cannot add mode " << mode << " because the modulation class is "
+                                     << GetModulationClass());
     m_muUserInfos[staId].mcs = mode.GetMcsValue();
     m_modeInitialized = true;
 }
@@ -480,6 +484,17 @@
             }
         }
     }
+    else if (m_channelWidth > 160)
+    {
+        if ((GetModulationClass() < WIFI_MOD_CLASS_EHT) && !IsNonHtDuplicate())
+        {
+            return false;
+        }
+        if ((band == WIFI_PHY_BAND_2_4GHZ) || (band == WIFI_PHY_BAND_5GHZ))
+        {
+            return false;
+        }
+    }
     for (const auto& userInfo : m_muUserInfos)
     {
         if (GetNumStasInRu(userInfo.second.ru) > 8)
@@ -487,7 +502,7 @@
             return false;
         }
     }
-    std::map<HeRu::RuSpec, uint8_t> streamsPerRu{};
+    std::map<WifiRu::RuSpec, uint8_t> streamsPerRu{};
     for (const auto& info : m_muUserInfos)
     {
         auto it = streamsPerRu.find(info.second.ru);
@@ -553,7 +568,7 @@
     {
         return true;
     }
-    std::set<HeRu::RuSpec> rus{};
+    std::set<WifiRu::RuSpec> rus{};
     for (const auto& userInfo : m_muUserInfos)
     {
         rus.insert(userInfo.second.ru);
@@ -585,20 +600,14 @@
 }
 
 uint8_t
-WifiTxVector::GetNumStasInRu(const HeRu::RuSpec& ru) const
+WifiTxVector::GetNumStasInRu(const WifiRu::RuSpec& ru) const
 {
     return std::count_if(m_muUserInfos.cbegin(),
                          m_muUserInfos.cend(),
                          [&ru](const auto& info) -> bool { return (ru == info.second.ru); });
 }
 
-bool
-WifiTxVector::IsAllocated(uint16_t staId) const
-{
-    return m_muUserInfos.contains(staId);
-}
-
-HeRu::RuSpec
+WifiRu::RuSpec
 WifiTxVector::GetRu(uint16_t staId) const
 {
     NS_ABORT_MSG_IF(!IsMu(), "RU only available for MU");
@@ -607,7 +616,7 @@
 }
 
 void
-WifiTxVector::SetRu(HeRu::RuSpec ru, uint16_t staId)
+WifiTxVector::SetRu(WifiRu::RuSpec ru, uint16_t staId)
 {
     NS_ABORT_MSG_IF(!IsMu(), "RU only available for MU");
     NS_ABORT_MSG_IF(staId > 2048, "STA-ID should be correctly set for MU");
@@ -649,7 +658,13 @@
 bool
 WifiTxVector::IsSigBCompression() const
 {
-    return IsDlMuMimo() && !IsDlOfdma();
+    // SIG-B compression is used in case of full-bandwidth MU-MIMO transmission (27.3.11.8.2
+    // HE-SIG-B content channels in IEEE802.11ax-2021) or if a single RU occupies the whole 160 MHz
+    // bandwidth (27.3.11.8.3 Common field in IEEE802.11ax-2021)
+    return (IsDlMuMimo() && !IsDlOfdma()) ||
+           ((m_muUserInfos.size() == 1) && (m_channelWidth >= MHz_u{160}) &&
+            (WifiRu::GetRuType(m_muUserInfos.cbegin()->second.ru) ==
+             WifiRu::GetRuType(m_channelWidth)));
 }
 
 void
@@ -676,6 +691,7 @@
 void
 WifiTxVector::SetCenter26ToneRuIndication(Center26ToneRuIndication center26ToneRuIndication)
 {
+    NS_ASSERT(GetModulationClass() == WIFI_MOD_CLASS_HE);
     if (IsDlMu())
     {
         NS_ASSERT(center26ToneRuIndication == DeriveCenter26ToneRuIndication());
@@ -686,7 +702,7 @@
 std::optional<Center26ToneRuIndication>
 WifiTxVector::GetCenter26ToneRuIndication() const
 {
-    if (!IsDlMu() || (m_channelWidth < MHz_u{80}))
+    if ((GetModulationClass() != WIFI_MOD_CLASS_HE) || !IsDlMu() || (m_channelWidth < MHz_u{80}))
     {
         return std::nullopt;
     }
@@ -766,7 +782,7 @@
 WifiTxVector::UserInfoMapOrderedByRus
 WifiTxVector::GetUserInfoMapOrderedByRus(uint8_t p20Index) const
 {
-    auto heRuComparator = HeRu::RuSpecCompare(m_channelWidth, p20Index);
+    auto heRuComparator = WifiRu::RuSpecCompare(m_channelWidth, p20Index);
     UserInfoMapOrderedByRus orderedMap{heRuComparator};
     for (const auto& userInfo : m_muUserInfos)
     {
@@ -777,7 +793,7 @@
         }
         else
         {
-            orderedMap.emplace(userInfo.second.ru, std::set<uint16_t>{userInfo.first});
+            orderedMap.emplace(ru, std::set<uint16_t>{userInfo.first});
         }
     }
     return orderedMap;
@@ -786,64 +802,83 @@
 RuAllocation
 WifiTxVector::DeriveRuAllocation(uint8_t p20Index) const
 {
-    RuAllocation ruAllocations(Count20MHzSubchannels(m_channelWidth), HeRu::EMPTY_242_TONE_RU);
-    std::vector<HeRu::RuType> ruTypes{};
+    const auto mc = GetModulationClass();
+    const auto emptyRu =
+        (mc == WIFI_MOD_CLASS_HE) ? EMPTY_242_TONE_HE_RU : UNASSIGNED_242_TONE_EHT_RU;
+    RuAllocation ruAllocations(Count20MHzSubchannels(m_channelWidth), emptyRu);
+    std::vector<RuType> ruTypes{};
     ruTypes.resize(ruAllocations.size());
     const auto& orderedMap = GetUserInfoMapOrderedByRus(p20Index);
+    std::pair<std::size_t /* number of RUs in content channel 1 */,
+              std::size_t /* number of RUs in content channel 2 */>
+        ccSizes{0, 0};
     for (const auto& [ru, staIds] : orderedMap)
     {
-        const auto ruType = ru.GetRuType();
-        const auto ruBw = HeRu::GetBandwidth(ruType);
-        const auto isPrimary80MHz = ru.GetPrimary80MHz();
-        const auto rusPerSubchannel =
-            HeRu::GetRusOfType(ruBw > MHz_u{20} ? ruBw : MHz_u{20}, ruType);
-        auto ruIndex = ru.GetIndex();
-        if ((m_channelWidth >= MHz_u{80}) && (ruIndex > 19))
+        const auto ruType = WifiRu::GetRuType(ru);
+        auto ruIndex = WifiRu::GetPhyIndex(ru, m_channelWidth, p20Index);
+        if ((ruType == RuType::RU_26_TONE) && (ruIndex == 19))
         {
-            // take into account the center 26-tone RU in the primary 80 MHz
-            ruIndex--;
+            continue;
         }
-        if ((!isPrimary80MHz) && (ruIndex > 19))
+        const auto ruBw = WifiRu::GetBandwidth(ruType);
+        const auto rusPerSubchannel =
+            WifiRu::GetRusOfType(ruBw > MHz_u{20} ? ruBw : MHz_u{20}, ruType, mc);
+        if ((m_channelWidth >= MHz_u{80}) && (ruIndex > 19))
         {
-            // take into account the center 26-tone RU in the secondary 80 MHz
+            // "ignore" the center 26-tone RUs in 80 MHz channels
             ruIndex--;
-        }
-        if (!isPrimary80MHz && (ruType != HeRu::RU_2x996_TONE))
-        {
-            NS_ASSERT(m_channelWidth > MHz_u{80});
-            // adjust RU index for the secondary 80 MHz: in that case index is restarting at 1,
-            // hence we need to add an offset corresponding to the number of RUs of the same type in
-            // the primary 80 MHz
-            ruIndex += HeRu::GetRusOfType(MHz_u{80}, ruType).size();
+            if (ruIndex > 37)
+            {
+                ruIndex -= (ruIndex - 19) / 37;
+            }
         }
         const auto numSubchannelsForRu = (ruBw < MHz_u{20}) ? 1 : Count20MHzSubchannels(ruBw);
         const auto index = (ruBw < MHz_u{20}) ? ((ruIndex - 1) / rusPerSubchannel.size())
                                               : ((ruIndex - 1) * numSubchannelsForRu);
         NS_ABORT_IF(index >= Count20MHzSubchannels(m_channelWidth));
-        auto ruAlloc = HeRu::GetEqualizedRuAllocation(ruType, false);
-        if (ruAllocations.at(index) != HeRu::EMPTY_242_TONE_RU)
+        auto ruAlloc = WifiRu::GetEqualizedRuAllocation(ruType, false, true, mc);
+        if (ruAllocations.at(index) != emptyRu)
         {
             if (ruType == ruTypes.at(index))
             {
                 continue;
             }
-            if (ruType == HeRu::RU_26_TONE)
+            if (ruType == RuType::RU_26_TONE)
             {
-                ruAlloc = HeRu::GetEqualizedRuAllocation(ruTypes.at(index), true);
+                ruAlloc = WifiRu::GetEqualizedRuAllocation(ruTypes.at(index), true, true, mc);
             }
-            else if (ruTypes.at(index) == HeRu::RU_26_TONE)
+            else if (ruTypes.at(index) == RuType::RU_26_TONE)
             {
-                ruAlloc = HeRu::GetEqualizedRuAllocation(ruType, true);
+                ruAlloc = WifiRu::GetEqualizedRuAllocation(ruType, true, true, mc);
             }
             else
             {
                 NS_ASSERT_MSG(false, "unsupported RU combination");
             }
         }
+        std::size_t ccIndex;
+        if (ruType >= RuType::RU_484_TONE)
+        {
+            ccIndex = (ccSizes.first <= ccSizes.second) ? 0 : 1;
+        }
+        else
+        {
+            ccIndex = (index % 2 == 0) ? 0 : 1;
+        }
+        if (ccIndex == 0)
+        {
+            ccSizes.first += staIds.size();
+        }
+        else
+        {
+            ccSizes.second += staIds.size();
+        }
         for (std::size_t i = 0; i < numSubchannelsForRu; ++i)
         {
+            auto ruAllocNoUsers = WifiRu::GetEqualizedRuAllocation(ruType, false, false, mc);
             ruTypes.at(index + i) = ruType;
-            ruAllocations.at(index + i) = ruAlloc;
+            ruAllocations.at(index + i) =
+                (IsSigBCompression() || ((index + i) % 2) == ccIndex) ? ruAlloc : ruAllocNoUsers;
         }
     }
     return ruAllocations;
@@ -855,12 +890,14 @@
     uint8_t center26ToneRuIndication{0};
     for (const auto& userInfo : m_muUserInfos)
     {
-        if ((userInfo.second.ru.GetRuType() == HeRu::RU_26_TONE) &&
-            (userInfo.second.ru.GetIndex() == 19))
-        {
-            center26ToneRuIndication |= (userInfo.second.ru.GetPrimary80MHz())
-                                            ? CENTER_26_TONE_RU_LOW_80_MHZ_ALLOCATED
-                                            : CENTER_26_TONE_RU_HIGH_80_MHZ_ALLOCATED;
+        NS_ASSERT(WifiRu::IsHe(userInfo.second.ru));
+        if ((WifiRu::GetRuType(userInfo.second.ru) == RuType::RU_26_TONE) &&
+            (WifiRu::GetIndex(userInfo.second.ru) == 19))
+        {
+            center26ToneRuIndication |=
+                (std::get<HeRu::RuSpec>(userInfo.second.ru).GetPrimary80MHz())
+                    ? CENTER_26_TONE_RU_LOW_80_MHZ_ALLOCATED
+                    : CENTER_26_TONE_RU_HIGH_80_MHZ_ALLOCATED;
         }
     }
     return static_cast<Center26ToneRuIndication>(center26ToneRuIndication);
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/wifi-tx-vector.h ns-3.45/src/wifi/model/wifi-tx-vector.h
--- ns-3.44/src/wifi/model/wifi-tx-vector.h	2025-03-09 16:55:49.803372600 -0700
+++ ns-3.45/src/wifi/model/wifi-tx-vector.h	2025-06-01 20:34:45.632702400 -0700
@@ -13,8 +13,8 @@
 #include "wifi-mode.h"
 #include "wifi-phy-band.h"
 #include "wifi-phy-common.h"
+#include "wifi-ru.h"
 
-#include "ns3/he-ru.h"
 #include "ns3/nstime.h"
 
 #include <list>
@@ -25,15 +25,12 @@
 namespace ns3
 {
 
-/// STA_ID for a RU that is intended for no user (Section 26.11.1 802.11ax-2021)
-static constexpr uint16_t NO_USER_STA_ID = 2046;
-
 /// HE MU specific user transmission parameters.
 struct HeMuUserInfo
 {
-    HeRu::RuSpec ru; ///< RU specification
-    uint8_t mcs;     ///< MCS index
-    uint8_t nss;     ///< number of spatial streams
+    WifiRu::RuSpec ru; ///< RU specification
+    uint8_t mcs;       ///< MCS index
+    uint8_t nss;       ///< number of spatial streams
 
     /**
      * Compare this user info to the given user info.
@@ -381,19 +378,13 @@
      */
     bool IsDlMuMimo() const;
     /**
-     * Check if STA ID is allocated
-     * @param staId STA ID
-     * @return true if allocated, false otherwise
-     */
-    bool IsAllocated(uint16_t staId) const;
-    /**
      * Get the RU specification for the STA-ID.
      * This is applicable only for MU.
      *
      * @param staId the station ID
      * @return the RU specification for the STA-ID
      */
-    HeRu::RuSpec GetRu(uint16_t staId) const;
+    WifiRu::RuSpec GetRu(uint16_t staId) const;
     /**
      * Set the RU specification for the STA-ID.
      * This is applicable only for MU.
@@ -401,7 +392,7 @@
      * @param ru the RU specification
      * @param staId the station ID
      */
-    void SetRu(HeRu::RuSpec ru, uint16_t staId);
+    void SetRu(WifiRu::RuSpec ru, uint16_t staId);
     /**
      * Get the HE MU user-specific transmission information for the given STA-ID.
      * This is applicable only for HE MU.
@@ -434,7 +425,8 @@
     HeMuUserInfoMap& GetHeMuUserInfoMap();
 
     /// map of specific user info parameters ordered per increasing frequency RUs
-    using UserInfoMapOrderedByRus = std::map<HeRu::RuSpec, std::set<uint16_t>, HeRu::RuSpecCompare>;
+    using UserInfoMapOrderedByRus =
+        std::map<WifiRu::RuSpec, std::set<uint16_t>, WifiRu::RuSpecCompare>;
 
     /**
      * Get the map of specific user info parameters ordered per increasing frequency RUs.
@@ -546,7 +538,7 @@
      * @param ru the RU specification
      * @return the number of STAs in the RU
      */
-    uint8_t GetNumStasInRu(const HeRu::RuSpec& ru) const;
+    uint8_t GetNumStasInRu(const WifiRu::RuSpec& ru) const;
 
     WifiMode m_mode;          /**< The DATARATE parameter in Table 15-4.
                               It is the value that will be passed
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/wifi-types.h ns-3.45/src/wifi/model/wifi-types.h
--- ns-3.44/src/wifi/model/wifi-types.h	2025-03-09 16:55:49.803372600 -0700
+++ ns-3.45/src/wifi/model/wifi-types.h	2025-06-01 20:34:45.632702400 -0700
@@ -11,6 +11,12 @@
 
 #include "wifi-units.h"
 
+#include "ns3/fatal-error.h"
+
+#include <compare>
+#include <map>
+#include <ostream>
+
 namespace ns3
 {
 
@@ -29,6 +35,7 @@
     CW_80MHZ,
     CW_160MHZ,
     CW_80_PLUS_80MHZ,
+    CW_320MHZ,
     CW_2160MHZ,
     MAX,
 };
@@ -85,6 +92,76 @@
     CH_80211P
 };
 
+/**
+ * The different Resource Unit (RU) types.
+ */
+enum class RuType : uint8_t
+{
+    RU_26_TONE = 0,
+    RU_52_TONE,
+    RU_106_TONE,
+    RU_242_TONE,
+    RU_484_TONE,
+    RU_996_TONE,
+    RU_2x996_TONE,
+    RU_4x996_TONE,
+    RU_TYPE_MAX
+};
+
+/**
+ * @brief Stream insertion operator.
+ *
+ * @param os the stream
+ * @param ruType the RU type
+ * @returns a reference to the stream
+ */
+inline std::ostream&
+operator<<(std::ostream& os, const RuType& ruType)
+{
+    switch (ruType)
+    {
+    case RuType::RU_26_TONE:
+        os << "26-tones";
+        break;
+    case RuType::RU_52_TONE:
+        os << "52-tones";
+        break;
+    case RuType::RU_106_TONE:
+        os << "106-tones";
+        break;
+    case RuType::RU_242_TONE:
+        os << "242-tones";
+        break;
+    case RuType::RU_484_TONE:
+        os << "484-tones";
+        break;
+    case RuType::RU_996_TONE:
+        os << "996-tones";
+        break;
+    case RuType::RU_2x996_TONE:
+        os << "2x996-tones";
+        break;
+    case RuType::RU_4x996_TONE:
+        os << "4x996-tones";
+        break;
+    default:
+        NS_FATAL_ERROR("Unknown RU type");
+    }
+    return os;
+}
+
+/// (lowest index, highest index) pair defining a subcarrier range
+using SubcarrierRange = std::pair<int16_t, int16_t>;
+
+/// a vector of subcarrier ranges defining a subcarrier group
+using SubcarrierGroup = std::vector<SubcarrierRange>;
+
+/// (bandwidth, number of tones) pair
+using BwTonesPair = std::pair<MHz_u, RuType>;
+
+/// map (bandwidth, number of tones) pairs to the group of subcarrier ranges
+using SubcarrierGroups = std::map<BwTonesPair, std::vector<SubcarrierGroup>>;
+
 } // namespace ns3
 
 #endif /* WIFI_TYPES_H */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/wifi-utils.cc ns-3.45/src/wifi/model/wifi-utils.cc
--- ns-3.44/src/wifi/model/wifi-utils.cc	2025-03-09 16:55:49.803372600 -0700
+++ ns-3.45/src/wifi/model/wifi-utils.cc	2025-06-01 20:34:45.632702400 -0700
@@ -13,6 +13,7 @@
 #include "gcr-manager.h"
 #include "wifi-mac-header.h"
 #include "wifi-mac-trailer.h"
+#include "wifi-tx-vector.h"
 
 #include "ns3/packet.h"
 
@@ -21,8 +22,6 @@
 namespace ns3
 {
 
-const Time WIFI_TU = MicroSeconds(WIFI_TU_US);
-
 double
 DbToRatio(dB_u val)
 {
@@ -77,12 +76,14 @@
 }
 
 uint32_t
-GetMuBarSize(std::list<BlockAckReqType> types)
+GetMuBarSize(TriggerFrameVariant variant, MHz_u bw, const std::list<BlockAckReqType>& types)
 {
     WifiMacHeader hdr;
     hdr.SetType(WIFI_MAC_CTL_TRIGGER);
     CtrlTriggerHeader trigger;
     trigger.SetType(TriggerFrameType::MU_BAR_TRIGGER);
+    trigger.SetVariant(variant);
+    trigger.SetUlBandwidth(bw);
     for (auto& t : types)
     {
         auto userInfo = trigger.AddUserInfoField();
@@ -109,6 +110,61 @@
     return size;
 }
 
+Time
+GetEstimatedAckTxTime(const WifiTxVector& txVector)
+{
+    auto modClass = txVector.GetModulationClass();
+
+    switch (modClass)
+    {
+    case WIFI_MOD_CLASS_DSSS:
+    case WIFI_MOD_CLASS_HR_DSSS:
+        if (txVector.GetMode().GetDataRate(txVector) == 1e6)
+        {
+            return MicroSeconds(304);
+        }
+        else if (txVector.GetPreambleType() == WIFI_PREAMBLE_LONG)
+        {
+            return MicroSeconds(248);
+        }
+        else
+        {
+            return MicroSeconds(152);
+        }
+        break;
+    case WIFI_MOD_CLASS_ERP_OFDM:
+    case WIFI_MOD_CLASS_OFDM:
+        if (auto constSize = txVector.GetMode().GetConstellationSize(); constSize == 2)
+        {
+            return MicroSeconds(44);
+        }
+        else if (constSize == 4)
+        {
+            return MicroSeconds(32);
+        }
+        else
+        {
+            return MicroSeconds(28);
+        }
+        break;
+    default: {
+        auto staId = (txVector.IsMu() ? txVector.GetHeMuUserInfoMap().begin()->first : SU_STA_ID);
+        if (const auto constSize = txVector.GetMode(staId).GetConstellationSize(); constSize == 2)
+        {
+            return MicroSeconds(68);
+        }
+        else if (constSize == 4)
+        {
+            return MicroSeconds(44);
+        }
+        else
+        {
+            return MicroSeconds(32);
+        }
+    }
+    }
+}
+
 bool
 IsInWindow(uint16_t seq, uint16_t winstart, uint16_t winsize)
 {
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/model/wifi-utils.h ns-3.45/src/wifi/model/wifi-utils.h
--- ns-3.44/src/wifi/model/wifi-utils.h	2025-03-09 16:55:49.807372600 -0700
+++ ns-3.45/src/wifi/model/wifi-utils.h	2025-06-01 20:34:45.632702400 -0700
@@ -10,10 +10,10 @@
 #define WIFI_UTILS_H
 
 #include "block-ack-type.h"
+#include "wifi-constants.h"
 #include "wifi-types.h"
 
 #include "ns3/fatal-error.h"
-#include "ns3/nstime.h"
 #include "ns3/ptr.h"
 
 #include <list>
@@ -27,6 +27,9 @@
 class WifiMacHeader;
 class Packet;
 class WifiMac;
+class WifiTxVector;
+
+enum class TriggerFrameVariant : uint8_t;
 
 /**
  * Wifi direction. Values are those defined for the TID-to-Link Mapping Control Direction
@@ -179,10 +182,14 @@
 /**
  * Return the total MU-BAR size (including FCS trailer).
  *
+ * @param variant the Common Info field variant of the MU-BAR
+ * @param bw the bandwidth over which the MU-BAR is transmitted
  * @param types the list of Block Ack Request types of the individual BARs
  * @return the total MU-BAR size in bytes
  */
-uint32_t GetMuBarSize(std::list<BlockAckReqType> types);
+uint32_t GetMuBarSize(TriggerFrameVariant variant,
+                      MHz_u bw,
+                      const std::list<BlockAckReqType>& types);
 /**
  * Return the total RTS size (including FCS trailer).
  *
@@ -195,6 +202,13 @@
  * @return the total CTS size in bytes
  */
 uint32_t GetCtsSize();
+
+/**
+ * @param txVector the TXVECTOR used to transmit a frame whose reception failed
+ * @return the estimated Ack TX time, based on Table 10-8 of IEEE 802.11REVme D7.0
+ */
+Time GetEstimatedAckTxTime(const WifiTxVector& txVector);
+
 /**
  * @param seq MPDU sequence number
  * @param winstart sequence number window start
@@ -261,12 +275,6 @@
  */
 Mac48Address GetIndividuallyAddressedRecipient(Ptr<WifiMac> mac, const WifiMacHeader& hdr);
 
-/// Size of the space of sequence numbers
-static constexpr uint16_t SEQNO_SPACE_SIZE = 4096;
-
-/// Size of the half the space of sequence numbers (used to determine old packets)
-static constexpr uint16_t SEQNO_SPACE_HALF_SIZE = SEQNO_SPACE_SIZE / 2;
-
 /// Link ID for single link operations (helps tracking places where correct link
 /// ID is to be used to support multi-link operations)
 static constexpr uint8_t SINGLE_LINK_OP_ID = 0;
@@ -277,13 +285,6 @@
 /// Invalid TID identifier
 static constexpr uint8_t WIFI_TID_UNDEFINED = 0xff;
 
-/// Wi-Fi Time Unit value in microseconds (see IEEE 802.11-2020 sec. 3.1)
-/// Used to initialize WIFI_TU
-constexpr int WIFI_TU_US = 1024;
-
-/// Wi-Fi Time Unit (see IEEE 802.11-2020 sec. 3.1)
-extern const Time WIFI_TU;
-
 } // namespace ns3
 
 #endif /* WIFI_UTILS_H */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/test/channel-access-manager-test.cc ns-3.45/src/wifi/test/channel-access-manager-test.cc
--- ns-3.44/src/wifi/test/channel-access-manager-test.cc	2025-03-09 16:55:49.807372600 -0700
+++ ns-3.45/src/wifi/test/channel-access-manager-test.cc	2025-06-01 20:34:45.633702300 -0700
@@ -395,12 +395,10 @@
      * @param at the event time
      * @param duration the duration
      * @param channelType the channel type
-     * @param per20MhzDurations vector that indicates for how long each 20 MHz subchannel is busy
      */
     void AddCcaBusyEvt(uint64_t at,
                        uint64_t duration,
-                       WifiChannelListType channelType = WIFI_CHANLIST_PRIMARY,
-                       const std::vector<Time>& per20MhzDurations = {});
+                       WifiChannelListType channelType = WIFI_CHANLIST_PRIMARY);
     /**
      * Add switching event function
      * @param at the event time
@@ -414,6 +412,25 @@
      */
     void AddRxStartEvt(uint64_t at, uint64_t duration);
 
+    /**
+     * Add a PHY disconnect event consisting in the PHY leaving the link and returning after a
+     * given time.
+     *
+     * @param at the event time
+     * @param duration the duration of the interval during which no PHY is connected
+     * @param threshold the value for the ResetBackoffThreshold attribute
+     * @param from the index of the Txop that has to request channel access when PHY is reconnected
+     */
+    void AddPhyDisconnectEvt(uint64_t at, uint64_t duration, uint64_t threshold, uint32_t from);
+
+    /**
+     * Add a PHY reconnect event consisting in another PHY operating on the link for the given time.
+     *
+     * @param at the event time
+     * @param duration the duration of the interval during which another PHY is connected
+     */
+    void AddPhyReconnectEvt(uint64_t at, uint64_t duration);
+
     typedef std::vector<Ptr<TxopTest<TxopType>>> TxopTests; //!< the TXOP tests typedef
 
     Ptr<FrameExchangeManagerStub<TxopType>> m_feManager;  //!< the Frame Exchange Manager stubbed
@@ -631,8 +648,8 @@
     m_phy = CreateObject<SpectrumWifiPhy>();
     m_phy->SetInterferenceHelper(CreateObject<InterferenceHelper>());
     m_phy->AddChannel(CreateObject<MultiModelSpectrumChannel>());
-    m_phy->SetOperatingChannel(WifiPhy::ChannelTuple{0, chWidth, WIFI_PHY_BAND_UNSPECIFIED, 0});
-    m_phy->ConfigureStandard(WIFI_STANDARD_80211ac); // required to use 160 MHz channels
+    m_phy->SetOperatingChannel(WifiPhy::ChannelTuple{0, chWidth, WIFI_PHY_BAND_6GHZ, 0});
+    m_phy->ConfigureStandard(WIFI_STANDARD_80211be); // required to use 320 MHz channels
     m_ChannelAccessManager->SetupPhyListener(m_phy);
 }
 
@@ -658,6 +675,12 @@
 {
     Simulator::Run();
 
+    m_ChannelAccessManager->RemovePhyListener(m_phy);
+    m_phy->Dispose();
+    m_ChannelAccessManager->Dispose();
+    m_ChannelAccessManager = nullptr;
+    m_feManager = nullptr;
+
     for (auto i = m_txop.begin(); i != m_txop.end(); i++)
     {
         Ptr<TxopTest<TxopType>> state = *i;
@@ -671,11 +694,6 @@
     }
     m_txop.clear();
 
-    m_ChannelAccessManager->RemovePhyListener(m_phy);
-    m_phy->Dispose();
-    m_ChannelAccessManager->Dispose();
-    m_ChannelAccessManager = nullptr;
-    m_feManager = nullptr;
     Simulator::Destroy();
 }
 
@@ -712,7 +730,21 @@
                         MicroSeconds(duration));
     Simulator::Schedule(MicroSeconds(at + duration) - Now(),
                         &ChannelAccessManager::NotifyRxEndErrorNow,
-                        m_ChannelAccessManager);
+                        m_ChannelAccessManager,
+                        WifiTxVector(OfdmPhy::GetOfdmRate6Mbps(),
+                                     1,
+                                     WIFI_PREAMBLE_LONG,
+                                     NanoSeconds(800),
+                                     1,
+                                     1,
+                                     0,
+                                     MHz_u{20},
+                                     false,
+                                     false,
+                                     false,
+                                     0,
+                                     0,
+                                     false));
 }
 
 template <typename TxopType>
@@ -727,7 +759,21 @@
                         MicroSeconds(duration));
     Simulator::Schedule(MicroSeconds(at + timeUntilError) - Now(),
                         &ChannelAccessManager::NotifyRxEndErrorNow,
-                        m_ChannelAccessManager);
+                        m_ChannelAccessManager,
+                        WifiTxVector(OfdmPhy::GetOfdmRate6Mbps(),
+                                     1,
+                                     WIFI_PREAMBLE_LONG,
+                                     NanoSeconds(800),
+                                     1,
+                                     1,
+                                     0,
+                                     MHz_u{20},
+                                     false,
+                                     false,
+                                     false,
+                                     0,
+                                     0,
+                                     false));
     Simulator::Schedule(MicroSeconds(at + timeUntilError) - Now(),
                         &ChannelAccessManager::NotifyCcaBusyStartNow,
                         m_ChannelAccessManager,
@@ -827,9 +873,10 @@
 void
 ChannelAccessManagerTest<TxopType>::AddCcaBusyEvt(uint64_t at,
                                                   uint64_t duration,
-                                                  WifiChannelListType channelType,
-                                                  const std::vector<Time>& per20MhzDurations)
+                                                  WifiChannelListType channelType)
 {
+    const auto chWidth = m_phy->GetChannelWidth();
+    std::vector<Time> per20MhzDurations(chWidth == 20 ? 0 : chWidth / 20, Seconds(0));
     Simulator::Schedule(MicroSeconds(at) - Now(),
                         &ChannelAccessManager::NotifyCcaBusyStartNow,
                         m_ChannelAccessManager,
@@ -859,6 +906,60 @@
                         MicroSeconds(duration));
 }
 
+template <typename TxopType>
+void
+ChannelAccessManagerTest<TxopType>::AddPhyDisconnectEvt(uint64_t at,
+                                                        uint64_t duration,
+                                                        uint64_t threshold,
+                                                        uint32_t from)
+{
+    m_ChannelAccessManager->SetAttribute("ResetBackoffThreshold",
+                                         TimeValue(MicroSeconds(threshold)));
+
+    Simulator::Schedule(MicroSeconds(at) - Now(),
+                        &ChannelAccessManager::RemovePhyListener,
+                        m_ChannelAccessManager,
+                        m_phy);
+
+    Simulator::Schedule(MicroSeconds(at + duration) - Now(), [=, this]() {
+        auto txop = m_txop[from];
+        auto hadFramesToTransmit = txop->HasFramesToTransmit(SINGLE_LINK_OP_ID);
+        m_ChannelAccessManager->SetupPhyListener(m_phy);
+        if (duration > threshold)
+        {
+            // request channel access again because all backoffs have been reset
+            if (m_ChannelAccessManager->NeedBackoffUponAccess(txop, hadFramesToTransmit, true))
+            {
+                txop->GenerateBackoff(0);
+            }
+            m_ChannelAccessManager->RequestAccess(txop);
+        }
+    });
+}
+
+template <typename TxopType>
+void
+ChannelAccessManagerTest<TxopType>::AddPhyReconnectEvt(uint64_t at, uint64_t duration)
+{
+    Simulator::Schedule(MicroSeconds(at) - Now(), [=, this]() {
+        auto newPhy = CreateObject<SpectrumWifiPhy>();
+        newPhy->SetInterferenceHelper(CreateObject<InterferenceHelper>());
+        newPhy->AddChannel(DynamicCast<SpectrumChannel>(m_phy->GetChannel()));
+        newPhy->SetOperatingChannel(m_phy->GetOperatingChannel());
+        newPhy->ConfigureStandard(WIFI_STANDARD_80211be);
+        // connect new PHY
+        m_ChannelAccessManager->SetupPhyListener(newPhy);
+
+        Simulator::Schedule(MicroSeconds(duration), [=, this]() {
+            // disconnect new PHY
+            m_ChannelAccessManager->RemovePhyListener(newPhy);
+            // reconnect previous PHY
+            m_ChannelAccessManager->SetupPhyListener(m_phy);
+            newPhy->Dispose();
+        });
+    });
+}
+
 /*
  * Specialization of DoRun () method for DCF
  */
@@ -1296,6 +1397,66 @@
     AddAccessRequest(82, 20, 84, 0);
     EndTest();
 
+    // Check alignment at slot boundary after failed reception (backoff = 0).
+    // Also, check that CCA BUSY on a secondary channel does not affect channel access:
+    //  20         50     56           66             76     96
+    //              |             cca_busy             |
+    //   |          | <------eifs------>|              |      |
+    //   |    rx    | sifs | acktxttime | sifs + aifsn |  tx  |
+    //                   |
+    //                  55 request access
+    StartTest(4, 6, 10, 20, MHz_u{320});
+    AddTxop(1);
+    AddRxErrorEvt(20, 30);
+    AddCcaBusyEvt(50, 26, WIFI_CHANLIST_SECONDARY);
+    AddAccessRequest(55, 20, 76, 0);
+    EndTest();
+
+    // Check alignment at slot boundary after failed reception (backoff = 0).
+    // Also, check that CCA BUSY on a secondary channel does not affect channel access:
+    //  20         50     56           66             76     96
+    //              |             cca_busy             |
+    //   |          | <------eifs------>|              |      |
+    //   |    rx    | sifs | acktxttime | sifs + aifsn |  tx  |
+    //                                        |
+    //                                       70 request access
+    StartTest(4, 6, 10, 20, MHz_u{320});
+    AddTxop(1);
+    AddRxErrorEvt(20, 30);
+    AddCcaBusyEvt(50, 26, WIFI_CHANLIST_SECONDARY40);
+    AddAccessRequest(70, 20, 76, 0);
+    EndTest();
+
+    // Check alignment at slot boundary after failed reception (backoff = 0).
+    // Also, check that CCA BUSY on a secondary channel does not affect channel access:
+    //  20         50     56           66             76     84
+    //              |             cca_busy                    |
+    //   |          | <------eifs------>|              |      |
+    //   |    rx    | sifs | acktxttime | sifs + aifsn | idle |  tx  |
+    //                                                     |
+    //                                                    82 request access
+    StartTest(4, 6, 10, 20, MHz_u{320});
+    AddTxop(1);
+    AddRxErrorEvt(20, 30);
+    AddCcaBusyEvt(50, 34, WIFI_CHANLIST_SECONDARY80);
+    AddAccessRequest(82, 20, 84, 0);
+    EndTest();
+
+    // Check alignment at slot boundary after failed reception (backoff = 0).
+    // Also, check that CCA BUSY on a secondary channel does not affect channel access:
+    //  20         50     56           66             76     84
+    //              |             cca_busy                    |
+    //   |          | <------eifs------>|              |      |
+    //   |    rx    | sifs | acktxttime | sifs + aifsn | idle |  tx  |
+    //                                                     |
+    //                                                    82 request access
+    StartTest(4, 6, 10, 20, MHz_u{320});
+    AddTxop(1);
+    AddRxErrorEvt(20, 30);
+    AddCcaBusyEvt(50, 34, WIFI_CHANLIST_SECONDARY160);
+    AddAccessRequest(82, 20, 84, 0);
+    EndTest();
+
     // Check backoff decrement at slot boundaries. Medium idle during backoff
     //  20           50     56      60         64         68         72         76     96
     //   |     rx     | sifs | aifsn |   idle   |   idle   |   idle   |   idle   |  tx  |
@@ -1310,13 +1471,11 @@
     EndTest();
 
     // Check backoff decrement at slot boundaries. Medium becomes busy during backoff
-    //  20           50     56      60     61     71     77      81         85     87     97    103
-    //  107    127
-    //   |     rx     | sifs | aifsn | idle |  rx  | sifs | aifsn |   idle   | idle |  rx  | sifs |
-    //   aifsn |  tx  |
-    //      |                        |                            |          |
-    //     30 request access.    decrement                    decrement  decrement
-    //        backoff slots: 3    slots: 2                     slots: 1   slots: 0
+    //  20     50     56      60     61   71     77      81     85     87     97    103     107  127
+    //   |  rx  | sifs | aifsn | idle | rx | sifs | aifsn | idle | idle |  rx  | sifs | aifsn | tx |
+    //      |                  |                          |      |
+    //   30 request access.  decrement                decrement  decrement
+    //    backoff slots: 3    slots: 2                 slots: 1   slots: 0
     StartTest(4, 6, 10);
     AddTxop(1);
     AddRxOkEvt(20, 30);
@@ -1325,6 +1484,49 @@
     AddAccessRequest(30, 20, 107, 0);
     ExpectBackoff(30, 3, 0);
     EndTest();
+
+    // Check backoff reset after no PHY operates on a link for more than the threshold.
+    //  20     50     56      60     61       71     77      81    101
+    //   |  rx  | sifs | aifsn | idle | no phy | sifs | aifsn |  tx  |
+    //      |                  |               |
+    //   30 request access.  decrement       reset
+    //    backoff slots: 3    slots: 2       backoff
+    StartTest(4, 6, 10);
+    AddTxop(1);
+    AddRxOkEvt(20, 30);
+    AddAccessRequest(30, 20, 81, 0);
+    ExpectBackoff(30, 3, 0);
+    AddPhyDisconnectEvt(61, 10, 0, 0);
+    EndTest();
+
+    // Check backoff freeze while no PHY operates on a link for less than the threshold.
+    //  20     50     56      60     61       71     77      81     85     89    109
+    //   |  rx  | sifs | aifsn | idle | no phy | sifs | aifsn | idle | idle |  tx  |
+    //      |                  |               |              |      |
+    //   30 request access.  decrement       resume      decrement  decrement
+    //    backoff slots: 3    slots: 2       backoff      slots: 1   slots: 0
+    StartTest(4, 6, 10);
+    AddTxop(1);
+    AddRxOkEvt(20, 30);
+    AddAccessRequest(30, 20, 89, 0);
+    ExpectBackoff(30, 3, 0);
+    AddPhyDisconnectEvt(61, 10, 20, 0);
+    EndTest();
+
+    // Check backoff left unmodified when previous PHY is reconnected to the link
+    //  20         50     56      60 61    64       68   71  72       76   96
+    //   |          |      |       |  |----- new PHY -----|   |        |    |
+    //   |    rx    | sifs | aifsn |  idle  |  idle  |  idle  |  idle  | tx |
+    //      |                      |        |        |        |
+    //   30 request access. decrement  decrement  decrement  decrement
+    //    backoff slots: 4   slots: 3   slots: 2   slots: 1   slots: 0
+    StartTest(4, 6, 10);
+    AddTxop(1);
+    AddRxOkEvt(20, 30);
+    AddAccessRequest(30, 20, 76, 0);
+    ExpectBackoff(30, 4, 0);
+    AddPhyReconnectEvt(61, 10);
+    EndTest();
 }
 
 /**
@@ -1496,7 +1698,7 @@
     uint8_t channel = 0;
     std::list<WifiChannelListType> busyChannels;
 
-    for (auto chWidth : {MHz_u{20}, MHz_u{40}, MHz_u{80}, MHz_u{160}})
+    for (auto chWidth : {MHz_u{20}, MHz_u{40}, MHz_u{80}, MHz_u{160}, MHz_u{320}})
     {
         busyChannels.push_back(static_cast<WifiChannelListType>(channel));
 
@@ -1514,8 +1716,8 @@
                 m_phy->SetInterferenceHelper(CreateObject<InterferenceHelper>());
                 m_phy->AddChannel(CreateObject<MultiModelSpectrumChannel>());
                 m_phy->SetOperatingChannel(
-                    WifiPhy::ChannelTuple{0, chWidth, WIFI_PHY_BAND_5GHZ, 0});
-                m_phy->ConfigureStandard(WIFI_STANDARD_80211ax);
+                    WifiPhy::ChannelTuple{0, chWidth, WIFI_PHY_BAND_6GHZ, 0});
+                m_phy->ConfigureStandard(WIFI_STANDARD_80211be);
                 // call SetupPhyListener to initialize the ChannelAccessManager
                 // last busy structs
                 m_cam->SetupPhyListener(m_phy);
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/test/examples-to-run.py ns-3.45/src/wifi/test/examples-to-run.py
--- ns-3.44/src/wifi/test/examples-to-run.py	2025-03-09 16:55:49.807372600 -0700
+++ ns-3.45/src/wifi/test/examples-to-run.py	2025-06-01 20:34:45.633702300 -0700
@@ -2139,6 +2139,16 @@
         "False",
     ),
     (
+        "wifi-manager-example --wifiManager=MinstrelHt --standard=802.11be-6GHz --serverChannelWidth=320 --clientChannelWidth=320 --serverShortGuardInterval=1600 --clientShortGuardInterval=1600 --serverNss=1 --clientNss=1 --stepTime=0.1",
+        "True",
+        "True",
+    ),
+    (
+        "wifi-manager-example --wifiManager=Ideal --standard=802.11be-6GHz --serverChannelWidth=320 --clientChannelWidth=320 --serverShortGuardInterval=1600 --clientShortGuardInterval=1600 --serverNss=1 --clientNss=1 --stepTime=0.1",
+        "True",
+        "True",
+    ),
+    (
         "wifi-test-interference-helper --enableCapture=0 --txPowerA=5 --txPowerB=15 --delay=10us --txModeA=OfdmRate6Mbps --txModeB=OfdmRate6Mbps --checkResults=1 --expectRxASuccessful=0 --expectRxBSuccessful=0",
         "True",
         "True",
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/test/inter-bss-test-suite.cc ns-3.45/src/wifi/test/inter-bss-test-suite.cc
--- ns-3.44/src/wifi/test/inter-bss-test-suite.cc	2025-03-09 16:55:49.807372600 -0700
+++ ns-3.45/src/wifi/test/inter-bss-test-suite.cc	2025-06-01 20:34:45.633702300 -0700
@@ -879,15 +879,15 @@
         Ptr<HeConfiguration> heConfiguration = device->GetHeConfiguration();
         if (i == 0)
         {
-            heConfiguration->SetAttribute("BssColor", UintegerValue(m_bssColor1));
+            heConfiguration->m_bssColor = m_bssColor1;
         }
         else if (i == 1)
         {
-            heConfiguration->SetAttribute("BssColor", UintegerValue(m_bssColor2));
+            heConfiguration->m_bssColor = m_bssColor2;
         }
         else
         {
-            heConfiguration->SetAttribute("BssColor", UintegerValue(m_bssColor3));
+            heConfiguration->m_bssColor = m_bssColor3;
         }
     }
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/test/spectrum-wifi-phy-test.cc ns-3.45/src/wifi/test/spectrum-wifi-phy-test.cc
--- ns-3.44/src/wifi/test/spectrum-wifi-phy-test.cc	2025-03-09 16:55:49.807372600 -0700
+++ ns-3.45/src/wifi/test/spectrum-wifi-phy-test.cc	2025-06-01 20:34:45.634702200 -0700
@@ -6,7 +6,8 @@
 
 #include "ns3/boolean.h"
 #include "ns3/constant-position-mobility-model.h"
-#include "ns3/he-phy.h" //includes OFDM PHY
+#include "ns3/eht-configuration.h"
+#include "ns3/eht-phy.h" //includes all previous PHYs
 #include "ns3/interference-helper.h"
 #include "ns3/log.h"
 #include "ns3/mobility-helper.h"
@@ -327,9 +328,9 @@
         ++m_notifyRxEndOk;
     }
 
-    void NotifyRxEndError() override
+    void NotifyRxEndError(const WifiTxVector& txVector) override
     {
-        NS_LOG_FUNCTION(this);
+        NS_LOG_FUNCTION(this << txVector);
         ++m_notifyRxEndError;
     }
 
@@ -508,9 +509,9 @@
 void
 SpectrumWifiPhyFilterTest::SendPpdu()
 {
-    WifiTxVector txVector{HePhy::GetHeMcs0(),
+    WifiTxVector txVector{EhtPhy::GetEhtMcs0(),
                           0,
-                          WIFI_PREAMBLE_HE_SU,
+                          WIFI_PREAMBLE_EHT_MU,
                           NanoSeconds(800),
                           1,
                           1,
@@ -549,10 +550,11 @@
     expectedNumBands += (m_rxChannelWidth / MHz_u{40});
     expectedNumBands += (m_rxChannelWidth / MHz_u{80});
     expectedNumBands += (m_rxChannelWidth / MHz_u{160});
+    expectedNumBands += (m_rxChannelWidth / MHz_u{320});
     expectedNumBands += m_rxPhy
-                            ->GetHeRuBands(m_rxPhy->GetCurrentInterface(),
-                                           m_rxPhy->GetGuardBandwidth(
-                                               m_rxPhy->GetCurrentInterface()->GetChannelWidth()))
+                            ->GetRuBands(m_rxPhy->GetCurrentInterface(),
+                                         m_rxPhy->GetGuardBandwidth(
+                                             m_rxPhy->GetCurrentInterface()->GetChannelWidth()))
                             .size();
 
     NS_TEST_ASSERT_MSG_EQ(numBands,
@@ -618,12 +620,15 @@
     m_txPhy->SetErrorRateModel(txErrorModel);
     m_txPhy->SetDevice(txDev);
     m_txPhy->AddChannel(spectrumChannel);
-    m_txPhy->ConfigureStandard(WIFI_STANDARD_80211ax);
+    m_txPhy->ConfigureStandard(WIFI_STANDARD_80211be);
+    txDev->SetStandard(WIFI_STANDARD_80211be);
     auto apMobility = CreateObject<ConstantPositionMobilityModel>();
     m_txPhy->SetMobility(apMobility);
     txDev->SetPhy(m_txPhy);
     txNode->AggregateObject(apMobility);
     txNode->AddDevice(txDev);
+    auto txEhtConfiguration = CreateObject<EhtConfiguration>();
+    txDev->SetEhtConfiguration(txEhtConfiguration);
 
     auto rxNode = CreateObject<Node>();
     auto rxDev = CreateObject<WifiNetDevice>();
@@ -632,13 +637,17 @@
     m_rxPhy->SetInterferenceHelper(rxInterferenceHelper);
     auto rxErrorModel = CreateObject<NistErrorRateModel>();
     m_rxPhy->SetErrorRateModel(rxErrorModel);
+    m_rxPhy->SetDevice(rxDev);
     m_rxPhy->AddChannel(spectrumChannel);
-    m_rxPhy->ConfigureStandard(WIFI_STANDARD_80211ax);
+    m_rxPhy->ConfigureStandard(WIFI_STANDARD_80211be);
+    rxDev->SetStandard(WIFI_STANDARD_80211be);
     auto sta1Mobility = CreateObject<ConstantPositionMobilityModel>();
     m_rxPhy->SetMobility(sta1Mobility);
     rxDev->SetPhy(m_rxPhy);
     rxNode->AggregateObject(sta1Mobility);
     rxNode->AddDevice(rxDev);
+    auto rxEhtConfiguration = CreateObject<EhtConfiguration>();
+    rxDev->SetEhtConfiguration(rxEhtConfiguration);
     m_rxPhy->TraceConnectWithoutContext("PhyRxBegin",
                                         MakeCallback(&SpectrumWifiPhyFilterTest::RxCallback, this));
 }
@@ -660,52 +669,58 @@
     {
     case 20:
     default:
-        txFrequency = MHz_u{5180};
+        txFrequency = MHz_u{5955};
         break;
     case 40:
-        txFrequency = MHz_u{5190};
+        txFrequency = MHz_u{5965};
         break;
     case 80:
-        txFrequency = MHz_u{5210};
+        txFrequency = MHz_u{5985};
         break;
     case 160:
-        txFrequency = MHz_u{5250};
+        txFrequency = MHz_u{6025};
+        break;
+    case 320:
+        txFrequency = MHz_u{6105};
         break;
     }
     auto txChannelNum = WifiPhyOperatingChannel::FindFirst(0,
                                                            txFrequency,
                                                            m_txChannelWidth,
-                                                           WIFI_STANDARD_80211ax,
-                                                           WIFI_PHY_BAND_5GHZ)
+                                                           WIFI_STANDARD_80211be,
+                                                           WIFI_PHY_BAND_6GHZ)
                             ->number;
     m_txPhy->SetOperatingChannel(
-        WifiPhy::ChannelTuple{txChannelNum, m_txChannelWidth, WIFI_PHY_BAND_5GHZ, 0});
+        WifiPhy::ChannelTuple{txChannelNum, m_txChannelWidth, WIFI_PHY_BAND_6GHZ, 0});
 
     MHz_u rxFrequency;
     switch (static_cast<uint16_t>(m_rxChannelWidth))
     {
     case 20:
     default:
-        rxFrequency = MHz_u{5180};
+        rxFrequency = MHz_u{5955};
         break;
     case 40:
-        rxFrequency = MHz_u{5190};
+        rxFrequency = MHz_u{5965};
         break;
     case 80:
-        rxFrequency = MHz_u{5210};
+        rxFrequency = MHz_u{5985};
         break;
     case 160:
-        rxFrequency = MHz_u{5250};
+        rxFrequency = MHz_u{6025};
+        break;
+    case 320:
+        rxFrequency = MHz_u{6105};
         break;
     }
     auto rxChannelNum = WifiPhyOperatingChannel::FindFirst(0,
                                                            rxFrequency,
                                                            m_rxChannelWidth,
-                                                           WIFI_STANDARD_80211ax,
-                                                           WIFI_PHY_BAND_5GHZ)
+                                                           WIFI_STANDARD_80211be,
+                                                           WIFI_PHY_BAND_6GHZ)
                             ->number;
     m_rxPhy->SetOperatingChannel(
-        WifiPhy::ChannelTuple{rxChannelNum, m_rxChannelWidth, WIFI_PHY_BAND_5GHZ, 0});
+        WifiPhy::ChannelTuple{rxChannelNum, m_rxChannelWidth, WIFI_PHY_BAND_6GHZ, 0});
 
     Simulator::Schedule(Seconds(1), &SpectrumWifiPhyFilterTest::SendPpdu, this);
 
@@ -715,69 +730,15 @@
 void
 SpectrumWifiPhyFilterTest::DoRun()
 {
-    m_txChannelWidth = MHz_u{20};
-    m_rxChannelWidth = MHz_u{20};
-    RunOne();
-
-    m_txChannelWidth = MHz_u{40};
-    m_rxChannelWidth = MHz_u{40};
-    RunOne();
-
-    m_txChannelWidth = MHz_u{80};
-    m_rxChannelWidth = MHz_u{80};
-    RunOne();
-
-    m_txChannelWidth = MHz_u{160};
-    m_rxChannelWidth = MHz_u{160};
-    RunOne();
-
-    m_txChannelWidth = MHz_u{20};
-    m_rxChannelWidth = MHz_u{40};
-    RunOne();
-
-    m_txChannelWidth = MHz_u{20};
-    m_rxChannelWidth = MHz_u{80};
-    RunOne();
-
-    m_txChannelWidth = MHz_u{40};
-    m_rxChannelWidth = MHz_u{80};
-    RunOne();
-
-    m_txChannelWidth = MHz_u{20};
-    m_rxChannelWidth = MHz_u{160};
-    RunOne();
-
-    m_txChannelWidth = MHz_u{40};
-    m_rxChannelWidth = MHz_u{160};
-    RunOne();
-
-    m_txChannelWidth = MHz_u{80};
-    m_rxChannelWidth = MHz_u{160};
-    RunOne();
-
-    m_txChannelWidth = MHz_u{40};
-    m_rxChannelWidth = MHz_u{20};
-    RunOne();
-
-    m_txChannelWidth = MHz_u{80};
-    m_rxChannelWidth = MHz_u{20};
-    RunOne();
-
-    m_txChannelWidth = MHz_u{80};
-    m_rxChannelWidth = MHz_u{40};
-    RunOne();
-
-    m_txChannelWidth = MHz_u{160};
-    m_rxChannelWidth = MHz_u{20};
-    RunOne();
-
-    m_txChannelWidth = MHz_u{160};
-    m_rxChannelWidth = MHz_u{40};
-    RunOne();
-
-    m_txChannelWidth = MHz_u{160};
-    m_rxChannelWidth = MHz_u{80};
-    RunOne();
+    for (const auto txBw : {MHz_u{20}, MHz_u{40}, MHz_u{80}, MHz_u{160}, MHz_u{320}})
+    {
+        for (const auto rxBw : {MHz_u{20}, MHz_u{40}, MHz_u{80}, MHz_u{160}, MHz_u{320}})
+        {
+            m_txChannelWidth = txBw;
+            m_rxChannelWidth = rxBw;
+            RunOne();
+        }
+    }
 
     Simulator::Destroy();
 }
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/test/tx-duration-test.cc ns-3.45/src/wifi/test/tx-duration-test.cc
--- ns-3.44/src/wifi/test/tx-duration-test.cc	2025-03-09 16:55:49.807372600 -0700
+++ ns-3.45/src/wifi/test/tx-duration-test.cc	2025-06-01 20:34:45.634702200 -0700
@@ -26,6 +26,35 @@
 
 NS_LOG_COMPONENT_DEFINE("TxDurationTest");
 
+namespace
+{
+/**
+ * Create an HE or an EHT RU Specification.
+ * If a primary80 is provided, an HE RU Specification is created, other it is an EHT RU
+ * Specification.
+ *
+ * @param ruType the RU type
+ * @param index the RU index (starting at 1)
+ * @param primaryOrLow80MHz whether the RU is allocated in the primary 80MHz channel or in the low
+ * 80 MHz if the RU is allocated in the secondary 160 MHz
+ * @param primary160MHz whether the RU is allocated in the primary 160MHz channel (only for EHT)
+ * @return the created RU Specification.
+ */
+WifiRu::RuSpec
+MakeRuSpec(RuType ruType,
+           std::size_t index,
+           bool primaryOrLow80MHz,
+           std::optional<bool> primary160MHz = std::nullopt)
+{
+    if (!primary160MHz)
+    {
+        return HeRu::RuSpec{ruType, index, primaryOrLow80MHz};
+    }
+    return EhtRu::RuSpec{ruType, index, *primary160MHz, primaryOrLow80MHz};
+}
+
+} // namespace
+
 /**
  * @ingroup wifi-test
  * @ingroup tests
@@ -41,8 +70,7 @@
 
   private:
     /**
-     * Check if the payload tx duration returned by InterferenceHelper
-     * corresponds to a known value
+     * Check if the payload tx duration returned by the PHY corresponds to a known value
      *
      * @param size size of payload in octets (includes everything after the PHY header)
      * @param payloadMode the WifiMode used for the transmission
@@ -61,8 +89,7 @@
                               Time knownDuration);
 
     /**
-     * Check if the overall tx duration returned by InterferenceHelper
-     * corresponds to a known value
+     * Check if the overall tx duration returned by the PHY corresponds to a known value
      *
      * @param size size of payload in octets (includes everything after the PHY header)
      * @param payloadMode the WifiMode used for the transmission
@@ -142,12 +169,9 @@
     txVector.SetPreambleType(preamble);
     txVector.SetChannelWidth(channelWidth);
     txVector.SetGuardInterval(guardInterval);
-    txVector.SetNss(1);
-    txVector.SetStbc(false);
-    txVector.SetNess(0);
     std::list<WifiPhyBand> testedBands;
     Ptr<YansWifiPhy> phy = CreateObject<YansWifiPhy>();
-    if (payloadMode.GetModulationClass() >= WIFI_MOD_CLASS_OFDM)
+    if ((payloadMode.GetModulationClass() >= WIFI_MOD_CLASS_OFDM) && (channelWidth <= 160))
     {
         testedBands.push_back(WIFI_PHY_BAND_5GHZ);
     }
@@ -155,7 +179,8 @@
     {
         testedBands.push_back(WIFI_PHY_BAND_6GHZ);
     }
-    if (payloadMode.GetModulationClass() != WIFI_MOD_CLASS_VHT)
+    if ((payloadMode.GetModulationClass() != WIFI_MOD_CLASS_OFDM) &&
+        (payloadMode.GetModulationClass() != WIFI_MOD_CLASS_VHT) && (channelWidth < 80))
     {
         testedBands.push_back(WIFI_PHY_BAND_2_4GHZ);
     }
@@ -189,17 +214,14 @@
                                 WifiPreamble preamble,
                                 Time knownDuration)
 {
-    WifiTxVector txVector;
+    WifiTxVector txVector{};
     txVector.SetMode(payloadMode);
     txVector.SetPreambleType(preamble);
     txVector.SetChannelWidth(channelWidth);
     txVector.SetGuardInterval(guardInterval);
-    txVector.SetNss(1);
-    txVector.SetStbc(false);
-    txVector.SetNess(0);
     std::list<WifiPhyBand> testedBands;
     Ptr<YansWifiPhy> phy = CreateObject<YansWifiPhy>();
-    if (payloadMode.GetModulationClass() >= WIFI_MOD_CLASS_OFDM)
+    if ((payloadMode.GetModulationClass() >= WIFI_MOD_CLASS_OFDM) && (channelWidth <= 160))
     {
         testedBands.push_back(WIFI_PHY_BAND_5GHZ);
     }
@@ -207,7 +229,8 @@
     {
         testedBands.push_back(WIFI_PHY_BAND_6GHZ);
     }
-    if (payloadMode.GetModulationClass() != WIFI_MOD_CLASS_VHT)
+    if ((payloadMode.GetModulationClass() != WIFI_MOD_CLASS_OFDM) &&
+        (payloadMode.GetModulationClass() != WIFI_MOD_CLASS_VHT) && (channelWidth < 80))
     {
         testedBands.push_back(WIFI_PHY_BAND_2_4GHZ);
     }
@@ -255,7 +278,7 @@
                            std::end(userInfos),
                            MHz_u{0},
                            [](const MHz_u prevBw, const HeMuUserInfo& info) {
-                               return prevBw + HeRu::GetBandwidth(info.ru.GetRuType());
+                               return prevBw + WifiRu::GetBandwidth(WifiRu::GetRuType(info.ru));
                            }),
         "Cannot accommodate all the RUs in the provided band"); // MU-MIMO (for which allocations
                                                                 // use the same RU) is not supported
@@ -263,8 +286,6 @@
     txVector.SetPreambleType(preamble);
     txVector.SetChannelWidth(channelWidth);
     txVector.SetGuardInterval(guardInterval);
-    txVector.SetStbc(false);
-    txVector.SetNess(0);
     if (IsEht(preamble))
     {
         txVector.SetEhtPpduType(0);
@@ -278,14 +299,21 @@
         staIds.push_back(staId++);
     }
     txVector.SetSigBMode(VhtPhy::GetVhtMcs0());
-    txVector.SetRuAllocation({192, 192}, 0);
+    const uint16_t ruAllocPer20 = IsEht(preamble) ? 64 : 192;
+    txVector.SetRuAllocation({ruAllocPer20, ruAllocPer20}, 0);
 
     Ptr<YansWifiPhy> phy = CreateObject<YansWifiPhy>();
-    std::list<WifiPhyBand> testedBands{
-        WIFI_PHY_BAND_5GHZ,
-        WIFI_PHY_BAND_6GHZ,
-        WIFI_PHY_BAND_2_4GHZ}; // Durations vary depending on frequency; test also 2.4 GHz (bug
-                               // 1971)
+    std::list<WifiPhyBand> testedBands;
+    if (channelWidth <= 160)
+    {
+        testedBands.push_back(WIFI_PHY_BAND_5GHZ);
+    }
+    testedBands.push_back(WIFI_PHY_BAND_6GHZ);
+    if (channelWidth < 80)
+    {
+        // Durations vary depending on frequency; test also 2.4 GHz (bug 1971)
+        testedBands.push_back(WIFI_PHY_BAND_2_4GHZ);
+    }
     for (auto& testedBand : testedBands)
     {
         if (testedBand == WIFI_PHY_BAND_2_4GHZ)
@@ -1380,53 +1408,604 @@
     retval = retval &&
              CheckMuTxDuration(
                  std::list<uint32_t>{1536, 1536},
-                 std::list<HeMuUserInfo>{{{HeRu::RU_242_TONE, 1, true}, 0, 1},
-                                         {{HeRu::RU_242_TONE, 2, true}, 0, 1}},
+                 std::list<HeMuUserInfo>{{HeRu::RuSpec{RuType::RU_242_TONE, 1, true}, 0, 1},
+                                         {HeRu::RuSpec{RuType::RU_242_TONE, 2, true}, 0, 1}},
                  MHz_u{40},
                  NanoSeconds(800),
                  WIFI_PREAMBLE_HE_MU,
                  NanoSeconds(
                      1493600)) // equivalent to HE_SU for 20 MHz with 2 extra HE-SIG-B (i.e. 8 us)
-             && CheckMuTxDuration(std::list<uint32_t>{1536, 1536},
-                                  std::list<HeMuUserInfo>{{{HeRu::RU_242_TONE, 1, true}, 1, 1},
-                                                          {{HeRu::RU_242_TONE, 2, true}, 0, 1}},
-                                  MHz_u{40},
-                                  NanoSeconds(800),
-                                  WIFI_PREAMBLE_HE_MU,
-                                  NanoSeconds(1493600)) // shouldn't change if first PSDU is shorter
-             && CheckMuTxDuration(std::list<uint32_t>{1536, 76},
-                                  std::list<HeMuUserInfo>{{{HeRu::RU_242_TONE, 1, true}, 0, 1},
-                                                          {{HeRu::RU_242_TONE, 2, true}, 0, 1}},
-                                  MHz_u{40},
-                                  NanoSeconds(800),
-                                  WIFI_PREAMBLE_HE_MU,
-                                  NanoSeconds(1493600));
+             && CheckMuTxDuration(
+                    std::list<uint32_t>{1536, 1536},
+                    std::list<HeMuUserInfo>{{HeRu::RuSpec{RuType::RU_242_TONE, 1, true}, 1, 1},
+                                            {HeRu::RuSpec{RuType::RU_242_TONE, 2, true}, 0, 1}},
+                    MHz_u{40},
+                    NanoSeconds(800),
+                    WIFI_PREAMBLE_HE_MU,
+                    NanoSeconds(1493600)) // shouldn't change if first PSDU is shorter
+             && CheckMuTxDuration(
+                    std::list<uint32_t>{1536, 76},
+                    std::list<HeMuUserInfo>{{HeRu::RuSpec{RuType::RU_242_TONE, 1, true}, 0, 1},
+                                            {HeRu::RuSpec{RuType::RU_242_TONE, 2, true}, 0, 1}},
+                    MHz_u{40},
+                    NanoSeconds(800),
+                    WIFI_PREAMBLE_HE_MU,
+                    NanoSeconds(1493600));
 
     NS_TEST_EXPECT_MSG_EQ(retval, true, "an 802.11ax MU duration failed");
 
-    // 802.11be MU durations
+    // 802.11be SU durations
     retval = retval &&
-             CheckMuTxDuration(std::list<uint32_t>{1536, 1536},
-                               std::list<HeMuUserInfo>{{{HeRu::RU_242_TONE, 1, true}, 0, 1},
-                                                       {{HeRu::RU_242_TONE, 2, true}, 0, 1}},
-                               MHz_u{40},
-                               NanoSeconds(800),
-                               WIFI_PREAMBLE_EHT_MU,
-                               NanoSeconds(1493600)) // equivalent to 802.11ax MU
-             && CheckMuTxDuration(std::list<uint32_t>{1536, 1536},
-                                  std::list<HeMuUserInfo>{{{HeRu::RU_242_TONE, 1, true}, 1, 1},
-                                                          {{HeRu::RU_242_TONE, 2, true}, 0, 1}},
-                                  MHz_u{40},
-                                  NanoSeconds(800),
-                                  WIFI_PREAMBLE_EHT_MU,
-                                  NanoSeconds(1493600)) // shouldn't change if first PSDU is shorter
-             && CheckMuTxDuration(std::list<uint32_t>{1536, 76},
-                                  std::list<HeMuUserInfo>{{{HeRu::RU_242_TONE, 1, true}, 0, 1},
-                                                          {{HeRu::RU_242_TONE, 2, true}, 0, 1}},
-                                  MHz_u{40},
-                                  NanoSeconds(800),
-                                  WIFI_PREAMBLE_EHT_MU,
-                                  NanoSeconds(1493600));
+             CheckTxDuration(1536,
+                             EhtPhy::GetEhtMcs0(),
+                             MHz_u{20},
+                             NanoSeconds(800),
+                             WIFI_PREAMBLE_EHT_MU,
+                             NanoSeconds(1493600)) &&
+             CheckTxDuration(76,
+                             EhtPhy::GetEhtMcs0(),
+                             MHz_u{20},
+                             NanoSeconds(800),
+                             WIFI_PREAMBLE_EHT_MU,
+                             NanoSeconds(133600)) &&
+             CheckTxDuration(14,
+                             EhtPhy::GetEhtMcs0(),
+                             MHz_u{20},
+                             NanoSeconds(800),
+                             WIFI_PREAMBLE_EHT_MU,
+                             NanoSeconds(79200)) &&
+             CheckTxDuration(1536,
+                             EhtPhy::GetEhtMcs0(),
+                             MHz_u{40},
+                             NanoSeconds(800),
+                             WIFI_PREAMBLE_EHT_MU,
+                             NanoSeconds(772800)) &&
+             CheckTxDuration(76,
+                             EhtPhy::GetEhtMcs0(),
+                             MHz_u{40},
+                             NanoSeconds(800),
+                             WIFI_PREAMBLE_EHT_MU,
+                             NanoSeconds(92800)) &&
+             CheckTxDuration(14,
+                             EhtPhy::GetEhtMcs0(),
+                             MHz_u{40},
+                             NanoSeconds(800),
+                             WIFI_PREAMBLE_EHT_MU,
+                             NanoSeconds(65600)) &&
+             CheckTxDuration(1536,
+                             EhtPhy::GetEhtMcs0(),
+                             MHz_u{80},
+                             NanoSeconds(800),
+                             WIFI_PREAMBLE_EHT_MU,
+                             NanoSeconds(409600)) &&
+             CheckTxDuration(76,
+                             EhtPhy::GetEhtMcs0(),
+                             MHz_u{80},
+                             NanoSeconds(800),
+                             WIFI_PREAMBLE_EHT_MU,
+                             NanoSeconds(83200)) &&
+             CheckTxDuration(14,
+                             EhtPhy::GetEhtMcs0(),
+                             MHz_u{80},
+                             NanoSeconds(800),
+                             WIFI_PREAMBLE_EHT_MU,
+                             NanoSeconds(69600)) &&
+             CheckTxDuration(1536,
+                             EhtPhy::GetEhtMcs0(),
+                             MHz_u{160},
+                             NanoSeconds(800),
+                             WIFI_PREAMBLE_EHT_MU,
+                             NanoSeconds(232800)) &&
+             CheckTxDuration(76,
+                             EhtPhy::GetEhtMcs0(),
+                             MHz_u{160},
+                             NanoSeconds(800),
+                             WIFI_PREAMBLE_EHT_MU,
+                             NanoSeconds(69600)) &&
+             CheckTxDuration(14,
+                             EhtPhy::GetEhtMcs0(),
+                             MHz_u{160},
+                             NanoSeconds(800),
+                             WIFI_PREAMBLE_EHT_MU,
+                             NanoSeconds(69600)) &&
+             CheckTxDuration(1536,
+                             EhtPhy::GetEhtMcs0(),
+                             MHz_u{320},
+                             NanoSeconds(800),
+                             WIFI_PREAMBLE_EHT_MU,
+                             NanoSeconds(159200)) &&
+             CheckTxDuration(76,
+                             EhtPhy::GetEhtMcs0(),
+                             MHz_u{320},
+                             NanoSeconds(800),
+                             WIFI_PREAMBLE_EHT_MU,
+                             NanoSeconds(77600)) &&
+             CheckTxDuration(14,
+                             EhtPhy::GetEhtMcs0(),
+                             MHz_u{320},
+                             NanoSeconds(800),
+                             WIFI_PREAMBLE_EHT_MU,
+                             NanoSeconds(77600)) &&
+             CheckTxDuration(1536,
+                             EhtPhy::GetEhtMcs0(),
+                             MHz_u{20},
+                             NanoSeconds(1600),
+                             WIFI_PREAMBLE_EHT_MU,
+                             NanoSeconds(1578400)) &&
+             CheckTxDuration(76,
+                             EhtPhy::GetEhtMcs0(),
+                             MHz_u{20},
+                             NanoSeconds(1600),
+                             WIFI_PREAMBLE_EHT_MU,
+                             NanoSeconds(138400)) &&
+             CheckTxDuration(14,
+                             EhtPhy::GetEhtMcs0(),
+                             MHz_u{20},
+                             NanoSeconds(1600),
+                             WIFI_PREAMBLE_EHT_MU,
+                             NanoSeconds(80800)) &&
+             CheckTxDuration(1536,
+                             EhtPhy::GetEhtMcs0(),
+                             MHz_u{40},
+                             NanoSeconds(1600),
+                             WIFI_PREAMBLE_EHT_MU,
+                             NanoSeconds(815200)) &&
+             CheckTxDuration(76,
+                             EhtPhy::GetEhtMcs0(),
+                             MHz_u{40},
+                             NanoSeconds(1600),
+                             WIFI_PREAMBLE_EHT_MU,
+                             NanoSeconds(95200)) &&
+             CheckTxDuration(14,
+                             EhtPhy::GetEhtMcs0(),
+                             MHz_u{40},
+                             NanoSeconds(1600),
+                             WIFI_PREAMBLE_EHT_MU,
+                             NanoSeconds(66400)) &&
+             CheckTxDuration(1536,
+                             EhtPhy::GetEhtMcs0(),
+                             MHz_u{80},
+                             NanoSeconds(1600),
+                             WIFI_PREAMBLE_EHT_MU,
+                             NanoSeconds(430400)) &&
+             CheckTxDuration(76,
+                             EhtPhy::GetEhtMcs0(),
+                             MHz_u{80},
+                             NanoSeconds(1600),
+                             WIFI_PREAMBLE_EHT_MU,
+                             NanoSeconds(84800)) &&
+             CheckTxDuration(14,
+                             EhtPhy::GetEhtMcs0(),
+                             MHz_u{80},
+                             NanoSeconds(1600),
+                             WIFI_PREAMBLE_EHT_MU,
+                             NanoSeconds(70400)) &&
+             CheckTxDuration(1536,
+                             EhtPhy::GetEhtMcs0(),
+                             MHz_u{160},
+                             NanoSeconds(1600),
+                             WIFI_PREAMBLE_EHT_MU,
+                             NanoSeconds(243200)) &&
+             CheckTxDuration(76,
+                             EhtPhy::GetEhtMcs0(),
+                             MHz_u{160},
+                             NanoSeconds(1600),
+                             WIFI_PREAMBLE_EHT_MU,
+                             NanoSeconds(70400)) &&
+             CheckTxDuration(14,
+                             EhtPhy::GetEhtMcs0(),
+                             MHz_u{160},
+                             NanoSeconds(1600),
+                             WIFI_PREAMBLE_EHT_MU,
+                             NanoSeconds(70400)) &&
+             CheckTxDuration(1536,
+                             EhtPhy::GetEhtMcs0(),
+                             MHz_u{320},
+                             NanoSeconds(1600),
+                             WIFI_PREAMBLE_EHT_MU,
+                             NanoSeconds(164800)) &&
+             CheckTxDuration(76,
+                             EhtPhy::GetEhtMcs0(),
+                             MHz_u{320},
+                             NanoSeconds(1600),
+                             WIFI_PREAMBLE_EHT_MU,
+                             NanoSeconds(78400)) &&
+             CheckTxDuration(14,
+                             EhtPhy::GetEhtMcs0(),
+                             MHz_u{320},
+                             NanoSeconds(1600),
+                             WIFI_PREAMBLE_EHT_MU,
+                             NanoSeconds(78400)) &&
+             CheckTxDuration(1536,
+                             EhtPhy::GetEhtMcs0(),
+                             MHz_u{20},
+                             NanoSeconds(3200),
+                             WIFI_PREAMBLE_EHT_MU,
+                             MicroSeconds(1748)) &&
+             CheckTxDuration(76,
+                             EhtPhy::GetEhtMcs0(),
+                             MHz_u{20},
+                             NanoSeconds(3200),
+                             WIFI_PREAMBLE_EHT_MU,
+                             MicroSeconds(148)) &&
+             CheckTxDuration(14,
+                             EhtPhy::GetEhtMcs0(),
+                             MHz_u{20},
+                             NanoSeconds(3200),
+                             WIFI_PREAMBLE_EHT_MU,
+                             MicroSeconds(84)) &&
+             CheckTxDuration(1536,
+                             EhtPhy::GetEhtMcs0(),
+                             MHz_u{40},
+                             NanoSeconds(3200),
+                             WIFI_PREAMBLE_EHT_MU,
+                             MicroSeconds(900)) &&
+             CheckTxDuration(76,
+                             EhtPhy::GetEhtMcs0(),
+                             MHz_u{40},
+                             NanoSeconds(3200),
+                             WIFI_PREAMBLE_EHT_MU,
+                             MicroSeconds(100)) &&
+             CheckTxDuration(14,
+                             EhtPhy::GetEhtMcs0(),
+                             MHz_u{40},
+                             NanoSeconds(3200),
+                             WIFI_PREAMBLE_EHT_MU,
+                             MicroSeconds(68)) &&
+             CheckTxDuration(1536,
+                             EhtPhy::GetEhtMcs0(),
+                             MHz_u{80},
+                             NanoSeconds(3200),
+                             WIFI_PREAMBLE_EHT_MU,
+                             MicroSeconds(472)) &&
+             CheckTxDuration(76,
+                             EhtPhy::GetEhtMcs0(),
+                             MHz_u{80},
+                             NanoSeconds(3200),
+                             WIFI_PREAMBLE_EHT_MU,
+                             MicroSeconds(88)) &&
+             CheckTxDuration(14,
+                             EhtPhy::GetEhtMcs0(),
+                             MHz_u{80},
+                             NanoSeconds(3200),
+                             WIFI_PREAMBLE_EHT_MU,
+                             MicroSeconds(72)) &&
+             CheckTxDuration(1536,
+                             EhtPhy::GetEhtMcs0(),
+                             MHz_u{160},
+                             NanoSeconds(3200),
+                             WIFI_PREAMBLE_EHT_MU,
+                             MicroSeconds(264)) &&
+             CheckTxDuration(76,
+                             EhtPhy::GetEhtMcs0(),
+                             MHz_u{160},
+                             NanoSeconds(3200),
+                             WIFI_PREAMBLE_EHT_MU,
+                             MicroSeconds(72)) &&
+             CheckTxDuration(14,
+                             EhtPhy::GetEhtMcs0(),
+                             MHz_u{160},
+                             NanoSeconds(3200),
+                             WIFI_PREAMBLE_EHT_MU,
+                             MicroSeconds(72)) &&
+             CheckTxDuration(1536,
+                             EhtPhy::GetEhtMcs0(),
+                             MHz_u{320},
+                             NanoSeconds(3200),
+                             WIFI_PREAMBLE_EHT_MU,
+                             MicroSeconds(176)) &&
+             CheckTxDuration(76,
+                             EhtPhy::GetEhtMcs0(),
+                             MHz_u{320},
+                             NanoSeconds(3200),
+                             WIFI_PREAMBLE_EHT_MU,
+                             MicroSeconds(80)) &&
+             CheckTxDuration(14,
+                             EhtPhy::GetEhtMcs0(),
+                             MHz_u{320},
+                             NanoSeconds(3200),
+                             WIFI_PREAMBLE_EHT_MU,
+                             MicroSeconds(80)) &&
+             CheckTxDuration(1536,
+                             EhtPhy::GetEhtMcs13(),
+                             MHz_u{20},
+                             NanoSeconds(800),
+                             WIFI_PREAMBLE_EHT_MU,
+                             NanoSeconds(129600)) &&
+             CheckTxDuration(76,
+                             EhtPhy::GetEhtMcs13(),
+                             MHz_u{20},
+                             NanoSeconds(800),
+                             WIFI_PREAMBLE_EHT_MU,
+                             NanoSeconds(61600)) &&
+             CheckTxDuration(14,
+                             EhtPhy::GetEhtMcs13(),
+                             MHz_u{20},
+                             NanoSeconds(800),
+                             WIFI_PREAMBLE_EHT_MU,
+                             NanoSeconds(61600)) &&
+             CheckTxDuration(1536,
+                             EhtPhy::GetEhtMcs13(),
+                             MHz_u{40},
+                             NanoSeconds(800),
+                             WIFI_PREAMBLE_EHT_MU,
+                             NanoSeconds(88800)) &&
+             CheckTxDuration(76,
+                             EhtPhy::GetEhtMcs13(),
+                             MHz_u{40},
+                             NanoSeconds(800),
+                             WIFI_PREAMBLE_EHT_MU,
+                             NanoSeconds(61600)) &&
+             CheckTxDuration(14,
+                             EhtPhy::GetEhtMcs13(),
+                             MHz_u{40},
+                             NanoSeconds(800),
+                             WIFI_PREAMBLE_EHT_MU,
+                             NanoSeconds(61600)) &&
+             CheckTxDuration(1536,
+                             EhtPhy::GetEhtMcs13(),
+                             MHz_u{80},
+                             NanoSeconds(800),
+                             WIFI_PREAMBLE_EHT_MU,
+                             NanoSeconds(75200)) &&
+             CheckTxDuration(76,
+                             EhtPhy::GetEhtMcs13(),
+                             MHz_u{80},
+                             NanoSeconds(800),
+                             WIFI_PREAMBLE_EHT_MU,
+                             NanoSeconds(61600)) &&
+             CheckTxDuration(14,
+                             EhtPhy::GetEhtMcs13(),
+                             MHz_u{80},
+                             NanoSeconds(800),
+                             WIFI_PREAMBLE_EHT_MU,
+                             NanoSeconds(61600)) &&
+             CheckTxDuration(1536,
+                             EhtPhy::GetEhtMcs13(),
+                             MHz_u{160},
+                             NanoSeconds(800),
+                             WIFI_PREAMBLE_EHT_MU,
+                             NanoSeconds(61600)) &&
+             CheckTxDuration(76,
+                             EhtPhy::GetEhtMcs13(),
+                             MHz_u{160},
+                             NanoSeconds(800),
+                             WIFI_PREAMBLE_EHT_MU,
+                             NanoSeconds(61600)) &&
+             CheckTxDuration(14,
+                             EhtPhy::GetEhtMcs13(),
+                             MHz_u{160},
+                             NanoSeconds(800),
+                             WIFI_PREAMBLE_EHT_MU,
+                             NanoSeconds(61600)) &&
+             CheckTxDuration(1536,
+                             EhtPhy::GetEhtMcs13(),
+                             MHz_u{320},
+                             NanoSeconds(800),
+                             WIFI_PREAMBLE_EHT_MU,
+                             NanoSeconds(61600)) &&
+             CheckTxDuration(76,
+                             EhtPhy::GetEhtMcs13(),
+                             MHz_u{320},
+                             NanoSeconds(800),
+                             WIFI_PREAMBLE_EHT_MU,
+                             NanoSeconds(61600)) &&
+             CheckTxDuration(14,
+                             EhtPhy::GetEhtMcs13(),
+                             MHz_u{320},
+                             NanoSeconds(800),
+                             WIFI_PREAMBLE_EHT_MU,
+                             NanoSeconds(61600)) &&
+             CheckTxDuration(1536,
+                             EhtPhy::GetEhtMcs13(),
+                             MHz_u{20},
+                             NanoSeconds(1600),
+                             WIFI_PREAMBLE_EHT_MU,
+                             NanoSeconds(134400)) &&
+             CheckTxDuration(76,
+                             EhtPhy::GetEhtMcs13(),
+                             MHz_u{20},
+                             NanoSeconds(1600),
+                             WIFI_PREAMBLE_EHT_MU,
+                             NanoSeconds(62400)) &&
+             CheckTxDuration(14,
+                             EhtPhy::GetEhtMcs13(),
+                             MHz_u{20},
+                             NanoSeconds(1600),
+                             WIFI_PREAMBLE_EHT_MU,
+                             NanoSeconds(62400)) &&
+             CheckTxDuration(1536,
+                             EhtPhy::GetEhtMcs13(),
+                             MHz_u{40},
+                             NanoSeconds(1600),
+                             WIFI_PREAMBLE_EHT_MU,
+                             NanoSeconds(91200)) &&
+             CheckTxDuration(76,
+                             EhtPhy::GetEhtMcs13(),
+                             MHz_u{40},
+                             NanoSeconds(1600),
+                             WIFI_PREAMBLE_EHT_MU,
+                             NanoSeconds(62400)) &&
+             CheckTxDuration(14,
+                             EhtPhy::GetEhtMcs13(),
+                             MHz_u{40},
+                             NanoSeconds(1600),
+                             WIFI_PREAMBLE_EHT_MU,
+                             NanoSeconds(62400)) &&
+             CheckTxDuration(1536,
+                             EhtPhy::GetEhtMcs13(),
+                             MHz_u{80},
+                             NanoSeconds(1600),
+                             WIFI_PREAMBLE_EHT_MU,
+                             NanoSeconds(76800)) &&
+             CheckTxDuration(76,
+                             EhtPhy::GetEhtMcs13(),
+                             MHz_u{80},
+                             NanoSeconds(1600),
+                             WIFI_PREAMBLE_EHT_MU,
+                             NanoSeconds(62400)) &&
+             CheckTxDuration(14,
+                             EhtPhy::GetEhtMcs13(),
+                             MHz_u{80},
+                             NanoSeconds(1600),
+                             WIFI_PREAMBLE_EHT_MU,
+                             NanoSeconds(62400)) &&
+             CheckTxDuration(1536,
+                             EhtPhy::GetEhtMcs13(),
+                             MHz_u{160},
+                             NanoSeconds(1600),
+                             WIFI_PREAMBLE_EHT_MU,
+                             NanoSeconds(62400)) &&
+             CheckTxDuration(76,
+                             EhtPhy::GetEhtMcs13(),
+                             MHz_u{160},
+                             NanoSeconds(1600),
+                             WIFI_PREAMBLE_EHT_MU,
+                             NanoSeconds(62400)) &&
+             CheckTxDuration(14,
+                             EhtPhy::GetEhtMcs13(),
+                             MHz_u{160},
+                             NanoSeconds(1600),
+                             WIFI_PREAMBLE_EHT_MU,
+                             NanoSeconds(62400)) &&
+             CheckTxDuration(1536,
+                             EhtPhy::GetEhtMcs13(),
+                             MHz_u{320},
+                             NanoSeconds(1600),
+                             WIFI_PREAMBLE_EHT_MU,
+                             NanoSeconds(62400)) &&
+             CheckTxDuration(76,
+                             EhtPhy::GetEhtMcs13(),
+                             MHz_u{320},
+                             NanoSeconds(1600),
+                             WIFI_PREAMBLE_EHT_MU,
+                             NanoSeconds(62400)) &&
+             CheckTxDuration(14,
+                             EhtPhy::GetEhtMcs13(),
+                             MHz_u{320},
+                             NanoSeconds(1600),
+                             WIFI_PREAMBLE_EHT_MU,
+                             NanoSeconds(62400)) &&
+             CheckTxDuration(1536,
+                             EhtPhy::GetEhtMcs13(),
+                             MHz_u{20},
+                             NanoSeconds(3200),
+                             WIFI_PREAMBLE_EHT_MU,
+                             MicroSeconds(144)) &&
+             CheckTxDuration(76,
+                             EhtPhy::GetEhtMcs13(),
+                             MHz_u{20},
+                             NanoSeconds(3200),
+                             WIFI_PREAMBLE_EHT_MU,
+                             MicroSeconds(64)) &&
+             CheckTxDuration(14,
+                             EhtPhy::GetEhtMcs13(),
+                             MHz_u{20},
+                             NanoSeconds(3200),
+                             WIFI_PREAMBLE_EHT_MU,
+                             MicroSeconds(64)) &&
+             CheckTxDuration(1536,
+                             EhtPhy::GetEhtMcs13(),
+                             MHz_u{40},
+                             NanoSeconds(3200),
+                             WIFI_PREAMBLE_EHT_MU,
+                             MicroSeconds(96)) &&
+             CheckTxDuration(76,
+                             EhtPhy::GetEhtMcs13(),
+                             MHz_u{40},
+                             NanoSeconds(3200),
+                             WIFI_PREAMBLE_EHT_MU,
+                             MicroSeconds(64)) &&
+             CheckTxDuration(14,
+                             EhtPhy::GetEhtMcs13(),
+                             MHz_u{40},
+                             NanoSeconds(3200),
+                             WIFI_PREAMBLE_EHT_MU,
+                             MicroSeconds(64)) &&
+             CheckTxDuration(1536,
+                             EhtPhy::GetEhtMcs13(),
+                             MHz_u{80},
+                             NanoSeconds(3200),
+                             WIFI_PREAMBLE_EHT_MU,
+                             MicroSeconds(80)) &&
+             CheckTxDuration(76,
+                             EhtPhy::GetEhtMcs13(),
+                             MHz_u{80},
+                             NanoSeconds(3200),
+                             WIFI_PREAMBLE_EHT_MU,
+                             MicroSeconds(64)) &&
+             CheckTxDuration(14,
+                             EhtPhy::GetEhtMcs13(),
+                             MHz_u{80},
+                             NanoSeconds(3200),
+                             WIFI_PREAMBLE_EHT_MU,
+                             MicroSeconds(64)) &&
+             CheckTxDuration(1536,
+                             EhtPhy::GetEhtMcs13(),
+                             MHz_u{160},
+                             NanoSeconds(3200),
+                             WIFI_PREAMBLE_EHT_MU,
+                             MicroSeconds(64)) &&
+             CheckTxDuration(76,
+                             EhtPhy::GetEhtMcs13(),
+                             MHz_u{160},
+                             NanoSeconds(3200),
+                             WIFI_PREAMBLE_EHT_MU,
+                             MicroSeconds(64)) &&
+             CheckTxDuration(14,
+                             EhtPhy::GetEhtMcs13(),
+                             MHz_u{160},
+                             NanoSeconds(3200),
+                             WIFI_PREAMBLE_EHT_MU,
+                             MicroSeconds(64)) &&
+             CheckTxDuration(1536,
+                             EhtPhy::GetEhtMcs13(),
+                             MHz_u{320},
+                             NanoSeconds(3200),
+                             WIFI_PREAMBLE_EHT_MU,
+                             MicroSeconds(64)) &&
+             CheckTxDuration(76,
+                             EhtPhy::GetEhtMcs13(),
+                             MHz_u{320},
+                             NanoSeconds(3200),
+                             WIFI_PREAMBLE_EHT_MU,
+                             MicroSeconds(64)) &&
+             CheckTxDuration(14,
+                             EhtPhy::GetEhtMcs13(),
+                             MHz_u{320},
+                             NanoSeconds(3200),
+                             WIFI_PREAMBLE_EHT_MU,
+                             MicroSeconds(64));
+
+    NS_TEST_EXPECT_MSG_EQ(retval, true, "an 802.11be SU duration failed");
+
+    // 802.11be MU durations
+    retval =
+        retval &&
+        CheckMuTxDuration(
+            std::list<uint32_t>{1536, 1536},
+            std::list<HeMuUserInfo>{{EhtRu::RuSpec{RuType::RU_242_TONE, 1, true, true}, 0, 1},
+                                    {EhtRu::RuSpec{RuType::RU_242_TONE, 2, true, true}, 0, 1}},
+            MHz_u{40},
+            NanoSeconds(800),
+            WIFI_PREAMBLE_EHT_MU,
+            NanoSeconds(1493600)) // equivalent to 802.11ax MU
+        && CheckMuTxDuration(
+               std::list<uint32_t>{1536, 1536},
+               std::list<HeMuUserInfo>{{EhtRu::RuSpec{RuType::RU_242_TONE, 1, true, true}, 1, 1},
+                                       {EhtRu::RuSpec{RuType::RU_242_TONE, 2, true, true}, 0, 1}},
+               MHz_u{40},
+               NanoSeconds(800),
+               WIFI_PREAMBLE_EHT_MU,
+               NanoSeconds(1493600)) // shouldn't change if first PSDU is shorter
+        && CheckMuTxDuration(
+               std::list<uint32_t>{1536, 76},
+               std::list<HeMuUserInfo>{{EhtRu::RuSpec{RuType::RU_242_TONE, 1, true, true}, 0, 1},
+                                       {EhtRu::RuSpec{RuType::RU_242_TONE, 2, true, true}, 0, 1}},
+               MHz_u{40},
+               NanoSeconds(800),
+               WIFI_PREAMBLE_EHT_MU,
+               NanoSeconds(1493600));
 
     NS_TEST_EXPECT_MSG_EQ(retval, true, "an 802.11be MU duration failed");
 
@@ -1437,9 +2016,9 @@
  * @ingroup wifi-test
  * @ingroup tests
  *
- * @brief HE-SIG-B duration test
+ * @brief HE-SIG-B/EHT-SIG duration test
  */
-class HeSigBDurationTest : public TestCase
+class MuSigDurationTest : public TestCase
 {
   public:
     /**
@@ -1457,51 +2036,59 @@
      * @param userInfos the HE MU specific per-user information to use for the test
      * @param sigBMode the mode to transmit HE-SIG-B for the test
      * @param channelWidth the channel width to select for the test
+     * @param p20Index the index of the primary20 channel
      * @param expectedMuType the expected MU type (OFDMA or MU-MIMO)
-     * @param expectedRuAllocation the expected RU_ALLOCATION
+     * @param expectedRuAllocation the expected RuType::RU_ALLOCATION
      * @param expectedNumUsersPerCc the expected number of users per content channel
      * @param expectedSigBDuration the expected duration of the HE-SIG-B header
      */
-    HeSigBDurationTest(const std::list<HeMuUserInfo>& userInfos,
-                       const WifiMode& sigBMode,
-                       MHz_u channelWidth,
-                       MuType expectedMuType,
-                       const RuAllocation& expectedRuAllocation,
-                       const std::pair<std::size_t, std::size_t>& expectedNumUsersPerCc,
-                       Time expectedSigBDuration);
+    MuSigDurationTest(const std::list<HeMuUserInfo>& userInfos,
+                      const WifiMode& sigBMode,
+                      MHz_u channelWidth,
+                      uint8_t p20Index,
+                      MuType expectedMuType,
+                      const RuAllocation& expectedRuAllocation,
+                      const std::pair<std::size_t, std::size_t>& expectedNumUsersPerCc,
+                      Time expectedSigBDuration);
 
   private:
     void DoRun() override;
+    void DoTeardown() override;
 
     /**
-     * Build a TXVECTOR for HE MU.
+     * Build a TXVECTOR for HE MU or EHT MU.
      *
-     * @return the configured HE MU TXVECTOR
+     * @return the configured TXVECTOR for HE MU or EHT MU
      */
     WifiTxVector BuildTxVector() const;
 
+    Ptr<YansWifiPhy> m_phy; ///< the PHY under test
+
     std::list<HeMuUserInfo> m_userInfos; ///< HE MU specific per-user information
     WifiMode m_sigBMode;                 ///< Mode used to transmit HE-SIG-B
     MHz_u m_channelWidth;                ///< Channel width
+    uint8_t m_p20Index;                  ///< index of the primary20 channel
     MuType m_expectedMuType;             ///< Expected MU type (OFDMA or MU-MIMO)
-    RuAllocation m_expectedRuAllocation; ///< Expected RU_ALLOCATION
+    RuAllocation m_expectedRuAllocation; ///< Expected RuType::RU_ALLOCATION
     std::pair<std::size_t, std::size_t>
         m_expectedNumUsersPerCc; ///< Expected number of users per content channel
-    Time m_expectedSigBDuration; ///< Expected duration of the HE-SIG-B header
+    Time m_expectedSigBDuration; ///< Expected duration of the HE-SIG-B/EHT-SIG header
 };
 
-HeSigBDurationTest::HeSigBDurationTest(
+MuSigDurationTest::MuSigDurationTest(
     const std::list<HeMuUserInfo>& userInfos,
     const WifiMode& sigBMode,
     MHz_u channelWidth,
+    uint8_t p20Index,
     MuType expectedMuType,
     const RuAllocation& expectedRuAllocation,
     const std::pair<std::size_t, std::size_t>& expectedNumUsersPerCc,
     Time expectedSigBDuration)
-    : TestCase{"Check HE-SIG-B duration computation"},
+    : TestCase{"Check HE-SIG-B or EHT-SIG duration computation"},
       m_userInfos{userInfos},
       m_sigBMode{sigBMode},
       m_channelWidth{channelWidth},
+      m_p20Index{p20Index},
       m_expectedMuType{expectedMuType},
       m_expectedRuAllocation{expectedRuAllocation},
       m_expectedNumUsersPerCc{expectedNumUsersPerCc},
@@ -1510,16 +2097,21 @@
 }
 
 WifiTxVector
-HeSigBDurationTest::BuildTxVector() const
+MuSigDurationTest::BuildTxVector() const
 {
+    const auto isHe = WifiRu::IsHe(m_userInfos.begin()->ru);
     WifiTxVector txVector;
-    txVector.SetPreambleType(WIFI_PREAMBLE_HE_MU);
+    txVector.SetPreambleType(isHe ? WIFI_PREAMBLE_HE_MU : WIFI_PREAMBLE_EHT_MU);
     txVector.SetChannelWidth(m_channelWidth);
     txVector.SetGuardInterval(NanoSeconds(3200));
     txVector.SetStbc(false);
     txVector.SetNess(0);
     std::list<uint16_t> staIds;
     uint16_t staId = 1;
+    if (!isHe)
+    {
+        txVector.SetEhtPpduType(0);
+    }
     for (const auto& userInfo : m_userInfos)
     {
         txVector.SetHeMuUserInfo(staId, userInfo);
@@ -1531,45 +2123,95 @@
 }
 
 void
-HeSigBDurationTest::DoRun()
+MuSigDurationTest::DoRun()
 {
-    const auto& hePhy = WifiPhy::GetStaticPhyEntity(WIFI_MOD_CLASS_HE);
+    m_phy = CreateObject<YansWifiPhy>();
+    auto channelNum = WifiPhyOperatingChannel::FindFirst(0,
+                                                         MHz_u{0},
+                                                         MHz_u{320},
+                                                         WIFI_STANDARD_80211be,
+                                                         WIFI_PHY_BAND_6GHZ)
+                          ->number;
+    m_phy->SetOperatingChannel(
+        WifiPhy::ChannelTuple{channelNum, 320, WIFI_PHY_BAND_6GHZ, m_p20Index});
+    m_phy->ConfigureStandard(WIFI_STANDARD_80211be);
+
     const auto& txVector = BuildTxVector();
+    auto phyEntity = m_phy->GetPhyEntity(txVector.GetModulationClass());
 
-    // Verify mode for HE-SIG-B field
-    NS_TEST_EXPECT_MSG_EQ(hePhy->GetSigMode(WIFI_PPDU_FIELD_SIG_B, txVector),
+    // Verify mode for HE-SIG-B/EHT-SIG field
+    NS_TEST_EXPECT_MSG_EQ(phyEntity->GetSigMode(WIFI_PPDU_FIELD_SIG_B, txVector),
                           m_sigBMode,
-                          "Incorrect mode used to send HE-SIG-B");
+                          "Incorrect mode used to send HE-SIG-B/EHT-SIG");
 
-    // Verify RU_ALLOCATION in TXVECTOR
+    // Verify RuType::RU_ALLOCATION in TXVECTOR
     NS_TEST_EXPECT_MSG_EQ((txVector.GetRuAllocation(0) == m_expectedRuAllocation),
                           true,
-                          "Incorrect RU_ALLOCATION");
+                          "Incorrect RuType::RU_ALLOCATION");
 
     // Verify number of users for content channels 1 and 2
     const auto& numUsersPerCc = HePpdu::GetNumRusPerHeSigBContentChannel(
         txVector.GetChannelWidth(),
-        txVector.GetRuAllocation(0),
+        txVector.GetModulationClass(),
+        txVector.GetRuAllocation(m_p20Index),
+        txVector.GetCenter26ToneRuIndication(),
         txVector.IsSigBCompression(),
         txVector.IsSigBCompression() ? txVector.GetHeMuUserInfoMap().size() : 0);
     const auto contentChannels = HePpdu::GetHeSigBContentChannels(txVector, 0);
     NS_TEST_EXPECT_MSG_EQ(numUsersPerCc.first,
                           m_expectedNumUsersPerCc.first,
-                          "Incorrect number of users in HE-SIG-B content channel 1");
+                          "Incorrect number of users in content channel 1");
     NS_TEST_EXPECT_MSG_EQ(numUsersPerCc.second,
                           m_expectedNumUsersPerCc.second,
-                          "Incorrect number of users in HE-SIG-B content channel 2");
+                          "Incorrect number of users in content channel 2");
     NS_TEST_EXPECT_MSG_EQ(contentChannels.at(0).size(),
                           m_expectedNumUsersPerCc.first,
-                          "Incorrect number of users in HE-SIG-B content channel 1");
+                          "Incorrect number of users in content channel 1");
     NS_TEST_EXPECT_MSG_EQ((contentChannels.size() > 1 ? contentChannels.at(1).size() : 0),
                           m_expectedNumUsersPerCc.second,
-                          "Incorrect number of users in HE-SIG-B content channel 2");
+                          "Incorrect number of users in content channel 2");
+
+    // Verify total HE-SIG-B/EHT-SIG duration
+    if (txVector.GetModulationClass() == WIFI_MOD_CLASS_HE)
+    {
+        NS_TEST_EXPECT_MSG_EQ(phyEntity->GetDuration(WIFI_PPDU_FIELD_SIG_B, txVector),
+                              m_expectedSigBDuration,
+                              "Incorrect duration for HE-SIG-B");
+    }
+    else // EHT
+    {
+        NS_TEST_EXPECT_MSG_EQ(phyEntity->GetDuration(WIFI_PPDU_FIELD_EHT_SIG, txVector),
+                              m_expectedSigBDuration,
+                              "Incorrect duration for EHT-SIG");
+    }
+
+    // Verify user infos in reconstructed TX vector
+    WifiConstPsduMap psdus;
+    Time ppduDuration;
+    for (std::size_t i = 0; i < m_userInfos.size(); ++i)
+    {
+        WifiMacHeader hdr;
+        auto psdu = Create<WifiPsdu>(Create<Packet>(1000), hdr);
+        ppduDuration = std::max(
+            ppduDuration,
+            WifiPhy::CalculateTxDuration(psdu->GetSize(), txVector, m_phy->GetPhyBand(), i + 1));
+        psdus.insert(std::make_pair(i, psdu));
+    }
+    auto ppdu = phyEntity->BuildPpdu(psdus, txVector, ppduDuration);
+    ppdu->ResetTxVector();
+    const auto& rxVector = ppdu->GetTxVector();
+    NS_TEST_EXPECT_MSG_EQ((txVector.GetHeMuUserInfoMap() == rxVector.GetHeMuUserInfoMap()),
+                          true,
+                          "Incorrect user infos in reconstructed TXVECTOR");
 
-    // Verify total HE-SIG-B duration
-    NS_TEST_EXPECT_MSG_EQ(hePhy->GetDuration(WIFI_PPDU_FIELD_SIG_B, txVector),
-                          m_expectedSigBDuration,
-                          "Incorrect duration for HE-SIG-B");
+    Simulator::Destroy();
+}
+
+void
+MuSigDurationTest::DoTeardown()
+{
+    m_phy->Dispose();
+    m_phy = nullptr;
 }
 
 /**
@@ -1816,8 +2458,9 @@
     txVector.SetNss(2); // HE-LTF duration assumed to be always 8 us for the time being (see note in
                         // HePhy::GetTrainingDuration)
     txVector.SetMode(HePhy::GetHeMcs9());
-    std::map<uint16_t, HeMuUserInfo> userInfoMap = {{1, {{HeRu::RU_106_TONE, 1, true}, 4, 2}},
-                                                    {2, {{HeRu::RU_106_TONE, 1, true}, 9, 1}}};
+    std::map<uint16_t, HeMuUserInfo> userInfoMap = {
+        {1, {HeRu::RuSpec{RuType::RU_106_TONE, 1, true}, 4, 2}},
+        {2, {HeRu::RuSpec{RuType::RU_106_TONE, 1, true}, 9, 1}}};
     sigAMode = HePhy::GetVhtMcs0();
     sigBMode = HePhy::GetVhtMcs4(); // because of first user info map
 
@@ -1888,8 +2531,10 @@
     txVector.SetNss(2); // EHT-LTF duration assumed to be always 8 us for the time being (see note
                         // in HePhy::GetTrainingDuration)
     txVector.SetMode(EhtPhy::GetEhtMcs9());
-    userInfoMap = {{1, {{HeRu::RU_106_TONE, 1, true}, 4, 2}},
-                   {2, {{HeRu::RU_106_TONE, 1, true}, 9, 1}}};
+    userInfoMap = {{1, {EhtRu::RuSpec{RuType::RU_52_TONE, 1, true, true}, 4, 2}},
+                   {2, {EhtRu::RuSpec{RuType::RU_52_TONE, 2, true, true}, 9, 1}},
+                   {3, {EhtRu::RuSpec{RuType::RU_52_TONE, 3, true, true}, 4, 2}},
+                   {4, {EhtRu::RuSpec{RuType::RU_52_TONE, 4, true, true}, 9, 1}}};
     WifiMode uSigMode = EhtPhy::GetVhtMcs0();
     WifiMode ehtSigMode = EhtPhy::GetVhtMcs4(); // because of first user info map
 
@@ -1908,7 +2553,7 @@
     // -> EHT MU format
     txVector.SetPreambleType(WIFI_PREAMBLE_EHT_MU);
     txVector.SetEhtPpduType(0); // EHT MU transmission
-    txVector.SetRuAllocation({96}, 0);
+    txVector.SetRuAllocation({24}, 0);
     sections[WIFI_PPDU_FIELD_U_SIG] = {{ppduStart + MicroSeconds(24), ppduStart + MicroSeconds(32)},
                                        uSigMode};
     sections[WIFI_PPDU_FIELD_EHT_SIG] = {
@@ -1920,7 +2565,7 @@
         ehtSigMode};
     CheckPhyHeaderSections(phyEntity->GetPhyHeaderSections(txVector, ppduStart), sections);
     txVector.SetChannelWidth(MHz_u{160}); // shouldn't have any impact
-    txVector.SetRuAllocation({96, 113, 113, 113, 113, 113, 113, 113}, 0);
+    txVector.SetRuAllocation({24, 27, 27, 27, 27, 27, 27, 27}, 0);
 
     CheckPhyHeaderSections(phyEntity->GetPhyHeaderSections(txVector, ppduStart), sections);
 }
@@ -1944,220 +2589,692 @@
 
     AddTestCase(new PhyHeaderSectionsTest, TestCase::Duration::QUICK);
 
-    // 20 MHz band, HeSigBDurationTest::OFDMA, even number of users per HE-SIG-B content channel
-    AddTestCase(new HeSigBDurationTest(
-                    {{{HeRu::RU_106_TONE, 1, true}, 11, 1}, {{HeRu::RU_106_TONE, 2, true}, 10, 4}},
+    const auto p80OrLow80 = true;
+    const auto s80OrHigh80 = false;
+    for (const auto p160 :
+         std::initializer_list<std::optional<bool>>{std::nullopt /* HE-SIG-B */,
+                                                    std::optional(true) /* EHT-SIG */})
+    {
+        // 20 MHz band, OFDMA, even number of users in content channel
+        AddTestCase(
+            new MuSigDurationTest({{MakeRuSpec(RuType::RU_106_TONE, 1, p80OrLow80, p160), 11, 1},
+                                   {MakeRuSpec(RuType::RU_106_TONE, 2, p80OrLow80, p160), 10, 4}},
+                                  VhtPhy::GetVhtMcs5(),
+                                  MHz_u{20},
+                                  0,
+                                  MuSigDurationTest::OFDMA,
+                                  (p160 == std::nullopt) ? RuAllocation{96} : RuAllocation{48},
+                                  std::make_pair(2, 0), // both users in content channel 1
+                                  MicroSeconds(4)),     // one OFDM symbol;
+            TestCase::Duration::QUICK);
+
+        // 40 MHz band, OFDMA, even number of users per content channel
+        AddTestCase(new MuSigDurationTest(
+                        {{MakeRuSpec(RuType::RU_106_TONE, 1, p80OrLow80, p160), 11, 1}, // CC1
+                         {MakeRuSpec(RuType::RU_106_TONE, 2, p80OrLow80, p160), 10, 4}, // CC1
+                         {MakeRuSpec(RuType::RU_52_TONE, 5, p80OrLow80, p160), 4, 1},   // CC2
+                         {MakeRuSpec(RuType::RU_52_TONE, 6, p80OrLow80, p160), 6, 2},   // CC2
+                         {MakeRuSpec(RuType::RU_52_TONE, 7, p80OrLow80, p160), 5, 3},   // CC2
+                         {MakeRuSpec(RuType::RU_52_TONE, 8, p80OrLow80, p160), 6, 2}},  // CC2
+                        VhtPhy::GetVhtMcs4(),
+                        MHz_u{40},
+                        0,
+                        MuSigDurationTest::OFDMA,
+                        (p160 == std::nullopt) ? RuAllocation{96, 112} : RuAllocation{48, 24},
+                        std::make_pair(2, 4), // two users in content channel 1 and
+                                              // four users in content channel 2
+                        MicroSeconds(4)),     // one OFDM symbol;
+                    TestCase::Duration::QUICK);
+
+        // 40 MHz band, OFDMA, odd number of users in second content channel
+        AddTestCase(new MuSigDurationTest(
+                        {{MakeRuSpec(RuType::RU_106_TONE, 1, p80OrLow80, p160), 11, 1}, // CC1
+                         {MakeRuSpec(RuType::RU_106_TONE, 2, p80OrLow80, p160), 10, 4}, // CC1
+                         {MakeRuSpec(RuType::RU_52_TONE, 5, p80OrLow80, p160), 4, 1},   // CC2
+                         {MakeRuSpec(RuType::RU_52_TONE, 6, p80OrLow80, p160), 6, 2},   // CC2
+                         {MakeRuSpec(RuType::RU_52_TONE, 7, p80OrLow80, p160), 5, 3},   // CC2
+                         {MakeRuSpec(RuType::RU_52_TONE, 8, p80OrLow80, p160), 6, 2},   // CC2
+                         {MakeRuSpec(RuType::RU_26_TONE, 14, p80OrLow80, p160), 3, 1}}, // CC2
+                        VhtPhy::GetVhtMcs3(),
+                        MHz_u{40},
+                        0,
+                        MuSigDurationTest::OFDMA,
+                        (p160 == std::nullopt) ? RuAllocation{96, 15} : RuAllocation{48, 15},
+                        std::make_pair(2, 5), // two users in content channel 1 and
+                                              // five users in content channel 2
+                        MicroSeconds(8)),     // two OFDM symbols
+                    TestCase::Duration::QUICK);
+
+        // 80 MHz band, OFDMA
+        AddTestCase(new MuSigDurationTest(
+                        {{MakeRuSpec(RuType::RU_106_TONE, 1, p80OrLow80, p160), 11, 1}, // CC1
+                         {MakeRuSpec(RuType::RU_106_TONE, 2, p80OrLow80, p160), 10, 4}, // CC1
+                         {MakeRuSpec(RuType::RU_52_TONE, 5, p80OrLow80, p160), 4, 1},   // CC2
+                         {MakeRuSpec(RuType::RU_52_TONE, 6, p80OrLow80, p160), 6, 2},   // CC2
+                         {MakeRuSpec(RuType::RU_52_TONE, 7, p80OrLow80, p160), 5, 3},   // CC2
+                         {MakeRuSpec(RuType::RU_52_TONE, 8, p80OrLow80, p160), 6, 2},   // CC2
+                         {MakeRuSpec(RuType::RU_26_TONE, 14, p80OrLow80, p160), 3, 1},  // CC2
+                         {MakeRuSpec(RuType::RU_242_TONE, 3, p80OrLow80, p160), 1, 1},  // CC1
+                         {MakeRuSpec(RuType::RU_242_TONE, 4, p80OrLow80, p160), 4, 1}}, // CC2
+                        VhtPhy::GetVhtMcs1(),
+                        MHz_u{80},
+                        0,
+                        MuSigDurationTest::OFDMA,
+                        (p160 == std::nullopt) ? RuAllocation{96, 15, 192, 192}
+                                               : RuAllocation{48, 15, 64, 64},
+                        std::make_pair(3, 6), // three users in content channel 1
+                                              // and six users in content channel 2
+                        MicroSeconds(16)),    // four OFDM symbols
+                    TestCase::Duration::QUICK);
+
+        // 80 MHz band, OFDMA, no central 26-tones RU
+        AddTestCase(new MuSigDurationTest(
+                        {{MakeRuSpec(RuType::RU_26_TONE, 1, p80OrLow80, p160), 8, 1},   // CC1
+                         {MakeRuSpec(RuType::RU_26_TONE, 2, p80OrLow80, p160), 8, 1},   // CC1
+                         {MakeRuSpec(RuType::RU_26_TONE, 3, p80OrLow80, p160), 8, 1},   // CC1
+                         {MakeRuSpec(RuType::RU_26_TONE, 4, p80OrLow80, p160), 8, 1},   // CC1
+                         {MakeRuSpec(RuType::RU_26_TONE, 5, p80OrLow80, p160), 8, 1},   // CC1
+                         {MakeRuSpec(RuType::RU_26_TONE, 6, p80OrLow80, p160), 8, 1},   // CC1
+                         {MakeRuSpec(RuType::RU_26_TONE, 7, p80OrLow80, p160), 8, 1},   // CC1
+                         {MakeRuSpec(RuType::RU_26_TONE, 8, p80OrLow80, p160), 8, 1},   // CC1
+                         {MakeRuSpec(RuType::RU_26_TONE, 9, p80OrLow80, p160), 8, 1},   // CC1
+                         {MakeRuSpec(RuType::RU_26_TONE, 10, p80OrLow80, p160), 8, 1},  // CC2
+                         {MakeRuSpec(RuType::RU_26_TONE, 11, p80OrLow80, p160), 8, 1},  // CC2
+                         {MakeRuSpec(RuType::RU_26_TONE, 12, p80OrLow80, p160), 8, 1},  // CC2
+                         {MakeRuSpec(RuType::RU_26_TONE, 13, p80OrLow80, p160), 8, 1},  // CC2
+                         {MakeRuSpec(RuType::RU_26_TONE, 14, p80OrLow80, p160), 8, 1},  // CC2
+                         {MakeRuSpec(RuType::RU_26_TONE, 15, p80OrLow80, p160), 8, 1},  // CC2
+                         {MakeRuSpec(RuType::RU_26_TONE, 16, p80OrLow80, p160), 8, 1},  // CC2
+                         {MakeRuSpec(RuType::RU_26_TONE, 17, p80OrLow80, p160), 8, 1},  // CC2
+                         {MakeRuSpec(RuType::RU_26_TONE, 18, p80OrLow80, p160), 8, 1},  // CC2
+                         {MakeRuSpec(RuType::RU_26_TONE, 20, p80OrLow80, p160), 8, 1},  // CC1
+                         {MakeRuSpec(RuType::RU_26_TONE, 21, p80OrLow80, p160), 8, 1},  // CC1
+                         {MakeRuSpec(RuType::RU_26_TONE, 22, p80OrLow80, p160), 8, 1},  // CC1
+                         {MakeRuSpec(RuType::RU_26_TONE, 23, p80OrLow80, p160), 8, 1},  // CC1
+                         {MakeRuSpec(RuType::RU_26_TONE, 24, p80OrLow80, p160), 8, 1},  // CC1
+                         {MakeRuSpec(RuType::RU_26_TONE, 25, p80OrLow80, p160), 8, 1},  // CC1
+                         {MakeRuSpec(RuType::RU_26_TONE, 26, p80OrLow80, p160), 8, 1},  // CC1
+                         {MakeRuSpec(RuType::RU_26_TONE, 27, p80OrLow80, p160), 8, 1},  // CC1
+                         {MakeRuSpec(RuType::RU_26_TONE, 28, p80OrLow80, p160), 8, 1},  // CC2
+                         {MakeRuSpec(RuType::RU_26_TONE, 29, p80OrLow80, p160), 8, 1},  // CC2
+                         {MakeRuSpec(RuType::RU_26_TONE, 30, p80OrLow80, p160), 8, 1},  // CC2
+                         {MakeRuSpec(RuType::RU_26_TONE, 31, p80OrLow80, p160), 8, 1},  // CC2
+                         {MakeRuSpec(RuType::RU_26_TONE, 32, p80OrLow80, p160), 8, 1},  // CC2
+                         {MakeRuSpec(RuType::RU_26_TONE, 33, p80OrLow80, p160), 8, 1},  // CC2
+                         {MakeRuSpec(RuType::RU_26_TONE, 34, p80OrLow80, p160), 8, 1},  // CC2
+                         {MakeRuSpec(RuType::RU_26_TONE, 35, p80OrLow80, p160), 8, 1},  // CC2
+                         {MakeRuSpec(RuType::RU_26_TONE, 36, p80OrLow80, p160), 8, 1},  // CC2
+                         {MakeRuSpec(RuType::RU_26_TONE, 37, p80OrLow80, p160), 8, 1}}, // CC2
+                        VhtPhy::GetVhtMcs5(),
+                        MHz_u{80},
+                        0,
+                        MuSigDurationTest::OFDMA,
+                        {0, 0, 0, 0},
+                        std::make_pair(18, 18), // 18 users users in each content channel
+                        MicroSeconds(12)),      // three OFDM symbols
+                    TestCase::Duration::QUICK);
+
+        // 160 MHz band, OFDMA, no central 26-tones RU
+        AddTestCase(new MuSigDurationTest(
+                        {{MakeRuSpec(RuType::RU_106_TONE, 1, p80OrLow80, p160), 11, 1}, // CC1
+                         {MakeRuSpec(RuType::RU_106_TONE, 2, p80OrLow80, p160), 10, 4}, // CC1
+                         {MakeRuSpec(RuType::RU_52_TONE, 5, p80OrLow80, p160), 4, 1},   // CC2
+                         {MakeRuSpec(RuType::RU_52_TONE, 6, p80OrLow80, p160), 6, 2},   // CC2
+                         {MakeRuSpec(RuType::RU_52_TONE, 7, p80OrLow80, p160), 5, 3},   // CC2
+                         {MakeRuSpec(RuType::RU_52_TONE, 8, p80OrLow80, p160), 6, 2},   // CC2
+                         {MakeRuSpec(RuType::RU_26_TONE, 14, p80OrLow80, p160), 3, 1},  // CC2
+                         {MakeRuSpec(RuType::RU_242_TONE, 3, p80OrLow80, p160), 1, 1},  // CC1
+                         {MakeRuSpec(RuType::RU_242_TONE, 4, p80OrLow80, p160), 4, 1},  // CC2
+                         {MakeRuSpec(RuType::RU_996_TONE, 1, s80OrHigh80, p160),
+                          1,
+                          1}}, // CC1 or CC2 => CC1 for better split
+                        VhtPhy::GetVhtMcs1(),
+                        MHz_u{160},
+                        0,
+                        MuSigDurationTest::OFDMA,
+                        (p160 == std::nullopt) ? RuAllocation{96, 15, 192, 192, 208, 115, 208, 115}
+                                               : RuAllocation{48, 15, 64, 64, 80, 30, 80, 30},
+                        std::make_pair(4, 6), // four users in content channel 1 and
+                                              // seven users in content channel 2
+                        MicroSeconds(16)),    // four OFDM symbols
+                    TestCase::Duration::QUICK);
+
+        // 20 MHz band, OFDMA, one unallocated RU at the middle
+        AddTestCase(
+            new MuSigDurationTest(
+                {{MakeRuSpec(RuType::RU_26_TONE, 1, p80OrLow80, p160), 11, 1},  // CC1
+                 {MakeRuSpec(RuType::RU_26_TONE, 2, p80OrLow80, p160), 11, 1},  // CC1
+                 {MakeRuSpec(RuType::RU_26_TONE, 3, p80OrLow80, p160), 11, 1},  // CC1
+                 {MakeRuSpec(RuType::RU_26_TONE, 4, p80OrLow80, p160), 11, 1},  // CC1
+                 {MakeRuSpec(RuType::RU_26_TONE, 6, p80OrLow80, p160), 11, 1},  // CC1
+                 {MakeRuSpec(RuType::RU_26_TONE, 7, p80OrLow80, p160), 11, 1},  // CC1
+                 {MakeRuSpec(RuType::RU_26_TONE, 8, p80OrLow80, p160), 11, 1},  // CC1
+                 {MakeRuSpec(RuType::RU_26_TONE, 9, p80OrLow80, p160), 11, 1}}, // CC1
+                VhtPhy::GetVhtMcs5(),
+                MHz_u{20},
+                0,
+                MuSigDurationTest::OFDMA,
+                {0},
+                std::make_pair(9, 0), // 9 users (8 users + 1 empty user) in content channel 1
+                MicroSeconds(8)),     // two OFDM symbols
+            TestCase::Duration::QUICK);
+
+        // 40 MHz band, OFDMA, unallocated RUs at the begin and at the end of the
+        // first 20 MHz subband and in the middle of the second 20 MHz subband
+        AddTestCase(
+            new MuSigDurationTest(
+                {{MakeRuSpec(RuType::RU_52_TONE, 2, p80OrLow80, p160), 10, 1},  // CC1
+                 {MakeRuSpec(RuType::RU_52_TONE, 3, p80OrLow80, p160), 10, 2},  // CC1
+                 {MakeRuSpec(RuType::RU_52_TONE, 5, p80OrLow80, p160), 11, 1},  // CC2
+                 {MakeRuSpec(RuType::RU_52_TONE, 8, p80OrLow80, p160), 11, 2}}, // CC2
+                VhtPhy::GetVhtMcs5(),
+                MHz_u{40},
+                0,
+                MuSigDurationTest::OFDMA,
+                (p160 == std::nullopt) ? RuAllocation{112, 112} : RuAllocation{24, 24},
+                std::make_pair(4,
+                               4), // 4 users (2 users + 2 empty users) in each content channel
+                MicroSeconds(4)),  // one OFDM symbol
+            TestCase::Duration::QUICK);
+
+        // 40 MHz band, OFDMA, one unallocated RUs in the first 20 MHz subband and
+        // two unallocated RUs in second 20 MHz subband
+        AddTestCase(
+            new MuSigDurationTest(
+                {{MakeRuSpec(RuType::RU_52_TONE, 1, p80OrLow80, p160), 10, 1},  // CC1
+                 {MakeRuSpec(RuType::RU_52_TONE, 2, p80OrLow80, p160), 10, 2},  // CC1
+                 {MakeRuSpec(RuType::RU_52_TONE, 3, p80OrLow80, p160), 11, 1},  // CC1
+                 {MakeRuSpec(RuType::RU_52_TONE, 5, p80OrLow80, p160), 11, 2},  // CC2
+                 {MakeRuSpec(RuType::RU_52_TONE, 6, p80OrLow80, p160), 11, 3}}, // CC2
+                VhtPhy::GetVhtMcs5(),
+                MHz_u{40},
+                0,
+                MuSigDurationTest::OFDMA,
+                (p160 == std::nullopt) ? RuAllocation{112, 112} : RuAllocation{24, 24},
+                std::make_pair(4,
+                               4), // 4 users (3 users + 1 empty user) in content channel 1 and
+                                   // 4 users (2 users + 2 empty users) in content channel 2
+                MicroSeconds(4)),  // one OFDM symbol
+            TestCase::Duration::QUICK);
+    }
+
+    // 80 MHz band, OFDMA, central 26-tones RU (11ax only)
+    AddTestCase(new MuSigDurationTest(
+                    {{HeRu::RuSpec{RuType::RU_26_TONE, 1, true}, 8, 1},   // CC1
+                     {HeRu::RuSpec{RuType::RU_26_TONE, 2, true}, 8, 1},   // CC1
+                     {HeRu::RuSpec{RuType::RU_26_TONE, 3, true}, 8, 1},   // CC1
+                     {HeRu::RuSpec{RuType::RU_26_TONE, 4, true}, 8, 1},   // CC1
+                     {HeRu::RuSpec{RuType::RU_26_TONE, 5, true}, 8, 1},   // CC1
+                     {HeRu::RuSpec{RuType::RU_26_TONE, 6, true}, 8, 1},   // CC1
+                     {HeRu::RuSpec{RuType::RU_26_TONE, 7, true}, 8, 1},   // CC1
+                     {HeRu::RuSpec{RuType::RU_26_TONE, 8, true}, 8, 1},   // CC1
+                     {HeRu::RuSpec{RuType::RU_26_TONE, 9, true}, 8, 1},   // CC1
+                     {HeRu::RuSpec{RuType::RU_26_TONE, 10, true}, 8, 1},  // CC2
+                     {HeRu::RuSpec{RuType::RU_26_TONE, 11, true}, 8, 1},  // CC2
+                     {HeRu::RuSpec{RuType::RU_26_TONE, 12, true}, 8, 1},  // CC2
+                     {HeRu::RuSpec{RuType::RU_26_TONE, 13, true}, 8, 1},  // CC2
+                     {HeRu::RuSpec{RuType::RU_26_TONE, 14, true}, 8, 1},  // CC2
+                     {HeRu::RuSpec{RuType::RU_26_TONE, 15, true}, 8, 1},  // CC2
+                     {HeRu::RuSpec{RuType::RU_26_TONE, 16, true}, 8, 1},  // CC2
+                     {HeRu::RuSpec{RuType::RU_26_TONE, 17, true}, 8, 1},  // CC2
+                     {HeRu::RuSpec{RuType::RU_26_TONE, 18, true}, 8, 1},  // CC2
+                     {HeRu::RuSpec{RuType::RU_26_TONE, 19, true}, 8, 1},  // CC1
+                     {HeRu::RuSpec{RuType::RU_26_TONE, 20, true}, 8, 1},  // CC1
+                     {HeRu::RuSpec{RuType::RU_26_TONE, 21, true}, 8, 1},  // CC1
+                     {HeRu::RuSpec{RuType::RU_26_TONE, 22, true}, 8, 1},  // CC1
+                     {HeRu::RuSpec{RuType::RU_26_TONE, 23, true}, 8, 1},  // CC1
+                     {HeRu::RuSpec{RuType::RU_26_TONE, 24, true}, 8, 1},  // CC1
+                     {HeRu::RuSpec{RuType::RU_26_TONE, 25, true}, 8, 1},  // CC1
+                     {HeRu::RuSpec{RuType::RU_26_TONE, 26, true}, 8, 1},  // CC1
+                     {HeRu::RuSpec{RuType::RU_26_TONE, 27, true}, 8, 1},  // CC1
+                     {HeRu::RuSpec{RuType::RU_26_TONE, 28, true}, 8, 1},  // CC2
+                     {HeRu::RuSpec{RuType::RU_26_TONE, 29, true}, 8, 1},  // CC2
+                     {HeRu::RuSpec{RuType::RU_26_TONE, 30, true}, 8, 1},  // CC2
+                     {HeRu::RuSpec{RuType::RU_26_TONE, 31, true}, 8, 1},  // CC2
+                     {HeRu::RuSpec{RuType::RU_26_TONE, 32, true}, 8, 1},  // CC2
+                     {HeRu::RuSpec{RuType::RU_26_TONE, 33, true}, 8, 1},  // CC2
+                     {HeRu::RuSpec{RuType::RU_26_TONE, 34, true}, 8, 1},  // CC2
+                     {HeRu::RuSpec{RuType::RU_26_TONE, 35, true}, 8, 1},  // CC2
+                     {HeRu::RuSpec{RuType::RU_26_TONE, 36, true}, 8, 1},  // CC2
+                     {HeRu::RuSpec{RuType::RU_26_TONE, 37, true}, 8, 1}}, // CC2
                     VhtPhy::GetVhtMcs5(),
-                    MHz_u{20},
-                    HeSigBDurationTest::OFDMA,
-                    {96},
-                    std::make_pair(2, 0), // both users in HE-SIG-B content channel 1
-                    MicroSeconds(4)),     // one OFDM symbol;
+                    MHz_u{80},
+                    0,
+                    MuSigDurationTest::OFDMA,
+                    {0, 0, 0, 0},
+                    std::make_pair(19,
+                                   18), // 19 users (18 users + 1 central tones-RU user) in content
+                                        // channel 1 and 18 users user in content channel 2
+                    MicroSeconds(12)),  // three OFDM symbols
                 TestCase::Duration::QUICK);
 
-    // 40 MHz band, HeSigBDurationTest::OFDMA, even number of users per HE-SIG-B content channel
-    AddTestCase(
-        new HeSigBDurationTest({{{HeRu::RU_106_TONE, 1, true}, 11, 1},
-                                {{HeRu::RU_106_TONE, 2, true}, 10, 4},
-                                {{HeRu::RU_52_TONE, 5, true}, 4, 1},
-                                {{HeRu::RU_52_TONE, 6, true}, 6, 2},
-                                {{HeRu::RU_52_TONE, 7, true}, 5, 3},
-                                {{HeRu::RU_52_TONE, 8, true}, 6, 2}},
-                               VhtPhy::GetVhtMcs4(),
-                               MHz_u{40},
-                               HeSigBDurationTest::OFDMA,
-                               {96, 112},
-                               std::make_pair(2, 4), // two users in HE-SIG-B content channel 1 and
-                                                     // four users in HE-SIG-B content channel 2
-                               MicroSeconds(4)),     // one OFDM symbol;
-        TestCase::Duration::QUICK);
+    // 160 MHz band, OFDMA, central 26-tones RU in low 80 MHz (11ax only)
+    AddTestCase(new MuSigDurationTest({{HeRu::RuSpec{RuType::RU_106_TONE, 1, true}, 11, 1}, // CC1
+                                       {HeRu::RuSpec{RuType::RU_106_TONE, 2, true}, 10, 4}, // CC1
+                                       {HeRu::RuSpec{RuType::RU_52_TONE, 5, true}, 4, 1},   // CC2
+                                       {HeRu::RuSpec{RuType::RU_52_TONE, 6, true}, 6, 2},   // CC2
+                                       {HeRu::RuSpec{RuType::RU_52_TONE, 7, true}, 5, 3},   // CC2
+                                       {HeRu::RuSpec{RuType::RU_52_TONE, 8, true}, 6, 2},   // CC2
+                                       {HeRu::RuSpec{RuType::RU_26_TONE, 14, true}, 3, 1},  // CC2
+                                       {HeRu::RuSpec{RuType::RU_26_TONE, 19, true}, 8, 2},  // CC1
+                                       {HeRu::RuSpec{RuType::RU_242_TONE, 3, true}, 1, 1},  // CC1
+                                       {HeRu::RuSpec{RuType::RU_242_TONE, 4, true}, 4, 1},  // CC2
+                                       {HeRu::RuSpec{RuType::RU_996_TONE, 1, false},
+                                        1,
+                                        1}}, // CC1 or CC2 => CC1 for better split
+                                      VhtPhy::GetVhtMcs1(),
+                                      MHz_u{160},
+                                      0,
+                                      MuSigDurationTest::OFDMA,
+                                      {96, 15, 192, 192, 208, 115, 208, 115},
+                                      std::make_pair(5, 6), // five users in content channel 1 and
+                                                            // seven users in content channel 2
+                                      MicroSeconds(16)),    // four OFDM symbols
+                TestCase::Duration::QUICK);
 
-    // 40 MHz band, HeSigBDurationTest::OFDMA, odd number of users per HE-SIG-B content channel
+    // 160 MHz band, OFDMA, central 26-tones RU in high 80 MHz (11ax only)
     AddTestCase(
-        new HeSigBDurationTest({{{HeRu::RU_106_TONE, 1, true}, 11, 1},
-                                {{HeRu::RU_106_TONE, 2, true}, 10, 4},
-                                {{HeRu::RU_52_TONE, 5, true}, 4, 1},
-                                {{HeRu::RU_52_TONE, 6, true}, 6, 2},
-                                {{HeRu::RU_52_TONE, 7, true}, 5, 3},
-                                {{HeRu::RU_52_TONE, 8, true}, 6, 2},
-                                {{HeRu::RU_26_TONE, 14, true}, 3, 1}},
-                               VhtPhy::GetVhtMcs3(),
-                               MHz_u{40},
-                               HeSigBDurationTest::OFDMA,
-                               {96, 15},
-                               std::make_pair(2, 5), // two users in HE-SIG-B content channel 1 and
-                                                     // five users in HE-SIG-B content channel 2
-                               MicroSeconds(8)),     // two OFDM symbols
+        new MuSigDurationTest({{HeRu::RuSpec{RuType::RU_106_TONE, 1, true}, 11, 1},  // CC1
+                               {HeRu::RuSpec{RuType::RU_106_TONE, 2, true}, 10, 4},  // CC1
+                               {HeRu::RuSpec{RuType::RU_106_TONE, 3, true}, 11, 1},  // CC2
+                               {HeRu::RuSpec{RuType::RU_106_TONE, 4, true}, 10, 4},  // CC2
+                               {HeRu::RuSpec{RuType::RU_242_TONE, 3, true}, 10, 1},  // CC1
+                               {HeRu::RuSpec{RuType::RU_242_TONE, 4, true}, 11, 1},  // CC2
+                               {HeRu::RuSpec{RuType::RU_484_TONE, 1, false}, 7, 1},  // CC1 or CC2
+                               {HeRu::RuSpec{RuType::RU_26_TONE, 19, false}, 8, 2},  // CC2
+                               {HeRu::RuSpec{RuType::RU_484_TONE, 2, false}, 9, 1}}, // CC1 or CC2
+                              VhtPhy::GetVhtMcs5(),
+                              MHz_u{160},
+                              0,
+                              MuSigDurationTest::OFDMA,
+                              {96, 96, 192, 192, 200, 114, 114, 200},
+                              std::make_pair(4, 5), // two users in content channel 1 and
+                                                    // one user in content channel 2
+                              MicroSeconds(4)),     // two OFDM symbols
         TestCase::Duration::QUICK);
 
-    // 80 MHz band, OFDMA
+    // 160 MHz band, OFDMA, central 26-tones RU in both 80 MHz (11ax only)
     AddTestCase(
-        new HeSigBDurationTest({{{HeRu::RU_106_TONE, 1, true}, 11, 1},
-                                {{HeRu::RU_106_TONE, 2, true}, 10, 4},
-                                {{HeRu::RU_52_TONE, 5, true}, 4, 1},
-                                {{HeRu::RU_52_TONE, 6, true}, 6, 2},
-                                {{HeRu::RU_52_TONE, 7, true}, 5, 3},
-                                {{HeRu::RU_52_TONE, 8, true}, 6, 2},
-                                {{HeRu::RU_26_TONE, 14, true}, 3, 1},
-                                {{HeRu::RU_242_TONE, 3, true}, 1, 1},
-                                {{HeRu::RU_242_TONE, 4, true}, 4, 1}},
-                               VhtPhy::GetVhtMcs1(),
-                               MHz_u{80},
-                               HeSigBDurationTest::OFDMA,
-                               {96, 15, 192, 192},
-                               std::make_pair(3, 6), // three users in HE-SIG-B content channel 1
-                                                     // and six users in HE-SIG-B content channel 2
-                               MicroSeconds(16)),    // four OFDM symbols
+        new MuSigDurationTest({{HeRu::RuSpec{RuType::RU_106_TONE, 1, true}, 11, 1},  // CC1
+                               {HeRu::RuSpec{RuType::RU_106_TONE, 2, true}, 10, 4},  // CC1
+                               {HeRu::RuSpec{RuType::RU_106_TONE, 3, true}, 11, 1},  // CC2
+                               {HeRu::RuSpec{RuType::RU_106_TONE, 4, true}, 10, 4},  // CC2
+                               {HeRu::RuSpec{RuType::RU_26_TONE, 19, true}, 8, 2},   // CC1
+                               {HeRu::RuSpec{RuType::RU_242_TONE, 3, true}, 10, 1},  // CC1
+                               {HeRu::RuSpec{RuType::RU_242_TONE, 4, true}, 11, 1},  // CC2
+                               {HeRu::RuSpec{RuType::RU_484_TONE, 1, false}, 7, 1},  // CC1 or CC2
+                               {HeRu::RuSpec{RuType::RU_26_TONE, 19, false}, 8, 2},  // CC2
+                               {HeRu::RuSpec{RuType::RU_484_TONE, 2, false}, 9, 1}}, // CC1 or CC2
+                              VhtPhy::GetVhtMcs5(),
+                              MHz_u{160},
+                              0,
+                              MuSigDurationTest::OFDMA,
+                              {96, 96, 192, 192, 200, 114, 114, 200},
+                              std::make_pair(5, 5), // two users in content channel 1 and
+                                                    // one user in content channel 2
+                              MicroSeconds(4)),     // two OFDM symbols
         TestCase::Duration::QUICK);
 
-    // 160 MHz band, OFDMA
+    // 160 MHz band, OFDMA, 11ax maximum number of users
+    AddTestCase(new MuSigDurationTest({{HeRu::RuSpec{RuType::RU_26_TONE, 1, true}, 8, 1},    // CC1
+                                       {HeRu::RuSpec{RuType::RU_26_TONE, 2, true}, 8, 1},    // CC1
+                                       {HeRu::RuSpec{RuType::RU_26_TONE, 3, true}, 8, 1},    // CC1
+                                       {HeRu::RuSpec{RuType::RU_26_TONE, 4, true}, 8, 1},    // CC1
+                                       {HeRu::RuSpec{RuType::RU_26_TONE, 5, true}, 8, 1},    // CC1
+                                       {HeRu::RuSpec{RuType::RU_26_TONE, 6, true}, 8, 1},    // CC1
+                                       {HeRu::RuSpec{RuType::RU_26_TONE, 7, true}, 8, 1},    // CC1
+                                       {HeRu::RuSpec{RuType::RU_26_TONE, 8, true}, 8, 1},    // CC1
+                                       {HeRu::RuSpec{RuType::RU_26_TONE, 9, true}, 8, 1},    // CC1
+                                       {HeRu::RuSpec{RuType::RU_26_TONE, 10, true}, 8, 1},   // CC2
+                                       {HeRu::RuSpec{RuType::RU_26_TONE, 11, true}, 8, 1},   // CC2
+                                       {HeRu::RuSpec{RuType::RU_26_TONE, 12, true}, 8, 1},   // CC2
+                                       {HeRu::RuSpec{RuType::RU_26_TONE, 13, true}, 8, 1},   // CC2
+                                       {HeRu::RuSpec{RuType::RU_26_TONE, 14, true}, 8, 1},   // CC2
+                                       {HeRu::RuSpec{RuType::RU_26_TONE, 15, true}, 8, 1},   // CC2
+                                       {HeRu::RuSpec{RuType::RU_26_TONE, 16, true}, 8, 1},   // CC2
+                                       {HeRu::RuSpec{RuType::RU_26_TONE, 17, true}, 8, 1},   // CC2
+                                       {HeRu::RuSpec{RuType::RU_26_TONE, 18, true}, 8, 1},   // CC2
+                                       {HeRu::RuSpec{RuType::RU_26_TONE, 19, true}, 8, 1},   // CC1
+                                       {HeRu::RuSpec{RuType::RU_26_TONE, 20, true}, 8, 1},   // CC1
+                                       {HeRu::RuSpec{RuType::RU_26_TONE, 21, true}, 8, 1},   // CC1
+                                       {HeRu::RuSpec{RuType::RU_26_TONE, 22, true}, 8, 1},   // CC1
+                                       {HeRu::RuSpec{RuType::RU_26_TONE, 23, true}, 8, 1},   // CC1
+                                       {HeRu::RuSpec{RuType::RU_26_TONE, 24, true}, 8, 1},   // CC1
+                                       {HeRu::RuSpec{RuType::RU_26_TONE, 25, true}, 8, 1},   // CC1
+                                       {HeRu::RuSpec{RuType::RU_26_TONE, 26, true}, 8, 1},   // CC1
+                                       {HeRu::RuSpec{RuType::RU_26_TONE, 27, true}, 8, 1},   // CC1
+                                       {HeRu::RuSpec{RuType::RU_26_TONE, 28, true}, 8, 1},   // CC2
+                                       {HeRu::RuSpec{RuType::RU_26_TONE, 29, true}, 8, 1},   // CC2
+                                       {HeRu::RuSpec{RuType::RU_26_TONE, 30, true}, 8, 1},   // CC2
+                                       {HeRu::RuSpec{RuType::RU_26_TONE, 31, true}, 8, 1},   // CC2
+                                       {HeRu::RuSpec{RuType::RU_26_TONE, 32, true}, 8, 1},   // CC2
+                                       {HeRu::RuSpec{RuType::RU_26_TONE, 33, true}, 8, 1},   // CC2
+                                       {HeRu::RuSpec{RuType::RU_26_TONE, 34, true}, 8, 1},   // CC2
+                                       {HeRu::RuSpec{RuType::RU_26_TONE, 35, true}, 8, 1},   // CC2
+                                       {HeRu::RuSpec{RuType::RU_26_TONE, 36, true}, 8, 1},   // CC2
+                                       {HeRu::RuSpec{RuType::RU_26_TONE, 37, true}, 8, 1},   // CC2
+                                       {HeRu::RuSpec{RuType::RU_26_TONE, 1, false}, 8, 1},   // CC1
+                                       {HeRu::RuSpec{RuType::RU_26_TONE, 2, false}, 8, 1},   // CC1
+                                       {HeRu::RuSpec{RuType::RU_26_TONE, 3, false}, 8, 1},   // CC1
+                                       {HeRu::RuSpec{RuType::RU_26_TONE, 4, false}, 8, 1},   // CC1
+                                       {HeRu::RuSpec{RuType::RU_26_TONE, 5, false}, 8, 1},   // CC1
+                                       {HeRu::RuSpec{RuType::RU_26_TONE, 6, false}, 8, 1},   // CC1
+                                       {HeRu::RuSpec{RuType::RU_26_TONE, 7, false}, 8, 1},   // CC1
+                                       {HeRu::RuSpec{RuType::RU_26_TONE, 8, false}, 8, 1},   // CC1
+                                       {HeRu::RuSpec{RuType::RU_26_TONE, 9, false}, 8, 1},   // CC1
+                                       {HeRu::RuSpec{RuType::RU_26_TONE, 10, false}, 8, 1},  // CC2
+                                       {HeRu::RuSpec{RuType::RU_26_TONE, 11, false}, 8, 1},  // CC2
+                                       {HeRu::RuSpec{RuType::RU_26_TONE, 12, false}, 8, 1},  // CC2
+                                       {HeRu::RuSpec{RuType::RU_26_TONE, 13, false}, 8, 1},  // CC2
+                                       {HeRu::RuSpec{RuType::RU_26_TONE, 14, false}, 8, 1},  // CC2
+                                       {HeRu::RuSpec{RuType::RU_26_TONE, 15, false}, 8, 1},  // CC2
+                                       {HeRu::RuSpec{RuType::RU_26_TONE, 16, false}, 8, 1},  // CC2
+                                       {HeRu::RuSpec{RuType::RU_26_TONE, 17, false}, 8, 1},  // CC2
+                                       {HeRu::RuSpec{RuType::RU_26_TONE, 18, false}, 8, 1},  // CC2
+                                       {HeRu::RuSpec{RuType::RU_26_TONE, 19, false}, 8, 1},  // CC1
+                                       {HeRu::RuSpec{RuType::RU_26_TONE, 20, false}, 8, 1},  // CC1
+                                       {HeRu::RuSpec{RuType::RU_26_TONE, 21, false}, 8, 1},  // CC1
+                                       {HeRu::RuSpec{RuType::RU_26_TONE, 22, false}, 8, 1},  // CC1
+                                       {HeRu::RuSpec{RuType::RU_26_TONE, 23, false}, 8, 1},  // CC1
+                                       {HeRu::RuSpec{RuType::RU_26_TONE, 24, false}, 8, 1},  // CC1
+                                       {HeRu::RuSpec{RuType::RU_26_TONE, 25, false}, 8, 1},  // CC1
+                                       {HeRu::RuSpec{RuType::RU_26_TONE, 26, false}, 8, 1},  // CC1
+                                       {HeRu::RuSpec{RuType::RU_26_TONE, 27, false}, 8, 1},  // CC1
+                                       {HeRu::RuSpec{RuType::RU_26_TONE, 28, false}, 8, 1},  // CC2
+                                       {HeRu::RuSpec{RuType::RU_26_TONE, 29, false}, 8, 1},  // CC2
+                                       {HeRu::RuSpec{RuType::RU_26_TONE, 30, false}, 8, 1},  // CC2
+                                       {HeRu::RuSpec{RuType::RU_26_TONE, 31, false}, 8, 1},  // CC2
+                                       {HeRu::RuSpec{RuType::RU_26_TONE, 32, false}, 8, 1},  // CC2
+                                       {HeRu::RuSpec{RuType::RU_26_TONE, 33, false}, 8, 1},  // CC2
+                                       {HeRu::RuSpec{RuType::RU_26_TONE, 34, false}, 8, 1},  // CC2
+                                       {HeRu::RuSpec{RuType::RU_26_TONE, 35, false}, 8, 1},  // CC2
+                                       {HeRu::RuSpec{RuType::RU_26_TONE, 36, false}, 8, 1},  // CC2
+                                       {HeRu::RuSpec{RuType::RU_26_TONE, 37, false}, 8, 1}}, // CC2
+                                      VhtPhy::GetVhtMcs5(),
+                                      MHz_u{160},
+                                      0,
+                                      MuSigDurationTest::OFDMA,
+                                      {0, 0, 0, 0, 0, 0, 0, 0},
+                                      std::make_pair(37,
+                                                     37), // 37 users (36 users + 1 central tones-RU
+                                                          // user) in each content channel
+                                      MicroSeconds(20)),  // five OFDM symbols
+                TestCase::Duration::QUICK);
+
+    // 320 MHz band, OFDMA, 11be maximum number of users
     AddTestCase(
-        new HeSigBDurationTest({{{HeRu::RU_106_TONE, 1, true}, 11, 1},
-                                {{HeRu::RU_106_TONE, 2, true}, 10, 4},
-                                {{HeRu::RU_52_TONE, 5, true}, 4, 1},
-                                {{HeRu::RU_52_TONE, 6, true}, 6, 2},
-                                {{HeRu::RU_52_TONE, 7, true}, 5, 3},
-                                {{HeRu::RU_52_TONE, 8, true}, 6, 2},
-                                {{HeRu::RU_26_TONE, 14, true}, 3, 1},
-                                {{HeRu::RU_242_TONE, 3, true}, 1, 1},
-                                {{HeRu::RU_242_TONE, 4, true}, 4, 1},
-                                {{HeRu::RU_996_TONE, 1, false}, 1, 1}},
-                               VhtPhy::GetVhtMcs1(),
-                               MHz_u{160},
-                               HeSigBDurationTest::OFDMA,
-                               {96, 15, 192, 192, 208, 208, 208, 208},
-                               std::make_pair(4, 7), // four users in HE-SIG-B content channel 1 and
-                                                     // seven users in HE-SIG-B content channel 2
-                               MicroSeconds(20)),    // five OFDM symbols
+        new MuSigDurationTest({{EhtRu::RuSpec{RuType::RU_26_TONE, 1, true, true}, 8, 1},     // CC1
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 2, true, true}, 8, 1},     // CC1
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 3, true, true}, 8, 1},     // CC1
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 4, true, true}, 8, 1},     // CC1
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 5, true, true}, 8, 1},     // CC1
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 6, true, true}, 8, 1},     // CC1
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 7, true, true}, 8, 1},     // CC1
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 8, true, true}, 8, 1},     // CC1
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 9, true, true}, 8, 1},     // CC1
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 10, true, true}, 8, 1},    // CC2
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 11, true, true}, 8, 1},    // CC2
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 12, true, true}, 8, 1},    // CC2
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 13, true, true}, 8, 1},    // CC2
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 14, true, true}, 8, 1},    // CC2
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 15, true, true}, 8, 1},    // CC2
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 16, true, true}, 8, 1},    // CC2
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 17, true, true}, 8, 1},    // CC2
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 18, true, true}, 8, 1},    // CC2
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 20, true, true}, 8, 1},    // CC1
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 21, true, true}, 8, 1},    // CC1
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 22, true, true}, 8, 1},    // CC1
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 23, true, true}, 8, 1},    // CC1
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 24, true, true}, 8, 1},    // CC1
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 25, true, true}, 8, 1},    // CC1
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 26, true, true}, 8, 1},    // CC1
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 27, true, true}, 8, 1},    // CC1
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 28, true, true}, 8, 1},    // CC2
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 29, true, true}, 8, 1},    // CC2
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 30, true, true}, 8, 1},    // CC2
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 31, true, true}, 8, 1},    // CC2
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 32, true, true}, 8, 1},    // CC2
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 33, true, true}, 8, 1},    // CC2
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 34, true, true}, 8, 1},    // CC2
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 35, true, true}, 8, 1},    // CC2
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 36, true, true}, 8, 1},    // CC2
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 37, true, true}, 8, 1},    // CC2
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 1, true, false}, 8, 1},    // CC1
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 2, true, false}, 8, 1},    // CC1
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 3, true, false}, 8, 1},    // CC1
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 4, true, false}, 8, 1},    // CC1
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 5, true, false}, 8, 1},    // CC1
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 6, true, false}, 8, 1},    // CC1
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 7, true, false}, 8, 1},    // CC1
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 8, true, false}, 8, 1},    // CC1
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 9, true, false}, 8, 1},    // CC1
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 10, true, false}, 8, 1},   // CC2
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 11, true, false}, 8, 1},   // CC2
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 12, true, false}, 8, 1},   // CC2
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 13, true, false}, 8, 1},   // CC2
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 14, true, false}, 8, 1},   // CC2
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 15, true, false}, 8, 1},   // CC2
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 16, true, false}, 8, 1},   // CC2
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 17, true, false}, 8, 1},   // CC2
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 18, true, false}, 8, 1},   // CC2
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 20, true, false}, 8, 1},   // CC1
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 21, true, false}, 8, 1},   // CC1
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 22, true, false}, 8, 1},   // CC1
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 23, true, false}, 8, 1},   // CC1
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 24, true, false}, 8, 1},   // CC1
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 25, true, false}, 8, 1},   // CC1
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 26, true, false}, 8, 1},   // CC1
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 27, true, false}, 8, 1},   // CC1
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 28, true, false}, 8, 1},   // CC2
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 29, true, false}, 8, 1},   // CC2
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 30, true, false}, 8, 1},   // CC2
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 31, true, false}, 8, 1},   // CC2
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 32, true, false}, 8, 1},   // CC2
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 33, true, false}, 8, 1},   // CC2
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 34, true, false}, 8, 1},   // CC2
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 35, true, false}, 8, 1},   // CC2
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 36, true, false}, 8, 1},   // CC2
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 37, true, false}, 8, 1},   // CC2
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 1, false, true}, 8, 1},    // CC1
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 2, false, true}, 8, 1},    // CC1
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 3, false, true}, 8, 1},    // CC1
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 4, false, true}, 8, 1},    // CC1
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 5, false, true}, 8, 1},    // CC1
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 6, false, true}, 8, 1},    // CC1
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 7, false, true}, 8, 1},    // CC1
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 8, false, true}, 8, 1},    // CC1
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 9, false, true}, 8, 1},    // CC1
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 10, false, true}, 8, 1},   // CC2
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 11, false, true}, 8, 1},   // CC2
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 12, false, true}, 8, 1},   // CC2
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 13, false, true}, 8, 1},   // CC2
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 14, false, true}, 8, 1},   // CC2
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 15, false, true}, 8, 1},   // CC2
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 16, false, true}, 8, 1},   // CC2
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 17, false, true}, 8, 1},   // CC2
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 18, false, true}, 8, 1},   // CC2
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 20, false, true}, 8, 1},   // CC1
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 21, false, true}, 8, 1},   // CC1
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 22, false, true}, 8, 1},   // CC1
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 23, false, true}, 8, 1},   // CC1
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 24, false, true}, 8, 1},   // CC1
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 25, false, true}, 8, 1},   // CC1
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 26, false, true}, 8, 1},   // CC1
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 27, false, true}, 8, 1},   // CC1
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 28, false, true}, 8, 1},   // CC2
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 29, false, true}, 8, 1},   // CC2
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 30, false, true}, 8, 1},   // CC2
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 31, false, true}, 8, 1},   // CC2
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 32, false, true}, 8, 1},   // CC2
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 33, false, true}, 8, 1},   // CC2
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 34, false, true}, 8, 1},   // CC2
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 35, false, true}, 8, 1},   // CC2
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 36, false, true}, 8, 1},   // CC2
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 37, false, true}, 8, 1},   // CC2
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 1, false, false}, 8, 1},   // CC1
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 2, false, false}, 8, 1},   // CC1
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 3, false, false}, 8, 1},   // CC1
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 4, false, false}, 8, 1},   // CC1
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 5, false, false}, 8, 1},   // CC1
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 6, false, false}, 8, 1},   // CC1
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 7, false, false}, 8, 1},   // CC1
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 8, false, false}, 8, 1},   // CC1
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 9, false, false}, 8, 1},   // CC1
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 10, false, false}, 8, 1},  // CC2
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 11, false, false}, 8, 1},  // CC2
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 12, false, false}, 8, 1},  // CC2
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 13, false, false}, 8, 1},  // CC2
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 14, false, false}, 8, 1},  // CC2
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 15, false, false}, 8, 1},  // CC2
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 16, false, false}, 8, 1},  // CC2
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 17, false, false}, 8, 1},  // CC2
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 18, false, false}, 8, 1},  // CC2
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 20, false, false}, 8, 1},  // CC1
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 21, false, false}, 8, 1},  // CC1
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 22, false, false}, 8, 1},  // CC1
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 23, false, false}, 8, 1},  // CC1
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 24, false, false}, 8, 1},  // CC1
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 25, false, false}, 8, 1},  // CC1
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 26, false, false}, 8, 1},  // CC1
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 27, false, false}, 8, 1},  // CC1
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 28, false, false}, 8, 1},  // CC2
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 29, false, false}, 8, 1},  // CC2
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 30, false, false}, 8, 1},  // CC2
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 31, false, false}, 8, 1},  // CC2
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 32, false, false}, 8, 1},  // CC2
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 33, false, false}, 8, 1},  // CC2
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 34, false, false}, 8, 1},  // CC2
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 35, false, false}, 8, 1},  // CC2
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 36, false, false}, 8, 1},  // CC2
+                               {EhtRu::RuSpec{RuType::RU_26_TONE, 37, false, false}, 8, 1}}, // CC2
+                              VhtPhy::GetVhtMcs5(),
+                              MHz_u{320},
+                              0,
+                              MuSigDurationTest::OFDMA,
+                              {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+                              std::make_pair(72,
+                                             72), // 72 users in each content channel
+                              MicroSeconds(40)),  // ten OFDM symbols
         TestCase::Duration::QUICK);
 
-    // 20 MHz band, HeSigBDurationTest::OFDMA, one unallocated RU at the middle
+    // 160 MHz band, OFDMA, 11ax single-user using 2x996 tones RU
     AddTestCase(
-        new HeSigBDurationTest({{{HeRu::RU_26_TONE, 1, true}, 11, 1},
-                                {{HeRu::RU_26_TONE, 2, true}, 11, 1},
-                                {{HeRu::RU_26_TONE, 3, true}, 11, 1},
-                                {{HeRu::RU_26_TONE, 4, true}, 11, 1},
-                                {{HeRu::RU_26_TONE, 6, true}, 11, 1},
-                                {{HeRu::RU_26_TONE, 7, true}, 11, 1},
-                                {{HeRu::RU_26_TONE, 8, true}, 11, 1},
-                                {{HeRu::RU_26_TONE, 9, true}, 11, 1}},
-                               VhtPhy::GetVhtMcs5(),
-                               MHz_u{20},
-                               HeSigBDurationTest::OFDMA,
-                               {0},
-                               std::make_pair(9, 0), // 9 users in HE-SIG-B content channel 1
-                               MicroSeconds(8)),     // two OFDM symbols
+        new MuSigDurationTest({{HeRu::RuSpec{RuType::RU_2x996_TONE, 1, true}, 8, 1}}, // CC1
+                              VhtPhy::GetVhtMcs5(),
+                              MHz_u{160},
+                              0,
+                              MuSigDurationTest::OFDMA,
+                              {208, 208, 208, 208, 208, 208, 208, 208},
+                              std::make_pair(1, 0), // one user in HE-SIG-B content channel 1
+                              MicroSeconds(4)),     // one OFDM symbol;
         TestCase::Duration::QUICK);
 
-    // 40 MHz band, HeSigBDurationTest::OFDMA, unallocated RUs at the begin and at the end of the
-    // first 20 MHz subband and in the middle of the second 20 MHz subband
+    // 160 MHz band, OFDMA, 11ax with primary80 is in the high 80 MHz band
     AddTestCase(
-        new HeSigBDurationTest({{{HeRu::RU_52_TONE, 2, true}, 10, 1},
-                                {{HeRu::RU_52_TONE, 3, true}, 10, 2},
-                                {{HeRu::RU_52_TONE, 5, true}, 11, 1},
-                                {{HeRu::RU_52_TONE, 8, true}, 11, 2}},
-                               VhtPhy::GetVhtMcs5(),
-                               MHz_u{40},
-                               HeSigBDurationTest::OFDMA,
-                               {112, 112},
-                               std::make_pair(4, 4), // 4 users in both HE-SIG-B content channels
-                               MicroSeconds(4)),     // two OFDM symbols
+        new MuSigDurationTest({{HeRu::RuSpec{RuType::RU_996_TONE, 1, false}, 8, 1}, // CC2
+                               {HeRu::RuSpec{RuType::RU_996_TONE, 1, true}, 8, 1}}, // CC1
+                              VhtPhy::GetVhtMcs5(),
+                              MHz_u{160},
+                              4,
+                              MuSigDurationTest::OFDMA,
+                              {208, 115, 208, 115, 115, 208, 115, 208},
+                              std::make_pair(1, 1), // one user in each HE-SIG-B content channel
+                              MicroSeconds(4)),     // one OFDM symbol;
         TestCase::Duration::QUICK);
 
-    // 40 MHz band, HeSigBDurationTest::OFDMA, one unallocated RUs in the first 20 MHz subband and
-    // two unallocated RUs in second 20 MHz subband
+    // 40 MHz band, OFDMA, first 20 MHz is punctured
     AddTestCase(
-        new HeSigBDurationTest({{{HeRu::RU_52_TONE, 1, true}, 10, 1},
-                                {{HeRu::RU_52_TONE, 2, true}, 10, 2},
-                                {{HeRu::RU_52_TONE, 3, true}, 11, 1},
-                                {{HeRu::RU_52_TONE, 5, true}, 11, 2},
-                                {{HeRu::RU_52_TONE, 6, true}, 11, 3}},
-                               VhtPhy::GetVhtMcs5(),
-                               MHz_u{40},
-                               HeSigBDurationTest::OFDMA,
-                               {112, 112},
-                               std::make_pair(4, 4), // 4 users in both HE-SIG-B content channels
-                               MicroSeconds(4)),     // two OFDM symbols
+        new MuSigDurationTest({{HeRu::RuSpec{RuType::RU_242_TONE, 2, true}, 11, 1}}, // CC2
+                              VhtPhy::GetVhtMcs5(),
+                              MHz_u{40},
+                              1,
+                              MuSigDurationTest::OFDMA,
+                              {113, 192},
+                              std::make_pair(0, 1), // one user in HE-SIG-B content channel 1
+                              MicroSeconds(4)),     // one OFDM symbol;
         TestCase::Duration::QUICK);
 
     // 20 MHz band, MU-MIMO, 2 users
-    AddTestCase(new HeSigBDurationTest(
-                    {{{HeRu::RU_242_TONE, 1, true}, 11, 1}, {{HeRu::RU_242_TONE, 1, true}, 10, 4}},
-                    VhtPhy::GetVhtMcs5(),
-                    MHz_u{20},
-                    HeSigBDurationTest::MU_MIMO,
-                    {192},
-                    std::make_pair(2, 0), // both users in HE-SIG-B content channel 1
-                    MicroSeconds(4)),     // one OFDM symbol
+    AddTestCase(new MuSigDurationTest({{HeRu::RuSpec{RuType::RU_242_TONE, 1, true}, 11, 1},  // CC1
+                                       {HeRu::RuSpec{RuType::RU_242_TONE, 1, true}, 10, 4}}, // CC1
+                                      VhtPhy::GetVhtMcs5(),
+                                      MHz_u{20},
+                                      0,
+                                      MuSigDurationTest::MU_MIMO,
+                                      {192},
+                                      std::make_pair(2, 0), // both users in content channel 1
+                                      MicroSeconds(4)),     // one OFDM symbol
                 TestCase::Duration::QUICK);
 
     // 20 MHz band, MU-MIMO, 3 users
-    AddTestCase(
-        new HeSigBDurationTest({{{HeRu::RU_242_TONE, 1, true}, 4, 3},
-                                {{HeRu::RU_242_TONE, 1, true}, 5, 2},
-                                {{HeRu::RU_242_TONE, 1, true}, 6, 1}},
-                               VhtPhy::GetVhtMcs4(),
-                               MHz_u{20},
-                               HeSigBDurationTest::MU_MIMO,
-                               {192},
-                               std::make_pair(3, 0), // all users in HE-SIG-B content channel 1
-                               MicroSeconds(4)),     // one OFDM symbol
-        TestCase::Duration::QUICK);
+    AddTestCase(new MuSigDurationTest({{HeRu::RuSpec{RuType::RU_242_TONE, 1, true}, 4, 3},  // CC1
+                                       {HeRu::RuSpec{RuType::RU_242_TONE, 1, true}, 5, 2},  // CC1
+                                       {HeRu::RuSpec{RuType::RU_242_TONE, 1, true}, 6, 1}}, // CC1
+                                      VhtPhy::GetVhtMcs4(),
+                                      MHz_u{20},
+                                      0,
+                                      MuSigDurationTest::MU_MIMO,
+                                      {192},
+                                      std::make_pair(3, 0), // all users in content channel 1
+                                      MicroSeconds(4)),     // one OFDM symbol
+                TestCase::Duration::QUICK);
 
     // 20 MHz band, MU-MIMO, 4 users
-    AddTestCase(
-        new HeSigBDurationTest({{{HeRu::RU_242_TONE, 1, true}, 4, 1},
-                                {{HeRu::RU_242_TONE, 1, true}, 5, 2},
-                                {{HeRu::RU_242_TONE, 1, true}, 6, 3},
-                                {{HeRu::RU_242_TONE, 1, true}, 7, 2}},
-                               VhtPhy::GetVhtMcs4(),
-                               MHz_u{20},
-                               HeSigBDurationTest::MU_MIMO,
-                               {192},
-                               std::make_pair(4, 0), // all users in HE-SIG-B content channel 1
-                               MicroSeconds(4)),     // one OFDM symbol
-        TestCase::Duration::QUICK);
+    AddTestCase(new MuSigDurationTest({{HeRu::RuSpec{RuType::RU_242_TONE, 1, true}, 4, 1},  // CC1
+                                       {HeRu::RuSpec{RuType::RU_242_TONE, 1, true}, 5, 2},  // CC1
+                                       {HeRu::RuSpec{RuType::RU_242_TONE, 1, true}, 6, 3},  // CC1
+                                       {HeRu::RuSpec{RuType::RU_242_TONE, 1, true}, 7, 2}}, // CC1
+                                      VhtPhy::GetVhtMcs4(),
+                                      MHz_u{20},
+                                      0,
+                                      MuSigDurationTest::MU_MIMO,
+                                      {192},
+                                      std::make_pair(4, 0), // all users in content channel 1
+                                      MicroSeconds(4)),     // one OFDM symbol
+                TestCase::Duration::QUICK);
 
     // 20 MHz band, MU-MIMO, 6 users
-    AddTestCase(
-        new HeSigBDurationTest({{{HeRu::RU_242_TONE, 1, true}, 4, 1},
-                                {{HeRu::RU_242_TONE, 1, true}, 5, 1},
-                                {{HeRu::RU_242_TONE, 1, true}, 6, 2},
-                                {{HeRu::RU_242_TONE, 1, true}, 7, 2},
-                                {{HeRu::RU_242_TONE, 1, true}, 8, 1},
-                                {{HeRu::RU_242_TONE, 1, true}, 9, 1}},
-                               VhtPhy::GetVhtMcs4(),
-                               MHz_u{20},
-                               HeSigBDurationTest::MU_MIMO,
-                               {192},
-                               std::make_pair(6, 0), // all users in HE-SIG-B content channel 1
-                               MicroSeconds(4)),     // one OFDM symbol
-        TestCase::Duration::QUICK);
+    AddTestCase(new MuSigDurationTest({{HeRu::RuSpec{RuType::RU_242_TONE, 1, true}, 4, 1},  // CC1
+                                       {HeRu::RuSpec{RuType::RU_242_TONE, 1, true}, 5, 1},  // CC1
+                                       {HeRu::RuSpec{RuType::RU_242_TONE, 1, true}, 6, 2},  // CC1
+                                       {HeRu::RuSpec{RuType::RU_242_TONE, 1, true}, 7, 2},  // CC1
+                                       {HeRu::RuSpec{RuType::RU_242_TONE, 1, true}, 8, 1},  // CC1
+                                       {HeRu::RuSpec{RuType::RU_242_TONE, 1, true}, 9, 1}}, // CC1
+                                      VhtPhy::GetVhtMcs4(),
+                                      MHz_u{20},
+                                      0,
+                                      MuSigDurationTest::MU_MIMO,
+                                      {192},
+                                      std::make_pair(6, 0), // all users in content channel 1
+                                      MicroSeconds(4)),     // one OFDM symbol
+                TestCase::Duration::QUICK);
 
     // 20 MHz band, MU-MIMO, 8 users
-    AddTestCase(
-        new HeSigBDurationTest({{{HeRu::RU_242_TONE, 1, true}, 4, 1},
-                                {{HeRu::RU_242_TONE, 1, true}, 5, 1},
-                                {{HeRu::RU_242_TONE, 1, true}, 6, 1},
-                                {{HeRu::RU_242_TONE, 1, true}, 7, 1},
-                                {{HeRu::RU_242_TONE, 1, true}, 8, 1},
-                                {{HeRu::RU_242_TONE, 1, true}, 9, 1},
-                                {{HeRu::RU_242_TONE, 1, true}, 10, 1},
-                                {{HeRu::RU_242_TONE, 1, true}, 11, 1}},
-                               VhtPhy::GetVhtMcs4(),
-                               MHz_u{20},
-                               HeSigBDurationTest::MU_MIMO,
-                               {192},
-                               std::make_pair(8, 0), // all users in HE-SIG-B content channel 1
-                               MicroSeconds(8)),     // two OFDM symbols
-        TestCase::Duration::QUICK);
+    AddTestCase(new MuSigDurationTest({{HeRu::RuSpec{RuType::RU_242_TONE, 1, true}, 4, 1},   // CC1
+                                       {HeRu::RuSpec{RuType::RU_242_TONE, 1, true}, 5, 1},   // CC1
+                                       {HeRu::RuSpec{RuType::RU_242_TONE, 1, true}, 6, 1},   // CC1
+                                       {HeRu::RuSpec{RuType::RU_242_TONE, 1, true}, 7, 1},   // CC1
+                                       {HeRu::RuSpec{RuType::RU_242_TONE, 1, true}, 8, 1},   // CC1
+                                       {HeRu::RuSpec{RuType::RU_242_TONE, 1, true}, 9, 1},   // CC1
+                                       {HeRu::RuSpec{RuType::RU_242_TONE, 1, true}, 10, 1},  // CC1
+                                       {HeRu::RuSpec{RuType::RU_242_TONE, 1, true}, 11, 1}}, // CC1
+                                      VhtPhy::GetVhtMcs4(),
+                                      MHz_u{20},
+                                      0,
+                                      MuSigDurationTest::MU_MIMO,
+                                      {192},
+                                      std::make_pair(8, 0), // all users in content channel 1
+                                      MicroSeconds(8)),     // two OFDM symbols
+                TestCase::Duration::QUICK);
 
     // 40 MHz band, MU-MIMO, 2 users
-    AddTestCase(new HeSigBDurationTest(
-                    {{{HeRu::RU_484_TONE, 1, true}, 11, 1}, {{HeRu::RU_484_TONE, 1, true}, 10, 4}},
+    AddTestCase(new MuSigDurationTest(
+                    {{HeRu::RuSpec{RuType::RU_484_TONE, 1, true}, 11, 1},  // CC1
+                     {HeRu::RuSpec{RuType::RU_484_TONE, 1, true}, 10, 4}}, // CC2
                     VhtPhy::GetVhtMcs5(),
                     MHz_u{40},
-                    HeSigBDurationTest::MU_MIMO,
+                    0,
+                    MuSigDurationTest::MU_MIMO,
                     {200, 200},
                     std::make_pair(1, 1), // users equally split between the two content channels
                     MicroSeconds(4)),     // one OFDM symbol
@@ -2165,72 +3282,78 @@
 
     // 40 MHz band, MU-MIMO, 3 users
     AddTestCase(
-        new HeSigBDurationTest(
-            {{{HeRu::RU_484_TONE, 1, true}, 4, 3},
-             {{HeRu::RU_484_TONE, 1, true}, 5, 2},
-             {{HeRu::RU_484_TONE, 1, true}, 6, 1}},
+        new MuSigDurationTest(
+            {{HeRu::RuSpec{RuType::RU_484_TONE, 1, true}, 4, 3},  // CC1
+             {HeRu::RuSpec{RuType::RU_484_TONE, 1, true}, 5, 2},  // CC2
+             {HeRu::RuSpec{RuType::RU_484_TONE, 1, true}, 6, 1}}, // CC1
             VhtPhy::GetVhtMcs4(),
             MHz_u{40},
-            HeSigBDurationTest::MU_MIMO,
+            0,
+            MuSigDurationTest::MU_MIMO,
             {200, 200},
             std::make_pair(2, 1), // 2 users in content channel 1 and 1 user in content channel 2
             MicroSeconds(4)),     // one OFDM symbol
         TestCase::Duration::QUICK);
 
     // 40 MHz band, MU-MIMO, 4 users
-    AddTestCase(new HeSigBDurationTest(
-                    {{{HeRu::RU_484_TONE, 1, true}, 4, 1},
-                     {{HeRu::RU_484_TONE, 1, true}, 5, 2},
-                     {{HeRu::RU_484_TONE, 1, true}, 6, 3},
-                     {{HeRu::RU_484_TONE, 1, true}, 7, 2}},
+    AddTestCase(new MuSigDurationTest(
+                    {{HeRu::RuSpec{RuType::RU_484_TONE, 1, true}, 4, 1},  // CC1
+                     {HeRu::RuSpec{RuType::RU_484_TONE, 1, true}, 5, 2},  // CC2
+                     {HeRu::RuSpec{RuType::RU_484_TONE, 1, true}, 6, 3},  // CC1
+                     {HeRu::RuSpec{RuType::RU_484_TONE, 1, true}, 7, 2}}, // CC2
                     VhtPhy::GetVhtMcs4(),
                     MHz_u{40},
-                    HeSigBDurationTest::MU_MIMO,
+                    0,
+                    MuSigDurationTest::MU_MIMO,
                     {200, 200},
                     std::make_pair(2, 2), // users equally split between the two content channels
                     MicroSeconds(4)),     // one OFDM symbol
                 TestCase::Duration::QUICK);
 
     // 40 MHz band, MU-MIMO, 6 users
-    AddTestCase(new HeSigBDurationTest(
-                    {{{HeRu::RU_484_TONE, 1, true}, 4, 1},
-                     {{HeRu::RU_484_TONE, 1, true}, 5, 1},
-                     {{HeRu::RU_484_TONE, 1, true}, 6, 2},
-                     {{HeRu::RU_484_TONE, 1, true}, 7, 2},
-                     {{HeRu::RU_484_TONE, 1, true}, 8, 1},
-                     {{HeRu::RU_484_TONE, 1, true}, 9, 1}},
+    AddTestCase(new MuSigDurationTest(
+                    {{HeRu::RuSpec{RuType::RU_484_TONE, 1, true}, 4, 1},  // CC1
+                     {HeRu::RuSpec{RuType::RU_484_TONE, 1, true}, 5, 1},  // CC2
+                     {HeRu::RuSpec{RuType::RU_484_TONE, 1, true}, 6, 2},  // CC1
+                     {HeRu::RuSpec{RuType::RU_484_TONE, 1, true}, 7, 2},  // CC2
+                     {HeRu::RuSpec{RuType::RU_484_TONE, 1, true}, 8, 1},  // CC1
+                     {HeRu::RuSpec{RuType::RU_484_TONE, 1, true}, 9, 1}}, // CC2
                     VhtPhy::GetVhtMcs4(),
                     MHz_u{40},
-                    HeSigBDurationTest::MU_MIMO,
+                    0,
+                    MuSigDurationTest::MU_MIMO,
                     {200, 200},
                     std::make_pair(3, 3), // users equally split between the two content channels
                     MicroSeconds(4)),     // one OFDM symbol
                 TestCase::Duration::QUICK);
 
     // 40 MHz band, MU-MIMO, 8 users
-    AddTestCase(new HeSigBDurationTest(
-                    {{{HeRu::RU_484_TONE, 1, true}, 4, 1},
-                     {{HeRu::RU_484_TONE, 1, true}, 5, 1},
-                     {{HeRu::RU_484_TONE, 1, true}, 6, 1},
-                     {{HeRu::RU_484_TONE, 1, true}, 7, 1},
-                     {{HeRu::RU_484_TONE, 1, true}, 8, 1},
-                     {{HeRu::RU_484_TONE, 1, true}, 9, 1},
-                     {{HeRu::RU_484_TONE, 1, true}, 10, 1},
-                     {{HeRu::RU_484_TONE, 1, true}, 11, 1}},
+    AddTestCase(new MuSigDurationTest(
+                    {{HeRu::RuSpec{RuType::RU_484_TONE, 1, true}, 4, 1},   // CC1
+                     {HeRu::RuSpec{RuType::RU_484_TONE, 1, true}, 5, 1},   // CC2
+                     {HeRu::RuSpec{RuType::RU_484_TONE, 1, true}, 6, 1},   // CC1
+                     {HeRu::RuSpec{RuType::RU_484_TONE, 1, true}, 7, 1},   // CC2
+                     {HeRu::RuSpec{RuType::RU_484_TONE, 1, true}, 8, 1},   // CC1
+                     {HeRu::RuSpec{RuType::RU_484_TONE, 1, true}, 9, 1},   // CC2
+                     {HeRu::RuSpec{RuType::RU_484_TONE, 1, true}, 10, 1},  // CC1
+                     {HeRu::RuSpec{RuType::RU_484_TONE, 1, true}, 11, 1}}, // CC2
                     VhtPhy::GetVhtMcs4(),
                     MHz_u{40},
-                    HeSigBDurationTest::MU_MIMO,
+                    0,
+                    MuSigDurationTest::MU_MIMO,
                     {200, 200},
                     std::make_pair(4, 4), // users equally split between the two content channels
                     MicroSeconds(4)),     // one OFDM symbol
                 TestCase::Duration::QUICK);
 
     // 80 MHz band, MU-MIMO, 2 users
-    AddTestCase(new HeSigBDurationTest(
-                    {{{HeRu::RU_996_TONE, 1, true}, 11, 1}, {{HeRu::RU_996_TONE, 1, true}, 10, 4}},
+    AddTestCase(new MuSigDurationTest(
+                    {{HeRu::RuSpec{RuType::RU_996_TONE, 1, true}, 11, 1},  // CC1
+                     {HeRu::RuSpec{RuType::RU_996_TONE, 1, true}, 10, 4}}, // CC2
                     VhtPhy::GetVhtMcs5(),
                     MHz_u{80},
-                    HeSigBDurationTest::MU_MIMO,
+                    0,
+                    MuSigDurationTest::MU_MIMO,
                     {208, 208, 208, 208},
                     std::make_pair(1, 1), // users equally split between the two content channels
                     MicroSeconds(4)),     // one OFDM symbol
@@ -2238,135 +3361,144 @@
 
     // 80 MHz band, MU-MIMO, 3 users
     AddTestCase(
-        new HeSigBDurationTest(
-            {{{HeRu::RU_996_TONE, 1, true}, 4, 3},
-             {{HeRu::RU_996_TONE, 1, true}, 5, 2},
-             {{HeRu::RU_996_TONE, 1, true}, 6, 1}},
+        new MuSigDurationTest(
+            {{HeRu::RuSpec{RuType::RU_996_TONE, 1, true}, 4, 3},  // CC1
+             {HeRu::RuSpec{RuType::RU_996_TONE, 1, true}, 5, 2},  // CC2
+             {HeRu::RuSpec{RuType::RU_996_TONE, 1, true}, 6, 1}}, // CC1
             VhtPhy::GetVhtMcs4(),
             MHz_u{80},
-            HeSigBDurationTest::MU_MIMO,
+            0,
+            MuSigDurationTest::MU_MIMO,
             {208, 208, 208, 208},
             std::make_pair(2, 1), // 2 users in content channel 1 and 1 user in content channel 2
             MicroSeconds(4)),     // one OFDM symbol
         TestCase::Duration::QUICK);
 
     // 80 MHz band, MU-MIMO, 4 users
-    AddTestCase(new HeSigBDurationTest(
-                    {{{HeRu::RU_996_TONE, 1, true}, 4, 1},
-                     {{HeRu::RU_996_TONE, 1, true}, 5, 2},
-                     {{HeRu::RU_996_TONE, 1, true}, 6, 3},
-                     {{HeRu::RU_996_TONE, 1, true}, 7, 2}},
+    AddTestCase(new MuSigDurationTest(
+                    {{HeRu::RuSpec{RuType::RU_996_TONE, 1, true}, 4, 1},  // CC1
+                     {HeRu::RuSpec{RuType::RU_996_TONE, 1, true}, 5, 2},  // CC2
+                     {HeRu::RuSpec{RuType::RU_996_TONE, 1, true}, 6, 3},  // CC1
+                     {HeRu::RuSpec{RuType::RU_996_TONE, 1, true}, 7, 2}}, // CC2
                     VhtPhy::GetVhtMcs4(),
                     MHz_u{80},
-                    HeSigBDurationTest::MU_MIMO,
+                    0,
+                    MuSigDurationTest::MU_MIMO,
                     {208, 208, 208, 208},
                     std::make_pair(2, 2), // users equally split between the two content channels
                     MicroSeconds(4)),     // one OFDM symbol
                 TestCase::Duration::QUICK);
 
     // 80 MHz band, MU-MIMO, 6 users
-    AddTestCase(new HeSigBDurationTest(
-                    {{{HeRu::RU_996_TONE, 1, true}, 4, 1},
-                     {{HeRu::RU_996_TONE, 1, true}, 5, 1},
-                     {{HeRu::RU_996_TONE, 1, true}, 6, 2},
-                     {{HeRu::RU_996_TONE, 1, true}, 7, 2},
-                     {{HeRu::RU_996_TONE, 1, true}, 8, 1},
-                     {{HeRu::RU_996_TONE, 1, true}, 9, 1}},
+    AddTestCase(new MuSigDurationTest(
+                    {{HeRu::RuSpec{RuType::RU_996_TONE, 1, true}, 4, 1},  // CC1
+                     {HeRu::RuSpec{RuType::RU_996_TONE, 1, true}, 5, 1},  // CC2
+                     {HeRu::RuSpec{RuType::RU_996_TONE, 1, true}, 6, 2},  // CC1
+                     {HeRu::RuSpec{RuType::RU_996_TONE, 1, true}, 7, 2},  // CC2
+                     {HeRu::RuSpec{RuType::RU_996_TONE, 1, true}, 8, 1},  // CC1
+                     {HeRu::RuSpec{RuType::RU_996_TONE, 1, true}, 9, 1}}, // CC2
                     VhtPhy::GetVhtMcs4(),
                     MHz_u{80},
-                    HeSigBDurationTest::MU_MIMO,
+                    0,
+                    MuSigDurationTest::MU_MIMO,
                     {208, 208, 208, 208},
                     std::make_pair(3, 3), // users equally split between the two content channels
                     MicroSeconds(4)),     // one OFDM symbol
                 TestCase::Duration::QUICK);
 
     // 80 MHz band, MU-MIMO, 8 users
-    AddTestCase(new HeSigBDurationTest(
-                    {{{HeRu::RU_996_TONE, 1, true}, 4, 1},
-                     {{HeRu::RU_996_TONE, 1, true}, 5, 1},
-                     {{HeRu::RU_996_TONE, 1, true}, 6, 1},
-                     {{HeRu::RU_996_TONE, 1, true}, 7, 1},
-                     {{HeRu::RU_996_TONE, 1, true}, 8, 1},
-                     {{HeRu::RU_996_TONE, 1, true}, 9, 1},
-                     {{HeRu::RU_996_TONE, 1, true}, 10, 1},
-                     {{HeRu::RU_996_TONE, 1, true}, 11, 1}},
+    AddTestCase(new MuSigDurationTest(
+                    {{HeRu::RuSpec{RuType::RU_996_TONE, 1, true}, 4, 1},   // CC1
+                     {HeRu::RuSpec{RuType::RU_996_TONE, 1, true}, 5, 1},   // CC2
+                     {HeRu::RuSpec{RuType::RU_996_TONE, 1, true}, 6, 1},   // CC1
+                     {HeRu::RuSpec{RuType::RU_996_TONE, 1, true}, 7, 1},   // CC2
+                     {HeRu::RuSpec{RuType::RU_996_TONE, 1, true}, 8, 1},   // CC1
+                     {HeRu::RuSpec{RuType::RU_996_TONE, 1, true}, 9, 1},   // CC2
+                     {HeRu::RuSpec{RuType::RU_996_TONE, 1, true}, 10, 1},  // CC1
+                     {HeRu::RuSpec{RuType::RU_996_TONE, 1, true}, 11, 1}}, // CC2
                     VhtPhy::GetVhtMcs4(),
                     MHz_u{80},
-                    HeSigBDurationTest::MU_MIMO,
+                    0,
+                    MuSigDurationTest::MU_MIMO,
                     {208, 208, 208, 208},
                     std::make_pair(4, 4), // users equally split between the two content channels
                     MicroSeconds(4)),     // one OFDM symbol
                 TestCase::Duration::QUICK);
 
     // 160 MHz band, MU-MIMO, 2 users
-    AddTestCase(
-        new HeSigBDurationTest(
-            {{{HeRu::RU_2x996_TONE, 1, true}, 11, 1}, {{HeRu::RU_2x996_TONE, 1, true}, 10, 4}},
-            VhtPhy::GetVhtMcs5(),
-            MHz_u{160},
-            HeSigBDurationTest::MU_MIMO,
-            {208, 208, 208, 208, 208, 208, 208, 208},
-            std::make_pair(1, 1), // users equally split between the two content channels
-            MicroSeconds(4)),     // one OFDM symbol
-        TestCase::Duration::QUICK);
+    AddTestCase(new MuSigDurationTest(
+                    {{HeRu::RuSpec{RuType::RU_2x996_TONE, 1, true}, 11, 1},  // CC1
+                     {HeRu::RuSpec{RuType::RU_2x996_TONE, 1, true}, 10, 4}}, // CC2
+                    VhtPhy::GetVhtMcs5(),
+                    MHz_u{160},
+                    0,
+                    MuSigDurationTest::MU_MIMO,
+                    {208, 208, 208, 208, 208, 208, 208, 208},
+                    std::make_pair(1, 1), // users equally split between the two content channels
+                    MicroSeconds(4)),     // one OFDM symbol
+                TestCase::Duration::QUICK);
 
     // 160 MHz band, MU-MIMO, 3 users
     AddTestCase(
-        new HeSigBDurationTest(
-            {{{HeRu::RU_2x996_TONE, 1, true}, 4, 3},
-             {{HeRu::RU_2x996_TONE, 1, true}, 5, 2},
-             {{HeRu::RU_2x996_TONE, 1, true}, 6, 1}},
+        new MuSigDurationTest(
+            {{HeRu::RuSpec{RuType::RU_2x996_TONE, 1, true}, 4, 3},  // CC1
+             {HeRu::RuSpec{RuType::RU_2x996_TONE, 1, true}, 5, 2},  // CC2
+             {HeRu::RuSpec{RuType::RU_2x996_TONE, 1, true}, 6, 1}}, // CC1
             VhtPhy::GetVhtMcs4(),
             MHz_u{160},
-            HeSigBDurationTest::MU_MIMO,
+            0,
+            MuSigDurationTest::MU_MIMO,
             {208, 208, 208, 208, 208, 208, 208, 208},
             std::make_pair(2, 1), // 2 users in content channel 1 and 1 user in content channel 2
             MicroSeconds(4)),     // one OFDM symbol
         TestCase::Duration::QUICK);
 
     // 160 MHz band, MU-MIMO, 4 users
-    AddTestCase(new HeSigBDurationTest(
-                    {{{HeRu::RU_2x996_TONE, 1, true}, 4, 1},
-                     {{HeRu::RU_2x996_TONE, 1, true}, 5, 2},
-                     {{HeRu::RU_2x996_TONE, 1, true}, 6, 3},
-                     {{HeRu::RU_2x996_TONE, 1, true}, 7, 2}},
+    AddTestCase(new MuSigDurationTest(
+                    {{HeRu::RuSpec{RuType::RU_2x996_TONE, 1, true}, 4, 1},  // CC1
+                     {HeRu::RuSpec{RuType::RU_2x996_TONE, 1, true}, 5, 2},  // CC2
+                     {HeRu::RuSpec{RuType::RU_2x996_TONE, 1, true}, 6, 3},  // CC1
+                     {HeRu::RuSpec{RuType::RU_2x996_TONE, 1, true}, 7, 2}}, // CC2
                     VhtPhy::GetVhtMcs4(),
                     MHz_u{160},
-                    HeSigBDurationTest::MU_MIMO,
+                    0,
+                    MuSigDurationTest::MU_MIMO,
                     {208, 208, 208, 208, 208, 208, 208, 208},
                     std::make_pair(2, 2), // users equally split between the two content channels
                     MicroSeconds(4)),     // one OFDM symbol
                 TestCase::Duration::QUICK);
 
     // 160 MHz band, MU-MIMO, 6 users
-    AddTestCase(new HeSigBDurationTest(
-                    {{{HeRu::RU_2x996_TONE, 1, true}, 4, 1},
-                     {{HeRu::RU_2x996_TONE, 1, true}, 5, 1},
-                     {{HeRu::RU_2x996_TONE, 1, true}, 6, 2},
-                     {{HeRu::RU_2x996_TONE, 1, true}, 7, 2},
-                     {{HeRu::RU_2x996_TONE, 1, true}, 8, 1},
-                     {{HeRu::RU_2x996_TONE, 1, true}, 9, 1}},
+    AddTestCase(new MuSigDurationTest(
+                    {{HeRu::RuSpec{RuType::RU_2x996_TONE, 1, true}, 4, 1},  // CC1
+                     {HeRu::RuSpec{RuType::RU_2x996_TONE, 1, true}, 5, 1},  // CC2
+                     {HeRu::RuSpec{RuType::RU_2x996_TONE, 1, true}, 6, 2},  // CC1
+                     {HeRu::RuSpec{RuType::RU_2x996_TONE, 1, true}, 7, 2},  // CC2
+                     {HeRu::RuSpec{RuType::RU_2x996_TONE, 1, true}, 8, 1},  // CC1
+                     {HeRu::RuSpec{RuType::RU_2x996_TONE, 1, true}, 9, 1}}, // CC2
                     VhtPhy::GetVhtMcs4(),
                     MHz_u{160},
-                    HeSigBDurationTest::MU_MIMO,
+                    0,
+                    MuSigDurationTest::MU_MIMO,
                     {208, 208, 208, 208, 208, 208, 208, 208},
                     std::make_pair(3, 3), // users equally split between the two content channels
                     MicroSeconds(4)),     // one OFDM symbol
                 TestCase::Duration::QUICK);
 
     // 160 MHz band, MU-MIMO, 8 users
-    AddTestCase(new HeSigBDurationTest(
-                    {{{HeRu::RU_2x996_TONE, 1, true}, 4, 1},
-                     {{HeRu::RU_2x996_TONE, 1, true}, 5, 1},
-                     {{HeRu::RU_2x996_TONE, 1, true}, 6, 1},
-                     {{HeRu::RU_2x996_TONE, 1, true}, 7, 1},
-                     {{HeRu::RU_2x996_TONE, 1, true}, 8, 1},
-                     {{HeRu::RU_2x996_TONE, 1, true}, 9, 1},
-                     {{HeRu::RU_2x996_TONE, 1, true}, 10, 1},
-                     {{HeRu::RU_2x996_TONE, 1, true}, 11, 1}},
+    AddTestCase(new MuSigDurationTest(
+                    {{HeRu::RuSpec{RuType::RU_2x996_TONE, 1, true}, 4, 1},   // CC1
+                     {HeRu::RuSpec{RuType::RU_2x996_TONE, 1, true}, 5, 1},   // CC2
+                     {HeRu::RuSpec{RuType::RU_2x996_TONE, 1, true}, 6, 1},   // CC1
+                     {HeRu::RuSpec{RuType::RU_2x996_TONE, 1, true}, 7, 1},   // CC2
+                     {HeRu::RuSpec{RuType::RU_2x996_TONE, 1, true}, 8, 1},   // CC1
+                     {HeRu::RuSpec{RuType::RU_2x996_TONE, 1, true}, 9, 1},   // CC2
+                     {HeRu::RuSpec{RuType::RU_2x996_TONE, 1, true}, 10, 1},  // CC1
+                     {HeRu::RuSpec{RuType::RU_2x996_TONE, 1, true}, 11, 1}}, // CC2
                     VhtPhy::GetVhtMcs4(),
                     MHz_u{160},
-                    HeSigBDurationTest::MU_MIMO,
+                    0,
+                    MuSigDurationTest::MU_MIMO,
                     {208, 208, 208, 208, 208, 208, 208, 208},
                     std::make_pair(4, 4), // users equally split between the two content channels
                     MicroSeconds(4)),     // one OFDM symbol
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/test/wifi-aggregation-test.cc ns-3.45/src/wifi/test/wifi-aggregation-test.cc
--- ns-3.44/src/wifi/test/wifi-aggregation-test.cc	2025-03-09 16:55:49.807372600 -0700
+++ ns-3.45/src/wifi/test/wifi-aggregation-test.cc	2025-06-01 20:34:45.634702200 -0700
@@ -313,6 +313,7 @@
         if (m_params.standard >= WIFI_STANDARD_80211ax)
         {
             HeCapabilities heCapabilities;
+            heCapabilities.SetChannelWidthSet(0x1);
             heCapabilities.SetMaxAmpduLength((1 << 23) - 1);
             m_managers.at(i)->AddStationHeCapabilities(Mac48Address("00:00:00:00:00:02"),
                                                        heCapabilities);
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/test/wifi-channel-settings-test.cc ns-3.45/src/wifi/test/wifi-channel-settings-test.cc
--- ns-3.44/src/wifi/test/wifi-channel-settings-test.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.45/src/wifi/test/wifi-channel-settings-test.cc	2025-06-01 20:34:45.634702200 -0700
@@ -0,0 +1,381 @@
+/*
+ * Copyright (c) 2025 DERONNE SOFTWARE ENGINEERING
+ *
+ * SPDX-License-Identifier: GPL-2.0-only
+ *
+ * Author: Sébastien Deronne <sebastien.deronne@gmail.com>
+ */
+
+#include "ns3/ap-wifi-mac.h"
+#include "ns3/boolean.h"
+#include "ns3/config.h"
+#include "ns3/double.h"
+#include "ns3/mobility-helper.h"
+#include "ns3/multi-model-spectrum-channel.h"
+#include "ns3/packet-socket-client.h"
+#include "ns3/packet-socket-helper.h"
+#include "ns3/packet-socket-server.h"
+#include "ns3/rng-seed-manager.h"
+#include "ns3/spectrum-wifi-helper.h"
+#include "ns3/sta-wifi-mac.h"
+#include "ns3/string.h"
+#include "ns3/test.h"
+#include "ns3/wifi-net-device.h"
+#include "ns3/wifi-standards.h"
+
+#include <map>
+#include <sstream>
+#include <string>
+#include <vector>
+
+using namespace ns3;
+
+NS_LOG_COMPONENT_DEFINE("WifiChannelSettingsTest");
+
+/**
+ * @ingroup wifi-test
+ * @ingroup tests
+ *
+ * @brief Test initial channel settings for AP and non-AP STAs when those are not necessarily
+ * identical
+ *
+ * This test verifies the channel width used by the non-AP STA is properly advertised to the AP STA,
+ * and that invalid combinations get rejected. It generates DL and UL traffic (limited to 1 packet
+ * for each direction) and checks that the number of received packets matches with the expectation.
+ */
+class WifiChannelSettingsTest : public TestCase
+{
+  public:
+    /**
+     * Parameters for the test
+     */
+    struct Params
+    {
+        WifiStandard apStandard;          ///< wifi standard for AP STA
+        WifiStandard staStandard;         ///< wifi standard for non-AP STA
+        std::string apChannelSettings;    ///< channel setting string for AP STA
+        std::string staChannelSettings;   ///< channel setting string for non-AP STA
+        MHz_u staLargestSupportedChWidth; ///< largest supported channel width by the non-AP STA
+        bool skipAssocIncompatibleChannelWidth{
+            false}; ///< flag to skip association when STA channel width is incompatible with AP
+
+        /**
+         * Print the parameters
+         *
+         * @return a string with the parameters
+         */
+        std::string Print() const
+        {
+            std::ostringstream oss;
+            oss << "AP standard=" << apStandard << ", non-AP STA standard=" << staStandard
+                << ", AP settings="
+                << apChannelSettings + ", non-AP STA settings=" + staChannelSettings
+                << ", staLargestSupportedChWidth=" << staLargestSupportedChWidth
+                << " MHz, skipAssocIncompatibleChannelWidth=" << skipAssocIncompatibleChannelWidth;
+            return oss.str();
+        }
+    };
+
+    /**
+     * Constructor
+     *
+     * @param params parameters for the test
+     */
+    WifiChannelSettingsTest(const Params& params);
+    ~WifiChannelSettingsTest() override = default;
+
+  private:
+    void DoRun() override;
+
+    /**
+     * Callback invoked when a packet is received by the server application
+     * @param p the packet
+     * @param adr the address
+     */
+    void AppRx(Ptr<const Packet> p, const Address& adr);
+
+    /**
+     * Check results
+     */
+    void CheckResults();
+
+    Params m_params; ///< test parameters
+
+    Ptr<ApWifiMac> m_apWifiMac;   ///< AP wifi MAC
+    Ptr<StaWifiMac> m_staWifiMac; ///< STA wifi MAC
+
+    const uint32_t m_dlPacketSize{1400}; ///< DL packet size (bytes)
+    const uint32_t m_ulPacketSize{600};  ///< UL packet size (bytes)
+
+    uint32_t m_receivedDl{0}; ///< received DL packets
+    uint32_t m_receivedUl{0}; ///< received UL packets
+};
+
+WifiChannelSettingsTest::WifiChannelSettingsTest(const Params& params)
+    : TestCase("Check correct behaviour for scenario: " + params.Print()),
+      m_params{params}
+{
+}
+
+void
+WifiChannelSettingsTest::AppRx(Ptr<const Packet> p, const Address& adr)
+{
+    NS_LOG_INFO("Received " << p->GetSize() << " bytes");
+    if (p->GetSize() == m_dlPacketSize)
+    {
+        m_receivedDl++;
+    }
+    else if (p->GetSize() == m_ulPacketSize)
+    {
+        m_receivedUl++;
+    }
+}
+
+void
+WifiChannelSettingsTest::DoRun()
+{
+    RngSeedManager::SetSeed(1);
+    RngSeedManager::SetRun(10);
+    int64_t streamNumber = 100;
+
+    NodeContainer wifiApNode(1);
+    NodeContainer wifiStaNode(1);
+
+    auto spectrumChannel = CreateObject<MultiModelSpectrumChannel>();
+    auto lossModel = CreateObject<FriisPropagationLossModel>();
+    spectrumChannel->AddPropagationLossModel(lossModel);
+    auto delayModel = CreateObject<ConstantSpeedPropagationDelayModel>();
+    spectrumChannel->SetPropagationDelayModel(delayModel);
+
+    SpectrumWifiPhyHelper phy;
+    phy.SetChannel(spectrumChannel);
+
+    WifiHelper wifi;
+    wifi.SetRemoteStationManager("ns3::IdealWifiManager");
+
+    wifi.SetStandard(m_params.apStandard);
+    phy.Set("ChannelSettings", StringValue(m_params.apChannelSettings));
+
+    WifiMacHelper mac;
+    mac.SetType("ns3::ApWifiMac", "Ssid", SsidValue(Ssid("ns-3-ssid")));
+    auto apDevice = wifi.Install(phy, mac, wifiApNode);
+
+    wifi.SetStandard(m_params.staStandard);
+    phy.Set("MaxRadioBw", DoubleValue(m_params.staLargestSupportedChWidth));
+    phy.Set("ChannelSettings", StringValue(m_params.staChannelSettings));
+
+    NetDeviceContainer staDevice;
+    mac.SetType("ns3::StaWifiMac", "Ssid", SsidValue(Ssid("ns-3-ssid")));
+
+    mac.SetAssocManager(
+        "ns3::WifiDefaultAssocManager",
+        "AllowAssocAllChannelWidths",
+        BooleanValue(true), // avoid assert in test, it checks for received DL packets instead
+        "SkipAssocIncompatibleChannelWidth",
+        BooleanValue(m_params.skipAssocIncompatibleChannelWidth));
+
+    std::istringstream split(m_params.staChannelSettings);
+    std::vector<std::string> tmp;
+    for (std::string val; std::getline(split, val, ',');)
+    {
+        tmp.emplace_back(val);
+    }
+    const auto staBw = std::stold(tmp.at(1));
+    const auto expectInvalidConfig = m_params.staLargestSupportedChWidth < staBw;
+    auto invalidConfig{false};
+    try
+    {
+        staDevice = wifi.Install(phy, mac, wifiStaNode);
+    }
+    catch (const std::runtime_error&)
+    {
+        invalidConfig = true;
+    }
+
+    NS_TEST_ASSERT_MSG_EQ(invalidConfig,
+                          expectInvalidConfig,
+                          "Configuration should " << (expectInvalidConfig ? "not " : "")
+                                                  << "have been allowed");
+    if (invalidConfig)
+    {
+        Simulator::Destroy();
+        return;
+    }
+
+    m_apWifiMac = DynamicCast<ApWifiMac>(DynamicCast<WifiNetDevice>(apDevice.Get(0))->GetMac());
+    m_staWifiMac = DynamicCast<StaWifiMac>(DynamicCast<WifiNetDevice>(staDevice.Get(0))->GetMac());
+
+    streamNumber += WifiHelper::AssignStreams(apDevice, streamNumber);
+    streamNumber += WifiHelper::AssignStreams(staDevice, streamNumber);
+
+    MobilityHelper mobility;
+    auto positionAlloc = CreateObject<ListPositionAllocator>();
+    positionAlloc->Add(Vector(0.0, 0.0, 0.0));
+    positionAlloc->Add(Vector(10.0, 0.0, 0.0));
+    mobility.SetPositionAllocator(positionAlloc);
+
+    mobility.SetMobilityModel("ns3::ConstantPositionMobilityModel");
+    mobility.Install(wifiApNode);
+    mobility.Install(wifiStaNode);
+
+    PacketSocketHelper packetSocket;
+    packetSocket.Install(wifiStaNode);
+    packetSocket.Install(wifiApNode);
+
+    // generate a single packet in DL direction
+    PacketSocketAddress dlSocket;
+    dlSocket.SetSingleDevice(apDevice.Get(0)->GetIfIndex());
+    dlSocket.SetPhysicalAddress(staDevice.Get(0)->GetAddress());
+    dlSocket.SetProtocol(0);
+
+    auto dlClient = CreateObject<PacketSocketClient>();
+    dlClient->SetAttribute("PacketSize", UintegerValue(m_dlPacketSize));
+    dlClient->SetAttribute("MaxPackets", UintegerValue(1));
+    dlClient->SetRemote(dlSocket);
+    wifiApNode.Get(0)->AddApplication(dlClient);
+    dlClient->SetStartTime(Seconds(0.15));
+    dlClient->SetStopTime(Seconds(0.25));
+
+    auto dlServer = CreateObject<PacketSocketServer>();
+    dlServer->SetLocal(dlSocket);
+    wifiStaNode.Get(0)->AddApplication(dlServer);
+    dlServer->SetStartTime(Seconds(0.0));
+    dlServer->SetStopTime(Seconds(0.25));
+
+    // generate a single packet in UL direction
+    PacketSocketAddress ulSocket;
+    ulSocket.SetSingleDevice(staDevice.Get(0)->GetIfIndex());
+    ulSocket.SetPhysicalAddress(apDevice.Get(0)->GetAddress());
+    ulSocket.SetProtocol(1);
+
+    auto ulClient = CreateObject<PacketSocketClient>();
+    ulClient->SetAttribute("PacketSize", UintegerValue(m_ulPacketSize));
+    ulClient->SetAttribute("MaxPackets", UintegerValue(1));
+    ulClient->SetRemote(ulSocket);
+    wifiStaNode.Get(0)->AddApplication(ulClient);
+    ulClient->SetStartTime(Seconds(0.2));
+    ulClient->SetStopTime(Seconds(0.25));
+
+    auto ulServer = CreateObject<PacketSocketServer>();
+    ulServer->SetLocal(ulSocket);
+    wifiApNode.Get(0)->AddApplication(ulServer);
+    ulServer->SetStartTime(Seconds(0.0));
+    ulServer->SetStopTime(Seconds(0.25));
+
+    Config::ConnectWithoutContext("/NodeList/*/ApplicationList/*/$ns3::PacketSocketServer/Rx",
+                                  MakeCallback(&WifiChannelSettingsTest::AppRx, this));
+
+    Simulator::Stop(Seconds(0.25));
+    Simulator::Run();
+
+    CheckResults();
+
+    Simulator::Destroy();
+}
+
+void
+WifiChannelSettingsTest::CheckResults()
+{
+    const auto staPhy = m_staWifiMac->GetDevice()->GetPhy();
+    const auto staBw = staPhy->GetChannelWidth();
+    const auto compatibleBw =
+        GetSupportedChannelWidthSet(staPhy->GetStandard(), staPhy->GetPhyBand()).contains(staBw) ||
+        (staBw >= m_apWifiMac->GetDevice()->GetPhy()->GetChannelWidth());
+
+    NS_TEST_EXPECT_MSG_EQ(m_staWifiMac->GetWifiRemoteStationManager()->GetChannelWidthSupported(
+                              m_apWifiMac->GetAddress()),
+                          m_apWifiMac->GetDevice()->GetPhy()->GetChannelWidth(),
+                          "Incorrect AP channel width information received by STA");
+
+    // if BW is not compatible, STA should not be able to receive any DL packets (since they will
+    // use a larger BW than the one supported by its PHY)
+    const uint32_t expectedRxDl = compatibleBw ? 1 : 0;
+    NS_TEST_EXPECT_MSG_EQ(m_receivedDl,
+                          expectedRxDl,
+                          "Unexpected number of received packets in downlink direction");
+
+    // if BW is not compatible and skipAssocIncompatibleChannelWidth is true, STA should not be
+    // associated to AP and hence no traffic should be received
+    const uint32_t expectedRxUl =
+        (compatibleBw || !m_params.skipAssocIncompatibleChannelWidth) ? 1 : 0;
+    NS_TEST_EXPECT_MSG_EQ(m_receivedUl,
+                          expectedRxUl,
+                          "Unexpected number of received packets in uplink direction");
+}
+
+/**
+ * @ingroup wifi-test
+ * @ingroup tests
+ *
+ * @brief wifi channel settings test suite
+ */
+class WifiChannelSettingsTestSuite : public TestSuite
+{
+  public:
+    WifiChannelSettingsTestSuite();
+};
+
+WifiChannelSettingsTestSuite::WifiChannelSettingsTestSuite()
+    : TestSuite("wifi-channel-settings", Type::UNIT)
+{
+    const std::map<std::pair<MHz_u, WifiPhyBand>, std::string> channelSettingsMap{
+        {{MHz_u{20}, WIFI_PHY_BAND_2_4GHZ}, "{1, 20, BAND_2_4GHZ, 0}"},
+        {{MHz_u{40}, WIFI_PHY_BAND_2_4GHZ}, "{3, 40, BAND_2_4GHZ, 0}"},
+        {{MHz_u{20}, WIFI_PHY_BAND_5GHZ}, "{36, 20, BAND_5GHZ, 0}"},
+        {{MHz_u{40}, WIFI_PHY_BAND_5GHZ}, "{38, 40, BAND_5GHZ, 0}"},
+        {{MHz_u{80}, WIFI_PHY_BAND_5GHZ}, "{42, 80, BAND_5GHZ, 0}"},
+        {{MHz_u{160}, WIFI_PHY_BAND_5GHZ}, "{50, 160, BAND_5GHZ, 0}"},
+        {{MHz_u{20}, WIFI_PHY_BAND_6GHZ}, "{1, 20, BAND_6GHZ, 0}"},
+        {{MHz_u{40}, WIFI_PHY_BAND_6GHZ}, "{3, 40, BAND_6GHZ, 0}"},
+        {{MHz_u{80}, WIFI_PHY_BAND_6GHZ}, "{7, 80, BAND_6GHZ, 0}"},
+        {{MHz_u{160}, WIFI_PHY_BAND_6GHZ}, "{15, 160, BAND_6GHZ, 0}"},
+        {{MHz_u{320}, WIFI_PHY_BAND_6GHZ}, "{31, 320, BAND_6GHZ, 0}"},
+    };
+
+    for (const auto standard : {WIFI_STANDARD_80211n,
+                                WIFI_STANDARD_80211ac,
+                                WIFI_STANDARD_80211ax,
+                                WIFI_STANDARD_80211be})
+    {
+        for (const auto maxSupportedBw : {MHz_u{20}, MHz_u{40}, MHz_u{80}, MHz_u{160}, MHz_u{320}})
+        {
+            for (const auto& [apWidthBandPair, apChannel] : channelSettingsMap)
+            {
+                for (const auto& [staWidthBandPair, staChannel] : channelSettingsMap)
+                {
+                    if (apWidthBandPair.second != staWidthBandPair.second)
+                    {
+                        continue; // different band
+                    }
+                    if (const auto& allowedBands = wifiStandards.at(standard);
+                        std::find(allowedBands.cbegin(),
+                                  allowedBands.cend(),
+                                  apWidthBandPair.second) == allowedBands.cend())
+                    {
+                        continue; // standard does not operate on this band
+                    }
+                    if (const auto maxWidth =
+                            std::max(apWidthBandPair.first, staWidthBandPair.first);
+                        maxWidth > GetMaximumChannelWidth(GetModulationClassForStandard(standard)))
+                    {
+                        continue; // channel width(s) not supported by the standard
+                    }
+                    for (const auto skipAssocIfIncompatible : {false, true})
+                    {
+                        AddTestCase(
+                            new WifiChannelSettingsTest(
+                                {.apStandard = standard,
+                                 .staStandard = standard,
+                                 .apChannelSettings = apChannel,
+                                 .staChannelSettings = staChannel,
+                                 .staLargestSupportedChWidth = maxSupportedBw,
+                                 .skipAssocIncompatibleChannelWidth = skipAssocIfIncompatible}),
+                            TestCase::Duration::QUICK);
+                    }
+                }
+            }
+        }
+    }
+}
+
+static WifiChannelSettingsTestSuite g_wifiChannelSettingsTestSuite; ///< the test suite
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/test/wifi-dynamic-bw-op-test.cc ns-3.45/src/wifi/test/wifi-dynamic-bw-op-test.cc
--- ns-3.44/src/wifi/test/wifi-dynamic-bw-op-test.cc	2025-03-09 16:55:49.807372600 -0700
+++ ns-3.45/src/wifi/test/wifi-dynamic-bw-op-test.cc	2025-06-01 20:34:45.635702400 -0700
@@ -123,6 +123,7 @@
 {
     auto psdu = psduMap.begin()->second;
     Time now = Simulator::Now();
+    const auto band = DynamicCast<WifiNetDevice>(m_apDevices.Get(0))->GetPhy()->GetPhyBand();
 
     // Log all frames that are not management frames (we are only interested in data
     // frames and acknowledgments) and have been transmitted after 400ms (so as to
@@ -130,7 +131,7 @@
     if (!psdu->GetHeader(0).IsMgt() && now > MilliSeconds(400))
     {
         m_txPsdus.push_back({now,
-                             WifiPhy::CalculateTxDuration(psduMap, txVector, WIFI_PHY_BAND_5GHZ),
+                             WifiPhy::CalculateTxDuration(psduMap, txVector, band),
                              bss,
                              psdu->GetHeader(0),
                              psdu->GetNMpdus(),
@@ -140,8 +141,8 @@
     NS_LOG_INFO(now << " BSS " << +bss << " " << psdu->GetHeader(0).GetTypeString() << " seq "
                     << psdu->GetHeader(0).GetSequenceNumber() << " to " << psdu->GetAddr1()
                     << " #MPDUs " << psdu->GetNMpdus() << " size " << psdu->GetSize()
-                    << " TX duration "
-                    << WifiPhy::CalculateTxDuration(psduMap, txVector, WIFI_PHY_BAND_5GHZ) << "\n"
+                    << " TX duration " << WifiPhy::CalculateTxDuration(psduMap, txVector, band)
+                    << "\n"
                     << "TXVECTOR " << txVector << "\n");
 
     // when AP of BSS 1 starts transmitting (after 1.5 s), we generate packets
@@ -191,11 +192,16 @@
     SpectrumWifiPhyHelper phy;
     phy.SetChannel(spectrumChannel);
 
+    // increase TX power to ensure signal spread over 160 MHz will trigger CCA busy indication on
+    // each 20 MHz subchannel
+    phy.Set("TxPowerStart", DoubleValue(20));
+    phy.Set("TxPowerEnd", DoubleValue(20));
+
     WifiHelper wifi;
-    wifi.SetStandard(WIFI_STANDARD_80211ax);
+    wifi.SetStandard(WIFI_STANDARD_80211be);
     wifi.SetRemoteStationManager("ns3::ConstantRateWifiManager",
                                  "DataMode",
-                                 StringValue("HeMcs0"),
+                                 StringValue("EhtMcs0"),
                                  "ControlMode",
                                  StringValue("OfdmRate6Mbps"));
 
@@ -464,6 +470,23 @@
     AddTestCase(
         new WifiUseAvailBwTest({"{50, 160, BAND_5GHZ, 5}", "{42, 80, BAND_5GHZ, 2}"}, MHz_u{80}),
         TestCase::Duration::QUICK);
+    // clang-format off
+    /**
+     *                                                                                 ───────────────────────────── primary 160 ─────────────────────────────
+     *                                                                                                    primary20
+     *          ┌────────┬────────┬────────┬────────┬───────┬────────┬────────┬────────┌────────┬────────┬────────┬────────┬───────┬────────┬────────┬────────┐
+     *  BSS 0   │   1    │   5    │   9    │   13   │  17   │   21   │   25   │   29   │   33   │   37   │   41   │   45   │  49   │   53   │   57   │   61   │
+     *          └────────┴────────┴────────┴────────┴───────┴────────┴────────┴────────└────────┴────────┴────────┴────────┴───────┴────────┴────────┴────────┘
+     *
+     *          ┌────────┬────────┬────────┬────────┬───────┬────────┬────────┬────────┐
+     *  BSS 1   │   1    │   5    │   9    │   13   │  17   │   21   │   25   │   29   │
+     *          └────────┴────────┴────────┴────────┴───────┴────────┴────────┴────────┘
+     *                                                                         primary20
+     */
+    // clang-format on
+    AddTestCase(
+        new WifiUseAvailBwTest({"{31, 320, BAND_6GHZ, 10}", "{15, 160, BAND_6GHZ, 7}"}, 160),
+        TestCase::Duration::QUICK);
 }
 
 static WifiDynamicBwOpTestSuite g_wifiDynamicBwOpTestSuite; ///< the test suite
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/test/wifi-emlsr-basic-exchanges-test.cc ns-3.45/src/wifi/test/wifi-emlsr-basic-exchanges-test.cc
--- ns-3.44/src/wifi/test/wifi-emlsr-basic-exchanges-test.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.45/src/wifi/test/wifi-emlsr-basic-exchanges-test.cc	2025-06-01 20:34:45.636702300 -0700
@@ -0,0 +1,3090 @@
+/*
+ * Copyright (c) 2023 Universita' degli Studi di Napoli Federico II
+ *
+ * SPDX-License-Identifier: GPL-2.0-only
+ *
+ * Author: Stefano Avallone <stavallo@unina.it>
+ */
+
+#include "wifi-emlsr-basic-exchanges-test.h"
+
+#include "ns3/advanced-emlsr-manager.h"
+#include "ns3/boolean.h"
+#include "ns3/config.h"
+#include "ns3/eht-configuration.h"
+#include "ns3/eht-frame-exchange-manager.h"
+#include "ns3/log.h"
+#include "ns3/mgt-action-headers.h"
+#include "ns3/qos-txop.h"
+#include "ns3/rr-multi-user-scheduler.h"
+#include "ns3/simulator.h"
+#include "ns3/string.h"
+#include "ns3/wifi-net-device.h"
+
+#include <algorithm>
+#include <functional>
+#include <iomanip>
+
+using namespace ns3;
+
+NS_LOG_COMPONENT_DEFINE("WifiEmlsrBasicExchangesTest");
+
+EmlsrDlTxopTest::EmlsrDlTxopTest(const Params& params)
+    : EmlsrOperationsTestBase("Check EML DL TXOP transmissions (" +
+                              std::to_string(params.nEmlsrStations) + "," +
+                              std::to_string(params.nNonEmlsrStations) + ")"),
+      m_emlsrLinks(params.linksToEnableEmlsrOn),
+      m_emlsrEnabledTime(0),
+      m_fe2to3delay(MilliSeconds(20)),
+      m_countQoSframes(0),
+      m_countBlockAck(0)
+{
+    m_nEmlsrStations = params.nEmlsrStations;
+    m_nNonEmlsrStations = params.nNonEmlsrStations;
+    m_linksToEnableEmlsrOn = {}; // do not enable EMLSR right after association
+    m_mainPhyId = 1;
+    m_paddingDelay = params.paddingDelay;
+    m_transitionDelay = params.transitionDelay;
+    m_transitionTimeout = params.transitionTimeout;
+    m_establishBaDl = {0};
+    m_putAuxPhyToSleep = params.putAuxPhyToSleep;
+    m_duration = Seconds(1.5);
+
+    NS_ABORT_MSG_IF(params.linksToEnableEmlsrOn.size() < 2,
+                    "This test requires at least two links to be configured as EMLSR links");
+}
+
+void
+EmlsrDlTxopTest::Transmit(Ptr<WifiMac> mac,
+                          uint8_t phyId,
+                          WifiConstPsduMap psduMap,
+                          WifiTxVector txVector,
+                          double txPowerW)
+{
+    EmlsrOperationsTestBase::Transmit(mac, phyId, psduMap, txVector, txPowerW);
+    auto linkId = m_txPsdus.back().linkId;
+
+    auto psdu = psduMap.begin()->second;
+    auto nodeId = mac->GetDevice()->GetNode()->GetId();
+
+    switch (psdu->GetHeader(0).GetType())
+    {
+    case WIFI_MAC_MGT_ASSOCIATION_REQUEST:
+        NS_ASSERT_MSG(nodeId > 0, "APs do not send AssocReq frames");
+        if (nodeId <= m_nEmlsrStations)
+        {
+            NS_TEST_EXPECT_MSG_EQ(+linkId, +m_mainPhyId, "AssocReq not sent by the main PHY");
+            // this AssocReq is being sent by an EMLSR client. The other EMLSR links should be
+            // in powersave mode after association; we let the non-EMLSR links transition to
+            // active mode (by sending data null frames) after association
+            for (const auto id : m_staMacs.at(nodeId - 1)->GetLinkIds())
+            {
+                if (id != linkId && m_emlsrLinks.count(id) == 1)
+                {
+                    m_staMacs[nodeId - 1]->SetPowerSaveMode({true, id});
+                }
+            }
+        }
+        break;
+
+    case WIFI_MAC_MGT_ACTION: {
+        auto [category, action] = WifiActionHeader::Peek(psdu->GetPayload(0));
+
+        if ((category == WifiActionHeader::PROTECTED_EHT) &&
+            (action.protectedEhtAction ==
+             WifiActionHeader::PROTECTED_EHT_EML_OPERATING_MODE_NOTIFICATION))
+        {
+            nodeId == 0 ? CheckApEmlNotificationFrame(*psdu->begin(), txVector, linkId)
+                        : CheckStaEmlNotificationFrame(*psdu->begin(), txVector, linkId);
+        }
+        else if (category == WifiActionHeader::BLOCK_ACK &&
+                 action.blockAck == WifiActionHeader::BLOCK_ACK_ADDBA_REQUEST)
+        {
+            CheckPmModeAfterAssociation(psdu->GetAddr1());
+        }
+    }
+    break;
+
+    case WIFI_MAC_CTL_TRIGGER:
+        CheckInitialControlFrame(*psdu->begin(), txVector, linkId);
+        break;
+
+    case WIFI_MAC_QOSDATA:
+        CheckQosFrames(psduMap, txVector, linkId);
+        break;
+
+    case WIFI_MAC_CTL_BACKRESP:
+        CheckBlockAck(psduMap, txVector, phyId);
+        break;
+
+    case WIFI_MAC_CTL_END:
+        if (auto apMac = DynamicCast<ApWifiMac>(mac))
+        {
+            const auto txDuration =
+                WifiPhy::CalculateTxDuration(psduMap,
+                                             txVector,
+                                             apMac->GetDevice()->GetPhy(phyId)->GetPhyBand());
+            for (std::size_t i = 0; i < m_nEmlsrStations; ++i)
+            {
+                if (m_staMacs[i]->IsEmlsrLink(linkId) &&
+                    m_staMacs[i]->GetWifiPhy(linkId) ==
+                        m_staMacs[i]->GetDevice()->GetPhy(m_mainPhyId))
+                {
+                    // AP is terminating a TXOP on an EMLSR link on which the main PHY is operating,
+                    // aux PHYs should resume from sleep
+                    Simulator::Schedule(txDuration + TimeStep(1),
+                                        &EmlsrDlTxopTest::CheckAuxPhysSleepMode,
+                                        this,
+                                        m_staMacs[i],
+                                        false);
+                }
+            }
+        }
+        break;
+
+    default:;
+    }
+}
+
+void
+EmlsrDlTxopTest::DoSetup()
+{
+    // Channel switch delay should be less than the ICF padding duration, otherwise
+    // DL TXOPs cannot be initiated on auxiliary links
+    auto delay = std::min(MicroSeconds(100),
+                          *std::min_element(m_paddingDelay.cbegin(), m_paddingDelay.cend()));
+    Config::SetDefault("ns3::WifiPhy::ChannelSwitchDelay", TimeValue(MicroSeconds(75)));
+
+    EmlsrOperationsTestBase::DoSetup();
+
+    m_errorModel = CreateObject<ListErrorModel>();
+    for (std::size_t linkId = 0; linkId < m_apMac->GetNLinks(); linkId++)
+    {
+        m_apMac->GetWifiPhy(linkId)->SetPostReceptionErrorModel(m_errorModel);
+    }
+
+    m_apMac->GetQosTxop(AC_BE)->SetTxopLimits(
+        {MicroSeconds(3200), MicroSeconds(3200), MicroSeconds(3200)});
+
+    if (m_nEmlsrStations + m_nNonEmlsrStations > 1)
+    {
+        auto muScheduler =
+            CreateObjectWithAttributes<RrMultiUserScheduler>("EnableUlOfdma", BooleanValue(false));
+        m_apMac->AggregateObject(muScheduler);
+        for (uint8_t linkId = 0; linkId < m_apMac->GetNLinks(); linkId++)
+        {
+            m_apMac->GetFrameExchangeManager(linkId)->GetAckManager()->SetAttribute(
+                "DlMuAckSequenceType",
+                EnumValue(WifiAcknowledgment::DL_MU_AGGREGATE_TF));
+        }
+    }
+}
+
+void
+EmlsrDlTxopTest::StartTraffic()
+{
+    if (m_emlsrEnabledTime.IsZero())
+    {
+        // we are done with association and Block Ack agreement; we can now enable EMLSR mode
+        m_lastAid = 0;
+        EnableEmlsrMode();
+        return;
+    }
+
+    // we are done with sending EML Operating Mode Notification frames. We can now generate
+    // packets for all non-AP MLDs
+    for (std::size_t i = 0; i < m_nEmlsrStations + m_nNonEmlsrStations; i++)
+    {
+        // when multiple non-AP MLDs are present, MU transmission are used. Given that the
+        // available bandwidth decreases as the number of non-AP MLDs increases, compute the
+        // number of packets to generate so that we always have two A-MPDUs per non-AP MLD
+        std::size_t count = 8 / (m_nEmlsrStations + m_nNonEmlsrStations);
+        m_apMac->GetDevice()->GetNode()->AddApplication(GetApplication(DOWNLINK, i, count, 450));
+    }
+
+    // in case of 2 EMLSR clients using no non-EMLSR link, generate one additional short
+    // packet to each EMLSR client to test transition delay
+    if (m_nEmlsrStations == 2 && m_apMac->GetNLinks() == m_emlsrLinks.size())
+    {
+        Simulator::Schedule(m_fe2to3delay, [&]() {
+            m_apMac->GetDevice()->GetNode()->AddApplication(GetApplication(DOWNLINK, 0, 1, 40));
+            m_apMac->GetDevice()->GetNode()->AddApplication(GetApplication(DOWNLINK, 1, 1, 40));
+        });
+    }
+
+    // schedule the transmission of EML Operating Mode Notification frames to disable EMLSR mode
+    // and the generation of other packets destined to the EMLSR clients
+    for (std::size_t id = 0; id < m_nEmlsrStations; id++)
+    {
+        Simulator::Schedule(m_fe2to3delay + MilliSeconds(5 * (id + 1)), [=, this]() {
+            m_staMacs.at(id)->GetEmlsrManager()->SetAttribute(
+                "EmlsrLinkSet",
+                AttributeContainerValue<UintegerValue>({}));
+        });
+
+        Simulator::Schedule(m_fe2to3delay + MilliSeconds(5 * (m_nEmlsrStations + 1)), [=, this]() {
+            m_apMac->GetDevice()->GetNode()->AddApplication(
+                GetApplication(DOWNLINK, id, 8 / m_nEmlsrStations, 650));
+        });
+    }
+}
+
+void
+EmlsrDlTxopTest::EnableEmlsrMode()
+{
+    m_staMacs.at(m_lastAid)->GetEmlsrManager()->SetAttribute(
+        "EmlsrLinkSet",
+        AttributeContainerValue<UintegerValue>(m_emlsrLinks));
+    m_lastAid++;
+    Simulator::Schedule(MilliSeconds(5), [=, this]() {
+        if (m_lastAid < m_nEmlsrStations)
+        {
+            // make the next STA send EML Notification frame
+            EnableEmlsrMode();
+            return;
+        }
+        // all stations enabled EMLSR mode; start traffic
+        m_emlsrEnabledTime = Simulator::Now();
+        StartTraffic();
+    });
+}
+
+void
+EmlsrDlTxopTest::CheckResults()
+{
+    auto psduIt = m_txPsdus.cbegin();
+
+    // lambda to jump to the next QoS data frame or MU-RTS Trigger Frame transmitted
+    // to an EMLSR client
+    auto jumpToQosDataOrMuRts = [&]() {
+        while (psduIt != m_txPsdus.cend() &&
+               !psduIt->psduMap.cbegin()->second->GetHeader(0).IsQosData())
+        {
+            auto psdu = psduIt->psduMap.cbegin()->second;
+            if (psdu->GetHeader(0).IsTrigger())
+            {
+                CtrlTriggerHeader trigger;
+                psdu->GetPayload(0)->PeekHeader(trigger);
+                if (trigger.IsMuRts())
+                {
+                    break;
+                }
+            }
+            psduIt++;
+        }
+    };
+
+    /**
+     * Before enabling EMLSR mode, no MU-RTS TF should be sent. Four packets are generated
+     * after association to trigger the establishment of a Block Ack agreement. The TXOP Limit
+     * and the MCS are set such that two packets can be transmitted in a TXOP, hence we expect
+     * that the AP MLD sends two A-MPDUs to each non-AP MLD.
+     *
+     * EMLSR client with EMLSR mode to be enabled on all links: after ML setup, all other links
+     * stay in power save mode, hence BA establishment occurs on the same link.
+     *
+     *  [link 0]
+     *  ───────────────────────────────────────────────────────────────────────────
+     *                              | power save mode
+     *
+     *                   ┌─────┐      ┌─────┐                   ┌───┬───┐     ┌───┬───┐
+     *            ┌───┐  │Assoc│      │ADDBA│             ┌───┐ │QoS│QoS│     │QoS│QoS│
+     *  [link 1]  │ACK│  │Resp │      │ Req │             │ACK│ │ 0 │ 1 │     │ 2 │ 3 │
+     *  ───┬─────┬┴───┴──┴─────┴┬───┬─┴─────┴┬───┬─┬─────┬┴───┴─┴───┴───┴┬──┬─┴───┴───┴┬──┬───
+     *     │Assoc│              │ACK│        │ACK│ │ADDBA│               │BA│          │BA│
+     *     │ Req │              └───┘        └───┘ │Resp │               └──┘          └──┘
+     *     └─────┘                                 └─────┘
+     *
+     *  [link 2]
+     *  ───────────────────────────────────────────────────────────────────────────
+     *                              | power save mode
+     *
+     *
+     * EMLSR client with EMLSR mode to be enabled on not all the links: after ML setup,
+     * the other EMLSR links stay in power save mode, the non-EMLSR link (link 1) transitions
+     * to active mode.
+     *
+     *                                             ┌─────┐                   ┌───┬───┐
+     *                                      ┌───┐  │ADDBA│             ┌───┐ │QoS│QoS│
+     *  [link 0 - non EMLSR]                │ACK│  │ Req │             │ACK│ │ 2 │ 3 │
+     *  ──────────────────────────────┬────┬┴───┴──┴─────┴┬───┬─┬─────┬┴───┴─┴───┴───┴┬──┬─
+     *                                │Data│              │ACK│ │ADDBA│               │BA│
+     *                                │Null│              └───┘ │Resp │               └──┘
+     *                                └────┘                    └─────┘
+     *                   ┌─────┐                                       ┌───┬───┐
+     *            ┌───┐  │Assoc│                                       │QoS│QoS│
+     *  [link 1]  │ACK│  │Resp │                                       │ 0 │ 1 │
+     *  ───┬─────┬┴───┴──┴─────┴┬───┬──────────────────────────────────┴───┴───┴┬──┬───────
+     *     │Assoc│              │ACK│                                           │BA│
+     *     │ Req │              └───┘                                           └──┘
+     *     └─────┘
+     *
+     *  [link 2]
+     *  ───────────────────────────────────────────────────────────────────────────
+     *                              | power save mode
+     *
+     * Non-EMLSR client (not shown): after ML setup, all other links transition to active mode
+     * by sending a Data Null frame; QoS data frame exchanges occur on two links simultaneously.
+     */
+    for (std::size_t i = 0; i < m_nEmlsrStations + m_nNonEmlsrStations; i++)
+    {
+        std::set<uint8_t> linkIds;
+
+        jumpToQosDataOrMuRts();
+        NS_TEST_ASSERT_MSG_EQ((psduIt != m_txPsdus.cend() &&
+                               psduIt->psduMap.cbegin()->second->GetHeader(0).IsQosData()),
+                              true,
+                              "Expected at least one QoS data frame before enabling EMLSR mode");
+        linkIds.insert(psduIt->linkId);
+        const auto firstAmpduTxEnd =
+            psduIt->startTx +
+            WifiPhy::CalculateTxDuration(psduIt->psduMap,
+                                         psduIt->txVector,
+                                         m_staMacs[i]->GetWifiPhy(psduIt->linkId)->GetPhyBand());
+        auto firstQos = psduIt++;
+
+        jumpToQosDataOrMuRts();
+        NS_TEST_ASSERT_MSG_EQ((psduIt != m_txPsdus.cend() &&
+                               psduIt->psduMap.cbegin()->second->GetHeader(0).IsQosData()),
+                              true,
+                              "Expected at least two QoS data frames before enabling EMLSR mode");
+        linkIds.insert(psduIt->linkId);
+        const auto secondAmpduTxStart = psduIt->startTx;
+
+        auto beaconInBetween{false};
+        while (++firstQos != psduIt)
+        {
+            if (firstQos->psduMap.cbegin()->second->GetHeader(0).IsBeacon())
+            {
+                beaconInBetween = true;
+                break;
+            }
+        }
+
+        psduIt++;
+
+        /**
+         * If this is an EMLSR client and there is no setup link other than the one used to
+         * establish association that is not an EMLSR link, then the two A-MPDUs are sent one
+         * after another on the link used to establish association.
+         */
+        auto setupLinks = m_staMacs[i]->GetSetupLinkIds();
+
+        bool areAllSetupLinksEmlsr =
+            std::all_of(setupLinks.begin(), setupLinks.end(), [&](auto&& linkId) {
+                return linkId == m_mainPhyId || m_emlsrLinks.contains(linkId);
+            });
+
+        if (i < m_nEmlsrStations && areAllSetupLinksEmlsr)
+        {
+            NS_TEST_EXPECT_MSG_EQ(linkIds.size(),
+                                  1,
+                                  "Expected both A-MPDUs to be sent on the same link");
+            NS_TEST_EXPECT_MSG_EQ(*linkIds.begin(), +m_mainPhyId, "A-MPDUs sent on incorrect link");
+            NS_TEST_EXPECT_MSG_LT(firstAmpduTxEnd,
+                                  secondAmpduTxStart,
+                                  "A-MPDUs are not sent one after another");
+        }
+        /**
+         * Otherwise, the two A-MPDUs can be sent concurrently on two distinct links (may be
+         * the link used to establish association and a non-EMLSR link).
+         */
+        else if (!beaconInBetween)
+        {
+            NS_TEST_EXPECT_MSG_EQ(linkIds.size(),
+                                  2,
+                                  "Expected A-MPDUs to be sent on distinct links");
+            NS_TEST_EXPECT_MSG_GT(firstAmpduTxEnd,
+                                  secondAmpduTxStart,
+                                  "A-MPDUs are not sent concurrently");
+        }
+    }
+
+    /**
+     * After enabling EMLSR mode, MU-RTS TF should only be sent on EMLSR links. After the exchange
+     * of EML Operating Mode Notification frames, a number of packets are generated at the AP MLD
+     * to prepare two A-MPDUs for each non-AP MLD.
+     *
+     * EMLSR client with EMLSR mode to be enabled on all links (A is the EMLSR client, B is the
+     * non-EMLSR client):
+     *                                      ┌─────┬─────┐
+     *                                      │QoS 4│QoS 5│
+     *                                      │ to A│ to A│
+     *                            ┌───┐     ├─────┼─────┤
+     *                            │MU │     │QoS 4│QoS 5│
+     *  [link 0]                  │RTS│     │ to B│ to B│
+     *  ──────────────────────────┴───┴┬───┬┴─────┴─────┴┬──┬────────────
+     *                                 │CTS│             │BA│
+     *                                 ├───┤             ├──┤
+     *                                 │CTS│             │BA│
+     *                                 └───┘             └──┘
+     *                  ┌───┐      ┌─────┬─────┐
+     *           ┌───┐  │EML│      │QoS 6│QoS 7│
+     *  [link 1] │ACK│  │OM │      │ to B│ to B│
+     *  ────┬───┬┴───┴──┴───┴┬───┬─┴─────┴─────┴┬──┬────────────────────────────────────
+     *      │EML│            │ACK│              │BA│
+     *      │OM │            └───┘              └──┘
+     *      └───┘
+     *                                                           ┌───┐     ┌─────┬─────┐
+     *                                                           │MU │     │QoS 6│QoS 7│
+     *  [link 2]                                                 │RTS│     │ to A│ to A│
+     *  ─────────────────────────────────────────────────────────┴───┴┬───┬┴─────┴─────┴┬──┬─
+     *                                                                │CTS│             │BA│
+     *                                                                └───┘             └──┘
+     *
+     * EMLSR client with EMLSR mode to be enabled on not all the links (A is the EMLSR client,
+     * B is the non-EMLSR client):
+     *                             ┌─────┬─────┐
+     *                             │QoS 4│QoS 5│
+     *                             │ to A│ to A│
+     *                             ├─────┼─────┤
+     *                             │QoS 4│QoS 5│
+     *  [link 0 - non EMLSR]       │ to B│ to B│
+     *  ───────────────────────────┴─────┴─────┴┬──┬───────────────────────────
+     *                                          │BA│
+     *                                          ├──┤
+     *                                          │BA│
+     *                                          └──┘
+     *                                       ┌─────┬─────┐
+     *                                       │QoS 6│QoS 7│
+     *                                       │ to A│ to A│
+     *                  ┌───┐      ┌───┐     ├─────┼─────┤
+     *           ┌───┐  │EML│      │MU │     │QoS 6│QoS 7│
+     *  [link 1] │ACK│  │OM │      │RTS│     │ to B│ to B│
+     *  ────┬───┬┴───┴──┴───┴┬───┬─┴───┴┬───┬┴─────┴─────┴┬──┬────────────
+     *      │EML│            │ACK│      │CTS│             │BA│
+     *      │OM │            └───┘      ├───┤             ├──┤
+     *      └───┘                       │CTS│             │BA│
+     *                                  └───┘             └──┘
+     *
+     *  [link 2]
+     *  ────────────────────────────────────────────────────────────────────────────────
+     */
+
+    /// Store a QoS data frame or an MU-RTS TF followed by a QoS data frame
+    using FrameExchange = std::list<decltype(psduIt)>;
+
+    std::vector<std::list<FrameExchange>> frameExchanges(m_nEmlsrStations);
+
+    // compute all frame exchanges involving EMLSR clients
+    while (psduIt != m_txPsdus.cend())
+    {
+        jumpToQosDataOrMuRts();
+        if (psduIt == m_txPsdus.cend())
+        {
+            break;
+        }
+
+        if (IsTrigger(psduIt->psduMap))
+        {
+            CtrlTriggerHeader trigger;
+            psduIt->psduMap.cbegin()->second->GetPayload(0)->PeekHeader(trigger);
+            // this is an MU-RTS TF starting a new frame exchange sequence; add it to all
+            // the addressed EMLSR clients
+            NS_TEST_ASSERT_MSG_EQ(trigger.IsMuRts(),
+                                  true,
+                                  "jumpToQosDataOrMuRts does not return TFs other than MU-RTS");
+            for (const auto& userInfo : trigger)
+            {
+                for (std::size_t i = 0; i < m_nEmlsrStations; i++)
+                {
+                    if (m_staMacs.at(i)->GetAssociationId() == userInfo.GetAid12())
+                    {
+                        frameExchanges.at(i).emplace_back(FrameExchange{psduIt});
+                        break;
+                    }
+                }
+            }
+            psduIt++;
+            continue;
+        }
+
+        // we get here if psduIt points to a psduMap containing QoS data frame(s); find (if any)
+        // the QoS data frame(s) addressed to EMLSR clients and add them to the appropriate
+        // frame exchange sequence
+        for (const auto& staIdPsduPair : psduIt->psduMap)
+        {
+            std::for_each_n(m_staMacs.cbegin(), m_nEmlsrStations, [&](auto&& staMac) {
+                if (!staMac->GetLinkIdByAddress(staIdPsduPair.second->GetAddr1()))
+                {
+                    // not addressed to this non-AP MLD
+                    return;
+                }
+                // a QoS data frame starts a new frame exchange sequence if there is no previous
+                // MU-RTS TF that has been sent on the same link and is not already followed by
+                // a QoS data frame
+                std::size_t id = staMac->GetDevice()->GetNode()->GetId() - 1;
+                for (auto& frameExchange : frameExchanges.at(id))
+                {
+                    if (IsTrigger(frameExchange.front()->psduMap) &&
+                        frameExchange.front()->linkId == psduIt->linkId &&
+                        frameExchange.size() == 1)
+                    {
+                        auto it = std::next(frameExchange.front());
+                        while (it != m_txPsdus.end())
+                        {
+                            // stop at the first frame other than CTS sent on this link
+                            if (it->linkId == psduIt->linkId &&
+                                !it->psduMap.begin()->second->GetHeader(0).IsCts())
+                            {
+                                break;
+                            }
+                            ++it;
+                        }
+                        if (it == psduIt)
+                        {
+                            // the QoS data frame actually followed the MU-RTS TF
+                            frameExchange.emplace_back(psduIt);
+                            return;
+                        }
+                    }
+                }
+                frameExchanges.at(id).emplace_back(FrameExchange{psduIt});
+            });
+        }
+        psduIt++;
+    }
+
+    /**
+     * Let's focus on the first two frame exchanges for each EMLSR clients. If all setup links are
+     * EMLSR links, both frame exchanges are protected by MU-RTS TF and occur one after another.
+     * Otherwise, one frame exchange occurs on the non-EMLSR link and is not protected by
+     * MU-RTS TF; the other frame exchange occurs on an EMLSR link and is protected by MU-RTS TF.
+     */
+    for (std::size_t i = 0; i < m_nEmlsrStations; i++)
+    {
+        NS_TEST_EXPECT_MSG_GT_OR_EQ(frameExchanges.at(i).size(),
+                                    2,
+                                    "Expected at least 2 frame exchange sequences "
+                                        << "involving EMLSR client " << i);
+
+        auto firstExchangeIt = frameExchanges.at(i).begin();
+        auto secondExchangeIt = std::next(firstExchangeIt);
+
+        const auto firstAmpduTxEnd =
+            firstExchangeIt->back()->startTx +
+            WifiPhy::CalculateTxDuration(
+                firstExchangeIt->back()->psduMap,
+                firstExchangeIt->back()->txVector,
+                m_staMacs[i]->GetWifiPhy(firstExchangeIt->back()->linkId)->GetPhyBand());
+        const auto secondAmpduTxStart = secondExchangeIt->front()->startTx;
+
+        if (m_staMacs[i]->GetNLinks() == m_emlsrLinks.size())
+        {
+            // all links are EMLSR links
+            NS_TEST_EXPECT_MSG_EQ(IsTrigger(firstExchangeIt->front()->psduMap),
+                                  true,
+                                  "Expected an MU-RTS TF as ICF of first frame exchange sequence");
+            NS_TEST_EXPECT_MSG_EQ(
+                firstExchangeIt->back()->psduMap.cbegin()->second->GetHeader(0).IsQosData(),
+                true,
+                "Expected a QoS data frame in the first frame exchange sequence");
+
+            NS_TEST_EXPECT_MSG_EQ(IsTrigger(secondExchangeIt->front()->psduMap),
+                                  true,
+                                  "Expected an MU-RTS TF as ICF of second frame exchange sequence");
+            NS_TEST_EXPECT_MSG_EQ(
+                secondExchangeIt->back()->psduMap.cbegin()->second->GetHeader(0).IsQosData(),
+                true,
+                "Expected a QoS data frame in the second frame exchange sequence");
+
+            NS_TEST_EXPECT_MSG_LT(firstAmpduTxEnd,
+                                  secondAmpduTxStart,
+                                  "A-MPDUs are not sent one after another");
+        }
+        else
+        {
+            std::vector<uint8_t> nonEmlsrIds;
+            auto setupLinks = m_staMacs[i]->GetSetupLinkIds();
+            std::set_difference(setupLinks.begin(),
+                                setupLinks.end(),
+                                m_emlsrLinks.begin(),
+                                m_emlsrLinks.end(),
+                                std::back_inserter(nonEmlsrIds));
+            NS_TEST_ASSERT_MSG_EQ(nonEmlsrIds.size(), 1, "Unexpected number of non-EMLSR links");
+
+            auto nonEmlsrLinkExchangeIt = firstExchangeIt->front()->linkId == nonEmlsrIds[0]
+                                              ? firstExchangeIt
+                                              : secondExchangeIt;
+            NS_TEST_EXPECT_MSG_EQ(IsTrigger(nonEmlsrLinkExchangeIt->front()->psduMap),
+                                  false,
+                                  "Did not expect an MU-RTS TF as ICF on non-EMLSR link");
+            NS_TEST_EXPECT_MSG_EQ(
+                nonEmlsrLinkExchangeIt->front()->psduMap.cbegin()->second->GetHeader(0).IsQosData(),
+                true,
+                "Expected a QoS data frame on the non-EMLSR link");
+
+            auto emlsrLinkExchangeIt =
+                nonEmlsrLinkExchangeIt == firstExchangeIt ? secondExchangeIt : firstExchangeIt;
+            NS_TEST_EXPECT_MSG_NE(+emlsrLinkExchangeIt->front()->linkId,
+                                  +nonEmlsrIds[0],
+                                  "Expected this exchange not to occur on non-EMLSR link");
+            NS_TEST_EXPECT_MSG_EQ(IsTrigger(emlsrLinkExchangeIt->front()->psduMap),
+                                  true,
+                                  "Expected an MU-RTS TF as ICF on the EMLSR link");
+            NS_TEST_EXPECT_MSG_EQ(
+                emlsrLinkExchangeIt->back()->psduMap.cbegin()->second->GetHeader(0).IsQosData(),
+                true,
+                "Expected a QoS data frame on the EMLSR link");
+
+            NS_TEST_EXPECT_MSG_GT(firstAmpduTxEnd,
+                                  secondAmpduTxStart,
+                                  "A-MPDUs are not sent concurrently");
+        }
+
+        // we are done with processing the first two frame exchanges, remove them
+        frameExchanges.at(i).erase(firstExchangeIt);
+        frameExchanges.at(i).erase(secondExchangeIt);
+    }
+
+    /**
+     * A and B are two EMLSR clients. No ICF before the second QoS data frame because B
+     * has not switched to listening mode. ICF is sent before the third QoS data frame because
+     * A has switched to listening mode. C is a non-EMLSR client.
+     *
+     *                        ┌─────┐          A switches to listening
+     *                        │QoS x│          after transition delay
+     *                        │ to A│          |
+     *              ┌───┐     ├─────┤    ┌─────┐
+     *              │MU │     │QoS x│    │QoS y│
+     *  [link 0]    │RTS│     │ to B│    │ to B│
+     *  ────────────┴───┴┬───┬┴─────┴┬──┬┴─────┴┬──┬────────────
+     *                   │CTS│       │BA│       │BA│
+     *                   ├───┤       ├──┤       └──┘
+     *                   │CTS│       │BA│
+     *                   └───┘       └──┘        AP continues the TXOP     A switches to listening
+     *                                             after PIFS recovery      after transition delay
+     *                                                                │                       │
+     *                                 ┌─────┐    ┌───┐     ┌─────┐   │┌───┐              ┌───┐
+     *                                 │QoS z│    │MU │     │QoS x│   ││MU │     ┌───┐    │CF-│
+     *  [link 1]                       │ to C│    │RTS│     │ to A│   ││RTS│     │BAR│    │End│
+     *  ───────────────────────────────┴─────┴┬──┬┴───┴┬───┬┴─────┴┬──┬┴───┴┬───┬┴───┴┬──┬┴───┴─
+     *                                        │BA│     │CTS│       │BA│     │CTS│     │BA│
+     *                                        └──┘     └───┘       └──x     └───┘     └──┘
+     */
+    if (m_nEmlsrStations == 2 && m_apMac->GetNLinks() == m_emlsrLinks.size())
+    {
+        // the following checks are only done with 2 EMLSR clients having no non-EMLSR link
+        for (std::size_t i = 0; i < m_nEmlsrStations; i++)
+        {
+            NS_TEST_EXPECT_MSG_GT_OR_EQ(frameExchanges.at(i).size(),
+                                        2,
+                                        "Expected at least 2 frame exchange sequences "
+                                            << "involving EMLSR client " << i);
+            // the first frame exchange must start with an ICF
+            auto firstExchangeIt = frameExchanges.at(i).begin();
+
+            NS_TEST_EXPECT_MSG_EQ(IsTrigger(firstExchangeIt->front()->psduMap),
+                                  true,
+                                  "Expected an MU-RTS TF as ICF of first frame exchange sequence");
+            NS_TEST_EXPECT_MSG_EQ(
+                firstExchangeIt->back()->psduMap.cbegin()->second->GetHeader(0).IsQosData(),
+                true,
+                "Expected a QoS data frame in the first frame exchange sequence");
+        }
+
+        // the second frame exchange is the one that starts first
+        auto secondExchangeIt = std::next(frameExchanges.at(0).begin())->front()->startTx <
+                                        std::next(frameExchanges.at(1).begin())->front()->startTx
+                                    ? std::next(frameExchanges.at(0).begin())
+                                    : std::next(frameExchanges.at(1).begin());
+        decltype(secondExchangeIt) thirdExchangeIt;
+        std::size_t thirdExchangeStaId;
+
+        if (secondExchangeIt == std::next(frameExchanges.at(0).begin()))
+        {
+            thirdExchangeIt = std::next(frameExchanges.at(1).begin());
+            thirdExchangeStaId = 1;
+        }
+        else
+        {
+            thirdExchangeIt = std::next(frameExchanges.at(0).begin());
+            thirdExchangeStaId = 0;
+        }
+
+        // the second frame exchange is not protected by the ICF and starts a SIFS after the end
+        // of the previous one
+        NS_TEST_EXPECT_MSG_EQ(IsTrigger(secondExchangeIt->front()->psduMap),
+                              false,
+                              "Expected no ICF for the second frame exchange sequence");
+        NS_TEST_EXPECT_MSG_EQ(
+            secondExchangeIt->front()->psduMap.cbegin()->second->GetHeader(0).IsQosData(),
+            true,
+            "Expected a QoS data frame in the second frame exchange sequence");
+
+        // the first two frame exchanges occur on the same link
+        NS_TEST_EXPECT_MSG_EQ(+secondExchangeIt->front()->linkId,
+                              +frameExchanges.at(0).begin()->front()->linkId,
+                              "Expected the first two frame exchanges to occur on the same link");
+
+        auto bAckRespIt = std::prev(secondExchangeIt->front());
+        NS_TEST_EXPECT_MSG_EQ(bAckRespIt->psduMap.cbegin()->second->GetHeader(0).IsBlockAck(),
+                              true,
+                              "Expected a BlockAck response before the second frame exchange");
+        auto bAckRespTxEnd =
+            bAckRespIt->startTx +
+            WifiPhy::CalculateTxDuration(bAckRespIt->psduMap,
+                                         bAckRespIt->txVector,
+                                         m_apMac->GetWifiPhy(bAckRespIt->linkId)->GetPhyBand());
+
+        // the second frame exchange starts a SIFS after the previous one
+        NS_TEST_EXPECT_MSG_EQ(
+            bAckRespTxEnd + m_apMac->GetWifiPhy(bAckRespIt->linkId)->GetSifs(),
+            secondExchangeIt->front()->startTx,
+            "Expected the second frame exchange to start a SIFS after the first one");
+
+        // the third frame exchange is protected by MU-RTS and occurs on a different link
+        NS_TEST_EXPECT_MSG_EQ(IsTrigger(thirdExchangeIt->front()->psduMap),
+                              true,
+                              "Expected an MU-RTS as ICF for the third frame exchange sequence");
+        NS_TEST_EXPECT_MSG_EQ(
+            thirdExchangeIt->back()->psduMap.cbegin()->second->GetHeader(0).IsQosData(),
+            true,
+            "Expected a QoS data frame in the third frame exchange sequence");
+
+        NS_TEST_EXPECT_MSG_NE(
+            +secondExchangeIt->front()->linkId,
+            +thirdExchangeIt->front()->linkId,
+            "Expected the second and third frame exchanges to occur on distinct links");
+
+        auto secondQosIt = secondExchangeIt->front();
+        auto secondQosTxEnd =
+            secondQosIt->startTx +
+            WifiPhy::CalculateTxDuration(secondQosIt->psduMap,
+                                         secondQosIt->txVector,
+                                         m_apMac->GetWifiPhy(secondQosIt->linkId)->GetPhyBand());
+
+        NS_TEST_EXPECT_MSG_GT_OR_EQ(thirdExchangeIt->front()->startTx,
+                                    secondQosTxEnd + m_transitionDelay.at(thirdExchangeStaId),
+                                    "Transmission started before transition delay");
+
+        // the BlockAck of the third frame exchange is not received correctly, so there should be
+        // another frame exchange
+        NS_TEST_EXPECT_MSG_EQ((thirdExchangeIt != frameExchanges.at(thirdExchangeStaId).end()),
+                              true,
+                              "Expected a fourth frame exchange");
+        auto fourthExchangeIt = std::next(thirdExchangeIt);
+
+        // the fourth frame exchange is protected by MU-RTS
+        NS_TEST_EXPECT_MSG_EQ(IsTrigger(fourthExchangeIt->front()->psduMap),
+                              true,
+                              "Expected an MU-RTS as ICF for the fourth frame exchange sequence");
+
+        bAckRespIt = std::prev(fourthExchangeIt->front());
+        NS_TEST_EXPECT_MSG_EQ(bAckRespIt->psduMap.cbegin()->second->GetHeader(0).IsBlockAck(),
+                              true,
+                              "Expected a BlockAck response before the fourth frame exchange");
+        auto phy = m_apMac->GetWifiPhy(bAckRespIt->linkId);
+        bAckRespTxEnd = bAckRespIt->startTx + WifiPhy::CalculateTxDuration(bAckRespIt->psduMap,
+                                                                           bAckRespIt->txVector,
+                                                                           phy->GetPhyBand());
+        auto timeout = phy->GetSifs() + phy->GetSlot() + MicroSeconds(20);
+
+        // the fourth frame exchange starts a PIFS after the previous one because the AP
+        // performs PIFS recovery (the initial frame in the TXOP was successfully received by
+        // a non-EMLSR client)
+        NS_TEST_EXPECT_MSG_GT_OR_EQ(fourthExchangeIt->front()->startTx,
+                                    bAckRespTxEnd + phy->GetPifs(),
+                                    "Transmission started less than a PIFS after BlockAck");
+        NS_TEST_EXPECT_MSG_LT(fourthExchangeIt->front()->startTx,
+                              bAckRespTxEnd + phy->GetPifs() +
+                                  MicroSeconds(1) /* propagation delay upper bound */,
+                              "Transmission started too much time after BlockAck");
+
+        auto bAckReqIt = std::next(fourthExchangeIt->front(), 2);
+        NS_TEST_EXPECT_MSG_EQ(bAckReqIt->psduMap.cbegin()->second->GetHeader(0).IsBlockAckReq(),
+                              true,
+                              "Expected a BlockAck request in the fourth frame exchange");
+
+        // we are done with processing the frame exchanges, remove them (two frame exchanges
+        // per EMLSR client, plus the last one)
+        frameExchanges.at(0).pop_front();
+        frameExchanges.at(0).pop_front();
+        frameExchanges.at(1).pop_front();
+        frameExchanges.at(1).pop_front();
+        frameExchanges.at(thirdExchangeStaId).pop_front();
+    }
+
+    /**
+     * After disabling EMLSR mode, no MU-RTS TF should be sent. After the exchange of
+     * EML Operating Mode Notification frames, a number of packets are generated at the AP MLD
+     * to prepare two A-MPDUs for each EMLSR client.
+     *
+     * EMLSR client with EMLSR mode to be enabled on all links (A is the EMLSR client, B is the
+     * non-EMLSR client):
+     *
+     *  [link 0]                            | power save mode
+     *  ────────────────────────────────────────────────────────
+     *                                        ┌─────┬─────┐        ┌──────┬──────┐
+     *                                        │QoS 8│QoS 9│        │QoS 10│QoS 11│
+     *                                        │ to A│ to A│        │ to A │ to A │
+     *                  ┌───┐     ┌───┐       ├─────┼─────┤        ├──────┼──────┤
+     *           ┌───┐  │MU │     │EML│       │QoS 8│QoS 9│        │QoS 10│QoS 11│
+     *  [link 1] │ACK│  │RTS│     │OM │       │ to B│ to B│        │ to B │ to B │
+     *  ────┬───┬┴───┴──┴───┴┬───┬┴───┴┬───┬──┴─────┴─────┴┬──┬────┴──────┴──────┴┬──┬─────
+     *      │EML│            │CTS│     │ACK│               │BA│                   │BA│
+     *      │OM │            └───┘     └───┘               ├──┤                   ├──┤
+     *      └───┘                                          │BA│                   │BA│
+     *                                                     └──┘                   └──┘
+     *
+     *  [link 2]                            | power save mode
+     *  ────────────────────────────────────────────────────────────────────────────
+     *
+     *
+     * EMLSR client with EMLSR mode to be enabled on not all the links (A is the EMLSR client,
+     * B is the non-EMLSR client):
+     *                                           ┌─────┬─────┐
+     *                                           │QoS 8│QoS 9│
+     *                                           │ to A│ to A│
+     *                                           ├─────┼─────┤
+     *                                           │QoS 8│QoS 9│
+     *  [link 0 - non EMLSR]                     │ to B│ to B│
+     *  ─────────────────────────────────────────┴─────┴─────┴┬──┬─────────────
+     *                                                        │BA│
+     *                                                        ├──┤
+     *                                                        │BA│
+     *                                                        └──┘
+     *                                        ┌──────┬──────┐
+     *                                        │QoS 10│QoS 11│
+     *                                        │ to A │ to A │
+     *                  ┌───┐     ┌───┐       ├──────┼──────┤
+     *           ┌───┐  │MU │     │EML│       │QoS 10│QoS 11│
+     *  [link 1] │ACK│  │RTS│     │OM │       │ to B │ to B │
+     *  ────┬───┬┴───┴──┴───┴┬───┬┴───┴┬───┬──┴──────┴──────┴┬──┬─────
+     *      │EML│            │CTS│     │ACK│                 │BA│
+     *      │OM │            └───┘     └───┘                 ├──┤
+     *      └───┘                                            │BA│
+     *                                                       └──┘
+     *
+     *  [link 2]                            | power save mode
+     *  ────────────────────────────────────────────────────────────────────────────
+     *
+     */
+
+    // for each EMLSR client, there should be a frame exchange with ICF and no data frame
+    // (ICF protects the EML Notification response) if the EML Notification response is sent
+    // while EMLSR mode is still enabled and two frame exchanges with data frames
+    for (std::size_t i = 0; i < m_nEmlsrStations; i++)
+    {
+        // the default EMLSR Manager requests to send EML Notification frames on the link where
+        // the main PHY is operating; if EMLSR mode is still enabled on this link when the AP MLD
+        // sends the EML Notification response, the latter is protected by an ICF
+        auto exchangeIt = frameExchanges.at(i).cbegin();
+
+        auto linkIdOpt = m_staMacs[i]->GetLinkForPhy(m_mainPhyId);
+        NS_TEST_ASSERT_MSG_EQ(linkIdOpt.has_value(),
+                              true,
+                              "Didn't find a link on which the main PHY is operating");
+
+        if (IsTrigger(exchangeIt->front()->psduMap))
+        {
+            NS_TEST_EXPECT_MSG_EQ(+exchangeIt->front()->linkId,
+                                  +linkIdOpt.value(),
+                                  "ICF was not sent on the expected link");
+            NS_TEST_EXPECT_MSG_EQ(exchangeIt->size(),
+                                  1,
+                                  "Expected no data frame in the first frame exchange sequence");
+            frameExchanges.at(i).pop_front();
+        }
+
+        NS_TEST_EXPECT_MSG_GT_OR_EQ(frameExchanges.at(i).size(),
+                                    2,
+                                    "Expected at least 2 frame exchange sequences "
+                                        << "involving EMLSR client " << i);
+
+        auto firstExchangeIt = frameExchanges.at(i).cbegin();
+        auto secondExchangeIt = std::next(firstExchangeIt);
+
+        const auto firstAmpduTxEnd =
+            firstExchangeIt->back()->startTx +
+            WifiPhy::CalculateTxDuration(
+                firstExchangeIt->back()->psduMap,
+                firstExchangeIt->back()->txVector,
+                m_staMacs[i]->GetWifiPhy(firstExchangeIt->back()->linkId)->GetPhyBand());
+        const auto secondAmpduTxStart = secondExchangeIt->front()->startTx;
+
+        NS_TEST_EXPECT_MSG_EQ(
+            firstExchangeIt->front()->psduMap.cbegin()->second->GetHeader(0).IsQosData(),
+            true,
+            "Expected a QoS data frame in the first frame exchange sequence");
+        NS_TEST_EXPECT_MSG_EQ(firstExchangeIt->size(),
+                              1,
+                              "Expected one frame only in the first frame exchange sequence");
+
+        NS_TEST_EXPECT_MSG_EQ(
+            secondExchangeIt->front()->psduMap.cbegin()->second->GetHeader(0).IsQosData(),
+            true,
+            "Expected a QoS data frame in the second frame exchange sequence");
+        NS_TEST_EXPECT_MSG_EQ(secondExchangeIt->size(),
+                              1,
+                              "Expected one frame only in the second frame exchange sequence");
+
+        if (m_staMacs[i]->GetNLinks() == m_emlsrLinks.size())
+        {
+            // all links are EMLSR links: the two QoS data frames are sent one after another on
+            // the link used for sending EML OMN
+            NS_TEST_EXPECT_MSG_EQ(
+                +firstExchangeIt->front()->linkId,
+                +linkIdOpt.value(),
+                "First frame exchange expected to occur on link used to send EML OMN");
+
+            NS_TEST_EXPECT_MSG_EQ(
+                +secondExchangeIt->front()->linkId,
+                +linkIdOpt.value(),
+                "Second frame exchange expected to occur on link used to send EML OMN");
+
+            NS_TEST_EXPECT_MSG_LT(firstAmpduTxEnd,
+                                  secondAmpduTxStart,
+                                  "A-MPDUs are not sent one after another");
+        }
+        else
+        {
+            // the two QoS data frames are sent concurrently on distinct links
+            NS_TEST_EXPECT_MSG_NE(+firstExchangeIt->front()->linkId,
+                                  +secondExchangeIt->front()->linkId,
+                                  "Frame exchanges expected to occur on distinct links");
+
+            NS_TEST_EXPECT_MSG_GT(firstAmpduTxEnd,
+                                  secondAmpduTxStart,
+                                  "A-MPDUs are not sent concurrently");
+        }
+    }
+}
+
+void
+EmlsrDlTxopTest::CheckPmModeAfterAssociation(const Mac48Address& address)
+{
+    std::optional<std::size_t> staId;
+    for (std::size_t id = 0; id < m_nEmlsrStations + m_nNonEmlsrStations; id++)
+    {
+        if (m_staMacs.at(id)->GetLinkIdByAddress(address))
+        {
+            staId = id;
+            break;
+        }
+    }
+    NS_TEST_ASSERT_MSG_EQ(staId.has_value(), true, "Not an address of a non-AP MLD " << address);
+
+    // check that all EMLSR links (but the link used for ML setup) of the EMLSR clients
+    // are considered to be in power save mode by the AP MLD; all the other links have
+    // transitioned to active mode instead
+    for (uint8_t linkId = 0; linkId < m_apMac->GetNLinks(); linkId++)
+    {
+        bool psModeExpected =
+            *staId < m_nEmlsrStations && linkId != m_mainPhyId && m_emlsrLinks.count(linkId) == 1;
+        auto addr = m_staMacs.at(*staId)->GetAddress();
+        auto psMode = m_apMac->GetWifiRemoteStationManager(linkId)->IsInPsMode(addr);
+        NS_TEST_EXPECT_MSG_EQ(psMode,
+                              psModeExpected,
+                              "EMLSR link " << +linkId << " of EMLSR client " << *staId
+                                            << " not in " << (psModeExpected ? "PS" : "active")
+                                            << " mode");
+        // check that AP is blocking transmission of QoS data frames on this link
+        CheckBlockedLink(m_apMac,
+                         addr,
+                         linkId,
+                         WifiQueueBlockedReason::POWER_SAVE_MODE,
+                         psModeExpected,
+                         "Checking PM mode after association on AP MLD for EMLSR client " +
+                             std::to_string(*staId),
+                         false);
+    }
+}
+
+void
+EmlsrDlTxopTest::CheckApEmlNotificationFrame(Ptr<const WifiMpdu> mpdu,
+                                             const WifiTxVector& txVector,
+                                             uint8_t linkId)
+{
+    // the AP is replying to a received EMLSR Notification frame
+    auto pkt = mpdu->GetPacket()->Copy();
+    const auto& hdr = mpdu->GetHeader();
+    WifiActionHeader::Remove(pkt);
+    MgtEmlOmn frame;
+    pkt->RemoveHeader(frame);
+
+    std::optional<std::size_t> staId;
+    for (std::size_t id = 0; id < m_nEmlsrStations; id++)
+    {
+        if (m_staMacs.at(id)->GetFrameExchangeManager(linkId)->GetAddress() == hdr.GetAddr1())
+        {
+            staId = id;
+            break;
+        }
+    }
+    NS_TEST_ASSERT_MSG_EQ(staId.has_value(),
+                          true,
+                          "Not an address of an EMLSR client " << hdr.GetAddr1());
+
+    // The EMLSR mode change occurs a Transition Timeout after the end of the PPDU carrying the Ack
+    auto phy = m_apMac->GetWifiPhy(linkId);
+    auto txDuration =
+        WifiPhy::CalculateTxDuration(mpdu->GetSize() + 4, // A-MPDU Subframe header size
+                                     txVector,
+                                     phy->GetPhyBand());
+    WifiTxVector ackTxVector =
+        m_staMacs.at(*staId)->GetWifiRemoteStationManager(linkId)->GetAckTxVector(hdr.GetAddr2(),
+                                                                                  txVector);
+    auto ackDuration = WifiPhy::CalculateTxDuration(GetAckSize() + 4, // A-MPDU Subframe header
+                                                    ackTxVector,
+                                                    phy->GetPhyBand());
+
+    Simulator::Schedule(txDuration + phy->GetSifs() + ackDuration, [=, this]() {
+        if (frame.m_emlControl.emlsrMode == 1)
+        {
+            // EMLSR mode enabled. Check that all EMLSR links of the EMLSR clients are considered
+            // to be in active mode by the AP MLD
+            for (const auto linkId : m_emlsrLinks)
+            {
+                auto addr = m_staMacs.at(*staId)->GetAddress();
+                auto psMode = m_apMac->GetWifiRemoteStationManager(linkId)->IsInPsMode(addr);
+                NS_TEST_EXPECT_MSG_EQ(psMode,
+                                      false,
+                                      "EMLSR link " << +linkId << " of EMLSR client " << *staId
+                                                    << " not in active mode");
+                // check that AP is not blocking transmission of QoS data frames on this link
+                CheckBlockedLink(
+                    m_apMac,
+                    addr,
+                    linkId,
+                    WifiQueueBlockedReason::POWER_SAVE_MODE,
+                    false,
+                    "Checking EMLSR links on AP MLD after EMLSR mode is enabled on EMLSR client " +
+                        std::to_string(*staId),
+                    false);
+            }
+        }
+        else
+        {
+            // EMLSR mode disabled. Check that all EMLSR links (but the link used to send the
+            // EML Notification frame) of the EMLSR clients are considered to be in power save
+            // mode by the AP MLD; the other links are in active mode
+            for (uint8_t id = 0; id < m_apMac->GetNLinks(); id++)
+            {
+                bool psModeExpected = id != linkId && m_emlsrLinks.count(id) == 1;
+                auto addr = m_staMacs.at(*staId)->GetAddress();
+                auto psMode = m_apMac->GetWifiRemoteStationManager(id)->IsInPsMode(addr);
+                NS_TEST_EXPECT_MSG_EQ(psMode,
+                                      psModeExpected,
+                                      "EMLSR link "
+                                          << +id << " of EMLSR client " << *staId << " not in "
+                                          << (psModeExpected ? "PS" : "active") << " mode");
+                // check that AP is blocking transmission of QoS data frames on this link
+                CheckBlockedLink(
+                    m_apMac,
+                    addr,
+                    id,
+                    WifiQueueBlockedReason::POWER_SAVE_MODE,
+                    psModeExpected,
+                    "Checking links on AP MLD after EMLSR mode is disabled on EMLSR client " +
+                        std::to_string(*staId),
+                    false);
+            }
+        }
+    });
+}
+
+void
+EmlsrDlTxopTest::CheckStaEmlNotificationFrame(Ptr<const WifiMpdu> mpdu,
+                                              const WifiTxVector& txVector,
+                                              uint8_t linkId)
+{
+    // an EMLSR client is sending an EMLSR Notification frame
+    auto pkt = mpdu->GetPacket()->Copy();
+    const auto& hdr = mpdu->GetHeader();
+    WifiActionHeader::Remove(pkt);
+    MgtEmlOmn frame;
+    pkt->RemoveHeader(frame);
+
+    std::optional<std::size_t> staId;
+    for (std::size_t id = 0; id < m_nEmlsrStations; id++)
+    {
+        if (m_staMacs.at(id)->GetFrameExchangeManager(linkId)->GetAddress() == hdr.GetAddr2())
+        {
+            staId = id;
+            break;
+        }
+    }
+    NS_TEST_ASSERT_MSG_EQ(staId.has_value(),
+                          true,
+                          "Not an address of an EMLSR client " << hdr.GetAddr1());
+
+    auto phy = m_staMacs.at(*staId)->GetWifiPhy(linkId);
+    auto txDuration = WifiPhy::CalculateTxDuration(mpdu->GetSize(), txVector, phy->GetPhyBand());
+    auto ackTxVector =
+        m_apMac->GetWifiRemoteStationManager(linkId)->GetAckTxVector(hdr.GetAddr2(), txVector);
+    auto ackDuration = WifiPhy::CalculateTxDuration(GetAckSize(), ackTxVector, phy->GetPhyBand());
+    auto cfEndDuration = WifiPhy::CalculateTxDuration(
+        Create<WifiPsdu>(Create<Packet>(), WifiMacHeader(WIFI_MAC_CTL_END)),
+        m_staMacs.at(*staId)->GetWifiRemoteStationManager(linkId)->GetRtsTxVector(
+            Mac48Address::GetBroadcast(),
+            txVector.GetChannelWidth()),
+        phy->GetPhyBand());
+
+    if (frame.m_emlControl.emlsrMode != 0)
+    {
+        return;
+    }
+
+    // EMLSR mode disabled
+    auto timeToCfEnd = txDuration + phy->GetSifs() + ackDuration + phy->GetSifs() + cfEndDuration;
+
+    // before the end of the CF-End frame, this link only is not blocked on both the
+    // EMLSR client and the AP MLD
+    Simulator::Schedule(timeToCfEnd - MicroSeconds(1), [=, this]() {
+        for (uint8_t id = 0; id < m_apMac->GetNLinks(); id++)
+        {
+            CheckBlockedLink(m_staMacs.at(*staId),
+                             m_apMac->GetAddress(),
+                             id,
+                             WifiQueueBlockedReason::USING_OTHER_EMLSR_LINK,
+                             id != linkId && m_staMacs.at(*staId)->IsEmlsrLink(id),
+                             "Checking links on EMLSR client " + std::to_string(*staId) +
+                                 " before the end of CF-End frame");
+            CheckBlockedLink(m_apMac,
+                             m_staMacs.at(*staId)->GetAddress(),
+                             id,
+                             WifiQueueBlockedReason::USING_OTHER_EMLSR_LINK,
+                             id != linkId && m_staMacs.at(*staId)->IsEmlsrLink(id),
+                             "Checking links of EMLSR client " + std::to_string(*staId) +
+                                 " on the AP MLD before the end of CF-End frame");
+        }
+    });
+    // after the end of the CF-End frame, all links for the EMLSR client are blocked on the
+    // AP MLD
+    Simulator::Schedule(timeToCfEnd + MicroSeconds(1), [=, this]() {
+        for (uint8_t id = 0; id < m_apMac->GetNLinks(); id++)
+        {
+            if (m_staMacs.at(*staId)->IsEmlsrLink(id))
+            {
+                CheckBlockedLink(
+                    m_apMac,
+                    m_staMacs.at(*staId)->GetAddress(),
+                    id && m_staMacs.at(*staId)->IsEmlsrLink(id),
+                    WifiQueueBlockedReason::WAITING_EMLSR_TRANSITION_DELAY,
+                    true,
+                    "Checking links of EMLSR client " + std::to_string(*staId) +
+                        " are all blocked on the AP MLD right after the end of CF-End");
+            }
+        }
+    });
+    // before the end of the transition delay, all links for the EMLSR client are still
+    // blocked on the AP MLD
+    Simulator::Schedule(timeToCfEnd + m_transitionDelay.at(*staId) - MicroSeconds(1), [=, this]() {
+        for (uint8_t id = 0; id < m_apMac->GetNLinks(); id++)
+        {
+            if (m_staMacs.at(*staId)->IsEmlsrLink(id))
+            {
+                CheckBlockedLink(m_apMac,
+                                 m_staMacs.at(*staId)->GetAddress(),
+                                 id,
+                                 WifiQueueBlockedReason::WAITING_EMLSR_TRANSITION_DELAY,
+                                 true,
+                                 "Checking links of EMLSR client " + std::to_string(*staId) +
+                                     " are all blocked on the AP MLD before the end of "
+                                     "transition delay");
+            }
+        }
+    });
+    // immediately after the transition delay, all links for the EMLSR client are unblocked
+    Simulator::Schedule(timeToCfEnd + m_transitionDelay.at(*staId) + MicroSeconds(1), [=, this]() {
+        for (uint8_t id = 0; id < m_apMac->GetNLinks(); id++)
+        {
+            if (m_staMacs.at(*staId)->IsEmlsrLink(id))
+            {
+                CheckBlockedLink(m_apMac,
+                                 m_staMacs.at(*staId)->GetAddress(),
+                                 id,
+                                 WifiQueueBlockedReason::WAITING_EMLSR_TRANSITION_DELAY,
+                                 false,
+                                 "Checking links of EMLSR client " + std::to_string(*staId) +
+                                     " are all unblocked on the AP MLD after the transition delay");
+            }
+        }
+    });
+}
+
+void
+EmlsrDlTxopTest::CheckInitialControlFrame(Ptr<const WifiMpdu> mpdu,
+                                          const WifiTxVector& txVector,
+                                          uint8_t linkId)
+{
+    CtrlTriggerHeader trigger;
+    mpdu->GetPacket()->PeekHeader(trigger);
+    if (!trigger.IsMuRts())
+    {
+        return;
+    }
+
+    NS_TEST_EXPECT_MSG_EQ(m_emlsrEnabledTime.IsStrictlyPositive(),
+                          true,
+                          "Did not expect an ICF before enabling EMLSR mode");
+
+    NS_TEST_EXPECT_MSG_LT(txVector.GetPreambleType(),
+                          WIFI_PREAMBLE_HT_MF,
+                          "Unexpected preamble type for the Initial Control frame");
+    auto rate = txVector.GetMode().GetDataRate(txVector);
+    NS_TEST_EXPECT_MSG_EQ((rate == 6e6 || rate == 12e6 || rate == 24e6),
+                          true,
+                          "Unexpected rate for the Initial Control frame: " << rate);
+
+    bool found = false;
+    Time maxPaddingDelay{};
+
+    for (const auto& userInfo : trigger)
+    {
+        auto addr = m_apMac->GetMldOrLinkAddressByAid(userInfo.GetAid12());
+        NS_TEST_ASSERT_MSG_EQ(addr.has_value(),
+                              true,
+                              "AID " << userInfo.GetAid12() << " not found");
+
+        if (m_apMac->GetWifiRemoteStationManager(linkId)->GetEmlsrEnabled(*addr))
+        {
+            found = true;
+
+            for (std::size_t i = 0; i < m_nEmlsrStations; i++)
+            {
+                if (m_staMacs.at(i)->GetAddress() == *addr)
+                {
+                    maxPaddingDelay = Max(maxPaddingDelay, m_paddingDelay.at(i));
+                    break;
+                }
+            }
+
+            // check that the AP has blocked transmission on all other EMLSR links
+            for (uint8_t id = 0; id < m_apMac->GetNLinks(); id++)
+            {
+                if (!m_apMac->GetWifiRemoteStationManager(id)->GetEmlsrEnabled(*addr))
+                {
+                    continue;
+                }
+
+                CheckBlockedLink(m_apMac,
+                                 *addr,
+                                 id,
+                                 WifiQueueBlockedReason::USING_OTHER_EMLSR_LINK,
+                                 id != linkId,
+                                 "Checking that AP blocked transmissions on all other EMLSR "
+                                 "links after sending ICF to client with AID=" +
+                                     std::to_string(userInfo.GetAid12()),
+                                 false);
+            }
+        }
+    }
+
+    NS_TEST_EXPECT_MSG_EQ(found, true, "Expected ICF to be addressed to at least an EMLSR client");
+
+    auto txDuration = WifiPhy::CalculateTxDuration(mpdu->GetSize(),
+                                                   txVector,
+                                                   m_apMac->GetWifiPhy(linkId)->GetPhyBand());
+
+    if (maxPaddingDelay.IsStrictlyPositive())
+    {
+        // compare the TX duration of this Trigger Frame to that of the Trigger Frame with no
+        // padding added
+        trigger.SetPaddingSize(0);
+        auto pkt = Create<Packet>();
+        pkt->AddHeader(trigger);
+        auto txDurationWithout =
+            WifiPhy::CalculateTxDuration(Create<WifiPsdu>(pkt, mpdu->GetHeader()),
+                                         txVector,
+                                         m_apMac->GetWifiPhy(linkId)->GetPhyBand());
+
+        NS_TEST_EXPECT_MSG_EQ(txDuration,
+                              txDurationWithout + maxPaddingDelay,
+                              "Unexpected TX duration of the MU-RTS TF with padding "
+                                  << maxPaddingDelay.As(Time::US));
+    }
+
+    // check that the EMLSR clients have blocked transmissions on other links, switched their main
+    // PHY (if needed) and have put aux PHYs to sleep after receiving this ICF
+    for (const auto& userInfo : trigger)
+    {
+        for (std::size_t i = 0; i < m_nEmlsrStations; i++)
+        {
+            if (m_staMacs[i]->GetAssociationId() != userInfo.GetAid12())
+            {
+                continue;
+            }
+
+            const auto mainPhyLinkId = m_staMacs[i]->GetLinkForPhy(m_mainPhyId);
+
+            Simulator::Schedule(txDuration + NanoSeconds(5), [=, this]() {
+                for (uint8_t id = 0; id < m_staMacs[i]->GetNLinks(); id++)
+                {
+                    // non-EMLSR links or links on which ICF is received are not blocked
+                    CheckBlockedLink(m_staMacs[i],
+                                     m_apMac->GetAddress(),
+                                     id,
+                                     WifiQueueBlockedReason::USING_OTHER_EMLSR_LINK,
+                                     id != linkId && m_staMacs[i]->IsEmlsrLink(id),
+                                     "Checking EMLSR links on EMLSR client " + std::to_string(i) +
+                                         " after receiving ICF");
+                }
+
+                if (mainPhyLinkId != linkId)
+                {
+                    CheckMainPhyTraceInfo(i, "DlTxopIcfReceivedByAuxPhy", mainPhyLinkId, linkId);
+                }
+
+                CheckAuxPhysSleepMode(m_staMacs[i], true);
+            });
+
+            break;
+        }
+    }
+}
+
+void
+EmlsrDlTxopTest::CheckQosFrames(const WifiConstPsduMap& psduMap,
+                                const WifiTxVector& txVector,
+                                uint8_t linkId)
+{
+    if (m_nEmlsrStations != 2 || m_apMac->GetNLinks() != m_emlsrLinks.size() ||
+        m_emlsrEnabledTime.IsZero() || Simulator::Now() < m_emlsrEnabledTime + m_fe2to3delay)
+
+    {
+        // we are interested in frames sent to test transition delay
+        return;
+    }
+
+    std::size_t firstClientId = 0;
+    std::size_t secondClientId = 1;
+    auto addr = m_staMacs[secondClientId]->GetAddress();
+    auto txDuration =
+        WifiPhy::CalculateTxDuration(psduMap, txVector, m_apMac->GetWifiPhy(linkId)->GetPhyBand());
+
+    m_countQoSframes++;
+
+    switch (m_countQoSframes)
+    {
+    case 1:
+        // generate another small packet addressed to the first EMLSR client only
+        m_apMac->GetDevice()->GetNode()->AddApplication(
+            GetApplication(DOWNLINK, firstClientId, 1, 40));
+        // both EMLSR clients are about to receive a QoS data frame
+        for (std::size_t clientId : {firstClientId, secondClientId})
+        {
+            Simulator::Schedule(txDuration, [=, this]() {
+                for (uint8_t id = 0; id < m_staMacs[clientId]->GetNLinks(); id++)
+                {
+                    // link on which QoS data is received is not blocked
+                    CheckBlockedLink(m_staMacs[clientId],
+                                     m_apMac->GetAddress(),
+                                     id,
+                                     WifiQueueBlockedReason::USING_OTHER_EMLSR_LINK,
+                                     id != linkId,
+                                     "Checking EMLSR links on EMLSR client " +
+                                         std::to_string(clientId) +
+                                         " after receiving the first QoS data frame");
+                }
+            });
+        }
+        break;
+    case 2:
+        // generate another small packet addressed to the second EMLSR client
+        m_apMac->GetDevice()->GetNode()->AddApplication(
+            GetApplication(DOWNLINK, secondClientId, 1, 40));
+
+        // when the transmission of the second QoS data frame starts, both EMLSR clients are
+        // still blocking all the links but the one used to receive the QoS data frame
+        for (std::size_t clientId : {firstClientId, secondClientId})
+        {
+            for (uint8_t id = 0; id < m_staMacs[clientId]->GetNLinks(); id++)
+            {
+                // link on which QoS data is received is not blocked
+                CheckBlockedLink(m_staMacs[clientId],
+                                 m_apMac->GetAddress(),
+                                 id,
+                                 WifiQueueBlockedReason::USING_OTHER_EMLSR_LINK,
+                                 id != linkId,
+                                 "Checking EMLSR links on EMLSR client " +
+                                     std::to_string(clientId) +
+                                     " when starting the reception of the second QoS frame");
+            }
+        }
+
+        // the EMLSR client that is not the recipient of the QoS frame being transmitted will
+        // switch back to listening mode after a transition delay starting from the end of
+        // the PPDU carrying this QoS data frame
+
+        // immediately before the end of the PPDU, this link only is not blocked for the EMLSR
+        // client on the AP MLD
+        Simulator::Schedule(txDuration - NanoSeconds(1), [=, this]() {
+            for (uint8_t id = 0; id < m_apMac->GetNLinks(); id++)
+            {
+                CheckBlockedLink(m_apMac,
+                                 addr,
+                                 id,
+                                 WifiQueueBlockedReason::USING_OTHER_EMLSR_LINK,
+                                 id != linkId,
+                                 "Checking that links of EMLSR client " +
+                                     std::to_string(secondClientId) +
+                                     " are blocked on the AP MLD before the end of the PPDU");
+            }
+        });
+        // immediately before the end of the PPDU, all the links on the EMLSR client that is not
+        // the recipient of the second QoS frame are unblocked (they are unblocked when the
+        // PHY-RXSTART.indication is not received)
+        Simulator::Schedule(txDuration - NanoSeconds(1), [=, this]() {
+            for (uint8_t id = 0; id < m_staMacs[secondClientId]->GetNLinks(); id++)
+            {
+                CheckBlockedLink(m_staMacs[secondClientId],
+                                 m_apMac->GetAddress(),
+                                 id,
+                                 WifiQueueBlockedReason::USING_OTHER_EMLSR_LINK,
+                                 false,
+                                 "Checking that links of EMLSR client " +
+                                     std::to_string(secondClientId) +
+                                     " are unblocked before the end of the second QoS frame");
+            }
+        });
+        // immediately after the end of the PPDU, all links are blocked for the EMLSR client
+        Simulator::Schedule(txDuration + NanoSeconds(1), [=, this]() {
+            for (uint8_t id = 0; id < m_apMac->GetNLinks(); id++)
+            {
+                CheckBlockedLink(m_apMac,
+                                 addr,
+                                 id,
+                                 WifiQueueBlockedReason::WAITING_EMLSR_TRANSITION_DELAY,
+                                 true,
+                                 "Checking links of EMLSR client " +
+                                     std::to_string(secondClientId) +
+                                     " are all blocked on the AP MLD after the end of the PPDU");
+            }
+        });
+        // immediately before the transition delay, all links are still blocked for the EMLSR client
+        Simulator::Schedule(
+            txDuration + m_transitionDelay.at(secondClientId) - NanoSeconds(1),
+            [=, this]() {
+                for (uint8_t id = 0; id < m_apMac->GetNLinks(); id++)
+                {
+                    CheckBlockedLink(
+                        m_apMac,
+                        addr,
+                        id,
+                        WifiQueueBlockedReason::WAITING_EMLSR_TRANSITION_DELAY,
+                        true,
+                        "Checking links of EMLSR client " + std::to_string(secondClientId) +
+                            " are all blocked on the AP MLD before the transition delay",
+                        false);
+                }
+            });
+
+        // 100 us before the transition delay expires, generate another small packet addressed
+        // to a non-EMLSR client. The AP will start a TXOP to transmit this frame, while the
+        // frame addressed to the EMLSR client is still queued because the transition delay has
+        // not yet elapsed. The transition delay will expire while the AP is transmitting the
+        // frame to the non-EMLSR client, so that the AP continues the TXOP to transmit the frame
+        // to the EMLSR client and we can check that the AP performs PIFS recovery after missing
+        // the BlockAck from the EMLSR client
+        Simulator::Schedule(txDuration + m_transitionDelay.at(secondClientId) - MicroSeconds(100),
+                            [=, this]() {
+                                m_apMac->GetDevice()->GetNode()->AddApplication(
+                                    GetApplication(DOWNLINK, m_nEmlsrStations, 1, 40));
+                            });
+
+        break;
+    case 3:
+        // this is the frame addressed to a non-EMLSR client, which is transmitted before the
+        // frame addressed to the EMLSR client, because the links of the latter are still blocked
+        // at the AP because the transition delay has not yet elapsed
+        NS_TEST_EXPECT_MSG_EQ(
+            psduMap.cbegin()->second->GetAddr1(),
+            m_staMacs[m_nEmlsrStations]->GetFrameExchangeManager(linkId)->GetAddress(),
+            "QoS frame not addressed to a non-EMLSR client");
+
+        for (uint8_t id = 0; id < m_apMac->GetNLinks(); id++)
+        {
+            CheckBlockedLink(m_apMac,
+                             addr,
+                             id,
+                             WifiQueueBlockedReason::WAITING_EMLSR_TRANSITION_DELAY,
+                             true,
+                             "Checking links of EMLSR client " + std::to_string(secondClientId) +
+                                 " are all blocked on the AP MLD before the transition delay");
+        }
+        // Block transmissions to the EMLSR client on all the links but the one on which this
+        // frame is sent, so that the AP will continue this TXOP to send the queued frame to the
+        // EMLSR client once the transition delay elapses
+        for (uint8_t id = 0; id < m_apMac->GetNLinks(); id++)
+        {
+            if (id != linkId)
+            {
+                m_apMac->BlockUnicastTxOnLinks(WifiQueueBlockedReason::TID_NOT_MAPPED, addr, {id});
+            }
+        }
+        break;
+    case 4:
+        // the AP is continuing the TXOP, no need to block transmissions anymore
+        for (uint8_t id = 0; id < m_apMac->GetNLinks(); id++)
+        {
+            m_apMac->UnblockUnicastTxOnLinks(WifiQueueBlockedReason::TID_NOT_MAPPED, addr, {id});
+        }
+        // at the end of the fourth QoS frame, this link only is not blocked on the EMLSR
+        // client receiving the frame
+        Simulator::Schedule(txDuration, [=, this]() {
+            for (uint8_t id = 0; id < m_apMac->GetNLinks(); id++)
+            {
+                CheckBlockedLink(m_staMacs[secondClientId],
+                                 m_apMac->GetAddress(),
+                                 id,
+                                 WifiQueueBlockedReason::USING_OTHER_EMLSR_LINK,
+                                 id != linkId,
+                                 "Checking EMLSR links on EMLSR client " +
+                                     std::to_string(secondClientId) +
+                                     " after receiving the fourth QoS data frame");
+            }
+        });
+        break;
+    }
+}
+
+void
+EmlsrDlTxopTest::CheckBlockAck(const WifiConstPsduMap& psduMap,
+                               const WifiTxVector& txVector,
+                               uint8_t phyId)
+{
+    if (m_nEmlsrStations != 2 || m_apMac->GetNLinks() != m_emlsrLinks.size() ||
+        m_emlsrEnabledTime.IsZero() || Simulator::Now() < m_emlsrEnabledTime + m_fe2to3delay)
+    {
+        // we are interested in frames sent to test transition delay
+        return;
+    }
+
+    if (++m_countBlockAck == 4)
+    {
+        // fourth BlockAck is sent by a non-EMLSR client
+        return;
+    }
+
+    auto taddr = psduMap.cbegin()->second->GetAddr2();
+    std::size_t clientId;
+    if (m_staMacs[0]->GetLinkIdByAddress(taddr))
+    {
+        clientId = 0;
+    }
+    else
+    {
+        NS_TEST_ASSERT_MSG_EQ(m_staMacs[1]->GetLinkIdByAddress(taddr).has_value(),
+                              true,
+                              "Unexpected TA for BlockAck: " << taddr);
+        clientId = 1;
+    }
+
+    // find the link on which the main PHY is operating
+    auto currMainPhyLinkId = m_staMacs[clientId]->GetLinkForPhy(phyId);
+    NS_TEST_ASSERT_MSG_EQ(
+        currMainPhyLinkId.has_value(),
+        true,
+        "Didn't find the link on which the PHY sending the BlockAck is operating");
+    auto linkId = *currMainPhyLinkId;
+
+    // we need the MLD address to check the status of the container queues
+    auto addr = m_apMac->GetWifiRemoteStationManager(linkId)->GetMldAddress(taddr);
+    NS_TEST_ASSERT_MSG_EQ(addr.has_value(), true, "MLD address not found for " << taddr);
+
+    auto apPhy = m_apMac->GetWifiPhy(linkId);
+    auto txDuration = WifiPhy::CalculateTxDuration(psduMap, txVector, apPhy->GetPhyBand());
+    auto cfEndTxDuration = WifiPhy::CalculateTxDuration(
+        Create<WifiPsdu>(Create<Packet>(), WifiMacHeader(WIFI_MAC_CTL_END)),
+        m_apMac->GetWifiRemoteStationManager(linkId)->GetRtsTxVector(Mac48Address::GetBroadcast(),
+                                                                     txVector.GetChannelWidth()),
+        apPhy->GetPhyBand());
+
+    switch (m_countBlockAck)
+    {
+    case 5:
+        // the PPDU carrying this BlockAck is corrupted, hence the AP MLD MAC receives the
+        // PHY-RXSTART indication but it does not receive any frame from the PHY. Therefore,
+        // at the end of the PPDU transmission, the AP MLD realizes that the EMLSR client has
+        // not responded and makes an attempt at continuing the TXOP
+
+        // at the end of the PPDU, this link only is not blocked on both the EMLSR client and
+        // the AP MLD
+        Simulator::Schedule(txDuration, [=, this]() {
+            for (uint8_t id = 0; id < m_apMac->GetNLinks(); id++)
+            {
+                CheckBlockedLink(m_staMacs[clientId],
+                                 m_apMac->GetAddress(),
+                                 id,
+                                 WifiQueueBlockedReason::USING_OTHER_EMLSR_LINK,
+                                 id != linkId,
+                                 "Checking links on EMLSR client " + std::to_string(clientId) +
+                                     " at the end of fourth BlockAck");
+                CheckBlockedLink(m_apMac,
+                                 *addr,
+                                 id,
+                                 WifiQueueBlockedReason::USING_OTHER_EMLSR_LINK,
+                                 id != linkId,
+                                 "Checking links of EMLSR client " + std::to_string(clientId) +
+                                     " on the AP MLD at the end of fourth BlockAck");
+            }
+        });
+        // a SIFS after the end of the PPDU, still this link only is not blocked on both the
+        // EMLSR client and the AP MLD
+        Simulator::Schedule(txDuration + apPhy->GetSifs(), [=, this]() {
+            for (uint8_t id = 0; id < m_apMac->GetNLinks(); id++)
+            {
+                CheckBlockedLink(m_staMacs[clientId],
+                                 m_apMac->GetAddress(),
+                                 id,
+                                 WifiQueueBlockedReason::USING_OTHER_EMLSR_LINK,
+                                 id != linkId,
+                                 "Checking links on EMLSR client " + std::to_string(clientId) +
+                                     " a SIFS after the end of fourth BlockAck");
+                CheckBlockedLink(m_apMac,
+                                 *addr,
+                                 id,
+                                 WifiQueueBlockedReason::USING_OTHER_EMLSR_LINK,
+                                 id != linkId,
+                                 "Checking links of EMLSR client " + std::to_string(clientId) +
+                                     " a SIFS after the end of fourth BlockAck");
+            }
+        });
+        // corrupt this BlockAck so that the AP MLD sends a BlockAckReq later on
+        {
+            auto uid = psduMap.cbegin()->second->GetPacket()->GetUid();
+            m_errorModel->SetList({uid});
+        }
+        break;
+    case 6:
+        // at the end of the PPDU, this link only is not blocked on both the EMLSR client and
+        // the AP MLD
+        Simulator::Schedule(txDuration, [=, this]() {
+            for (uint8_t id = 0; id < m_apMac->GetNLinks(); id++)
+            {
+                CheckBlockedLink(m_staMacs[clientId],
+                                 m_apMac->GetAddress(),
+                                 id,
+                                 WifiQueueBlockedReason::USING_OTHER_EMLSR_LINK,
+                                 id != linkId,
+                                 "Checking links on EMLSR client " + std::to_string(clientId) +
+                                     " at the end of fifth BlockAck");
+                CheckBlockedLink(m_apMac,
+                                 *addr,
+                                 id,
+                                 WifiQueueBlockedReason::USING_OTHER_EMLSR_LINK,
+                                 id != linkId,
+                                 "Checking links of EMLSR client " + std::to_string(clientId) +
+                                     " on the AP MLD at the end of fifth BlockAck");
+            }
+        });
+        // before the end of the CF-End frame, still this link only is not blocked on both the
+        // EMLSR client and the AP MLD
+        Simulator::Schedule(
+            txDuration + apPhy->GetSifs() + cfEndTxDuration - MicroSeconds(1),
+            [=, this]() {
+                for (uint8_t id = 0; id < m_apMac->GetNLinks(); id++)
+                {
+                    CheckBlockedLink(m_staMacs[clientId],
+                                     m_apMac->GetAddress(),
+                                     id,
+                                     WifiQueueBlockedReason::USING_OTHER_EMLSR_LINK,
+                                     id != linkId,
+                                     "Checking links on EMLSR client " + std::to_string(clientId) +
+                                         " before the end of CF-End frame");
+                    CheckBlockedLink(m_apMac,
+                                     *addr,
+                                     id,
+                                     WifiQueueBlockedReason::USING_OTHER_EMLSR_LINK,
+                                     id != linkId,
+                                     "Checking links of EMLSR client " + std::to_string(clientId) +
+                                         " on the AP MLD before the end of CF-End frame");
+                }
+            });
+        // after the end of the CF-End frame, all links for the EMLSR client are blocked on the
+        // AP MLD
+        Simulator::Schedule(
+            txDuration + apPhy->GetSifs() + cfEndTxDuration + MicroSeconds(1),
+            [=, this]() {
+                for (uint8_t id = 0; id < m_apMac->GetNLinks(); id++)
+                {
+                    CheckBlockedLink(
+                        m_apMac,
+                        *addr,
+                        id,
+                        WifiQueueBlockedReason::WAITING_EMLSR_TRANSITION_DELAY,
+                        true,
+                        "Checking links of EMLSR client " + std::to_string(clientId) +
+                            " are all blocked on the AP MLD right after the end of CF-End");
+                }
+            });
+        // before the end of the transition delay, all links for the EMLSR client are still
+        // blocked on the AP MLD
+        Simulator::Schedule(
+            txDuration + apPhy->GetSifs() + cfEndTxDuration + m_transitionDelay.at(clientId) -
+                MicroSeconds(1),
+            [=, this]() {
+                for (uint8_t id = 0; id < m_apMac->GetNLinks(); id++)
+                {
+                    CheckBlockedLink(
+                        m_apMac,
+                        *addr,
+                        id,
+                        WifiQueueBlockedReason::WAITING_EMLSR_TRANSITION_DELAY,
+                        true,
+                        "Checking links of EMLSR client " + std::to_string(clientId) +
+                            " are all blocked on the AP MLD before the end of transition delay");
+                }
+            });
+        // immediately after the transition delay, all links for the EMLSR client are unblocked
+        Simulator::Schedule(
+            txDuration + apPhy->GetSifs() + cfEndTxDuration + m_transitionDelay.at(clientId) +
+                MicroSeconds(1),
+            [=, this]() {
+                for (uint8_t id = 0; id < m_apMac->GetNLinks(); id++)
+                {
+                    CheckBlockedLink(
+                        m_apMac,
+                        *addr,
+                        id,
+                        WifiQueueBlockedReason::WAITING_EMLSR_TRANSITION_DELAY,
+                        false,
+                        "Checking links of EMLSR client " + std::to_string(clientId) +
+                            " are all unblocked on the AP MLD after the transition delay");
+                }
+            });
+        break;
+    }
+}
+
+void
+EmlsrDlTxopTest::DoRun()
+{
+    Simulator::Stop(m_duration);
+    Simulator::Run();
+
+    CheckResults();
+
+    Simulator::Destroy();
+}
+
+EmlsrUlTxopTest::EmlsrUlTxopTest(const Params& params)
+    : EmlsrOperationsTestBase("Check EML UL TXOP transmissions (genBackoffIfTxopWithoutTx=" +
+                              std::to_string(params.genBackoffIfTxopWithoutTx)),
+      m_emlsrLinks(params.linksToEnableEmlsrOn),
+      m_channelWidth(params.channelWidth),
+      m_auxPhyChannelWidth(params.auxPhyChannelWidth),
+      m_mediumSyncDuration(params.mediumSyncDuration),
+      m_msdMaxNTxops(params.msdMaxNTxops),
+      m_emlsrEnabledTime(0),
+      m_firstUlPktsGenTime(0),
+      m_unblockMainPhyLinkDelay(MilliSeconds(20)),
+      m_checkBackoffStarted(false),
+      m_countQoSframes(0),
+      m_countBlockAck(0),
+      m_countRtsframes(0),
+      m_genBackoffIfTxopWithoutTx(params.genBackoffIfTxopWithoutTx)
+{
+    m_nEmlsrStations = 1;
+    m_nNonEmlsrStations = 0;
+    m_linksToEnableEmlsrOn = params.linksToEnableEmlsrOn;
+    m_mainPhyId = 1;
+
+    // when aux PHYs do not switch link, the main PHY switches back to its previous link after
+    // a TXOP, hence the transition delay must exceed the channel switch delay (default: 250us)
+    m_transitionDelay = {MicroSeconds(256)};
+    m_establishBaDl = {0};
+    m_establishBaUl = {0};
+    m_putAuxPhyToSleep = params.putAuxPhyToSleep;
+    m_duration = Seconds(1);
+
+    NS_ABORT_MSG_IF(params.linksToEnableEmlsrOn.size() < 2,
+                    "This test requires at least two links to be configured as EMLSR links");
+    for (uint8_t id = 0; id < 3; id++)
+    {
+        if (!m_emlsrLinks.contains(id))
+        {
+            // non-EMLSR link found
+            m_nonEmlsrLink = id;
+            break;
+        }
+    }
+}
+
+void
+EmlsrUlTxopTest::DoSetup()
+{
+    Config::SetDefault("ns3::EmlsrManager::AuxPhyChannelWidth",
+                       UintegerValue(m_auxPhyChannelWidth));
+    Config::SetDefault("ns3::DefaultEmlsrManager::SwitchAuxPhy", BooleanValue(false));
+    // switch main PHY back delay should be at least a PIFS for the switch to occur
+    Config::SetDefault("ns3::EhtConfiguration::MediumSyncDuration",
+                       TimeValue(m_mediumSyncDuration));
+    Config::SetDefault("ns3::EhtConfiguration::MsdMaxNTxops", UintegerValue(m_msdMaxNTxops));
+    Config::SetDefault("ns3::ChannelAccessManager::GenerateBackoffIfTxopWithoutTx",
+                       BooleanValue(m_genBackoffIfTxopWithoutTx));
+    // Channel switch delay should be less than RTS TX time + SIFS + CTS TX time, otherwise
+    // UL TXOPs cannot be initiated by aux PHYs
+    Config::SetDefault("ns3::WifiPhy::ChannelSwitchDelay", TimeValue(MicroSeconds(75)));
+    Config::SetDefault("ns3::WifiPhy::NotifyMacHdrRxEnd", BooleanValue(true));
+
+    EmlsrOperationsTestBase::DoSetup();
+
+    m_staMacs[0]->GetQosTxop(AC_BE)->TraceConnectWithoutContext(
+        "BackoffTrace",
+        MakeCallback(&EmlsrUlTxopTest::BackoffGenerated, this));
+
+    uint8_t linkId = 0;
+    // configure channels of the given width
+    for (auto band : {WIFI_PHY_BAND_2_4GHZ, WIFI_PHY_BAND_5GHZ, WIFI_PHY_BAND_6GHZ})
+    {
+        MHz_u bw{20};
+        uint8_t number = band == WIFI_PHY_BAND_5GHZ ? 36 : 1;
+
+        auto width =
+            std::min(m_channelWidth, band == WIFI_PHY_BAND_2_4GHZ ? MHz_u{40} : MHz_u{160});
+        while (bw < width)
+        {
+            bw *= 2;
+            number += Count20MHzSubchannels(bw);
+        }
+
+        for (auto mac : std::initializer_list<Ptr<WifiMac>>{m_apMac, m_staMacs[0]})
+        {
+            mac->GetWifiPhy(linkId)->SetOperatingChannel(
+                WifiPhy::ChannelTuple{number, width, band, 0});
+        }
+        linkId++;
+    }
+
+    // install post reception error model on the AP affiliated with the AP MLD and operating on
+    // the same link as the main PHY of the EMLSR client
+    m_errorModel = CreateObject<ListErrorModel>();
+    m_apMac->GetWifiPhy(m_mainPhyId)->SetPostReceptionErrorModel(m_errorModel);
+}
+
+void
+EmlsrUlTxopTest::BackoffGenerated(uint32_t backoff, uint8_t linkId)
+{
+    NS_LOG_INFO("Backoff value " << backoff << " generated by EMLSR client on link " << +linkId
+                                 << "\n");
+    if (linkId != m_mainPhyId)
+    {
+        return; // we are only interested in backoff on main PHY link
+    }
+
+    if (m_backoffEndTime)
+    {
+        if (m_checkBackoffStarted)
+        {
+            // another backoff value while checkBackoffStarted is true is generated only if
+            // GenerateBackoffIfTxopWithoutTx is true
+            NS_TEST_EXPECT_MSG_EQ(
+                m_genBackoffIfTxopWithoutTx,
+                true,
+                "Another backoff value should not be generated while the main PHY link is blocked");
+
+            NS_TEST_EXPECT_MSG_EQ(m_backoffEndTime.value(),
+                                  Simulator::Now(),
+                                  "Backoff generated at unexpected time");
+        }
+        else
+        {
+            // we are done checking the backoff
+            m_backoffEndTime.reset();
+        }
+    }
+
+    if (m_checkBackoffStarted)
+    {
+        if (!m_backoffEndTime.has_value())
+        {
+            // this is the first time we set m_backoffEndTime, which is done right after receiving
+            // a BlockAck, thus we have to wait an AIFS before invoking backoff
+            m_backoffEndTime = Simulator::Now() +
+                               m_staMacs[0]->GetChannelAccessManager(linkId)->GetSifs() +
+                               m_staMacs[0]->GetQosTxop(AC_BE)->GetAifsn(linkId) *
+                                   m_staMacs[0]->GetChannelAccessManager(linkId)->GetSlot();
+        }
+        else
+        {
+            // we get here when the backoff expired but no transmission occurred, thus we have
+            // generated a new backoff value and we will start decrementing the counter in a slot
+            m_backoffEndTime =
+                Simulator::Now() + m_staMacs[0]->GetChannelAccessManager(linkId)->GetSlot();
+        }
+        // add the time corresponding to the generated number of slots
+        m_backoffEndTime.value() +=
+            backoff * m_staMacs[0]->GetChannelAccessManager(linkId)->GetSlot();
+        NS_LOG_DEBUG("Expected backoff end time = " << m_backoffEndTime->As(Time::US) << "\n");
+    }
+}
+
+void
+EmlsrUlTxopTest::Transmit(Ptr<WifiMac> mac,
+                          uint8_t phyId,
+                          WifiConstPsduMap psduMap,
+                          WifiTxVector txVector,
+                          double txPowerW)
+{
+    EmlsrOperationsTestBase::Transmit(mac, phyId, psduMap, txVector, txPowerW);
+    auto linkId = m_txPsdus.back().linkId;
+
+    auto psdu = psduMap.begin()->second;
+    auto nodeId = mac->GetDevice()->GetNode()->GetId();
+
+    switch (psdu->GetHeader(0).GetType())
+    {
+    case WIFI_MAC_MGT_ASSOCIATION_REQUEST:
+        NS_ASSERT_MSG(nodeId > 0, "APs do not send AssocReq frames");
+        NS_TEST_EXPECT_MSG_EQ(+linkId, +m_mainPhyId, "AssocReq not sent by the main PHY");
+        break;
+
+    case WIFI_MAC_CTL_RTS:
+        CheckRtsFrames(*psdu->begin(), txVector, linkId);
+        break;
+
+    case WIFI_MAC_CTL_CTS:
+        CheckCtsFrames(*psdu->begin(), txVector, linkId);
+        break;
+
+    case WIFI_MAC_QOSDATA:
+        CheckQosFrames(psduMap, txVector, linkId);
+        break;
+
+    case WIFI_MAC_CTL_BACKRESP:
+        CheckBlockAck(psduMap, txVector, linkId);
+        break;
+
+    default:;
+    }
+}
+
+void
+EmlsrUlTxopTest::StartTraffic()
+{
+    // initially, we prevent transmissions on aux PHY links
+    auto auxPhyLinks = m_staMacs[0]->GetSetupLinkIds();
+    auxPhyLinks.erase(m_mainPhyId);
+    if (m_nonEmlsrLink)
+    {
+        auxPhyLinks.erase(*m_nonEmlsrLink);
+    }
+    m_staMacs[0]->BlockUnicastTxOnLinks(WifiQueueBlockedReason::TID_NOT_MAPPED,
+                                        m_apMac->GetAddress(),
+                                        auxPhyLinks);
+
+    // Association, Block Ack agreement establishment and enabling EMLSR mode have been done.
+    // After 50ms, schedule:
+    // - block of transmissions on the link where the main PHY is operating and on the non-EMLSR
+    //   link (if any)
+    // - the generation of two UL packets
+    // - after m_unblockMainPhyLinkDelay, unblock transmissions on the link where the main PHY
+    //   is operating, so that the first data frame is transmitted on that link
+    Simulator::Schedule(MilliSeconds(50), [&]() {
+        std::set<uint8_t> linkIds;
+        linkIds.insert(*m_staMacs[0]->GetLinkForPhy(m_mainPhyId));
+        if (m_nonEmlsrLink)
+        {
+            linkIds.insert(*m_nonEmlsrLink);
+        }
+        m_staMacs[0]->BlockUnicastTxOnLinks(WifiQueueBlockedReason::TID_NOT_MAPPED,
+                                            m_apMac->GetAddress(),
+                                            linkIds);
+
+        NS_LOG_INFO("Enqueuing two packets at the EMLSR client\n");
+        m_staMacs[0]->GetDevice()->GetNode()->AddApplication(GetApplication(UPLINK, 0, 2, 1000));
+        m_firstUlPktsGenTime = Simulator::Now();
+
+        Simulator::Schedule(m_unblockMainPhyLinkDelay, [&]() {
+            m_staMacs[0]->UnblockUnicastTxOnLinks(WifiQueueBlockedReason::TID_NOT_MAPPED,
+                                                  m_apMac->GetAddress(),
+                                                  {*m_staMacs[0]->GetLinkForPhy(m_mainPhyId)});
+        });
+    });
+}
+
+void
+EmlsrUlTxopTest::CheckQosFrames(const WifiConstPsduMap& psduMap,
+                                const WifiTxVector& txVector,
+                                uint8_t linkId)
+{
+    m_countQoSframes++;
+
+    auto txDuration =
+        WifiPhy::CalculateTxDuration(psduMap, txVector, m_apMac->GetWifiPhy(linkId)->GetPhyBand());
+
+    switch (m_countQoSframes)
+    {
+    case 1:
+    case 2:
+        // do nothing, these are the QoS data frames sent to establish BA agreements in DL and UL
+        // direction
+        break;
+    case 3:
+        // first UL data frame (transmitted by the main PHY)
+        if (m_nonEmlsrLink)
+        {
+            // generate data packets for another UL data frame, which will be sent on the
+            // non-EMLSR link
+            NS_LOG_INFO("Enqueuing two packets at the EMLSR client\n");
+            m_staMacs[0]->GetDevice()->GetNode()->AddApplication(
+                GetApplication(UPLINK, 0, 2, 1000));
+
+            // unblock transmissions on the non-EMLSR link once the two packets are queued
+            Simulator::ScheduleNow([=, this]() {
+                m_staMacs[0]->UnblockUnicastTxOnLinks(WifiQueueBlockedReason::TID_NOT_MAPPED,
+                                                      m_apMac->GetAddress(),
+                                                      {*m_nonEmlsrLink});
+            });
+        }
+
+        // check that other EMLSR links are now blocked on the EMLSR client and on the AP MLD
+        // after this QoS data frame is received
+        Simulator::ScheduleNow([=, this]() {
+            auto phyHdrTxTime = WifiPhy::CalculatePhyPreambleAndHeaderDuration(txVector);
+            auto macHdrSize = (*psduMap.at(SU_STA_ID)->begin())->GetHeader().GetSerializedSize() +
+                              4 /* A-MPDU subframe header size */;
+            auto macHdrTxTime =
+                DataRate(txVector.GetMode().GetDataRate(txVector)).CalculateBytesTxTime(macHdrSize);
+
+            for (auto id : m_staMacs[0]->GetLinkIds())
+            {
+                CheckBlockedLink(
+                    m_staMacs[0],
+                    m_apMac->GetAddress(),
+                    id,
+                    WifiQueueBlockedReason::USING_OTHER_EMLSR_LINK,
+                    id != m_staMacs[0]->GetLinkForPhy(m_mainPhyId) && m_staMacs[0]->IsEmlsrLink(id),
+                    "Checking EMLSR links on EMLSR client while sending the first data frame",
+                    false);
+
+                Simulator::Schedule(phyHdrTxTime + macHdrTxTime + MicroSeconds(1), [=, this]() {
+                    CheckBlockedLink(m_apMac,
+                                     m_staMacs[0]->GetAddress(),
+                                     id,
+                                     WifiQueueBlockedReason::USING_OTHER_EMLSR_LINK,
+                                     id != m_staMacs[0]->GetLinkForPhy(m_mainPhyId) &&
+                                         m_staMacs[0]->IsEmlsrLink(id),
+                                     "Checking EMLSR links on AP MLD right after receiving the MAC "
+                                     "header of the first data frame");
+                });
+
+                Simulator::Schedule(txDuration + MAX_PROPAGATION_DELAY, [=, this]() {
+                    CheckBlockedLink(
+                        m_apMac,
+                        m_staMacs[0]->GetAddress(),
+                        id,
+                        WifiQueueBlockedReason::USING_OTHER_EMLSR_LINK,
+                        id != m_staMacs[0]->GetLinkForPhy(m_mainPhyId) &&
+                            m_staMacs[0]->IsEmlsrLink(id),
+                        "Checking EMLSR links on AP MLD after sending the first data frame");
+                });
+            }
+        });
+
+        if (m_nonEmlsrLink)
+        {
+            break;
+        }
+        m_countQoSframes++; // if all EMLSR links, next case is already executed now
+        [[fallthrough]];
+    case 4:
+        // check that other EMLSR links are now blocked on the EMLSR client and on the AP MLD
+        // after this QoS data frame is received
+        Simulator::ScheduleNow([=, this]() {
+            // make aux PHYs capable of transmitting frames
+            auto auxPhyLinks = m_staMacs[0]->GetSetupLinkIds();
+            auxPhyLinks.erase(m_mainPhyId);
+            if (m_nonEmlsrLink)
+            {
+                auxPhyLinks.erase(*m_nonEmlsrLink);
+            }
+            m_staMacs[0]->UnblockUnicastTxOnLinks(WifiQueueBlockedReason::TID_NOT_MAPPED,
+                                                  m_apMac->GetAddress(),
+                                                  auxPhyLinks);
+
+            // block transmissions on the link where the main PHY is operating
+            m_staMacs[0]->BlockUnicastTxOnLinks(WifiQueueBlockedReason::TID_NOT_MAPPED,
+                                                m_apMac->GetAddress(),
+                                                {*m_staMacs[0]->GetLinkForPhy(m_mainPhyId)});
+
+            // generate data packets for another UL data frame, which will be sent on a link on
+            // which an aux PHY is operating
+            NS_LOG_INFO("Enqueuing two packets at the EMLSR client\n");
+            m_staMacs[0]->GetDevice()->GetNode()->AddApplication(
+                GetApplication(UPLINK, 0, 2, 1000));
+        });
+        break;
+    case 5:
+        // check that other EMLSR links are now blocked on both the EMLSR client and the AP MLD
+        Simulator::ScheduleNow([=, this]() {
+            for (auto id : m_staMacs[0]->GetLinkIds())
+            {
+                CheckBlockedLink(
+                    m_staMacs[0],
+                    m_apMac->GetAddress(),
+                    id,
+                    WifiQueueBlockedReason::USING_OTHER_EMLSR_LINK,
+                    id != linkId && m_staMacs[0]->IsEmlsrLink(id),
+                    "Checking EMLSR links on EMLSR client while sending the second data frame",
+                    false);
+
+                CheckBlockedLink(
+                    m_apMac,
+                    m_staMacs[0]->GetAddress(),
+                    id,
+                    WifiQueueBlockedReason::USING_OTHER_EMLSR_LINK,
+                    id != linkId && m_staMacs[0]->IsEmlsrLink(id),
+                    "Checking EMLSR links on AP MLD while sending the second data frame",
+                    false);
+            }
+
+            // unblock transmission on the link where the main PHY is operating
+            m_staMacs[0]->GetMacQueueScheduler()->UnblockQueues(
+                WifiQueueBlockedReason::TID_NOT_MAPPED,
+                AC_BE,
+                {WIFI_QOSDATA_QUEUE},
+                m_apMac->GetAddress(),
+                m_staMacs[0]->GetAddress(),
+                {0},
+                {m_mainPhyId});
+        });
+        break;
+    }
+}
+
+void
+EmlsrUlTxopTest::CheckBlockAck(const WifiConstPsduMap& psduMap,
+                               const WifiTxVector& txVector,
+                               uint8_t linkId)
+{
+    m_countBlockAck++;
+
+    auto auxPhyLinks = m_staMacs[0]->GetSetupLinkIds();
+    auxPhyLinks.erase(m_mainPhyId);
+    if (m_nonEmlsrLink)
+    {
+        auxPhyLinks.erase(*m_nonEmlsrLink);
+    }
+
+    auto txDuration =
+        WifiPhy::CalculateTxDuration(psduMap, txVector, m_apMac->GetWifiPhy(linkId)->GetPhyBand());
+
+    // in this test, BlockAck frames terminates TXOP, thus aux PHYs shall be in sleep mode before
+    // the end of BlockAck reception and awake right afterwards
+    if (linkId != m_nonEmlsrLink)
+    {
+        Simulator::Schedule(txDuration - TimeStep(1),
+                            &EmlsrUlTxopTest::CheckAuxPhysSleepMode,
+                            this,
+                            m_staMacs[0],
+                            true);
+        Simulator::Schedule(txDuration + TimeStep(1),
+                            &EmlsrUlTxopTest::CheckAuxPhysSleepMode,
+                            this,
+                            m_staMacs[0],
+                            false);
+
+        // if the TXOP has been carried out on a link other than the preferred link, the main PHY
+        // switches back to the preferred link when the TXOP ends
+        if (m_staMacs[0]->GetLinkForPhy(m_mainPhyId) != linkId)
+        {
+            Simulator::Schedule(txDuration + TimeStep(1), [=, this]() {
+                CheckMainPhyTraceInfo(0, "TxopEnded", linkId, m_mainPhyId);
+            });
+        }
+    }
+
+    switch (m_countBlockAck)
+    {
+    case 1:
+    case 2:
+        // do nothing, these are BlockAcks in response to the QoS data frames sent to establish
+        // BA agreements in DL and UL direction
+        break;
+    case 3:
+        if (linkId == m_nonEmlsrLink)
+        {
+            // this BlockAck has been sent on the non-EMLSR link, ignore it
+            break;
+        }
+        m_checkBackoffStarted = true;
+        if (!m_nonEmlsrLink)
+        {
+            m_countBlockAck++; // if all EMLSR links, next case is already executed now
+        }
+        [[fallthrough]];
+    case 4:
+        if (m_nonEmlsrLink && m_countBlockAck == 4)
+        {
+            // block transmissions on the non-EMLSR link
+            Simulator::Schedule(txDuration + NanoSeconds(1), [=, this]() {
+                m_staMacs[0]->BlockUnicastTxOnLinks(WifiQueueBlockedReason::TID_NOT_MAPPED,
+                                                    m_apMac->GetAddress(),
+                                                    {*m_nonEmlsrLink});
+            });
+        }
+        if (linkId == m_nonEmlsrLink)
+        {
+            // this BlockAck has been sent on the non-EMLSR link, ignore it
+            break;
+        }
+        m_checkBackoffStarted = true;
+        break;
+    case 5:
+        // Block Ack in response to the second data frame sent by the EMLSR client on EMLSR links.
+        // Check that MediumSyncDelay timer starts running on the link where the main PHY switches
+        // to when the channel switch is completed
+        Simulator::Schedule(
+            txDuration + m_staMacs[0]->GetDevice()->GetPhy(m_mainPhyId)->GetChannelSwitchDelay() +
+                NanoSeconds(1),
+            [=, this]() {
+                auto elapsed =
+                    m_staMacs[0]->GetEmlsrManager()->GetElapsedMediumSyncDelayTimer(m_mainPhyId);
+                NS_TEST_EXPECT_MSG_EQ(
+                    elapsed.has_value(),
+                    true,
+                    "MediumSyncDelay timer not running on link where main PHY is operating");
+                m_lastMsdExpiryTime = Simulator::Now() +
+                                      m_staMacs[0]->GetEmlsrManager()->GetMediumSyncDuration() -
+                                      *elapsed;
+            });
+
+        // Check that the number of backoff slots is not changed since the beginning of the TXOP
+        Simulator::Schedule(txDuration, [=, this]() {
+            m_checkBackoffStarted = false;
+            NS_TEST_ASSERT_MSG_EQ(m_backoffEndTime.has_value(),
+                                  true,
+                                  "Backoff end time should have been calculated");
+            // when this BlockAck is received, the TXOP ends and the main PHY link is unblocked,
+            // which causes a new backoff timer to be generated if the backoff timer is not
+            // already running
+            *m_backoffEndTime = Max(*m_backoffEndTime, Simulator::Now());
+        });
+
+        // make aux PHYs not capable of transmitting frames
+        m_staMacs[0]->BlockUnicastTxOnLinks(WifiQueueBlockedReason::TID_NOT_MAPPED,
+                                            m_apMac->GetAddress(),
+                                            auxPhyLinks);
+
+        // generate data packets for another UL data frame, which will be sent on the link where
+        // the main PHY is operating
+        NS_LOG_INFO("Enqueuing two packets at the EMLSR client\n");
+        m_staMacs[0]->GetDevice()->GetNode()->AddApplication(GetApplication(UPLINK, 0, 2, 1000));
+        break;
+    case 6: {
+        // block transmission on the main PHY link and on the non-EMLSR link (if any), so that
+        // the next QoS frames are sent on a link where an aux PHY is operating
+        std::set<uint8_t> linkIds{m_mainPhyId};
+        if (m_nonEmlsrLink)
+        {
+            linkIds.insert(*m_nonEmlsrLink);
+        }
+        m_staMacs[0]->GetMacQueueScheduler()->BlockQueues(WifiQueueBlockedReason::TID_NOT_MAPPED,
+                                                          AC_BE,
+                                                          {WIFI_QOSDATA_QUEUE},
+                                                          m_apMac->GetAddress(),
+                                                          m_staMacs[0]->GetAddress(),
+                                                          {0},
+                                                          linkIds);
+    }
+        // make sure aux PHYs are capable of transmitting frames
+        m_staMacs[0]->UnblockUnicastTxOnLinks(WifiQueueBlockedReason::TID_NOT_MAPPED,
+                                              m_apMac->GetAddress(),
+                                              auxPhyLinks);
+
+        // generate data packets for another UL data frame
+        NS_LOG_INFO("Enqueuing two packets at the EMLSR client\n");
+        m_staMacs[0]->GetDevice()->GetNode()->AddApplication(GetApplication(UPLINK, 0, 2, 1000));
+        break;
+    }
+}
+
+void
+EmlsrUlTxopTest::CheckRtsFrames(Ptr<const WifiMpdu> mpdu,
+                                const WifiTxVector& txVector,
+                                uint8_t linkId)
+{
+    if (m_firstUlPktsGenTime.IsZero())
+    {
+        // this function only considers RTS frames sent after the first QoS data frame
+        return;
+    }
+
+    if (linkId != m_mainPhyId)
+    {
+        if (m_countRtsframes > 0 && !m_corruptCts.has_value())
+        {
+            // we get here for the frame exchange in which the CTS response must be corrupted.
+            // Install post reception error model on the STA affiliated with the EMLSR client that
+            // is transmitting this RTS frame
+            m_errorModel = CreateObject<ListErrorModel>();
+            m_staMacs[0]->GetWifiPhy(linkId)->SetPostReceptionErrorModel(m_errorModel);
+            m_corruptCts = true;
+        }
+
+        return;
+    }
+
+    // we get here for RTS frames sent by the main PHY while the MediumSyncDelay timer is running
+    m_countRtsframes++;
+
+    NS_TEST_EXPECT_MSG_EQ(txVector.GetChannelWidth(),
+                          m_staMacs[0]->GetDevice()->GetPhy(m_mainPhyId)->GetChannelWidth(),
+                          "RTS sent by main PHY on an unexpected width");
+
+    // corrupt reception at AP MLD
+    NS_LOG_INFO("CORRUPTED");
+    m_errorModel->SetList({mpdu->GetPacket()->GetUid()});
+}
+
+void
+EmlsrUlTxopTest::CheckCtsFrames(Ptr<const WifiMpdu> mpdu,
+                                const WifiTxVector& txVector,
+                                uint8_t linkId)
+{
+    if (m_firstUlPktsGenTime.IsZero())
+    {
+        // this function only considers CTS frames sent after the first QoS data frame
+        return;
+    }
+
+    auto txDuration = WifiPhy::CalculateTxDuration(mpdu->GetSize(),
+                                                   txVector,
+                                                   m_apMac->GetWifiPhy(linkId)->GetPhyBand());
+    const auto doCorruptCts = m_corruptCts.has_value() && *m_corruptCts;
+
+    if (linkId != m_staMacs[0]->GetLinkForPhy(m_mainPhyId) && linkId != m_nonEmlsrLink &&
+        mpdu->GetHeader().GetAddr1() == m_staMacs[0]->GetFrameExchangeManager(linkId)->GetAddress())
+    {
+        // this is a CTS sent to an aux PHY starting an UL TXOP. Given that aux PHYs do not
+        // switch channel, they are put in sleep mode when the main PHY starts operating on their
+        // link, which coincides with the end of CTS plus two propagation delays
+        const auto auxPhy = m_staMacs[0]->GetWifiPhy(linkId);
+        const auto mainPhy = m_staMacs[0]->GetDevice()->GetPhy(m_mainPhyId);
+        Simulator::Schedule(txDuration, [=, this]() {
+            // when CTS ends, the main PHY is still switching and the aux PHY is not yet sleeping
+            NS_TEST_EXPECT_MSG_EQ(mainPhy->IsStateSwitching(),
+                                  true,
+                                  "Expecting the main PHY to be switching link");
+            NS_TEST_EXPECT_MSG_EQ(auxPhy->IsStateSleep(),
+                                  false,
+                                  "Aux PHY on link " << +linkId << " already in sleep mode");
+            // when CTS is sent, the main PHY may have already started switching, thus we may not
+            // know which link the main PHY is moving from
+            CheckMainPhyTraceInfo(0, "UlTxopRtsSentByAuxPhy", std::nullopt, linkId, false);
+        });
+        Simulator::Schedule(txDuration + (2 * MAX_PROPAGATION_DELAY) + TimeStep(1), [=, this]() {
+            // aux PHYs are put to sleep if and only if CTS is not corrupted
+            // (causing the end of the TXOP)
+            CheckAuxPhysSleepMode(m_staMacs[0], !doCorruptCts);
+            // if CTS is corrupted, TXOP ends and the main PHY switches back to the preferred
+            // link, unless channel access is obtained on another link before the main PHY
+            // completes the switch to the link on which CTS timeout occurred
+            if (auto ehtFem = StaticCast<EhtFrameExchangeManager>(
+                    m_staMacs[0]->GetFrameExchangeManager(linkId));
+                doCorruptCts && !ehtFem->UsingOtherEmlsrLink())
+            {
+                // check the traced elapsed time since CTS timeout before calling
+                // CheckMainPhyTraceInfo
+                if (const auto traceInfoIt = m_traceInfo.find(0);
+                    traceInfoIt != m_traceInfo.cend() &&
+                    traceInfoIt->second->GetName() == "CtsAfterRtsTimeout")
+                {
+                    const auto& traceInfo =
+                        static_cast<const EmlsrCtsAfterRtsTimeoutTrace&>(*traceInfoIt->second);
+                    NS_TEST_EXPECT_MSG_GT(traceInfo.sinceCtsTimeout,
+                                          Time{0},
+                                          "Expected non-zero remaining time because main PHY "
+                                          "was switching when CTS timeout occurred");
+                }
+
+                CheckMainPhyTraceInfo(0, "CtsAfterRtsTimeout", linkId, m_mainPhyId);
+            }
+        });
+    }
+
+    if (doCorruptCts)
+    {
+        // corrupt reception at EMLSR client
+        NS_LOG_INFO("CORRUPTED");
+        m_errorModel->SetList({mpdu->GetPacket()->GetUid()});
+        m_corruptCts = false;
+    }
+}
+
+void
+EmlsrUlTxopTest::DoRun()
+{
+    Simulator::Stop(m_duration);
+    Simulator::Run();
+
+    CheckResults();
+
+    Simulator::Destroy();
+}
+
+void
+EmlsrUlTxopTest::CheckResults()
+{
+    if (m_msdMaxNTxops > 0)
+    {
+        NS_TEST_EXPECT_MSG_LT_OR_EQ(
+            m_countRtsframes,
+            +m_msdMaxNTxops,
+            "Unexpected number of RTS frames sent while the MediumSyncDelay timer is running");
+    }
+
+    auto psduIt = m_txPsdus.cbegin();
+
+    // lambda to jump to the next QoS data frame or MU-RTS Trigger Frame or RTS transmitted
+    // to/by an EMLSR client
+    auto jumpToQosDataOrMuRts = [&]() {
+        while (psduIt != m_txPsdus.cend() &&
+               !psduIt->psduMap.cbegin()->second->GetHeader(0).IsQosData() &&
+               !psduIt->psduMap.cbegin()->second->GetHeader(0).IsRts())
+        {
+            auto psdu = psduIt->psduMap.cbegin()->second;
+            if (psdu->GetHeader(0).IsTrigger())
+            {
+                CtrlTriggerHeader trigger;
+                psdu->GetPayload(0)->PeekHeader(trigger);
+                if (trigger.IsMuRts())
+                {
+                    break;
+                }
+            }
+            psduIt++;
+        }
+    };
+
+    /**
+     * EMLSR client with EMLSR mode enabled on all links (main PHY ID = 1).
+     *
+     *  main PHY│
+     *  blocked,│
+     *  aux PHYs││main PHY blocked│
+     *  cannot  │
+     *  transmit│
+     *          │                    ┌───┐         ┌──┐
+     *  [link 0]                     │CTS│         │BA│
+     *  ────────────────────────┬───┬┴───┴┬───┬───┬┴──┴─────────────────────────────────────────
+     *                          │RTS│     │QoS│QoS│
+     *                          └───┘     │ 6 │ 7 │
+     *                                    └───┴───┘
+     *                             gen backoff      gen backoff if     MediumSyncDelay
+     *                    ┌──┐    (also many times)  not running       timer expired ┌──┐
+     *  [link 1]          │BA│  │   if allowed        │                   │          │BA│
+     *  ─────────┬───┬───┬┴──┴───────────────────────────┬───┬─────┬───┬────┬───┬───┬┴──┴───────
+     *           │QoS│QoS│                               │RTS│ ... │RTS│    │QoS│QoS│
+     *           │ 4 │ 5 │                               └───┘     └───┘    │ 8 │ 9 │
+     *           └───┴───┘                                                  └───┴───┘
+     *
+     *  [link 2]
+     *  ───────────────────────────────────────────────────────────────────────────
+     *
+     *
+     *
+     * EMLSR client with EMLSR mode enabled on links 0 and 1 (main PHY ID = 1).
+     *
+     * main PHY │
+     *   and    │
+     * non-EMLSR│
+     *   link   │
+     *  blocked,│
+     *  aux PHYs││main PHY blocked│
+     *  cannot  │
+     *  transmit│
+     *          │                    ┌───┐         ┌──┐
+     *  [link 0]                     │CTS│         │BA│
+     *  ────────────────────────┬───┬┴───┴┬───┬───┬┴──┴─────────────────────────────────────────
+     *                          │RTS│     │QoS│QoS│
+     *                          └───┘     │ 8 │ 9 │
+     *                                    └───┴───┘
+     *                             gen backoff      gen backoff if     MediumSyncDelay
+     *                    ┌──┐    (also many times)  not running       timer expired ┌──┐
+     *  [link 1]          │BA│  │   if allowed        │                   │          │BA│
+     *  ─────────┬───┬───┬┴──┴───────────────────────────┬───┬─────┬───┬────┬───┬───┬┴──┴───────
+     *           │QoS│QoS│                               │RTS│ ... │RTS│    │QoS│QoS│
+     *           │ 4 │ 5 │                               └───┘     └───┘    │ 10│ 11│
+     *           └───┴───┘                                                  └───┴───┘
+     *                     ┌──┐
+     *  [link 2]           │BA│
+     *  ──────────┬───┬───┬┴──┴────────────────────────────────────────────────────────────
+     *            │QoS│QoS│
+     *            │ 6 │ 7 │
+     *            └───┴───┘
+     *
+     * For both scenarios, after the last frame exchange on the main PHY link, we have the
+     * following frame exchanges on an EMLSR link where an aux PHY is operating on.
+     *
+     *
+     *  [ link ]   ┌───┐         ┌───┐         ┌──┐
+     *  [0 or 2]   │CTS│         │CTS│         │BA│
+     *  ──────┬───┬┴───X────┬───┬┴───┴┬───┬───┬┴──┴─────────────────────────────────────────
+     *        │RTS│         │RTS│     │QoS│QoS│
+     *        └───┘         └───┘     │ X │ Y │
+     *                                └───┴───┘
+     * For all EMLSR links scenario, X=10, Y=11
+     * For the scenario with a non-EMLSR link, X=12, Y=13
+     */
+
+    // jump to the first (non-Beacon) frame transmitted after establishing BA agreements and
+    // enabling EMLSR mode
+    while (psduIt != m_txPsdus.cend() &&
+           (psduIt->startTx < m_firstUlPktsGenTime ||
+            psduIt->psduMap.cbegin()->second->GetHeader(0).IsBeacon()))
+    {
+        ++psduIt;
+    }
+
+    // the first QoS data frame is transmitted by the main PHY without RTS protection as soon
+    // as transmissions on the link where the main PHY is operating are unblocked (at this
+    // moment, aux PHYs cannot transmit)
+    NS_TEST_ASSERT_MSG_EQ((psduIt != m_txPsdus.cend()),
+                          true,
+                          "First QoS data frame has not been transmitted");
+    NS_TEST_EXPECT_MSG_EQ(psduIt->psduMap.cbegin()->second->GetHeader(0).IsQosData(),
+                          true,
+                          "First QoS data frame should be transmitted without protection");
+    NS_TEST_EXPECT_MSG_EQ(+psduIt->phyId,
+                          +m_mainPhyId,
+                          "First QoS data frame should be transmitted by the main PHY");
+    NS_TEST_EXPECT_MSG_GT_OR_EQ(psduIt->startTx,
+                                m_firstUlPktsGenTime + m_unblockMainPhyLinkDelay,
+                                "First QoS data frame sent too early");
+
+    auto prevPsduIt = psduIt++;
+    jumpToQosDataOrMuRts();
+
+    if (m_nonEmlsrLink)
+    {
+        // an additional data frame is sent concurrently on the non-EMLSR link
+        NS_TEST_ASSERT_MSG_EQ(
+            (psduIt != m_txPsdus.cend()),
+            true,
+            "Expected another QoS data frame sent concurrently with the first frame");
+        NS_TEST_EXPECT_MSG_EQ(
+            psduIt->psduMap.cbegin()->second->GetHeader(0).IsQosData(),
+            true,
+            "First data frame on non-EMLSR link should be transmitted without protection");
+        NS_TEST_EXPECT_MSG_EQ(+psduIt->linkId,
+                              +m_nonEmlsrLink.value(),
+                              "First data frame expected to be transmitted on the non-EMLSR link");
+        const auto txDuration =
+            WifiPhy::CalculateTxDuration(prevPsduIt->psduMap,
+                                         prevPsduIt->txVector,
+                                         m_staMacs[0]->GetWifiPhy(prevPsduIt->phyId)->GetPhyBand());
+        NS_TEST_EXPECT_MSG_LT(psduIt->startTx,
+                              prevPsduIt->startTx + txDuration,
+                              "First data frame on the non-EMLSR link not sent concurrently");
+        psduIt++;
+        jumpToQosDataOrMuRts();
+    }
+
+    // the second QoS data frame is transmitted by the main PHY after that the aux PHY has
+    // obtained a TXOP and sent an RTS
+    // RTS
+    NS_TEST_ASSERT_MSG_EQ((psduIt != m_txPsdus.cend()),
+                          true,
+                          "RTS before second QoS data frame has not been transmitted");
+    NS_TEST_EXPECT_MSG_EQ(psduIt->psduMap.cbegin()->second->GetHeader(0).IsRts(),
+                          true,
+                          "Second QoS data frame should be transmitted with protection");
+    NS_TEST_EXPECT_MSG_NE(
+        +psduIt->phyId,
+        +m_mainPhyId,
+        "RTS before second QoS data frame should not be transmitted by the main PHY");
+    NS_TEST_EXPECT_MSG_EQ(psduIt->txVector.GetChannelWidth(),
+                          m_auxPhyChannelWidth,
+                          "RTS before second data frame transmitted on an unexpected width");
+    psduIt++;
+    // CTS
+    NS_TEST_ASSERT_MSG_EQ((psduIt != m_txPsdus.cend()),
+                          true,
+                          "CTS before second QoS data frame has not been transmitted");
+    NS_TEST_EXPECT_MSG_EQ(psduIt->psduMap.cbegin()->second->GetHeader(0).IsCts(),
+                          true,
+                          "CTS before second QoS data frame has not been transmitted");
+    psduIt++;
+    // QoS Data
+    NS_TEST_ASSERT_MSG_EQ((psduIt != m_txPsdus.cend()),
+                          true,
+                          "Second QoS data frame has not been transmitted");
+    NS_TEST_EXPECT_MSG_EQ(psduIt->psduMap.cbegin()->second->GetHeader(0).IsQosData(),
+                          true,
+                          "Second QoS data frame has not been transmitted");
+    NS_TEST_EXPECT_MSG_EQ(+psduIt->phyId,
+                          +m_mainPhyId,
+                          "Second QoS data frame should be transmitted by the main PHY");
+    NS_TEST_EXPECT_MSG_EQ(psduIt->txVector.GetChannelWidth(),
+                          m_auxPhyChannelWidth,
+                          "Second data frame not transmitted on the same width as RTS");
+
+    bool moreQosDataFound = false;
+
+    while (++psduIt != m_txPsdus.cend())
+    {
+        jumpToQosDataOrMuRts();
+        if (psduIt != m_txPsdus.cend() &&
+            psduIt->psduMap.cbegin()->second->GetHeader(0).IsQosData())
+        {
+            moreQosDataFound = true;
+
+            NS_TEST_EXPECT_MSG_EQ(+psduIt->phyId,
+                                  +m_mainPhyId,
+                                  "Third QoS data frame should be transmitted by the main PHY");
+            NS_TEST_EXPECT_MSG_EQ(psduIt->txVector.GetChannelWidth(),
+                                  m_staMacs[0]->GetDevice()->GetPhy(m_mainPhyId)->GetChannelWidth(),
+                                  "Expecting TX width of third data frame to equal the channel "
+                                  "width used by the main PHY");
+            NS_TEST_EXPECT_MSG_GT_OR_EQ(
+                psduIt->startTx,
+                m_lastMsdExpiryTime,
+                "Third QoS data frame sent before MediumSyncDelay timer expired");
+
+            break;
+        }
+    }
+
+    NS_TEST_EXPECT_MSG_EQ(moreQosDataFound,
+                          true,
+                          "Third QoS data frame transmitted by the main PHY not found");
+
+    NS_TEST_ASSERT_MSG_EQ((psduIt != m_txPsdus.cend()), true, "Expected more frames");
+    ++psduIt;
+    jumpToQosDataOrMuRts();
+
+    // the first attempt at transmitting the fourth QoS data frame fails because CTS is corrupted
+    // RTS
+    NS_TEST_ASSERT_MSG_EQ((psduIt != m_txPsdus.cend()),
+                          true,
+                          "RTS before fourth QoS data frame has not been transmitted");
+    NS_TEST_EXPECT_MSG_EQ(psduIt->psduMap.cbegin()->second->GetHeader(0).IsRts(),
+                          true,
+                          "Fourth QoS data frame should be transmitted with protection");
+    NS_TEST_EXPECT_MSG_NE(
+        +psduIt->phyId,
+        +m_mainPhyId,
+        "RTS before fourth QoS data frame should not be transmitted by the main PHY");
+    NS_TEST_EXPECT_MSG_EQ(psduIt->txVector.GetChannelWidth(),
+                          m_auxPhyChannelWidth,
+                          "RTS before fourth data frame transmitted on an unexpected width");
+    psduIt++;
+    // CTS
+    NS_TEST_ASSERT_MSG_EQ((psduIt != m_txPsdus.cend()),
+                          true,
+                          "CTS before fourth QoS data frame has not been transmitted");
+    NS_TEST_EXPECT_MSG_EQ(psduIt->psduMap.cbegin()->second->GetHeader(0).IsCts(),
+                          true,
+                          "CTS before fourth QoS data frame has not been transmitted");
+    psduIt++;
+    jumpToQosDataOrMuRts();
+
+    // the fourth QoS data frame is transmitted by an aux PHY after that the aux PHY has
+    // obtained a TXOP and sent an RTS
+    // RTS
+    NS_TEST_ASSERT_MSG_EQ((psduIt != m_txPsdus.cend()),
+                          true,
+                          "RTS before fourth QoS data frame has not been transmitted");
+    NS_TEST_EXPECT_MSG_EQ(psduIt->psduMap.cbegin()->second->GetHeader(0).IsRts(),
+                          true,
+                          "Fourth QoS data frame should be transmitted with protection");
+    NS_TEST_EXPECT_MSG_NE(
+        +psduIt->phyId,
+        +m_mainPhyId,
+        "RTS before fourth QoS data frame should not be transmitted by the main PHY");
+    NS_TEST_EXPECT_MSG_EQ(psduIt->txVector.GetChannelWidth(),
+                          m_auxPhyChannelWidth,
+                          "RTS before fourth data frame transmitted on an unexpected width");
+    psduIt++;
+    // CTS
+    NS_TEST_ASSERT_MSG_EQ((psduIt != m_txPsdus.cend()),
+                          true,
+                          "CTS before fourth QoS data frame has not been transmitted");
+    NS_TEST_EXPECT_MSG_EQ(psduIt->psduMap.cbegin()->second->GetHeader(0).IsCts(),
+                          true,
+                          "CTS before fourth QoS data frame has not been transmitted");
+    psduIt++;
+    // QoS Data
+    NS_TEST_ASSERT_MSG_EQ((psduIt != m_txPsdus.cend()),
+                          true,
+                          "Fourth QoS data frame has not been transmitted");
+    NS_TEST_EXPECT_MSG_EQ(psduIt->psduMap.cbegin()->second->GetHeader(0).IsQosData(),
+                          true,
+                          "Fourth QoS data frame has not been transmitted");
+    NS_TEST_EXPECT_MSG_EQ(+psduIt->phyId,
+                          +m_mainPhyId,
+                          "Fourth QoS data frame should be transmitted by the main PHY");
+    NS_TEST_EXPECT_MSG_EQ(psduIt->txVector.GetChannelWidth(),
+                          m_auxPhyChannelWidth,
+                          "Fourth data frame not transmitted on the same width as RTS");
+}
+
+EmlsrUlOfdmaTest::EmlsrUlOfdmaTest(bool enableBsrp)
+    : EmlsrOperationsTestBase("Check UL OFDMA operations with an EMLSR client"),
+      m_enableBsrp(enableBsrp),
+      m_txPsdusPos(0),
+      m_startAccessReq(0)
+{
+    m_linksToEnableEmlsrOn = {0, 1, 2};
+    m_nEmlsrStations = 1;
+    m_nNonEmlsrStations = 1;
+    m_establishBaDl = {};
+    m_establishBaUl = {0};
+    m_mainPhyId = 1;
+    m_duration = Seconds(1.0);
+}
+
+void
+EmlsrUlOfdmaTest::DoSetup()
+{
+    Config::SetDefault("ns3::WifiPhy::ChannelSwitchDelay", TimeValue(m_transitionDelay.at(0)));
+
+    EmlsrOperationsTestBase::DoSetup();
+
+    m_apMac->GetQosTxop(AC_BE)->SetTxopLimits(
+        {MicroSeconds(3200), MicroSeconds(3200), MicroSeconds(3200)});
+
+    auto muScheduler = CreateObjectWithAttributes<RrMultiUserScheduler>("EnableUlOfdma",
+                                                                        BooleanValue(true),
+                                                                        "EnableBsrp",
+                                                                        BooleanValue(m_enableBsrp));
+    m_apMac->AggregateObject(muScheduler);
+}
+
+void
+EmlsrUlOfdmaTest::Transmit(Ptr<WifiMac> mac,
+                           uint8_t phyId,
+                           WifiConstPsduMap psduMap,
+                           WifiTxVector txVector,
+                           double txPowerW)
+{
+    EmlsrOperationsTestBase::Transmit(mac, phyId, psduMap, txVector, txPowerW);
+    auto linkId = m_txPsdus.back().linkId;
+
+    auto psdu = psduMap.begin()->second;
+
+    switch (psdu->GetHeader(0).GetType())
+    {
+    case WIFI_MAC_CTL_TRIGGER:
+        if (m_txPsdusPos == 0 && !m_startAccessReq.IsZero() && Simulator::Now() >= m_startAccessReq)
+        {
+            // this is the first Trigger Frame sent after the AP requested channel access
+            // through the Multi-user scheduler and it is an ICF for the EMLSR client
+            m_txPsdusPos = m_txPsdus.size() - 1;
+            auto txDuration = WifiPhy::CalculateTxDuration(psduMap,
+                                                           txVector,
+                                                           mac->GetWifiPhy(linkId)->GetPhyBand());
+            NS_LOG_INFO("This is the first Trigger Frame\n");
+            // once the Trigger Frame is received by the EMLSR client, make the client application
+            // on the EMLSR client generate two packets. These packets will be sent via UL OFDMA
+            // because the EMLSR client has blocked transmissions on other links when receiving
+            // this Trigger Frame, hence it will not try to get access on other links via EDCA
+            Simulator::Schedule(
+                txDuration + MicroSeconds(1), // to account for propagation delay
+                [=, this]() {
+                    for (const auto id : m_staMacs[0]->GetLinkIds())
+                    {
+                        auto ehtFem = StaticCast<EhtFrameExchangeManager>(
+                            m_staMacs[0]->GetFrameExchangeManager(id));
+                        NS_TEST_EXPECT_MSG_EQ(
+                            ehtFem->UsingOtherEmlsrLink(),
+                            (id != linkId),
+                            "Link " << +id << " was" << (id == linkId ? " not" : "")
+                                    << " expected to be blocked on EMLSR client at time "
+                                    << Simulator::Now().As(Time::NS));
+                    }
+                    NS_LOG_INFO("Generate two packets\n");
+                    m_staMacs[0]->GetDevice()->GetNode()->AddApplication(
+                        GetApplication(UPLINK, 0, 2, 100));
+                });
+        }
+        break;
+
+    case WIFI_MAC_CTL_BACKRESP:
+        if (!m_startAccessReq.IsZero() && Simulator::Now() >= m_startAccessReq)
+        {
+            CtrlBAckResponseHeader blockAck;
+            psdu->GetPayload(0)->PeekHeader(blockAck);
+            if (blockAck.IsMultiSta())
+            {
+                auto txDuration =
+                    WifiPhy::CalculateTxDuration(psduMap,
+                                                 txVector,
+                                                 mac->GetWifiPhy(linkId)->GetPhyBand());
+                Simulator::Stop(txDuration + MicroSeconds(1));
+            }
+        }
+        break;
+
+    default:;
+    }
+
+    if (psdu->GetHeader(0).IsCfEnd())
+    {
+        // we do not check CF-End frames
+        m_txPsdus.pop_back();
+    }
+}
+
+void
+EmlsrUlOfdmaTest::DoRun()
+{
+    Simulator::Stop(m_duration);
+    Simulator::Run();
+
+    CheckResults();
+
+    Simulator::Destroy();
+}
+
+void
+EmlsrUlOfdmaTest::StartTraffic()
+{
+    auto muScheduler = m_apMac->GetObject<MultiUserScheduler>();
+    NS_TEST_ASSERT_MSG_NE(muScheduler, nullptr, "No MU scheduler installed on AP MLD");
+
+    NS_LOG_INFO("Setting Access Request interval");
+
+    const auto interval = MilliSeconds(50);
+    muScheduler->SetAccessReqInterval(interval);
+    m_startAccessReq = Simulator::Now() + interval;
+}
+
+void
+EmlsrUlOfdmaTest::CheckResults()
+{
+    /**
+     * Sending BSRP TF disabled.
+     *
+     * The figure assumes that link 0 is used to send the first Trigger Frame after that the
+     * AP MLD requests channel access through the Multi-user scheduler. The first Trigger Frame
+     * is MU-RTS because EMLSR client needs an ICF; the other Trigger Frames are Basic TFs and
+     * do not solicit the EMLSR client.
+     *             ┌─────┐     ┌─────┐           ┌──────┐
+     *             │ MU  │     │Basic│           │Multi-│
+     *  [link 0]   │ RTS │     │  TF │           │STA BA│
+     *  ───────────┴─────┴┬───┬┴─────┴┬────────┬─┴──────┴───────────────
+     *                    │CTS│       │QoS Null│
+     *                    ├───┤       ├────────┤
+     *                    │CTS│       │QoS Data│
+     *                    └───┘       └────────┘
+     *
+     *               ┌─────┐
+     *               │Basic│
+     *  [link 1]     │  TF │
+     *  ─────────────┴─────┴┬────┬──────────────────────────────────────
+     *                      │QoS │
+     *                      │Null│
+     *                      └────┘
+     *
+     *               ┌─────┐
+     *               │Basic│
+     *  [link 2]     │  TF │
+     *  ─────────────┴─────┴┬────┬──────────────────────────────────────
+     *                      │QoS │
+     *                      │Null│
+     *                      └────┘
+     *
+     * Sending BSRP TF enabled.
+     *
+     * The figure assumes that link 0 is used to send the first Trigger Frame after that the
+     * AP MLD requests channel access through the Multi-user scheduler. The first Trigger Frames
+     * are all BSRP Trigger Frames, but only the first one solicits the EMLSR client, too.
+     *             ┌─────┐          ┌─────┐           ┌──────┐
+     *             │BSRP │          │Basic│           │Multi-│
+     *  [link 0]   │  TF │          │  TF │           │STA BA│
+     *  ───────────┴─────┴┬────────┬┴─────┴┬────────┬─┴──────┴──────────
+     *                    │QoS Null│       │QoS Data│
+     *                    ├────────┤       └────────┘
+     *                    │QoS Null│
+     *                    └────────┘
+     *
+     *               ┌─────┐
+     *               │BSRP │
+     *  [link 1]     │  TF │
+     *  ─────────────┴─────┴┬────┬──────────────────────────────────────
+     *                      │QoS │
+     *                      │Null│
+     *                      └────┘
+     *
+     *               ┌─────┐
+     *               │BSRP │
+     *  [link 2]     │  TF │
+     *  ─────────────┴─────┴┬────┬──────────────────────────────────────
+     *                      │QoS │
+     *                      │Null│
+     *                      └────┘
+     */
+
+    NS_TEST_ASSERT_MSG_GT(m_txPsdusPos, 0, "First Trigger Frame not detected");
+
+    // Check the Trigger Frames (one per link) after requesting channel access
+    auto index = m_txPsdusPos;
+    const auto firstLinkId = m_txPsdus[m_txPsdusPos].linkId;
+    for (; index < m_txPsdusPos + 3; ++index)
+    {
+        NS_TEST_ASSERT_MSG_EQ(m_txPsdus[index].psduMap.cbegin()->second->GetHeader(0).IsTrigger(),
+                              true,
+                              "Expected a Trigger Frame");
+        CtrlTriggerHeader trigger;
+        m_txPsdus[index].psduMap.cbegin()->second->GetPayload(0)->PeekHeader(trigger);
+
+        TriggerFrameType triggerType =
+            m_enableBsrp ? TriggerFrameType::BSRP_TRIGGER
+                         : (index == m_txPsdusPos ? TriggerFrameType::MU_RTS_TRIGGER
+                                                  : TriggerFrameType::BASIC_TRIGGER);
+        NS_TEST_EXPECT_MSG_EQ(+static_cast<uint8_t>(trigger.GetType()),
+                              +static_cast<uint8_t>(triggerType),
+                              "Unexpected Trigger Frame type on link " << +m_txPsdus[index].linkId);
+
+        // only the first TF solicits the EMLSR client and the non-AP MLD
+        NS_TEST_EXPECT_MSG_EQ(
+            trigger.GetNUserInfoFields(),
+            (index == m_txPsdusPos ? 2 : 1),
+            "Unexpected number of User Info fields for Trigger Frame, index=" << index);
+    }
+
+    auto startIndex = index;
+    std::size_t ctsCount = 0;
+    std::size_t qosNullCount = 0;
+    // Check responses to Trigger Frames
+    for (; index < startIndex + 4; ++index)
+    {
+        const auto& hdr = m_txPsdus[index].psduMap.cbegin()->second->GetHeader(0);
+
+        if (hdr.IsCts())
+        {
+            ++ctsCount;
+            continue;
+        }
+
+        if (hdr.IsQosData() && !hdr.HasData())
+        {
+            ++qosNullCount;
+            // if BSRP is enabled, the QoS Null frame sent by the EMLSR client in response to the
+            // first BSRP TF reports a non-null buffer status
+            if (m_enableBsrp &&
+                hdr.GetAddr2() == m_staMacs[0]->GetFrameExchangeManager(firstLinkId)->GetAddress())
+            {
+                NS_TEST_EXPECT_MSG_GT(+hdr.GetQosQueueSize(), 0, "Unexpected buffer size");
+            }
+            else
+            {
+                NS_TEST_EXPECT_MSG_EQ(+hdr.GetQosQueueSize(), 0, "Unexpected buffer size");
+            }
+            continue;
+        }
+    }
+    NS_TEST_EXPECT_MSG_EQ(ctsCount, (m_enableBsrp ? 0 : 2), "Unexpected number of CTS frames");
+    NS_TEST_EXPECT_MSG_EQ(qosNullCount,
+                          (m_enableBsrp ? 4 : 2),
+                          "Unexpected number of QoS Null frames");
+
+    // we expect only one Basic Trigger Frame (sent on the same link as the first Trigger Frame),
+    // because the buffer status reported on the other links by the non-EMLSR client is zero
+    NS_TEST_ASSERT_MSG_EQ(m_txPsdus[index].psduMap.cbegin()->second->GetHeader(0).IsTrigger(),
+                          true,
+                          "Expected a Trigger Frame");
+    NS_TEST_EXPECT_MSG_EQ(+m_txPsdus[index].linkId,
+                          +firstLinkId,
+                          "Unexpected link ID for Basic TF");
+    CtrlTriggerHeader trigger;
+    m_txPsdus[index].psduMap.cbegin()->second->GetPayload(0)->PeekHeader(trigger);
+
+    NS_TEST_EXPECT_MSG_EQ(+static_cast<uint8_t>(trigger.GetType()),
+                          +static_cast<uint8_t>(TriggerFrameType::BASIC_TRIGGER),
+                          "Unexpected Trigger Frame type");
+
+    // when BSRP TF is enabled, the non-EMLSR client has already communicated a buffer status of
+    // zero, so it is not solicited by the AP through the Basic Trigger Frame. Otherwise, it is
+    // solicited because buffer status was not known when the BSRP TF was prepared (before sending
+    // MU-RTS)
+    NS_TEST_EXPECT_MSG_EQ(trigger.GetNUserInfoFields(),
+                          (m_enableBsrp ? 1 : 2),
+                          "Unexpected number of User Info fields for Basic Trigger Frame");
+
+    // Response(s) to the Basic Trigger Frame
+    startIndex = ++index;
+    for (; index < startIndex + (m_enableBsrp ? 1 : 2); ++index)
+    {
+        const auto& hdr = m_txPsdus[index].psduMap.cbegin()->second->GetHeader(0);
+
+        NS_TEST_EXPECT_MSG_EQ(hdr.IsQosData(), true, "Expected a QoS frame");
+
+        // EMLSR client sends a QoS Data frame, non-EMLSR client sends a QoS Null frame
+        NS_TEST_EXPECT_MSG_EQ(
+            hdr.HasData(),
+            (hdr.GetAddr2() == m_staMacs[0]->GetFrameExchangeManager(firstLinkId)->GetAddress()),
+            "Unexpected type of QoS data frame");
+
+        if (hdr.HasData())
+        {
+            NS_TEST_EXPECT_MSG_EQ(m_txPsdus[index].txVector.IsUlMu(),
+                                  true,
+                                  "QoS Data frame should be sent in a TB PPDU");
+        }
+    }
+
+    // Finally, the AP MLD sends a Multi-STA BlockAck
+    NS_TEST_EXPECT_MSG_EQ(m_txPsdus[index].psduMap.cbegin()->second->GetHeader(0).IsBlockAck(),
+                          true,
+                          "Expected a BlockAck frame");
+    CtrlBAckResponseHeader blockAck;
+    m_txPsdus[index].psduMap.cbegin()->second->GetPayload(0)->PeekHeader(blockAck);
+    NS_TEST_EXPECT_MSG_EQ(blockAck.IsMultiSta(), true, "Expected a Multi-STA BlockAck");
+}
+
+WifiEmlsrBasicExchangesTestSuite::WifiEmlsrBasicExchangesTestSuite()
+    : TestSuite("wifi-emlsr-basic-exchanges", Type::UNIT)
+{
+    for (const auto& emlsrLinks :
+         {std::set<uint8_t>{0, 1, 2}, std::set<uint8_t>{1, 2}, std::set<uint8_t>{0, 1}})
+    {
+        AddTestCase(new EmlsrDlTxopTest({1,
+                                         0,
+                                         emlsrLinks,
+                                         {MicroSeconds(32)},
+                                         {MicroSeconds(32)},
+                                         MicroSeconds(512),
+                                         true /* putAuxPhyToSleep */}),
+                    TestCase::Duration::QUICK);
+        AddTestCase(new EmlsrDlTxopTest({1,
+                                         1,
+                                         emlsrLinks,
+                                         {MicroSeconds(64)},
+                                         {MicroSeconds(64)},
+                                         MicroSeconds(512),
+                                         false /* putAuxPhyToSleep */}),
+                    TestCase::Duration::QUICK);
+        AddTestCase(new EmlsrDlTxopTest({2,
+                                         2,
+                                         emlsrLinks,
+                                         {MicroSeconds(128), MicroSeconds(256)},
+                                         {MicroSeconds(128), MicroSeconds(256)},
+                                         MicroSeconds(512),
+                                         true /* putAuxPhyToSleep */}),
+                    TestCase::Duration::QUICK);
+    }
+
+    for (auto genBackoffIfTxopWithoutTx : {true, false})
+    {
+        AddTestCase(new EmlsrUlTxopTest({{0, 1, 2},
+                                         MHz_u{40},
+                                         MHz_u{20},
+                                         MicroSeconds(5504),
+                                         3,
+                                         genBackoffIfTxopWithoutTx,
+                                         true, /* putAuxPhyToSleep */
+                                         false /* switchMainPhyBackDelayTimeout */}),
+                    TestCase::Duration::QUICK);
+        AddTestCase(new EmlsrUlTxopTest({{0, 1},
+                                         MHz_u{40},
+                                         MHz_u{20},
+                                         MicroSeconds(5504),
+                                         1,
+                                         genBackoffIfTxopWithoutTx,
+                                         false, /* putAuxPhyToSleep */
+                                         true /* switchMainPhyBackDelayTimeout */}),
+                    TestCase::Duration::QUICK);
+    }
+
+    AddTestCase(new EmlsrUlOfdmaTest(false), TestCase::Duration::QUICK);
+    AddTestCase(new EmlsrUlOfdmaTest(true), TestCase::Duration::QUICK);
+}
+
+static WifiEmlsrBasicExchangesTestSuite g_wifiEmlsrBasicExchangesTestSuite; ///< the test suite
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/test/wifi-emlsr-basic-exchanges-test.h ns-3.45/src/wifi/test/wifi-emlsr-basic-exchanges-test.h
--- ns-3.44/src/wifi/test/wifi-emlsr-basic-exchanges-test.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.45/src/wifi/test/wifi-emlsr-basic-exchanges-test.h	2025-06-01 20:34:45.636702300 -0700
@@ -0,0 +1,440 @@
+/*
+ * Copyright (c) 2023 Universita' degli Studi di Napoli Federico II
+ *
+ * SPDX-License-Identifier: GPL-2.0-only
+ *
+ * Author: Stefano Avallone <stavallo@unina.it>
+ */
+
+#ifndef WIFI_EMLSR_BASIC_EXCHANGES_TEST_H
+#define WIFI_EMLSR_BASIC_EXCHANGES_TEST_H
+
+#include "wifi-emlsr-test-base.h"
+
+/**
+ * @ingroup wifi-test
+ * @ingroup tests
+ *
+ * @brief Test the transmission of DL frames to EMLSR clients.
+ *
+ * This test considers an AP MLD and a configurable number of non-AP MLDs that support EMLSR
+ * and a configurable number of non-AP MLDs that do not support EMLSR. All MLDs have three
+ * setup links, while the set of EMLSR links for the EMLSR clients is configurable.
+ * Block ack agreements (for TID 0, with the AP MLD as originator) are established with all
+ * the non-AP MLDs before that EMLSR clients send the EML Operating Mode Notification frame
+ * to enable the EMLSR mode on their EMLSR links.
+ *
+ * Before enabling EMLSR mode, it is checked that:
+ *
+ * - all EMLSR links (but the link used for ML setup) of the EMLSR clients are considered to
+ *   be in power save mode and are blocked by the AP MLD; all the other links have transitioned
+ *   to active mode and are not blocked
+ * - no MU-RTS Trigger Frame is sent as Initial control frame
+ * - In case of EMLSR clients having no link that is not an EMLSR link and is different than
+ *   the link used for ML setup, the two A-MPDUs used to trigger BA establishment are
+ *   transmitted one after another on the link used for ML setup. Otherwise, the two A-MPDUs
+ *   are sent concurrently on two distinct links
+ *
+ * After enabling EMLSR mode, it is checked that:
+ *
+ * - all EMLSR links of the EMLSR clients are considered to be in active mode and are not
+ *   blocked by the AP MLD
+ * - If all setup links are EMLSR links, the first two frame exchanges are both protected by
+ *   MU-RTS TF and occur one after another. Otherwise, one frame exchange occurs on the
+ *   non-EMLSR link and is not protected by MU-RTS TF; the other frame exchange occurs on an
+ *   EMLSR link and is protected by MU-RTS TF
+ * - the AP MLD blocks transmission on all other EMLSR links when sending an ICF to an EMLSR client
+ * - After completing a frame exchange with an EMLSR client, the AP MLD can start another frame
+ *   exchange with that EMLSR client within the same TXOP (after a SIFS) without sending an ICF
+ * - During the transition delay, all EMLSR links are not used for DL transmissions
+ * - The padding added to Initial Control frames is the largest among all the EMLSR clients
+ *   solicited by the ICF
+ *
+ * After disabling EMLSR mode, it is checked that:
+ *
+ * - all EMLSR links (but the link used to exchange EML Notification frames) of the EMLSR clients
+ *   are considered to be in power save mode and are blocked by the AP MLD
+ * - an MU-RTS Trigger Frame is sent by the AP MLD as ICF for sending the EML Notification
+ *   response, unless the link used to exchange EML Notification frames is a non-EMLSR link
+ * - no MU-RTS Trigger Frame is used as ICF for QoS data frames
+ * - In case of EMLSR clients having no link that is not an EMLSR link and is different than
+ *   the link used to exchange EML Notification frames, the two A-MPDUs are transmitted one
+ *   after another on the link used to exchange EML Notification frames. Otherwise, the two
+ *   A-MPDUs are sent concurrently on two distinct links
+ *
+ * Also, if the PutAuxPhyToSleep attribute is set to true, it is checked that aux PHYs are in
+ * sleep mode after receiving an ICF and are resumed from sleep after receiving the CF-End frame.
+ */
+class EmlsrDlTxopTest : public EmlsrOperationsTestBase
+{
+  public:
+    /**
+     * Parameters for the EMLSR DL TXOP test
+     */
+    struct Params
+    {
+        std::size_t nEmlsrStations;    //!< number of non-AP MLDs that support EMLSR
+        std::size_t nNonEmlsrStations; //!< number of non-AP MLDs that do not support EMLSR
+        std::set<uint8_t>
+            linksToEnableEmlsrOn;       //!< IDs of links on which EMLSR mode should be enabled
+        std::vector<Time> paddingDelay; //!< vector (whose size equals <i>nEmlsrStations</i>) of the
+                                        //!< padding delay values advertised by non-AP MLDs
+        std::vector<Time>
+            transitionDelay;    //!< vector (whose size equals <i>nEmlsrStations</i>) of
+                                //!< transition the delay values advertised by non-AP MLDs
+        Time transitionTimeout; //!< the Transition Timeout advertised by the AP MLD
+        bool putAuxPhyToSleep;  //!< whether aux PHYs are put to sleep during DL/UL TXOPs
+    };
+
+    /**
+     * Constructor
+     *
+     * @param params parameters for the EMLSR DL TXOP test
+     */
+    EmlsrDlTxopTest(const Params& params);
+    ~EmlsrDlTxopTest() override = default;
+
+  protected:
+    void DoSetup() override;
+    void DoRun() override;
+    void Transmit(Ptr<WifiMac> mac,
+                  uint8_t phyId,
+                  WifiConstPsduMap psduMap,
+                  WifiTxVector txVector,
+                  double txPowerW) override;
+
+    /**
+     * Check that the simulation produced the expected results.
+     */
+    void CheckResults();
+
+    /**
+     * Check that the AP MLD considers the correct Power Management mode for the links setup
+     * with the given non-AP MLD. This method is intended to be called shortly after ML setup.
+     *
+     * @param address a link address of the given non-AP MLD
+     */
+    void CheckPmModeAfterAssociation(const Mac48Address& address);
+
+    /**
+     * Check that appropriate actions are taken when the AP MLD transmits an EML Operating Mode
+     * Notification response frame to an EMLSR client on the given link.
+     *
+     * @param mpdu the MPDU carrying the EML Operating Mode Notification frame
+     * @param txVector the TXVECTOR used to send the PPDU
+     * @param linkId the ID of the given link
+     */
+    void CheckApEmlNotificationFrame(Ptr<const WifiMpdu> mpdu,
+                                     const WifiTxVector& txVector,
+                                     uint8_t linkId);
+
+    /**
+     * Check that appropriate actions are taken when an EMLSR client transmits an EML Operating
+     * Mode Notification frame to the AP MLD on the given link.
+     *
+     * @param mpdu the MPDU carrying the EML Operating Mode Notification frame
+     * @param txVector the TXVECTOR used to send the PPDU
+     * @param linkId the ID of the given link
+     */
+    void CheckStaEmlNotificationFrame(Ptr<const WifiMpdu> mpdu,
+                                      const WifiTxVector& txVector,
+                                      uint8_t linkId);
+
+    /**
+     * Check that appropriate actions are taken by the AP MLD transmitting an initial
+     * Control frame to an EMLSR client on the given link.
+     *
+     * @param mpdu the MPDU carrying the MU-RTS TF
+     * @param txVector the TXVECTOR used to send the PPDU
+     * @param linkId the ID of the given link
+     */
+    void CheckInitialControlFrame(Ptr<const WifiMpdu> mpdu,
+                                  const WifiTxVector& txVector,
+                                  uint8_t linkId);
+
+    /**
+     * Check that appropriate actions are taken by the AP MLD transmitting a PPDU containing
+     * QoS data frames to EMLSR clients on the given link.
+     *
+     * @param psduMap the PSDU(s) carrying QoS data frames
+     * @param txVector the TXVECTOR used to send the PPDU
+     * @param linkId the ID of the given link
+     */
+    void CheckQosFrames(const WifiConstPsduMap& psduMap,
+                        const WifiTxVector& txVector,
+                        uint8_t linkId);
+
+    /**
+     * Check that appropriate actions are taken by the AP MLD receiving a PPDU containing
+     * BlockAck frames from EMLSR clients on the given link.
+     *
+     * @param psduMap the PSDU carrying BlockAck frames
+     * @param txVector the TXVECTOR used to send the PPDU
+     * @param phyId the ID of the PHY transmitting the PSDU(s)
+     */
+    void CheckBlockAck(const WifiConstPsduMap& psduMap,
+                       const WifiTxVector& txVector,
+                       uint8_t phyId);
+
+  private:
+    void StartTraffic() override;
+
+    /**
+     * Enable EMLSR mode on the next EMLSR client
+     */
+    void EnableEmlsrMode();
+
+    std::set<uint8_t> m_emlsrLinks; /**< IDs of the links on which EMLSR mode has to be enabled */
+    Time m_emlsrEnabledTime;        //!< when EMLSR mode has been enabled on all EMLSR clients
+    const Time m_fe2to3delay;       /**< time interval between 2nd and 3rd frame exchange sequences
+                                         after the enablement of EMLSR mode */
+    std::size_t m_countQoSframes;   //!< counter for QoS frames (transition delay test)
+    std::size_t m_countBlockAck;    //!< counter for BlockAck frames (transition delay test)
+    Ptr<ListErrorModel> m_errorModel; ///< error rate model to corrupt BlockAck at AP MLD
+};
+
+/**
+ * @ingroup wifi-test
+ * @ingroup tests
+ *
+ * @brief Test the transmission of UL frames from EMLSR clients.
+ *
+ * This test considers an AP MLD and a non-AP MLD that support EMLSR. The non-AP MLD setups three
+ * links, while the set of EMLSR links is configurable. Block ack agreements (for TID 0) for both
+ * DL and UL directions are established after that the EML Operating Mode Notification frames are
+ * exchanged to enable the EMLSR mode on the EMLSR links. Aux PHYs on the EMLSR client do not
+ * switch link, hence the main PHY will switch link (if needed) when terminating a TXOP.
+ *
+ * It is checked that:
+ *
+ * - Initially, aux PHYs are configured so that they are unable to transmit frames. Before
+ *   generating the packets for the first UL data frame, transmissions on the link where the
+ *   main PHY is operating and on the non-EMLSR link (if any) are blocked. Thus, the first UL data
+ *   frame is held until transmissions on the link where the main PHY is operating are unblocked.
+ *   The first UL data frame is sent by the main PHY without RTS protection. When the data frame
+ *   exchange terminates, the MediumSyncDelay timer is started on the other EMLSR links and the
+ *   CCA ED threshold is set as expected
+ * - If there is a non-EMLSR link, another data frame can be sent concurrently (without protection)
+ *   on the non-EMLSR link
+ * - When the first UL data frame is transmitted, we make the aux PHYs on the EMLSR client capable
+ *   of transmitting, we block transmissions on the link where the main PHY is operating and
+ *   generate new UL packets, which will then be transmitted on a link where an aux PHY is
+ *   operating. Thus, the aux PHY transmits an RTS frame and the main PHY will take over and
+ *   transmit the second UL data frame. We check that, while the link on which the main PHY was
+ *   operating is blocked because another EMLSR link is being used, new backoff values for that
+ *   link are generated if and only if the QosTxop::GenerateBackoffIfTxopWithoutTx attribute is
+ *   true; otherwise, a new backoff value is generated when the link is unblocked.
+ * - When the exchange of the second UL data frame terminates, we make the aux PHY unable to
+ *   transmit, block transmissions on the non-EMLSR link (if any) and generate some more UL
+ *   packets, which will then be transmitted by the main PHY. However, a MediumSyncDelay timer
+ *   is now running on the link where the main PHY is operating, hence transmissions are protected
+ *   by an RTS frame. We install a post reception error model on the AP MLD so that all RTS frames
+ *   sent by the EMLSR client are not received by the AP MLD. We check that the EMLSR client makes
+ *   at most the configured max number of transmission attempts and that another UL data frame is
+ *   sent once the MediumSyncDelay timer is expired. We also check that the TX width of the RTS
+ *   frames and the UL data frame equal the channel width used by the main PHY.
+ * - We check that no issue arises in case an aux PHY sends an RTS frame but the CTS response is
+ *   not transmitted successfully. Specifically, we check that the main PHY is completing the
+ *   channel switch when the (unsuccessful) reception of the CTS ends and that a new RTS/CTS
+ *   exchange is carried out to protect the transmission of the last data frame.
+ * - While the main PHY is operating on the same link as an aux PHY (which does not switch
+ *   channel), the aux PHY is put in sleep mode as soon as the main PHY starts operating on the
+ *   link, stays in sleep mode until the TXOP ends and is resumed from sleep mode right after the
+ *   end of the DL/UL TXOP.
+ *
+ * Also, if the PutAuxPhyToSleep attribute is set to true, it is checked that aux PHYs are in
+ * sleep mode a SIFS after receiving the ICF and are still in sleep mode right before receiving
+ * a Block Ack frame, and they are resumed from sleep after receiving the Block Ack frame.
+ */
+class EmlsrUlTxopTest : public EmlsrOperationsTestBase
+{
+  public:
+    /**
+     * Parameters for the EMLSR UL TXOP test
+     */
+    struct Params
+    {
+        std::set<uint8_t>
+            linksToEnableEmlsrOn;       //!< IDs of links on which EMLSR mode should be enabled
+        MHz_u channelWidth;             //!< width of the channels used by MLDs
+        MHz_u auxPhyChannelWidth;       //!< max width supported by aux PHYs
+        Time mediumSyncDuration;        //!< duration of the MediumSyncDelay timer
+        uint8_t msdMaxNTxops;           //!< Max number of TXOPs that an EMLSR client is allowed
+                                        //!< to attempt to initiate while the MediumSyncDelay
+                                        //!< timer is running (zero indicates no limit)
+        bool genBackoffIfTxopWithoutTx; //!< whether the backoff should be invoked when the AC gains
+                                        //!< a TXOP but it does not transmit any frame
+        bool putAuxPhyToSleep;          //!< whether aux PHYs are put to sleep during DL/UL TXOPs
+        bool switchMainPhyBackDelayTimeout; //!< whether a SwitchMainPhyBackDelay timer expires
+                                            //!< after that the main PHY moved to an aux PHY link
+    };
+
+    /**
+     * Constructor
+     *
+     * @param params parameters for the EMLSR UL TXOP test
+     */
+    EmlsrUlTxopTest(const Params& params);
+    ~EmlsrUlTxopTest() override = default;
+
+  protected:
+    void DoSetup() override;
+    void DoRun() override;
+    void Transmit(Ptr<WifiMac> mac,
+                  uint8_t phyId,
+                  WifiConstPsduMap psduMap,
+                  WifiTxVector txVector,
+                  double txPowerW) override;
+
+    /**
+     * Check that the simulation produced the expected results.
+     */
+    void CheckResults();
+
+    /**
+     * Check that appropriate actions are taken by the EMLSR client when transmitting an RTS
+     * frame on the given link.
+     *
+     * @param mpdu the MPDU carrying the RTS frame
+     * @param txVector the TXVECTOR used to send the PPDU
+     * @param linkId the ID of the given link
+     */
+    void CheckRtsFrames(Ptr<const WifiMpdu> mpdu, const WifiTxVector& txVector, uint8_t linkId);
+
+    /**
+     * Check that appropriate actions are taken by the EMLSR client when receiving a CTS
+     * frame on the given link.
+     *
+     * @param mpdu the MPDU carrying the CTS frame
+     * @param txVector the TXVECTOR used to send the PPDU
+     * @param linkId the ID of the given link
+     */
+    void CheckCtsFrames(Ptr<const WifiMpdu> mpdu, const WifiTxVector& txVector, uint8_t linkId);
+
+    /**
+     * Check that appropriate actions are taken when an MLD transmits a PPDU containing
+     * QoS data frames on the given link.
+     *
+     * @param psduMap the PSDU(s) carrying QoS data frames
+     * @param txVector the TXVECTOR used to send the PPDU
+     * @param linkId the ID of the given link
+     */
+    void CheckQosFrames(const WifiConstPsduMap& psduMap,
+                        const WifiTxVector& txVector,
+                        uint8_t linkId);
+
+    /**
+     * Check that appropriate actions are taken when an MLD transmits a PPDU containing
+     * BlockAck frames on the given link.
+     *
+     * @param psduMap the PSDU carrying BlockAck frames
+     * @param txVector the TXVECTOR used to send the PPDU
+     * @param linkId the ID of the given link
+     */
+    void CheckBlockAck(const WifiConstPsduMap& psduMap,
+                       const WifiTxVector& txVector,
+                       uint8_t linkId);
+
+  private:
+    void StartTraffic() override;
+
+    /**
+     * Callback invoked when a new backoff value is generated by the EMLSR client.
+     *
+     * @param backoff the generated backoff value
+     * @param linkId the ID of the link for which the backoff value has been generated
+     */
+    void BackoffGenerated(uint32_t backoff, uint8_t linkId);
+
+    std::set<uint8_t> m_emlsrLinks; /**< IDs of the links on which EMLSR mode has to be enabled */
+    MHz_u m_channelWidth;           //!< width of the channels used by MLDs
+    MHz_u m_auxPhyChannelWidth;     //!< max width supported by aux PHYs
+    Time m_mediumSyncDuration;      //!< duration of the MediumSyncDelay timer
+    uint8_t m_msdMaxNTxops;         //!< Max number of TXOPs that an EMLSR client is allowed
+                                    //!< to attempt to initiate while the MediumSyncDelay
+                                    //!< timer is running (zero indicates no limit)
+    std::optional<uint8_t> m_nonEmlsrLink; //!< ID of the non-EMLSR link (if any)
+    Time m_emlsrEnabledTime;              //!< when EMLSR mode has been enabled on all EMLSR clients
+    Time m_firstUlPktsGenTime;            //!< generation time of the first two UL packets
+    const Time m_unblockMainPhyLinkDelay; //!< delay between the time the first two UL packets are
+                                          //!< generated and the time transmissions are unblocked
+                                          //!< on the link where the main PHY is operating on
+    Time m_lastMsdExpiryTime;             //!< expiry time of the last MediumSyncDelay timer
+    bool m_checkBackoffStarted;           //!< whether we are checking the generated backoff values
+    std::optional<Time> m_backoffEndTime; //!< expected backoff end time on main PHY link
+    Ptr<ListErrorModel> m_errorModel;     ///< error rate model to corrupt packets
+    std::size_t m_countQoSframes;         //!< counter for QoS frames
+    std::size_t m_countBlockAck;          //!< counter for BlockAck frames
+    std::size_t m_countRtsframes;         //!< counter for RTS frames
+    bool m_genBackoffIfTxopWithoutTx;     //!< whether the backoff should be invoked when the AC
+                                          //!< gains the right to start a TXOP but it does not
+                                          //!< transmit any frame
+    std::optional<bool> m_corruptCts;     //!< whether the transmitted CTS must be corrupted
+};
+
+/**
+ * @ingroup wifi-test
+ * @ingroup tests
+ *
+ * @brief Check UL OFDMA operations with EMLSR clients.
+ *
+ * This test considers an AP MLD and an EMLSR client and a non-AP MLD that setup three links with
+ * the AP MLD. Once block ack agreements (for TID 0) are established for the UL direction, the
+ * AP MLD starts requesting channel access (on all the links) through the Multi-User scheduler.
+ * Given that links are idle, AP MLD accesses the channel on all the links and concurrently sends
+ * Trigger Frames. When the transmission of the first Trigger Frame is over, a client application
+ * on the EMLSR client generates two packets addressed to the AP MLD.
+ *
+ * It is checked that:
+ * - when sending BSRP TF is disabled, the first Trigger Frame sent is an MU-RTS; otherwise, it is
+ *   a BSRP Trigger Frame. In both cases, such Trigger Frame acts as an ICF for the EMLSR client
+ * - the other Trigger Frames sent concurrently with the ICF only solicit the non-EMLSR client
+ *   (AP MLD has blocked transmissions to the EMLSR client upon preparing the first Trigger Frame)
+ * - the buffer status reported in QoS Null frames is as expected
+ * - the EMLSR client sends a QoS Data frame in a TB PPDU
+ */
+class EmlsrUlOfdmaTest : public EmlsrOperationsTestBase
+{
+  public:
+    /**
+     * Constructor
+     *
+     * @param enableBsrp whether MU scheduler sends BSRP TFs
+     */
+    EmlsrUlOfdmaTest(bool enableBsrp);
+
+  protected:
+    void DoSetup() override;
+    void DoRun() override;
+    void Transmit(Ptr<WifiMac> mac,
+                  uint8_t phyId,
+                  WifiConstPsduMap psduMap,
+                  WifiTxVector txVector,
+                  double txPowerW) override;
+
+    /**
+     * Check that the simulation produced the expected results.
+     */
+    void CheckResults();
+
+  private:
+    void StartTraffic() override;
+
+    bool m_enableBsrp;        //!< whether MU scheduler sends BSRP TFs
+    std::size_t m_txPsdusPos; //!< position in the vector of TX PSDUs of the first ICF
+    Time m_startAccessReq;    //!< start time of the first AP MLD access request via MU scheduler
+};
+
+/**
+ * @ingroup wifi-test
+ * @ingroup tests
+ *
+ * @brief wifi EMLSR suite to test basic frame exchanges.
+ */
+class WifiEmlsrBasicExchangesTestSuite : public TestSuite
+{
+  public:
+    WifiEmlsrBasicExchangesTestSuite();
+};
+
+#endif /* WIFI_EMLSR_BASIC_EXCHANGES_TEST_H */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/test/wifi-emlsr-enabling-test.cc ns-3.45/src/wifi/test/wifi-emlsr-enabling-test.cc
--- ns-3.44/src/wifi/test/wifi-emlsr-enabling-test.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.45/src/wifi/test/wifi-emlsr-enabling-test.cc	2025-06-01 20:34:45.636702300 -0700
@@ -0,0 +1,361 @@
+/*
+ * Copyright (c) 2023 Universita' degli Studi di Napoli Federico II
+ *
+ * SPDX-License-Identifier: GPL-2.0-only
+ *
+ * Author: Stefano Avallone <stavallo@unina.it>
+ */
+
+#include "wifi-emlsr-enabling-test.h"
+
+#include "ns3/advanced-emlsr-manager.h"
+#include "ns3/boolean.h"
+#include "ns3/config.h"
+#include "ns3/ctrl-headers.h"
+#include "ns3/log.h"
+#include "ns3/mgt-action-headers.h"
+#include "ns3/qos-txop.h"
+#include "ns3/simulator.h"
+#include "ns3/string.h"
+#include "ns3/wifi-net-device.h"
+#include "ns3/wifi-phy.h"
+
+#include <algorithm>
+#include <functional>
+#include <iomanip>
+
+using namespace ns3;
+
+NS_LOG_COMPONENT_DEFINE("WifiEmlsrEnablingTest");
+
+EmlOperatingModeNotificationTest::EmlOperatingModeNotificationTest()
+    : HeaderSerializationTestCase(
+          "Check serialization and deserialization of the EML Operating Mode Notification frame")
+{
+}
+
+void
+EmlOperatingModeNotificationTest::DoRun()
+{
+    MgtEmlOmn frame;
+
+    // Both EMLSR Mode and EMLMR Mode subfields set to 0 (no link bitmap);
+    TestHeaderSerialization(frame);
+
+    frame.m_emlControl.emlsrMode = 1;
+    frame.SetLinkIdInBitmap(0);
+    frame.SetLinkIdInBitmap(5);
+    frame.SetLinkIdInBitmap(15);
+
+    // Adding Link Bitmap
+    TestHeaderSerialization(frame);
+
+    NS_TEST_EXPECT_MSG_EQ((frame.GetLinkBitmap() == std::list<uint8_t>{0, 5, 15}),
+                          true,
+                          "Unexpected link bitmap");
+
+    auto padding = MicroSeconds(64);
+    auto transition = MicroSeconds(128);
+
+    frame.m_emlControl.emlsrParamUpdateCtrl = 1;
+    frame.m_emlsrParamUpdate = MgtEmlOmn::EmlsrParamUpdate{};
+    frame.m_emlsrParamUpdate->paddingDelay = CommonInfoBasicMle::EncodeEmlsrPaddingDelay(padding);
+    frame.m_emlsrParamUpdate->transitionDelay =
+        CommonInfoBasicMle::EncodeEmlsrTransitionDelay(transition);
+
+    // Adding the EMLSR Parameter Update field
+    TestHeaderSerialization(frame);
+
+    NS_TEST_EXPECT_MSG_EQ(
+        CommonInfoBasicMle::DecodeEmlsrPaddingDelay(frame.m_emlsrParamUpdate->paddingDelay),
+        padding,
+        "Unexpected EMLSR Padding Delay");
+    NS_TEST_EXPECT_MSG_EQ(
+        CommonInfoBasicMle::DecodeEmlsrTransitionDelay(frame.m_emlsrParamUpdate->transitionDelay),
+        transition,
+        "Unexpected EMLSR Transition Delay");
+}
+
+EmlOmnExchangeTest::EmlOmnExchangeTest(const std::set<uint8_t>& linksToEnableEmlsrOn,
+                                       Time transitionTimeout)
+    : EmlsrOperationsTestBase("Check EML Notification exchange"),
+      m_checkEmlsrLinksCount(0),
+      m_emlNotificationDroppedCount(0)
+{
+    m_linksToEnableEmlsrOn = linksToEnableEmlsrOn;
+    m_nEmlsrStations = 1;
+    m_nNonEmlsrStations = 0;
+    m_transitionTimeout = transitionTimeout;
+    m_duration = Seconds(0.5);
+}
+
+void
+EmlOmnExchangeTest::DoSetup()
+{
+    EmlsrOperationsTestBase::DoSetup();
+
+    m_errorModel = CreateObject<ListErrorModel>();
+    for (std::size_t linkId = 0; linkId < m_apMac->GetNLinks(); linkId++)
+    {
+        m_apMac->GetWifiPhy(linkId)->SetPostReceptionErrorModel(m_errorModel);
+    }
+
+    m_staMacs[0]->TraceConnectWithoutContext("AckedMpdu",
+                                             MakeCallback(&EmlOmnExchangeTest::TxOk, this));
+    m_staMacs[0]->TraceConnectWithoutContext("DroppedMpdu",
+                                             MakeCallback(&EmlOmnExchangeTest::TxDropped, this));
+}
+
+void
+EmlOmnExchangeTest::Transmit(Ptr<WifiMac> mac,
+                             uint8_t phyId,
+                             WifiConstPsduMap psduMap,
+                             WifiTxVector txVector,
+                             double txPowerW)
+{
+    EmlsrOperationsTestBase::Transmit(mac, phyId, psduMap, txVector, txPowerW);
+    auto linkId = m_txPsdus.back().linkId;
+
+    auto psdu = psduMap.begin()->second;
+
+    switch (psdu->GetHeader(0).GetType())
+    {
+    case WIFI_MAC_MGT_ASSOCIATION_REQUEST:
+        NS_TEST_EXPECT_MSG_EQ(+linkId, +m_mainPhyId, "AssocReq not sent by the main PHY");
+        CheckEmlCapabilitiesInAssocReq(*psdu->begin(), txVector, linkId);
+        break;
+
+    case WIFI_MAC_MGT_ASSOCIATION_RESPONSE:
+        CheckEmlCapabilitiesInAssocResp(*psdu->begin(), txVector, linkId);
+        break;
+
+    case WIFI_MAC_MGT_ACTION:
+        if (auto [category, action] = WifiActionHeader::Peek(psdu->GetPayload(0));
+            category == WifiActionHeader::PROTECTED_EHT &&
+            action.protectedEhtAction ==
+                WifiActionHeader::PROTECTED_EHT_EML_OPERATING_MODE_NOTIFICATION)
+        {
+            CheckEmlNotification(psdu, txVector, linkId);
+
+            if (m_emlNotificationDroppedCount == 0 &&
+                m_staMacs[0]->GetLinkIdByAddress(psdu->GetAddr2()) == linkId)
+            {
+                // transmitted by non-AP MLD, we need to corrupt it
+                m_uidList.push_front(psdu->GetPacket()->GetUid());
+                m_errorModel->SetList(m_uidList);
+            }
+            break;
+        }
+
+    default:;
+    }
+}
+
+void
+EmlOmnExchangeTest::CheckEmlCapabilitiesInAssocReq(Ptr<const WifiMpdu> mpdu,
+                                                   const WifiTxVector& txVector,
+                                                   uint8_t linkId)
+{
+    MgtAssocRequestHeader frame;
+    mpdu->GetPacket()->PeekHeader(frame);
+
+    const auto& mle = frame.Get<MultiLinkElement>();
+    NS_TEST_ASSERT_MSG_EQ(mle.has_value(), true, "Multi-Link Element must be present in AssocReq");
+
+    NS_TEST_ASSERT_MSG_EQ(mle->HasEmlCapabilities(),
+                          true,
+                          "Multi-Link Element in AssocReq must have EML Capabilities");
+    NS_TEST_ASSERT_MSG_EQ(mle->IsEmlsrSupported(),
+                          true,
+                          "EML Support subfield of EML Capabilities in AssocReq must be set to 1");
+    NS_TEST_ASSERT_MSG_EQ(mle->GetEmlsrPaddingDelay(),
+                          m_paddingDelay.at(0),
+                          "Unexpected Padding Delay in EML Capabilities included in AssocReq");
+    NS_TEST_ASSERT_MSG_EQ(mle->GetEmlsrTransitionDelay(),
+                          m_transitionDelay.at(0),
+                          "Unexpected Transition Delay in EML Capabilities included in AssocReq");
+}
+
+void
+EmlOmnExchangeTest::CheckEmlCapabilitiesInAssocResp(Ptr<const WifiMpdu> mpdu,
+                                                    const WifiTxVector& txVector,
+                                                    uint8_t linkId)
+{
+    bool sentToEmlsrClient =
+        (m_staMacs[0]->GetLinkIdByAddress(mpdu->GetHeader().GetAddr1()) == linkId);
+
+    if (!sentToEmlsrClient)
+    {
+        // nothing to check
+        return;
+    }
+
+    MgtAssocResponseHeader frame;
+    mpdu->GetPacket()->PeekHeader(frame);
+
+    const auto& mle = frame.Get<MultiLinkElement>();
+    NS_TEST_ASSERT_MSG_EQ(mle.has_value(), true, "Multi-Link Element must be present in AssocResp");
+
+    NS_TEST_ASSERT_MSG_EQ(mle->HasEmlCapabilities(),
+                          true,
+                          "Multi-Link Element in AssocResp must have EML Capabilities");
+    NS_TEST_ASSERT_MSG_EQ(mle->IsEmlsrSupported(),
+                          true,
+                          "EML Support subfield of EML Capabilities in AssocResp must be set to 1");
+    NS_TEST_ASSERT_MSG_EQ(
+        mle->GetTransitionTimeout(),
+        m_transitionTimeout,
+        "Unexpected Transition Timeout in EML Capabilities included in AssocResp");
+}
+
+void
+EmlOmnExchangeTest::CheckEmlNotification(Ptr<const WifiPsdu> psdu,
+                                         const WifiTxVector& txVector,
+                                         uint8_t linkId)
+{
+    MgtEmlOmn frame;
+    auto mpdu = *psdu->begin();
+    auto pkt = mpdu->GetPacket()->Copy();
+    WifiActionHeader::Remove(pkt);
+    pkt->RemoveHeader(frame);
+    NS_LOG_DEBUG(frame);
+
+    bool sentbyNonApMld = m_staMacs[0]->GetLinkIdByAddress(mpdu->GetHeader().GetAddr2()) == linkId;
+
+    NS_TEST_EXPECT_MSG_EQ(+frame.m_emlControl.emlsrMode,
+                          1,
+                          "EMLSR Mode subfield should be set to 1 (frame sent by non-AP MLD: "
+                              << std::boolalpha << sentbyNonApMld << ")");
+
+    NS_TEST_EXPECT_MSG_EQ(+frame.m_emlControl.emlmrMode,
+                          0,
+                          "EMLMR Mode subfield should be set to 0 (frame sent by non-AP MLD: "
+                              << std::boolalpha << sentbyNonApMld << ")");
+
+    NS_TEST_ASSERT_MSG_EQ(frame.m_emlControl.linkBitmap.has_value(),
+                          true,
+                          "Link Bitmap subfield should be present (frame sent by non-AP MLD: "
+                              << std::boolalpha << sentbyNonApMld << ")");
+
+    auto setupLinks = m_staMacs[0]->GetSetupLinkIds();
+    std::list<uint8_t> expectedEmlsrLinks;
+    std::set_intersection(setupLinks.begin(),
+                          setupLinks.end(),
+                          m_linksToEnableEmlsrOn.begin(),
+                          m_linksToEnableEmlsrOn.end(),
+                          std::back_inserter(expectedEmlsrLinks));
+
+    NS_TEST_EXPECT_MSG_EQ((expectedEmlsrLinks == frame.GetLinkBitmap()),
+                          true,
+                          "Unexpected Link Bitmap subfield (frame sent by non-AP MLD: "
+                              << std::boolalpha << sentbyNonApMld << ")");
+
+    if (!sentbyNonApMld)
+    {
+        // the frame has been sent by the AP MLD
+        NS_TEST_ASSERT_MSG_EQ(
+            +frame.m_emlControl.emlsrParamUpdateCtrl,
+            0,
+            "EMLSR Parameter Update Control should be set to 0 in frames sent by the AP MLD");
+
+        // as soon as the non-AP MLD receives this frame, it sets the EMLSR links
+        auto delay = WifiPhy::CalculateTxDuration(psdu,
+                                                  txVector,
+                                                  m_staMacs[0]->GetWifiPhy(linkId)->GetPhyBand()) +
+                     MicroSeconds(1); // to account for propagation delay
+        Simulator::Schedule(delay, &EmlOmnExchangeTest::CheckEmlsrLinks, this);
+    }
+
+    NS_TEST_EXPECT_MSG_EQ(+m_mainPhyId,
+                          +linkId,
+                          "EML Notification received on unexpected link (frame sent by non-AP MLD: "
+                              << std::boolalpha << sentbyNonApMld << ")");
+}
+
+void
+EmlOmnExchangeTest::TxOk(Ptr<const WifiMpdu> mpdu)
+{
+    const auto& hdr = mpdu->GetHeader();
+
+    if (hdr.IsMgt() && hdr.IsAction())
+    {
+        if (auto [category, action] = WifiActionHeader::Peek(mpdu->GetPacket());
+            category == WifiActionHeader::PROTECTED_EHT &&
+            action.protectedEhtAction ==
+                WifiActionHeader::PROTECTED_EHT_EML_OPERATING_MODE_NOTIFICATION)
+        {
+            // the EML Operating Mode Notification frame that the non-AP MLD sent has been
+            // acknowledged; after the transition timeout, the EMLSR links have been set
+            Simulator::Schedule(m_transitionTimeout + NanoSeconds(1),
+                                &EmlOmnExchangeTest::CheckEmlsrLinks,
+                                this);
+        }
+    }
+}
+
+void
+EmlOmnExchangeTest::TxDropped(WifiMacDropReason reason, Ptr<const WifiMpdu> mpdu)
+{
+    const auto& hdr = mpdu->GetHeader();
+
+    if (hdr.IsMgt() && hdr.IsAction())
+    {
+        if (auto [category, action] = WifiActionHeader::Peek(mpdu->GetPacket());
+            category == WifiActionHeader::PROTECTED_EHT &&
+            action.protectedEhtAction ==
+                WifiActionHeader::PROTECTED_EHT_EML_OPERATING_MODE_NOTIFICATION)
+        {
+            // the EML Operating Mode Notification frame has been dropped. Don't
+            // corrupt it anymore
+            m_emlNotificationDroppedCount++;
+        }
+    }
+}
+
+void
+EmlOmnExchangeTest::CheckEmlsrLinks()
+{
+    m_checkEmlsrLinksCount++;
+
+    auto setupLinks = m_staMacs[0]->GetSetupLinkIds();
+    std::set<uint8_t> expectedEmlsrLinks;
+    std::set_intersection(setupLinks.begin(),
+                          setupLinks.end(),
+                          m_linksToEnableEmlsrOn.begin(),
+                          m_linksToEnableEmlsrOn.end(),
+                          std::inserter(expectedEmlsrLinks, expectedEmlsrLinks.end()));
+
+    NS_TEST_EXPECT_MSG_EQ((expectedEmlsrLinks == m_staMacs[0]->GetEmlsrManager()->GetEmlsrLinks()),
+                          true,
+                          "Unexpected set of EMLSR links)");
+}
+
+void
+EmlOmnExchangeTest::DoRun()
+{
+    Simulator::Stop(m_duration);
+    Simulator::Run();
+
+    NS_TEST_EXPECT_MSG_EQ(m_checkEmlsrLinksCount,
+                          2,
+                          "Unexpected number of times CheckEmlsrLinks() is called");
+    NS_TEST_EXPECT_MSG_EQ(
+        m_emlNotificationDroppedCount,
+        1,
+        "Unexpected number of times the EML Notification frame is dropped due to max retry limit");
+
+    Simulator::Destroy();
+}
+
+WifiEmlsrEnablingTestSuite::WifiEmlsrEnablingTestSuite()
+    : TestSuite("wifi-emlsr-enabling", Type::UNIT)
+{
+    AddTestCase(new EmlOperatingModeNotificationTest(), TestCase::Duration::QUICK);
+    AddTestCase(new EmlOmnExchangeTest({1, 2}, MicroSeconds(0)), TestCase::Duration::QUICK);
+    AddTestCase(new EmlOmnExchangeTest({1, 2}, MicroSeconds(2048)), TestCase::Duration::QUICK);
+    AddTestCase(new EmlOmnExchangeTest({0, 1, 2, 3}, MicroSeconds(0)), TestCase::Duration::QUICK);
+    AddTestCase(new EmlOmnExchangeTest({0, 1, 2, 3}, MicroSeconds(2048)),
+                TestCase::Duration::QUICK);
+}
+
+static WifiEmlsrEnablingTestSuite g_wifiEmlsrEnablingTestSuite; ///< the test suite
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/test/wifi-emlsr-enabling-test.h ns-3.45/src/wifi/test/wifi-emlsr-enabling-test.h
--- ns-3.44/src/wifi/test/wifi-emlsr-enabling-test.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.45/src/wifi/test/wifi-emlsr-enabling-test.h	2025-06-01 20:34:45.636702300 -0700
@@ -0,0 +1,153 @@
+/*
+ * Copyright (c) 2023 Universita' degli Studi di Napoli Federico II
+ *
+ * SPDX-License-Identifier: GPL-2.0-only
+ *
+ * Author: Stefano Avallone <stavallo@unina.it>
+ */
+
+#ifndef WIFI_EMLSR_ENABLING_TEST_H
+#define WIFI_EMLSR_ENABLING_TEST_H
+
+#include "wifi-emlsr-test-base.h"
+
+#include <list>
+
+/**
+ * @ingroup wifi-test
+ * @ingroup tests
+ *
+ * @brief Test EML Operating Mode Notification frame serialization and deserialization
+ */
+class EmlOperatingModeNotificationTest : public HeaderSerializationTestCase
+{
+  public:
+    /**
+     * Constructor
+     */
+    EmlOperatingModeNotificationTest();
+    ~EmlOperatingModeNotificationTest() override = default;
+
+  private:
+    void DoRun() override;
+};
+
+/**
+ * @ingroup wifi-test
+ * @ingroup tests
+ *
+ * @brief Test the exchange of EML Operating Mode Notification frames.
+ *
+ * This test considers an AP MLD and a non-AP MLD with EMLSR activated. Upon association,
+ * the non-AP MLD sends an EML Operating Mode Notification frame, which is however corrupted
+ * by using a post reception error model (installed on the AP MLD). We keep corrupting the
+ * EML Notification frames transmitted by the non-AP MLD until the frame is dropped due to
+ * exceeded max retry limit. It is checked that:
+ *
+ * - the Association Request contains a Multi-Link Element including an EML Capabilities field
+ *   that contains the expected values for Padding Delay and Transition Delay
+ * - the Association Response contains a Multi-Link Element including an EML Capabilities field
+ *   that contains the expected value for Transition Timeout
+ * - all EML Notification frames contain the expected values for EMLSR Mode, EMLMR Mode and
+ *   Link Bitmap fields and are transmitted on the link used for association
+ * - the correct EMLSR link set is stored by the EMLSR Manager, both when the transition
+ *   timeout expires and when an EML Notification response is received from the AP MLD (thus,
+ *   the correct EMLSR link set is stored after whichever of the two events occur first)
+ */
+class EmlOmnExchangeTest : public EmlsrOperationsTestBase
+{
+  public:
+    /**
+     * Constructor
+     *
+     * @param linksToEnableEmlsrOn IDs of links on which EMLSR mode should be enabled
+     * @param transitionTimeout the Transition Timeout advertised by the AP MLD
+     */
+    EmlOmnExchangeTest(const std::set<uint8_t>& linksToEnableEmlsrOn, Time transitionTimeout);
+    ~EmlOmnExchangeTest() override = default;
+
+  protected:
+    void DoSetup() override;
+    void DoRun() override;
+    void Transmit(Ptr<WifiMac> mac,
+                  uint8_t phyId,
+                  WifiConstPsduMap psduMap,
+                  WifiTxVector txVector,
+                  double txPowerW) override;
+
+    /**
+     * Callback invoked when the non-AP MLD receives the acknowledgment for a transmitted MPDU.
+     *
+     * @param mpdu the acknowledged MPDU
+     */
+    void TxOk(Ptr<const WifiMpdu> mpdu);
+    /**
+     * Callback invoked when the non-AP MLD drops the given MPDU for the given reason.
+     *
+     * @param reason the reason why the MPDU was dropped
+     * @param mpdu the dropped MPDU
+     */
+    void TxDropped(WifiMacDropReason reason, Ptr<const WifiMpdu> mpdu);
+
+    /**
+     * Check the content of the EML Capabilities subfield of the Multi-Link Element included
+     * in the Association Request frame sent by the non-AP MLD.
+     *
+     * @param mpdu the MPDU containing the Association Request frame
+     * @param txVector the TXVECTOR used to transmit the frame
+     * @param linkId the ID of the link on which the frame was transmitted
+     */
+    void CheckEmlCapabilitiesInAssocReq(Ptr<const WifiMpdu> mpdu,
+                                        const WifiTxVector& txVector,
+                                        uint8_t linkId);
+    /**
+     * Check the content of the EML Capabilities subfield of the Multi-Link Element included
+     * in the Association Response frame sent by the AP MLD to the EMLSR client.
+     *
+     * @param mpdu the MPDU containing the Association Response frame
+     * @param txVector the TXVECTOR used to transmit the frame
+     * @param linkId the ID of the link on which the frame was transmitted
+     */
+    void CheckEmlCapabilitiesInAssocResp(Ptr<const WifiMpdu> mpdu,
+                                         const WifiTxVector& txVector,
+                                         uint8_t linkId);
+    /**
+     * Check the content of a received EML Operating Mode Notification frame.
+     *
+     * @param psdu the PSDU containing the EML Operating Mode Notification frame
+     * @param txVector the TXVECTOR used to transmit the frame
+     * @param linkId the ID of the link on which the frame was transmitted
+     */
+    void CheckEmlNotification(Ptr<const WifiPsdu> psdu,
+                              const WifiTxVector& txVector,
+                              uint8_t linkId);
+    /**
+     * Check that the EMLSR mode has been enabled on the expected EMLSR links.
+     */
+    void CheckEmlsrLinks();
+
+  private:
+    std::size_t m_checkEmlsrLinksCount;        /**< counter for the number of times CheckEmlsrLinks
+                                                    is called (should be two: when the transition
+                                                    timeout expires and when the EML Notification
+                                                    response from the AP MLD is received */
+    std::size_t m_emlNotificationDroppedCount; /**< counter for the number of times the EML
+                                                    Notification frame sent by the non-AP MLD
+                                                    has been dropped due to max retry limit */
+    Ptr<ListErrorModel> m_errorModel;          ///< error rate model to corrupt packets at AP MLD
+    std::list<uint64_t> m_uidList;             ///< list of UIDs of packets to corrupt
+};
+
+/**
+ * @ingroup wifi-test
+ * @ingroup tests
+ *
+ * @brief wifi EMLSR suite to test the procedure for enabling EMLSR mode
+ */
+class WifiEmlsrEnablingTestSuite : public TestSuite
+{
+  public:
+    WifiEmlsrEnablingTestSuite();
+};
+
+#endif /* WIFI_EMLSR_ENABLING_TEST_H */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/test/wifi-emlsr-link-switch-test.cc ns-3.45/src/wifi/test/wifi-emlsr-link-switch-test.cc
--- ns-3.44/src/wifi/test/wifi-emlsr-link-switch-test.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.45/src/wifi/test/wifi-emlsr-link-switch-test.cc	2025-06-01 20:34:45.636702300 -0700
@@ -0,0 +1,2500 @@
+/*
+ * Copyright (c) 2023 Universita' degli Studi di Napoli Federico II
+ *
+ * SPDX-License-Identifier: GPL-2.0-only
+ *
+ * Author: Stefano Avallone <stavallo@unina.it>
+ */
+
+#include "wifi-emlsr-link-switch-test.h"
+
+#include "ns3/advanced-emlsr-manager.h"
+#include "ns3/boolean.h"
+#include "ns3/config.h"
+#include "ns3/eht-configuration.h"
+#include "ns3/eht-frame-exchange-manager.h"
+#include "ns3/interference-helper.h"
+#include "ns3/log.h"
+#include "ns3/mgt-action-headers.h"
+#include "ns3/multi-model-spectrum-channel.h"
+#include "ns3/pointer.h"
+#include "ns3/qos-txop.h"
+#include "ns3/simulator.h"
+#include "ns3/spectrum-wifi-phy.h"
+#include "ns3/string.h"
+#include "ns3/wifi-net-device.h"
+#include "ns3/wifi-spectrum-phy-interface.h"
+
+#include <algorithm>
+#include <functional>
+#include <iomanip>
+
+using namespace ns3;
+
+NS_LOG_COMPONENT_DEFINE("WifiEmlsrLinkSwitchTest");
+
+EmlsrLinkSwitchTest::EmlsrLinkSwitchTest(const Params& params)
+    : EmlsrOperationsTestBase(
+          std::string("Check EMLSR link switching (switchAuxPhy=") +
+          std::to_string(params.switchAuxPhy) + ", resetCamStateAndInterruptSwitch=" +
+          std::to_string(params.resetCamStateAndInterruptSwitch) +
+          ", auxPhyMaxChWidth=" + std::to_string(params.auxPhyMaxChWidth) + "MHz )"),
+      m_switchAuxPhy(params.switchAuxPhy),
+      m_resetCamStateAndInterruptSwitch(params.resetCamStateAndInterruptSwitch),
+      m_auxPhyMaxChWidth(params.auxPhyMaxChWidth),
+      m_countQoSframes(0),
+      m_countIcfFrames(0),
+      m_countRtsFrames(0),
+      m_txPsdusPos(0)
+{
+    m_nEmlsrStations = 1;
+    m_nNonEmlsrStations = 0;
+    m_linksToEnableEmlsrOn = {0, 1, 2}; // enable EMLSR on all links right after association
+    m_mainPhyId = 1;
+    m_establishBaDl = {0};
+    m_duration = Seconds(1.0);
+    // when aux PHYs do not switch link, the main PHY switches back to its previous link after
+    // a TXOP, hence the transition delay must exceed the channel switch delay (default: 250us)
+    m_transitionDelay = {MicroSeconds(128)};
+}
+
+void
+EmlsrLinkSwitchTest::Transmit(Ptr<WifiMac> mac,
+                              uint8_t phyId,
+                              WifiConstPsduMap psduMap,
+                              WifiTxVector txVector,
+                              double txPowerW)
+{
+    EmlsrOperationsTestBase::Transmit(mac, phyId, psduMap, txVector, txPowerW);
+    auto linkId = m_txPsdus.back().linkId;
+
+    auto psdu = psduMap.begin()->second;
+    auto nodeId = mac->GetDevice()->GetNode()->GetId();
+
+    switch (psdu->GetHeader(0).GetType())
+    {
+    case WIFI_MAC_MGT_ASSOCIATION_REQUEST:
+        NS_ASSERT_MSG(nodeId > 0, "APs do not send AssocReq frames");
+        NS_TEST_EXPECT_MSG_EQ(+linkId, +m_mainPhyId, "AssocReq not sent by the main PHY");
+        break;
+
+    case WIFI_MAC_MGT_ACTION: {
+        auto [category, action] = WifiActionHeader::Peek(psdu->GetPayload(0));
+
+        if (nodeId == 1 && category == WifiActionHeader::PROTECTED_EHT &&
+            action.protectedEhtAction ==
+                WifiActionHeader::PROTECTED_EHT_EML_OPERATING_MODE_NOTIFICATION)
+        {
+            // the EMLSR client is starting the transmission of the EML OMN frame;
+            // temporarily block transmissions of QoS data frames from the AP MLD to the
+            // non-AP MLD on all the links but the one used for ML setup, so that we know
+            // that the first QoS data frame is sent on the link of the main PHY
+            std::set<uint8_t> linksToBlock;
+            for (uint8_t id = 0; id < m_apMac->GetNLinks(); id++)
+            {
+                if (id != m_mainPhyId)
+                {
+                    linksToBlock.insert(id);
+                }
+            }
+            m_apMac->GetMacQueueScheduler()->BlockQueues(WifiQueueBlockedReason::TID_NOT_MAPPED,
+                                                         AC_BE,
+                                                         {WIFI_QOSDATA_QUEUE},
+                                                         m_staMacs[0]->GetAddress(),
+                                                         m_apMac->GetAddress(),
+                                                         {0},
+                                                         linksToBlock);
+        }
+    }
+    break;
+
+    case WIFI_MAC_CTL_TRIGGER:
+        CheckInitialControlFrame(psduMap, txVector, linkId);
+        break;
+
+    case WIFI_MAC_QOSDATA:
+        CheckQosFrames(psduMap, txVector, linkId);
+        break;
+
+    case WIFI_MAC_CTL_RTS:
+        CheckRtsFrame(psduMap, txVector, linkId);
+        break;
+
+    default:;
+    }
+}
+
+void
+EmlsrLinkSwitchTest::DoSetup()
+{
+    Config::SetDefault("ns3::DefaultEmlsrManager::SwitchAuxPhy", BooleanValue(m_switchAuxPhy));
+    Config::SetDefault("ns3::EmlsrManager::ResetCamState",
+                       BooleanValue(m_resetCamStateAndInterruptSwitch));
+    Config::SetDefault("ns3::AdvancedEmlsrManager::InterruptSwitch",
+                       BooleanValue(m_resetCamStateAndInterruptSwitch));
+    Config::SetDefault("ns3::EmlsrManager::AuxPhyChannelWidth", UintegerValue(m_auxPhyMaxChWidth));
+    Config::SetDefault("ns3::WifiPhy::ChannelSwitchDelay", TimeValue(MicroSeconds(45)));
+
+    EmlsrOperationsTestBase::DoSetup();
+
+    m_errorModel = CreateObject<ListErrorModel>();
+    for (std::size_t linkId = 0; linkId < m_apMac->GetNLinks(); ++linkId)
+    {
+        m_apMac->GetWifiPhy(linkId)->SetPostReceptionErrorModel(m_errorModel);
+    }
+
+    // use channels of different widths
+    for (auto mac : std::initializer_list<Ptr<WifiMac>>{m_apMac, m_staMacs[0]})
+    {
+        mac->GetWifiPhy(0)->SetOperatingChannel(
+            WifiPhy::ChannelTuple{4, 40, WIFI_PHY_BAND_2_4GHZ, 1});
+        mac->GetWifiPhy(1)->SetOperatingChannel(
+            WifiPhy::ChannelTuple{58, 80, WIFI_PHY_BAND_5GHZ, 3});
+        mac->GetWifiPhy(2)->SetOperatingChannel(
+            WifiPhy::ChannelTuple{79, 160, WIFI_PHY_BAND_6GHZ, 7});
+    }
+}
+
+void
+EmlsrLinkSwitchTest::DoRun()
+{
+    Simulator::Stop(m_duration);
+    Simulator::Run();
+
+    CheckResults();
+
+    Simulator::Destroy();
+}
+
+void
+EmlsrLinkSwitchTest::CheckQosFrames(const WifiConstPsduMap& psduMap,
+                                    const WifiTxVector& txVector,
+                                    uint8_t linkId)
+{
+    m_countQoSframes++;
+
+    switch (m_countQoSframes)
+    {
+    case 1:
+        // unblock transmissions on all links
+        m_apMac->GetMacQueueScheduler()->UnblockQueues(WifiQueueBlockedReason::TID_NOT_MAPPED,
+                                                       AC_BE,
+                                                       {WIFI_QOSDATA_QUEUE},
+                                                       m_staMacs[0]->GetAddress(),
+                                                       m_apMac->GetAddress(),
+                                                       {0},
+                                                       {0, 1, 2});
+        // block transmissions on the link used for ML setup
+        m_apMac->GetMacQueueScheduler()->BlockQueues(WifiQueueBlockedReason::TID_NOT_MAPPED,
+                                                     AC_BE,
+                                                     {WIFI_QOSDATA_QUEUE},
+                                                     m_staMacs[0]->GetAddress(),
+                                                     m_apMac->GetAddress(),
+                                                     {0},
+                                                     {m_mainPhyId});
+        // generate a new data packet, which will be sent on a link other than the one
+        // used for ML setup, hence triggering a link switching on the EMLSR client
+        m_apMac->GetDevice()->GetNode()->AddApplication(GetApplication(DOWNLINK, 0, 2, 1000));
+        break;
+    case 2:
+        // block transmission on the link used to send this QoS data frame
+        m_apMac->GetMacQueueScheduler()->BlockQueues(WifiQueueBlockedReason::TID_NOT_MAPPED,
+                                                     AC_BE,
+                                                     {WIFI_QOSDATA_QUEUE},
+                                                     m_staMacs[0]->GetAddress(),
+                                                     m_apMac->GetAddress(),
+                                                     {0},
+                                                     {linkId});
+        // generate a new data packet, which will be sent on the link that has not been used
+        // so far, hence triggering another link switching on the EMLSR client
+        m_apMac->GetDevice()->GetNode()->AddApplication(GetApplication(DOWNLINK, 0, 2, 1000));
+        break;
+    case 3:
+        // block transmission on the link used to send this QoS data frame
+        m_apMac->GetMacQueueScheduler()->BlockQueues(WifiQueueBlockedReason::TID_NOT_MAPPED,
+                                                     AC_BE,
+                                                     {WIFI_QOSDATA_QUEUE},
+                                                     m_staMacs[0]->GetAddress(),
+                                                     m_apMac->GetAddress(),
+                                                     {0},
+                                                     {linkId});
+        // unblock transmissions on the link used for ML setup
+        m_apMac->GetMacQueueScheduler()->UnblockQueues(WifiQueueBlockedReason::TID_NOT_MAPPED,
+                                                       AC_BE,
+                                                       {WIFI_QOSDATA_QUEUE},
+                                                       m_staMacs[0]->GetAddress(),
+                                                       m_apMac->GetAddress(),
+                                                       {0},
+                                                       {m_mainPhyId});
+        // generate a new data packet, which will be sent again on the link used for ML setup,
+        // hence triggering yet another link switching on the EMLSR client
+        m_apMac->GetDevice()->GetNode()->AddApplication(GetApplication(DOWNLINK, 0, 2, 1000));
+        break;
+    case 4:
+        // block transmissions on all links at non-AP MLD side
+        m_staMacs[0]->GetMacQueueScheduler()->BlockQueues(WifiQueueBlockedReason::TID_NOT_MAPPED,
+                                                          AC_BE,
+                                                          {WIFI_QOSDATA_QUEUE},
+                                                          m_apMac->GetAddress(),
+                                                          m_staMacs[0]->GetAddress(),
+                                                          {0},
+                                                          {0, 1, 2});
+        // unblock transmissions on the link used for ML setup (non-AP MLD side)
+        m_staMacs[0]->GetMacQueueScheduler()->UnblockQueues(WifiQueueBlockedReason::TID_NOT_MAPPED,
+                                                            AC_BE,
+                                                            {WIFI_QOSDATA_QUEUE},
+                                                            m_apMac->GetAddress(),
+                                                            m_staMacs[0]->GetAddress(),
+                                                            {0},
+                                                            {m_mainPhyId});
+        // trigger establishment of BA agreement with AP as recipient
+        m_staMacs[0]->GetDevice()->GetNode()->AddApplication(GetApplication(UPLINK, 0, 4, 1000));
+        break;
+    case 5:
+        // unblock transmissions on all links at non-AP MLD side
+        m_staMacs[0]->GetMacQueueScheduler()->UnblockQueues(WifiQueueBlockedReason::TID_NOT_MAPPED,
+                                                            AC_BE,
+                                                            {WIFI_QOSDATA_QUEUE},
+                                                            m_apMac->GetAddress(),
+                                                            m_staMacs[0]->GetAddress(),
+                                                            {0},
+                                                            {0, 1, 2});
+        // block transmissions on the link used for ML setup (non-AP MLD side)
+        m_staMacs[0]->GetMacQueueScheduler()->BlockQueues(WifiQueueBlockedReason::TID_NOT_MAPPED,
+                                                          AC_BE,
+                                                          {WIFI_QOSDATA_QUEUE},
+                                                          m_apMac->GetAddress(),
+                                                          m_staMacs[0]->GetAddress(),
+                                                          {0},
+                                                          {m_mainPhyId});
+        // generate a new data packet, which will be sent on a link other than the one
+        // used for ML setup, hence triggering a link switching on the EMLSR client
+        m_staMacs[0]->GetDevice()->GetNode()->AddApplication(GetApplication(UPLINK, 0, 2, 1000));
+        break;
+    }
+}
+
+/**
+ * AUX PHY switching enabled (X = channel switch delay)
+ *
+ *  |--------- aux PHY A ---------|------ main PHY ------|-------------- aux PHY B -------------
+ *                           ┌───┐     ┌───┐
+ *                           │ICF│     │QoS│
+ * ──────────────────────────┴───┴┬───┬┴───┴┬──┬────────────────────────────────────────────────
+ *  [link 0]                      │CTS│     │BA│
+ *                                └───┘     └──┘
+ *
+ *
+ *  |--------- main PHY ----------|------------------ aux PHY A ----------------|--- main PHY ---
+ *     ┌───┐     ┌───┐                                                      ┌───┐     ┌───┐
+ *     │ICF│     │QoS│                                                      │ICF│     │QoS│
+ *  ───┴───┴┬───┬┴───┴┬──┬──────────────────────────────────────────────────┴───┴┬───┬┴───┴┬──┬──
+ *  [link 1]│CTS│     │BA│                                                       │CTS│     │BA│
+ *          └───┘     └──┘                                                       └───┘     └──┘
+ *
+ *
+ *  |--------------------- aux PHY B --------------------|------ main PHY ------|-- aux PHY A ---
+ *                                                   ┌───┐     ┌───┐
+ *                                                   │ICF│     │QoS│
+ *  ─────────────────────────────────────────────────┴───┴┬───┬┴───┴┬──┬─────────────────────────
+ *  [link 2]                                              │CTS│     │BA│
+ *                                                        └───┘     └──┘
+ *
+ * ... continued ...
+ *
+ *  |----------------------------------------- aux PHY B ---------------------------------------
+ * ─────────────────────────────────────────────────────────────────────────────────────────────
+ *  [link 0]
+ *
+ *  |--------- main PHY ----------|X|X|------------------------ aux PHY A ----------------------
+ *                 ┌───┐
+ *                 │ACK│
+ *  ──────────┬───┬┴───┴────────────────────────────────────────────────────────────────────────
+ *  [link 1]  │QoS│
+ *            └───┘
+ *
+ *  |-------- aux PHY A ----------|X|---------------------- main PHY ---------------------------
+ *                                          ┌──┐
+ *                                          │BA│
+ *  ────────────────────────┬───X──────┬───┬┴──┴────────────────────────────────────────────────
+ *  [link 2]                │RTS│      │QoS│
+ *                          └───┘      └───┘
+ ************************************************************************************************
+ *
+ * AUX PHY switching disabled (X = channel switch delay)
+ *
+ *  |------------------------------------------ aux PHY A ---------------------------------------
+ *                                |-- main PHY --|X|
+ *                            ┌───┐     ┌───┐
+ *                            │ICF│     │QoS│
+ *  ──────────────────────────┴───┴┬───┬┴───┴┬──┬────────────────────────────────────────────────
+ *  [link 0]                       │CTS│     │BA│
+ *                                 └───┘     └──┘
+ *
+ *                                                 |-main|
+ *  |--------- main PHY ----------|                |-PHY-|                |------ main PHY ------
+ *     ┌───┐     ┌───┐                                                      ┌───┐     ┌───┐
+ *     │ICF│     │QoS│                                                      │ICF│     │QoS│
+ *  ───┴───┴┬───┬┴───┴┬──┬──────────────────────────────────────────────────┴───┴┬───┬┴───┴┬──┬──
+ *  [link 1]│CTS│     │BA│                                                       │CTS│     │BA│
+ *          └───┘     └──┘                                                       └───┘     └──┘
+ *
+ *
+ *  |------------------------------------------ aux PHY B ---------------------------------------
+ *                                                       |-- main PHY --|X|
+ *                                                   ┌───┐     ┌───┐
+ *                                                   │ICF│     │QoS│
+ *  ─────────────────────────────────────────────────┴───┴┬───┬┴───┴┬──┬─────────────────────────
+ *  [link 2]                                              │CTS│     │BA│
+ *                                                        └───┘     └──┘
+ *
+ * ... continued ...
+ *
+ *  |----------------------------------------- aux PHY A ---------------------------------------
+ * ─────────────────────────────────────────────────────────────────────────────────────────────
+ *  [link 0]
+ *
+ *  |-------- main PHY --------|      |--- main PHY ---|
+ *                 ┌───┐
+ *                 │ACK│
+ *  ──────────┬───┬┴───┴────────────────────────────────────────────────────────────────────────
+ *  [link 1]  │QoS│
+ *            └───┘
+ *
+ *  |------------------------------------------ aux PHY B --------------------------------------
+ *                              |X||X|                 |X|-------------- main PHY --------------
+ *                                                   ┌───┐     ┌──┐
+ *                                                   │CTS│     │BA│
+ *  ────────────────────────┬───X───────────────┬───┬┴───┴┬───┬┴──┴─────────────────────────────
+ *  [link 2]                │RTS│               │RTS│     │QoS│
+ *                          └───┘               └───┘     └───┘
+ *
+ */
+
+void
+EmlsrLinkSwitchTest::CheckInitialControlFrame(const WifiConstPsduMap& psduMap,
+                                              const WifiTxVector& txVector,
+                                              uint8_t linkId)
+{
+    if (++m_countIcfFrames == 1)
+    {
+        m_txPsdusPos = m_txPsdus.size() - 1;
+    }
+
+    // the first ICF is sent to protect ADDBA_REQ for DL BA agreement, then one ICF is sent before
+    // each of the 4 DL QoS Data frames; finally, another ICF is sent before the ADDBA_RESP for UL
+    // BA agreement. Hence, at any time the number of ICF sent is always greater than or equal to
+    // the number of QoS data frames sent.
+    NS_TEST_EXPECT_MSG_GT_OR_EQ(m_countIcfFrames, m_countQoSframes, "Unexpected number of ICFs");
+
+    auto mainPhy = m_staMacs[0]->GetDevice()->GetPhy(m_mainPhyId);
+    auto phyRecvIcf = m_staMacs[0]->GetWifiPhy(linkId); // PHY receiving the ICF
+
+    auto currMainPhyLinkId = m_staMacs[0]->GetLinkForPhy(mainPhy);
+    NS_TEST_ASSERT_MSG_EQ(currMainPhyLinkId.has_value(),
+                          true,
+                          "Didn't find the link on which the Main PHY is operating");
+    NS_TEST_ASSERT_MSG_NE(phyRecvIcf,
+                          nullptr,
+                          "No PHY on the link where ICF " << m_countQoSframes << " was sent");
+
+    if (phyRecvIcf != mainPhy)
+    {
+        NS_TEST_EXPECT_MSG_LT_OR_EQ(
+            phyRecvIcf->GetChannelWidth(),
+            m_auxPhyMaxChWidth,
+            "Aux PHY that received ICF "
+                << m_countQoSframes << " is operating on a channel whose width exceeds the limit");
+    }
+
+    // the first two ICFs (before ADDBA_REQ and before first DL QoS Data) and the ICF before the
+    // ADDBA_RESP are received by the main PHY. If aux PHYs do not switch links, the ICF before
+    // the last DL QoS Data is also received by the main PHY
+    NS_TEST_EXPECT_MSG_EQ((phyRecvIcf == mainPhy),
+                          (m_countIcfFrames == 1 || m_countIcfFrames == 2 ||
+                           (!m_switchAuxPhy && m_countIcfFrames == 5) || m_countIcfFrames == 6),
+                          "Expecting that the ICF was received by the main PHY");
+
+    // if aux PHYs do not switch links, the main PHY is operating on its original link when
+    // the transmission of an ICF starts
+    NS_TEST_EXPECT_MSG_EQ(m_switchAuxPhy || currMainPhyLinkId == m_mainPhyId,
+                          true,
+                          "Main PHY is operating on an unexpected link ("
+                              << +currMainPhyLinkId.value() << ", expected " << +m_mainPhyId
+                              << ")");
+
+    auto txDuration =
+        WifiPhy::CalculateTxDuration(psduMap, txVector, m_apMac->GetWifiPhy(linkId)->GetPhyBand());
+
+    // check that PHYs are operating on the expected link after the reception of the ICF
+    Simulator::Schedule(txDuration + NanoSeconds(1), [=, this]() {
+        // the main PHY must be operating on the link where ICF was sent
+        NS_TEST_EXPECT_MSG_EQ(m_staMacs[0]->GetWifiPhy(linkId),
+                              mainPhy,
+                              "PHY operating on link where ICF was sent is not the main PHY");
+
+        // the behavior of Aux PHYs depends on whether they switch channel or not
+        if (m_switchAuxPhy)
+        {
+            if (mainPhy != phyRecvIcf)
+            {
+                NS_TEST_EXPECT_MSG_EQ(phyRecvIcf->IsStateSwitching(),
+                                      true,
+                                      "Aux PHY expected to switch channel");
+            }
+            Simulator::Schedule(phyRecvIcf->GetChannelSwitchDelay(), [=, this]() {
+                NS_TEST_EXPECT_MSG_EQ(m_staMacs[0]->GetWifiPhy(*currMainPhyLinkId),
+                                      phyRecvIcf,
+                                      "The Aux PHY that received the ICF is expected to operate "
+                                      "on the link where Main PHY was before switching channel");
+            });
+        }
+        else
+        {
+            NS_TEST_EXPECT_MSG_EQ(phyRecvIcf->IsStateSwitching(),
+                                  false,
+                                  "Aux PHY is not expected to switch channel");
+            NS_TEST_EXPECT_MSG_EQ(phyRecvIcf->GetPhyBand(),
+                                  mainPhy->GetPhyBand(),
+                                  "The Aux PHY that received the ICF is expected to operate "
+                                  "on the same band as the Main PHY");
+        }
+    });
+}
+
+void
+EmlsrLinkSwitchTest::CheckRtsFrame(const WifiConstPsduMap& psduMap,
+                                   const WifiTxVector& txVector,
+                                   uint8_t linkId)
+{
+    // corrupt the first RTS frame (sent by the EMLSR client)
+    if (++m_countRtsFrames == 1)
+    {
+        auto psdu = psduMap.begin()->second;
+        m_errorModel->SetList({psdu->GetPacket()->GetUid()});
+
+        // check that when CTS timeout occurs, the main PHY is switching
+        Simulator::Schedule(
+            m_staMacs[0]->GetFrameExchangeManager(linkId)->GetWifiTxTimer().GetDelayLeft() -
+                TimeStep(1),
+            [=, this]() {
+                // store the time to complete the current channel switch at CTS timeout
+                auto mainPhy = m_staMacs[0]->GetDevice()->GetPhy(m_mainPhyId);
+                auto toCurrSwitchEnd = mainPhy->GetDelayUntilIdle() + TimeStep(1);
+
+                Simulator::Schedule(TimeStep(1), [=, this]() {
+                    NS_TEST_EXPECT_MSG_EQ(mainPhy->IsStateSwitching(),
+                                          true,
+                                          "Main PHY expected to be in SWITCHING state instead of "
+                                              << mainPhy->GetState()->GetState());
+
+                    // If main PHY channel switch can be interrupted, the main PHY should be back
+                    // operating on the preferred link after a channel switch delay. Otherwise, it
+                    // will be operating on the preferred link, if SwitchAuxPhy is false, or on the
+                    // link used to send the RTS, if SwitchAuxPhy is true, after the remaining
+                    // channel switching time plus the channel switch delay.
+                    auto newLinkId = (m_resetCamStateAndInterruptSwitch || !m_switchAuxPhy)
+                                         ? m_mainPhyId
+                                         : linkId;
+                    auto delayLeft = m_resetCamStateAndInterruptSwitch
+                                         ? Time{0}
+                                         : toCurrSwitchEnd; // time to complete current switch
+                    if (m_resetCamStateAndInterruptSwitch || !m_switchAuxPhy)
+                    {
+                        // add the time to perform another channel switch
+                        delayLeft += mainPhy->GetChannelSwitchDelay();
+                    }
+
+                    auto totalSwitchDelay =
+                        delayLeft + (mainPhy->GetChannelSwitchDelay() - toCurrSwitchEnd);
+
+                    Simulator::Schedule(delayLeft - TimeStep(1), [=, this]() {
+                        // check if the MSD timer was running on the link left by the main PHY
+                        // before completing channel switch
+                        bool msdWasRunning = m_staMacs[0]
+                                                 ->GetEmlsrManager()
+                                                 ->GetElapsedMediumSyncDelayTimer(m_mainPhyId)
+                                                 .has_value();
+
+                        Simulator::Schedule(TimeStep(2), [=, this]() {
+                            auto id = m_staMacs[0]->GetLinkForPhy(mainPhy);
+                            NS_TEST_EXPECT_MSG_EQ(id.has_value(),
+                                                  true,
+                                                  "Expected main PHY to operate on a link");
+                            NS_TEST_EXPECT_MSG_EQ(*id,
+                                                  newLinkId,
+                                                  "Main PHY is operating on an unexpected link");
+                            const auto startMsd = (totalSwitchDelay > MEDIUM_SYNC_THRESHOLD);
+                            const auto msdIsRunning = msdWasRunning || startMsd;
+                            CheckMsdTimerRunning(
+                                m_staMacs[0],
+                                m_mainPhyId,
+                                msdIsRunning,
+                                std::string("because total switch delay was ") +
+                                    std::to_string(totalSwitchDelay.GetNanoSeconds()) + "ns");
+                        });
+                    });
+                });
+            });
+    }
+    // block transmissions on all other links at non-AP MLD side
+    std::set<uint8_t> links{0, 1, 2};
+    links.erase(linkId);
+    m_staMacs[0]->GetMacQueueScheduler()->BlockQueues(WifiQueueBlockedReason::TID_NOT_MAPPED,
+                                                      AC_BE,
+                                                      {WIFI_QOSDATA_QUEUE},
+                                                      m_apMac->GetAddress(),
+                                                      m_staMacs[0]->GetAddress(),
+                                                      {0},
+                                                      links);
+}
+
+void
+EmlsrLinkSwitchTest::CheckResults()
+{
+    NS_TEST_ASSERT_MSG_NE(m_txPsdusPos, 0, "BA agreement establishment not completed");
+
+    // Expected frame exchanges after ML setup and EML OMN exchange:
+    //  1. (DL) ICF + CTS + ADDBA_REQ + ACK
+    //  2. (UL) ADDBA_RESP + ACK
+    //  3. (DL) ICF + CTS + DATA + BA
+    //  4. (DL) ICF + CTS + DATA + BA
+    //  5. (DL) ICF + CTS + DATA + BA
+    //  6. (DL) ICF + CTS + DATA + BA
+    //  7. (UL) ADDBA_REQ + ACK
+    //  8. (DL) ICF + CTS + ADDBA_RESP + ACK
+    //  9. (UL) DATA + BA
+    // 10. (UL) RTS - CTS timeout
+    // 11. (UL) (RTS + CTS + ) DATA + BA
+
+    // frame exchange 11 is protected if SwitchAuxPhy is false or (SwitchAuxPhy is true and) the
+    // main PHY switch can be interrupted
+    bool fe11protected = !m_switchAuxPhy || m_resetCamStateAndInterruptSwitch;
+
+    NS_TEST_EXPECT_MSG_EQ(m_countIcfFrames, 6, "Unexpected number of ICFs sent");
+
+    // frame exchanges without RTS because the EMLSR client sent the initial frame through main PHY
+    const std::size_t nFrameExchNoRts = fe11protected ? 3 : 4;
+
+    const std::size_t nFrameExchWithRts = fe11protected ? 1 : 0;
+
+    NS_TEST_ASSERT_MSG_GT_OR_EQ(m_txPsdus.size(),
+                                m_txPsdusPos +
+                                    m_countIcfFrames * 4 + /* frames in frame exchange with ICF */
+                                    nFrameExchNoRts * 2 + /* frames in frame exchange without RTS */
+                                    nFrameExchWithRts * 4 + /* frames in frame exchange with RTS */
+                                    1,                      /* corrupted RTS */
+                                "Insufficient number of TX PSDUs");
+
+    // m_txPsdusPos points to the first ICF
+    auto psduIt = std::next(m_txPsdus.cbegin(), m_txPsdusPos);
+
+    // lambda to increase psduIt while skipping Beacon frames
+    auto nextPsdu = [&]() {
+        do
+        {
+            ++psduIt;
+        } while (psduIt != m_txPsdus.cend() &&
+                 psduIt->psduMap.at(SU_STA_ID)->GetHeader(0).IsBeacon());
+    };
+
+    const std::size_t nFrameExchanges =
+        m_countIcfFrames + nFrameExchNoRts + nFrameExchWithRts + 1 /* corrupted RTS */;
+
+    for (std::size_t i = 1; i <= nFrameExchanges; ++i)
+    {
+        if (i == 1 || (i >= 3 && i <= 6) || i == 8 || i == 10 || (i == 11 && fe11protected))
+        {
+            // frame exchanges with protection
+            NS_TEST_EXPECT_MSG_EQ((psduIt->psduMap.size() == 1 &&
+                                   (i < 9 ? psduIt->psduMap.at(SU_STA_ID)->GetHeader(0).IsTrigger()
+                                          : psduIt->psduMap.at(SU_STA_ID)->GetHeader(0).IsRts())),
+                                  true,
+                                  "Expected a Trigger Frame (ICF)");
+            nextPsdu();
+            if (i == 10)
+            {
+                continue; // corrupted RTS
+            }
+            NS_TEST_EXPECT_MSG_EQ((psduIt->psduMap.size() == 1 &&
+                                   psduIt->psduMap.at(SU_STA_ID)->GetHeader(0).IsCts()),
+                                  true,
+                                  "Expected a CTS");
+            nextPsdu();
+        }
+
+        if (i == 1 || i == 2 || i == 7 || i == 8) // frame exchanges with ADDBA REQ/RESP frames
+        {
+            NS_TEST_EXPECT_MSG_EQ((psduIt->psduMap.size() == 1 &&
+                                   psduIt->psduMap.at(SU_STA_ID)->GetHeader(0).IsMgt()),
+                                  true,
+                                  "Expected a management frame");
+            nextPsdu();
+            NS_TEST_EXPECT_MSG_EQ((psduIt->psduMap.size() == 1 &&
+                                   psduIt->psduMap.at(SU_STA_ID)->GetHeader(0).IsAck()),
+                                  true,
+                                  "Expected a Normal Ack");
+        }
+        else
+        {
+            NS_TEST_EXPECT_MSG_EQ((psduIt->psduMap.size() == 1 &&
+                                   psduIt->psduMap.at(SU_STA_ID)->GetHeader(0).IsQosData()),
+                                  true,
+                                  "Expected a QoS Data frame");
+            nextPsdu();
+            NS_TEST_EXPECT_MSG_EQ((psduIt->psduMap.size() == 1 &&
+                                   psduIt->psduMap.at(SU_STA_ID)->GetHeader(0).IsBlockAck()),
+                                  true,
+                                  "Expected a BlockAck");
+        }
+        nextPsdu();
+    }
+}
+
+EmlsrCcaBusyTest::EmlsrCcaBusyTest(MHz_u auxPhyMaxChWidth)
+    : EmlsrOperationsTestBase(std::string("Check EMLSR link switching (auxPhyMaxChWidth=") +
+                              std::to_string(auxPhyMaxChWidth) + "MHz )"),
+      m_auxPhyMaxChWidth(auxPhyMaxChWidth),
+      m_channelSwitchDelay(MicroSeconds(75)),
+      m_currMainPhyLinkId(0),
+      m_nextMainPhyLinkId(0)
+{
+    m_nEmlsrStations = 1;
+    m_nNonEmlsrStations = 1;
+    m_linksToEnableEmlsrOn = {0, 1, 2}; // enable EMLSR on all links right after association
+    m_mainPhyId = 1;
+    m_establishBaUl = {0};
+    m_duration = Seconds(1.0);
+    m_transitionDelay = {MicroSeconds(128)};
+}
+
+void
+EmlsrCcaBusyTest::DoRun()
+{
+    Simulator::Stop(m_duration);
+    Simulator::Run();
+
+    Simulator::Destroy();
+}
+
+void
+EmlsrCcaBusyTest::DoSetup()
+{
+    Config::SetDefault("ns3::DefaultEmlsrManager::SwitchAuxPhy", BooleanValue(true));
+    Config::SetDefault("ns3::EmlsrManager::AuxPhyChannelWidth", UintegerValue(m_auxPhyMaxChWidth));
+    Config::SetDefault("ns3::EmlsrManager::AuxPhyMaxModClass", StringValue("EHT"));
+    Config::SetDefault("ns3::WifiPhy::ChannelSwitchDelay", TimeValue(m_channelSwitchDelay));
+
+    EmlsrOperationsTestBase::DoSetup();
+
+    // use channels of different widths
+    for (auto mac : std::initializer_list<Ptr<WifiMac>>{m_apMac, m_staMacs[0], m_staMacs[1]})
+    {
+        mac->GetWifiPhy(0)->SetOperatingChannel(
+            WifiPhy::ChannelTuple{4, 40, WIFI_PHY_BAND_2_4GHZ, 0});
+        mac->GetWifiPhy(1)->SetOperatingChannel(
+            WifiPhy::ChannelTuple{58, 80, WIFI_PHY_BAND_5GHZ, 0});
+        mac->GetWifiPhy(2)->SetOperatingChannel(
+            WifiPhy::ChannelTuple{79, 160, WIFI_PHY_BAND_6GHZ, 0});
+    }
+}
+
+void
+EmlsrCcaBusyTest::TransmitPacketToAp(uint8_t linkId)
+{
+    m_staMacs[1]->GetDevice()->GetNode()->AddApplication(GetApplication(UPLINK, 1, 1, 2000));
+
+    // force the transmission of the packet to happen now on the given link.
+    // Multiple ScheduleNow calls are needed because Node::AddApplication() schedules a call to
+    // Application::Initialize(), which schedules a call to Application::StartApplication(), which
+    // schedules a call to PacketSocketClient::Send(), which finally generates the packet
+    Simulator::ScheduleNow([=, this]() {
+        Simulator::ScheduleNow([=, this]() {
+            Simulator::ScheduleNow([=, this]() {
+                m_staMacs[1]->GetFrameExchangeManager(linkId)->StartTransmission(
+                    m_staMacs[1]->GetQosTxop(AC_BE),
+                    m_staMacs[1]->GetWifiPhy(linkId)->GetChannelWidth());
+            });
+        });
+    });
+
+    // check that the other MLD started transmitting on the correct link
+    Simulator::Schedule(TimeStep(1), [=, this]() {
+        NS_TEST_EXPECT_MSG_EQ(m_staMacs[1]->GetWifiPhy(linkId)->IsStateTx(),
+                              true,
+                              "At time " << Simulator::Now().As(Time::NS)
+                                         << ", other MLD did not start transmitting on link "
+                                         << +linkId);
+    });
+}
+
+void
+EmlsrCcaBusyTest::StartTraffic()
+{
+    auto currMainPhyLinkId = m_staMacs[0]->GetLinkForPhy(m_mainPhyId);
+    NS_TEST_ASSERT_MSG_EQ(currMainPhyLinkId.has_value(),
+                          true,
+                          "Main PHY is not operating on any link");
+    m_currMainPhyLinkId = *currMainPhyLinkId;
+    m_nextMainPhyLinkId = (m_currMainPhyLinkId + 1) % 2;
+
+    // request the main PHY to switch to another link
+    m_staMacs[0]->GetEmlsrManager()->SwitchMainPhy(
+        m_nextMainPhyLinkId,
+        false,
+        EmlsrManager::DONT_REQUEST_ACCESS,
+        EmlsrDlTxopIcfReceivedByAuxPhyTrace{}); // trace info not used
+
+    // the other MLD transmits a packet to the AP
+    TransmitPacketToAp(m_nextMainPhyLinkId);
+
+    // schedule another packet transmission slightly (10 us) before the end of aux PHY switch
+    Simulator::Schedule(m_channelSwitchDelay - MicroSeconds(10),
+                        &EmlsrCcaBusyTest::TransmitPacketToAp,
+                        this,
+                        m_currMainPhyLinkId);
+
+    // first checkpoint is after that the preamble of the PPDU has been received
+    Simulator::Schedule(MicroSeconds(8), &EmlsrCcaBusyTest::CheckPoint1, this);
+}
+
+/**
+ *                               ┌───────────────┐
+ *  [link X]                     │  other to AP  │CP3
+ * ──────────────────────────────┴───────────────┴──────────────────────────────────────────────
+ *  |------ main PHY ------|                  |------------------- aux PHY ---------------------
+ *                         .\_              _/
+ *                         .  \_          _/
+ *                         .    \_      _/
+ *                         .      \_  _/
+ *  [link Y]               . CP1    \/ CP2
+ *                         .┌───────────────┐
+ *                         .│  other to AP  │
+ * ─────────────────────────┴───────────────┴────────────────────────────────────────────────────
+ *  |------------ aux PHY ----------|---------------------- main PHY ----------------------------
+ *
+ */
+
+void
+EmlsrCcaBusyTest::CheckPoint1()
+{
+    // first checkpoint is after that the preamble of the first PPDU has been received
+    auto mainPhy = m_staMacs[0]->GetDevice()->GetPhy(m_mainPhyId);
+
+    // 1. Main PHY is switching
+    NS_TEST_EXPECT_MSG_EQ(mainPhy->IsStateSwitching(), true, "Main PHY is not switching");
+
+    auto auxPhy = m_staMacs[0]->GetWifiPhy(m_nextMainPhyLinkId);
+    NS_TEST_EXPECT_MSG_NE(mainPhy, auxPhy, "Main PHY is operating on an unexpected link");
+
+    // 2. Aux PHY is receiving the PHY header
+    NS_TEST_EXPECT_MSG_EQ(auxPhy->GetInfoIfRxingPhyHeader().has_value(),
+                          true,
+                          "Aux PHY is not receiving a PHY header");
+
+    // 3. Main PHY dropped the preamble because it is switching
+    NS_TEST_EXPECT_MSG_EQ(mainPhy->GetInfoIfRxingPhyHeader().has_value(),
+                          false,
+                          "Main PHY is receiving a PHY header");
+
+    // 4. Channel access manager on destination link (Y) has been notified of CCA busy, but not
+    // until the end of transmission (main PHY dropped the preamble and notified CCA busy until
+    // end of transmission but the channel access manager on link Y does not yet have a listener
+    // attached to the main PHY; aux PHY notified CCA busy until the end of the PHY header field
+    // being received)
+    const auto caManager = m_staMacs[0]->GetChannelAccessManager(m_nextMainPhyLinkId);
+    const auto endTxTime = m_staMacs[1]->GetChannelAccessManager(m_nextMainPhyLinkId)->m_lastTxEnd;
+    NS_TEST_ASSERT_MSG_EQ(caManager->m_lastBusyEnd.contains(WIFI_CHANLIST_PRIMARY),
+                          true,
+                          "No CCA information for primary20 channel");
+    NS_TEST_EXPECT_MSG_GT_OR_EQ(
+        caManager->m_lastBusyEnd[WIFI_CHANLIST_PRIMARY],
+        Simulator::Now(),
+        "ChannelAccessManager on destination link not notified of CCA busy");
+    NS_TEST_EXPECT_MSG_LT(
+        caManager->m_lastBusyEnd[WIFI_CHANLIST_PRIMARY],
+        endTxTime,
+        "ChannelAccessManager on destination link notified of CCA busy until end of transmission");
+
+    // second checkpoint is after that the main PHY completed the link switch
+    Simulator::Schedule(mainPhy->GetDelayUntilIdle() + TimeStep(1),
+                        &EmlsrCcaBusyTest::CheckPoint2,
+                        this);
+}
+
+void
+EmlsrCcaBusyTest::CheckPoint2()
+{
+    // second checkpoint is after that the main PHY completed the link switch. The channel access
+    // manager on destination link (Y) is expected to be notified by the main PHY that medium is
+    // busy until the end of the ongoing transmission
+    const auto caManager = m_staMacs[0]->GetChannelAccessManager(m_nextMainPhyLinkId);
+    const auto endTxTime = m_staMacs[1]->GetChannelAccessManager(m_nextMainPhyLinkId)->m_lastTxEnd;
+    NS_TEST_ASSERT_MSG_EQ(caManager->m_lastBusyEnd.contains(WIFI_CHANLIST_PRIMARY),
+                          true,
+                          "No CCA information for primary20 channel");
+    NS_TEST_EXPECT_MSG_GT_OR_EQ(
+        caManager->m_lastBusyEnd[WIFI_CHANLIST_PRIMARY],
+        Simulator::Now(),
+        "ChannelAccessManager on destination link not notified of CCA busy");
+    NS_TEST_EXPECT_MSG_GT_OR_EQ(caManager->m_lastBusyEnd[WIFI_CHANLIST_PRIMARY],
+                                endTxTime,
+                                "ChannelAccessManager on destination link not notified of CCA busy "
+                                "until end of transmission");
+
+    // third checkpoint is after that the aux PHY completed the link switch
+    Simulator::Schedule(m_channelSwitchDelay, &EmlsrCcaBusyTest::CheckPoint3, this);
+}
+
+void
+EmlsrCcaBusyTest::CheckPoint3()
+{
+    // third checkpoint is after that the aux PHY completed the link switch. The channel access
+    // manager on source link (X) is expected to be notified by the aux PHY that medium is
+    // busy until the end of the ongoing transmission (even if the aux PHY was not listening to
+    // link X when transmission started, its interface on link X recorded the transmission)
+    const auto caManager = m_staMacs[0]->GetChannelAccessManager(m_currMainPhyLinkId);
+    const auto endTxTime = m_staMacs[1]->GetChannelAccessManager(m_currMainPhyLinkId)->m_lastTxEnd;
+    NS_TEST_ASSERT_MSG_EQ(caManager->m_lastBusyEnd.contains(WIFI_CHANLIST_PRIMARY),
+                          true,
+                          "No CCA information for primary20 channel");
+    NS_TEST_EXPECT_MSG_GT_OR_EQ(caManager->m_lastBusyEnd[WIFI_CHANLIST_PRIMARY],
+                                Simulator::Now(),
+                                "ChannelAccessManager on source link not notified of CCA busy");
+    NS_TEST_EXPECT_MSG_GT_OR_EQ(caManager->m_lastBusyEnd[WIFI_CHANLIST_PRIMARY],
+                                endTxTime,
+                                "ChannelAccessManager on source link not notified of CCA busy "
+                                "until end of transmission");
+}
+
+SingleLinkEmlsrTest::SingleLinkEmlsrTest(bool switchAuxPhy, bool auxPhyTxCapable)
+    : EmlsrOperationsTestBase(
+          "Check EMLSR single link operation (switchAuxPhy=" + std::to_string(switchAuxPhy) +
+          ", auxPhyTxCapable=" + std::to_string(auxPhyTxCapable) + ")"),
+      m_switchAuxPhy(switchAuxPhy),
+      m_auxPhyTxCapable(auxPhyTxCapable)
+{
+    m_mainPhyId = 0;
+    m_linksToEnableEmlsrOn = {m_mainPhyId};
+    m_nPhysPerEmlsrDevice = 1;
+    m_nEmlsrStations = 1;
+    m_nNonEmlsrStations = 0;
+
+    // channel switch delay will be also set to 64 us
+    m_paddingDelay = {MicroSeconds(64)};
+    m_transitionDelay = {MicroSeconds(64)};
+    m_establishBaDl = {0};
+    m_establishBaUl = {0};
+    m_duration = Seconds(0.5);
+}
+
+void
+SingleLinkEmlsrTest::DoSetup()
+{
+    Config::SetDefault("ns3::WifiPhy::ChannelSwitchDelay", TimeValue(MicroSeconds(64)));
+    Config::SetDefault("ns3::DefaultEmlsrManager::SwitchAuxPhy", BooleanValue(m_switchAuxPhy));
+    Config::SetDefault("ns3::EmlsrManager::AuxPhyTxCapable", BooleanValue(m_auxPhyTxCapable));
+
+    EmlsrOperationsTestBase::DoSetup();
+}
+
+void
+SingleLinkEmlsrTest::Transmit(Ptr<WifiMac> mac,
+                              uint8_t phyId,
+                              WifiConstPsduMap psduMap,
+                              WifiTxVector txVector,
+                              double txPowerW)
+{
+    EmlsrOperationsTestBase::Transmit(mac, phyId, psduMap, txVector, txPowerW);
+
+    const auto psdu = psduMap.cbegin()->second;
+    const auto& hdr = psdu->GetHeader(0);
+
+    // nothing to do in case of Beacon and CF-End frames
+    if (hdr.IsBeacon() || hdr.IsCfEnd())
+    {
+        return;
+    }
+
+    auto linkId = mac->GetLinkForPhy(phyId);
+    NS_TEST_ASSERT_MSG_EQ(linkId.has_value(),
+                          true,
+                          "PHY " << +phyId << " is not operating on any link");
+    NS_TEST_EXPECT_MSG_EQ(+linkId.value(), 0, "TX occurred on unexpected link " << +linkId.value());
+
+    if (m_eventIt != m_events.cend())
+    {
+        // check that the expected frame is being transmitted
+        NS_TEST_EXPECT_MSG_EQ(m_eventIt->hdrType,
+                              hdr.GetType(),
+                              "Unexpected MAC header type for frame #"
+                                  << std::distance(m_events.cbegin(), m_eventIt));
+        // perform actions/checks, if any
+        if (m_eventIt->func)
+        {
+            m_eventIt->func(psdu, txVector);
+        }
+
+        ++m_eventIt;
+    }
+}
+
+void
+SingleLinkEmlsrTest::DoRun()
+{
+    // lambda to check that AP MLD started the transition delay timer after the TX/RX of given frame
+    auto checkTransDelay = [this](Ptr<const WifiPsdu> psdu,
+                                  const WifiTxVector& txVector,
+                                  bool testUnblockedForOtherReasons,
+                                  const std::string& frameStr) {
+        const auto txDuration = WifiPhy::CalculateTxDuration(psdu->GetSize(),
+                                                             txVector,
+                                                             m_apMac->GetWifiPhy(0)->GetPhyBand());
+        Simulator::Schedule(txDuration + MicroSeconds(1), /* to account for propagation delay */
+                            &SingleLinkEmlsrTest::CheckBlockedLink,
+                            this,
+                            m_apMac,
+                            m_staMacs[0]->GetAddress(),
+                            0,
+                            WifiQueueBlockedReason::WAITING_EMLSR_TRANSITION_DELAY,
+                            true,
+                            "Checking that AP MLD blocked transmissions to single link EMLSR "
+                            "client after " +
+                                frameStr,
+                            testUnblockedForOtherReasons);
+    };
+
+    // expected sequence of transmitted frames
+    m_events.emplace_back(WIFI_MAC_MGT_ASSOCIATION_REQUEST);
+    m_events.emplace_back(WIFI_MAC_CTL_ACK);
+    m_events.emplace_back(WIFI_MAC_MGT_ASSOCIATION_RESPONSE);
+    m_events.emplace_back(WIFI_MAC_CTL_ACK);
+
+    // EML OMN sent by EMLSR client
+    m_events.emplace_back(WIFI_MAC_MGT_ACTION,
+                          [=, this](Ptr<const WifiPsdu> psdu, const WifiTxVector& txVector) {
+                              // check that the address of the EMLSR client is seen as an MLD
+                              // address
+                              NS_TEST_EXPECT_MSG_EQ(
+                                  m_apMac->GetWifiRemoteStationManager(0)
+                                      ->GetMldAddress(m_staMacs[0]->GetAddress())
+                                      .has_value(),
+                                  true,
+                                  "Expected the EMLSR client address to be seen as an MLD address");
+                          });
+    m_events.emplace_back(WIFI_MAC_CTL_ACK);
+    // EML OMN sent by AP MLD, protected by ICF
+    m_events.emplace_back(WIFI_MAC_CTL_TRIGGER);
+    m_events.emplace_back(WIFI_MAC_CTL_CTS);
+    m_events.emplace_back(WIFI_MAC_MGT_ACTION);
+    m_events.emplace_back(WIFI_MAC_CTL_ACK,
+                          [=, this](Ptr<const WifiPsdu> psdu, const WifiTxVector& txVector) {
+                              // check that EMLSR mode has been enabled on link 0 of EMLSR client
+                              NS_TEST_EXPECT_MSG_EQ(
+                                  m_staMacs[0]->IsEmlsrLink(0),
+                                  true,
+                                  "Expected EMLSR mode to be enabled on link 0 of EMLSR client");
+                          });
+
+    // Establishment of BA agreement for downlink direction
+
+    // ADDBA REQUEST sent by AP MLD (protected by ICF)
+    m_events.emplace_back(WIFI_MAC_CTL_TRIGGER);
+    m_events.emplace_back(WIFI_MAC_CTL_CTS);
+    m_events.emplace_back(WIFI_MAC_MGT_ACTION);
+    m_events.emplace_back(WIFI_MAC_CTL_ACK,
+                          [=](Ptr<const WifiPsdu> psdu, const WifiTxVector& txVector) {
+                              // check that transition delay is started after reception of Ack
+                              checkTransDelay(psdu, txVector, false, "DL ADDBA REQUEST");
+                          });
+
+    // ADDBA RESPONSE sent by EMLSR client (no RTS because it is sent by main PHY)
+    m_events.emplace_back(WIFI_MAC_MGT_ACTION);
+    m_events.emplace_back(WIFI_MAC_CTL_ACK,
+                          [=](Ptr<const WifiPsdu> psdu, const WifiTxVector& txVector) {
+                              // check that transition delay is started after reception of Ack
+                              checkTransDelay(psdu, txVector, true, "DL ADDBA RESPONSE");
+                          });
+
+    // Downlink QoS data frame that triggered BA agreement establishment
+    m_events.emplace_back(WIFI_MAC_CTL_TRIGGER);
+    m_events.emplace_back(WIFI_MAC_CTL_CTS);
+    m_events.emplace_back(WIFI_MAC_QOSDATA);
+    m_events.emplace_back(WIFI_MAC_CTL_BACKRESP,
+                          [=](Ptr<const WifiPsdu> psdu, const WifiTxVector& txVector) {
+                              // check that transition delay is started after reception of BlockAck
+                              checkTransDelay(psdu, txVector, true, "DL QoS Data");
+                          });
+
+    // Establishment of BA agreement for uplink direction
+
+    // ADDBA REQUEST sent by EMLSR client (no RTS because it is sent by main PHY)
+    m_events.emplace_back(WIFI_MAC_MGT_ACTION);
+    m_events.emplace_back(WIFI_MAC_CTL_ACK,
+                          [=](Ptr<const WifiPsdu> psdu, const WifiTxVector& txVector) {
+                              // check that transition delay is started after reception of Ack
+                              checkTransDelay(psdu, txVector, false, "UL ADDBA REQUEST");
+                          });
+    // ADDBA RESPONSE sent by AP MLD (protected by ICF)
+    m_events.emplace_back(WIFI_MAC_CTL_TRIGGER);
+    m_events.emplace_back(WIFI_MAC_CTL_CTS);
+    m_events.emplace_back(WIFI_MAC_MGT_ACTION);
+    m_events.emplace_back(WIFI_MAC_CTL_ACK,
+                          [=](Ptr<const WifiPsdu> psdu, const WifiTxVector& txVector) {
+                              // check that transition delay is started after reception of Ack
+                              checkTransDelay(psdu, txVector, true, "UL ADDBA RESPONSE");
+                          });
+
+    // Uplink QoS data frame that triggered BA agreement establishment
+    m_events.emplace_back(WIFI_MAC_QOSDATA);
+    m_events.emplace_back(WIFI_MAC_CTL_BACKRESP,
+                          [=](Ptr<const WifiPsdu> psdu, const WifiTxVector& txVector) {
+                              // check that transition delay is started after reception of BlockAck
+                              checkTransDelay(psdu, txVector, true, "UL QoS Data");
+                          });
+
+    m_eventIt = m_events.cbegin();
+
+    Simulator::Stop(m_duration);
+    Simulator::Run();
+
+    NS_TEST_EXPECT_MSG_EQ((m_eventIt == m_events.cend()), true, "Not all events took place");
+
+    Simulator::Destroy();
+}
+
+EmlsrIcfSentDuringMainPhySwitchTest::EmlsrIcfSentDuringMainPhySwitchTest()
+    : EmlsrOperationsTestBase("Check ICF reception while main PHY is switching")
+{
+    m_mainPhyId = 0;
+    m_linksToEnableEmlsrOn = {0, 1, 2};
+    m_nEmlsrStations = 1;
+    m_nNonEmlsrStations = 0;
+
+    // channel switch delay will be also set to 64 us
+    m_paddingDelay = {MicroSeconds(128)};
+    m_transitionDelay = {MicroSeconds(64)};
+    m_establishBaDl = {0, 3};
+    m_establishBaUl = {0, 3};
+    m_duration = Seconds(0.5);
+}
+
+void
+EmlsrIcfSentDuringMainPhySwitchTest::DoSetup()
+{
+    // channel switch delay will be modified during test scenarios
+    Config::SetDefault("ns3::WifiPhy::ChannelSwitchDelay", TimeValue(MicroSeconds(64)));
+    Config::SetDefault("ns3::WifiPhy::NotifyMacHdrRxEnd", BooleanValue(true));
+    Config::SetDefault("ns3::DefaultEmlsrManager::SwitchAuxPhy", BooleanValue(false));
+    Config::SetDefault("ns3::EmlsrManager::AuxPhyTxCapable", BooleanValue(false));
+    // AP MLD transmits both TID 0 and TID 3 on link 1
+    Config::SetDefault("ns3::EhtConfiguration::TidToLinkMappingDl", StringValue("0,3 1"));
+    // EMLSR client transmits TID 0 on link 1 and TID 3 on link 2
+    Config::SetDefault("ns3::EhtConfiguration::TidToLinkMappingUl",
+                       StringValue("0 1; 3 " + std::to_string(m_linkIdForTid3)));
+
+    EmlsrOperationsTestBase::DoSetup();
+
+    m_staMacs[0]->TraceConnectWithoutContext(
+        "EmlsrLinkSwitch",
+        MakeCallback(&EmlsrIcfSentDuringMainPhySwitchTest::EmlsrLinkSwitchCb, this));
+
+    for (uint8_t i = 0; i < m_staMacs[0]->GetDevice()->GetNPhys(); ++i)
+    {
+        m_bands.at(i) = m_staMacs[0]->GetDevice()->GetPhy(i)->GetBand(MHz_u{20}, 0);
+    }
+}
+
+void
+EmlsrIcfSentDuringMainPhySwitchTest::GenerateNoiseOnAllLinks(Ptr<WifiMac> mac, Time duration)
+{
+    for (const auto linkId : mac->GetLinkIds())
+    {
+        auto phy = DynamicCast<SpectrumWifiPhy>(mac->GetWifiPhy(linkId));
+        NS_TEST_ASSERT_MSG_NE(phy, nullptr, "No PHY on link " << +linkId);
+        const auto txPower = phy->GetPower(1) + phy->GetTxGain();
+
+        auto psd = Create<SpectrumValue>(phy->GetCurrentInterface()->GetRxSpectrumModel());
+        *psd = txPower;
+
+        auto spectrumSignalParams = Create<SpectrumSignalParameters>();
+        spectrumSignalParams->duration = duration;
+        spectrumSignalParams->txPhy = phy->GetCurrentInterface();
+        spectrumSignalParams->txAntenna = phy->GetAntenna();
+        spectrumSignalParams->psd = psd;
+
+        phy->StartRx(spectrumSignalParams, phy->GetCurrentInterface());
+    }
+}
+
+void
+EmlsrIcfSentDuringMainPhySwitchTest::CheckInDeviceInterference(const std::string& frameTypeStr,
+                                                               uint8_t linkId,
+                                                               Time duration)
+{
+    for (const auto& phy : m_staMacs[0]->GetDevice()->GetPhys())
+    {
+        // ignore the PHY that is transmitting
+        if (m_staMacs[0]->GetLinkForPhy(phy) == linkId)
+        {
+            continue;
+        }
+
+        PointerValue ptr;
+        phy->GetAttribute("InterferenceHelper", ptr);
+        auto interferenceHelper = ptr.Get<InterferenceHelper>();
+
+        // we need to check that all the PHY interfaces recorded the in-device interference,
+        // hence we consider a 20 MHz sub-band of the frequency channels of all the links
+        for (uint8_t i = 0; i < m_staMacs[0]->GetNLinks(); ++i)
+        {
+            auto energyDuration =
+                interferenceHelper->GetEnergyDuration(DbmToW(phy->GetCcaEdThreshold()),
+                                                      m_bands.at(i));
+
+            NS_TEST_EXPECT_MSG_EQ(
+                energyDuration,
+                duration,
+                m_testStr << ", " << frameTypeStr << ": Unexpected energy duration for PHY "
+                          << +phy->GetPhyId() << " in the band corresponding to link " << +i);
+        }
+    }
+}
+
+void
+EmlsrIcfSentDuringMainPhySwitchTest::Transmit(Ptr<WifiMac> mac,
+                                              uint8_t phyId,
+                                              WifiConstPsduMap psduMap,
+                                              WifiTxVector txVector,
+                                              double txPowerW)
+{
+    EmlsrOperationsTestBase::Transmit(mac, phyId, psduMap, txVector, txPowerW);
+
+    const auto psdu = psduMap.cbegin()->second;
+    const auto& hdr = psdu->GetHeader(0);
+
+    // nothing to do before setup is completed
+    if (!m_setupDone)
+    {
+        return;
+    }
+
+    auto linkId = mac->GetLinkForPhy(phyId);
+    NS_TEST_ASSERT_MSG_EQ(linkId.has_value(),
+                          true,
+                          "PHY " << +phyId << " is not operating on any link");
+
+    if (!m_events.empty())
+    {
+        // check that the expected frame is being transmitted
+        NS_TEST_EXPECT_MSG_EQ(m_events.front().hdrType,
+                              hdr.GetType(),
+                              "Unexpected MAC header type for frame #" << ++m_processedEvents);
+        // perform actions/checks, if any
+        if (m_events.front().func)
+        {
+            m_events.front().func(psdu, txVector, linkId.value());
+        }
+
+        m_events.pop_front();
+    }
+}
+
+void
+EmlsrIcfSentDuringMainPhySwitchTest::StartTraffic()
+{
+    m_setupDone = true;
+    RunOne();
+}
+
+void
+EmlsrIcfSentDuringMainPhySwitchTest::DoRun()
+{
+    Simulator::Stop(m_duration);
+    Simulator::Run();
+
+    NS_TEST_EXPECT_MSG_EQ(m_events.empty(), true, "Not all events took place");
+
+    Simulator::Destroy();
+}
+
+void
+EmlsrIcfSentDuringMainPhySwitchTest::EmlsrLinkSwitchCb(uint8_t linkId,
+                                                       Ptr<WifiPhy> phy,
+                                                       bool connected)
+{
+    if (!m_setupDone)
+    {
+        return;
+    }
+
+    if (!connected)
+    {
+        const auto mainPhy = m_staMacs[0]->GetDevice()->GetPhy(m_mainPhyId);
+        NS_LOG_DEBUG("Main PHY leaving link " << +linkId << ", switch delay "
+                                              << mainPhy->GetChannelSwitchDelay().As(Time::US)
+                                              << "\n");
+        m_switchFrom = MainPhySwitchInfo{Simulator::Now(), linkId};
+        m_switchTo.reset();
+    }
+    else
+    {
+        NS_LOG_DEBUG((phy->GetPhyId() == m_mainPhyId ? "Main" : "Aux")
+                     << " PHY connected to link " << +linkId << "\n");
+        if (phy->GetPhyId() == m_mainPhyId)
+        {
+            m_switchTo = MainPhySwitchInfo{Simulator::Now(), linkId};
+            m_switchFrom.reset();
+        }
+    }
+}
+
+void
+EmlsrIcfSentDuringMainPhySwitchTest::RunOne()
+{
+    const auto useMacHdrInfo = ((m_testIndex & 0b001) != 0);
+    const auto interruptSwitch = ((m_testIndex & 0b010) != 0);
+    const auto switchToOtherLink = ((m_testIndex & 0b100) != 0);
+
+    const auto keepMainPhyAfterDlTxop = useMacHdrInfo;
+
+    m_staMacs[0]->GetEmlsrManager()->SetAttribute("UseNotifiedMacHdr", BooleanValue(useMacHdrInfo));
+    auto advEmlsrMgr = DynamicCast<AdvancedEmlsrManager>(m_staMacs[0]->GetEmlsrManager());
+    NS_TEST_ASSERT_MSG_NE(advEmlsrMgr, nullptr, "Advanced EMLSR Manager required");
+    advEmlsrMgr->SetAttribute("InterruptSwitch", BooleanValue(interruptSwitch));
+    advEmlsrMgr->SetAttribute("KeepMainPhyAfterDlTxop", BooleanValue(keepMainPhyAfterDlTxop));
+
+    m_testStr = "SwitchToOtherLink=" + std::to_string(switchToOtherLink) +
+                ", InterruptSwitch=" + std::to_string(interruptSwitch) +
+                ", UseMacHdrInfo=" + std::to_string(useMacHdrInfo) +
+                ", KeepMainPhyAfterDlTxop=" + std::to_string(keepMainPhyAfterDlTxop) +
+                ", ChannelSwitchDurationIdx=" + std::to_string(m_csdIndex);
+    NS_LOG_INFO("Starting test: " << m_testStr << "\n");
+
+    // generate noise on all the links of the AP MLD and the EMLSR client, so as to align the EDCA
+    // backoff boundaries
+    Simulator::Schedule(MilliSeconds(3), [=, this]() {
+        GenerateNoiseOnAllLinks(m_apMac, MicroSeconds(500));
+        GenerateNoiseOnAllLinks(m_staMacs[0], MicroSeconds(500));
+    });
+
+    // wait some more time to ensure that backoffs count down to zero and then generate a packet
+    // at the AP MLD and a packet at the EMLSR client. AP MLD and EMLSR client are expected to get
+    // access at the same time because backoff counter is zero and EDCA boundaries are aligned
+    Simulator::Schedule(MilliSeconds(5), [=, this]() {
+        uint8_t prio = (switchToOtherLink ? 3 : 0);
+        m_apMac->GetDevice()->GetNode()->AddApplication(GetApplication(DOWNLINK, 0, 1, 500, prio));
+        m_staMacs[0]->GetDevice()->GetNode()->AddApplication(
+            GetApplication(UPLINK, 0, 1, 500, prio));
+    });
+
+    m_switchFrom.reset();
+    m_switchTo.reset();
+
+    m_events.emplace_back(
+        WIFI_MAC_CTL_TRIGGER,
+        [=, this](Ptr<const WifiPsdu> psdu, const WifiTxVector& txVector, uint8_t linkId) {
+            const auto phyHdrDuration = WifiPhy::CalculatePhyPreambleAndHeaderDuration(txVector);
+            const auto txDuration =
+                WifiPhy::CalculateTxDuration(psdu,
+                                             txVector,
+                                             m_apMac->GetWifiPhy(linkId)->GetPhyBand());
+            auto mainPhy = m_staMacs[0]->GetDevice()->GetPhy(m_mainPhyId);
+
+            // compute channel switch delay based on the scenario to test
+            Time channelSwitchDelay{0};
+            const auto margin = MicroSeconds(2);
+
+            switch (m_csdIndex)
+            {
+            case DURING_PREAMBLE_DETECTION:
+                channelSwitchDelay = MicroSeconds(1);
+                break;
+            case BEFORE_PHY_HDR_END:
+                channelSwitchDelay = phyHdrDuration - margin;
+                break;
+            case BEFORE_MAC_HDR_END:
+                channelSwitchDelay = phyHdrDuration + margin;
+                break;
+            case BEFORE_MAC_PAYLOAD_END:
+                channelSwitchDelay = txDuration - m_paddingDelay.at(0) - margin;
+                break;
+            case BEFORE_PADDING_END:
+                channelSwitchDelay = txDuration - m_paddingDelay.at(0) + margin;
+                break;
+            default:;
+            }
+
+            NS_TEST_ASSERT_MSG_EQ(channelSwitchDelay.IsStrictlyPositive(),
+                                  true,
+                                  m_testStr << ": Channel switch delay is not strictly positive ("
+                                            << channelSwitchDelay.As(Time::US) << ")");
+            NS_TEST_ASSERT_MSG_LT(channelSwitchDelay,
+                                  m_paddingDelay.at(0),
+                                  m_testStr
+                                      << ": Channel switch delay is greater than padding delay");
+            // set channel switch delay
+            mainPhy->SetAttribute("ChannelSwitchDelay", TimeValue(channelSwitchDelay));
+
+            const auto startTx = Simulator::Now();
+
+            // check that main PHY has started switching
+            Simulator::ScheduleNow([=, this]() {
+                NS_TEST_ASSERT_MSG_EQ(m_switchFrom.has_value(),
+                                      true,
+                                      m_testStr << ": Main PHY did not start switching");
+                NS_TEST_EXPECT_MSG_EQ(+m_switchFrom->linkId,
+                                      +m_mainPhyId,
+                                      m_testStr << ": Main PHY did not left the preferred link");
+                NS_TEST_EXPECT_MSG_EQ(m_switchFrom->time,
+                                      startTx,
+                                      m_testStr
+                                          << ": Main PHY did not start switching at ICF TX start");
+            });
+
+            // check what happens after channel switch is completed
+            Simulator::Schedule(channelSwitchDelay + TimeStep(1), [=, this]() {
+                // sanity check that the channel switch delay was computed correctly
+                auto auxPhy = m_staMacs[0]->GetWifiPhy(linkId);
+                auto fem = m_staMacs[0]->GetFrameExchangeManager(linkId);
+                switch (m_csdIndex)
+                {
+                case BEFORE_PADDING_END:
+                    NS_TEST_EXPECT_MSG_GT(
+                        Simulator::Now(),
+                        startTx + txDuration - m_paddingDelay.at(0),
+                        m_testStr << ": Channel switch terminated before padding start");
+                    [[fallthrough]];
+                case BEFORE_MAC_PAYLOAD_END:
+                    if (useMacHdrInfo)
+                    {
+                        NS_TEST_EXPECT_MSG_EQ(fem->GetReceivedMacHdr().has_value(),
+                                              true,
+                                              m_testStr << ": Channel switch terminated before "
+                                                           "MAC header info is received");
+                    }
+                    [[fallthrough]];
+                case BEFORE_MAC_HDR_END:
+                    NS_TEST_EXPECT_MSG_EQ(fem->GetOngoingRxInfo().has_value(),
+                                          true,
+                                          m_testStr << ": Channel switch terminated before "
+                                                       "receiving RXSTART indication");
+                    break;
+                case BEFORE_PHY_HDR_END:
+                    NS_TEST_EXPECT_MSG_EQ(auxPhy->GetInfoIfRxingPhyHeader().has_value(),
+                                          true,
+                                          m_testStr << ": Expected to be receiving the PHY header");
+                    break;
+                case DURING_PREAMBLE_DETECTION:
+                    NS_TEST_EXPECT_MSG_EQ(auxPhy->GetTimeToPreambleDetectionEnd().has_value(),
+                                          true,
+                                          m_testStr
+                                              << ": Expected to be in preamble detection period");
+                default:
+                    NS_ABORT_MSG("Unexpected channel switch duration index");
+                }
+
+                // if the main PHY switched to the same link on which the ICF is being received,
+                // connecting the main PHY to the link is postponed until the end of the ICF, hence
+                // the main PHY is not operating on any link at this time;
+                // if the main PHY switched to another link, it was connected to that link but
+                // the UL TXOP did not start because, at the end of the NAV and CCA busy in the last
+                // PIFS check, it was detected that a frame which could be an ICF was being received
+                // on another link)
+                NS_TEST_EXPECT_MSG_EQ(m_staMacs[0]->GetLinkForPhy(m_mainPhyId).has_value(),
+                                      switchToOtherLink,
+                                      m_testStr
+                                          << ": Main PHY not expected to be connected to a link");
+
+                if (switchToOtherLink)
+                {
+                    NS_TEST_EXPECT_MSG_EQ(
+                        +m_staMacs[0]->GetLinkForPhy(m_mainPhyId).value(),
+                        +m_linkIdForTid3,
+                        m_testStr << ": Main PHY did not left the link on which TID 3 is mapped");
+                }
+            });
+
+            // check what happens when the ICF ends
+            Simulator::Schedule(txDuration + TimeStep(1), [=, this]() {
+                // if the main PHY switched to the same link on which the ICF has been received,
+                // it has now been connected to that link; if the main PHY switched to another
+                // link and there was not enough time for the main PHY to start switching to the
+                // link on which the ICF has been received at the start of the padding, the ICF
+                // has been dropped and the main PHY stayed on the preferred link
+
+                const auto id = m_staMacs[0]->GetLinkForPhy(m_mainPhyId);
+                NS_TEST_EXPECT_MSG_EQ(id.has_value(),
+                                      true,
+                                      m_testStr << ": Main PHY expected to be connected to a link");
+                NS_TEST_EXPECT_MSG_EQ(+id.value(),
+                                      +linkId,
+                                      m_testStr << ": Main PHY connected to an unexpected link");
+
+                NS_TEST_ASSERT_MSG_EQ(m_switchTo.has_value(),
+                                      true,
+                                      m_testStr << ": Main PHY was not connected to a link");
+                NS_TEST_EXPECT_MSG_EQ(+m_switchTo->linkId,
+                                      +linkId,
+                                      m_testStr
+                                          << ": Main PHY was not connected to the expected link");
+                NS_TEST_EXPECT_MSG_EQ(m_switchTo->time,
+                                      Simulator::Now() - TimeStep(1),
+                                      m_testStr << ": Main PHY was not connected at ICF TX end");
+            });
+        });
+
+    m_events.emplace_back(
+        WIFI_MAC_CTL_CTS,
+        [=, this](Ptr<const WifiPsdu> psdu, const WifiTxVector& txVector, uint8_t linkId) {
+            const auto id = m_staMacs[0]->GetLinkForPhy(m_mainPhyId);
+            NS_TEST_EXPECT_MSG_EQ(id.has_value(),
+                                  true,
+                                  m_testStr << ": Main PHY expected to be connected to a link");
+            NS_TEST_EXPECT_MSG_EQ(+id.value(),
+                                  +linkId,
+                                  m_testStr
+                                      << ": Main PHY expected to be connected to same link as ICF");
+            Simulator::ScheduleNow([=, this]() {
+                NS_TEST_EXPECT_MSG_EQ(m_staMacs[0]->GetDevice()->GetPhy(m_mainPhyId)->IsStateTx(),
+                                      true,
+                                      m_testStr << ": Main PHY expected to be transmitting");
+            });
+
+            const auto txDuration =
+                WifiPhy::CalculateTxDuration(psdu,
+                                             txVector,
+                                             m_staMacs[0]->GetWifiPhy(linkId)->GetPhyBand());
+
+            Simulator::ScheduleNow([=, this]() {
+                CheckInDeviceInterference(m_testStr + ", CTS", linkId, txDuration);
+            });
+        });
+
+    m_events.emplace_back(WIFI_MAC_QOSDATA);
+    m_events.emplace_back(
+        WIFI_MAC_CTL_ACK,
+        [=, this](Ptr<const WifiPsdu> psdu, const WifiTxVector& txVector, uint8_t linkId) {
+            const auto txDuration =
+                WifiPhy::CalculateTxDuration(psdu,
+                                             txVector,
+                                             m_staMacs[0]->GetWifiPhy(linkId)->GetPhyBand());
+
+            Simulator::ScheduleNow([=, this]() {
+                CheckInDeviceInterference(m_testStr + ", ACK", linkId, txDuration);
+            });
+            // check the KeepMainPhyAfterDlTxop attribute
+            Simulator::Schedule(txDuration + TimeStep(1), [=, this]() {
+                auto mainPhy = m_staMacs[0]->GetDevice()->GetPhy(m_mainPhyId);
+                auto shouldSwitch = (!keepMainPhyAfterDlTxop || switchToOtherLink);
+                NS_TEST_EXPECT_MSG_EQ(mainPhy->IsStateSwitching(),
+                                      shouldSwitch,
+                                      m_testStr << ": Main PHY should "
+                                                << (shouldSwitch ? "" : "not")
+                                                << " be switching back after DL TXOP end");
+            });
+        });
+
+    // Uplink TXOP
+    m_events.emplace_back(
+        WIFI_MAC_QOSDATA,
+        [=, this](Ptr<const WifiPsdu> psdu, const WifiTxVector& txVector, uint8_t linkId) {
+            const auto txDuration =
+                WifiPhy::CalculateTxDuration(psdu,
+                                             txVector,
+                                             m_staMacs[0]->GetWifiPhy(linkId)->GetPhyBand());
+
+            Simulator::ScheduleNow([=, this]() {
+                CheckInDeviceInterference(m_testStr + ", QoS Data", linkId, txDuration);
+            });
+        });
+
+    m_events.emplace_back(
+        WIFI_MAC_CTL_ACK,
+        [=, this](Ptr<const WifiPsdu> psdu, const WifiTxVector& txVector, uint8_t linkId) {
+            const auto txDuration =
+                WifiPhy::CalculateTxDuration(psdu,
+                                             txVector,
+                                             m_staMacs[0]->GetWifiPhy(linkId)->GetPhyBand());
+            // check that main PHY switches back after UL TXOP
+            Simulator::Schedule(txDuration + TimeStep(1), [=, this]() {
+                auto mainPhy = m_staMacs[0]->GetDevice()->GetPhy(m_mainPhyId);
+                NS_TEST_EXPECT_MSG_EQ(
+                    mainPhy->IsStateSwitching(),
+                    true,
+                    m_testStr << ": Main PHY should be switching back after UL TXOP end");
+            });
+            // Continue with the next test scenario
+            Simulator::Schedule(MilliSeconds(2), [=, this]() {
+                NS_TEST_EXPECT_MSG_EQ(m_events.empty(), true, "Not all events took place");
+                m_csdIndex = static_cast<ChannelSwitchEnd>(static_cast<uint8_t>(m_csdIndex) + 1);
+                if (m_csdIndex == CSD_COUNT)
+                {
+                    ++m_testIndex;
+                    m_csdIndex = BEFORE_PHY_HDR_END;
+                }
+
+                if (m_testIndex < 8)
+                {
+                    RunOne();
+                }
+            });
+        });
+}
+
+EmlsrSwitchMainPhyBackTest::EmlsrSwitchMainPhyBackTest()
+    : EmlsrOperationsTestBase("Check handling of the switch main PHY back timer")
+{
+    m_mainPhyId = 2;
+    m_linksToEnableEmlsrOn = {0, 1, 2};
+    m_nEmlsrStations = 1;
+    m_nNonEmlsrStations = 0;
+
+    // channel switch delay will be also set to 64 us
+    m_paddingDelay = {MicroSeconds(64)};
+    m_transitionDelay = {MicroSeconds(64)};
+    m_establishBaDl = {0};
+    m_establishBaUl = {0, 4};
+    m_duration = Seconds(0.5);
+}
+
+void
+EmlsrSwitchMainPhyBackTest::DoSetup()
+{
+    Config::SetDefault("ns3::WifiPhy::ChannelSwitchDelay", TimeValue(MicroSeconds(64)));
+    Config::SetDefault("ns3::WifiPhy::NotifyMacHdrRxEnd", BooleanValue(true));
+    Config::SetDefault("ns3::DefaultEmlsrManager::SwitchAuxPhy", BooleanValue(false));
+    Config::SetDefault("ns3::EmlsrManager::AuxPhyTxCapable", BooleanValue(false));
+    // Use only link 1 for DL and UL traffic
+    std::string mapping =
+        "0 " + std::to_string(m_linkIdForTid0) + "; 4 " + std::to_string(m_linkIdForTid4);
+    Config::SetDefault("ns3::EhtConfiguration::TidToLinkMappingDl", StringValue(mapping));
+    Config::SetDefault("ns3::EhtConfiguration::TidToLinkMappingUl", StringValue(mapping));
+    Config::SetDefault("ns3::EmlsrManager::AuxPhyMaxModClass", StringValue("HT"));
+    Config::SetDefault("ns3::AdvancedEmlsrManager::UseAuxPhyCca", BooleanValue(true));
+
+    EmlsrOperationsTestBase::DoSetup();
+
+    WifiMacHeader hdr(WIFI_MAC_QOSDATA);
+    hdr.SetAddr1(Mac48Address::GetBroadcast());
+    hdr.SetAddr2(m_apMac->GetFrameExchangeManager(m_linkIdForTid0)->GetAddress());
+    hdr.SetAddr3(m_apMac->GetAddress());
+    hdr.SetDsFrom();
+    hdr.SetDsNotTo();
+    hdr.SetQosTid(0);
+
+    m_bcastFrame = Create<WifiMpdu>(Create<Packet>(1000), hdr);
+}
+
+void
+EmlsrSwitchMainPhyBackTest::Transmit(Ptr<WifiMac> mac,
+                                     uint8_t phyId,
+                                     WifiConstPsduMap psduMap,
+                                     WifiTxVector txVector,
+                                     double txPowerW)
+{
+    EmlsrOperationsTestBase::Transmit(mac, phyId, psduMap, txVector, txPowerW);
+
+    const auto psdu = psduMap.cbegin()->second;
+    const auto& hdr = psdu->GetHeader(0);
+
+    // nothing to do before setup is completed
+    if (!m_setupDone)
+    {
+        return;
+    }
+
+    auto linkId = mac->GetLinkForPhy(phyId);
+    NS_TEST_ASSERT_MSG_EQ(linkId.has_value(),
+                          true,
+                          "PHY " << +phyId << " is not operating on any link");
+
+    if (!m_events.empty())
+    {
+        // check that the expected frame is being transmitted
+        NS_TEST_EXPECT_MSG_EQ(m_events.front().hdrType,
+                              hdr.GetType(),
+                              "Unexpected MAC header type for frame #" << ++m_processedEvents);
+        // perform actions/checks, if any
+        if (m_events.front().func)
+        {
+            m_events.front().func(psdu, txVector, linkId.value());
+        }
+
+        m_events.pop_front();
+    }
+}
+
+void
+EmlsrSwitchMainPhyBackTest::StartTraffic()
+{
+    m_setupDone = true;
+    RunOne();
+}
+
+void
+EmlsrSwitchMainPhyBackTest::DoRun()
+{
+    Simulator::Stop(m_duration);
+    Simulator::Run();
+
+    NS_TEST_EXPECT_MSG_EQ(m_events.empty(), true, "Not all events took place");
+
+    Simulator::Destroy();
+}
+
+void
+EmlsrSwitchMainPhyBackTest::MainPhySwitchInfoCallback(std::size_t index,
+                                                      const EmlsrMainPhySwitchTrace& info)
+{
+    EmlsrOperationsTestBase::MainPhySwitchInfoCallback(index, info);
+
+    if (!m_setupDone)
+    {
+        return;
+    }
+
+    if (!m_dlPktDone && info.GetName() == "UlTxopAuxPhyNotTxCapable")
+    {
+        NS_LOG_INFO("Main PHY starts switching\n");
+        const auto delay =
+            static_cast<TestScenario>(m_testIndex) <= RXSTART_WHILE_SWITCH_INTERRUPT
+                ? Time{0}
+                : MicroSeconds(30); // greater than duration of PHY header of non-HT PPDU
+        Simulator::Schedule(delay,
+                            [=, this]() { m_apMac->GetQosTxop(AC_BE)->Queue(m_bcastFrame); });
+        return;
+    }
+
+    // lambda to generate a frame with TID 4 and to handle the corresponding frames
+    auto genTid4Frame = [=, this]() {
+        m_dlPktDone = true;
+
+        // in 5 microseconds, while still switching, generate a packet with TID 4, which causes a
+        // channel access request on link 0; if switching can be interrupted, the main PHY starts
+        // switching to link 0 as soon as channel access is gained on link 0
+        Simulator::Schedule(MicroSeconds(5), [=, this]() {
+            m_staMacs[0]->GetDevice()->GetNode()->AddApplication(
+                GetApplication(UPLINK, 0, 1, 500, 4));
+            // channel access can be obtained within a slot due to slot alignment
+            Simulator::Schedule(m_apMac->GetWifiPhy(m_linkIdForTid4)->GetSlot(), [=, this]() {
+                auto advEmlsrMgr =
+                    DynamicCast<AdvancedEmlsrManager>(m_staMacs[0]->GetEmlsrManager());
+
+                NS_TEST_EXPECT_MSG_EQ(advEmlsrMgr->m_mainPhySwitchInfo.disconnected,
+                                      true,
+                                      "Expected the main PHY to be switching");
+                NS_TEST_EXPECT_MSG_EQ(
+                    +advEmlsrMgr->m_mainPhySwitchInfo.to,
+                    +(advEmlsrMgr->m_interruptSwitching ? m_linkIdForTid4 : m_mainPhyId),
+                    "Main PHY is switching to wrong link");
+            });
+        });
+        InsertEventsForQosTid4();
+    };
+
+    if (m_expectedMainPhySwitchBackTime == Simulator::Now() &&
+        info.GetName() == "TxopNotGainedOnAuxPhyLink")
+    {
+        NS_LOG_INFO("Main PHY switches back\n");
+
+        const auto& traceInfo = static_cast<const EmlsrSwitchMainPhyBackTrace&>(info);
+
+        switch (static_cast<TestScenario>(m_testIndex))
+        {
+        case RXSTART_WHILE_SWITCH_NO_INTERRUPT:
+        case RXSTART_WHILE_SWITCH_INTERRUPT:
+            NS_TEST_EXPECT_MSG_EQ((traceInfo.elapsed.IsStrictlyPositive() &&
+                                   traceInfo.elapsed < m_switchMainPhyBackDelay),
+                                  true,
+                                  "Unexpected value for the elapsed field");
+            NS_TEST_EXPECT_MSG_EQ(traceInfo.earlySwitchReason.has_value(),
+                                  true,
+                                  "earlySwitchReason should hold a value");
+            NS_TEST_EXPECT_MSG_EQ(traceInfo.earlySwitchReason.value(),
+                                  WifiExpectedAccessReason::RX_END,
+                                  "Unexpected earlySwitchReason value");
+            NS_TEST_EXPECT_MSG_EQ(traceInfo.isSwitching, true, "Unexpected value for isSwitching");
+            break;
+
+        case RXSTART_AFTER_SWITCH_HT_PPDU:
+            NS_TEST_EXPECT_MSG_EQ((traceInfo.elapsed.IsStrictlyPositive() &&
+                                   traceInfo.elapsed < m_switchMainPhyBackDelay),
+                                  true,
+                                  "Unexpected value for the elapsed field");
+            NS_TEST_EXPECT_MSG_EQ(traceInfo.earlySwitchReason.has_value(),
+                                  true,
+                                  "earlySwitchReason should hold a value");
+            NS_TEST_EXPECT_MSG_EQ(traceInfo.earlySwitchReason.value(),
+                                  WifiExpectedAccessReason::BUSY_END,
+                                  "Unexpected earlySwitchReason value");
+            NS_TEST_EXPECT_MSG_EQ(traceInfo.isSwitching, false, "Unexpected value for isSwitching");
+            break;
+
+        case NON_HT_PPDU_USE_MAC_HDR:
+            NS_TEST_EXPECT_MSG_EQ((traceInfo.elapsed.IsStrictlyPositive() &&
+                                   traceInfo.elapsed < m_switchMainPhyBackDelay),
+                                  true,
+                                  "Unexpected value for the elapsed field");
+            NS_TEST_EXPECT_MSG_EQ(traceInfo.earlySwitchReason.has_value(),
+                                  true,
+                                  "earlySwitchReason should hold a value");
+            NS_TEST_EXPECT_MSG_EQ(traceInfo.earlySwitchReason.value(),
+                                  WifiExpectedAccessReason::RX_END,
+                                  "Unexpected earlySwitchReason value");
+            NS_TEST_EXPECT_MSG_EQ(traceInfo.isSwitching, false, "Unexpected value for isSwitching");
+            break;
+
+        case LONG_SWITCH_BACK_DELAY_DONT_USE_MAC_HDR:
+            NS_TEST_EXPECT_MSG_EQ((traceInfo.elapsed.IsStrictlyPositive() &&
+                                   traceInfo.elapsed >= m_switchMainPhyBackDelay),
+                                  true,
+                                  "Unexpected value for the elapsed field");
+            NS_TEST_EXPECT_MSG_EQ(traceInfo.earlySwitchReason.has_value(),
+                                  true,
+                                  "earlySwitchReason should hold a value");
+            NS_TEST_EXPECT_MSG_EQ(traceInfo.earlySwitchReason.value(),
+                                  WifiExpectedAccessReason::BACKOFF_END,
+                                  "Unexpected earlySwitchReason value");
+            NS_TEST_EXPECT_MSG_EQ(traceInfo.isSwitching, false, "Unexpected value for isSwitching");
+            break;
+
+        case LONG_SWITCH_BACK_DELAY_USE_MAC_HDR:
+            NS_TEST_EXPECT_MSG_EQ((traceInfo.elapsed.IsStrictlyPositive() &&
+                                   traceInfo.elapsed < m_switchMainPhyBackDelay),
+                                  true,
+                                  "Unexpected value for the elapsed field");
+            NS_TEST_EXPECT_MSG_EQ(traceInfo.earlySwitchReason.has_value(),
+                                  true,
+                                  "earlySwitchReason should hold a value");
+            NS_TEST_EXPECT_MSG_EQ(traceInfo.earlySwitchReason.value(),
+                                  WifiExpectedAccessReason::BACKOFF_END,
+                                  "Unexpected earlySwitchReason value");
+            NS_TEST_EXPECT_MSG_EQ(traceInfo.isSwitching, false, "Unexpected value for isSwitching");
+            break;
+
+        default:
+            NS_TEST_ASSERT_MSG_EQ(true, false, "Unexpected scenario: " << +m_testIndex);
+        }
+
+        genTid4Frame();
+    }
+
+    if (m_expectedMainPhySwitchBackTime == Simulator::Now() && info.GetName() == "TxopEnded")
+    {
+        NS_LOG_INFO("Main PHY switches back\n");
+
+        NS_TEST_EXPECT_MSG_EQ(+m_testIndex,
+                              +static_cast<uint8_t>(NON_HT_PPDU_DONT_USE_MAC_HDR),
+                              "Unexpected TxopEnded reason for switching main PHY back");
+
+        genTid4Frame();
+    }
+}
+
+void
+EmlsrSwitchMainPhyBackTest::InsertEventsForQosTid4()
+{
+    const auto testIndex = static_cast<TestScenario>(m_testIndex);
+    std::list<Events> events;
+
+    events.emplace_back(
+        WIFI_MAC_QOSDATA,
+        [=, this](Ptr<const WifiPsdu> psdu, const WifiTxVector& txVector, uint8_t linkId) {
+            NS_TEST_EXPECT_MSG_EQ(+linkId,
+                                  +m_linkIdForTid4,
+                                  "Unicast frame with TID 4 transmitted on wrong link");
+            NS_TEST_EXPECT_MSG_EQ(psdu->GetAddr1(),
+                                  m_apMac->GetFrameExchangeManager(linkId)->GetAddress(),
+                                  "Unexpected RA for the unicast frame with TID 4");
+            NS_TEST_EXPECT_MSG_EQ(psdu->GetAddr2(),
+                                  m_staMacs[0]->GetFrameExchangeManager(linkId)->GetAddress(),
+                                  "Unexpected TA for the unicast frame with TID 4");
+            NS_TEST_EXPECT_MSG_EQ(+(*psdu->GetTids().cbegin()),
+                                  4,
+                                  "Expected a unicast frame with TID 4");
+            // if switching can be interrupted, the frame with TID 4 is transmitted as soon as
+            // the main PHY completes the switching to link 0
+            if (auto advEmlsrMgr =
+                    DynamicCast<AdvancedEmlsrManager>(m_staMacs[0]->GetEmlsrManager());
+                advEmlsrMgr->m_interruptSwitching)
+            {
+                auto mainPhy = m_staMacs[0]->GetDevice()->GetPhy(m_mainPhyId);
+                NS_TEST_EXPECT_MSG_EQ(advEmlsrMgr->m_mainPhySwitchInfo.start +
+                                          mainPhy->GetChannelSwitchDelay(),
+                                      Simulator::Now(),
+                                      "Expected TX to start at main PHY switch end");
+            }
+        });
+
+    events.emplace_back(WIFI_MAC_CTL_ACK);
+
+    events.emplace_back(
+        WIFI_MAC_CTL_END,
+        [=, this](Ptr<const WifiPsdu> psdu, const WifiTxVector& txVector, uint8_t linkId) {
+            if (testIndex == NON_HT_PPDU_DONT_USE_MAC_HDR)
+            {
+                Simulator::Schedule(MilliSeconds(2), [=, this]() {
+                    // check that trace infos have been received
+                    NS_TEST_EXPECT_MSG_EQ(m_dlPktDone,
+                                          true,
+                                          "Did not receive the expected trace infos");
+                    NS_TEST_EXPECT_MSG_EQ(m_events.empty(), true, "Not all events took place");
+
+                    if (++m_testIndex < static_cast<uint8_t>(COUNT))
+                    {
+                        RunOne();
+                    }
+                });
+            }
+        });
+
+    // In the NON_HT_PPDU_DONT_USE_MAC_HDR scenario, the main PHY does not switch back to the
+    // preferred link after the transmission of the broadcast frame, so the QoS data frame with
+    // TID 0 is transmitted (on link 1) before the QoS data frame with TID 4 (on link 0)
+    const auto pos =
+        (testIndex == NON_HT_PPDU_DONT_USE_MAC_HDR ? m_events.cend() : m_events.cbegin());
+    m_events.splice(pos, events);
+}
+
+void
+EmlsrSwitchMainPhyBackTest::RunOne()
+{
+    const auto testIndex = static_cast<TestScenario>(m_testIndex);
+
+    const auto bcastTxVector =
+        m_apMac->GetWifiRemoteStationManager(m_linkIdForTid0)
+            ->GetGroupcastTxVector(m_bcastFrame->GetHeader(),
+                                   m_apMac->GetWifiPhy(m_linkIdForTid0)->GetChannelWidth());
+    const auto bcastTxDuration =
+        WifiPhy::CalculateTxDuration(m_bcastFrame->GetSize(),
+                                     bcastTxVector,
+                                     m_apMac->GetWifiPhy(m_linkIdForTid0)->GetPhyBand());
+
+    const auto mode = (testIndex >= NON_HT_PPDU_DONT_USE_MAC_HDR ? OfdmPhy::GetOfdmRate6Mbps()
+                                                                 : HtPhy::GetHtMcs0());
+
+    m_switchMainPhyBackDelay = bcastTxDuration;
+    if (testIndex != LONG_SWITCH_BACK_DELAY_DONT_USE_MAC_HDR &&
+        testIndex != LONG_SWITCH_BACK_DELAY_USE_MAC_HDR)
+    {
+        // make switch main PHY back delay at least two channel switch delays shorter than the
+        // PPDU TX duration
+        m_switchMainPhyBackDelay -= MicroSeconds(250);
+    }
+
+    const auto interruptSwitch =
+        (testIndex == RXSTART_WHILE_SWITCH_INTERRUPT || testIndex == NON_HT_PPDU_DONT_USE_MAC_HDR ||
+         testIndex == LONG_SWITCH_BACK_DELAY_USE_MAC_HDR);
+    const auto useMacHeader =
+        (testIndex == NON_HT_PPDU_USE_MAC_HDR || testIndex == LONG_SWITCH_BACK_DELAY_USE_MAC_HDR);
+
+    m_apMac->GetWifiRemoteStationManager(m_linkIdForTid0)
+        ->SetAttribute("NonUnicastMode", WifiModeValue(mode));
+    m_staMacs[0]->GetEmlsrManager()->SetAttribute("SwitchMainPhyBackDelay",
+                                                  TimeValue(m_switchMainPhyBackDelay));
+    m_staMacs[0]->GetEmlsrManager()->SetAttribute("InterruptSwitch", BooleanValue(interruptSwitch));
+    m_staMacs[0]->GetEmlsrManager()->SetAttribute("UseNotifiedMacHdr", BooleanValue(useMacHeader));
+    m_staMacs[0]->GetEmlsrManager()->SetAttribute("CheckAccessOnMainPhyLink", BooleanValue(false));
+    // no in-device interference, just to avoid starting MSD timer causing RTS-CTS exchanges
+    m_staMacs[0]->GetEmlsrManager()->SetAttribute("InDeviceInterference", BooleanValue(false));
+
+    NS_LOG_INFO("Starting test #" << +m_testIndex << "\n");
+    m_dlPktDone = false;
+
+    // wait some more time to ensure that backoffs count down to zero and then generate a packet
+    // at the EMLSR client. When notified of the main PHY switch, we decide when the AP MLD has to
+    // transmit a broadcast frame
+    Simulator::Schedule(MilliSeconds(5), [=, this]() {
+        m_staMacs[0]->GetDevice()->GetNode()->AddApplication(GetApplication(UPLINK, 0, 1, 500));
+    });
+
+    auto mainPhy = m_staMacs[0]->GetDevice()->GetPhy(m_mainPhyId);
+    auto advEmlsrMgr = DynamicCast<AdvancedEmlsrManager>(m_staMacs[0]->GetEmlsrManager());
+
+    m_events.emplace_back(
+        WIFI_MAC_QOSDATA,
+        [=, this](Ptr<const WifiPsdu> psdu, const WifiTxVector& txVector, uint8_t linkId) {
+            const auto phyHdrDuration = WifiPhy::CalculatePhyPreambleAndHeaderDuration(txVector);
+            const auto txDuration =
+                WifiPhy::CalculateTxDuration(psdu,
+                                             txVector,
+                                             m_apMac->GetWifiPhy(linkId)->GetPhyBand());
+            NS_TEST_EXPECT_MSG_EQ(psdu->GetAddr1(),
+                                  Mac48Address::GetBroadcast(),
+                                  "Expected a broadcast frame");
+            NS_TEST_EXPECT_MSG_EQ(+linkId,
+                                  +m_linkIdForTid0,
+                                  "Broadcast frame transmitted on wrong link");
+            NS_TEST_EXPECT_MSG_EQ(psdu->GetAddr2(),
+                                  m_apMac->GetFrameExchangeManager(linkId)->GetAddress(),
+                                  "Unexpected TA for the broadcast frame");
+            NS_TEST_EXPECT_MSG_EQ(txVector.GetMode(), mode, "Unexpected WifiMode");
+
+            switch (testIndex)
+            {
+            case RXSTART_WHILE_SWITCH_NO_INTERRUPT:
+                // main PHY is switching before the end of PHY header reception and
+                // the switch main PHY back timer is running
+                Simulator::Schedule(phyHdrDuration - TimeStep(1), [=, this]() {
+                    NS_TEST_EXPECT_MSG_EQ(
+                        mainPhy->GetState()->GetLastTime({WifiPhyState::SWITCHING}),
+                        Simulator::Now(),
+                        "Main PHY is not switching at the end of PHY header reception");
+                    NS_TEST_EXPECT_MSG_EQ(+advEmlsrMgr->m_mainPhySwitchInfo.to,
+                                          +m_linkIdForTid0,
+                                          "Main PHY is switching to a wrong link");
+                    NS_TEST_EXPECT_MSG_EQ(advEmlsrMgr->m_switchMainPhyBackEvent.IsPending(),
+                                          true,
+                                          "Main PHY switch back timer should be running");
+                });
+                // main PHY is still switching right after the end of PHY header reception, but
+                // the switch main PHY back timer has been stopped
+                Simulator::Schedule(phyHdrDuration + TimeStep(2), [=, this]() {
+                    NS_TEST_EXPECT_MSG_EQ(
+                        mainPhy->GetState()->GetLastTime({WifiPhyState::SWITCHING}),
+                        Simulator::Now(),
+                        "Main PHY is not switching at the end of PHY header reception");
+                    NS_TEST_EXPECT_MSG_EQ(+advEmlsrMgr->m_mainPhySwitchInfo.to,
+                                          +m_linkIdForTid0,
+                                          "Main PHY is switching to a wrong link");
+                    NS_TEST_EXPECT_MSG_EQ(advEmlsrMgr->m_switchMainPhyBackEvent.IsPending(),
+                                          false,
+                                          "Main PHY switch back timer should have been stopped");
+                });
+                // main PHY is expected to switch back when the ongoing switch terminates
+                m_expectedMainPhySwitchBackTime = Simulator::Now() + mainPhy->GetDelayUntilIdle();
+                break;
+
+            case RXSTART_WHILE_SWITCH_INTERRUPT:
+                // main PHY is switching before the end of PHY header reception and
+                // the switch main PHY back timer is running
+                Simulator::Schedule(phyHdrDuration - TimeStep(1), [=, this]() {
+                    NS_TEST_EXPECT_MSG_EQ(
+                        mainPhy->GetState()->GetLastTime({WifiPhyState::SWITCHING}),
+                        Simulator::Now(),
+                        "Main PHY is not switching at the end of PHY header reception");
+                    NS_TEST_EXPECT_MSG_EQ(+advEmlsrMgr->m_mainPhySwitchInfo.to,
+                                          +m_linkIdForTid0,
+                                          "Main PHY is switching to a wrong link");
+                    NS_TEST_EXPECT_MSG_EQ(advEmlsrMgr->m_switchMainPhyBackEvent.IsPending(),
+                                          true,
+                                          "Main PHY switch back timer should be running");
+                });
+                // main PHY is switching back right after the end of PHY header reception, but
+                // the switch main PHY back timer has been stopped
+                Simulator::Schedule(phyHdrDuration + TimeStep(2), [=, this]() {
+                    NS_TEST_EXPECT_MSG_EQ(
+                        mainPhy->GetState()->GetLastTime({WifiPhyState::SWITCHING}),
+                        Simulator::Now(),
+                        "Main PHY is not switching at the end of PHY header reception");
+                    NS_TEST_EXPECT_MSG_EQ(+advEmlsrMgr->m_mainPhySwitchInfo.to,
+                                          +m_mainPhyId,
+                                          "Main PHY is switching to a wrong link");
+                    NS_TEST_EXPECT_MSG_EQ(advEmlsrMgr->m_switchMainPhyBackEvent.IsPending(),
+                                          false,
+                                          "Main PHY switch back timer should have been stopped");
+                });
+                // main PHY is expected to switch back when the reception of PHY header ends
+                m_expectedMainPhySwitchBackTime = Simulator::Now() + phyHdrDuration + TimeStep(1);
+                break;
+
+            case RXSTART_AFTER_SWITCH_HT_PPDU:
+                // main PHY is switching back at the end of PHY header reception and
+                // the switch main PHY back timer has been stopped
+                Simulator::Schedule(phyHdrDuration, [=, this]() {
+                    NS_TEST_EXPECT_MSG_EQ(
+                        mainPhy->GetState()->GetLastTime({WifiPhyState::SWITCHING}),
+                        Simulator::Now(),
+                        "Main PHY is not switching at the end of PHY header reception");
+                    NS_TEST_EXPECT_MSG_EQ(+advEmlsrMgr->m_mainPhySwitchInfo.to,
+                                          +m_mainPhyId,
+                                          "Main PHY is switching to a wrong link");
+                    NS_TEST_EXPECT_MSG_EQ(advEmlsrMgr->m_switchMainPhyBackEvent.IsPending(),
+                                          false,
+                                          "Main PHY switch back timer should have been stopped");
+                });
+                // main PHY is expected to switch back when the reception of PHY header ends
+                m_expectedMainPhySwitchBackTime =
+                    Simulator::Now() + mainPhy->GetDelayUntilIdle() + TimeStep(1);
+                break;
+
+            case NON_HT_PPDU_DONT_USE_MAC_HDR:
+                // when the main PHY completes the channel switch, it is not connected to the aux
+                // PHY link and the switch main PHY back timer is running
+                Simulator::Schedule(mainPhy->GetDelayUntilIdle() + TimeStep(1), [=, this]() {
+                    NS_TEST_EXPECT_MSG_EQ(advEmlsrMgr->m_mainPhySwitchInfo.disconnected,
+                                          true,
+                                          "Main PHY should be waiting to be connected to a link");
+                    NS_TEST_EXPECT_MSG_EQ(+advEmlsrMgr->m_mainPhySwitchInfo.to,
+                                          +m_linkIdForTid0,
+                                          "Main PHY is waiting to be connected to a wrong link");
+                    NS_TEST_EXPECT_MSG_EQ(advEmlsrMgr->m_switchMainPhyBackEvent.IsPending(),
+                                          true,
+                                          "Main PHY switch back timer should be running");
+                    // when PIFS check is performed at the end of the main PHY switch, the medium
+                    // is found busy and a backoff value is generated; make sure that this value is
+                    // at most 2 to ensure the conditions expected by this scenario
+                    if (auto beTxop = m_staMacs[0]->GetQosTxop(AC_BE);
+                        beTxop->GetBackoffSlots(m_linkIdForTid0) > 2)
+                    {
+                        beTxop->StartBackoffNow(2, m_linkIdForTid0);
+                        m_staMacs[0]
+                            ->GetChannelAccessManager(m_linkIdForTid0)
+                            ->NotifyAckTimeoutResetNow(); // force restart access timeout
+                    }
+                });
+                // once the PPDU is received, the main PHY is connected to the aux PHY and the
+                // switch main PHY back timer is still running
+                Simulator::Schedule(txDuration + TimeStep(1), [=, this]() {
+                    NS_TEST_EXPECT_MSG_EQ(
+                        mainPhy->GetState()->IsStateSwitching(),
+                        false,
+                        "Main PHY should not be switching at the end of PPDU reception");
+                    NS_TEST_EXPECT_MSG_EQ(advEmlsrMgr->m_mainPhySwitchInfo.disconnected,
+                                          false,
+                                          "Main PHY should have been connected to a link");
+                    NS_TEST_ASSERT_MSG_EQ(m_staMacs[0]->GetLinkForPhy(m_mainPhyId).has_value(),
+                                          true,
+                                          "Main PHY should have been connected to a link");
+                    NS_TEST_EXPECT_MSG_EQ(+m_staMacs[0]->GetLinkForPhy(m_mainPhyId).value(),
+                                          +m_linkIdForTid0,
+                                          "Main PHY is connected to a wrong link");
+                    NS_TEST_EXPECT_MSG_EQ(advEmlsrMgr->m_switchMainPhyBackEvent.IsPending(),
+                                          true,
+                                          "Main PHY switch back timer should be running");
+                });
+                break;
+
+            case NON_HT_PPDU_USE_MAC_HDR:
+            case LONG_SWITCH_BACK_DELAY_USE_MAC_HDR:
+                // when the main PHY completes the channel switch, it is not connected to the aux
+                // PHY link and the switch main PHY back timer is running. The aux PHY is in RX
+                // state and has MAC header info available
+                Simulator::Schedule(mainPhy->GetDelayUntilIdle() + TimeStep(1), [=, this]() {
+                    NS_TEST_EXPECT_MSG_EQ(advEmlsrMgr->m_mainPhySwitchInfo.disconnected,
+                                          true,
+                                          "Main PHY should be waiting to be connected to a link");
+                    NS_TEST_EXPECT_MSG_EQ(+advEmlsrMgr->m_mainPhySwitchInfo.to,
+                                          +m_linkIdForTid0,
+                                          "Main PHY is waiting to be connected to a wrong link");
+                    NS_TEST_EXPECT_MSG_EQ(advEmlsrMgr->m_switchMainPhyBackEvent.IsPending(),
+                                          true,
+                                          "Main PHY switch back timer should be running");
+                    const auto auxPhy = m_staMacs[0]->GetDevice()->GetPhy(m_linkIdForTid0);
+                    NS_TEST_EXPECT_MSG_EQ(auxPhy->IsStateRx(),
+                                          true,
+                                          "Aux PHY should be in RX state");
+                    auto remTime = auxPhy->GetTimeToMacHdrEnd(SU_STA_ID);
+                    NS_TEST_ASSERT_MSG_EQ(remTime.has_value(),
+                                          true,
+                                          "No MAC header info available");
+                    if (testIndex == LONG_SWITCH_BACK_DELAY_USE_MAC_HDR)
+                    {
+                        // when PIFS check is performed at the end of the main PHY switch, the
+                        // medium is found busy and a backoff value is generated; make sure that
+                        // this value is at least 7 to ensure that the backoff timer is still
+                        // running when the switch main PHY back timer is expected to expire
+                        if (auto beTxop = m_staMacs[0]->GetQosTxop(AC_BE);
+                            beTxop->GetBackoffSlots(m_linkIdForTid0) <= 6)
+                        {
+                            beTxop->StartBackoffNow(7, m_linkIdForTid0);
+                        }
+                    }
+                    // main PHY is expected to switch back when the MAC header is received
+                    m_expectedMainPhySwitchBackTime = Simulator::Now() + remTime.value();
+                    // once the MAC header is received, the main PHY switches back and the
+                    // switch main PHY back timer is stopped
+                    Simulator::Schedule(remTime.value() + TimeStep(1), [=, this]() {
+                        NS_TEST_EXPECT_MSG_EQ(
+                            mainPhy->GetState()->IsStateSwitching(),
+                            true,
+                            "Main PHY should be switching after receiving the MAC header");
+                        NS_TEST_EXPECT_MSG_EQ(+advEmlsrMgr->m_mainPhySwitchInfo.to,
+                                              +m_mainPhyId,
+                                              "Main PHY should be switching to the preferred link");
+                        NS_TEST_EXPECT_MSG_EQ(advEmlsrMgr->m_switchMainPhyBackEvent.IsPending(),
+                                              false,
+                                              "Main PHY switch back timer should not be running");
+                    });
+                });
+                break;
+
+            case LONG_SWITCH_BACK_DELAY_DONT_USE_MAC_HDR:
+                // when the main PHY completes the channel switch, it is not connected to the aux
+                // PHY link and the switch main PHY back timer is running
+                Simulator::Schedule(mainPhy->GetDelayUntilIdle() + TimeStep(1), [=, this]() {
+                    NS_TEST_EXPECT_MSG_EQ(advEmlsrMgr->m_mainPhySwitchInfo.disconnected,
+                                          true,
+                                          "Main PHY should be waiting to be connected to a link");
+                    NS_TEST_EXPECT_MSG_EQ(+advEmlsrMgr->m_mainPhySwitchInfo.to,
+                                          +m_linkIdForTid0,
+                                          "Main PHY is waiting to be connected to a wrong link");
+                    NS_TEST_EXPECT_MSG_EQ(advEmlsrMgr->m_switchMainPhyBackEvent.IsPending(),
+                                          true,
+                                          "Main PHY switch back timer should be running");
+                    // when PIFS check is performed at the end of the main PHY switch, the medium
+                    // is found busy and a backoff value is generated; make sure that this value is
+                    // at least 7 to ensure that the backoff timer is still running when the switch
+                    // main PHY back timer is expected to expire
+                    if (auto beTxop = m_staMacs[0]->GetQosTxop(AC_BE);
+                        beTxop->GetBackoffSlots(m_linkIdForTid0) <= 6)
+                    {
+                        beTxop->StartBackoffNow(7, m_linkIdForTid0);
+                    }
+                });
+                // once the PPDU is received, the switch main PHY back timer is stopped and the
+                // main PHY switches back to the preferred link
+                Simulator::Schedule(txDuration + TimeStep(2), [=, this]() {
+                    NS_TEST_EXPECT_MSG_EQ(
+                        mainPhy->GetState()->IsStateSwitching(),
+                        true,
+                        "Main PHY should be switching at the end of PPDU reception");
+                    NS_TEST_EXPECT_MSG_EQ(+advEmlsrMgr->m_mainPhySwitchInfo.to,
+                                          +m_mainPhyId,
+                                          "Main PHY should be switching back to preferred link");
+                    NS_TEST_EXPECT_MSG_EQ(advEmlsrMgr->m_switchMainPhyBackEvent.IsPending(),
+                                          false,
+                                          "Main PHY switch back timer should be not running");
+                });
+                // main PHY is expected to switch back when the reception of PPDU ends
+                m_expectedMainPhySwitchBackTime = Simulator::Now() + txDuration + TimeStep(1);
+                break;
+
+            default:
+                NS_TEST_ASSERT_MSG_EQ(true, false, "Unexpected scenario: " << +m_testIndex);
+            }
+        });
+
+    m_events.emplace_back(
+        WIFI_MAC_QOSDATA,
+        [=, this](Ptr<const WifiPsdu> psdu, const WifiTxVector& txVector, uint8_t linkId) {
+            NS_TEST_EXPECT_MSG_EQ(+linkId,
+                                  +m_linkIdForTid0,
+                                  "Unicast frame transmitted on wrong link");
+            NS_TEST_EXPECT_MSG_EQ(psdu->GetAddr1(),
+                                  m_apMac->GetFrameExchangeManager(linkId)->GetAddress(),
+                                  "Unexpected RA for the unicast frame");
+            NS_TEST_EXPECT_MSG_EQ(psdu->GetAddr2(),
+                                  m_staMacs[0]->GetFrameExchangeManager(linkId)->GetAddress(),
+                                  "Unexpected TA for the unicast frame");
+
+            if (testIndex == NON_HT_PPDU_DONT_USE_MAC_HDR)
+            {
+                Simulator::Schedule(TimeStep(1), [=, this]() {
+                    // UL TXOP started, main PHY switch back time was cancelled
+                    NS_TEST_EXPECT_MSG_EQ(advEmlsrMgr->m_switchMainPhyBackEvent.IsPending(),
+                                          false,
+                                          "Main PHY switch back timer should not be running");
+                });
+            }
+        });
+
+    m_events.emplace_back(
+        WIFI_MAC_CTL_ACK,
+        [=, this](Ptr<const WifiPsdu> psdu, const WifiTxVector& txVector, uint8_t linkId) {
+            const auto phyHdrDuration = WifiPhy::CalculatePhyPreambleAndHeaderDuration(txVector);
+            const auto txDuration =
+                WifiPhy::CalculateTxDuration(psdu,
+                                             txVector,
+                                             m_apMac->GetWifiPhy(linkId)->GetPhyBand());
+
+            if (testIndex == NON_HT_PPDU_DONT_USE_MAC_HDR)
+            {
+                // main PHY is expected to switch back when the UL TXOP ends
+                m_expectedMainPhySwitchBackTime = Simulator::Now() + txDuration;
+            }
+            else
+            {
+                Simulator::Schedule(MilliSeconds(2), [=, this]() {
+                    // check that trace infos have been received
+                    NS_TEST_EXPECT_MSG_EQ(m_dlPktDone,
+                                          true,
+                                          "Did not receive the expected trace infos");
+                    NS_TEST_EXPECT_MSG_EQ(m_events.empty(), true, "Not all events took place");
+
+                    if (++m_testIndex < static_cast<uint8_t>(COUNT))
+                    {
+                        RunOne();
+                    }
+                });
+            }
+        });
+}
+
+EmlsrCheckNavAndCcaLastPifsTest::EmlsrCheckNavAndCcaLastPifsTest()
+    : EmlsrOperationsTestBase("Verify operations during the NAV and CCA check in the last PIFS")
+{
+    m_mainPhyId = 1;
+    m_linksToEnableEmlsrOn = {0, 1, 2};
+    m_nEmlsrStations = 1;
+    m_nNonEmlsrStations = 0;
+
+    m_paddingDelay = {MicroSeconds(64)};
+    m_transitionDelay = {MicroSeconds(64)};
+    m_establishBaDl = {};
+    m_establishBaUl = {0};
+    m_duration = Seconds(0.5);
+}
+
+void
+EmlsrCheckNavAndCcaLastPifsTest::DoSetup()
+{
+    Config::SetDefault("ns3::EmlsrManager::AuxPhyTxCapable", BooleanValue(false));
+    Config::SetDefault("ns3::DefaultEmlsrManager::SwitchAuxPhy", BooleanValue(false));
+    Config::SetDefault("ns3::ChannelAccessManager::NSlotsLeft", UintegerValue(m_nSlotsLeft));
+    // Use only one link for DL and UL traffic
+    std::string mapping = "0 " + std::to_string(m_linkIdForTid0);
+    Config::SetDefault("ns3::EhtConfiguration::TidToLinkMappingDl", StringValue(mapping));
+    Config::SetDefault("ns3::EhtConfiguration::TidToLinkMappingUl", StringValue(mapping));
+    Config::SetDefault("ns3::AdvancedEmlsrManager::UseAuxPhyCca", BooleanValue(true));
+    Config::SetDefault("ns3::EmlsrManager::AuxPhyChannelWidth", UintegerValue(20));
+
+    // use 40 MHz channels
+    m_channelsStr = {"{3, 40, BAND_2_4GHZ, 0}"s,
+                     "{38, 40, BAND_5GHZ, 0}"s,
+                     "{3, 40, BAND_6GHZ, 0}"s};
+
+    EmlsrOperationsTestBase::DoSetup();
+}
+
+void
+EmlsrCheckNavAndCcaLastPifsTest::Transmit(Ptr<WifiMac> mac,
+                                          uint8_t phyId,
+                                          WifiConstPsduMap psduMap,
+                                          WifiTxVector txVector,
+                                          double txPowerW)
+{
+    EmlsrOperationsTestBase::Transmit(mac, phyId, psduMap, txVector, txPowerW);
+
+    const auto psdu = psduMap.cbegin()->second;
+    const auto& hdr = psdu->GetHeader(0);
+
+    // nothing to do before setup is completed
+    if (!m_setupDone)
+    {
+        return;
+    }
+
+    auto linkId = mac->GetLinkForPhy(phyId);
+    NS_TEST_ASSERT_MSG_EQ(linkId.has_value(),
+                          true,
+                          "PHY " << +phyId << " is not operating on any link");
+
+    if (!m_events.empty())
+    {
+        // check that the expected frame is being transmitted
+        NS_TEST_EXPECT_MSG_EQ(m_events.front().hdrType,
+                              hdr.GetType(),
+                              "Unexpected MAC header type for frame #" << ++m_processedEvents);
+        // perform actions/checks, if any
+        if (m_events.front().func)
+        {
+            m_events.front().func(psdu, txVector, linkId.value());
+        }
+
+        m_events.pop_front();
+    }
+}
+
+void
+EmlsrCheckNavAndCcaLastPifsTest::StartTraffic()
+{
+    Simulator::Schedule(MilliSeconds(5), [=, this]() {
+        m_setupDone = true;
+        RunOne();
+    });
+}
+
+void
+EmlsrCheckNavAndCcaLastPifsTest::DoRun()
+{
+    Simulator::Stop(m_duration);
+    Simulator::Run();
+
+    NS_TEST_EXPECT_MSG_EQ(m_events.empty(), true, "Not all events took place");
+
+    Simulator::Destroy();
+}
+
+void
+EmlsrCheckNavAndCcaLastPifsTest::RunOne()
+{
+    const auto useAuxPhyCca = ((m_testIndex & 0x1) == 1);
+    const auto scenario = static_cast<TestScenario>(m_testIndex >> 1);
+
+    // aux PHY operating on the link on which TID 0 is mapped
+    const auto auxPhy = m_staMacs[0]->GetDevice()->GetPhy(m_linkIdForTid0);
+    const auto mainPhy = m_staMacs[0]->GetDevice()->GetPhy(m_mainPhyId);
+    const auto slot = auxPhy->GetSlot();
+    const auto pifs = auxPhy->GetSifs() + slot;
+    const auto timeToBackoffEnd = slot * m_nSlotsLeft;
+    NS_TEST_ASSERT_MSG_GT(timeToBackoffEnd, pifs + slot, "m_nSlotsLeft too small for this test");
+
+    const auto switchDelay =
+        (scenario == BACKOFF_END_BEFORE_SWITCH_END
+             ? timeToBackoffEnd + slot
+             : (scenario == LESS_THAN_PIFS_UNTIL_BACKOFF_END ? timeToBackoffEnd - pifs + slot
+                                                             : timeToBackoffEnd - pifs - slot));
+
+    m_staMacs[0]->GetEmlsrManager()->SetAttribute("UseAuxPhyCca", BooleanValue(useAuxPhyCca));
+    mainPhy->SetAttribute("ChannelSwitchDelay", TimeValue(switchDelay));
+
+    NS_LOG_INFO("Starting test #" << m_testIndex << "\n");
+
+    // the AP sends a broadcast frame on the link on which TID 0 is mapped
+    WifiMacHeader hdr(WIFI_MAC_QOSDATA);
+    hdr.SetAddr1(Mac48Address::GetBroadcast());
+    hdr.SetAddr2(m_apMac->GetFrameExchangeManager(m_linkIdForTid0)->GetAddress());
+    hdr.SetAddr3(m_apMac->GetAddress());
+    hdr.SetDsFrom();
+    hdr.SetDsNotTo();
+    hdr.SetQosTid(0);
+
+    m_apMac->GetQosTxop(AC_BE)->Queue(Create<WifiMpdu>(Create<Packet>(1000), hdr));
+
+    m_events.emplace_back(
+        WIFI_MAC_QOSDATA,
+        [=, this](Ptr<const WifiPsdu> psdu, const WifiTxVector& txVector, uint8_t linkId) {
+            NS_TEST_EXPECT_MSG_EQ(psdu->GetAddr1(),
+                                  Mac48Address::GetBroadcast(),
+                                  "Expected a broadcast frame");
+            NS_TEST_EXPECT_MSG_EQ(+linkId,
+                                  +m_linkIdForTid0,
+                                  "Broadcast frame transmitted on wrong link");
+            NS_TEST_EXPECT_MSG_EQ(psdu->GetAddr2(),
+                                  m_apMac->GetFrameExchangeManager(linkId)->GetAddress(),
+                                  "Unexpected TA for the broadcast frame");
+            const auto txDuration =
+                WifiPhy::CalculateTxDuration(psdu,
+                                             txVector,
+                                             m_apMac->GetWifiPhy(linkId)->GetPhyBand());
+            const auto emlsrBeEdca = m_staMacs[0]->GetQosTxop(AC_BE);
+
+            // generate a packet at the EMLSR client while the medium on the link on which TID 0
+            // is mapped is still busy, so that a backoff value is generated. The backoff counter
+            // is configured to be equal to the m_nSlotsLeft value
+            Simulator::Schedule(txDuration - TimeStep(1), [=, this]() {
+                emlsrBeEdca->StartBackoffNow(m_nSlotsLeft, m_linkIdForTid0);
+                m_staMacs[0]->GetDevice()->GetNode()->AddApplication(
+                    GetApplication(UPLINK, 0, 1, 500));
+            });
+
+            // given that the backoff counter equals m_nSlotsLeft, we expect that, an AIFS after the
+            // end of the broadcast frame transmission, the NSlotsLeftAlert trace is fired and the
+            // main PHY starts switching to the link on which TID 0 is mapped
+            const auto aifs = auxPhy->GetSifs() + emlsrBeEdca->GetAifsn(m_linkIdForTid0) * slot;
+            Simulator::Schedule(txDuration + aifs + TimeStep(1), [=, this]() {
+                NS_TEST_EXPECT_MSG_EQ(mainPhy->IsStateSwitching(),
+                                      true,
+                                      "Expected the main PHY to be switching");
+                NS_TEST_EXPECT_MSG_EQ(mainPhy->GetDelayUntilIdle(),
+                                      switchDelay - TimeStep(1),
+                                      "Unexpected end of main PHY channel switch");
+
+                const auto now = Simulator::Now();
+                switch (scenario)
+                {
+                case BACKOFF_END_BEFORE_SWITCH_END:
+                    if (!useAuxPhyCca)
+                    {
+                        m_expectedTxStart = now + mainPhy->GetDelayUntilIdle() + pifs;
+                        m_expectedWidth = m_mainPhyWidth;
+                    }
+                    else
+                    {
+                        m_expectedTxStart = now + mainPhy->GetDelayUntilIdle();
+                        m_expectedWidth = m_auxPhyWidth;
+                    }
+                    break;
+                case LESS_THAN_PIFS_UNTIL_BACKOFF_END:
+                    if (!useAuxPhyCca)
+                    {
+                        m_expectedTxStart = now + mainPhy->GetDelayUntilIdle() + pifs;
+                        m_expectedWidth = m_mainPhyWidth;
+                    }
+                    else
+                    {
+                        m_expectedTxStart = m_staMacs[0]
+                                                ->GetChannelAccessManager(m_linkIdForTid0)
+                                                ->GetBackoffEndFor(emlsrBeEdca);
+                        m_expectedWidth = m_auxPhyWidth;
+                    }
+                    break;
+                case MORE_THAN_PIFS_UNTIL_BACKOFF_END:
+                    m_expectedTxStart = m_staMacs[0]
+                                            ->GetChannelAccessManager(m_linkIdForTid0)
+                                            ->GetBackoffEndFor(emlsrBeEdca);
+                    m_expectedWidth = m_mainPhyWidth;
+                    break;
+                default:
+                    NS_ABORT_MSG("Unexpected scenario " << +static_cast<uint8_t>(scenario));
+                }
+            });
+        });
+
+    m_events.emplace_back(
+        WIFI_MAC_QOSDATA,
+        [=, this](Ptr<const WifiPsdu> psdu, const WifiTxVector& txVector, uint8_t linkId) {
+            NS_TEST_EXPECT_MSG_EQ(+linkId,
+                                  +m_linkIdForTid0,
+                                  "Unicast frame transmitted on wrong link");
+            NS_TEST_EXPECT_MSG_EQ(psdu->GetAddr2(),
+                                  m_staMacs[0]->GetFrameExchangeManager(linkId)->GetAddress(),
+                                  "Unexpected TA for the unicast frame");
+            NS_TEST_EXPECT_MSG_EQ(m_expectedTxStart,
+                                  Simulator::Now(),
+                                  "Unexpected start TX time for unicast frame");
+            NS_TEST_EXPECT_MSG_EQ(m_expectedWidth,
+                                  txVector.GetChannelWidth(),
+                                  "Unexpected channel width for the unicast frame");
+        });
+
+    m_events.emplace_back(
+        WIFI_MAC_CTL_ACK,
+        [=, this](Ptr<const WifiPsdu> psdu, const WifiTxVector& txVector, uint8_t linkId) {
+            Simulator::Schedule(MilliSeconds(2), [=, this]() {
+                NS_TEST_EXPECT_MSG_EQ(m_events.empty(), true, "Not all events took place");
+
+                if (++m_testIndex < static_cast<uint8_t>(COUNT) * 2)
+                {
+                    RunOne();
+                }
+            });
+        });
+}
+
+WifiEmlsrLinkSwitchTestSuite::WifiEmlsrLinkSwitchTestSuite()
+    : TestSuite("wifi-emlsr-link-switch", Type::UNIT)
+{
+    for (bool switchAuxPhy : {true, false})
+    {
+        for (bool resetCamStateAndInterruptSwitch : {true, false})
+        {
+            for (auto auxPhyMaxChWidth : {MHz_u{20}, MHz_u{40}, MHz_u{80}, MHz_u{160}})
+            {
+                AddTestCase(new EmlsrLinkSwitchTest(
+                                {switchAuxPhy, resetCamStateAndInterruptSwitch, auxPhyMaxChWidth}),
+                            TestCase::Duration::QUICK);
+            }
+        }
+    }
+
+    AddTestCase(new EmlsrCheckNavAndCcaLastPifsTest(), TestCase::Duration::QUICK);
+    AddTestCase(new EmlsrIcfSentDuringMainPhySwitchTest(), TestCase::Duration::QUICK);
+    AddTestCase(new EmlsrSwitchMainPhyBackTest(), TestCase::Duration::QUICK);
+
+    AddTestCase(new EmlsrCcaBusyTest(MHz_u{20}), TestCase::Duration::QUICK);
+    AddTestCase(new EmlsrCcaBusyTest(MHz_u{80}), TestCase::Duration::QUICK);
+
+    for (const auto switchAuxPhy : {true, false})
+    {
+        for (const auto auxPhyTxCapable : {true, false})
+        {
+            AddTestCase(new SingleLinkEmlsrTest(switchAuxPhy, auxPhyTxCapable),
+                        TestCase::Duration::QUICK);
+        }
+    }
+}
+
+static WifiEmlsrLinkSwitchTestSuite g_wifiEmlsrLinkSwitchTestSuite; ///< the test suite
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/test/wifi-emlsr-link-switch-test.h ns-3.45/src/wifi/test/wifi-emlsr-link-switch-test.h
--- ns-3.44/src/wifi/test/wifi-emlsr-link-switch-test.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.45/src/wifi/test/wifi-emlsr-link-switch-test.h	2025-06-01 20:34:45.636702300 -0700
@@ -0,0 +1,691 @@
+/*
+ * Copyright (c) 2023 Universita' degli Studi di Napoli Federico II
+ *
+ * SPDX-License-Identifier: GPL-2.0-only
+ *
+ * Author: Stefano Avallone <stavallo@unina.it>
+ */
+
+#ifndef WIFI_EMLSR_LINK_SWITCH_TEST_H
+#define WIFI_EMLSR_LINK_SWITCH_TEST_H
+
+#include "wifi-emlsr-test-base.h"
+
+#include <list>
+
+using namespace ns3;
+using namespace std::string_literals;
+
+// forward declaration
+namespace ns3
+{
+struct EmlsrMainPhySwitchTrace;
+}
+
+/**
+ * @ingroup wifi-test
+ * @ingroup tests
+ *
+ * @brief Test the switching of PHYs on EMLSR clients.
+ *
+ * An AP MLD and an EMLSR client setup 3 links, on which EMLSR mode is enabled. The AP MLD
+ * transmits 4 QoS data frames (one after another, each protected by ICF):
+ *
+ * - the first one on the link used for ML setup, hence no PHY switch occurs
+ * - the second one on another link, thus causing the main PHY to switch link
+ * - the third one on the remaining link, thus causing the main PHY to switch link again
+ * - the fourth one on the link used for ML setup
+ *
+ * Afterwards, the EMLSR client transmits 2 QoS data frames; the first one on the link used for
+ * ML setup (hence, no RTS is sent), the second one on another link.
+ */
+class EmlsrLinkSwitchTest : public EmlsrOperationsTestBase
+{
+  public:
+    /**
+     * Parameters for the EMLSR link switching test
+     */
+    struct Params
+    {
+        bool
+            switchAuxPhy; //!< whether AUX PHY should switch channel to operate on the link on which
+                          //!<  the Main PHY was operating before moving to the link of the Aux PHY
+        bool resetCamStateAndInterruptSwitch; //!< this variable controls two boolean values that
+                                              //!< are either both set to true or both set to false;
+                                              //!< the first value controls whether to reset the
+                                              //!< state of the ChannelAccessManager associated
+                                              //!< with the link on which the main PHY has just
+                                              //!< switched to, the second value controls whether
+                                              //!< a main PHY channel switch can be interrupted
+        MHz_u auxPhyMaxChWidth;               //!< max channel width supported by aux PHYs
+    };
+
+    /**
+     * Constructor
+     *
+     * @param params parameters for the EMLSR link switching test
+     */
+    EmlsrLinkSwitchTest(const Params& params);
+
+    ~EmlsrLinkSwitchTest() override = default;
+
+  protected:
+    void DoSetup() override;
+    void DoRun() override;
+    void Transmit(Ptr<WifiMac> mac,
+                  uint8_t phyId,
+                  WifiConstPsduMap psduMap,
+                  WifiTxVector txVector,
+                  double txPowerW) override;
+
+    /**
+     * Check that the simulation produced the expected results.
+     */
+    void CheckResults();
+
+    /**
+     * Check that the Main PHY (and possibly the Aux PHY) correctly switches channel when the
+     * reception of an ICF ends.
+     *
+     * @param psduMap the PSDU carrying the MU-RTS TF
+     * @param txVector the TXVECTOR used to send the PPDU
+     * @param linkId the ID of the given link
+     */
+    void CheckInitialControlFrame(const WifiConstPsduMap& psduMap,
+                                  const WifiTxVector& txVector,
+                                  uint8_t linkId);
+
+    /**
+     * Check that appropriate actions are taken by the AP MLD transmitting a PPDU containing
+     * QoS data frames to the EMLSR client on the given link.
+     *
+     * @param psduMap the PSDU(s) carrying QoS data frames
+     * @param txVector the TXVECTOR used to send the PPDU
+     * @param linkId the ID of the given link
+     */
+    void CheckQosFrames(const WifiConstPsduMap& psduMap,
+                        const WifiTxVector& txVector,
+                        uint8_t linkId);
+
+    /**
+     * Check that appropriate actions are taken by the EMLSR client transmitting a PPDU containing
+     * an RTS frame to the AP MLD on the given link.
+     *
+     * @param psduMap the PSDU carrying RTS frame
+     * @param txVector the TXVECTOR used to send the PPDU
+     * @param linkId the ID of the given link
+     */
+    void CheckRtsFrame(const WifiConstPsduMap& psduMap,
+                       const WifiTxVector& txVector,
+                       uint8_t linkId);
+
+  private:
+    bool m_switchAuxPhy; /**< whether AUX PHY should switch channel to operate on the link on which
+                              the Main PHY was operating before moving to the link of Aux PHY */
+    bool
+        m_resetCamStateAndInterruptSwitch; /**< whether to reset the state of the
+                              ChannelAccessManager associated with the link on which the main PHY
+                              has just switched to and whether main PHY switch can be interrupted */
+    MHz_u m_auxPhyMaxChWidth;              //!< max channel width supported by aux PHYs
+    std::size_t m_countQoSframes;          //!< counter for QoS data frames
+    std::size_t m_countIcfFrames;          //!< counter for ICF frames
+    std::size_t m_countRtsFrames;          //!< counter for RTS frames
+    std::size_t m_txPsdusPos;              //!< position in the vector of TX PSDUs of the first ICF
+    Ptr<ListErrorModel> m_errorModel;      ///< error rate model to corrupt packets at AP MLD
+};
+
+/**
+ * @ingroup wifi-test
+ * @ingroup tests
+ *
+ * @brief Test CCA busy notifications on EMLSR clients.
+ *
+ * SwitchAuxPhy is set to true, so that the aux PHY starts switching when the main PHY switch is
+ * completed.
+ *
+ * - Main PHY switches to a link on which an aux PHY is operating. Right after the start of the
+ *   channel switch, the AP transmits a frame to another device on the aux PHY link. Verify that,
+ *   once the main PHY is operating on the new link, the channel access manager on that link is
+ *   notified of CCA busy until the end of the transmission
+ * - When the main PHY switch is completed, the aux PHY switches to a link on which no PHY is
+ *   operating. Before the aux PHY starts switching, the AP starts transmitting a frame to another
+ *   device on the link on which no PHY is operating. Verify that, once the aux PHY is operating
+ *   on the new link, the channel access manager on that link is notified of CCA busy until the
+ *   end of the transmission
+ */
+class EmlsrCcaBusyTest : public EmlsrOperationsTestBase
+{
+  public:
+    /**
+     * Constructor
+     *
+     * @param auxPhyMaxChWidth max channel width supported by aux PHYs
+     */
+    EmlsrCcaBusyTest(MHz_u auxPhyMaxChWidth);
+
+    ~EmlsrCcaBusyTest() override = default;
+
+  protected:
+    void DoSetup() override;
+    void DoRun() override;
+
+  private:
+    void StartTraffic() override;
+
+    /**
+     * Make the other MLD transmit a packet to the AP on the given link.
+     *
+     * @param linkId the ID of the given link
+     */
+    void TransmitPacketToAp(uint8_t linkId);
+
+    /**
+     * Perform checks after that the preamble of the first PPDU has been received.
+     */
+    void CheckPoint1();
+
+    /**
+     * Perform checks after that the main PHY completed the link switch.
+     */
+    void CheckPoint2();
+
+    /**
+     * Perform checks after that the aux PHY completed the link switch.
+     */
+    void CheckPoint3();
+
+    MHz_u m_auxPhyMaxChWidth;    //!< max channel width supported by aux PHYs
+    Time m_channelSwitchDelay;   //!< the PHY channel switch delay
+    uint8_t m_currMainPhyLinkId; //!< the ID of the link the main PHY switches from
+    uint8_t m_nextMainPhyLinkId; //!< the ID of the link the main PHY switches to
+};
+
+/**
+ * @ingroup wifi-test
+ * @ingroup tests
+ *
+ * @brief Test ML setup and data exchange between an AP MLD and a single link EMLSR client.
+ *
+ * A single link EMLSR client performs ML setup with an AP MLD having three links and then enables
+ * EMLSR mode on the unique link. A Block Ack agreement is established (for both the downlink and
+ * uplink directions) and QoS data frames (aggregated in an A-MPDU) are transmitted by both the
+ * AP MLD and the EMLSR client.
+ *
+ * It is checked that:
+ * - the expected sequence of frames is transmitted, including ICFs before downlink transmissions
+ * - EMLSR mode is enabled on the single EMLSR link
+ * - the address of the EMLSR client is seen as an MLD address
+ * - the AP MLD starts the transition delay timer at the end of each TXOP
+ */
+class SingleLinkEmlsrTest : public EmlsrOperationsTestBase
+{
+  public:
+    /**
+     * Constructor.
+     *
+     * @param switchAuxPhy whether aux PHYs switch link
+     * @param auxPhyTxCapable whether aux PHYs are TX capable
+     */
+    SingleLinkEmlsrTest(bool switchAuxPhy, bool auxPhyTxCapable);
+
+  protected:
+    void DoSetup() override;
+    void DoRun() override;
+
+    void Transmit(Ptr<WifiMac> mac,
+                  uint8_t phyId,
+                  WifiConstPsduMap psduMap,
+                  WifiTxVector txVector,
+                  double txPowerW) override;
+
+    /// Actions and checks to perform upon the transmission of each frame
+    struct Events
+    {
+        /**
+         * Constructor.
+         *
+         * @param type the frame MAC header type
+         * @param f function to perform actions and checks
+         */
+        Events(WifiMacType type,
+               std::function<void(Ptr<const WifiPsdu>, const WifiTxVector&)>&& f = {})
+            : hdrType(type),
+              func(f)
+        {
+        }
+
+        WifiMacType hdrType; ///< MAC header type of frame being transmitted
+        std::function<void(Ptr<const WifiPsdu>, const WifiTxVector&)>
+            func; ///< function to perform actions and checks
+    };
+
+  private:
+    bool m_switchAuxPhy;                         //!< whether aux PHYs switch link
+    bool m_auxPhyTxCapable;                      //!< whether aux PHYs are TX capable
+    std::list<Events> m_events;                  //!< list of events for a test run
+    std::list<Events>::const_iterator m_eventIt; //!< iterator over the list of events
+};
+
+/**
+ * @ingroup wifi-test
+ * @ingroup tests
+ *
+ * @brief Check ICF reception while main PHY is switching.
+ *
+ * An AP MLD and an EMLSR client, both having 3 links, are considered in this test. Aux PHYs are
+ * not TX capable and do not switch links; the preferred link is link 0. In order to control link
+ * switches, a TID-to-Link mapping is configured so that TIDs 0 and 3 are mapped onto link 1 in the
+ * DL direction, while TID 0 is mapped to link 1 and TID 3 is mapped to link 2 in the UL direction.
+ * In this way, the AP MLD always requests channel access on link 1, while the EMLSR client requests
+ * channel access on link 1 or link 2, depending on the TID. This test consists in having the AP MLD
+ * and the EMLSR client gain channel access simultaneously: the AP MLD starts transmitting an ICF,
+ * while the main PHY starts switching to the link on which the EMLSR client gained channel access,
+ * which could be either the link on which the ICF is being transmitted or another one, depending
+ * on the TID of the MPDU the EMLSR client has to transmit.
+ *
+ * The channel switch delay for the main PHY varies across test scenarios and is computed so that
+ * the channel switch terminates during one of the different steps of the reception of the ICF:
+ * during preamble detection period, before the PHY header end, before the MAC header end, before
+ * the padding start and after the padding start.
+ *
+   \verbatim
+   ┌────────┬──────┬──────┬────────────────────┬───────┐
+   │PREAMBLE│  PHY │  MAC │    MAC PAYLOAD     │       │
+   │ DETECT │HEADER│HEADER│(COMMON & USER INFO)│PADDING│
+   └────────┴──────┴──────┴────────────────────┴───────┘
+   \endverbatim
+ *
+ * All the combinations of the following are tested:
+ * - main PHY switches to the same link as ICF or to another link
+ * - channel switch can be interrupted or not
+ * - MAC header reception information is available and can be used or not
+ *
+ * In all the cases, we check that the EMLSR client responds to the ICF:
+ * - if the main PHY switches to the same link as the ICF, connecting the main PHY to the link is
+ *   postponed until the end of the ICF
+ * - if the main PHY switches to another link, the UL TXOP does not start because it is detected
+ *   that a frame which could be an ICF is being received on another link
+ *
+ * At the end of the DL TXOP, it is checked that:
+ * - if the KeepMainPhyAfterDlTxop attribute of the AdvancedEmlsrManager is false, the main PHY
+ *   switches back to the preferred link
+ * - if the KeepMainPhyAfterDlTxop attribute of the AdvancedEmlsrManager is true, the main PHY
+ *   stays on the current link to start an UL TXOP, if the UL frame can be sent on the same link
+ *   as the DL frame, or switches back to the preferred link, otherwise
+ *
+ * At the end of the UL TXOP, the main PHY returns to the preferred link.
+ *
+ * It is also checked that the in-device interference generated by every transmission of the EMLSR
+ * client is tracked by all the PHY interfaces of all the PHYs but the PHY that is transmitting
+ * for the entire duration of the transmission.
+ */
+class EmlsrIcfSentDuringMainPhySwitchTest : public EmlsrOperationsTestBase
+{
+  public:
+    /// Constructor.
+    EmlsrIcfSentDuringMainPhySwitchTest();
+
+    /**
+     * Enumeration indicating the duration of a main PHY channel switch compared to the ICF fields
+     */
+    enum ChannelSwitchEnd : uint8_t
+    {
+        DURING_PREAMBLE_DETECTION = 0,
+        BEFORE_PHY_HDR_END,
+        BEFORE_MAC_HDR_END,
+        BEFORE_MAC_PAYLOAD_END,
+        BEFORE_PADDING_END,
+        CSD_COUNT
+    };
+
+  protected:
+    void DoSetup() override;
+    void DoRun() override;
+    void Transmit(Ptr<WifiMac> mac,
+                  uint8_t phyId,
+                  WifiConstPsduMap psduMap,
+                  WifiTxVector txVector,
+                  double txPowerW) override;
+
+    /// Runs a test case and invokes itself for the next test case
+    void RunOne();
+
+    /**
+     * Callback connected to the EmlsrLinkSwitch trace source of the StaWifiMac of the EMLSR client.
+     *
+     * @param linkId the ID of the link which the PHY is connected to/disconnected from
+     * @param phy a pointer to the PHY that is connected to/disconnected from the given link
+     * @param connected true if the PHY is connected, false if the PHY is disconnected
+     */
+    void EmlsrLinkSwitchCb(uint8_t linkId, Ptr<WifiPhy> phy, bool connected);
+
+    /**
+     * Generate noise on all the links of the given MAC for the given time duration. This is used
+     * to align the EDCA backoff boundary on all the links for the given MAC.
+     *
+     * @param mac the given MAC
+     * @param duration the given duration
+     */
+    void GenerateNoiseOnAllLinks(Ptr<WifiMac> mac, Time duration);
+
+    /**
+     * Check that the in-device interference generated by a transmission of the given duration
+     * on the given link is tracked by all the PHY interfaces of all the PHYs but the PHY that
+     * is transmitting.
+     *
+     * @param testStr the test string
+     * @param linkId the ID of the given link
+     * @param duration the duration of the transmission
+     */
+    void CheckInDeviceInterference(const std::string& testStr, uint8_t linkId, Time duration);
+
+    /// Actions and checks to perform upon the transmission of each frame
+    struct Events
+    {
+        /**
+         * Constructor.
+         *
+         * @param type the frame MAC header type
+         * @param f function to perform actions and checks
+         */
+        Events(WifiMacType type,
+               std::function<void(Ptr<const WifiPsdu>, const WifiTxVector&, uint8_t)>&& f = {})
+            : hdrType(type),
+              func(f)
+        {
+        }
+
+        WifiMacType hdrType; ///< MAC header type of frame being transmitted
+        std::function<void(Ptr<const WifiPsdu>, const WifiTxVector&, uint8_t)>
+            func; ///< function to perform actions and checks
+    };
+
+    /// Store information about a main PHY switch
+    struct MainPhySwitchInfo
+    {
+        Time time;      ///< the time the main PHY left/was connected to a link
+        uint8_t linkId; ///< the ID of the link the main PHY switched from/to
+    };
+
+  private:
+    void StartTraffic() override;
+
+    ChannelSwitchEnd m_csdIndex{
+        BEFORE_PHY_HDR_END}; //!< index to iterate over channel switch durations
+    uint8_t m_testIndex{0};  //!< index to iterate over test scenarios
+    std::string m_testStr;   //!< test scenario description
+    bool m_setupDone{false}; //!< whether association, BA, ... have been done
+    std::optional<MainPhySwitchInfo> m_switchFrom; //!< info for main PHY leaving a link
+    std::optional<MainPhySwitchInfo> m_switchTo;   //!< info for main PHY connected to a link
+    std::array<WifiSpectrumBandInfo, 3> m_bands;   //!< bands of the 3 frequency channels
+    std::list<Events> m_events;                    //!< list of events for a test run
+    std::size_t m_processedEvents{0};              //!< number of processed events
+    const uint8_t m_linkIdForTid3{2};              //!< ID of the link on which TID 3 is mapped
+};
+
+/**
+ * @ingroup wifi-test
+ * @ingroup tests
+ *
+ * @brief Switch main PHY back timer test
+ *
+ * An AP MLD and an EMLSR client, both having 3 links, are considered in this test. Aux PHYs are
+ * not TX capable, do not switch links and support up to the HT modulation class; the preferred link
+ * is link 2. In order to control link switches, a TID-to-Link mapping is configured so that TID 0
+ * is mapped onto link 1 and TID 4 is mapped onto link 0 (for both DL and UL). In this test, the
+ * main PHY switches to link 1 to start an UL TXOP but, while the main PHY is switching or shortly
+ * after the channel switch ends, the AP MLD transmits a QoS Data broadcast frame on link 1 using a
+ * modulation supported by the aux PHYs. Different situations are tested and it is verified that
+ * the main PHY switches back to the preferred link as expected. Scenarios:
+ *
+ * - RXSTART_WHILE_SWITCH_NO_INTERRUPT: the AP MLD transmits an HT PPDU while the main PHY is
+ *   switching; at the end of the PHY header reception (while the main PHY is still switching), the
+ *   MAC of the EMLSR client receives the RX start notification, which indicates that the modulation
+ *   is HT (hence the PPDU does not carry an ICF) and the PPDU duration exceeds the switch main PHY
+ *   back delay. The EMLSR client decides to switch the main PHY back to the preferred link (with
+ *   reason RX_END), but the actual main PHY switch is postponed until the ongoing channel switch
+ *   terminates.
+ * - RXSTART_WHILE_SWITCH_INTERRUPT: same as previous scenario, except that the main PHY switch can
+ *   be interrupted, hence the main PHY switches back to the preferred link as soon as the reception
+ *   of the PHY header ends.
+ * - RXSTART_AFTER_SWITCH_HT_PPDU: the AP MLD transmits an HT PPDU some time after the main PHY
+ *   starts switching to link 1; the delay is computed so that the RX START notification is sent
+ *   after that the main PHY has completed the channel switch. When the main PHY completes the
+ *   switch to link 1, it is determined that the PPDU being received (using HT modulation) cannot
+ *   be an ICF, hence the main PHY is connected to link 1. Connecting the main PHY to link 1
+ *   triggers a CCA busy notification until the end of the PPDU (we assume this information is
+ *   available from the PHY header decoded by the aux PHY), thus the main PHY switches back to the
+ *   preferred link (with reason BUSY_END).
+ * - NON_HT_PPDU_DONT_USE_MAC_HDR: the AP MLD transmits a non-HT PPDU on link 1 (it does not really
+ *   matter if the RX START notification is sent before or after the end of main PHY switch). When
+ *   the main PHY completes the switch to link 1, it is detected that the aux PHY on link 1 is
+ *   receiving a PPDU which may be an ICF (the modulation is non-HT), hence the main PHY is not
+ *   connected to link 1 until the end of the PPDU reception (MAC header info is not used). At that
+ *   time, it is detected that the PPDU does not contain an ICF, but it is determined that channel
+ *   access can be gained before the end of the switch main PHY back timer, hence the main PHY stays
+ *   on link 1 and transmits its unicast data frame. The start of the UL TXOP cancels the main PHY
+ *   switch back timer and the main PHY switches back to the preferred link at the end of the TXOP.
+ * - NON_HT_PPDU_USE_MAC_HDR: same as previous scenario, except that the MAC header info can be
+ *   used. After completing the channel switch, the main PHY is not connected to link 1 because the
+ *   non-HT PPDU being received may be an ICF. When the MAC header info is notified, it is detected
+ *   that the PPDU does not contain an ICF, channel access would not be gained before the end of the
+ *   switch main PHY back timer and therefore the main PHY switches back to the preferred link (with
+ *   reason RX_END).
+ * - LONG_SWITCH_BACK_DELAY_DONT_USE_MAC_HDR: same as the NON_HT_PPDU_DONT_USE_MAC_HDR scenario,
+ *   except that the switch main PHY back delay is longer and exceeds the PPDU duration, but it is
+ *   does not exceed the PPDU duration plus AIFS and the backoff slots. Therefore, at the end of the
+ *   PPDU reception, it is determined that the backoff counter will not reach zero before the end of
+ *   the switch main PHY back timer plus a channel switch delay and the main PHY switches back to
+ *   the preferred link (with reason BACKOFF_END).
+ * - LONG_SWITCH_BACK_DELAY_USE_MAC_HDR: same as the NON_HT_PPDU_USE_MAC_HDR scenario,
+ *   except that the switch main PHY back delay is longer and exceeds the PPDU duration, but it
+ *   does not exceed the PPDU duration plus AIFS and the backoff slots. Therefore, at the end of the
+ *   MAC header reception, it is determined that the backoff counter will not reach zero before the
+ *   end of the switch main PHY back timer plus a channel switch delay and the main PHY switches
+ *   back to the preferred link (with reason BACKOFF_END).
+ *
+ * Except for the NON_HT_PPDU_DONT_USE_MAC_HDR case, in which the main PHY stays on link 1 and
+ * transmits a data frame, receives the Ack and switches back to the preferred link at the TXOP end,
+ * in all other cases the main PHY switches back to the preferred link without sending a frame on
+ * link 1. A few microseconds after starting the switch to the preferred link, a frame with TID 4
+ * is queued. If interrupt switching is enabled, the switch to the preferred link is interrupted
+ * and the main PHY switches to link 0, where it transmits the data frame with TID 4 as soon as
+ * completing the switch. Afterwards, the main PHY switches back to the preferred link and, except
+ * for the NON_HT_PPDU_DONT_USE_MAC_HDR case, it switches to link 1 to transmit the queued frame
+ * with TID 0.
+ */
+class EmlsrSwitchMainPhyBackTest : public EmlsrOperationsTestBase
+{
+  public:
+    /// Constructor.
+    EmlsrSwitchMainPhyBackTest();
+
+    /**
+     * Enumeration indicating the tested scenario
+     */
+    enum TestScenario : uint8_t
+    {
+        RXSTART_WHILE_SWITCH_NO_INTERRUPT = 0,
+        RXSTART_WHILE_SWITCH_INTERRUPT,
+        RXSTART_AFTER_SWITCH_HT_PPDU,
+        NON_HT_PPDU_DONT_USE_MAC_HDR,
+        NON_HT_PPDU_USE_MAC_HDR,
+        LONG_SWITCH_BACK_DELAY_DONT_USE_MAC_HDR,
+        LONG_SWITCH_BACK_DELAY_USE_MAC_HDR,
+        COUNT
+    };
+
+  protected:
+    void DoSetup() override;
+    void DoRun() override;
+    void Transmit(Ptr<WifiMac> mac,
+                  uint8_t phyId,
+                  WifiConstPsduMap psduMap,
+                  WifiTxVector txVector,
+                  double txPowerW) override;
+    void MainPhySwitchInfoCallback(std::size_t index, const EmlsrMainPhySwitchTrace& info) override;
+
+    /// Insert events corresponding to the UL TXOP to transmit the QoS Data frame with TID 4
+    void InsertEventsForQosTid4();
+
+    /// Runs a test case and invokes itself for the next test case
+    void RunOne();
+
+    /// Actions and checks to perform upon the transmission of each frame
+    struct Events
+    {
+        /**
+         * Constructor.
+         *
+         * @param type the frame MAC header type
+         * @param f function to perform actions and checks
+         */
+        Events(WifiMacType type,
+               std::function<void(Ptr<const WifiPsdu>, const WifiTxVector&, uint8_t)>&& f = {})
+            : hdrType(type),
+              func(f)
+        {
+        }
+
+        WifiMacType hdrType; ///< MAC header type of frame being transmitted
+        std::function<void(Ptr<const WifiPsdu>, const WifiTxVector&, uint8_t)>
+            func; ///< function to perform actions and checks
+    };
+
+  private:
+    void StartTraffic() override;
+
+    uint8_t m_testIndex{0};               //!< index to iterate over test scenarios
+    bool m_setupDone{false};              //!< whether association, BA, ... have been done
+    bool m_dlPktDone{false};              //!< whether the DL packet has been generated
+    std::list<Events> m_events;           //!< list of events for a test run
+    std::size_t m_processedEvents{0};     //!< number of processed events
+    const uint8_t m_linkIdForTid0{1};     //!< ID of the link on which TID 0 is mapped
+    const uint8_t m_linkIdForTid4{0};     //!< ID of the link on which TID 4 is mapped
+    Ptr<WifiMpdu> m_bcastFrame;           //!< the broadcast frame sent by the AP MLD
+    Time m_switchMainPhyBackDelay;        //!< the switch main PHY back delay
+    Time m_expectedMainPhySwitchBackTime; //!< expected main PHY switch back time
+};
+
+/**
+ * @ingroup wifi-test
+ * @ingroup tests
+ *
+ * @brief Check NAV and CCA in the last PIFS test
+ *
+ * An AP MLD and an EMLSR client, both having 3 links, are considered in this test. Aux PHYs are
+ * not TX capable, do not switch links and operate on 20 MHz channels; the main PHY operates on
+ * 40 MHz channels and the preferred link is link 1. In order to control link switches, a
+ * TID-to-Link mapping is configured so that TID 0 is mapped onto link 2 for both DL and UL. In this
+ * test, the main PHY switches to link 2 to start an UL TXOP a predefined number of slots before
+ * the backoff ends on link 2. We consider different durations of the channel switch delay to
+ * verify the time the data frame is transmitted by the EMLSR client on link 2 and the data frame
+ * TX width in various situations:
+ *
+ *        AuxPhyCca = false                           AuxPhyCca = true
+ *                          ┌────┐                             ┌────┐
+ *                          │QoS │40                           │QoS │20
+ *                 |--PIFS--│Data│MHz                 |--PIFS--│Data│MHz
+ * ──────┬─────────┬────────┴────┴────         ──────┬─────────┼────┴─────────────
+ *    Backoff    Switch                           Backoff    Switch
+ *      end       end                               end       end
+ *
+ *
+ *        AuxPhyCca = false                           AuxPhyCca = true
+ *                   ┌────┐                                    ┌────┐
+ *                   │QoS │40                                  │QoS │20
+ *          |--PIFS--│Data│MHz                        |--PIFS--│Data│MHz
+ * ─────────┬──────┬─┴────┴───────────         ──────────┬─────┼────┴─────────────
+ *       Switch  Backoff                              Switch Backoff
+ *         end    end                                   end   end
+ *
+ *
+ *        AuxPhyCca = false/true
+ *                      ┌────┐
+ *                      │QoS │40
+ *          |--PIFS--|  │Data│MHz
+ * ─────────┬───────────┼────┴────────
+ *       Switch      Backoff
+ *         end         end
+ *
+ * In all the cases, it is verified that the EMLSR client transmits the data frame, at the expected
+ * time and on the expected channel width, and receives the acknowledgment.
+ */
+class EmlsrCheckNavAndCcaLastPifsTest : public EmlsrOperationsTestBase
+{
+  public:
+    /// Constructor.
+    EmlsrCheckNavAndCcaLastPifsTest();
+
+    /**
+     * Enumeration indicating the tested scenario
+     */
+    enum TestScenario : uint8_t
+    {
+        BACKOFF_END_BEFORE_SWITCH_END = 0,
+        LESS_THAN_PIFS_UNTIL_BACKOFF_END,
+        MORE_THAN_PIFS_UNTIL_BACKOFF_END,
+        COUNT
+    };
+
+  protected:
+    void DoSetup() override;
+    void DoRun() override;
+    void Transmit(Ptr<WifiMac> mac,
+                  uint8_t phyId,
+                  WifiConstPsduMap psduMap,
+                  WifiTxVector txVector,
+                  double txPowerW) override;
+
+    /// Runs a test case and invokes itself for the next test case
+    void RunOne();
+
+    /// Actions and checks to perform upon the transmission of each frame
+    struct Events
+    {
+        /**
+         * Constructor.
+         *
+         * @param type the frame MAC header type
+         * @param f function to perform actions and checks
+         */
+        Events(WifiMacType type,
+               std::function<void(Ptr<const WifiPsdu>, const WifiTxVector&, uint8_t)>&& f = {})
+            : hdrType(type),
+              func(f)
+        {
+        }
+
+        WifiMacType hdrType; ///< MAC header type of frame being transmitted
+        std::function<void(Ptr<const WifiPsdu>, const WifiTxVector&, uint8_t)>
+            func; ///< function to perform actions and checks
+    };
+
+  private:
+    void StartTraffic() override;
+
+    std::size_t m_testIndex{0};       //!< index to iterate over test scenarios
+    bool m_setupDone{false};          //!< whether association, BA, ... have been done
+    std::list<Events> m_events;       //!< list of events for a test run
+    std::size_t m_processedEvents{0}; //!< number of processed events
+    const uint8_t m_linkIdForTid0{2}; //!< ID of the link on which TID 0 is mapped
+    const uint8_t m_nSlotsLeft{4};    //!< value for the CAM NSlotsLeft attribute
+    const MHz_u m_mainPhyWidth{40};   //!< main PHY channel width
+    const MHz_u m_auxPhyWidth{20};    //!< aux PHY channel width
+    Time m_expectedTxStart;           //!< expected start time for frame transmission
+    MHz_u m_expectedWidth;            //!< expected channel width for frame transmission
+};
+
+/**
+ * @ingroup wifi-test
+ * @ingroup tests
+ *
+ * @brief wifi EMLSR suite to test link switch operations
+ */
+class WifiEmlsrLinkSwitchTestSuite : public TestSuite
+{
+  public:
+    WifiEmlsrLinkSwitchTestSuite();
+};
+
+#endif /* WIFI_EMLSR_LINK_SWITCH_TEST_H */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/test/wifi-emlsr-test-base.cc ns-3.45/src/wifi/test/wifi-emlsr-test-base.cc
--- ns-3.44/src/wifi/test/wifi-emlsr-test-base.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.45/src/wifi/test/wifi-emlsr-test-base.cc	2025-06-01 20:34:45.636702300 -0700
@@ -0,0 +1,662 @@
+/*
+ * Copyright (c) 2023 Universita' degli Studi di Napoli Federico II
+ *
+ * SPDX-License-Identifier: GPL-2.0-only
+ *
+ * Author: Stefano Avallone <stavallo@unina.it>
+ */
+
+#include "wifi-emlsr-test-base.h"
+
+#include "ns3/advanced-ap-emlsr-manager.h"
+#include "ns3/advanced-emlsr-manager.h"
+#include "ns3/attribute-container.h"
+#include "ns3/boolean.h"
+#include "ns3/config.h"
+#include "ns3/ctrl-headers.h"
+#include "ns3/eht-configuration.h"
+#include "ns3/eht-frame-exchange-manager.h"
+#include "ns3/interference-helper.h"
+#include "ns3/log.h"
+#include "ns3/mgt-action-headers.h"
+#include "ns3/mobility-helper.h"
+#include "ns3/multi-model-spectrum-channel.h"
+#include "ns3/node-list.h"
+#include "ns3/packet-socket-helper.h"
+#include "ns3/packet-socket-server.h"
+#include "ns3/pointer.h"
+#include "ns3/qos-txop.h"
+#include "ns3/rng-seed-manager.h"
+#include "ns3/rr-multi-user-scheduler.h"
+#include "ns3/simulator.h"
+#include "ns3/spectrum-wifi-helper.h"
+#include "ns3/spectrum-wifi-phy.h"
+#include "ns3/string.h"
+#include "ns3/wifi-net-device.h"
+#include "ns3/wifi-spectrum-phy-interface.h"
+
+#include <algorithm>
+#include <functional>
+#include <iomanip>
+
+using namespace ns3;
+
+NS_LOG_COMPONENT_DEFINE("WifiEmlsrTest");
+
+EmlsrOperationsTestBase::EmlsrOperationsTestBase(const std::string& name)
+    : TestCase(name)
+{
+}
+
+void
+EmlsrOperationsTestBase::Transmit(Ptr<WifiMac> mac,
+                                  uint8_t phyId,
+                                  WifiConstPsduMap psduMap,
+                                  WifiTxVector txVector,
+                                  double txPowerW)
+{
+    auto linkId = mac->GetLinkForPhy(phyId);
+    NS_TEST_ASSERT_MSG_EQ(linkId.has_value(), true, "No link found for PHY ID " << +phyId);
+    m_txPsdus.push_back({Simulator::Now(), psduMap, txVector, *linkId, phyId});
+
+    auto txDuration =
+        WifiPhy::CalculateTxDuration(psduMap, txVector, mac->GetWifiPhy(*linkId)->GetPhyBand());
+
+    for (const auto& [aid, psdu] : psduMap)
+    {
+        std::stringstream ss;
+        ss << std::setprecision(10) << "PSDU #" << m_txPsdus.size() << " Link ID "
+           << +linkId.value() << " Phy ID " << +phyId << " " << psdu->GetHeader(0).GetTypeString();
+        if (psdu->GetHeader(0).IsAction())
+        {
+            ss << " ";
+            WifiActionHeader actionHdr;
+            psdu->GetPayload(0)->PeekHeader(actionHdr);
+            actionHdr.Print(ss);
+        }
+        ss << " #MPDUs " << psdu->GetNMpdus() << " duration/ID " << psdu->GetHeader(0).GetDuration()
+           << " RA = " << psdu->GetAddr1() << " TA = " << psdu->GetAddr2()
+           << " ADDR3 = " << psdu->GetHeader(0).GetAddr3()
+           << " ToDS = " << psdu->GetHeader(0).IsToDs()
+           << " FromDS = " << psdu->GetHeader(0).IsFromDs();
+        if (psdu->GetHeader(0).IsQosData())
+        {
+            ss << " seqNo = {";
+            for (auto& mpdu : *PeekPointer(psdu))
+            {
+                ss << mpdu->GetHeader().GetSequenceNumber() << ",";
+            }
+            ss << "} TID = " << +psdu->GetHeader(0).GetQosTid();
+        }
+        NS_LOG_INFO(ss.str());
+
+        // if this frame is transmitted by an EMLSR client on an EMLSR links, in-device interference
+        // is configured and the TX duration exceeds the threshold (72us), MediumSyncDelay timer is
+        // (re)started at the end of the transmission
+        if (auto staMac = DynamicCast<StaWifiMac>(mac);
+            staMac && staMac->IsEmlsrLink(*linkId) &&
+            staMac->GetEmlsrManager()->GetMediumSyncDuration().IsStrictlyPositive())
+        {
+            const auto mustStartMsd = staMac->GetEmlsrManager()->GetInDeviceInterference() &&
+                                      txDuration > MEDIUM_SYNC_THRESHOLD;
+
+            for (auto id : staMac->GetLinkIds())
+            {
+                // timer started on EMLSR links other than the link on which TX is starting,
+                // provided that a PHY is operating on the link and MediumSyncDuration is not null
+                if (!staMac->IsEmlsrLink(id) || id == *linkId || staMac->GetWifiPhy(id) == nullptr)
+                {
+                    continue;
+                }
+                Simulator::Schedule(
+                    txDuration - TimeStep(1),
+                    [=, hdrType = psdu->GetHeader(0).GetTypeString(), this]() {
+                        // check if MSD timer was running on the link before completing transmission
+                        // and is expected to be running when check is performed (in 2 timesteps)
+                        const auto msdTimer =
+                            staMac->GetEmlsrManager()->GetElapsedMediumSyncDelayTimer(id);
+                        const auto msdDuration =
+                            staMac->GetEhtConfiguration()->m_mediumSyncDuration;
+                        const auto msdWasRunning =
+                            (msdTimer.has_value() && (msdDuration - *msdTimer > TimeStep(2)));
+                        if (auto phy = staMac->GetWifiPhy(id);
+                            !msdWasRunning && !mustStartMsd && phy && phy->IsStateSleep())
+                        {
+                            // if the MSD timer was not running before the end of the TX, it is not
+                            // expected to be started and the PHY operating on this link is
+                            // sleeping, do not check that the MSD timer is not started after the
+                            // end of the TX, because it may be started because of the sleep period
+                            // of the aux PHY
+                            return;
+                        }
+                        Simulator::Schedule(TimeStep(2), [=, this]() {
+                            CheckMsdTimerRunning(staMac,
+                                                 id,
+                                                 (msdWasRunning || mustStartMsd),
+                                                 std::string("after transmitting ") + hdrType +
+                                                     " on link " + std::to_string(*linkId));
+                        });
+                    });
+            }
+        }
+    }
+    NS_LOG_INFO("TX duration = " << txDuration.As(Time::MS) << "  TXVECTOR = " << txVector << "\n");
+}
+
+void
+EmlsrOperationsTestBase::CheckMsdTimerRunning(Ptr<StaWifiMac> staMac,
+                                              uint8_t linkId,
+                                              bool isRunning,
+                                              const std::string& msg)
+{
+    auto time = staMac->GetEmlsrManager()->GetElapsedMediumSyncDelayTimer(linkId);
+    NS_TEST_ASSERT_MSG_EQ(time.has_value(),
+                          isRunning,
+                          Simulator::Now().As(Time::MS)
+                              << " Unexpected status for MediumSyncDelay timer on link " << +linkId
+                              << " " << msg);
+    if (auto phy = staMac->GetWifiPhy(linkId))
+    {
+        auto currThreshold = phy->GetCcaEdThreshold();
+        NS_TEST_EXPECT_MSG_EQ((static_cast<int8_t>(currThreshold) ==
+                               staMac->GetEmlsrManager()->GetMediumSyncOfdmEdThreshold()),
+                              isRunning,
+                              Simulator::Now().As(Time::MS)
+                                  << " Unexpected value (" << currThreshold
+                                  << ") for CCA ED threshold on link " << +linkId << " " << msg);
+    }
+}
+
+void
+EmlsrOperationsTestBase::CheckAuxPhysSleepMode(Ptr<StaWifiMac> staMac, bool sleep)
+{
+    if (!m_putAuxPhyToSleep)
+    {
+        // if m_putAuxPhyToSleep is false, aux PHYs must not be put to sleep
+        sleep = false;
+    }
+
+    for (const auto& phy : staMac->GetDevice()->GetPhys())
+    {
+        if (phy->GetPhyId() == m_mainPhyId)
+        {
+            continue; // do not check the main PHY
+        }
+
+        auto linkId = staMac->GetLinkForPhy(phy);
+
+        if (linkId.has_value() && !staMac->IsEmlsrLink(*linkId))
+        {
+            continue; // this PHY is not operating on an EMLSR link
+        }
+
+        if (!sleep)
+        {
+            NS_TEST_EXPECT_MSG_EQ(phy->IsStateSleep(),
+                                  false,
+                                  Simulator::Now().GetTimeStep()
+                                      << " PHY " << +phy->GetPhyId() << " is in unexpected state "
+                                      << phy->GetState()->GetState());
+            continue;
+        }
+
+        // if the PHY is in state TX or switching, sleep is postponed until their end
+        const auto delay =
+            (phy->IsStateTx() || phy->IsStateSwitching()) ? phy->GetDelayUntilIdle() : Time{0};
+
+        Simulator::Schedule(delay, [=, this]() {
+            NS_TEST_EXPECT_MSG_EQ(phy->IsStateSleep(),
+                                  true,
+                                  "PHY " << +phy->GetPhyId() << " is in unexpected state "
+                                         << phy->GetState()->GetState());
+        });
+    }
+}
+
+void
+EmlsrOperationsTestBase::MainPhySwitchInfoCallback(std::size_t index,
+                                                   const EmlsrMainPhySwitchTrace& info)
+{
+    m_traceInfo[index] = info.Clone();
+}
+
+void
+EmlsrOperationsTestBase::CheckMainPhyTraceInfo(std::size_t index,
+                                               std::string_view reason,
+                                               const std::optional<uint8_t>& fromLinkId,
+                                               uint8_t toLinkId,
+                                               bool checkFromLinkId,
+                                               bool checkToLinkId)
+{
+    const auto traceInfoIt = m_traceInfo.find(index);
+    NS_TEST_ASSERT_MSG_EQ((traceInfoIt != m_traceInfo.cend()),
+                          true,
+                          "Expected stored trace info: " << reason);
+    const auto& traceInfo = traceInfoIt->second;
+
+    NS_TEST_EXPECT_MSG_EQ(traceInfo->GetName(), reason, "Unexpected reason");
+
+    if (checkFromLinkId)
+    {
+        NS_TEST_ASSERT_MSG_EQ(traceInfo->fromLinkId.has_value(),
+                              fromLinkId.has_value(),
+                              "Unexpected stored from_link ID");
+        if (fromLinkId.has_value())
+        {
+            NS_TEST_EXPECT_MSG_EQ(+traceInfo->fromLinkId.value(),
+                                  +fromLinkId.value(),
+                                  "Unexpected from_link ID");
+        }
+    }
+
+    if (checkToLinkId)
+    {
+        NS_TEST_EXPECT_MSG_EQ(+traceInfo->toLinkId, +toLinkId, "Unexpected to_link ID");
+    }
+
+    m_traceInfo.erase(traceInfoIt);
+}
+
+void
+EmlsrOperationsTestBase::DoSetup()
+{
+    RngSeedManager::SetSeed(m_rngSeed);
+    RngSeedManager::SetRun(m_rngRun);
+    int64_t streamNumber = m_streamNo;
+
+    Config::SetDefault("ns3::WifiMac::MpduBufferSize", UintegerValue(64));
+    Config::SetDefault("ns3::EmlsrManager::InDeviceInterference", BooleanValue(true));
+    Config::SetDefault("ns3::EmlsrManager::PutAuxPhyToSleep", BooleanValue(m_putAuxPhyToSleep));
+
+    NodeContainer wifiApNode(1);
+    NodeContainer wifiStaNodes(m_nEmlsrStations);
+
+    WifiHelper wifi;
+    // wifi.EnableLogComponents ();
+    wifi.SetStandard(WIFI_STANDARD_80211be);
+    wifi.SetRemoteStationManager("ns3::ConstantRateWifiManager",
+                                 "DataMode",
+                                 StringValue("EhtMcs0"),
+                                 "ControlMode",
+                                 StringValue("HtMcs0"));
+    wifi.ConfigEhtOptions("EmlsrActivated",
+                          BooleanValue(true),
+                          "TransitionTimeout",
+                          TimeValue(m_transitionTimeout));
+
+    // MLDs are configured with three links
+    SpectrumWifiPhyHelper phyHelper(3);
+    phyHelper.SetPcapDataLinkType(WifiPhyHelper::DLT_IEEE802_11_RADIO);
+    phyHelper.SetPcapCaptureType(WifiPhyHelper::PcapCaptureType::PCAP_PER_LINK);
+
+    for (std::size_t id = 0; id < m_channelsStr.size(); ++id)
+    {
+        phyHelper.Set(id, "ChannelSettings", StringValue(m_channelsStr[id]));
+        phyHelper.AddChannel(CreateObject<MultiModelSpectrumChannel>(), m_freqRanges[id]);
+    }
+
+    WifiMacHelper mac;
+    mac.SetType("ns3::ApWifiMac",
+                "Ssid",
+                SsidValue(Ssid("ns-3-ssid")),
+                "BeaconGeneration",
+                BooleanValue(true));
+    mac.SetApEmlsrManager("ns3::AdvancedApEmlsrManager",
+                          "WaitTransDelayOnPsduRxError",
+                          BooleanValue(true));
+
+    NetDeviceContainer apDevice = wifi.Install(phyHelper, mac, wifiApNode);
+    m_apMac = DynamicCast<ApWifiMac>(DynamicCast<WifiNetDevice>(apDevice.Get(0))->GetMac());
+
+    mac.SetType("ns3::StaWifiMac",
+                "Ssid",
+                SsidValue(Ssid("wrong-ssid")),
+                "MaxMissedBeacons",
+                UintegerValue(1e6), // do not deassociate
+                "ActiveProbing",
+                BooleanValue(false));
+    mac.SetEmlsrManager("ns3::AdvancedEmlsrManager",
+                        "EmlsrLinkSet",
+                        AttributeContainerValue<UintegerValue>(m_linksToEnableEmlsrOn),
+                        "MainPhyId",
+                        UintegerValue(m_mainPhyId));
+
+    if (m_nPhysPerEmlsrDevice < 3)
+    {
+        phyHelper = SpectrumWifiPhyHelper(m_nPhysPerEmlsrDevice);
+        phyHelper.SetPcapDataLinkType(WifiPhyHelper::DLT_IEEE802_11_RADIO);
+        phyHelper.SetPcapCaptureType(WifiPhyHelper::PcapCaptureType::PCAP_PER_LINK);
+
+        for (std::size_t id = 0; id < m_nPhysPerEmlsrDevice; ++id)
+        {
+            phyHelper.Set(id, "ChannelSettings", StringValue(m_channelsStr[id]));
+            auto channel =
+                DynamicCast<MultiModelSpectrumChannel>(m_apMac->GetWifiPhy(id)->GetChannel());
+            NS_TEST_ASSERT_MSG_NE(channel,
+                                  nullptr,
+                                  "Channel " << +id << " is not a spectrum channel");
+            phyHelper.AddChannel(channel, m_freqRanges[id]);
+        }
+    }
+
+    NetDeviceContainer staDevices = wifi.Install(phyHelper, mac, wifiStaNodes);
+
+    for (uint32_t i = 0; i < staDevices.GetN(); i++)
+    {
+        auto device = DynamicCast<WifiNetDevice>(staDevices.Get(i));
+        auto staMac = DynamicCast<StaWifiMac>(device->GetMac());
+        auto emlsrManager = staMac->GetEmlsrManager();
+        NS_ASSERT_MSG(i < m_paddingDelay.size(), "Not enough padding delay values provided");
+        emlsrManager->SetAttribute("EmlsrPaddingDelay", TimeValue(m_paddingDelay.at(i)));
+        NS_ASSERT_MSG(i < m_transitionDelay.size(), "Not enough transition delay values provided");
+        emlsrManager->SetAttribute("EmlsrTransitionDelay", TimeValue(m_transitionDelay.at(i)));
+        emlsrManager->TraceConnectWithoutContext(
+            "MainPhySwitch",
+            MakeCallback(&EmlsrOperationsTestBase::MainPhySwitchInfoCallback, this).Bind(i));
+    }
+
+    if (m_nNonEmlsrStations > 0)
+    {
+        // create the other non-AP MLDs for which EMLSR is not activated
+        wifi.ConfigEhtOptions("EmlsrActivated", BooleanValue(false));
+        NodeContainer otherStaNodes(m_nNonEmlsrStations);
+        staDevices.Add(wifi.Install(phyHelper, mac, otherStaNodes));
+        wifiStaNodes.Add(otherStaNodes);
+    }
+
+    for (uint32_t i = 0; i < staDevices.GetN(); i++)
+    {
+        auto device = DynamicCast<WifiNetDevice>(staDevices.Get(i));
+        m_staMacs.push_back(DynamicCast<StaWifiMac>(device->GetMac()));
+    }
+
+    // Trace PSDUs passed to the PHY on AP MLD and non-AP MLDs
+    for (uint8_t phyId = 0; phyId < m_apMac->GetDevice()->GetNPhys(); phyId++)
+    {
+        Config::ConnectWithoutContext(
+            "/NodeList/0/DeviceList/*/$ns3::WifiNetDevice/Phys/" + std::to_string(phyId) +
+                "/PhyTxPsduBegin",
+            MakeCallback(&EmlsrOperationsTestBase::Transmit, this).Bind(m_apMac, phyId));
+    }
+    for (std::size_t i = 0; i < m_nEmlsrStations + m_nNonEmlsrStations; i++)
+    {
+        for (uint8_t phyId = 0; phyId < m_staMacs[i]->GetDevice()->GetNPhys(); phyId++)
+        {
+            Config::ConnectWithoutContext(
+                "/NodeList/" + std::to_string(i + 1) + "/DeviceList/*/$ns3::WifiNetDevice/Phys/" +
+                    std::to_string(phyId) + "/PhyTxPsduBegin",
+                MakeCallback(&EmlsrOperationsTestBase::Transmit, this).Bind(m_staMacs[i], phyId));
+        }
+    }
+
+    // Uncomment the lines below to write PCAP files
+    // phyHelper.EnablePcap("wifi-emlsr_AP", apDevice);
+    // phyHelper.EnablePcap("wifi-emlsr_STA", staDevices);
+
+    // Assign fixed streams to random variables in use
+    streamNumber += WifiHelper::AssignStreams(apDevice, streamNumber);
+    streamNumber += WifiHelper::AssignStreams(staDevices, streamNumber);
+
+    MobilityHelper mobility;
+    Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator>();
+
+    for (std::size_t id = 0; id <= m_nEmlsrStations + m_nNonEmlsrStations; id++)
+    {
+        // all non-AP MLDs are co-located
+        positionAlloc->Add(Vector(std::min<double>(id, 1), 0.0, 0.0));
+    }
+    mobility.SetPositionAllocator(positionAlloc);
+
+    mobility.SetMobilityModel("ns3::ConstantPositionMobilityModel");
+    mobility.Install(wifiApNode);
+    mobility.Install(wifiStaNodes);
+
+    // install packet socket on all nodes
+    PacketSocketHelper packetSocket;
+    packetSocket.Install(wifiApNode);
+    packetSocket.Install(wifiStaNodes);
+
+    // install a packet socket server on all nodes
+    for (auto nodeIt = NodeList::Begin(); nodeIt != NodeList::End(); nodeIt++)
+    {
+        PacketSocketAddress srvAddr;
+        auto device = DynamicCast<WifiNetDevice>((*nodeIt)->GetDevice(0));
+        NS_TEST_ASSERT_MSG_NE(device, nullptr, "Expected a WifiNetDevice");
+        srvAddr.SetSingleDevice(device->GetIfIndex());
+        srvAddr.SetProtocol(1);
+
+        auto server = CreateObject<PacketSocketServer>();
+        server->SetLocal(srvAddr);
+        (*nodeIt)->AddApplication(server);
+        server->SetStartTime(Seconds(0)); // now
+        server->SetStopTime(m_duration);
+    }
+
+    // set DL and UL packet sockets
+    for (const auto& staMac : m_staMacs)
+    {
+        m_dlSockets.emplace_back();
+        m_dlSockets.back().SetSingleDevice(m_apMac->GetDevice()->GetIfIndex());
+        m_dlSockets.back().SetPhysicalAddress(staMac->GetDevice()->GetAddress());
+        m_dlSockets.back().SetProtocol(1);
+
+        m_ulSockets.emplace_back();
+        m_ulSockets.back().SetSingleDevice(staMac->GetDevice()->GetIfIndex());
+        m_ulSockets.back().SetPhysicalAddress(m_apMac->GetDevice()->GetAddress());
+        m_ulSockets.back().SetProtocol(1);
+    }
+
+    m_startAid = m_apMac->GetNextAssociationId();
+
+    // schedule ML setup for one station at a time
+    m_apMac->TraceConnectWithoutContext(
+        "AssociatedSta",
+        MakeCallback(&EmlsrOperationsTestBase::StaAssociated, this));
+    for (const auto& [aci, ac] : wifiAcList)
+    {
+        m_apMac->GetQosTxop(aci)->TraceConnectWithoutContext(
+            "BaEstablished",
+            MakeCallback(&EmlsrOperationsTestBase::BaEstablishedDl, this));
+        for (std::size_t id = 0; id < m_nEmlsrStations + m_nNonEmlsrStations; ++id)
+        {
+            m_staMacs[id]->GetQosTxop(aci)->TraceConnectWithoutContext(
+                "BaEstablished",
+                MakeCallback(&EmlsrOperationsTestBase::BaEstablishedUl, this).Bind(id));
+        }
+    }
+    Simulator::Schedule(Seconds(0), [&]() { m_staMacs[0]->SetSsid(Ssid("ns-3-ssid")); });
+}
+
+Ptr<PacketSocketClient>
+EmlsrOperationsTestBase::GetApplication(TrafficDirection dir,
+                                        std::size_t staId,
+                                        std::size_t count,
+                                        std::size_t pktSize,
+                                        uint8_t priority) const
+{
+    auto client = CreateObject<PacketSocketClient>();
+    client->SetAttribute("PacketSize", UintegerValue(pktSize));
+    client->SetAttribute("MaxPackets", UintegerValue(count));
+    client->SetAttribute("Interval", TimeValue(MicroSeconds(0)));
+    client->SetAttribute("Priority", UintegerValue(priority));
+    client->SetRemote(dir == DOWNLINK ? m_dlSockets.at(staId) : m_ulSockets.at(staId));
+    client->SetStartTime(Seconds(0)); // now
+    client->SetStopTime(m_duration - Simulator::Now());
+
+    return client;
+}
+
+void
+EmlsrOperationsTestBase::StaAssociated(uint16_t aid, Mac48Address /* addr */)
+{
+    if (m_lastAid == aid)
+    {
+        // another STA of this non-AP MLD has already fired this callback
+        return;
+    }
+    m_lastAid = aid;
+
+    // wait some time (10ms) to allow the completion of association
+    const auto delay = MilliSeconds(10);
+
+    if (!m_establishBaDl.empty())
+    {
+        // trigger establishment of BA agreement with AP as originator
+        Simulator::Schedule(delay, [=, this]() {
+            m_apMac->GetDevice()->GetNode()->AddApplication(
+                GetApplication(DOWNLINK, aid - m_startAid, 4, 1000, m_establishBaDl.front()));
+        });
+    }
+    else if (!m_establishBaUl.empty())
+    {
+        // trigger establishment of BA agreement with AP as recipient
+        Simulator::Schedule(delay, [=, this]() {
+            m_staMacs[aid - m_startAid]->GetDevice()->GetNode()->AddApplication(
+                GetApplication(UPLINK, aid - m_startAid, 4, 1000, m_establishBaUl.front()));
+        });
+    }
+    else
+    {
+        Simulator::Schedule(delay, [=, this]() { SetSsid(aid - m_startAid + 1); });
+    }
+}
+
+void
+EmlsrOperationsTestBase::BaEstablishedDl(Mac48Address recipient,
+                                         uint8_t tid,
+                                         std::optional<Mac48Address> /* gcrGroup */)
+{
+    // wait some time (10ms) to allow the exchange of the data frame that triggered the Block Ack
+    const auto delay = MilliSeconds(10);
+
+    auto linkId = m_apMac->IsAssociated(recipient);
+    NS_TEST_ASSERT_MSG_EQ(linkId.has_value(), true, "No link for association of " << recipient);
+    auto aid = m_apMac->GetWifiRemoteStationManager(*linkId)->GetAssociationId(recipient);
+
+    if (auto it = std::find(m_establishBaDl.cbegin(), m_establishBaDl.cend(), tid);
+        it != m_establishBaDl.cend() && std::next(it) != m_establishBaDl.cend())
+    {
+        // trigger establishment of BA agreement with AP as originator
+        Simulator::Schedule(delay, [=, this]() {
+            m_apMac->GetDevice()->GetNode()->AddApplication(
+                GetApplication(DOWNLINK, aid - m_startAid, 4, 1000, *std::next(it)));
+        });
+    }
+    else if (!m_establishBaUl.empty())
+    {
+        // trigger establishment of BA agreement with AP as recipient
+        Simulator::Schedule(delay, [=, this]() {
+            m_staMacs[aid - m_startAid]->GetDevice()->GetNode()->AddApplication(
+                GetApplication(UPLINK, aid - m_startAid, 4, 1000, m_establishBaUl.front()));
+        });
+    }
+    else
+    {
+        Simulator::Schedule(delay, [=, this]() { SetSsid(aid - m_startAid + 1); });
+    }
+}
+
+void
+EmlsrOperationsTestBase::BaEstablishedUl(std::size_t index,
+                                         Mac48Address recipient,
+                                         uint8_t tid,
+                                         std::optional<Mac48Address> /* gcrGroup */)
+{
+    // wait some time (10ms) to allow the exchange of the data frame that triggered the Block Ack
+    const auto delay = MilliSeconds(10);
+
+    if (auto it = std::find(m_establishBaUl.cbegin(), m_establishBaUl.cend(), tid);
+        it != m_establishBaUl.cend() && std::next(it) != m_establishBaUl.cend())
+    {
+        // trigger establishment of BA agreement with AP as recipient
+        Simulator::Schedule(delay, [=, this]() {
+            m_staMacs[index]->GetDevice()->GetNode()->AddApplication(
+                GetApplication(UPLINK, index, 4, 1000, *std::next(it)));
+        });
+    }
+    else
+    {
+        Simulator::Schedule(delay, [=, this]() { SetSsid(index + 1); });
+    }
+}
+
+void
+EmlsrOperationsTestBase::SetSsid(std::size_t count)
+{
+    if (count < m_nEmlsrStations + m_nNonEmlsrStations)
+    {
+        // make the next STA start ML discovery & setup
+        m_staMacs[count]->SetSsid(Ssid("ns-3-ssid"));
+        return;
+    }
+    // all stations associated; start traffic if needed
+    StartTraffic();
+    // stop generation of beacon frames in order to avoid interference
+    m_apMac->SetAttribute("BeaconGeneration", BooleanValue(false));
+    // Set the short slot time on the 2.4 GHz link because it is not updated automatically given
+    // that no more Beacon frames are sent
+    for (std::size_t id = 0; id < m_nEmlsrStations + m_nNonEmlsrStations; ++id)
+    {
+        m_staMacs[id]->GetDevice()->GetPhy(0)->SetSlot(MicroSeconds(9));
+    }
+    // disconnect callbacks
+    m_apMac->TraceDisconnectWithoutContext(
+        "AssociatedSta",
+        MakeCallback(&EmlsrOperationsTestBase::StaAssociated, this));
+    for (const auto& [aci, ac] : wifiAcList)
+    {
+        m_apMac->GetQosTxop(aci)->TraceDisconnectWithoutContext(
+            "BaEstablished",
+            MakeCallback(&EmlsrOperationsTestBase::BaEstablishedDl, this));
+        for (std::size_t id = 0; id < m_nEmlsrStations + m_nNonEmlsrStations; ++id)
+        {
+            m_staMacs[id]->GetQosTxop(aci)->TraceDisconnectWithoutContext(
+                "BaEstablished",
+                MakeCallback(&EmlsrOperationsTestBase::BaEstablishedUl, this).Bind(id));
+        }
+    }
+}
+
+void
+EmlsrOperationsTestBase::CheckBlockedLink(Ptr<WifiMac> mac,
+                                          Mac48Address dest,
+                                          uint8_t linkId,
+                                          WifiQueueBlockedReason reason,
+                                          bool blocked,
+                                          std::string description,
+                                          bool testUnblockedForOtherReasons)
+{
+    WifiContainerQueueId queueId(WIFI_QOSDATA_QUEUE, WIFI_UNICAST, dest, 0);
+    auto mask = mac->GetMacQueueScheduler()->GetQueueLinkMask(AC_BE, queueId, linkId);
+    NS_TEST_EXPECT_MSG_EQ(mask.has_value(),
+                          true,
+                          description << ": Expected to find a mask for EMLSR link " << +linkId);
+    if (blocked)
+    {
+        NS_TEST_EXPECT_MSG_EQ(mask->test(static_cast<std::size_t>(reason)),
+                              true,
+                              description << ": Expected EMLSR link " << +linkId
+                                          << " to be blocked for reason " << reason);
+        if (testUnblockedForOtherReasons)
+        {
+            NS_TEST_EXPECT_MSG_EQ(mask->count(),
+                                  1,
+                                  description << ": Expected EMLSR link " << +linkId
+                                              << " to be blocked for one reason only");
+        }
+    }
+    else if (testUnblockedForOtherReasons)
+    {
+        NS_TEST_EXPECT_MSG_EQ(mask->none(),
+                              true,
+                              description << ": Expected EMLSR link " << +linkId
+                                          << " to be unblocked");
+    }
+    else
+    {
+        NS_TEST_EXPECT_MSG_EQ(mask->test(static_cast<std::size_t>(reason)),
+                              false,
+                              description << ": Expected EMLSR link " << +linkId
+                                          << " to be unblocked for reason " << reason);
+    }
+}
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/test/wifi-emlsr-test-base.h ns-3.45/src/wifi/test/wifi-emlsr-test-base.h
--- ns-3.44/src/wifi/test/wifi-emlsr-test-base.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.45/src/wifi/test/wifi-emlsr-test-base.h	2025-06-01 20:34:45.636702300 -0700
@@ -0,0 +1,272 @@
+/*
+ * Copyright (c) 2023 Universita' degli Studi di Napoli Federico II
+ *
+ * SPDX-License-Identifier: GPL-2.0-only
+ *
+ * Author: Stefano Avallone <stavallo@unina.it>
+ */
+
+#ifndef WIFI_EMLSR_TEST_H
+#define WIFI_EMLSR_TEST_H
+
+#include "ns3/adhoc-wifi-mac.h"
+#include "ns3/ap-wifi-mac.h"
+#include "ns3/error-model.h"
+#include "ns3/header-serialization-test.h"
+#include "ns3/packet-socket-address.h"
+#include "ns3/packet-socket-client.h"
+#include "ns3/sta-wifi-mac.h"
+#include "ns3/test.h"
+#include "ns3/wifi-mac-queue-scheduler.h"
+#include "ns3/wifi-mac.h"
+#include "ns3/wifi-ppdu.h"
+#include "ns3/wifi-psdu.h"
+
+#include <array>
+#include <map>
+#include <memory>
+#include <optional>
+#include <set>
+#include <vector>
+
+using namespace ns3;
+using namespace std::string_literals;
+
+// forward declaration
+namespace ns3
+{
+struct EmlsrMainPhySwitchTrace;
+}
+
+/**
+ * @ingroup wifi-test
+ * @ingroup tests
+ *
+ * @brief Base class for EMLSR Operations tests
+ *
+ * This base class setups and configures one AP MLD, a variable number of non-AP MLDs with
+ * EMLSR activated and a variable number of non-AP MLD with EMLSR deactivated. Every MLD has
+ * three links, each operating on a distinct PHY band (2.4 GHz, 5 GHz and 6 GHz). Therefore,
+ * it is expected that three links are setup by the non-AP MLD(s). The values for the Padding
+ * Delay, the Transition Delay and the Transition Timeout are provided as argument to the
+ * constructor of this class, along with the IDs of the links on which EMLSR mode must be
+ * enabled for the non-AP MLDs (this information is used to set the EmlsrLinkSet attribute
+ * of the DefaultEmlsrManager installed on the non-AP MLDs).
+ */
+class EmlsrOperationsTestBase : public TestCase
+{
+  public:
+    /**
+     * Constructor
+     *
+     * @param name The name of the new TestCase created
+     */
+    EmlsrOperationsTestBase(const std::string& name);
+    ~EmlsrOperationsTestBase() override = default;
+
+    /// Enumeration for traffic directions
+    enum TrafficDirection : uint8_t
+    {
+        DOWNLINK = 0,
+        UPLINK
+    };
+
+  protected:
+    /**
+     * Callback invoked when a FEM passes PSDUs to the PHY.
+     *
+     * @param mac the MAC transmitting the PSDUs
+     * @param phyId the ID of the PHY transmitting the PSDUs
+     * @param psduMap the PSDU map
+     * @param txVector the TX vector
+     * @param txPowerW the tx power in Watts
+     */
+    virtual void Transmit(Ptr<WifiMac> mac,
+                          uint8_t phyId,
+                          WifiConstPsduMap psduMap,
+                          WifiTxVector txVector,
+                          double txPowerW);
+
+    /**
+     * @param dir the traffic direction (downlink/uplink)
+     * @param staId the index (starting at 0) of the non-AP MLD generating/receiving packets
+     * @param count the number of packets to generate
+     * @param pktSize the size of the packets to generate
+     * @param priority user priority for generated packets
+     * @return an application generating the given number packets of the given size from/to the
+     *         AP MLD to/from the given non-AP MLD
+     */
+    Ptr<PacketSocketClient> GetApplication(TrafficDirection dir,
+                                           std::size_t staId,
+                                           std::size_t count,
+                                           std::size_t pktSize,
+                                           uint8_t priority = 0) const;
+
+    /**
+     * Check whether QoS data unicast transmissions addressed to the given destination on the
+     * given link are blocked or unblocked for the given reason on the given device.
+     *
+     * @param mac the MAC of the given device
+     * @param dest the MAC address of the given destination
+     * @param linkId the ID of the given link
+     * @param reason the reason for blocking transmissions to test
+     * @param blocked whether transmissions are blocked for the given reason
+     * @param description text indicating when this check is performed
+     * @param testUnblockedForOtherReasons whether to test if transmissions are unblocked for
+     *                                     all the reasons other than the one provided
+     */
+    void CheckBlockedLink(Ptr<WifiMac> mac,
+                          Mac48Address dest,
+                          uint8_t linkId,
+                          WifiQueueBlockedReason reason,
+                          bool blocked,
+                          std::string description,
+                          bool testUnblockedForOtherReasons = true);
+
+    /**
+     * Check whether the MediumSyncDelay timer is running on the given link of the given device.
+     *
+     * @param staMac the MAC of the given device
+     * @param linkId the ID of the given link
+     * @param isRunning whether the MediumSyncDelay timer is running
+     * @param msg message to print in case the check failed
+     */
+    void CheckMsdTimerRunning(Ptr<StaWifiMac> staMac,
+                              uint8_t linkId,
+                              bool isRunning,
+                              const std::string& msg);
+
+    /**
+     * Check whether aux PHYs of the given device are in sleep mode/awake.
+     *
+     * @param staMac the MAC of the given device
+     * @param sleep whether aux PHYs should be in sleep mode
+     */
+    void CheckAuxPhysSleepMode(Ptr<StaWifiMac> staMac, bool sleep);
+
+    /**
+     * Callback connected to the EMLSR Manager MainPhySwitch trace source.
+     *
+     * @param index the index of the EMLSR client whose main PHY switch event is logged
+     * @param info the information associated with the main PHY switch event
+     */
+    virtual void MainPhySwitchInfoCallback(std::size_t index, const EmlsrMainPhySwitchTrace& info);
+
+    /**
+     * Check information provided by the EMLSR Manager MainPhySwitch trace.
+     *
+     * @param index the ID of the EMLSR client this check refers to
+     * @param reason the reason for main PHY to switch
+     * @param fromLinkId the ID of the link the main PHY is moving from (if any)
+     * @param toLinkId the ID of the link the main PHY is moving to
+     * @param checkFromLinkId whether to check the given fromLinkId value
+     * @param checkToLinkId whether to check the given toLinkId value
+     */
+    void CheckMainPhyTraceInfo(std::size_t index,
+                               std::string_view reason,
+                               const std::optional<uint8_t>& fromLinkId,
+                               uint8_t toLinkId,
+                               bool checkFromLinkId = true,
+                               bool checkToLinkId = true);
+
+    void DoSetup() override;
+
+    /// Information about transmitted frames
+    struct FrameInfo
+    {
+        Time startTx;             ///< TX start time
+        WifiConstPsduMap psduMap; ///< transmitted PSDU map
+        WifiTxVector txVector;    ///< TXVECTOR
+        uint8_t linkId;           ///< link ID
+        uint8_t phyId;            ///< ID of the transmitting PHY
+    };
+
+    /// array of strings defining the channels for the MLD links
+    std::array<std::string, 3> m_channelsStr{"{2, 0, BAND_2_4GHZ, 0}"s,
+                                             "{36, 0, BAND_5GHZ, 0}"s,
+                                             "{1, 0, BAND_6GHZ, 0}"s};
+
+    /// array of frequency ranges for MLD links
+    const std::array<FrequencyRange, 3> m_freqRanges{WIFI_SPECTRUM_2_4_GHZ,
+                                                     WIFI_SPECTRUM_5_GHZ,
+                                                     WIFI_SPECTRUM_6_GHZ};
+
+    uint32_t m_rngSeed{1};                    //!< RNG seed value
+    uint64_t m_rngRun{1};                     //!< RNG run value
+    int64_t m_streamNo{5};                    //!< RNG stream number
+    uint8_t m_mainPhyId{0};                   //!< ID of the main PHY
+    std::set<uint8_t> m_linksToEnableEmlsrOn; /**< IDs of the links on which EMLSR mode has to
+                                                   be enabled */
+    std::size_t m_nPhysPerEmlsrDevice{3};     //!< number of PHYs per EMLSR client
+    std::size_t m_nEmlsrStations{1};          ///< number of stations to create that activate EMLSR
+    std::size_t m_nNonEmlsrStations{0};       /**< number of stations to create that do not
+                                                activate EMLSR */
+    Time m_transitionTimeout{MicroSeconds(128)}; ///< Transition Timeout advertised by the AP MLD
+    std::vector<Time> m_paddingDelay{
+        {MicroSeconds(32)}}; ///< Padding Delay advertised by the non-AP MLD
+    std::vector<Time> m_transitionDelay{
+        {MicroSeconds(16)}};                ///< Transition Delay advertised by the non-AP MLD
+    std::vector<uint8_t> m_establishBaDl{}; /**< the TIDs for which BA needs to be established
+                                                 with the AP as originator */
+    std::vector<uint8_t> m_establishBaUl{}; /**< the TIDs for which BA needs to be established
+                                                 with the AP as recipient */
+    bool m_putAuxPhyToSleep{false};   //!< whether aux PHYs are put to sleep during DL/UL TXOPs
+    std::vector<FrameInfo> m_txPsdus; ///< transmitted PSDUs
+    Ptr<ApWifiMac> m_apMac;           ///< AP wifi MAC
+    std::vector<Ptr<StaWifiMac>> m_staMacs;       ///< MACs of the non-AP MLDs
+    std::vector<PacketSocketAddress> m_dlSockets; ///< packet socket address for DL traffic
+    std::vector<PacketSocketAddress> m_ulSockets; ///< packet socket address for UL traffic
+    uint16_t m_startAid{1};                       ///< first AID to allocate to stations
+    uint16_t m_lastAid{0};                        ///< AID of last associated station
+    Time m_duration{0};                           ///< simulation duration
+    std::map<std::size_t, std::shared_ptr<EmlsrMainPhySwitchTrace>>
+        m_traceInfo; ///< EMLSR client ID-indexed map of trace info from last main PHY switch
+
+  private:
+    /**
+     * Callback connected to the ApWifiMac's AssociatedSta trace source.
+     * Start generating traffic (if needed) when all stations are associated.
+     *
+     * @param aid the AID assigned to the previous associated STA
+     */
+    void StaAssociated(uint16_t aid, Mac48Address /* addr */);
+
+    /**
+     * Callback connected to the QosTxop's BaEstablished trace source of the AP's BE AC.
+     *
+     * @param recipient the recipient of the established Block Ack agreement
+     * @param tid the TID
+     */
+    void BaEstablishedDl(Mac48Address recipient,
+                         uint8_t tid,
+                         std::optional<Mac48Address> /* gcrGroup */);
+
+    /**
+     * Callback connected to the QosTxop's BaEstablished trace source of a STA's BE AC.
+     *
+     * @param index the index of the STA which the callback is connected to
+     * @param recipient the recipient of the established Block Ack agreement
+     * @param tid the TID
+     */
+    void BaEstablishedUl(std::size_t index,
+                         Mac48Address recipient,
+                         uint8_t tid,
+                         std::optional<Mac48Address> /* gcrGroup */);
+
+    /**
+     * Set the SSID on the next station that needs to start the association procedure, or start
+     * traffic if no other station left.
+     *
+     * @param count the number of STAs that completed the association procedure
+     */
+    void SetSsid(std::size_t count);
+
+    /**
+     * Start the generation of traffic (needs to be overridden)
+     */
+    virtual void StartTraffic()
+    {
+    }
+};
+
+#endif /* WIFI_EMLSR_TEST_H */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/test/wifi-emlsr-test.cc ns-3.45/src/wifi/test/wifi-emlsr-test.cc
--- ns-3.44/src/wifi/test/wifi-emlsr-test.cc	2025-03-09 16:55:49.807372600 -0700
+++ ns-3.45/src/wifi/test/wifi-emlsr-test.cc	1969-12-31 16:00:00.000000000 -0800
@@ -1,5044 +0,0 @@
-/*
- * Copyright (c) 2023 Universita' degli Studi di Napoli Federico II
- *
- * SPDX-License-Identifier: GPL-2.0-only
- *
- * Author: Stefano Avallone <stavallo@unina.it>
- */
-
-#include "wifi-emlsr-test.h"
-
-#include "ns3/attribute-container.h"
-#include "ns3/boolean.h"
-#include "ns3/config.h"
-#include "ns3/ctrl-headers.h"
-#include "ns3/eht-configuration.h"
-#include "ns3/eht-frame-exchange-manager.h"
-#include "ns3/emlsr-manager.h"
-#include "ns3/log.h"
-#include "ns3/mgt-action-headers.h"
-#include "ns3/mobility-helper.h"
-#include "ns3/multi-model-spectrum-channel.h"
-#include "ns3/node-list.h"
-#include "ns3/packet-socket-helper.h"
-#include "ns3/packet-socket-server.h"
-#include "ns3/qos-txop.h"
-#include "ns3/rng-seed-manager.h"
-#include "ns3/rr-multi-user-scheduler.h"
-#include "ns3/simulator.h"
-#include "ns3/spectrum-wifi-helper.h"
-#include "ns3/spectrum-wifi-phy.h"
-#include "ns3/string.h"
-#include "ns3/wifi-net-device.h"
-
-#include <algorithm>
-#include <functional>
-#include <iomanip>
-
-using namespace ns3;
-
-NS_LOG_COMPONENT_DEFINE("WifiEmlsrTest");
-
-EmlOperatingModeNotificationTest::EmlOperatingModeNotificationTest()
-    : HeaderSerializationTestCase(
-          "Check serialization and deserialization of the EML Operating Mode Notification frame")
-{
-}
-
-void
-EmlOperatingModeNotificationTest::DoRun()
-{
-    MgtEmlOmn frame;
-
-    // Both EMLSR Mode and EMLMR Mode subfields set to 0 (no link bitmap);
-    TestHeaderSerialization(frame);
-
-    frame.m_emlControl.emlsrMode = 1;
-    frame.SetLinkIdInBitmap(0);
-    frame.SetLinkIdInBitmap(5);
-    frame.SetLinkIdInBitmap(15);
-
-    // Adding Link Bitmap
-    TestHeaderSerialization(frame);
-
-    NS_TEST_EXPECT_MSG_EQ((frame.GetLinkBitmap() == std::list<uint8_t>{0, 5, 15}),
-                          true,
-                          "Unexpected link bitmap");
-
-    auto padding = MicroSeconds(64);
-    auto transition = MicroSeconds(128);
-
-    frame.m_emlControl.emlsrParamUpdateCtrl = 1;
-    frame.m_emlsrParamUpdate = MgtEmlOmn::EmlsrParamUpdate{};
-    frame.m_emlsrParamUpdate->paddingDelay = CommonInfoBasicMle::EncodeEmlsrPaddingDelay(padding);
-    frame.m_emlsrParamUpdate->transitionDelay =
-        CommonInfoBasicMle::EncodeEmlsrTransitionDelay(transition);
-
-    // Adding the EMLSR Parameter Update field
-    TestHeaderSerialization(frame);
-
-    NS_TEST_EXPECT_MSG_EQ(
-        CommonInfoBasicMle::DecodeEmlsrPaddingDelay(frame.m_emlsrParamUpdate->paddingDelay),
-        padding,
-        "Unexpected EMLSR Padding Delay");
-    NS_TEST_EXPECT_MSG_EQ(
-        CommonInfoBasicMle::DecodeEmlsrTransitionDelay(frame.m_emlsrParamUpdate->transitionDelay),
-        transition,
-        "Unexpected EMLSR Transition Delay");
-}
-
-EmlsrOperationsTestBase::EmlsrOperationsTestBase(const std::string& name)
-    : TestCase(name)
-{
-}
-
-void
-EmlsrOperationsTestBase::Transmit(Ptr<WifiMac> mac,
-                                  uint8_t phyId,
-                                  WifiConstPsduMap psduMap,
-                                  WifiTxVector txVector,
-                                  double txPowerW)
-{
-    auto linkId = mac->GetLinkForPhy(phyId);
-    NS_TEST_ASSERT_MSG_EQ(linkId.has_value(), true, "No link found for PHY ID " << +phyId);
-    m_txPsdus.push_back({Simulator::Now(), psduMap, txVector, *linkId, phyId});
-
-    auto txDuration =
-        WifiPhy::CalculateTxDuration(psduMap, txVector, mac->GetWifiPhy(*linkId)->GetPhyBand());
-
-    for (const auto& [aid, psdu] : psduMap)
-    {
-        std::stringstream ss;
-        ss << std::setprecision(10) << "PSDU #" << m_txPsdus.size() << " Link ID "
-           << +linkId.value() << " Phy ID " << +phyId << " " << psdu->GetHeader(0).GetTypeString();
-        if (psdu->GetHeader(0).IsAction())
-        {
-            ss << " ";
-            WifiActionHeader actionHdr;
-            psdu->GetPayload(0)->PeekHeader(actionHdr);
-            actionHdr.Print(ss);
-        }
-        ss << " #MPDUs " << psdu->GetNMpdus() << " duration/ID " << psdu->GetHeader(0).GetDuration()
-           << " RA = " << psdu->GetAddr1() << " TA = " << psdu->GetAddr2()
-           << " ADDR3 = " << psdu->GetHeader(0).GetAddr3()
-           << " ToDS = " << psdu->GetHeader(0).IsToDs()
-           << " FromDS = " << psdu->GetHeader(0).IsFromDs();
-        if (psdu->GetHeader(0).IsQosData())
-        {
-            ss << " seqNo = {";
-            for (auto& mpdu : *PeekPointer(psdu))
-            {
-                ss << mpdu->GetHeader().GetSequenceNumber() << ",";
-            }
-            ss << "} TID = " << +psdu->GetHeader(0).GetQosTid();
-        }
-        NS_LOG_INFO(ss.str());
-
-        // if this frame is transmitted by an EMLSR client on an EMLSR links, in-device interference
-        // is configured and the TX duration exceeds the threshold (72us), MediumSyncDelay timer is
-        // (re)started at the end of the transmission
-        if (auto staMac = DynamicCast<StaWifiMac>(mac);
-            staMac && staMac->IsEmlsrLink(*linkId) &&
-            staMac->GetEmlsrManager()->GetMediumSyncDuration().IsStrictlyPositive())
-        {
-            const auto mustStartMsd =
-                staMac->GetEmlsrManager()->GetInDeviceInterference() &&
-                txDuration > MicroSeconds(EmlsrManager::MEDIUM_SYNC_THRESHOLD_USEC);
-
-            for (auto id : staMac->GetLinkIds())
-            {
-                // timer started on EMLSR links other than the link on which TX is starting,
-                // provided that a PHY is operating on the link and MediumSyncDuration is not null
-                if (!staMac->IsEmlsrLink(id) || id == *linkId || staMac->GetWifiPhy(id) == nullptr)
-                {
-                    continue;
-                }
-                Simulator::Schedule(
-                    txDuration - TimeStep(1),
-                    [=, hdrType = psdu->GetHeader(0).GetTypeString(), this]() {
-                        // check if MSD timer was running on the link before completing transmission
-                        bool msdWasRunning = staMac->GetEmlsrManager()
-                                                 ->GetElapsedMediumSyncDelayTimer(id)
-                                                 .has_value();
-                        if (auto phy = staMac->GetWifiPhy(id);
-                            !msdWasRunning && !mustStartMsd && phy && phy->IsStateSleep())
-                        {
-                            // if the MSD timer was not running before the end of the TX, it is not
-                            // expected to be started and the PHY operating on this link is
-                            // sleeping, do not check that the MSD timer is not started after the
-                            // end of the TX, because it may be started because of the sleep period
-                            // of the aux PHY
-                            return;
-                        }
-                        Simulator::Schedule(TimeStep(2), [=, this]() {
-                            CheckMsdTimerRunning(staMac,
-                                                 id,
-                                                 (msdWasRunning || mustStartMsd),
-                                                 std::string("after transmitting ") + hdrType +
-                                                     " on link " + std::to_string(*linkId));
-                        });
-                    });
-            }
-        }
-    }
-    NS_LOG_INFO("TX duration = " << txDuration.As(Time::MS) << "  TXVECTOR = " << txVector << "\n");
-}
-
-void
-EmlsrOperationsTestBase::CheckMsdTimerRunning(Ptr<StaWifiMac> staMac,
-                                              uint8_t linkId,
-                                              bool isRunning,
-                                              const std::string& msg)
-{
-    auto time = staMac->GetEmlsrManager()->GetElapsedMediumSyncDelayTimer(linkId);
-    NS_TEST_ASSERT_MSG_EQ(time.has_value(),
-                          isRunning,
-                          Simulator::Now().As(Time::MS)
-                              << " Unexpected status for MediumSyncDelay timer on link " << +linkId
-                              << " " << msg);
-    if (auto phy = staMac->GetWifiPhy(linkId))
-    {
-        auto currThreshold = phy->GetCcaEdThreshold();
-        NS_TEST_EXPECT_MSG_EQ((static_cast<int8_t>(currThreshold) ==
-                               staMac->GetEmlsrManager()->GetMediumSyncOfdmEdThreshold()),
-                              isRunning,
-                              Simulator::Now().As(Time::MS)
-                                  << " Unexpected value (" << currThreshold
-                                  << ") for CCA ED threshold on link " << +linkId << " " << msg);
-    }
-}
-
-void
-EmlsrOperationsTestBase::CheckAuxPhysSleepMode(Ptr<StaWifiMac> staMac, bool sleep)
-{
-    if (!m_putAuxPhyToSleep)
-    {
-        // if m_putAuxPhyToSleep is false, aux PHYs must not be put to sleep
-        sleep = false;
-    }
-
-    for (const auto& phy : staMac->GetDevice()->GetPhys())
-    {
-        if (phy->GetPhyId() == m_mainPhyId)
-        {
-            continue; // do not check the main PHY
-        }
-
-        auto linkId = staMac->GetLinkForPhy(phy);
-
-        if (linkId.has_value() && !staMac->IsEmlsrLink(*linkId))
-        {
-            continue; // this PHY is not operating on an EMLSR link
-        }
-
-        if (!sleep)
-        {
-            NS_TEST_EXPECT_MSG_EQ(phy->IsStateSleep(),
-                                  false,
-                                  Simulator::Now().GetTimeStep()
-                                      << " PHY " << +phy->GetPhyId() << " is in unexpected state "
-                                      << phy->GetState()->GetState());
-            continue;
-        }
-
-        // if the PHY is in state TX or switching, sleep is postponed until their end
-        const auto delay =
-            (phy->IsStateTx() || phy->IsStateSwitching()) ? phy->GetDelayUntilIdle() : Time{0};
-
-        Simulator::Schedule(delay, [=, this]() {
-            NS_TEST_EXPECT_MSG_EQ(phy->IsStateSleep(),
-                                  true,
-                                  "PHY " << +phy->GetPhyId() << " is in unexpected state "
-                                         << phy->GetState()->GetState());
-        });
-    }
-}
-
-void
-EmlsrOperationsTestBase::MainPhySwitchInfoCallback(std::size_t index,
-                                                   const EmlsrMainPhySwitchTrace& info)
-{
-    m_traceInfo[index] = info.Clone();
-}
-
-void
-EmlsrOperationsTestBase::CheckMainPhyTraceInfo(std::size_t index,
-                                               std::string_view reason,
-                                               const std::optional<uint8_t>& fromLinkId,
-                                               uint8_t toLinkId,
-                                               bool checkFromLinkId,
-                                               bool checkToLinkId)
-{
-    const auto traceInfoIt = m_traceInfo.find(index);
-    NS_TEST_ASSERT_MSG_EQ((traceInfoIt != m_traceInfo.cend()), true, "Expected stored trace info");
-    const auto& traceInfo = traceInfoIt->second;
-
-    NS_TEST_EXPECT_MSG_EQ(traceInfo->GetName(), reason, "Unexpected reason");
-
-    if (checkFromLinkId)
-    {
-        NS_TEST_ASSERT_MSG_EQ(traceInfo->fromLinkId.has_value(),
-                              fromLinkId.has_value(),
-                              "Unexpected stored from_link ID");
-        if (fromLinkId.has_value())
-        {
-            NS_TEST_EXPECT_MSG_EQ(+traceInfo->fromLinkId.value(),
-                                  +fromLinkId.value(),
-                                  "Unexpected from_link ID");
-        }
-    }
-
-    if (checkToLinkId)
-    {
-        NS_TEST_EXPECT_MSG_EQ(+traceInfo->toLinkId, +toLinkId, "Unexpected to_link ID");
-    }
-
-    m_traceInfo.erase(traceInfoIt);
-}
-
-void
-EmlsrOperationsTestBase::DoSetup()
-{
-    RngSeedManager::SetSeed(1);
-    RngSeedManager::SetRun(1);
-    int64_t streamNumber = 100;
-
-    Config::SetDefault("ns3::WifiMac::MpduBufferSize", UintegerValue(64));
-    Config::SetDefault("ns3::EmlsrManager::InDeviceInterference", BooleanValue(true));
-    Config::SetDefault("ns3::EmlsrManager::PutAuxPhyToSleep", BooleanValue(m_putAuxPhyToSleep));
-
-    NodeContainer wifiApNode(1);
-    NodeContainer wifiStaNodes(m_nEmlsrStations);
-
-    WifiHelper wifi;
-    // wifi.EnableLogComponents ();
-    wifi.SetStandard(WIFI_STANDARD_80211be);
-    wifi.SetRemoteStationManager("ns3::ConstantRateWifiManager",
-                                 "DataMode",
-                                 StringValue("EhtMcs0"),
-                                 "ControlMode",
-                                 StringValue("HtMcs0"));
-    wifi.ConfigEhtOptions("EmlsrActivated",
-                          BooleanValue(true),
-                          "TransitionTimeout",
-                          TimeValue(m_transitionTimeout));
-
-    // MLDs are configured with three links
-    SpectrumWifiPhyHelper phyHelper(3);
-    phyHelper.SetPcapDataLinkType(WifiPhyHelper::DLT_IEEE802_11_RADIO);
-    phyHelper.SetPcapCaptureType(WifiPhyHelper::PcapCaptureType::PCAP_PER_LINK);
-    phyHelper.Set(0, "ChannelSettings", StringValue("{2, 0, BAND_2_4GHZ, 0}"));
-    phyHelper.Set(1, "ChannelSettings", StringValue("{36, 0, BAND_5GHZ, 0}"));
-    phyHelper.Set(2, "ChannelSettings", StringValue("{1, 0, BAND_6GHZ, 0}"));
-    // Add three spectrum channels to use multi-RF interface
-    phyHelper.AddChannel(CreateObject<MultiModelSpectrumChannel>(), WIFI_SPECTRUM_2_4_GHZ);
-    phyHelper.AddChannel(CreateObject<MultiModelSpectrumChannel>(), WIFI_SPECTRUM_5_GHZ);
-    phyHelper.AddChannel(CreateObject<MultiModelSpectrumChannel>(), WIFI_SPECTRUM_6_GHZ);
-
-    WifiMacHelper mac;
-    mac.SetType("ns3::ApWifiMac",
-                "Ssid",
-                SsidValue(Ssid("ns-3-ssid")),
-                "BeaconGeneration",
-                BooleanValue(true));
-    mac.SetApEmlsrManager("ns3::AdvancedApEmlsrManager",
-                          "WaitTransDelayOnPsduRxError",
-                          BooleanValue(true));
-
-    NetDeviceContainer apDevice = wifi.Install(phyHelper, mac, wifiApNode);
-
-    mac.SetType("ns3::StaWifiMac",
-                "Ssid",
-                SsidValue(Ssid("wrong-ssid")),
-                "MaxMissedBeacons",
-                UintegerValue(1e6), // do not deassociate
-                "ActiveProbing",
-                BooleanValue(false));
-    mac.SetEmlsrManager("ns3::AdvancedEmlsrManager",
-                        "EmlsrLinkSet",
-                        AttributeContainerValue<UintegerValue>(m_linksToEnableEmlsrOn),
-                        "MainPhyId",
-                        UintegerValue(m_mainPhyId));
-
-    NetDeviceContainer staDevices = wifi.Install(phyHelper, mac, wifiStaNodes);
-
-    m_apMac = DynamicCast<ApWifiMac>(DynamicCast<WifiNetDevice>(apDevice.Get(0))->GetMac());
-
-    for (uint32_t i = 0; i < staDevices.GetN(); i++)
-    {
-        auto device = DynamicCast<WifiNetDevice>(staDevices.Get(i));
-        auto staMac = DynamicCast<StaWifiMac>(device->GetMac());
-        auto emlsrManager = staMac->GetEmlsrManager();
-        NS_ASSERT_MSG(i < m_paddingDelay.size(), "Not enough padding delay values provided");
-        emlsrManager->SetAttribute("EmlsrPaddingDelay", TimeValue(m_paddingDelay.at(i)));
-        NS_ASSERT_MSG(i < m_transitionDelay.size(), "Not enough transition delay values provided");
-        emlsrManager->SetAttribute("EmlsrTransitionDelay", TimeValue(m_transitionDelay.at(i)));
-        emlsrManager->TraceConnectWithoutContext(
-            "MainPhySwitch",
-            MakeCallback(&EmlsrOperationsTestBase::MainPhySwitchInfoCallback, this).Bind(i));
-    }
-
-    if (m_nNonEmlsrStations > 0)
-    {
-        // create the other non-AP MLDs for which EMLSR is not activated
-        wifi.ConfigEhtOptions("EmlsrActivated", BooleanValue(false));
-        NodeContainer otherStaNodes(m_nNonEmlsrStations);
-        staDevices.Add(wifi.Install(phyHelper, mac, otherStaNodes));
-        wifiStaNodes.Add(otherStaNodes);
-    }
-
-    for (uint32_t i = 0; i < staDevices.GetN(); i++)
-    {
-        auto device = DynamicCast<WifiNetDevice>(staDevices.Get(i));
-        m_staMacs.push_back(DynamicCast<StaWifiMac>(device->GetMac()));
-    }
-
-    // Trace PSDUs passed to the PHY on AP MLD and non-AP MLDs
-    for (uint8_t phyId = 0; phyId < m_apMac->GetDevice()->GetNPhys(); phyId++)
-    {
-        Config::ConnectWithoutContext(
-            "/NodeList/0/DeviceList/*/$ns3::WifiNetDevice/Phys/" + std::to_string(phyId) +
-                "/PhyTxPsduBegin",
-            MakeCallback(&EmlsrOperationsTestBase::Transmit, this).Bind(m_apMac, phyId));
-    }
-    for (std::size_t i = 0; i < m_nEmlsrStations + m_nNonEmlsrStations; i++)
-    {
-        for (uint8_t phyId = 0; phyId < m_staMacs[i]->GetDevice()->GetNPhys(); phyId++)
-        {
-            Config::ConnectWithoutContext(
-                "/NodeList/" + std::to_string(i + 1) + "/DeviceList/*/$ns3::WifiNetDevice/Phys/" +
-                    std::to_string(phyId) + "/PhyTxPsduBegin",
-                MakeCallback(&EmlsrOperationsTestBase::Transmit, this).Bind(m_staMacs[i], phyId));
-        }
-    }
-
-    // Uncomment the lines below to write PCAP files
-    // phyHelper.EnablePcap("wifi-emlsr_AP", apDevice);
-    // phyHelper.EnablePcap("wifi-emlsr_STA", staDevices);
-
-    // Assign fixed streams to random variables in use
-    streamNumber += WifiHelper::AssignStreams(apDevice, streamNumber);
-    streamNumber += WifiHelper::AssignStreams(staDevices, streamNumber);
-
-    MobilityHelper mobility;
-    Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator>();
-
-    for (std::size_t id = 0; id <= m_nEmlsrStations + m_nNonEmlsrStations; id++)
-    {
-        // all non-AP MLDs are co-located
-        positionAlloc->Add(Vector(std::min<double>(id, 1), 0.0, 0.0));
-    }
-    mobility.SetPositionAllocator(positionAlloc);
-
-    mobility.SetMobilityModel("ns3::ConstantPositionMobilityModel");
-    mobility.Install(wifiApNode);
-    mobility.Install(wifiStaNodes);
-
-    // install packet socket on all nodes
-    PacketSocketHelper packetSocket;
-    packetSocket.Install(wifiApNode);
-    packetSocket.Install(wifiStaNodes);
-
-    // install a packet socket server on all nodes
-    for (auto nodeIt = NodeList::Begin(); nodeIt != NodeList::End(); nodeIt++)
-    {
-        PacketSocketAddress srvAddr;
-        auto device = DynamicCast<WifiNetDevice>((*nodeIt)->GetDevice(0));
-        NS_TEST_ASSERT_MSG_NE(device, nullptr, "Expected a WifiNetDevice");
-        srvAddr.SetSingleDevice(device->GetIfIndex());
-        srvAddr.SetProtocol(1);
-
-        auto server = CreateObject<PacketSocketServer>();
-        server->SetLocal(srvAddr);
-        (*nodeIt)->AddApplication(server);
-        server->SetStartTime(Seconds(0)); // now
-        server->SetStopTime(m_duration);
-    }
-
-    // set DL and UL packet sockets
-    for (const auto& staMac : m_staMacs)
-    {
-        m_dlSockets.emplace_back();
-        m_dlSockets.back().SetSingleDevice(m_apMac->GetDevice()->GetIfIndex());
-        m_dlSockets.back().SetPhysicalAddress(staMac->GetDevice()->GetAddress());
-        m_dlSockets.back().SetProtocol(1);
-
-        m_ulSockets.emplace_back();
-        m_ulSockets.back().SetSingleDevice(staMac->GetDevice()->GetIfIndex());
-        m_ulSockets.back().SetPhysicalAddress(m_apMac->GetDevice()->GetAddress());
-        m_ulSockets.back().SetProtocol(1);
-    }
-
-    // schedule ML setup for one station at a time
-    m_apMac->TraceConnectWithoutContext("AssociatedSta",
-                                        MakeCallback(&EmlsrOperationsTestBase::SetSsid, this));
-    Simulator::Schedule(Seconds(0), [&]() { m_staMacs[0]->SetSsid(Ssid("ns-3-ssid")); });
-}
-
-Ptr<PacketSocketClient>
-EmlsrOperationsTestBase::GetApplication(TrafficDirection dir,
-                                        std::size_t staId,
-                                        std::size_t count,
-                                        std::size_t pktSize) const
-{
-    auto client = CreateObject<PacketSocketClient>();
-    client->SetAttribute("PacketSize", UintegerValue(pktSize));
-    client->SetAttribute("MaxPackets", UintegerValue(count));
-    client->SetAttribute("Interval", TimeValue(MicroSeconds(0)));
-    client->SetRemote(dir == DOWNLINK ? m_dlSockets.at(staId) : m_ulSockets.at(staId));
-    client->SetStartTime(Seconds(0)); // now
-    client->SetStopTime(m_duration - Simulator::Now());
-
-    return client;
-}
-
-void
-EmlsrOperationsTestBase::SetSsid(uint16_t aid, Mac48Address /* addr */)
-{
-    if (m_lastAid == aid)
-    {
-        // another STA of this non-AP MLD has already fired this callback
-        return;
-    }
-    m_lastAid = aid;
-
-    // wait some time (5ms) to allow the completion of association
-    auto delay = MilliSeconds(5);
-
-    if (m_establishBaDl)
-    {
-        // trigger establishment of BA agreement with AP as originator
-        Simulator::Schedule(delay, [=, this]() {
-            m_apMac->GetDevice()->GetNode()->AddApplication(
-                GetApplication(DOWNLINK, aid - 1, 4, 1000));
-        });
-
-        delay += MilliSeconds(5);
-    }
-
-    if (m_establishBaUl)
-    {
-        // trigger establishment of BA agreement with AP as recipient
-        Simulator::Schedule(delay, [=, this]() {
-            m_staMacs[aid - 1]->GetDevice()->GetNode()->AddApplication(
-                GetApplication(UPLINK, aid - 1, 4, 1000));
-        });
-
-        delay += MilliSeconds(5);
-    }
-
-    Simulator::Schedule(delay, [=, this]() {
-        if (aid < m_nEmlsrStations + m_nNonEmlsrStations)
-        {
-            // make the next STA start ML discovery & setup
-            m_staMacs[aid]->SetSsid(Ssid("ns-3-ssid"));
-            return;
-        }
-        // all stations associated; start traffic if needed
-        StartTraffic();
-        // stop generation of beacon frames in order to avoid interference
-        m_apMac->SetAttribute("BeaconGeneration", BooleanValue(false));
-    });
-}
-
-void
-EmlsrOperationsTestBase::CheckBlockedLink(Ptr<WifiMac> mac,
-                                          Mac48Address dest,
-                                          uint8_t linkId,
-                                          WifiQueueBlockedReason reason,
-                                          bool blocked,
-                                          std::string description,
-                                          bool testUnblockedForOtherReasons)
-{
-    WifiContainerQueueId queueId(WIFI_QOSDATA_QUEUE, WIFI_UNICAST, dest, 0);
-    auto mask = mac->GetMacQueueScheduler()->GetQueueLinkMask(AC_BE, queueId, linkId);
-    NS_TEST_EXPECT_MSG_EQ(mask.has_value(),
-                          true,
-                          description << ": Expected to find a mask for EMLSR link " << +linkId);
-    if (blocked)
-    {
-        NS_TEST_EXPECT_MSG_EQ(mask->test(static_cast<std::size_t>(reason)),
-                              true,
-                              description << ": Expected EMLSR link " << +linkId
-                                          << " to be blocked for reason " << reason);
-        if (testUnblockedForOtherReasons)
-        {
-            NS_TEST_EXPECT_MSG_EQ(mask->count(),
-                                  1,
-                                  description << ": Expected EMLSR link " << +linkId
-                                              << " to be blocked for one reason only");
-        }
-    }
-    else if (testUnblockedForOtherReasons)
-    {
-        NS_TEST_EXPECT_MSG_EQ(mask->none(),
-                              true,
-                              description << ": Expected EMLSR link " << +linkId
-                                          << " to be unblocked");
-    }
-    else
-    {
-        NS_TEST_EXPECT_MSG_EQ(mask->test(static_cast<std::size_t>(reason)),
-                              false,
-                              description << ": Expected EMLSR link " << +linkId
-                                          << " to be unblocked for reason " << reason);
-    }
-}
-
-EmlOmnExchangeTest::EmlOmnExchangeTest(const std::set<uint8_t>& linksToEnableEmlsrOn,
-                                       Time transitionTimeout)
-    : EmlsrOperationsTestBase("Check EML Notification exchange"),
-      m_checkEmlsrLinksCount(0),
-      m_emlNotificationDroppedCount(0)
-{
-    m_linksToEnableEmlsrOn = linksToEnableEmlsrOn;
-    m_nEmlsrStations = 1;
-    m_nNonEmlsrStations = 0;
-    m_transitionTimeout = transitionTimeout;
-    m_duration = Seconds(0.5);
-}
-
-void
-EmlOmnExchangeTest::DoSetup()
-{
-    EmlsrOperationsTestBase::DoSetup();
-
-    m_errorModel = CreateObject<ListErrorModel>();
-    for (std::size_t linkId = 0; linkId < m_apMac->GetNLinks(); linkId++)
-    {
-        m_apMac->GetWifiPhy(linkId)->SetPostReceptionErrorModel(m_errorModel);
-    }
-
-    m_staMacs[0]->TraceConnectWithoutContext("AckedMpdu",
-                                             MakeCallback(&EmlOmnExchangeTest::TxOk, this));
-    m_staMacs[0]->TraceConnectWithoutContext("DroppedMpdu",
-                                             MakeCallback(&EmlOmnExchangeTest::TxDropped, this));
-}
-
-void
-EmlOmnExchangeTest::Transmit(Ptr<WifiMac> mac,
-                             uint8_t phyId,
-                             WifiConstPsduMap psduMap,
-                             WifiTxVector txVector,
-                             double txPowerW)
-{
-    EmlsrOperationsTestBase::Transmit(mac, phyId, psduMap, txVector, txPowerW);
-    auto linkId = m_txPsdus.back().linkId;
-
-    auto psdu = psduMap.begin()->second;
-
-    switch (psdu->GetHeader(0).GetType())
-    {
-    case WIFI_MAC_MGT_ASSOCIATION_REQUEST:
-        NS_TEST_EXPECT_MSG_EQ(+linkId, +m_mainPhyId, "AssocReq not sent by the main PHY");
-        CheckEmlCapabilitiesInAssocReq(*psdu->begin(), txVector, linkId);
-        break;
-
-    case WIFI_MAC_MGT_ASSOCIATION_RESPONSE:
-        CheckEmlCapabilitiesInAssocResp(*psdu->begin(), txVector, linkId);
-        break;
-
-    case WIFI_MAC_MGT_ACTION:
-        if (auto [category, action] = WifiActionHeader::Peek(psdu->GetPayload(0));
-            category == WifiActionHeader::PROTECTED_EHT &&
-            action.protectedEhtAction ==
-                WifiActionHeader::PROTECTED_EHT_EML_OPERATING_MODE_NOTIFICATION)
-        {
-            CheckEmlNotification(psdu, txVector, linkId);
-
-            if (m_emlNotificationDroppedCount == 0 &&
-                m_staMacs[0]->GetLinkIdByAddress(psdu->GetAddr2()) == linkId)
-            {
-                // transmitted by non-AP MLD, we need to corrupt it
-                m_uidList.push_front(psdu->GetPacket()->GetUid());
-                m_errorModel->SetList(m_uidList);
-            }
-            break;
-        }
-
-    default:;
-    }
-}
-
-void
-EmlOmnExchangeTest::CheckEmlCapabilitiesInAssocReq(Ptr<const WifiMpdu> mpdu,
-                                                   const WifiTxVector& txVector,
-                                                   uint8_t linkId)
-{
-    MgtAssocRequestHeader frame;
-    mpdu->GetPacket()->PeekHeader(frame);
-
-    const auto& mle = frame.Get<MultiLinkElement>();
-    NS_TEST_ASSERT_MSG_EQ(mle.has_value(), true, "Multi-Link Element must be present in AssocReq");
-
-    NS_TEST_ASSERT_MSG_EQ(mle->HasEmlCapabilities(),
-                          true,
-                          "Multi-Link Element in AssocReq must have EML Capabilities");
-    NS_TEST_ASSERT_MSG_EQ(mle->IsEmlsrSupported(),
-                          true,
-                          "EML Support subfield of EML Capabilities in AssocReq must be set to 1");
-    NS_TEST_ASSERT_MSG_EQ(mle->GetEmlsrPaddingDelay(),
-                          m_paddingDelay.at(0),
-                          "Unexpected Padding Delay in EML Capabilities included in AssocReq");
-    NS_TEST_ASSERT_MSG_EQ(mle->GetEmlsrTransitionDelay(),
-                          m_transitionDelay.at(0),
-                          "Unexpected Transition Delay in EML Capabilities included in AssocReq");
-}
-
-void
-EmlOmnExchangeTest::CheckEmlCapabilitiesInAssocResp(Ptr<const WifiMpdu> mpdu,
-                                                    const WifiTxVector& txVector,
-                                                    uint8_t linkId)
-{
-    bool sentToEmlsrClient =
-        (m_staMacs[0]->GetLinkIdByAddress(mpdu->GetHeader().GetAddr1()) == linkId);
-
-    if (!sentToEmlsrClient)
-    {
-        // nothing to check
-        return;
-    }
-
-    MgtAssocResponseHeader frame;
-    mpdu->GetPacket()->PeekHeader(frame);
-
-    const auto& mle = frame.Get<MultiLinkElement>();
-    NS_TEST_ASSERT_MSG_EQ(mle.has_value(), true, "Multi-Link Element must be present in AssocResp");
-
-    NS_TEST_ASSERT_MSG_EQ(mle->HasEmlCapabilities(),
-                          true,
-                          "Multi-Link Element in AssocResp must have EML Capabilities");
-    NS_TEST_ASSERT_MSG_EQ(mle->IsEmlsrSupported(),
-                          true,
-                          "EML Support subfield of EML Capabilities in AssocResp must be set to 1");
-    NS_TEST_ASSERT_MSG_EQ(
-        mle->GetTransitionTimeout(),
-        m_transitionTimeout,
-        "Unexpected Transition Timeout in EML Capabilities included in AssocResp");
-}
-
-void
-EmlOmnExchangeTest::CheckEmlNotification(Ptr<const WifiPsdu> psdu,
-                                         const WifiTxVector& txVector,
-                                         uint8_t linkId)
-{
-    MgtEmlOmn frame;
-    auto mpdu = *psdu->begin();
-    auto pkt = mpdu->GetPacket()->Copy();
-    WifiActionHeader::Remove(pkt);
-    pkt->RemoveHeader(frame);
-    NS_LOG_DEBUG(frame);
-
-    bool sentbyNonApMld = m_staMacs[0]->GetLinkIdByAddress(mpdu->GetHeader().GetAddr2()) == linkId;
-
-    NS_TEST_EXPECT_MSG_EQ(+frame.m_emlControl.emlsrMode,
-                          1,
-                          "EMLSR Mode subfield should be set to 1 (frame sent by non-AP MLD: "
-                              << std::boolalpha << sentbyNonApMld << ")");
-
-    NS_TEST_EXPECT_MSG_EQ(+frame.m_emlControl.emlmrMode,
-                          0,
-                          "EMLMR Mode subfield should be set to 0 (frame sent by non-AP MLD: "
-                              << std::boolalpha << sentbyNonApMld << ")");
-
-    NS_TEST_ASSERT_MSG_EQ(frame.m_emlControl.linkBitmap.has_value(),
-                          true,
-                          "Link Bitmap subfield should be present (frame sent by non-AP MLD: "
-                              << std::boolalpha << sentbyNonApMld << ")");
-
-    auto setupLinks = m_staMacs[0]->GetSetupLinkIds();
-    std::list<uint8_t> expectedEmlsrLinks;
-    std::set_intersection(setupLinks.begin(),
-                          setupLinks.end(),
-                          m_linksToEnableEmlsrOn.begin(),
-                          m_linksToEnableEmlsrOn.end(),
-                          std::back_inserter(expectedEmlsrLinks));
-
-    NS_TEST_EXPECT_MSG_EQ((expectedEmlsrLinks == frame.GetLinkBitmap()),
-                          true,
-                          "Unexpected Link Bitmap subfield (frame sent by non-AP MLD: "
-                              << std::boolalpha << sentbyNonApMld << ")");
-
-    if (!sentbyNonApMld)
-    {
-        // the frame has been sent by the AP MLD
-        NS_TEST_ASSERT_MSG_EQ(
-            +frame.m_emlControl.emlsrParamUpdateCtrl,
-            0,
-            "EMLSR Parameter Update Control should be set to 0 in frames sent by the AP MLD");
-
-        // as soon as the non-AP MLD receives this frame, it sets the EMLSR links
-        auto delay = WifiPhy::CalculateTxDuration(psdu,
-                                                  txVector,
-                                                  m_staMacs[0]->GetWifiPhy(linkId)->GetPhyBand()) +
-                     MicroSeconds(1); // to account for propagation delay
-        Simulator::Schedule(delay, &EmlOmnExchangeTest::CheckEmlsrLinks, this);
-    }
-
-    NS_TEST_EXPECT_MSG_EQ(+m_mainPhyId,
-                          +linkId,
-                          "EML Notification received on unexpected link (frame sent by non-AP MLD: "
-                              << std::boolalpha << sentbyNonApMld << ")");
-}
-
-void
-EmlOmnExchangeTest::TxOk(Ptr<const WifiMpdu> mpdu)
-{
-    const auto& hdr = mpdu->GetHeader();
-
-    if (hdr.IsMgt() && hdr.IsAction())
-    {
-        if (auto [category, action] = WifiActionHeader::Peek(mpdu->GetPacket());
-            category == WifiActionHeader::PROTECTED_EHT &&
-            action.protectedEhtAction ==
-                WifiActionHeader::PROTECTED_EHT_EML_OPERATING_MODE_NOTIFICATION)
-        {
-            // the EML Operating Mode Notification frame that the non-AP MLD sent has been
-            // acknowledged; after the transition timeout, the EMLSR links have been set
-            Simulator::Schedule(m_transitionTimeout + NanoSeconds(1),
-                                &EmlOmnExchangeTest::CheckEmlsrLinks,
-                                this);
-        }
-    }
-}
-
-void
-EmlOmnExchangeTest::TxDropped(WifiMacDropReason reason, Ptr<const WifiMpdu> mpdu)
-{
-    const auto& hdr = mpdu->GetHeader();
-
-    if (hdr.IsMgt() && hdr.IsAction())
-    {
-        if (auto [category, action] = WifiActionHeader::Peek(mpdu->GetPacket());
-            category == WifiActionHeader::PROTECTED_EHT &&
-            action.protectedEhtAction ==
-                WifiActionHeader::PROTECTED_EHT_EML_OPERATING_MODE_NOTIFICATION)
-        {
-            // the EML Operating Mode Notification frame has been dropped. Don't
-            // corrupt it anymore
-            m_emlNotificationDroppedCount++;
-        }
-    }
-}
-
-void
-EmlOmnExchangeTest::CheckEmlsrLinks()
-{
-    m_checkEmlsrLinksCount++;
-
-    auto setupLinks = m_staMacs[0]->GetSetupLinkIds();
-    std::set<uint8_t> expectedEmlsrLinks;
-    std::set_intersection(setupLinks.begin(),
-                          setupLinks.end(),
-                          m_linksToEnableEmlsrOn.begin(),
-                          m_linksToEnableEmlsrOn.end(),
-                          std::inserter(expectedEmlsrLinks, expectedEmlsrLinks.end()));
-
-    NS_TEST_EXPECT_MSG_EQ((expectedEmlsrLinks == m_staMacs[0]->GetEmlsrManager()->GetEmlsrLinks()),
-                          true,
-                          "Unexpected set of EMLSR links)");
-}
-
-void
-EmlOmnExchangeTest::DoRun()
-{
-    Simulator::Stop(m_duration);
-    Simulator::Run();
-
-    NS_TEST_EXPECT_MSG_EQ(m_checkEmlsrLinksCount,
-                          2,
-                          "Unexpected number of times CheckEmlsrLinks() is called");
-    NS_TEST_EXPECT_MSG_EQ(
-        m_emlNotificationDroppedCount,
-        1,
-        "Unexpected number of times the EML Notification frame is dropped due to max retry limit");
-
-    Simulator::Destroy();
-}
-
-EmlsrDlTxopTest::EmlsrDlTxopTest(const Params& params)
-    : EmlsrOperationsTestBase("Check EML DL TXOP transmissions (" +
-                              std::to_string(params.nEmlsrStations) + "," +
-                              std::to_string(params.nNonEmlsrStations) + ")"),
-      m_emlsrLinks(params.linksToEnableEmlsrOn),
-      m_emlsrEnabledTime(0),
-      m_fe2to3delay(MilliSeconds(20)),
-      m_countQoSframes(0),
-      m_countBlockAck(0)
-{
-    m_nEmlsrStations = params.nEmlsrStations;
-    m_nNonEmlsrStations = params.nNonEmlsrStations;
-    m_linksToEnableEmlsrOn = {}; // do not enable EMLSR right after association
-    m_mainPhyId = 1;
-    m_paddingDelay = params.paddingDelay;
-    m_transitionDelay = params.transitionDelay;
-    m_transitionTimeout = params.transitionTimeout;
-    m_establishBaDl = true;
-    m_putAuxPhyToSleep = params.putAuxPhyToSleep;
-    m_duration = Seconds(1.5);
-
-    NS_ABORT_MSG_IF(params.linksToEnableEmlsrOn.size() < 2,
-                    "This test requires at least two links to be configured as EMLSR links");
-}
-
-void
-EmlsrDlTxopTest::Transmit(Ptr<WifiMac> mac,
-                          uint8_t phyId,
-                          WifiConstPsduMap psduMap,
-                          WifiTxVector txVector,
-                          double txPowerW)
-{
-    EmlsrOperationsTestBase::Transmit(mac, phyId, psduMap, txVector, txPowerW);
-    auto linkId = m_txPsdus.back().linkId;
-
-    auto psdu = psduMap.begin()->second;
-    auto nodeId = mac->GetDevice()->GetNode()->GetId();
-
-    switch (psdu->GetHeader(0).GetType())
-    {
-    case WIFI_MAC_MGT_ASSOCIATION_REQUEST:
-        NS_ASSERT_MSG(nodeId > 0, "APs do not send AssocReq frames");
-        if (nodeId <= m_nEmlsrStations)
-        {
-            NS_TEST_EXPECT_MSG_EQ(+linkId, +m_mainPhyId, "AssocReq not sent by the main PHY");
-            // this AssocReq is being sent by an EMLSR client. The other EMLSR links should be
-            // in powersave mode after association; we let the non-EMLSR links transition to
-            // active mode (by sending data null frames) after association
-            for (const auto id : m_staMacs.at(nodeId - 1)->GetLinkIds())
-            {
-                if (id != linkId && m_emlsrLinks.count(id) == 1)
-                {
-                    m_staMacs[nodeId - 1]->SetPowerSaveMode({true, id});
-                }
-            }
-        }
-        break;
-
-    case WIFI_MAC_MGT_ACTION: {
-        auto [category, action] = WifiActionHeader::Peek(psdu->GetPayload(0));
-
-        if ((category == WifiActionHeader::PROTECTED_EHT) &&
-            (action.protectedEhtAction ==
-             WifiActionHeader::PROTECTED_EHT_EML_OPERATING_MODE_NOTIFICATION))
-        {
-            nodeId == 0 ? CheckApEmlNotificationFrame(*psdu->begin(), txVector, linkId)
-                        : CheckStaEmlNotificationFrame(*psdu->begin(), txVector, linkId);
-        }
-        else if (category == WifiActionHeader::BLOCK_ACK &&
-                 action.blockAck == WifiActionHeader::BLOCK_ACK_ADDBA_REQUEST)
-        {
-            CheckPmModeAfterAssociation(psdu->GetAddr1());
-        }
-    }
-    break;
-
-    case WIFI_MAC_CTL_TRIGGER:
-        CheckInitialControlFrame(*psdu->begin(), txVector, linkId);
-        break;
-
-    case WIFI_MAC_QOSDATA:
-        CheckQosFrames(psduMap, txVector, linkId);
-        break;
-
-    case WIFI_MAC_CTL_BACKRESP:
-        CheckBlockAck(psduMap, txVector, phyId);
-        break;
-
-    case WIFI_MAC_CTL_END:
-        if (auto apMac = DynamicCast<ApWifiMac>(mac))
-        {
-            const auto txDuration =
-                WifiPhy::CalculateTxDuration(psduMap,
-                                             txVector,
-                                             apMac->GetDevice()->GetPhy(phyId)->GetPhyBand());
-            for (std::size_t i = 0; i < m_nEmlsrStations; ++i)
-            {
-                if (m_staMacs[i]->IsEmlsrLink(linkId) &&
-                    m_staMacs[i]->GetWifiPhy(linkId) ==
-                        m_staMacs[i]->GetDevice()->GetPhy(m_mainPhyId))
-                {
-                    // AP is terminating a TXOP on an EMLSR link on which the main PHY is operating,
-                    // aux PHYs should resume from sleep
-                    Simulator::Schedule(txDuration + TimeStep(1),
-                                        &EmlsrDlTxopTest::CheckAuxPhysSleepMode,
-                                        this,
-                                        m_staMacs[i],
-                                        false);
-                }
-            }
-        }
-        break;
-
-    default:;
-    }
-}
-
-void
-EmlsrDlTxopTest::DoSetup()
-{
-    // Channel switch delay should be less than the ICF padding duration, otherwise
-    // DL TXOPs cannot be initiated on auxiliary links
-    auto delay = std::min(MicroSeconds(100),
-                          *std::min_element(m_paddingDelay.cbegin(), m_paddingDelay.cend()));
-    Config::SetDefault("ns3::WifiPhy::ChannelSwitchDelay", TimeValue(MicroSeconds(75)));
-
-    EmlsrOperationsTestBase::DoSetup();
-
-    m_errorModel = CreateObject<ListErrorModel>();
-    for (std::size_t linkId = 0; linkId < m_apMac->GetNLinks(); linkId++)
-    {
-        m_apMac->GetWifiPhy(linkId)->SetPostReceptionErrorModel(m_errorModel);
-    }
-
-    m_apMac->GetQosTxop(AC_BE)->SetTxopLimits(
-        {MicroSeconds(3200), MicroSeconds(3200), MicroSeconds(3200)});
-
-    if (m_nEmlsrStations + m_nNonEmlsrStations > 1)
-    {
-        auto muScheduler =
-            CreateObjectWithAttributes<RrMultiUserScheduler>("EnableUlOfdma", BooleanValue(false));
-        m_apMac->AggregateObject(muScheduler);
-        for (uint8_t linkId = 0; linkId < m_apMac->GetNLinks(); linkId++)
-        {
-            m_apMac->GetFrameExchangeManager(linkId)->GetAckManager()->SetAttribute(
-                "DlMuAckSequenceType",
-                EnumValue(WifiAcknowledgment::DL_MU_AGGREGATE_TF));
-        }
-    }
-}
-
-void
-EmlsrDlTxopTest::StartTraffic()
-{
-    if (m_emlsrEnabledTime.IsZero())
-    {
-        // we are done with association and Block Ack agreement; we can now enable EMLSR mode
-        m_lastAid = 0;
-        EnableEmlsrMode();
-        return;
-    }
-
-    // we are done with sending EML Operating Mode Notification frames. We can now generate
-    // packets for all non-AP MLDs
-    for (std::size_t i = 0; i < m_nEmlsrStations + m_nNonEmlsrStations; i++)
-    {
-        // when multiple non-AP MLDs are present, MU transmission are used. Given that the
-        // available bandwidth decreases as the number of non-AP MLDs increases, compute the
-        // number of packets to generate so that we always have two A-MPDUs per non-AP MLD
-        std::size_t count = 8 / (m_nEmlsrStations + m_nNonEmlsrStations);
-        m_apMac->GetDevice()->GetNode()->AddApplication(GetApplication(DOWNLINK, i, count, 450));
-    }
-
-    // in case of 2 EMLSR clients using no non-EMLSR link, generate one additional short
-    // packet to each EMLSR client to test transition delay
-    if (m_nEmlsrStations == 2 && m_apMac->GetNLinks() == m_emlsrLinks.size())
-    {
-        Simulator::Schedule(m_fe2to3delay, [&]() {
-            m_apMac->GetDevice()->GetNode()->AddApplication(GetApplication(DOWNLINK, 0, 1, 40));
-            m_apMac->GetDevice()->GetNode()->AddApplication(GetApplication(DOWNLINK, 1, 1, 40));
-        });
-    }
-
-    // schedule the transmission of EML Operating Mode Notification frames to disable EMLSR mode
-    // and the generation of other packets destined to the EMLSR clients
-    for (std::size_t id = 0; id < m_nEmlsrStations; id++)
-    {
-        Simulator::Schedule(m_fe2to3delay + MilliSeconds(5 * (id + 1)), [=, this]() {
-            m_staMacs.at(id)->GetEmlsrManager()->SetAttribute(
-                "EmlsrLinkSet",
-                AttributeContainerValue<UintegerValue>({}));
-        });
-
-        Simulator::Schedule(m_fe2to3delay + MilliSeconds(5 * (m_nEmlsrStations + 1)), [=, this]() {
-            m_apMac->GetDevice()->GetNode()->AddApplication(
-                GetApplication(DOWNLINK, id, 8 / m_nEmlsrStations, 650));
-        });
-    }
-}
-
-void
-EmlsrDlTxopTest::EnableEmlsrMode()
-{
-    m_staMacs.at(m_lastAid)->GetEmlsrManager()->SetAttribute(
-        "EmlsrLinkSet",
-        AttributeContainerValue<UintegerValue>(m_emlsrLinks));
-    m_lastAid++;
-    Simulator::Schedule(MilliSeconds(5), [=, this]() {
-        if (m_lastAid < m_nEmlsrStations)
-        {
-            // make the next STA send EML Notification frame
-            EnableEmlsrMode();
-            return;
-        }
-        // all stations enabled EMLSR mode; start traffic
-        m_emlsrEnabledTime = Simulator::Now();
-        StartTraffic();
-    });
-}
-
-void
-EmlsrDlTxopTest::CheckResults()
-{
-    auto psduIt = m_txPsdus.cbegin();
-
-    // lambda to jump to the next QoS data frame or MU-RTS Trigger Frame transmitted
-    // to an EMLSR client
-    auto jumpToQosDataOrMuRts = [&]() {
-        while (psduIt != m_txPsdus.cend() &&
-               !psduIt->psduMap.cbegin()->second->GetHeader(0).IsQosData())
-        {
-            auto psdu = psduIt->psduMap.cbegin()->second;
-            if (psdu->GetHeader(0).IsTrigger())
-            {
-                CtrlTriggerHeader trigger;
-                psdu->GetPayload(0)->PeekHeader(trigger);
-                if (trigger.IsMuRts())
-                {
-                    break;
-                }
-            }
-            psduIt++;
-        }
-    };
-
-    /**
-     * Before enabling EMLSR mode, no MU-RTS TF should be sent. Four packets are generated
-     * after association to trigger the establishment of a Block Ack agreement. The TXOP Limit
-     * and the MCS are set such that two packets can be transmitted in a TXOP, hence we expect
-     * that the AP MLD sends two A-MPDUs to each non-AP MLD.
-     *
-     * EMLSR client with EMLSR mode to be enabled on all links: after ML setup, all other links
-     * stay in power save mode, hence BA establishment occurs on the same link.
-     *
-     *  [link 0]
-     *  ───────────────────────────────────────────────────────────────────────────
-     *                              | power save mode
-     *
-     *                   ┌─────┐      ┌─────┐                   ┌───┬───┐     ┌───┬───┐
-     *            ┌───┐  │Assoc│      │ADDBA│             ┌───┐ │QoS│QoS│     │QoS│QoS│
-     *  [link 1]  │ACK│  │Resp │      │ Req │             │ACK│ │ 0 │ 1 │     │ 2 │ 3 │
-     *  ───┬─────┬┴───┴──┴─────┴┬───┬─┴─────┴┬───┬─┬─────┬┴───┴─┴───┴───┴┬──┬─┴───┴───┴┬──┬───
-     *     │Assoc│              │ACK│        │ACK│ │ADDBA│               │BA│          │BA│
-     *     │ Req │              └───┘        └───┘ │Resp │               └──┘          └──┘
-     *     └─────┘                                 └─────┘
-     *
-     *  [link 2]
-     *  ───────────────────────────────────────────────────────────────────────────
-     *                              | power save mode
-     *
-     *
-     * EMLSR client with EMLSR mode to be enabled on not all the links: after ML setup,
-     * the other EMLSR links stay in power save mode, the non-EMLSR link (link 1) transitions
-     * to active mode.
-     *
-     *                                             ┌─────┐                   ┌───┬───┐
-     *                                      ┌───┐  │ADDBA│             ┌───┐ │QoS│QoS│
-     *  [link 0 - non EMLSR]                │ACK│  │ Req │             │ACK│ │ 2 │ 3 │
-     *  ──────────────────────────────┬────┬┴───┴──┴─────┴┬───┬─┬─────┬┴───┴─┴───┴───┴┬──┬─
-     *                                │Data│              │ACK│ │ADDBA│               │BA│
-     *                                │Null│              └───┘ │Resp │               └──┘
-     *                                └────┘                    └─────┘
-     *                   ┌─────┐                                       ┌───┬───┐
-     *            ┌───┐  │Assoc│                                       │QoS│QoS│
-     *  [link 1]  │ACK│  │Resp │                                       │ 0 │ 1 │
-     *  ───┬─────┬┴───┴──┴─────┴┬───┬──────────────────────────────────┴───┴───┴┬──┬───────
-     *     │Assoc│              │ACK│                                           │BA│
-     *     │ Req │              └───┘                                           └──┘
-     *     └─────┘
-     *
-     *  [link 2]
-     *  ───────────────────────────────────────────────────────────────────────────
-     *                              | power save mode
-     *
-     * Non-EMLSR client (not shown): after ML setup, all other links transition to active mode
-     * by sending a Data Null frame; QoS data frame exchanges occur on two links simultaneously.
-     */
-    for (std::size_t i = 0; i < m_nEmlsrStations + m_nNonEmlsrStations; i++)
-    {
-        std::set<uint8_t> linkIds;
-
-        jumpToQosDataOrMuRts();
-        NS_TEST_ASSERT_MSG_EQ((psduIt != m_txPsdus.cend() &&
-                               psduIt->psduMap.cbegin()->second->GetHeader(0).IsQosData()),
-                              true,
-                              "Expected at least one QoS data frame before enabling EMLSR mode");
-        linkIds.insert(psduIt->linkId);
-        const auto firstAmpduTxEnd =
-            psduIt->startTx +
-            WifiPhy::CalculateTxDuration(psduIt->psduMap,
-                                         psduIt->txVector,
-                                         m_staMacs[i]->GetWifiPhy(psduIt->linkId)->GetPhyBand());
-        psduIt++;
-
-        jumpToQosDataOrMuRts();
-        NS_TEST_ASSERT_MSG_EQ((psduIt != m_txPsdus.cend() &&
-                               psduIt->psduMap.cbegin()->second->GetHeader(0).IsQosData()),
-                              true,
-                              "Expected at least two QoS data frames before enabling EMLSR mode");
-        linkIds.insert(psduIt->linkId);
-        const auto secondAmpduTxStart = psduIt->startTx;
-        psduIt++;
-
-        /**
-         * If this is an EMLSR client and there is no setup link other than the one used to
-         * establish association that is not an EMLSR link, then the two A-MPDUs are sent one
-         * after another on the link used to establish association.
-         */
-        auto setupLinks = m_staMacs[i]->GetSetupLinkIds();
-        if (i < m_nEmlsrStations &&
-            std::none_of(setupLinks.begin(), setupLinks.end(), [&](auto&& linkId) {
-                return linkId != m_mainPhyId && m_emlsrLinks.count(linkId) == 0;
-            }))
-        {
-            NS_TEST_EXPECT_MSG_EQ(linkIds.size(),
-                                  1,
-                                  "Expected both A-MPDUs to be sent on the same link");
-            NS_TEST_EXPECT_MSG_EQ(*linkIds.begin(), +m_mainPhyId, "A-MPDUs sent on incorrect link");
-            NS_TEST_EXPECT_MSG_LT(firstAmpduTxEnd,
-                                  secondAmpduTxStart,
-                                  "A-MPDUs are not sent one after another");
-        }
-        /**
-         * Otherwise, the two A-MPDUs can be sent concurrently on two distinct links (may be
-         * the link used to establish association and a non-EMLSR link).
-         */
-        else
-        {
-            NS_TEST_EXPECT_MSG_EQ(linkIds.size(),
-                                  2,
-                                  "Expected A-MPDUs to be sent on distinct links");
-            NS_TEST_EXPECT_MSG_GT(firstAmpduTxEnd,
-                                  secondAmpduTxStart,
-                                  "A-MPDUs are not sent concurrently");
-        }
-    }
-
-    /**
-     * After enabling EMLSR mode, MU-RTS TF should only be sent on EMLSR links. After the exchange
-     * of EML Operating Mode Notification frames, a number of packets are generated at the AP MLD
-     * to prepare two A-MPDUs for each non-AP MLD.
-     *
-     * EMLSR client with EMLSR mode to be enabled on all links (A is the EMLSR client, B is the
-     * non-EMLSR client):
-     *                                      ┌─────┬─────┐
-     *                                      │QoS 4│QoS 5│
-     *                                      │ to A│ to A│
-     *                            ┌───┐     ├─────┼─────┤
-     *                            │MU │     │QoS 4│QoS 5│
-     *  [link 0]                  │RTS│     │ to B│ to B│
-     *  ──────────────────────────┴───┴┬───┬┴─────┴─────┴┬──┬────────────
-     *                                 │CTS│             │BA│
-     *                                 ├───┤             ├──┤
-     *                                 │CTS│             │BA│
-     *                                 └───┘             └──┘
-     *                  ┌───┐      ┌─────┬─────┐
-     *           ┌───┐  │EML│      │QoS 6│QoS 7│
-     *  [link 1] │ACK│  │OM │      │ to B│ to B│
-     *  ────┬───┬┴───┴──┴───┴┬───┬─┴─────┴─────┴┬──┬────────────────────────────────────
-     *      │EML│            │ACK│              │BA│
-     *      │OM │            └───┘              └──┘
-     *      └───┘
-     *                                                           ┌───┐     ┌─────┬─────┐
-     *                                                           │MU │     │QoS 6│QoS 7│
-     *  [link 2]                                                 │RTS│     │ to A│ to A│
-     *  ─────────────────────────────────────────────────────────┴───┴┬───┬┴─────┴─────┴┬──┬─
-     *                                                                │CTS│             │BA│
-     *                                                                └───┘             └──┘
-     *
-     * EMLSR client with EMLSR mode to be enabled on not all the links (A is the EMLSR client,
-     * B is the non-EMLSR client):
-     *                             ┌─────┬─────┐
-     *                             │QoS 4│QoS 5│
-     *                             │ to A│ to A│
-     *                             ├─────┼─────┤
-     *                             │QoS 4│QoS 5│
-     *  [link 0 - non EMLSR]       │ to B│ to B│
-     *  ───────────────────────────┴─────┴─────┴┬──┬───────────────────────────
-     *                                          │BA│
-     *                                          ├──┤
-     *                                          │BA│
-     *                                          └──┘
-     *                                       ┌─────┬─────┐
-     *                                       │QoS 6│QoS 7│
-     *                                       │ to A│ to A│
-     *                  ┌───┐      ┌───┐     ├─────┼─────┤
-     *           ┌───┐  │EML│      │MU │     │QoS 6│QoS 7│
-     *  [link 1] │ACK│  │OM │      │RTS│     │ to B│ to B│
-     *  ────┬───┬┴───┴──┴───┴┬───┬─┴───┴┬───┬┴─────┴─────┴┬──┬────────────
-     *      │EML│            │ACK│      │CTS│             │BA│
-     *      │OM │            └───┘      ├───┤             ├──┤
-     *      └───┘                       │CTS│             │BA│
-     *                                  └───┘             └──┘
-     *
-     *  [link 2]
-     *  ────────────────────────────────────────────────────────────────────────────────
-     */
-
-    /// Store a QoS data frame or an MU-RTS TF followed by a QoS data frame
-    using FrameExchange = std::list<decltype(psduIt)>;
-
-    std::vector<std::list<FrameExchange>> frameExchanges(m_nEmlsrStations);
-
-    // compute all frame exchanges involving EMLSR clients
-    while (psduIt != m_txPsdus.cend())
-    {
-        jumpToQosDataOrMuRts();
-        if (psduIt == m_txPsdus.cend())
-        {
-            break;
-        }
-
-        if (IsTrigger(psduIt->psduMap))
-        {
-            CtrlTriggerHeader trigger;
-            psduIt->psduMap.cbegin()->second->GetPayload(0)->PeekHeader(trigger);
-            // this is an MU-RTS TF starting a new frame exchange sequence; add it to all
-            // the addressed EMLSR clients
-            NS_TEST_ASSERT_MSG_EQ(trigger.IsMuRts(),
-                                  true,
-                                  "jumpToQosDataOrMuRts does not return TFs other than MU-RTS");
-            for (const auto& userInfo : trigger)
-            {
-                for (std::size_t i = 0; i < m_nEmlsrStations; i++)
-                {
-                    if (m_staMacs.at(i)->GetAssociationId() == userInfo.GetAid12())
-                    {
-                        frameExchanges.at(i).emplace_back(FrameExchange{psduIt});
-                        break;
-                    }
-                }
-            }
-            psduIt++;
-            continue;
-        }
-
-        // we get here if psduIt points to a psduMap containing QoS data frame(s); find (if any)
-        // the QoS data frame(s) addressed to EMLSR clients and add them to the appropriate
-        // frame exchange sequence
-        for (const auto& staIdPsduPair : psduIt->psduMap)
-        {
-            std::for_each_n(m_staMacs.cbegin(), m_nEmlsrStations, [&](auto&& staMac) {
-                if (!staMac->GetLinkIdByAddress(staIdPsduPair.second->GetAddr1()))
-                {
-                    // not addressed to this non-AP MLD
-                    return;
-                }
-                // a QoS data frame starts a new frame exchange sequence if there is no previous
-                // MU-RTS TF that has been sent on the same link and is not already followed by
-                // a QoS data frame
-                std::size_t id = staMac->GetDevice()->GetNode()->GetId() - 1;
-                for (auto& frameExchange : frameExchanges.at(id))
-                {
-                    if (IsTrigger(frameExchange.front()->psduMap) &&
-                        frameExchange.front()->linkId == psduIt->linkId &&
-                        frameExchange.size() == 1)
-                    {
-                        auto it = std::next(frameExchange.front());
-                        while (it != m_txPsdus.end())
-                        {
-                            // stop at the first frame other than CTS sent on this link
-                            if (it->linkId == psduIt->linkId &&
-                                !it->psduMap.begin()->second->GetHeader(0).IsCts())
-                            {
-                                break;
-                            }
-                            ++it;
-                        }
-                        if (it == psduIt)
-                        {
-                            // the QoS data frame actually followed the MU-RTS TF
-                            frameExchange.emplace_back(psduIt);
-                            return;
-                        }
-                    }
-                }
-                frameExchanges.at(id).emplace_back(FrameExchange{psduIt});
-            });
-        }
-        psduIt++;
-    }
-
-    /**
-     * Let's focus on the first two frame exchanges for each EMLSR clients. If all setup links are
-     * EMLSR links, both frame exchanges are protected by MU-RTS TF and occur one after another.
-     * Otherwise, one frame exchange occurs on the non-EMLSR link and is not protected by
-     * MU-RTS TF; the other frame exchange occurs on an EMLSR link and is protected by MU-RTS TF.
-     */
-    for (std::size_t i = 0; i < m_nEmlsrStations; i++)
-    {
-        NS_TEST_EXPECT_MSG_GT_OR_EQ(frameExchanges.at(i).size(),
-                                    2,
-                                    "Expected at least 2 frame exchange sequences "
-                                        << "involving EMLSR client " << i);
-
-        auto firstExchangeIt = frameExchanges.at(i).begin();
-        auto secondExchangeIt = std::next(firstExchangeIt);
-
-        const auto firstAmpduTxEnd =
-            firstExchangeIt->back()->startTx +
-            WifiPhy::CalculateTxDuration(
-                firstExchangeIt->back()->psduMap,
-                firstExchangeIt->back()->txVector,
-                m_staMacs[i]->GetWifiPhy(firstExchangeIt->back()->linkId)->GetPhyBand());
-        const auto secondAmpduTxStart = secondExchangeIt->front()->startTx;
-
-        if (m_staMacs[i]->GetNLinks() == m_emlsrLinks.size())
-        {
-            // all links are EMLSR links
-            NS_TEST_EXPECT_MSG_EQ(IsTrigger(firstExchangeIt->front()->psduMap),
-                                  true,
-                                  "Expected an MU-RTS TF as ICF of first frame exchange sequence");
-            NS_TEST_EXPECT_MSG_EQ(
-                firstExchangeIt->back()->psduMap.cbegin()->second->GetHeader(0).IsQosData(),
-                true,
-                "Expected a QoS data frame in the first frame exchange sequence");
-
-            NS_TEST_EXPECT_MSG_EQ(IsTrigger(secondExchangeIt->front()->psduMap),
-                                  true,
-                                  "Expected an MU-RTS TF as ICF of second frame exchange sequence");
-            NS_TEST_EXPECT_MSG_EQ(
-                secondExchangeIt->back()->psduMap.cbegin()->second->GetHeader(0).IsQosData(),
-                true,
-                "Expected a QoS data frame in the second frame exchange sequence");
-
-            NS_TEST_EXPECT_MSG_LT(firstAmpduTxEnd,
-                                  secondAmpduTxStart,
-                                  "A-MPDUs are not sent one after another");
-        }
-        else
-        {
-            std::vector<uint8_t> nonEmlsrIds;
-            auto setupLinks = m_staMacs[i]->GetSetupLinkIds();
-            std::set_difference(setupLinks.begin(),
-                                setupLinks.end(),
-                                m_emlsrLinks.begin(),
-                                m_emlsrLinks.end(),
-                                std::back_inserter(nonEmlsrIds));
-            NS_TEST_ASSERT_MSG_EQ(nonEmlsrIds.size(), 1, "Unexpected number of non-EMLSR links");
-
-            auto nonEmlsrLinkExchangeIt = firstExchangeIt->front()->linkId == nonEmlsrIds[0]
-                                              ? firstExchangeIt
-                                              : secondExchangeIt;
-            NS_TEST_EXPECT_MSG_EQ(IsTrigger(nonEmlsrLinkExchangeIt->front()->psduMap),
-                                  false,
-                                  "Did not expect an MU-RTS TF as ICF on non-EMLSR link");
-            NS_TEST_EXPECT_MSG_EQ(
-                nonEmlsrLinkExchangeIt->front()->psduMap.cbegin()->second->GetHeader(0).IsQosData(),
-                true,
-                "Expected a QoS data frame on the non-EMLSR link");
-
-            auto emlsrLinkExchangeIt =
-                nonEmlsrLinkExchangeIt == firstExchangeIt ? secondExchangeIt : firstExchangeIt;
-            NS_TEST_EXPECT_MSG_NE(+emlsrLinkExchangeIt->front()->linkId,
-                                  +nonEmlsrIds[0],
-                                  "Expected this exchange not to occur on non-EMLSR link");
-            NS_TEST_EXPECT_MSG_EQ(IsTrigger(emlsrLinkExchangeIt->front()->psduMap),
-                                  true,
-                                  "Expected an MU-RTS TF as ICF on the EMLSR link");
-            NS_TEST_EXPECT_MSG_EQ(
-                emlsrLinkExchangeIt->back()->psduMap.cbegin()->second->GetHeader(0).IsQosData(),
-                true,
-                "Expected a QoS data frame on the EMLSR link");
-
-            NS_TEST_EXPECT_MSG_GT(firstAmpduTxEnd,
-                                  secondAmpduTxStart,
-                                  "A-MPDUs are not sent concurrently");
-        }
-
-        // we are done with processing the first two frame exchanges, remove them
-        frameExchanges.at(i).erase(firstExchangeIt);
-        frameExchanges.at(i).erase(secondExchangeIt);
-    }
-
-    /**
-     * A and B are two EMLSR clients. No ICF before the second QoS data frame because B
-     * has not switched to listening mode. ICF is sent before the third QoS data frame because
-     * A has switched to listening mode. C is a non-EMLSR client.
-     *
-     *                        ┌─────┐          A switches to listening
-     *                        │QoS x│          after transition delay
-     *                        │ to A│          |
-     *              ┌───┐     ├─────┤    ┌─────┐
-     *              │MU │     │QoS x│    │QoS y│
-     *  [link 0]    │RTS│     │ to B│    │ to B│
-     *  ────────────┴───┴┬───┬┴─────┴┬──┬┴─────┴┬──┬────────────
-     *                   │CTS│       │BA│       │BA│
-     *                   ├───┤       ├──┤       └──┘
-     *                   │CTS│       │BA│
-     *                   └───┘       └──┘        AP continues the TXOP     A switches to listening
-     *                                             after PIFS recovery      after transition delay
-     *                                                                │                       │
-     *                                 ┌─────┐    ┌───┐     ┌─────┐   │┌───┐              ┌───┐
-     *                                 │QoS z│    │MU │     │QoS x│   ││MU │     ┌───┐    │CF-│
-     *  [link 1]                       │ to C│    │RTS│     │ to A│   ││RTS│     │BAR│    │End│
-     *  ───────────────────────────────┴─────┴┬──┬┴───┴┬───┬┴─────┴┬──┬┴───┴┬───┬┴───┴┬──┬┴───┴─
-     *                                        │BA│     │CTS│       │BA│     │CTS│     │BA│
-     *                                        └──┘     └───┘       └──x     └───┘     └──┘
-     */
-    if (m_nEmlsrStations == 2 && m_apMac->GetNLinks() == m_emlsrLinks.size())
-    {
-        // the following checks are only done with 2 EMLSR clients having no non-EMLSR link
-        for (std::size_t i = 0; i < m_nEmlsrStations; i++)
-        {
-            NS_TEST_EXPECT_MSG_GT_OR_EQ(frameExchanges.at(i).size(),
-                                        2,
-                                        "Expected at least 2 frame exchange sequences "
-                                            << "involving EMLSR client " << i);
-            // the first frame exchange must start with an ICF
-            auto firstExchangeIt = frameExchanges.at(i).begin();
-
-            NS_TEST_EXPECT_MSG_EQ(IsTrigger(firstExchangeIt->front()->psduMap),
-                                  true,
-                                  "Expected an MU-RTS TF as ICF of first frame exchange sequence");
-            NS_TEST_EXPECT_MSG_EQ(
-                firstExchangeIt->back()->psduMap.cbegin()->second->GetHeader(0).IsQosData(),
-                true,
-                "Expected a QoS data frame in the first frame exchange sequence");
-        }
-
-        // the second frame exchange is the one that starts first
-        auto secondExchangeIt = std::next(frameExchanges.at(0).begin())->front()->startTx <
-                                        std::next(frameExchanges.at(1).begin())->front()->startTx
-                                    ? std::next(frameExchanges.at(0).begin())
-                                    : std::next(frameExchanges.at(1).begin());
-        decltype(secondExchangeIt) thirdExchangeIt;
-        std::size_t thirdExchangeStaId;
-
-        if (secondExchangeIt == std::next(frameExchanges.at(0).begin()))
-        {
-            thirdExchangeIt = std::next(frameExchanges.at(1).begin());
-            thirdExchangeStaId = 1;
-        }
-        else
-        {
-            thirdExchangeIt = std::next(frameExchanges.at(0).begin());
-            thirdExchangeStaId = 0;
-        }
-
-        // the second frame exchange is not protected by the ICF and starts a SIFS after the end
-        // of the previous one
-        NS_TEST_EXPECT_MSG_EQ(IsTrigger(secondExchangeIt->front()->psduMap),
-                              false,
-                              "Expected no ICF for the second frame exchange sequence");
-        NS_TEST_EXPECT_MSG_EQ(
-            secondExchangeIt->front()->psduMap.cbegin()->second->GetHeader(0).IsQosData(),
-            true,
-            "Expected a QoS data frame in the second frame exchange sequence");
-
-        // the first two frame exchanges occur on the same link
-        NS_TEST_EXPECT_MSG_EQ(+secondExchangeIt->front()->linkId,
-                              +frameExchanges.at(0).begin()->front()->linkId,
-                              "Expected the first two frame exchanges to occur on the same link");
-
-        auto bAckRespIt = std::prev(secondExchangeIt->front());
-        NS_TEST_EXPECT_MSG_EQ(bAckRespIt->psduMap.cbegin()->second->GetHeader(0).IsBlockAck(),
-                              true,
-                              "Expected a BlockAck response before the second frame exchange");
-        auto bAckRespTxEnd =
-            bAckRespIt->startTx +
-            WifiPhy::CalculateTxDuration(bAckRespIt->psduMap,
-                                         bAckRespIt->txVector,
-                                         m_apMac->GetWifiPhy(bAckRespIt->linkId)->GetPhyBand());
-
-        // the second frame exchange starts a SIFS after the previous one
-        NS_TEST_EXPECT_MSG_EQ(
-            bAckRespTxEnd + m_apMac->GetWifiPhy(bAckRespIt->linkId)->GetSifs(),
-            secondExchangeIt->front()->startTx,
-            "Expected the second frame exchange to start a SIFS after the first one");
-
-        // the third frame exchange is protected by MU-RTS and occurs on a different link
-        NS_TEST_EXPECT_MSG_EQ(IsTrigger(thirdExchangeIt->front()->psduMap),
-                              true,
-                              "Expected an MU-RTS as ICF for the third frame exchange sequence");
-        NS_TEST_EXPECT_MSG_EQ(
-            thirdExchangeIt->back()->psduMap.cbegin()->second->GetHeader(0).IsQosData(),
-            true,
-            "Expected a QoS data frame in the third frame exchange sequence");
-
-        NS_TEST_EXPECT_MSG_NE(
-            +secondExchangeIt->front()->linkId,
-            +thirdExchangeIt->front()->linkId,
-            "Expected the second and third frame exchanges to occur on distinct links");
-
-        auto secondQosIt = secondExchangeIt->front();
-        auto secondQosTxEnd =
-            secondQosIt->startTx +
-            WifiPhy::CalculateTxDuration(secondQosIt->psduMap,
-                                         secondQosIt->txVector,
-                                         m_apMac->GetWifiPhy(secondQosIt->linkId)->GetPhyBand());
-
-        NS_TEST_EXPECT_MSG_GT_OR_EQ(thirdExchangeIt->front()->startTx,
-                                    secondQosTxEnd + m_transitionDelay.at(thirdExchangeStaId),
-                                    "Transmission started before transition delay");
-
-        // the BlockAck of the third frame exchange is not received correctly, so there should be
-        // another frame exchange
-        NS_TEST_EXPECT_MSG_EQ((thirdExchangeIt != frameExchanges.at(thirdExchangeStaId).end()),
-                              true,
-                              "Expected a fourth frame exchange");
-        auto fourthExchangeIt = std::next(thirdExchangeIt);
-
-        // the fourth frame exchange is protected by MU-RTS
-        NS_TEST_EXPECT_MSG_EQ(IsTrigger(fourthExchangeIt->front()->psduMap),
-                              true,
-                              "Expected an MU-RTS as ICF for the fourth frame exchange sequence");
-
-        bAckRespIt = std::prev(fourthExchangeIt->front());
-        NS_TEST_EXPECT_MSG_EQ(bAckRespIt->psduMap.cbegin()->second->GetHeader(0).IsBlockAck(),
-                              true,
-                              "Expected a BlockAck response before the fourth frame exchange");
-        auto phy = m_apMac->GetWifiPhy(bAckRespIt->linkId);
-        bAckRespTxEnd = bAckRespIt->startTx + WifiPhy::CalculateTxDuration(bAckRespIt->psduMap,
-                                                                           bAckRespIt->txVector,
-                                                                           phy->GetPhyBand());
-        auto timeout = phy->GetSifs() + phy->GetSlot() + MicroSeconds(20);
-
-        // the fourth frame exchange starts a PIFS after the previous one because the AP
-        // performs PIFS recovery (the initial frame in the TXOP was successfully received by
-        // a non-EMLSR client)
-        NS_TEST_EXPECT_MSG_GT_OR_EQ(fourthExchangeIt->front()->startTx,
-                                    bAckRespTxEnd + phy->GetPifs(),
-                                    "Transmission started less than a PIFS after BlockAck");
-        NS_TEST_EXPECT_MSG_LT(fourthExchangeIt->front()->startTx,
-                              bAckRespTxEnd + phy->GetPifs() +
-                                  MicroSeconds(1) /* propagation delay upper bound */,
-                              "Transmission started too much time after BlockAck");
-
-        auto bAckReqIt = std::next(fourthExchangeIt->front(), 2);
-        NS_TEST_EXPECT_MSG_EQ(bAckReqIt->psduMap.cbegin()->second->GetHeader(0).IsBlockAckReq(),
-                              true,
-                              "Expected a BlockAck request in the fourth frame exchange");
-
-        // we are done with processing the frame exchanges, remove them (two frame exchanges
-        // per EMLSR client, plus the last one)
-        frameExchanges.at(0).pop_front();
-        frameExchanges.at(0).pop_front();
-        frameExchanges.at(1).pop_front();
-        frameExchanges.at(1).pop_front();
-        frameExchanges.at(thirdExchangeStaId).pop_front();
-    }
-
-    /**
-     * After disabling EMLSR mode, no MU-RTS TF should be sent. After the exchange of
-     * EML Operating Mode Notification frames, a number of packets are generated at the AP MLD
-     * to prepare two A-MPDUs for each EMLSR client.
-     *
-     * EMLSR client with EMLSR mode to be enabled on all links (A is the EMLSR client, B is the
-     * non-EMLSR client):
-     *
-     *  [link 0]                            | power save mode
-     *  ────────────────────────────────────────────────────────
-     *                                        ┌─────┬─────┐        ┌──────┬──────┐
-     *                                        │QoS 8│QoS 9│        │QoS 10│QoS 11│
-     *                                        │ to A│ to A│        │ to A │ to A │
-     *                  ┌───┐     ┌───┐       ├─────┼─────┤        ├──────┼──────┤
-     *           ┌───┐  │MU │     │EML│       │QoS 8│QoS 9│        │QoS 10│QoS 11│
-     *  [link 1] │ACK│  │RTS│     │OM │       │ to B│ to B│        │ to B │ to B │
-     *  ────┬───┬┴───┴──┴───┴┬───┬┴───┴┬───┬──┴─────┴─────┴┬──┬────┴──────┴──────┴┬──┬─────
-     *      │EML│            │CTS│     │ACK│               │BA│                   │BA│
-     *      │OM │            └───┘     └───┘               ├──┤                   ├──┤
-     *      └───┘                                          │BA│                   │BA│
-     *                                                     └──┘                   └──┘
-     *
-     *  [link 2]                            | power save mode
-     *  ────────────────────────────────────────────────────────────────────────────
-     *
-     *
-     * EMLSR client with EMLSR mode to be enabled on not all the links (A is the EMLSR client,
-     * B is the non-EMLSR client):
-     *                                           ┌─────┬─────┐
-     *                                           │QoS 8│QoS 9│
-     *                                           │ to A│ to A│
-     *                                           ├─────┼─────┤
-     *                                           │QoS 8│QoS 9│
-     *  [link 0 - non EMLSR]                     │ to B│ to B│
-     *  ─────────────────────────────────────────┴─────┴─────┴┬──┬─────────────
-     *                                                        │BA│
-     *                                                        ├──┤
-     *                                                        │BA│
-     *                                                        └──┘
-     *                                        ┌──────┬──────┐
-     *                                        │QoS 10│QoS 11│
-     *                                        │ to A │ to A │
-     *                  ┌───┐     ┌───┐       ├──────┼──────┤
-     *           ┌───┐  │MU │     │EML│       │QoS 10│QoS 11│
-     *  [link 1] │ACK│  │RTS│     │OM │       │ to B │ to B │
-     *  ────┬───┬┴───┴──┴───┴┬───┬┴───┴┬───┬──┴──────┴──────┴┬──┬─────
-     *      │EML│            │CTS│     │ACK│                 │BA│
-     *      │OM │            └───┘     └───┘                 ├──┤
-     *      └───┘                                            │BA│
-     *                                                       └──┘
-     *
-     *  [link 2]                            | power save mode
-     *  ────────────────────────────────────────────────────────────────────────────
-     *
-     */
-
-    // for each EMLSR client, there should be a frame exchange with ICF and no data frame
-    // (ICF protects the EML Notification response) if the EML Notification response is sent
-    // while EMLSR mode is still enabled and two frame exchanges with data frames
-    for (std::size_t i = 0; i < m_nEmlsrStations; i++)
-    {
-        // the default EMLSR Manager requests to send EML Notification frames on the link where
-        // the main PHY is operating; if EMLSR mode is still enabled on this link when the AP MLD
-        // sends the EML Notification response, the latter is protected by an ICF
-        auto exchangeIt = frameExchanges.at(i).cbegin();
-
-        auto linkIdOpt = m_staMacs[i]->GetLinkForPhy(m_mainPhyId);
-        NS_TEST_ASSERT_MSG_EQ(linkIdOpt.has_value(),
-                              true,
-                              "Didn't find a link on which the main PHY is operating");
-
-        if (IsTrigger(exchangeIt->front()->psduMap))
-        {
-            NS_TEST_EXPECT_MSG_EQ(+exchangeIt->front()->linkId,
-                                  +linkIdOpt.value(),
-                                  "ICF was not sent on the expected link");
-            NS_TEST_EXPECT_MSG_EQ(exchangeIt->size(),
-                                  1,
-                                  "Expected no data frame in the first frame exchange sequence");
-            frameExchanges.at(i).pop_front();
-        }
-
-        NS_TEST_EXPECT_MSG_GT_OR_EQ(frameExchanges.at(i).size(),
-                                    2,
-                                    "Expected at least 2 frame exchange sequences "
-                                        << "involving EMLSR client " << i);
-
-        auto firstExchangeIt = frameExchanges.at(i).cbegin();
-        auto secondExchangeIt = std::next(firstExchangeIt);
-
-        const auto firstAmpduTxEnd =
-            firstExchangeIt->back()->startTx +
-            WifiPhy::CalculateTxDuration(
-                firstExchangeIt->back()->psduMap,
-                firstExchangeIt->back()->txVector,
-                m_staMacs[i]->GetWifiPhy(firstExchangeIt->back()->linkId)->GetPhyBand());
-        const auto secondAmpduTxStart = secondExchangeIt->front()->startTx;
-
-        NS_TEST_EXPECT_MSG_EQ(
-            firstExchangeIt->front()->psduMap.cbegin()->second->GetHeader(0).IsQosData(),
-            true,
-            "Expected a QoS data frame in the first frame exchange sequence");
-        NS_TEST_EXPECT_MSG_EQ(firstExchangeIt->size(),
-                              1,
-                              "Expected one frame only in the first frame exchange sequence");
-
-        NS_TEST_EXPECT_MSG_EQ(
-            secondExchangeIt->front()->psduMap.cbegin()->second->GetHeader(0).IsQosData(),
-            true,
-            "Expected a QoS data frame in the second frame exchange sequence");
-        NS_TEST_EXPECT_MSG_EQ(secondExchangeIt->size(),
-                              1,
-                              "Expected one frame only in the second frame exchange sequence");
-
-        if (m_staMacs[i]->GetNLinks() == m_emlsrLinks.size())
-        {
-            // all links are EMLSR links: the two QoS data frames are sent one after another on
-            // the link used for sending EML OMN
-            NS_TEST_EXPECT_MSG_EQ(
-                +firstExchangeIt->front()->linkId,
-                +linkIdOpt.value(),
-                "First frame exchange expected to occur on link used to send EML OMN");
-
-            NS_TEST_EXPECT_MSG_EQ(
-                +secondExchangeIt->front()->linkId,
-                +linkIdOpt.value(),
-                "Second frame exchange expected to occur on link used to send EML OMN");
-
-            NS_TEST_EXPECT_MSG_LT(firstAmpduTxEnd,
-                                  secondAmpduTxStart,
-                                  "A-MPDUs are not sent one after another");
-        }
-        else
-        {
-            // the two QoS data frames are sent concurrently on distinct links
-            NS_TEST_EXPECT_MSG_NE(+firstExchangeIt->front()->linkId,
-                                  +secondExchangeIt->front()->linkId,
-                                  "Frame exchanges expected to occur on distinct links");
-
-            NS_TEST_EXPECT_MSG_GT(firstAmpduTxEnd,
-                                  secondAmpduTxStart,
-                                  "A-MPDUs are not sent concurrently");
-        }
-    }
-}
-
-void
-EmlsrDlTxopTest::CheckPmModeAfterAssociation(const Mac48Address& address)
-{
-    std::optional<std::size_t> staId;
-    for (std::size_t id = 0; id < m_nEmlsrStations + m_nNonEmlsrStations; id++)
-    {
-        if (m_staMacs.at(id)->GetLinkIdByAddress(address))
-        {
-            staId = id;
-            break;
-        }
-    }
-    NS_TEST_ASSERT_MSG_EQ(staId.has_value(), true, "Not an address of a non-AP MLD " << address);
-
-    // check that all EMLSR links (but the link used for ML setup) of the EMLSR clients
-    // are considered to be in power save mode by the AP MLD; all the other links have
-    // transitioned to active mode instead
-    for (uint8_t linkId = 0; linkId < m_apMac->GetNLinks(); linkId++)
-    {
-        bool psModeExpected =
-            *staId < m_nEmlsrStations && linkId != m_mainPhyId && m_emlsrLinks.count(linkId) == 1;
-        auto addr = m_staMacs.at(*staId)->GetAddress();
-        auto psMode = m_apMac->GetWifiRemoteStationManager(linkId)->IsInPsMode(addr);
-        NS_TEST_EXPECT_MSG_EQ(psMode,
-                              psModeExpected,
-                              "EMLSR link " << +linkId << " of EMLSR client " << *staId
-                                            << " not in " << (psModeExpected ? "PS" : "active")
-                                            << " mode");
-        // check that AP is blocking transmission of QoS data frames on this link
-        CheckBlockedLink(m_apMac,
-                         addr,
-                         linkId,
-                         WifiQueueBlockedReason::POWER_SAVE_MODE,
-                         psModeExpected,
-                         "Checking PM mode after association on AP MLD for EMLSR client " +
-                             std::to_string(*staId),
-                         false);
-    }
-}
-
-void
-EmlsrDlTxopTest::CheckApEmlNotificationFrame(Ptr<const WifiMpdu> mpdu,
-                                             const WifiTxVector& txVector,
-                                             uint8_t linkId)
-{
-    // the AP is replying to a received EMLSR Notification frame
-    auto pkt = mpdu->GetPacket()->Copy();
-    const auto& hdr = mpdu->GetHeader();
-    WifiActionHeader::Remove(pkt);
-    MgtEmlOmn frame;
-    pkt->RemoveHeader(frame);
-
-    std::optional<std::size_t> staId;
-    for (std::size_t id = 0; id < m_nEmlsrStations; id++)
-    {
-        if (m_staMacs.at(id)->GetFrameExchangeManager(linkId)->GetAddress() == hdr.GetAddr1())
-        {
-            staId = id;
-            break;
-        }
-    }
-    NS_TEST_ASSERT_MSG_EQ(staId.has_value(),
-                          true,
-                          "Not an address of an EMLSR client " << hdr.GetAddr1());
-
-    // The EMLSR mode change occurs a Transition Timeout after the end of the PPDU carrying the Ack
-    auto phy = m_apMac->GetWifiPhy(linkId);
-    auto txDuration =
-        WifiPhy::CalculateTxDuration(mpdu->GetSize() + 4, // A-MPDU Subframe header size
-                                     txVector,
-                                     phy->GetPhyBand());
-    WifiTxVector ackTxVector =
-        m_staMacs.at(*staId)->GetWifiRemoteStationManager(linkId)->GetAckTxVector(hdr.GetAddr2(),
-                                                                                  txVector);
-    auto ackDuration = WifiPhy::CalculateTxDuration(GetAckSize() + 4, // A-MPDU Subframe header
-                                                    ackTxVector,
-                                                    phy->GetPhyBand());
-
-    Simulator::Schedule(txDuration + phy->GetSifs() + ackDuration, [=, this]() {
-        if (frame.m_emlControl.emlsrMode == 1)
-        {
-            // EMLSR mode enabled. Check that all EMLSR links of the EMLSR clients are considered
-            // to be in active mode by the AP MLD
-            for (const auto linkId : m_emlsrLinks)
-            {
-                auto addr = m_staMacs.at(*staId)->GetAddress();
-                auto psMode = m_apMac->GetWifiRemoteStationManager(linkId)->IsInPsMode(addr);
-                NS_TEST_EXPECT_MSG_EQ(psMode,
-                                      false,
-                                      "EMLSR link " << +linkId << " of EMLSR client " << *staId
-                                                    << " not in active mode");
-                // check that AP is not blocking transmission of QoS data frames on this link
-                CheckBlockedLink(
-                    m_apMac,
-                    addr,
-                    linkId,
-                    WifiQueueBlockedReason::POWER_SAVE_MODE,
-                    false,
-                    "Checking EMLSR links on AP MLD after EMLSR mode is enabled on EMLSR client " +
-                        std::to_string(*staId),
-                    false);
-            }
-        }
-        else
-        {
-            // EMLSR mode disabled. Check that all EMLSR links (but the link used to send the
-            // EML Notification frame) of the EMLSR clients are considered to be in power save
-            // mode by the AP MLD; the other links are in active mode
-            for (uint8_t id = 0; id < m_apMac->GetNLinks(); id++)
-            {
-                bool psModeExpected = id != linkId && m_emlsrLinks.count(id) == 1;
-                auto addr = m_staMacs.at(*staId)->GetAddress();
-                auto psMode = m_apMac->GetWifiRemoteStationManager(id)->IsInPsMode(addr);
-                NS_TEST_EXPECT_MSG_EQ(psMode,
-                                      psModeExpected,
-                                      "EMLSR link "
-                                          << +id << " of EMLSR client " << *staId << " not in "
-                                          << (psModeExpected ? "PS" : "active") << " mode");
-                // check that AP is blocking transmission of QoS data frames on this link
-                CheckBlockedLink(
-                    m_apMac,
-                    addr,
-                    id,
-                    WifiQueueBlockedReason::POWER_SAVE_MODE,
-                    psModeExpected,
-                    "Checking links on AP MLD after EMLSR mode is disabled on EMLSR client " +
-                        std::to_string(*staId),
-                    false);
-            }
-        }
-    });
-}
-
-void
-EmlsrDlTxopTest::CheckStaEmlNotificationFrame(Ptr<const WifiMpdu> mpdu,
-                                              const WifiTxVector& txVector,
-                                              uint8_t linkId)
-{
-    // an EMLSR client is sending an EMLSR Notification frame
-    auto pkt = mpdu->GetPacket()->Copy();
-    const auto& hdr = mpdu->GetHeader();
-    WifiActionHeader::Remove(pkt);
-    MgtEmlOmn frame;
-    pkt->RemoveHeader(frame);
-
-    std::optional<std::size_t> staId;
-    for (std::size_t id = 0; id < m_nEmlsrStations; id++)
-    {
-        if (m_staMacs.at(id)->GetFrameExchangeManager(linkId)->GetAddress() == hdr.GetAddr2())
-        {
-            staId = id;
-            break;
-        }
-    }
-    NS_TEST_ASSERT_MSG_EQ(staId.has_value(),
-                          true,
-                          "Not an address of an EMLSR client " << hdr.GetAddr1());
-
-    auto phy = m_staMacs.at(*staId)->GetWifiPhy(linkId);
-    auto txDuration = WifiPhy::CalculateTxDuration(mpdu->GetSize(), txVector, phy->GetPhyBand());
-    auto ackTxVector =
-        m_apMac->GetWifiRemoteStationManager(linkId)->GetAckTxVector(hdr.GetAddr2(), txVector);
-    auto ackDuration = WifiPhy::CalculateTxDuration(GetAckSize(), ackTxVector, phy->GetPhyBand());
-    auto cfEndDuration = WifiPhy::CalculateTxDuration(
-        Create<WifiPsdu>(Create<Packet>(), WifiMacHeader(WIFI_MAC_CTL_END)),
-        m_staMacs.at(*staId)->GetWifiRemoteStationManager(linkId)->GetRtsTxVector(
-            Mac48Address::GetBroadcast(),
-            txVector.GetChannelWidth()),
-        phy->GetPhyBand());
-
-    if (frame.m_emlControl.emlsrMode != 0)
-    {
-        return;
-    }
-
-    // EMLSR mode disabled
-    auto timeToCfEnd = txDuration + phy->GetSifs() + ackDuration + phy->GetSifs() + cfEndDuration;
-
-    // before the end of the CF-End frame, this link only is not blocked on both the
-    // EMLSR client and the AP MLD
-    Simulator::Schedule(timeToCfEnd - MicroSeconds(1), [=, this]() {
-        for (uint8_t id = 0; id < m_apMac->GetNLinks(); id++)
-        {
-            CheckBlockedLink(m_staMacs.at(*staId),
-                             m_apMac->GetAddress(),
-                             id,
-                             WifiQueueBlockedReason::USING_OTHER_EMLSR_LINK,
-                             id != linkId && m_staMacs.at(*staId)->IsEmlsrLink(id),
-                             "Checking links on EMLSR client " + std::to_string(*staId) +
-                                 " before the end of CF-End frame");
-            CheckBlockedLink(m_apMac,
-                             m_staMacs.at(*staId)->GetAddress(),
-                             id,
-                             WifiQueueBlockedReason::USING_OTHER_EMLSR_LINK,
-                             id != linkId && m_staMacs.at(*staId)->IsEmlsrLink(id),
-                             "Checking links of EMLSR client " + std::to_string(*staId) +
-                                 " on the AP MLD before the end of CF-End frame");
-        }
-    });
-    // after the end of the CF-End frame, all links for the EMLSR client are blocked on the
-    // AP MLD
-    Simulator::Schedule(timeToCfEnd + MicroSeconds(1), [=, this]() {
-        for (uint8_t id = 0; id < m_apMac->GetNLinks(); id++)
-        {
-            if (m_staMacs.at(*staId)->IsEmlsrLink(id))
-            {
-                CheckBlockedLink(
-                    m_apMac,
-                    m_staMacs.at(*staId)->GetAddress(),
-                    id && m_staMacs.at(*staId)->IsEmlsrLink(id),
-                    WifiQueueBlockedReason::WAITING_EMLSR_TRANSITION_DELAY,
-                    true,
-                    "Checking links of EMLSR client " + std::to_string(*staId) +
-                        " are all blocked on the AP MLD right after the end of CF-End");
-            }
-        }
-    });
-    // before the end of the transition delay, all links for the EMLSR client are still
-    // blocked on the AP MLD
-    Simulator::Schedule(timeToCfEnd + m_transitionDelay.at(*staId) - MicroSeconds(1), [=, this]() {
-        for (uint8_t id = 0; id < m_apMac->GetNLinks(); id++)
-        {
-            if (m_staMacs.at(*staId)->IsEmlsrLink(id))
-            {
-                CheckBlockedLink(m_apMac,
-                                 m_staMacs.at(*staId)->GetAddress(),
-                                 id,
-                                 WifiQueueBlockedReason::WAITING_EMLSR_TRANSITION_DELAY,
-                                 true,
-                                 "Checking links of EMLSR client " + std::to_string(*staId) +
-                                     " are all blocked on the AP MLD before the end of "
-                                     "transition delay");
-            }
-        }
-    });
-    // immediately after the transition delay, all links for the EMLSR client are unblocked
-    Simulator::Schedule(timeToCfEnd + m_transitionDelay.at(*staId) + MicroSeconds(1), [=, this]() {
-        for (uint8_t id = 0; id < m_apMac->GetNLinks(); id++)
-        {
-            if (m_staMacs.at(*staId)->IsEmlsrLink(id))
-            {
-                CheckBlockedLink(m_apMac,
-                                 m_staMacs.at(*staId)->GetAddress(),
-                                 id,
-                                 WifiQueueBlockedReason::WAITING_EMLSR_TRANSITION_DELAY,
-                                 false,
-                                 "Checking links of EMLSR client " + std::to_string(*staId) +
-                                     " are all unblocked on the AP MLD after the transition delay");
-            }
-        }
-    });
-}
-
-void
-EmlsrDlTxopTest::CheckInitialControlFrame(Ptr<const WifiMpdu> mpdu,
-                                          const WifiTxVector& txVector,
-                                          uint8_t linkId)
-{
-    CtrlTriggerHeader trigger;
-    mpdu->GetPacket()->PeekHeader(trigger);
-    if (!trigger.IsMuRts())
-    {
-        return;
-    }
-
-    NS_TEST_EXPECT_MSG_EQ(m_emlsrEnabledTime.IsStrictlyPositive(),
-                          true,
-                          "Did not expect an ICF before enabling EMLSR mode");
-
-    NS_TEST_EXPECT_MSG_LT(txVector.GetPreambleType(),
-                          WIFI_PREAMBLE_HT_MF,
-                          "Unexpected preamble type for the Initial Control frame");
-    auto rate = txVector.GetMode().GetDataRate(txVector);
-    NS_TEST_EXPECT_MSG_EQ((rate == 6e6 || rate == 12e6 || rate == 24e6),
-                          true,
-                          "Unexpected rate for the Initial Control frame: " << rate);
-
-    bool found = false;
-    Time maxPaddingDelay{};
-
-    for (const auto& userInfo : trigger)
-    {
-        auto addr = m_apMac->GetMldOrLinkAddressByAid(userInfo.GetAid12());
-        NS_TEST_ASSERT_MSG_EQ(addr.has_value(),
-                              true,
-                              "AID " << userInfo.GetAid12() << " not found");
-
-        if (m_apMac->GetWifiRemoteStationManager(linkId)->GetEmlsrEnabled(*addr))
-        {
-            found = true;
-
-            for (std::size_t i = 0; i < m_nEmlsrStations; i++)
-            {
-                if (m_staMacs.at(i)->GetAddress() == *addr)
-                {
-                    maxPaddingDelay = Max(maxPaddingDelay, m_paddingDelay.at(i));
-                    break;
-                }
-            }
-
-            // check that the AP has blocked transmission on all other EMLSR links
-            for (uint8_t id = 0; id < m_apMac->GetNLinks(); id++)
-            {
-                if (!m_apMac->GetWifiRemoteStationManager(id)->GetEmlsrEnabled(*addr))
-                {
-                    continue;
-                }
-
-                CheckBlockedLink(m_apMac,
-                                 *addr,
-                                 id,
-                                 WifiQueueBlockedReason::USING_OTHER_EMLSR_LINK,
-                                 id != linkId,
-                                 "Checking that AP blocked transmissions on all other EMLSR "
-                                 "links after sending ICF to client with AID=" +
-                                     std::to_string(userInfo.GetAid12()),
-                                 false);
-            }
-        }
-    }
-
-    NS_TEST_EXPECT_MSG_EQ(found, true, "Expected ICF to be addressed to at least an EMLSR client");
-
-    auto txDuration = WifiPhy::CalculateTxDuration(mpdu->GetSize(),
-                                                   txVector,
-                                                   m_apMac->GetWifiPhy(linkId)->GetPhyBand());
-
-    if (maxPaddingDelay.IsStrictlyPositive())
-    {
-        // compare the TX duration of this Trigger Frame to that of the Trigger Frame with no
-        // padding added
-        trigger.SetPaddingSize(0);
-        auto pkt = Create<Packet>();
-        pkt->AddHeader(trigger);
-        auto txDurationWithout =
-            WifiPhy::CalculateTxDuration(Create<WifiPsdu>(pkt, mpdu->GetHeader()),
-                                         txVector,
-                                         m_apMac->GetWifiPhy(linkId)->GetPhyBand());
-
-        NS_TEST_EXPECT_MSG_EQ(txDuration,
-                              txDurationWithout + maxPaddingDelay,
-                              "Unexpected TX duration of the MU-RTS TF with padding "
-                                  << maxPaddingDelay.As(Time::US));
-    }
-
-    // check that the EMLSR clients have blocked transmissions on other links, switched their main
-    // PHY (if needed) and have put aux PHYs to sleep after receiving this ICF
-    for (const auto& userInfo : trigger)
-    {
-        for (std::size_t i = 0; i < m_nEmlsrStations; i++)
-        {
-            if (m_staMacs[i]->GetAssociationId() != userInfo.GetAid12())
-            {
-                continue;
-            }
-
-            const auto mainPhyLinkId = m_staMacs[i]->GetLinkForPhy(m_mainPhyId);
-
-            Simulator::Schedule(txDuration + NanoSeconds(5), [=, this]() {
-                for (uint8_t id = 0; id < m_staMacs[i]->GetNLinks(); id++)
-                {
-                    // non-EMLSR links or links on which ICF is received are not blocked
-                    CheckBlockedLink(m_staMacs[i],
-                                     m_apMac->GetAddress(),
-                                     id,
-                                     WifiQueueBlockedReason::USING_OTHER_EMLSR_LINK,
-                                     id != linkId && m_staMacs[i]->IsEmlsrLink(id),
-                                     "Checking EMLSR links on EMLSR client " + std::to_string(i) +
-                                         " after receiving ICF");
-                }
-
-                if (mainPhyLinkId != linkId)
-                {
-                    CheckMainPhyTraceInfo(i, "DlTxopIcfReceivedByAuxPhy", mainPhyLinkId, linkId);
-                }
-
-                CheckAuxPhysSleepMode(m_staMacs[i], true);
-            });
-
-            break;
-        }
-    }
-}
-
-void
-EmlsrDlTxopTest::CheckQosFrames(const WifiConstPsduMap& psduMap,
-                                const WifiTxVector& txVector,
-                                uint8_t linkId)
-{
-    if (m_nEmlsrStations != 2 || m_apMac->GetNLinks() != m_emlsrLinks.size() ||
-        m_emlsrEnabledTime.IsZero() || Simulator::Now() < m_emlsrEnabledTime + m_fe2to3delay)
-
-    {
-        // we are interested in frames sent to test transition delay
-        return;
-    }
-
-    std::size_t firstClientId = 0;
-    std::size_t secondClientId = 1;
-    auto addr = m_staMacs[secondClientId]->GetAddress();
-    auto txDuration =
-        WifiPhy::CalculateTxDuration(psduMap, txVector, m_apMac->GetWifiPhy(linkId)->GetPhyBand());
-
-    m_countQoSframes++;
-
-    switch (m_countQoSframes)
-    {
-    case 1:
-        // generate another small packet addressed to the first EMLSR client only
-        m_apMac->GetDevice()->GetNode()->AddApplication(
-            GetApplication(DOWNLINK, firstClientId, 1, 40));
-        // both EMLSR clients are about to receive a QoS data frame
-        for (std::size_t clientId : {firstClientId, secondClientId})
-        {
-            Simulator::Schedule(txDuration, [=, this]() {
-                for (uint8_t id = 0; id < m_staMacs[clientId]->GetNLinks(); id++)
-                {
-                    // link on which QoS data is received is not blocked
-                    CheckBlockedLink(m_staMacs[clientId],
-                                     m_apMac->GetAddress(),
-                                     id,
-                                     WifiQueueBlockedReason::USING_OTHER_EMLSR_LINK,
-                                     id != linkId,
-                                     "Checking EMLSR links on EMLSR client " +
-                                         std::to_string(clientId) +
-                                         " after receiving the first QoS data frame");
-                }
-            });
-        }
-        break;
-    case 2:
-        // generate another small packet addressed to the second EMLSR client
-        m_apMac->GetDevice()->GetNode()->AddApplication(
-            GetApplication(DOWNLINK, secondClientId, 1, 40));
-
-        // when the transmission of the second QoS data frame starts, both EMLSR clients are
-        // still blocking all the links but the one used to receive the QoS data frame
-        for (std::size_t clientId : {firstClientId, secondClientId})
-        {
-            for (uint8_t id = 0; id < m_staMacs[clientId]->GetNLinks(); id++)
-            {
-                // link on which QoS data is received is not blocked
-                CheckBlockedLink(m_staMacs[clientId],
-                                 m_apMac->GetAddress(),
-                                 id,
-                                 WifiQueueBlockedReason::USING_OTHER_EMLSR_LINK,
-                                 id != linkId,
-                                 "Checking EMLSR links on EMLSR client " +
-                                     std::to_string(clientId) +
-                                     " when starting the reception of the second QoS frame");
-            }
-        }
-
-        // the EMLSR client that is not the recipient of the QoS frame being transmitted will
-        // switch back to listening mode after a transition delay starting from the end of
-        // the PPDU carrying this QoS data frame
-
-        // immediately before the end of the PPDU, this link only is not blocked for the EMLSR
-        // client on the AP MLD
-        Simulator::Schedule(txDuration - NanoSeconds(1), [=, this]() {
-            for (uint8_t id = 0; id < m_apMac->GetNLinks(); id++)
-            {
-                CheckBlockedLink(m_apMac,
-                                 addr,
-                                 id,
-                                 WifiQueueBlockedReason::USING_OTHER_EMLSR_LINK,
-                                 id != linkId,
-                                 "Checking that links of EMLSR client " +
-                                     std::to_string(secondClientId) +
-                                     " are blocked on the AP MLD before the end of the PPDU");
-            }
-        });
-        // immediately before the end of the PPDU, all the links on the EMLSR client that is not
-        // the recipient of the second QoS frame are unblocked (they are unblocked when the
-        // PHY-RXSTART.indication is not received)
-        Simulator::Schedule(txDuration - NanoSeconds(1), [=, this]() {
-            for (uint8_t id = 0; id < m_staMacs[secondClientId]->GetNLinks(); id++)
-            {
-                CheckBlockedLink(m_staMacs[secondClientId],
-                                 m_apMac->GetAddress(),
-                                 id,
-                                 WifiQueueBlockedReason::USING_OTHER_EMLSR_LINK,
-                                 false,
-                                 "Checking that links of EMLSR client " +
-                                     std::to_string(secondClientId) +
-                                     " are unblocked before the end of the second QoS frame");
-            }
-        });
-        // immediately after the end of the PPDU, all links are blocked for the EMLSR client
-        Simulator::Schedule(txDuration + NanoSeconds(1), [=, this]() {
-            for (uint8_t id = 0; id < m_apMac->GetNLinks(); id++)
-            {
-                CheckBlockedLink(m_apMac,
-                                 addr,
-                                 id,
-                                 WifiQueueBlockedReason::WAITING_EMLSR_TRANSITION_DELAY,
-                                 true,
-                                 "Checking links of EMLSR client " +
-                                     std::to_string(secondClientId) +
-                                     " are all blocked on the AP MLD after the end of the PPDU");
-            }
-        });
-        // immediately before the transition delay, all links are still blocked for the EMLSR client
-        Simulator::Schedule(
-            txDuration + m_transitionDelay.at(secondClientId) - NanoSeconds(1),
-            [=, this]() {
-                for (uint8_t id = 0; id < m_apMac->GetNLinks(); id++)
-                {
-                    CheckBlockedLink(
-                        m_apMac,
-                        addr,
-                        id,
-                        WifiQueueBlockedReason::WAITING_EMLSR_TRANSITION_DELAY,
-                        true,
-                        "Checking links of EMLSR client " + std::to_string(secondClientId) +
-                            " are all blocked on the AP MLD before the transition delay",
-                        false);
-                }
-            });
-
-        // 100 us before the transition delay expires, generate another small packet addressed
-        // to a non-EMLSR client. The AP will start a TXOP to transmit this frame, while the
-        // frame addressed to the EMLSR client is still queued because the transition delay has
-        // not yet elapsed. The transition delay will expire while the AP is transmitting the
-        // frame to the non-EMLSR client, so that the AP continues the TXOP to transmit the frame
-        // to the EMLSR client and we can check that the AP performs PIFS recovery after missing
-        // the BlockAck from the EMLSR client
-        Simulator::Schedule(txDuration + m_transitionDelay.at(secondClientId) - MicroSeconds(100),
-                            [=, this]() {
-                                m_apMac->GetDevice()->GetNode()->AddApplication(
-                                    GetApplication(DOWNLINK, m_nEmlsrStations, 1, 40));
-                            });
-
-        break;
-    case 3:
-        // this is the frame addressed to a non-EMLSR client, which is transmitted before the
-        // frame addressed to the EMLSR client, because the links of the latter are still blocked
-        // at the AP because the transition delay has not yet elapsed
-        NS_TEST_EXPECT_MSG_EQ(
-            psduMap.cbegin()->second->GetAddr1(),
-            m_staMacs[m_nEmlsrStations]->GetFrameExchangeManager(linkId)->GetAddress(),
-            "QoS frame not addressed to a non-EMLSR client");
-
-        for (uint8_t id = 0; id < m_apMac->GetNLinks(); id++)
-        {
-            CheckBlockedLink(m_apMac,
-                             addr,
-                             id,
-                             WifiQueueBlockedReason::WAITING_EMLSR_TRANSITION_DELAY,
-                             true,
-                             "Checking links of EMLSR client " + std::to_string(secondClientId) +
-                                 " are all blocked on the AP MLD before the transition delay");
-        }
-        // Block transmissions to the EMLSR client on all the links but the one on which this
-        // frame is sent, so that the AP will continue this TXOP to send the queued frame to the
-        // EMLSR client once the transition delay elapses
-        for (uint8_t id = 0; id < m_apMac->GetNLinks(); id++)
-        {
-            if (id != linkId)
-            {
-                m_apMac->BlockUnicastTxOnLinks(WifiQueueBlockedReason::TID_NOT_MAPPED, addr, {id});
-            }
-        }
-        break;
-    case 4:
-        // the AP is continuing the TXOP, no need to block transmissions anymore
-        for (uint8_t id = 0; id < m_apMac->GetNLinks(); id++)
-        {
-            m_apMac->UnblockUnicastTxOnLinks(WifiQueueBlockedReason::TID_NOT_MAPPED, addr, {id});
-        }
-        // at the end of the fourth QoS frame, this link only is not blocked on the EMLSR
-        // client receiving the frame
-        Simulator::Schedule(txDuration, [=, this]() {
-            for (uint8_t id = 0; id < m_apMac->GetNLinks(); id++)
-            {
-                CheckBlockedLink(m_staMacs[secondClientId],
-                                 m_apMac->GetAddress(),
-                                 id,
-                                 WifiQueueBlockedReason::USING_OTHER_EMLSR_LINK,
-                                 id != linkId,
-                                 "Checking EMLSR links on EMLSR client " +
-                                     std::to_string(secondClientId) +
-                                     " after receiving the fourth QoS data frame");
-            }
-        });
-        break;
-    }
-}
-
-void
-EmlsrDlTxopTest::CheckBlockAck(const WifiConstPsduMap& psduMap,
-                               const WifiTxVector& txVector,
-                               uint8_t phyId)
-{
-    if (m_nEmlsrStations != 2 || m_apMac->GetNLinks() != m_emlsrLinks.size() ||
-        m_emlsrEnabledTime.IsZero() || Simulator::Now() < m_emlsrEnabledTime + m_fe2to3delay)
-    {
-        // we are interested in frames sent to test transition delay
-        return;
-    }
-
-    if (++m_countBlockAck == 4)
-    {
-        // fourth BlockAck is sent by a non-EMLSR client
-        return;
-    }
-
-    auto taddr = psduMap.cbegin()->second->GetAddr2();
-    std::size_t clientId;
-    if (m_staMacs[0]->GetLinkIdByAddress(taddr))
-    {
-        clientId = 0;
-    }
-    else
-    {
-        NS_TEST_ASSERT_MSG_EQ(m_staMacs[1]->GetLinkIdByAddress(taddr).has_value(),
-                              true,
-                              "Unexpected TA for BlockAck: " << taddr);
-        clientId = 1;
-    }
-
-    // find the link on which the main PHY is operating
-    auto currMainPhyLinkId = m_staMacs[clientId]->GetLinkForPhy(phyId);
-    NS_TEST_ASSERT_MSG_EQ(
-        currMainPhyLinkId.has_value(),
-        true,
-        "Didn't find the link on which the PHY sending the BlockAck is operating");
-    auto linkId = *currMainPhyLinkId;
-
-    // we need the MLD address to check the status of the container queues
-    auto addr = m_apMac->GetWifiRemoteStationManager(linkId)->GetMldAddress(taddr);
-    NS_TEST_ASSERT_MSG_EQ(addr.has_value(), true, "MLD address not found for " << taddr);
-
-    auto apPhy = m_apMac->GetWifiPhy(linkId);
-    auto txDuration = WifiPhy::CalculateTxDuration(psduMap, txVector, apPhy->GetPhyBand());
-    auto cfEndTxDuration = WifiPhy::CalculateTxDuration(
-        Create<WifiPsdu>(Create<Packet>(), WifiMacHeader(WIFI_MAC_CTL_END)),
-        m_apMac->GetWifiRemoteStationManager(linkId)->GetRtsTxVector(Mac48Address::GetBroadcast(),
-                                                                     txVector.GetChannelWidth()),
-        apPhy->GetPhyBand());
-
-    switch (m_countBlockAck)
-    {
-    case 5:
-        // the PPDU carrying this BlockAck is corrupted, hence the AP MLD MAC receives the
-        // PHY-RXSTART indication but it does not receive any frame from the PHY. Therefore,
-        // at the end of the PPDU transmission, the AP MLD realizes that the EMLSR client has
-        // not responded and makes an attempt at continuing the TXOP
-
-        // at the end of the PPDU, this link only is not blocked on both the EMLSR client and
-        // the AP MLD
-        Simulator::Schedule(txDuration, [=, this]() {
-            for (uint8_t id = 0; id < m_apMac->GetNLinks(); id++)
-            {
-                CheckBlockedLink(m_staMacs[clientId],
-                                 m_apMac->GetAddress(),
-                                 id,
-                                 WifiQueueBlockedReason::USING_OTHER_EMLSR_LINK,
-                                 id != linkId,
-                                 "Checking links on EMLSR client " + std::to_string(clientId) +
-                                     " at the end of fourth BlockAck");
-                CheckBlockedLink(m_apMac,
-                                 *addr,
-                                 id,
-                                 WifiQueueBlockedReason::USING_OTHER_EMLSR_LINK,
-                                 id != linkId,
-                                 "Checking links of EMLSR client " + std::to_string(clientId) +
-                                     " on the AP MLD at the end of fourth BlockAck");
-            }
-        });
-        // a SIFS after the end of the PPDU, still this link only is not blocked on both the
-        // EMLSR client and the AP MLD
-        Simulator::Schedule(txDuration + apPhy->GetSifs(), [=, this]() {
-            for (uint8_t id = 0; id < m_apMac->GetNLinks(); id++)
-            {
-                CheckBlockedLink(m_staMacs[clientId],
-                                 m_apMac->GetAddress(),
-                                 id,
-                                 WifiQueueBlockedReason::USING_OTHER_EMLSR_LINK,
-                                 id != linkId,
-                                 "Checking links on EMLSR client " + std::to_string(clientId) +
-                                     " a SIFS after the end of fourth BlockAck");
-                CheckBlockedLink(m_apMac,
-                                 *addr,
-                                 id,
-                                 WifiQueueBlockedReason::USING_OTHER_EMLSR_LINK,
-                                 id != linkId,
-                                 "Checking links of EMLSR client " + std::to_string(clientId) +
-                                     " a SIFS after the end of fourth BlockAck");
-            }
-        });
-        // corrupt this BlockAck so that the AP MLD sends a BlockAckReq later on
-        {
-            auto uid = psduMap.cbegin()->second->GetPacket()->GetUid();
-            m_errorModel->SetList({uid});
-        }
-        break;
-    case 6:
-        // at the end of the PPDU, this link only is not blocked on both the EMLSR client and
-        // the AP MLD
-        Simulator::Schedule(txDuration, [=, this]() {
-            for (uint8_t id = 0; id < m_apMac->GetNLinks(); id++)
-            {
-                CheckBlockedLink(m_staMacs[clientId],
-                                 m_apMac->GetAddress(),
-                                 id,
-                                 WifiQueueBlockedReason::USING_OTHER_EMLSR_LINK,
-                                 id != linkId,
-                                 "Checking links on EMLSR client " + std::to_string(clientId) +
-                                     " at the end of fifth BlockAck");
-                CheckBlockedLink(m_apMac,
-                                 *addr,
-                                 id,
-                                 WifiQueueBlockedReason::USING_OTHER_EMLSR_LINK,
-                                 id != linkId,
-                                 "Checking links of EMLSR client " + std::to_string(clientId) +
-                                     " on the AP MLD at the end of fifth BlockAck");
-            }
-        });
-        // before the end of the CF-End frame, still this link only is not blocked on both the
-        // EMLSR client and the AP MLD
-        Simulator::Schedule(
-            txDuration + apPhy->GetSifs() + cfEndTxDuration - MicroSeconds(1),
-            [=, this]() {
-                for (uint8_t id = 0; id < m_apMac->GetNLinks(); id++)
-                {
-                    CheckBlockedLink(m_staMacs[clientId],
-                                     m_apMac->GetAddress(),
-                                     id,
-                                     WifiQueueBlockedReason::USING_OTHER_EMLSR_LINK,
-                                     id != linkId,
-                                     "Checking links on EMLSR client " + std::to_string(clientId) +
-                                         " before the end of CF-End frame");
-                    CheckBlockedLink(m_apMac,
-                                     *addr,
-                                     id,
-                                     WifiQueueBlockedReason::USING_OTHER_EMLSR_LINK,
-                                     id != linkId,
-                                     "Checking links of EMLSR client " + std::to_string(clientId) +
-                                         " on the AP MLD before the end of CF-End frame");
-                }
-            });
-        // after the end of the CF-End frame, all links for the EMLSR client are blocked on the
-        // AP MLD
-        Simulator::Schedule(
-            txDuration + apPhy->GetSifs() + cfEndTxDuration + MicroSeconds(1),
-            [=, this]() {
-                for (uint8_t id = 0; id < m_apMac->GetNLinks(); id++)
-                {
-                    CheckBlockedLink(
-                        m_apMac,
-                        *addr,
-                        id,
-                        WifiQueueBlockedReason::WAITING_EMLSR_TRANSITION_DELAY,
-                        true,
-                        "Checking links of EMLSR client " + std::to_string(clientId) +
-                            " are all blocked on the AP MLD right after the end of CF-End");
-                }
-            });
-        // before the end of the transition delay, all links for the EMLSR client are still
-        // blocked on the AP MLD
-        Simulator::Schedule(
-            txDuration + apPhy->GetSifs() + cfEndTxDuration + m_transitionDelay.at(clientId) -
-                MicroSeconds(1),
-            [=, this]() {
-                for (uint8_t id = 0; id < m_apMac->GetNLinks(); id++)
-                {
-                    CheckBlockedLink(
-                        m_apMac,
-                        *addr,
-                        id,
-                        WifiQueueBlockedReason::WAITING_EMLSR_TRANSITION_DELAY,
-                        true,
-                        "Checking links of EMLSR client " + std::to_string(clientId) +
-                            " are all blocked on the AP MLD before the end of transition delay");
-                }
-            });
-        // immediately after the transition delay, all links for the EMLSR client are unblocked
-        Simulator::Schedule(
-            txDuration + apPhy->GetSifs() + cfEndTxDuration + m_transitionDelay.at(clientId) +
-                MicroSeconds(1),
-            [=, this]() {
-                for (uint8_t id = 0; id < m_apMac->GetNLinks(); id++)
-                {
-                    CheckBlockedLink(
-                        m_apMac,
-                        *addr,
-                        id,
-                        WifiQueueBlockedReason::WAITING_EMLSR_TRANSITION_DELAY,
-                        false,
-                        "Checking links of EMLSR client " + std::to_string(clientId) +
-                            " are all unblocked on the AP MLD after the transition delay");
-                }
-            });
-        break;
-    }
-}
-
-void
-EmlsrDlTxopTest::DoRun()
-{
-    Simulator::Stop(m_duration);
-    Simulator::Run();
-
-    CheckResults();
-
-    Simulator::Destroy();
-}
-
-EmlsrUlTxopTest::EmlsrUlTxopTest(const Params& params)
-    : EmlsrOperationsTestBase("Check EML UL TXOP transmissions (genBackoffAndUseAuxPhyCca=" +
-                              std::to_string(params.genBackoffAndUseAuxPhyCca) +
-                              ", nSlotsLeftAlert=" + std::to_string(params.nSlotsLeftAlert)),
-      m_emlsrLinks(params.linksToEnableEmlsrOn),
-      m_channelWidth(params.channelWidth),
-      m_auxPhyChannelWidth(params.auxPhyChannelWidth),
-      m_mediumSyncDuration(params.mediumSyncDuration),
-      m_msdMaxNTxops(params.msdMaxNTxops),
-      m_emlsrEnabledTime(0),
-      m_firstUlPktsGenTime(0),
-      m_unblockMainPhyLinkDelay(MilliSeconds(20)),
-      m_checkBackoffStarted(false),
-      m_countQoSframes(0),
-      m_countBlockAck(0),
-      m_countRtsframes(0),
-      m_genBackoffIfTxopWithoutTx(params.genBackoffAndUseAuxPhyCca),
-      m_useAuxPhyCca(params.genBackoffAndUseAuxPhyCca),
-      m_nSlotsLeftAlert(params.nSlotsLeftAlert),
-      m_switchMainPhyBackDelayTimeout(params.switchMainPhyBackDelayTimeout),
-      m_5thQosFrameExpWidth(0)
-{
-    m_nEmlsrStations = 1;
-    m_nNonEmlsrStations = 0;
-    m_linksToEnableEmlsrOn = params.linksToEnableEmlsrOn;
-    m_mainPhyId = 1;
-
-    // when aux PHYs do not switch link, the main PHY switches back to its previous link after
-    // a TXOP, hence the transition delay must exceed the channel switch delay (default: 250us)
-    m_transitionDelay = {MicroSeconds(256)};
-    m_establishBaDl = true;
-    m_establishBaUl = true;
-    m_putAuxPhyToSleep = params.putAuxPhyToSleep;
-    m_duration = Seconds(1);
-
-    NS_ABORT_MSG_IF(params.linksToEnableEmlsrOn.size() < 2,
-                    "This test requires at least two links to be configured as EMLSR links");
-    for (uint8_t id = 0; id < 3; id++)
-    {
-        if (!m_emlsrLinks.contains(id))
-        {
-            // non-EMLSR link found
-            m_nonEmlsrLink = id;
-            break;
-        }
-    }
-}
-
-void
-EmlsrUlTxopTest::DoSetup()
-{
-    Config::SetDefault("ns3::EmlsrManager::AuxPhyChannelWidth",
-                       UintegerValue(m_auxPhyChannelWidth));
-    Config::SetDefault("ns3::DefaultEmlsrManager::SwitchAuxPhy", BooleanValue(false));
-    Config::SetDefault("ns3::AdvancedEmlsrManager::UseAuxPhyCca", BooleanValue(m_useAuxPhyCca));
-    Config::SetDefault("ns3::AdvancedEmlsrManager::SwitchMainPhyBackDelay",
-                       TimeValue(MilliSeconds(m_switchMainPhyBackDelayTimeout ? 2 : 0)));
-    Config::SetDefault("ns3::EhtConfiguration::MediumSyncDuration",
-                       TimeValue(m_mediumSyncDuration));
-    Config::SetDefault("ns3::EhtConfiguration::MsdMaxNTxops", UintegerValue(m_msdMaxNTxops));
-    Config::SetDefault("ns3::ChannelAccessManager::GenerateBackoffIfTxopWithoutTx",
-                       BooleanValue(m_genBackoffIfTxopWithoutTx));
-    Config::SetDefault("ns3::ChannelAccessManager::NSlotsLeft", UintegerValue(m_nSlotsLeftAlert));
-    // Channel switch delay should be less than RTS TX time + SIFS + CTS TX time, otherwise
-    // UL TXOPs cannot be initiated by aux PHYs
-    Config::SetDefault("ns3::WifiPhy::ChannelSwitchDelay", TimeValue(MicroSeconds(75)));
-    Config::SetDefault("ns3::WifiPhy::NotifyMacHdrRxEnd", BooleanValue(true));
-
-    EmlsrOperationsTestBase::DoSetup();
-
-    m_staMacs[0]->GetQosTxop(AC_BE)->TraceConnectWithoutContext(
-        "BackoffTrace",
-        MakeCallback(&EmlsrUlTxopTest::BackoffGenerated, this));
-
-    uint8_t linkId = 0;
-    // configure channels of the given width
-    for (auto band : {WIFI_PHY_BAND_2_4GHZ, WIFI_PHY_BAND_5GHZ, WIFI_PHY_BAND_6GHZ})
-    {
-        MHz_u bw{20};
-        uint8_t number = band == WIFI_PHY_BAND_5GHZ ? 36 : 1;
-
-        auto width =
-            std::min(m_channelWidth, band == WIFI_PHY_BAND_2_4GHZ ? MHz_u{40} : MHz_u{160});
-        while (bw < width)
-        {
-            bw *= 2;
-            number += Count20MHzSubchannels(bw);
-        }
-
-        for (auto mac : std::initializer_list<Ptr<WifiMac>>{m_apMac, m_staMacs[0]})
-        {
-            mac->GetWifiPhy(linkId)->SetOperatingChannel(
-                WifiPhy::ChannelTuple{number, width, band, 0});
-        }
-        linkId++;
-    }
-
-    // install post reception error model on the AP affiliated with the AP MLD and operating on
-    // the same link as the main PHY of the EMLSR client
-    m_errorModel = CreateObject<ListErrorModel>();
-    m_apMac->GetWifiPhy(m_mainPhyId)->SetPostReceptionErrorModel(m_errorModel);
-}
-
-void
-EmlsrUlTxopTest::BackoffGenerated(uint32_t backoff, uint8_t linkId)
-{
-    NS_LOG_INFO("Backoff value " << backoff << " generated by EMLSR client on link " << +linkId
-                                 << "\n");
-    if (linkId != m_mainPhyId)
-    {
-        return; // we are only interested in backoff on main PHY link
-    }
-
-    if (m_backoffEndTime)
-    {
-        if (m_checkBackoffStarted)
-        {
-            // another backoff value while checkBackoffStarted is true is generated only if
-            // GenerateBackoffIfTxopWithoutTx is true
-            NS_TEST_EXPECT_MSG_EQ(
-                m_genBackoffIfTxopWithoutTx,
-                true,
-                "Another backoff value should not be generated while the main PHY link is blocked");
-
-            NS_TEST_EXPECT_MSG_EQ(m_backoffEndTime.value(),
-                                  Simulator::Now(),
-                                  "Backoff generated at unexpected time");
-        }
-        else
-        {
-            // we are done checking the backoff
-            m_backoffEndTime.reset();
-        }
-    }
-
-    if (m_checkBackoffStarted)
-    {
-        if (!m_backoffEndTime.has_value())
-        {
-            // this is the first time we set m_backoffEndTime, which is done right after receiving
-            // a BlockAck, thus we have to wait an AIFS before invoking backoff
-            m_backoffEndTime = Simulator::Now() +
-                               m_staMacs[0]->GetChannelAccessManager(linkId)->GetSifs() +
-                               m_staMacs[0]->GetQosTxop(AC_BE)->GetAifsn(linkId) *
-                                   m_staMacs[0]->GetChannelAccessManager(linkId)->GetSlot();
-        }
-        else
-        {
-            // we get here when the backoff expired but no transmission occurred, thus we have
-            // generated a new backoff value and we will start decrementing the counter in a slot
-            m_backoffEndTime =
-                Simulator::Now() + m_staMacs[0]->GetChannelAccessManager(linkId)->GetSlot();
-        }
-        // add the time corresponding to the generated number of slots
-        m_backoffEndTime.value() +=
-            backoff * m_staMacs[0]->GetChannelAccessManager(linkId)->GetSlot();
-        NS_LOG_DEBUG("Expected backoff end time = " << m_backoffEndTime->As(Time::US) << "\n");
-    }
-}
-
-void
-EmlsrUlTxopTest::Transmit(Ptr<WifiMac> mac,
-                          uint8_t phyId,
-                          WifiConstPsduMap psduMap,
-                          WifiTxVector txVector,
-                          double txPowerW)
-{
-    EmlsrOperationsTestBase::Transmit(mac, phyId, psduMap, txVector, txPowerW);
-    auto linkId = m_txPsdus.back().linkId;
-
-    auto psdu = psduMap.begin()->second;
-    auto nodeId = mac->GetDevice()->GetNode()->GetId();
-
-    switch (psdu->GetHeader(0).GetType())
-    {
-    case WIFI_MAC_MGT_ASSOCIATION_REQUEST:
-        NS_ASSERT_MSG(nodeId > 0, "APs do not send AssocReq frames");
-        NS_TEST_EXPECT_MSG_EQ(+linkId, +m_mainPhyId, "AssocReq not sent by the main PHY");
-        break;
-
-    case WIFI_MAC_CTL_RTS:
-        CheckRtsFrames(*psdu->begin(), txVector, linkId);
-        break;
-
-    case WIFI_MAC_CTL_CTS:
-        CheckCtsFrames(*psdu->begin(), txVector, linkId);
-        break;
-
-    case WIFI_MAC_QOSDATA:
-        CheckQosFrames(psduMap, txVector, linkId);
-        break;
-
-    case WIFI_MAC_CTL_BACKRESP:
-        CheckBlockAck(psduMap, txVector, linkId);
-        break;
-
-    default:;
-    }
-}
-
-void
-EmlsrUlTxopTest::StartTraffic()
-{
-    // initially, we prevent transmissions on aux PHY links
-    auto auxPhyLinks = m_staMacs[0]->GetSetupLinkIds();
-    auxPhyLinks.erase(m_mainPhyId);
-    if (m_nonEmlsrLink)
-    {
-        auxPhyLinks.erase(*m_nonEmlsrLink);
-    }
-    m_staMacs[0]->BlockUnicastTxOnLinks(WifiQueueBlockedReason::TID_NOT_MAPPED,
-                                        m_apMac->GetAddress(),
-                                        auxPhyLinks);
-
-    // Association, Block Ack agreement establishment and enabling EMLSR mode have been done.
-    // After 50ms, schedule:
-    // - block of transmissions on the link where the main PHY is operating and on the non-EMLSR
-    //   link (if any)
-    // - the generation of two UL packets
-    // - after m_unblockMainPhyLinkDelay, unblock transmissions on the link where the main PHY
-    //   is operating, so that the first data frame is transmitted on that link
-    Simulator::Schedule(MilliSeconds(50), [&]() {
-        std::set<uint8_t> linkIds;
-        linkIds.insert(*m_staMacs[0]->GetLinkForPhy(m_mainPhyId));
-        if (m_nonEmlsrLink)
-        {
-            linkIds.insert(*m_nonEmlsrLink);
-        }
-        m_staMacs[0]->BlockUnicastTxOnLinks(WifiQueueBlockedReason::TID_NOT_MAPPED,
-                                            m_apMac->GetAddress(),
-                                            linkIds);
-
-        NS_LOG_INFO("Enqueuing two packets at the EMLSR client\n");
-        m_staMacs[0]->GetDevice()->GetNode()->AddApplication(GetApplication(UPLINK, 0, 2, 1000));
-        m_firstUlPktsGenTime = Simulator::Now();
-
-        Simulator::Schedule(m_unblockMainPhyLinkDelay, [&]() {
-            m_staMacs[0]->UnblockUnicastTxOnLinks(WifiQueueBlockedReason::TID_NOT_MAPPED,
-                                                  m_apMac->GetAddress(),
-                                                  {*m_staMacs[0]->GetLinkForPhy(m_mainPhyId)});
-        });
-    });
-}
-
-void
-EmlsrUlTxopTest::CheckQosFrames(const WifiConstPsduMap& psduMap,
-                                const WifiTxVector& txVector,
-                                uint8_t linkId)
-{
-    m_countQoSframes++;
-
-    auto txDuration =
-        WifiPhy::CalculateTxDuration(psduMap, txVector, m_apMac->GetWifiPhy(linkId)->GetPhyBand());
-
-    switch (m_countQoSframes)
-    {
-    case 1:
-    case 2:
-        // do nothing, these are the QoS data frames sent to establish BA agreements in DL and UL
-        // direction
-        break;
-    case 3:
-        // first UL data frame (transmitted by the main PHY)
-        if (m_nonEmlsrLink)
-        {
-            // generate data packets for another UL data frame, which will be sent on the
-            // non-EMLSR link
-            NS_LOG_INFO("Enqueuing two packets at the EMLSR client\n");
-            m_staMacs[0]->GetDevice()->GetNode()->AddApplication(
-                GetApplication(UPLINK, 0, 2, 1000));
-
-            // unblock transmissions on the non-EMLSR link once the two packets are queued
-            Simulator::ScheduleNow([=, this]() {
-                m_staMacs[0]->UnblockUnicastTxOnLinks(WifiQueueBlockedReason::TID_NOT_MAPPED,
-                                                      m_apMac->GetAddress(),
-                                                      {*m_nonEmlsrLink});
-            });
-        }
-
-        // check that other EMLSR links are now blocked on the EMLSR client and on the AP MLD
-        // after this QoS data frame is received
-        Simulator::ScheduleNow([=, this]() {
-            auto phyHdrTxTime = WifiPhy::CalculatePhyPreambleAndHeaderDuration(txVector);
-            auto macHdrSize = (*psduMap.at(SU_STA_ID)->begin())->GetHeader().GetSerializedSize() +
-                              4 /* A-MPDU subframe header size */;
-            auto macHdrTxTime =
-                DataRate(txVector.GetMode().GetDataRate(txVector)).CalculateBytesTxTime(macHdrSize);
-
-            for (auto id : m_staMacs[0]->GetLinkIds())
-            {
-                CheckBlockedLink(
-                    m_staMacs[0],
-                    m_apMac->GetAddress(),
-                    id,
-                    WifiQueueBlockedReason::USING_OTHER_EMLSR_LINK,
-                    id != m_staMacs[0]->GetLinkForPhy(m_mainPhyId) && m_staMacs[0]->IsEmlsrLink(id),
-                    "Checking EMLSR links on EMLSR client while sending the first data frame",
-                    false);
-
-                Simulator::Schedule(phyHdrTxTime + macHdrTxTime + MicroSeconds(1), [=, this]() {
-                    CheckBlockedLink(m_apMac,
-                                     m_staMacs[0]->GetAddress(),
-                                     id,
-                                     WifiQueueBlockedReason::USING_OTHER_EMLSR_LINK,
-                                     id != m_staMacs[0]->GetLinkForPhy(m_mainPhyId) &&
-                                         m_staMacs[0]->IsEmlsrLink(id),
-                                     "Checking EMLSR links on AP MLD right after receiving the MAC "
-                                     "header of the first data frame");
-                });
-
-                Simulator::Schedule(
-                    txDuration + MicroSeconds(MAX_PROPAGATION_DELAY_USEC),
-                    [=, this]() {
-                        CheckBlockedLink(
-                            m_apMac,
-                            m_staMacs[0]->GetAddress(),
-                            id,
-                            WifiQueueBlockedReason::USING_OTHER_EMLSR_LINK,
-                            id != m_staMacs[0]->GetLinkForPhy(m_mainPhyId) &&
-                                m_staMacs[0]->IsEmlsrLink(id),
-                            "Checking EMLSR links on AP MLD after sending the first data frame");
-                    });
-            }
-        });
-
-        if (m_nonEmlsrLink)
-        {
-            break;
-        }
-        m_countQoSframes++; // if all EMLSR links, next case is already executed now
-        [[fallthrough]];
-    case 4:
-        // check that other EMLSR links are now blocked on the EMLSR client and on the AP MLD
-        // after this QoS data frame is received
-        Simulator::ScheduleNow([=, this]() {
-            // make aux PHYs capable of transmitting frames
-            auto auxPhyLinks = m_staMacs[0]->GetSetupLinkIds();
-            auxPhyLinks.erase(m_mainPhyId);
-            if (m_nonEmlsrLink)
-            {
-                auxPhyLinks.erase(*m_nonEmlsrLink);
-            }
-            m_staMacs[0]->UnblockUnicastTxOnLinks(WifiQueueBlockedReason::TID_NOT_MAPPED,
-                                                  m_apMac->GetAddress(),
-                                                  auxPhyLinks);
-
-            // block transmissions on the link where the main PHY is operating
-            m_staMacs[0]->BlockUnicastTxOnLinks(WifiQueueBlockedReason::TID_NOT_MAPPED,
-                                                m_apMac->GetAddress(),
-                                                {*m_staMacs[0]->GetLinkForPhy(m_mainPhyId)});
-
-            // generate data packets for another UL data frame, which will be sent on a link on
-            // which an aux PHY is operating
-            NS_LOG_INFO("Enqueuing two packets at the EMLSR client\n");
-            m_staMacs[0]->GetDevice()->GetNode()->AddApplication(
-                GetApplication(UPLINK, 0, 2, 1000));
-        });
-        break;
-    case 5:
-        // check that other EMLSR links are now blocked on both the EMLSR client and the AP MLD
-        Simulator::ScheduleNow([=, this]() {
-            for (auto id : m_staMacs[0]->GetLinkIds())
-            {
-                CheckBlockedLink(
-                    m_staMacs[0],
-                    m_apMac->GetAddress(),
-                    id,
-                    WifiQueueBlockedReason::USING_OTHER_EMLSR_LINK,
-                    id != linkId && m_staMacs[0]->IsEmlsrLink(id),
-                    "Checking EMLSR links on EMLSR client while sending the second data frame",
-                    false);
-
-                CheckBlockedLink(
-                    m_apMac,
-                    m_staMacs[0]->GetAddress(),
-                    id,
-                    WifiQueueBlockedReason::USING_OTHER_EMLSR_LINK,
-                    id != linkId && m_staMacs[0]->IsEmlsrLink(id),
-                    "Checking EMLSR links on AP MLD while sending the second data frame",
-                    false);
-            }
-
-            // unblock transmission on the link where the main PHY is operating
-            m_staMacs[0]->GetMacQueueScheduler()->UnblockQueues(
-                WifiQueueBlockedReason::TID_NOT_MAPPED,
-                AC_BE,
-                {WIFI_QOSDATA_QUEUE},
-                m_apMac->GetAddress(),
-                m_staMacs[0]->GetAddress(),
-                {0},
-                {m_mainPhyId});
-        });
-        break;
-    }
-}
-
-void
-EmlsrUlTxopTest::CheckBlockAck(const WifiConstPsduMap& psduMap,
-                               const WifiTxVector& txVector,
-                               uint8_t linkId)
-{
-    m_countBlockAck++;
-
-    auto auxPhyLinks = m_staMacs[0]->GetSetupLinkIds();
-    auxPhyLinks.erase(m_mainPhyId);
-    if (m_nonEmlsrLink)
-    {
-        auxPhyLinks.erase(*m_nonEmlsrLink);
-    }
-
-    auto txDuration =
-        WifiPhy::CalculateTxDuration(psduMap, txVector, m_apMac->GetWifiPhy(linkId)->GetPhyBand());
-
-    // in this test, BlockAck frames terminates TXOP, thus aux PHYs shall be in sleep mode before
-    // the end of BlockAck reception and awake right afterwards
-    if (linkId != m_nonEmlsrLink)
-    {
-        Simulator::Schedule(txDuration - TimeStep(1),
-                            &EmlsrUlTxopTest::CheckAuxPhysSleepMode,
-                            this,
-                            m_staMacs[0],
-                            true);
-        Simulator::Schedule(txDuration + TimeStep(1),
-                            &EmlsrUlTxopTest::CheckAuxPhysSleepMode,
-                            this,
-                            m_staMacs[0],
-                            false);
-
-        // if the TXOP has been carried out on a link other than the preferred link, the main PHY
-        // switches back to the preferred link when the TXOP ends
-        if (m_staMacs[0]->GetLinkForPhy(m_mainPhyId) != linkId)
-        {
-            Simulator::Schedule(txDuration + TimeStep(1), [=, this]() {
-                // check the traced remaining time before calling CheckMainPhyTraceInfo
-                if (const auto traceInfoIt = m_traceInfo.find(0);
-                    traceInfoIt != m_traceInfo.cend() &&
-                    traceInfoIt->second->GetName() == "TxopEnded")
-                {
-                    const auto& traceInfo =
-                        static_cast<const EmlsrTxopEndedTrace&>(*traceInfoIt->second);
-                    NS_TEST_EXPECT_MSG_EQ(
-                        traceInfo.remTime,
-                        Time{0},
-                        "Expected null remaining time because TXOP ended regularly");
-                }
-
-                CheckMainPhyTraceInfo(0, "TxopEnded", linkId, m_mainPhyId);
-            });
-        }
-    }
-
-    switch (m_countBlockAck)
-    {
-    case 1:
-    case 2:
-        // do nothing, these are BlockAcks in response to the QoS data frames sent to establish
-        // BA agreements in DL and UL direction
-        break;
-    case 3:
-        if (linkId == m_nonEmlsrLink)
-        {
-            // this BlockAck has been sent on the non-EMLSR link, ignore it
-            break;
-        }
-        m_checkBackoffStarted = true;
-        if (!m_nonEmlsrLink)
-        {
-            m_countBlockAck++; // if all EMLSR links, next case is already executed now
-        }
-        [[fallthrough]];
-    case 4:
-        if (m_nonEmlsrLink && m_countBlockAck == 4)
-        {
-            // block transmissions on the non-EMLSR link
-            Simulator::Schedule(txDuration + NanoSeconds(1), [=, this]() {
-                m_staMacs[0]->BlockUnicastTxOnLinks(WifiQueueBlockedReason::TID_NOT_MAPPED,
-                                                    m_apMac->GetAddress(),
-                                                    {*m_nonEmlsrLink});
-            });
-        }
-        if (linkId == m_nonEmlsrLink)
-        {
-            // this BlockAck has been sent on the non-EMLSR link, ignore it
-            break;
-        }
-        m_checkBackoffStarted = true;
-        break;
-    case 5:
-        // Block Ack in response to the second data frame sent by the EMLSR client on EMLSR links.
-        // Check that MediumSyncDelay timer starts running on the link where the main PHY switches
-        // to when the channel switch is completed
-        Simulator::Schedule(
-            txDuration + m_staMacs[0]->GetDevice()->GetPhy(m_mainPhyId)->GetChannelSwitchDelay() +
-                NanoSeconds(1),
-            [=, this]() {
-                auto elapsed =
-                    m_staMacs[0]->GetEmlsrManager()->GetElapsedMediumSyncDelayTimer(m_mainPhyId);
-                NS_TEST_EXPECT_MSG_EQ(
-                    elapsed.has_value(),
-                    true,
-                    "MediumSyncDelay timer not running on link where main PHY is operating");
-                m_lastMsdExpiryTime = Simulator::Now() +
-                                      m_staMacs[0]->GetEmlsrManager()->GetMediumSyncDuration() -
-                                      *elapsed;
-            });
-
-        // Check that the number of backoff slots is not changed since the beginning of the TXOP
-        Simulator::Schedule(txDuration, [=, this]() {
-            m_checkBackoffStarted = false;
-            NS_TEST_ASSERT_MSG_EQ(m_backoffEndTime.has_value(),
-                                  true,
-                                  "Backoff end time should have been calculated");
-            // when this BlockAck is received, the TXOP ends and the main PHY link is unblocked,
-            // which causes a new backoff timer to be generated if the backoff timer is not
-            // already running
-            *m_backoffEndTime = Max(*m_backoffEndTime, Simulator::Now());
-        });
-
-        // make aux PHYs not capable of transmitting frames
-        m_staMacs[0]->BlockUnicastTxOnLinks(WifiQueueBlockedReason::TID_NOT_MAPPED,
-                                            m_apMac->GetAddress(),
-                                            auxPhyLinks);
-
-        // generate data packets for another UL data frame, which will be sent on the link where
-        // the main PHY is operating
-        NS_LOG_INFO("Enqueuing two packets at the EMLSR client\n");
-        m_staMacs[0]->GetDevice()->GetNode()->AddApplication(GetApplication(UPLINK, 0, 2, 1000));
-        break;
-    case 6: {
-        // block transmission on the main PHY link and on the non-EMLSR link (if any), so that
-        // the next QoS frames are sent on a link where an aux PHY is operating
-        std::set<uint8_t> linkIds{m_mainPhyId};
-        if (m_nonEmlsrLink)
-        {
-            linkIds.insert(*m_nonEmlsrLink);
-        }
-        m_staMacs[0]->GetMacQueueScheduler()->BlockQueues(WifiQueueBlockedReason::TID_NOT_MAPPED,
-                                                          AC_BE,
-                                                          {WIFI_QOSDATA_QUEUE},
-                                                          m_apMac->GetAddress(),
-                                                          m_staMacs[0]->GetAddress(),
-                                                          {0},
-                                                          linkIds);
-    }
-        // make sure aux PHYs are capable of transmitting frames
-        m_staMacs[0]->UnblockUnicastTxOnLinks(WifiQueueBlockedReason::TID_NOT_MAPPED,
-                                              m_apMac->GetAddress(),
-                                              auxPhyLinks);
-
-        // generate data packets for another UL data frame
-        NS_LOG_INFO("Enqueuing two packets at the EMLSR client\n");
-        m_staMacs[0]->GetDevice()->GetNode()->AddApplication(GetApplication(UPLINK, 0, 2, 1000));
-        break;
-    case 7:
-        // make the aux PHY(s) not capable of transmitting frames
-        m_staMacs[0]->GetEmlsrManager()->SetAuxPhyTxCapable(false);
-        if (!m_nonEmlsrLink)
-        {
-            // if there are two auxiliary links, set MediumSyncDuration to zero so that the
-            // next UL QoS data frame is not protected also in case it is transmitted on the
-            // auxiliary link other than the one on which the last frame exchange occurred
-            m_staMacs[0]->GetEmlsrManager()->SetMediumSyncDuration(Seconds(0));
-        }
-
-        // generate a very large backoff for the preferred link, so that when an aux PHY gains a
-        // TXOP, it requests the main PHY to switch to its link to transmit the frames
-        m_staMacs[0]->GetQosTxop(AC_BE)->StartBackoffNow(100, m_mainPhyId);
-
-        // events to be scheduled at the end of the BlockAck response
-        Simulator::Schedule(txDuration + NanoSeconds(1), [=, this]() {
-            // check that the main PHY switches to its preferred link
-            auto mainPhy = m_staMacs[0]->GetDevice()->GetPhy(m_mainPhyId);
-
-            NS_TEST_EXPECT_MSG_EQ(mainPhy->IsStateSwitching(),
-                                  true,
-                                  "Main PHY is not switching at time "
-                                      << Simulator::Now().As(Time::NS));
-
-            // events to be scheduled when the first main PHY channel switch is completed
-            Simulator::Schedule(mainPhy->GetChannelSwitchDelay(), [=, this]() {
-                // either the main PHY is operating on the preferred link or it is switching again
-                auto mainPhyLinkid = m_staMacs[0]->GetLinkForPhy(mainPhy);
-                if (mainPhyLinkid)
-                {
-                    NS_TEST_EXPECT_MSG_EQ(+mainPhyLinkid.value(),
-                                          +m_mainPhyId,
-                                          "Main PHY expected to operate on the preferred link");
-                }
-                else
-                {
-                    NS_TEST_EXPECT_MSG_EQ(
-                        mainPhy->IsStateSwitching(),
-                        true,
-                        "Main PHY is not operating on a link and it is not switching at time "
-                            << Simulator::Now().As(Time::NS));
-                }
-
-                auto acBe = m_staMacs[0]->GetQosTxop(AC_BE);
-
-                // find the min remaining backoff time on auxiliary links for AC BE
-                auto minBackoff = Time::Max();
-                Time slot{0};
-                for (uint8_t id = 0; id < m_staMacs[0]->GetNLinks(); id++)
-                {
-                    if (!m_staMacs[0]->GetWifiPhy(id))
-                    {
-                        continue; // no PHY on this link
-                    }
-
-                    if (auto backoff =
-                            m_staMacs[0]->GetChannelAccessManager(id)->GetBackoffEndFor(acBe);
-                        id != m_mainPhyId && m_staMacs[0]->IsEmlsrLink(id) && backoff < minBackoff)
-                    {
-                        minBackoff = backoff;
-                        slot = m_staMacs[0]->GetWifiPhy(id)->GetSlot();
-                    }
-                }
-
-                // if the backoff on a link has expired before the end of the main PHY channel
-                // switch, the main PHY will be requested to switch again no later than the first
-                // slot boundary after the end of the channel switch. Otherwise, it will be
-                // requested to switch when the backoff expires or when the backoff counter reaches
-                // the configured number of slots
-                auto expected2ndSwitchDelay =
-                    (minBackoff <= Simulator::Now()) ? mainPhy->GetSlot()
-                    : m_nSlotsLeftAlert > 0
-                        ? Max(minBackoff - m_nSlotsLeftAlert * slot - Simulator::Now(), Time{0})
-                        : (minBackoff - Simulator::Now());
-
-                // check that the main PHY is requested to switch to an auxiliary link after
-                // the expected delay
-                Simulator::Schedule(expected2ndSwitchDelay + NanoSeconds(1), [=, this]() {
-                    NS_TEST_EXPECT_MSG_EQ(mainPhy->IsStateSwitching(),
-                                          true,
-                                          "Main PHY is not switching at time "
-                                              << Simulator::Now().As(Time::NS));
-                    NS_TEST_EXPECT_MSG_EQ(m_staMacs[0]->GetLinkForPhy(mainPhy).has_value(),
-                                          false,
-                                          "Main PHY should not be operating on a link because it "
-                                          "should be switching to an auxiliary link");
-                    // check that the appropriate trace info was received
-                    CheckMainPhyTraceInfo(0,
-                                          "UlTxopAuxPhyNotTxCapable",
-                                          std::nullopt,
-                                          0,
-                                          false,
-                                          false);
-
-                    const auto delayUntilIdle = mainPhy->GetDelayUntilIdle();
-                    auto startTimerDelay = delayUntilIdle;
-
-                    if (m_switchMainPhyBackDelayTimeout)
-                    {
-                        TimeValue switchMainPhyBackDelay;
-                        m_staMacs[0]->GetEmlsrManager()->GetAttribute("SwitchMainPhyBackDelay",
-                                                                      switchMainPhyBackDelay);
-
-                        // If nSlotsAlert is 0, the decision whether to start the switch back timer
-                        // is taken at the end of the PIFS period during which we perform CCA and
-                        // NAV check, which coincides with the end of the channel switch or is a
-                        // PIFS afterwards, depending on whether aux PHY CCA is used. Therefore,
-                        // before the end of the CCA and NAV check period we have to make the medium
-                        // busy on the link the main PHY is switching to. Given that we do not know
-                        // which link it is, we set the NAV on all links.
-                        // If nSlotsAlert > 0, the decision whether to start the switch back timer
-                        // is taken at the end of the channel switch and it is needed that the time
-                        // until the backoff end is at least a PIFS to start the switch back timer.
-                        auto endCcaNavCheckDelay = delayUntilIdle;
-
-                        for (uint8_t id = 0; id < m_staMacs[0]->GetNLinks(); ++id)
-                        {
-                            if (auto phy = m_staMacs[0]->GetWifiPhy(id))
-                            {
-                                if (!m_useAuxPhyCca && m_nSlotsLeftAlert == 0)
-                                {
-                                    endCcaNavCheckDelay =
-                                        Max(endCcaNavCheckDelay, delayUntilIdle + phy->GetPifs());
-                                }
-
-                                m_staMacs[0]->GetChannelAccessManager(id)->NotifyNavStartNow(
-                                    endCcaNavCheckDelay + TimeStep(1));
-                            }
-                        }
-                        startTimerDelay = endCcaNavCheckDelay;
-
-                        // when the SwitchMainPhyBackDelay timer starts, extend the NAV on the
-                        // aux PHY link on which the main PHY is operating by the timer duration
-                        // plus a channel switch delay, so that the timer expires and the main PHY
-                        // returns to the preferred link. If nSlotsAlert > 0, the timer duration is
-                        // extended by the expected channel access when the main PHY switch ends.
-                        Simulator::Schedule(startTimerDelay, [=, this]() {
-                            auto auxLinkId = m_staMacs[0]->GetLinkForPhy(mainPhy);
-                            NS_TEST_ASSERT_MSG_EQ(
-                                auxLinkId.has_value(),
-                                true,
-                                "Main PHY should be operating on a link before timer expires");
-                            auto timerDuration = switchMainPhyBackDelay.Get();
-                            if (m_nSlotsLeftAlert > 0)
-                            {
-                                timerDuration += (m_staMacs[0]
-                                                      ->GetChannelAccessManager(*auxLinkId)
-                                                      ->GetBackoffEndFor(acBe) -
-                                                  Simulator::Now());
-                            }
-                            m_staMacs[0]
-                                ->GetChannelAccessManager(*auxLinkId)
-                                ->NotifyNavStartNow(timerDuration +
-                                                    mainPhy->GetChannelSwitchDelay());
-
-                            // check that the SwitchMainPhyBackDelay timer expires and the main PHY
-                            // returns to the preferred link
-                            Simulator::Schedule(timerDuration + TimeStep(1), [=, this]() {
-                                CheckMainPhyTraceInfo(0,
-                                                      "TxopNotGainedOnAuxPhyLink",
-                                                      std::nullopt,
-                                                      m_mainPhyId,
-                                                      false);
-                            });
-                        });
-                    }
-
-                    // events to be scheduled when main PHY finishes switching to auxiliary link
-                    Simulator::Schedule(mainPhy->GetDelayUntilIdle(), [=, this]() {
-                        auto auxLinkId = m_staMacs[0]->GetLinkForPhy(mainPhy);
-                        NS_TEST_ASSERT_MSG_EQ(auxLinkId.has_value(),
-                                              true,
-                                              "Main PHY should have completed switching");
-                        // update backoff on the auxiliary link on which main PHY is operating
-                        auto cam = m_staMacs[0]->GetChannelAccessManager(*auxLinkId);
-                        cam->NeedBackoffUponAccess(acBe, true, true);
-                        const auto usedAuxPhyCca =
-                            (m_useAuxPhyCca || m_auxPhyChannelWidth >= m_channelWidth) &&
-                            (m_nSlotsLeftAlert == 0 ||
-                             cam->GetBackoffEndFor(acBe) <= Simulator::Now());
-                        m_5thQosFrameExpWidth =
-                            usedAuxPhyCca ? m_auxPhyChannelWidth : m_channelWidth;
-                        // record the time the transmission of the QoS data frames must have
-                        // started: (a PIFS after) end of channel switch, if the backoff counter
-                        // on the auxiliary link is null and UseAuxPhyCca is true (false); when
-                        // the backoff expires, otherwise
-                        if (auto slots = acBe->GetBackoffSlots(*auxLinkId); slots == 0)
-                        {
-                            m_5thQosFrameTxTime =
-                                Simulator::Now() + (m_useAuxPhyCca ? Time{0} : mainPhy->GetPifs());
-                        }
-                        else
-                        {
-                            m_5thQosFrameTxTime = cam->GetBackoffEndFor(acBe);
-                        }
-                    });
-                });
-            });
-        });
-
-        // generate data packets for another UL data frame
-        NS_LOG_INFO("Enqueuing two packets at the EMLSR client\n");
-        m_staMacs[0]->GetDevice()->GetNode()->AddApplication(GetApplication(UPLINK, 0, 2, 1000));
-        break;
-    }
-}
-
-void
-EmlsrUlTxopTest::CheckRtsFrames(Ptr<const WifiMpdu> mpdu,
-                                const WifiTxVector& txVector,
-                                uint8_t linkId)
-{
-    if (m_firstUlPktsGenTime.IsZero())
-    {
-        // this function only considers RTS frames sent after the first QoS data frame
-        return;
-    }
-
-    if (linkId != m_mainPhyId)
-    {
-        if (m_countRtsframes > 0 && !m_corruptCts.has_value())
-        {
-            // we get here for the frame exchange in which the CTS response must be corrupted.
-            // Install post reception error model on the STA affiliated with the EMLSR client that
-            // is transmitting this RTS frame
-            m_errorModel = CreateObject<ListErrorModel>();
-            m_staMacs[0]->GetWifiPhy(linkId)->SetPostReceptionErrorModel(m_errorModel);
-            m_corruptCts = true;
-        }
-
-        return;
-    }
-
-    // we get here for RTS frames sent by the main PHY while the MediumSyncDelay timer is running
-    m_countRtsframes++;
-
-    NS_TEST_EXPECT_MSG_EQ(txVector.GetChannelWidth(),
-                          m_staMacs[0]->GetDevice()->GetPhy(m_mainPhyId)->GetChannelWidth(),
-                          "RTS sent by main PHY on an unexpected width");
-
-    // corrupt reception at AP MLD
-    NS_LOG_INFO("CORRUPTED");
-    m_errorModel->SetList({mpdu->GetPacket()->GetUid()});
-}
-
-void
-EmlsrUlTxopTest::CheckCtsFrames(Ptr<const WifiMpdu> mpdu,
-                                const WifiTxVector& txVector,
-                                uint8_t linkId)
-{
-    if (m_firstUlPktsGenTime.IsZero())
-    {
-        // this function only considers CTS frames sent after the first QoS data frame
-        return;
-    }
-
-    auto txDuration = WifiPhy::CalculateTxDuration(mpdu->GetSize(),
-                                                   txVector,
-                                                   m_apMac->GetWifiPhy(linkId)->GetPhyBand());
-    const auto doCorruptCts = m_corruptCts.has_value() && *m_corruptCts;
-
-    if (linkId != m_staMacs[0]->GetLinkForPhy(m_mainPhyId) && linkId != m_nonEmlsrLink &&
-        mpdu->GetHeader().GetAddr1() == m_staMacs[0]->GetFrameExchangeManager(linkId)->GetAddress())
-    {
-        // this is a CTS sent to an aux PHY starting an UL TXOP. Given that aux PHYs do not
-        // switch channel, they are put in sleep mode when the main PHY starts operating on their
-        // link, which coincides with the end of CTS plus two propagation delays
-        const auto auxPhy = m_staMacs[0]->GetWifiPhy(linkId);
-        const auto mainPhy = m_staMacs[0]->GetDevice()->GetPhy(m_mainPhyId);
-        Simulator::Schedule(txDuration, [=, this]() {
-            // when CTS ends, the main PHY is still switching and the aux PHY is not yet sleeping
-            NS_TEST_EXPECT_MSG_EQ(mainPhy->IsStateSwitching(),
-                                  true,
-                                  "Expecting the main PHY to be switching link");
-            NS_TEST_EXPECT_MSG_EQ(auxPhy->IsStateSleep(),
-                                  false,
-                                  "Aux PHY on link " << +linkId << " already in sleep mode");
-            // when CTS is sent, the main PHY may have already started switching, thus we may not
-            // know which link the main PHY is moving from
-            CheckMainPhyTraceInfo(0, "UlTxopRtsSentByAuxPhy", std::nullopt, linkId, false);
-        });
-        Simulator::Schedule(
-            txDuration + MicroSeconds(2 * MAX_PROPAGATION_DELAY_USEC) + TimeStep(1),
-            [=, this]() {
-                // aux PHYs are put to sleep if and only if CTS is not corrupted
-                // (causing the end of the TXOP)
-                CheckAuxPhysSleepMode(m_staMacs[0], !doCorruptCts);
-                // if CTS is corrupted, TXOP ends and the main PHY switches back
-                // to the preferred link
-                if (doCorruptCts)
-                {
-                    // check the traced remaining time before calling CheckMainPhyTraceInfo
-                    if (const auto traceInfoIt = m_traceInfo.find(0);
-                        traceInfoIt != m_traceInfo.cend() &&
-                        traceInfoIt->second->GetName() == "TxopEnded")
-                    {
-                        const auto& traceInfo =
-                            static_cast<const EmlsrTxopEndedTrace&>(*traceInfoIt->second);
-                        NS_TEST_EXPECT_MSG_GT(traceInfo.remTime,
-                                              Time{0},
-                                              "Expected non-zero remaining time because main PHY "
-                                              "was switching when TXOP ended");
-                    }
-
-                    CheckMainPhyTraceInfo(0, "TxopEnded", linkId, m_mainPhyId);
-                }
-            });
-    }
-
-    if (doCorruptCts)
-    {
-        // corrupt reception at EMLSR client
-        NS_LOG_INFO("CORRUPTED");
-        m_errorModel->SetList({mpdu->GetPacket()->GetUid()});
-        m_corruptCts = false;
-    }
-}
-
-void
-EmlsrUlTxopTest::DoRun()
-{
-    Simulator::Stop(m_duration);
-    Simulator::Run();
-
-    CheckResults();
-
-    Simulator::Destroy();
-}
-
-void
-EmlsrUlTxopTest::CheckResults()
-{
-    if (m_msdMaxNTxops > 0)
-    {
-        NS_TEST_EXPECT_MSG_LT_OR_EQ(
-            m_countRtsframes,
-            +m_msdMaxNTxops,
-            "Unexpected number of RTS frames sent while the MediumSyncDelay timer is running");
-    }
-
-    auto psduIt = m_txPsdus.cbegin();
-
-    // lambda to jump to the next QoS data frame or MU-RTS Trigger Frame or RTS transmitted
-    // to/by an EMLSR client
-    auto jumpToQosDataOrMuRts = [&]() {
-        while (psduIt != m_txPsdus.cend() &&
-               !psduIt->psduMap.cbegin()->second->GetHeader(0).IsQosData() &&
-               !psduIt->psduMap.cbegin()->second->GetHeader(0).IsRts())
-        {
-            auto psdu = psduIt->psduMap.cbegin()->second;
-            if (psdu->GetHeader(0).IsTrigger())
-            {
-                CtrlTriggerHeader trigger;
-                psdu->GetPayload(0)->PeekHeader(trigger);
-                if (trigger.IsMuRts())
-                {
-                    break;
-                }
-            }
-            psduIt++;
-        }
-    };
-
-    /**
-     * EMLSR client with EMLSR mode enabled on all links (main PHY ID = 1).
-     *
-     *  main PHY│
-     *  blocked,│
-     *  aux PHYs││main PHY blocked│
-     *  cannot  │
-     *  transmit│
-     *          │                    ┌───┐         ┌──┐
-     *  [link 0]                     │CTS│         │BA│
-     *  ────────────────────────┬───┬┴───┴┬───┬───┬┴──┴─────────────────────────────────────────
-     *                          │RTS│     │QoS│QoS│
-     *                          └───┘     │ 6 │ 7 │
-     *                                    └───┴───┘
-     *                             gen backoff      gen backoff if     MediumSyncDelay
-     *                    ┌──┐    (also many times)  not running       timer expired ┌──┐
-     *  [link 1]          │BA│  │   if allowed        │                   │          │BA│
-     *  ─────────┬───┬───┬┴──┴───────────────────────────┬───┬─────┬───┬────┬───┬───┬┴──┴───────
-     *           │QoS│QoS│                               │RTS│ ... │RTS│    │QoS│QoS│
-     *           │ 4 │ 5 │                               └───┘     └───┘    │ 8 │ 9 │
-     *           └───┴───┘                                                  └───┴───┘
-     *
-     *  [link 2]
-     *  ───────────────────────────────────────────────────────────────────────────
-     *
-     *
-     *
-     * EMLSR client with EMLSR mode enabled on links 0 and 1 (main PHY ID = 1).
-     *
-     * main PHY │
-     *   and    │
-     * non-EMLSR│
-     *   link   │
-     *  blocked,│
-     *  aux PHYs││main PHY blocked│
-     *  cannot  │
-     *  transmit│
-     *          │                    ┌───┐         ┌──┐
-     *  [link 0]                     │CTS│         │BA│
-     *  ────────────────────────┬───┬┴───┴┬───┬───┬┴──┴─────────────────────────────────────────
-     *                          │RTS│     │QoS│QoS│
-     *                          └───┘     │ 8 │ 9 │
-     *                                    └───┴───┘
-     *                             gen backoff      gen backoff if     MediumSyncDelay
-     *                    ┌──┐    (also many times)  not running       timer expired ┌──┐
-     *  [link 1]          │BA│  │   if allowed        │                   │          │BA│
-     *  ─────────┬───┬───┬┴──┴───────────────────────────┬───┬─────┬───┬────┬───┬───┬┴──┴───────
-     *           │QoS│QoS│                               │RTS│ ... │RTS│    │QoS│QoS│
-     *           │ 4 │ 5 │                               └───┘     └───┘    │ 10│ 11│
-     *           └───┴───┘                                                  └───┴───┘
-     *                     ┌──┐
-     *  [link 2]           │BA│
-     *  ──────────┬───┬───┬┴──┴────────────────────────────────────────────────────────────
-     *            │QoS│QoS│
-     *            │ 6 │ 7 │
-     *            └───┴───┘
-     *
-     * For both scenarios, after the last frame exchange on the main PHY link, we have the
-     * following frame exchanges on an EMLSR link where an aux PHY is operating on. After the
-     * first frame exchange, aux PHYs are configured as non-TX capable. Note that the two frame
-     * exchanges may occur on distinct auxiliary EMLSR links.
-     *
-     *                                             | main PHY  || main PHY  |
-     *  [ link ]   ┌───┐         ┌───┐         ┌──┐|switches to||switches to|             ┌──┐
-     *  [0 or 2]   │CTS│         │CTS│         │BA│| preferred ||auxiliary  |PIFS|        │BA│
-     *  ──────┬───┬┴───X────┬───┬┴───┴┬───┬───┬┴──┴──────────────────────────────┬───┬───┬┴──┴───
-     *        │RTS│         │RTS│     │QoS│QoS│                                  │QoS│QoS│
-     *        └───┘         └───┘     │ X │ Y │                                  │ Z │ W │
-     *                                └───┴───┘                                  └───┴───┘
-     * For all EMLSR links scenario, X=10, Y=11, Z=12, W=13
-     * For the scenario with a non-EMLSR link, X=12, Y=13, Z=14, W=15
-     */
-
-    // jump to the first (non-Beacon) frame transmitted after establishing BA agreements and
-    // enabling EMLSR mode
-    while (psduIt != m_txPsdus.cend() &&
-           (psduIt->startTx < m_firstUlPktsGenTime ||
-            psduIt->psduMap.cbegin()->second->GetHeader(0).IsBeacon()))
-    {
-        ++psduIt;
-    }
-
-    // the first QoS data frame is transmitted by the main PHY without RTS protection as soon
-    // as transmissions on the link where the main PHY is operating are unblocked (at this
-    // moment, aux PHYs cannot transmit)
-    NS_TEST_ASSERT_MSG_EQ((psduIt != m_txPsdus.cend()),
-                          true,
-                          "First QoS data frame has not been transmitted");
-    NS_TEST_EXPECT_MSG_EQ(psduIt->psduMap.cbegin()->second->GetHeader(0).IsQosData(),
-                          true,
-                          "First QoS data frame should be transmitted without protection");
-    NS_TEST_EXPECT_MSG_EQ(+psduIt->phyId,
-                          +m_mainPhyId,
-                          "First QoS data frame should be transmitted by the main PHY");
-    NS_TEST_EXPECT_MSG_GT_OR_EQ(psduIt->startTx,
-                                m_firstUlPktsGenTime + m_unblockMainPhyLinkDelay,
-                                "First QoS data frame sent too early");
-
-    auto prevPsduIt = psduIt++;
-    jumpToQosDataOrMuRts();
-
-    if (m_nonEmlsrLink)
-    {
-        // an additional data frame is sent concurrently on the non-EMLSR link
-        NS_TEST_ASSERT_MSG_EQ(
-            (psduIt != m_txPsdus.cend()),
-            true,
-            "Expected another QoS data frame sent concurrently with the first frame");
-        NS_TEST_EXPECT_MSG_EQ(
-            psduIt->psduMap.cbegin()->second->GetHeader(0).IsQosData(),
-            true,
-            "First data frame on non-EMLSR link should be transmitted without protection");
-        NS_TEST_EXPECT_MSG_EQ(+psduIt->linkId,
-                              +m_nonEmlsrLink.value(),
-                              "First data frame expected to be transmitted on the non-EMLSR link");
-        const auto txDuration =
-            WifiPhy::CalculateTxDuration(prevPsduIt->psduMap,
-                                         prevPsduIt->txVector,
-                                         m_staMacs[0]->GetWifiPhy(prevPsduIt->phyId)->GetPhyBand());
-        NS_TEST_EXPECT_MSG_LT(psduIt->startTx,
-                              prevPsduIt->startTx + txDuration,
-                              "First data frame on the non-EMLSR link not sent concurrently");
-        psduIt++;
-        jumpToQosDataOrMuRts();
-    }
-
-    // the second QoS data frame is transmitted by the main PHY after that the aux PHY has
-    // obtained a TXOP and sent an RTS
-    // RTS
-    NS_TEST_ASSERT_MSG_EQ((psduIt != m_txPsdus.cend()),
-                          true,
-                          "RTS before second QoS data frame has not been transmitted");
-    NS_TEST_EXPECT_MSG_EQ(psduIt->psduMap.cbegin()->second->GetHeader(0).IsRts(),
-                          true,
-                          "Second QoS data frame should be transmitted with protection");
-    NS_TEST_EXPECT_MSG_NE(
-        +psduIt->phyId,
-        +m_mainPhyId,
-        "RTS before second QoS data frame should not be transmitted by the main PHY");
-    NS_TEST_EXPECT_MSG_EQ(psduIt->txVector.GetChannelWidth(),
-                          m_auxPhyChannelWidth,
-                          "RTS before second data frame transmitted on an unexpected width");
-    psduIt++;
-    // CTS
-    NS_TEST_ASSERT_MSG_EQ((psduIt != m_txPsdus.cend()),
-                          true,
-                          "CTS before second QoS data frame has not been transmitted");
-    NS_TEST_EXPECT_MSG_EQ(psduIt->psduMap.cbegin()->second->GetHeader(0).IsCts(),
-                          true,
-                          "CTS before second QoS data frame has not been transmitted");
-    psduIt++;
-    // QoS Data
-    NS_TEST_ASSERT_MSG_EQ((psduIt != m_txPsdus.cend()),
-                          true,
-                          "Second QoS data frame has not been transmitted");
-    NS_TEST_EXPECT_MSG_EQ(psduIt->psduMap.cbegin()->second->GetHeader(0).IsQosData(),
-                          true,
-                          "Second QoS data frame has not been transmitted");
-    NS_TEST_EXPECT_MSG_EQ(+psduIt->phyId,
-                          +m_mainPhyId,
-                          "Second QoS data frame should be transmitted by the main PHY");
-    NS_TEST_EXPECT_MSG_EQ(psduIt->txVector.GetChannelWidth(),
-                          m_auxPhyChannelWidth,
-                          "Second data frame not transmitted on the same width as RTS");
-
-    bool moreQosDataFound = false;
-
-    while (++psduIt != m_txPsdus.cend())
-    {
-        jumpToQosDataOrMuRts();
-        if (psduIt != m_txPsdus.cend() &&
-            psduIt->psduMap.cbegin()->second->GetHeader(0).IsQosData())
-        {
-            moreQosDataFound = true;
-
-            NS_TEST_EXPECT_MSG_EQ(+psduIt->phyId,
-                                  +m_mainPhyId,
-                                  "Third QoS data frame should be transmitted by the main PHY");
-            NS_TEST_EXPECT_MSG_EQ(psduIt->txVector.GetChannelWidth(),
-                                  m_staMacs[0]->GetDevice()->GetPhy(m_mainPhyId)->GetChannelWidth(),
-                                  "Expecting TX width of third data frame to equal the channel "
-                                  "width used by the main PHY");
-            NS_TEST_EXPECT_MSG_GT_OR_EQ(
-                psduIt->startTx,
-                m_lastMsdExpiryTime,
-                "Third QoS data frame sent before MediumSyncDelay timer expired");
-
-            break;
-        }
-    }
-
-    NS_TEST_EXPECT_MSG_EQ(moreQosDataFound,
-                          true,
-                          "Third QoS data frame transmitted by the main PHY not found");
-
-    NS_TEST_ASSERT_MSG_EQ((psduIt != m_txPsdus.cend()), true, "Expected more frames");
-    ++psduIt;
-    jumpToQosDataOrMuRts();
-
-    // the first attempt at transmitting the fourth QoS data frame fails because CTS is corrupted
-    // RTS
-    NS_TEST_ASSERT_MSG_EQ((psduIt != m_txPsdus.cend()),
-                          true,
-                          "RTS before fourth QoS data frame has not been transmitted");
-    NS_TEST_EXPECT_MSG_EQ(psduIt->psduMap.cbegin()->second->GetHeader(0).IsRts(),
-                          true,
-                          "Fourth QoS data frame should be transmitted with protection");
-    NS_TEST_EXPECT_MSG_NE(
-        +psduIt->phyId,
-        +m_mainPhyId,
-        "RTS before fourth QoS data frame should not be transmitted by the main PHY");
-    NS_TEST_EXPECT_MSG_EQ(psduIt->txVector.GetChannelWidth(),
-                          m_auxPhyChannelWidth,
-                          "RTS before fourth data frame transmitted on an unexpected width");
-    psduIt++;
-    // CTS
-    NS_TEST_ASSERT_MSG_EQ((psduIt != m_txPsdus.cend()),
-                          true,
-                          "CTS before fourth QoS data frame has not been transmitted");
-    NS_TEST_EXPECT_MSG_EQ(psduIt->psduMap.cbegin()->second->GetHeader(0).IsCts(),
-                          true,
-                          "CTS before fourth QoS data frame has not been transmitted");
-    psduIt++;
-    jumpToQosDataOrMuRts();
-
-    // the fourth QoS data frame is transmitted by an aux PHY after that the aux PHY has
-    // obtained a TXOP and sent an RTS
-    // RTS
-    NS_TEST_ASSERT_MSG_EQ((psduIt != m_txPsdus.cend()),
-                          true,
-                          "RTS before fourth QoS data frame has not been transmitted");
-    NS_TEST_EXPECT_MSG_EQ(psduIt->psduMap.cbegin()->second->GetHeader(0).IsRts(),
-                          true,
-                          "Fourth QoS data frame should be transmitted with protection");
-    NS_TEST_EXPECT_MSG_NE(
-        +psduIt->phyId,
-        +m_mainPhyId,
-        "RTS before fourth QoS data frame should not be transmitted by the main PHY");
-    NS_TEST_EXPECT_MSG_EQ(psduIt->txVector.GetChannelWidth(),
-                          m_auxPhyChannelWidth,
-                          "RTS before fourth data frame transmitted on an unexpected width");
-    psduIt++;
-    // CTS
-    NS_TEST_ASSERT_MSG_EQ((psduIt != m_txPsdus.cend()),
-                          true,
-                          "CTS before fourth QoS data frame has not been transmitted");
-    NS_TEST_EXPECT_MSG_EQ(psduIt->psduMap.cbegin()->second->GetHeader(0).IsCts(),
-                          true,
-                          "CTS before fourth QoS data frame has not been transmitted");
-    psduIt++;
-    // QoS Data
-    NS_TEST_ASSERT_MSG_EQ((psduIt != m_txPsdus.cend()),
-                          true,
-                          "Fourth QoS data frame has not been transmitted");
-    NS_TEST_EXPECT_MSG_EQ(psduIt->psduMap.cbegin()->second->GetHeader(0).IsQosData(),
-                          true,
-                          "Fourth QoS data frame has not been transmitted");
-    NS_TEST_EXPECT_MSG_EQ(+psduIt->phyId,
-                          +m_mainPhyId,
-                          "Fourth QoS data frame should be transmitted by the main PHY");
-    NS_TEST_EXPECT_MSG_EQ(psduIt->txVector.GetChannelWidth(),
-                          m_auxPhyChannelWidth,
-                          "Fourth data frame not transmitted on the same width as RTS");
-
-    auto fourthLinkId = psduIt->linkId;
-
-    psduIt++;
-    jumpToQosDataOrMuRts();
-
-    NS_TEST_ASSERT_MSG_EQ((psduIt != m_txPsdus.cend()), true, "Expected more frames");
-    // Do not check the start transmission time if a backoff is generated even when no
-    // transmission is done (if the backoff expires while the main PHY is switching, a new
-    // backoff is generated and, before this backoff expires, the main PHY may be requested
-    // to switch to another auxiliary link; this may happen multiple times...)
-    if (!m_genBackoffIfTxopWithoutTx && !m_switchMainPhyBackDelayTimeout)
-    {
-        NS_TEST_EXPECT_MSG_LT_OR_EQ(psduIt->startTx,
-                                    m_5thQosFrameTxTime,
-                                    "Fifth data frame transmitted too late");
-    }
-
-    // the fifth QoS data frame is transmitted by the main PHY on an auxiliary link because
-    // the aux PHY is not TX capable. The QoS data frame is protected by RTS if it is transmitted
-    // on a different link than the previous one (because the MediumSyncDelay timer is running)
-    if (psduIt->linkId != fourthLinkId)
-    {
-        // RTS
-        NS_TEST_EXPECT_MSG_EQ(psduIt->psduMap.cbegin()->second->GetHeader(0).IsRts(),
-                              true,
-                              "Fifth QoS data frame should be transmitted with protection");
-        NS_TEST_EXPECT_MSG_EQ(
-            +psduIt->phyId,
-            +m_mainPhyId,
-            "RTS before fifth QoS data frame should be transmitted by the main PHY");
-        psduIt++;
-        // CTS
-        NS_TEST_ASSERT_MSG_EQ((psduIt != m_txPsdus.cend()),
-                              true,
-                              "CTS before fifth QoS data frame has not been transmitted");
-        NS_TEST_EXPECT_MSG_EQ(psduIt->psduMap.cbegin()->second->GetHeader(0).IsCts(),
-                              true,
-                              "CTS before fifth QoS data frame has not been transmitted");
-        psduIt++;
-    }
-
-    // QoS Data
-    NS_TEST_ASSERT_MSG_EQ((psduIt != m_txPsdus.cend()),
-                          true,
-                          "Fifth QoS data frame has not been transmitted");
-    NS_TEST_EXPECT_MSG_EQ(psduIt->psduMap.cbegin()->second->GetHeader(0).IsQosData(),
-                          true,
-                          "Fifth QoS data frame has not been transmitted");
-    NS_TEST_EXPECT_MSG_EQ(+psduIt->phyId,
-                          +m_mainPhyId,
-                          "Fifth QoS data frame should be transmitted by the main PHY");
-    NS_TEST_EXPECT_MSG_NE(+psduIt->linkId,
-                          +m_mainPhyId,
-                          "Fifth QoS data frame should be transmitted on an auxiliary link");
-    NS_TEST_EXPECT_MSG_EQ(psduIt->txVector.GetChannelWidth(),
-                          m_5thQosFrameExpWidth,
-                          "Fifth data frame not transmitted on the correct channel width");
-}
-
-EmlsrUlOfdmaTest::EmlsrUlOfdmaTest(bool enableBsrp)
-    : EmlsrOperationsTestBase("Check UL OFDMA operations with an EMLSR client"),
-      m_enableBsrp(enableBsrp),
-      m_txPsdusPos(0),
-      m_startAccessReq(0)
-{
-    m_linksToEnableEmlsrOn = {0, 1, 2};
-    m_nEmlsrStations = 1;
-    m_nNonEmlsrStations = 1;
-    m_establishBaDl = false;
-    m_establishBaUl = true;
-    m_mainPhyId = 1;
-    m_duration = Seconds(1);
-}
-
-void
-EmlsrUlOfdmaTest::DoSetup()
-{
-    Config::SetDefault("ns3::WifiPhy::ChannelSwitchDelay", TimeValue(m_transitionDelay.at(0)));
-
-    EmlsrOperationsTestBase::DoSetup();
-
-    m_apMac->GetQosTxop(AC_BE)->SetTxopLimits(
-        {MicroSeconds(3200), MicroSeconds(3200), MicroSeconds(3200)});
-
-    auto muScheduler = CreateObjectWithAttributes<RrMultiUserScheduler>("EnableUlOfdma",
-                                                                        BooleanValue(true),
-                                                                        "EnableBsrp",
-                                                                        BooleanValue(m_enableBsrp));
-    m_apMac->AggregateObject(muScheduler);
-}
-
-void
-EmlsrUlOfdmaTest::Transmit(Ptr<WifiMac> mac,
-                           uint8_t phyId,
-                           WifiConstPsduMap psduMap,
-                           WifiTxVector txVector,
-                           double txPowerW)
-{
-    EmlsrOperationsTestBase::Transmit(mac, phyId, psduMap, txVector, txPowerW);
-    auto linkId = m_txPsdus.back().linkId;
-
-    auto psdu = psduMap.begin()->second;
-
-    switch (psdu->GetHeader(0).GetType())
-    {
-    case WIFI_MAC_CTL_TRIGGER:
-        if (m_txPsdusPos == 0 && !m_startAccessReq.IsZero() && Simulator::Now() >= m_startAccessReq)
-        {
-            // this is the first Trigger Frame sent after the AP requested channel access
-            // through the Multi-user scheduler and it is an ICF for the EMLSR client
-            m_txPsdusPos = m_txPsdus.size() - 1;
-            auto txDuration = WifiPhy::CalculateTxDuration(psduMap,
-                                                           txVector,
-                                                           mac->GetWifiPhy(linkId)->GetPhyBand());
-            NS_LOG_INFO("This is the first Trigger Frame\n");
-            // once the Trigger Frame is received by the EMLSR client, make the client application
-            // on the EMLSR client generate two packets. These packets will be sent via UL OFDMA
-            // because the EMLSR client has blocked transmissions on other links when receiving
-            // this Trigger Frame, hence it will not try to get access on other links via EDCA
-            Simulator::Schedule(
-                txDuration + MicroSeconds(1), // to account for propagation delay
-                [=, this]() {
-                    for (const auto id : m_staMacs[0]->GetLinkIds())
-                    {
-                        auto ehtFem = StaticCast<EhtFrameExchangeManager>(
-                            m_staMacs[0]->GetFrameExchangeManager(id));
-                        NS_TEST_EXPECT_MSG_EQ(
-                            ehtFem->UsingOtherEmlsrLink(),
-                            (id != linkId),
-                            "Link " << +id << " was" << (id == linkId ? " not" : "")
-                                    << " expected to be blocked on EMLSR client at time "
-                                    << Simulator::Now().As(Time::NS));
-                    }
-                    NS_LOG_INFO("Generate two packets\n");
-                    m_staMacs[0]->GetDevice()->GetNode()->AddApplication(
-                        GetApplication(UPLINK, 0, 2, 100));
-                });
-        }
-        break;
-
-    case WIFI_MAC_CTL_BACKRESP:
-        if (!m_startAccessReq.IsZero() && Simulator::Now() >= m_startAccessReq)
-        {
-            CtrlBAckResponseHeader blockAck;
-            psdu->GetPayload(0)->PeekHeader(blockAck);
-            if (blockAck.IsMultiSta())
-            {
-                auto txDuration =
-                    WifiPhy::CalculateTxDuration(psduMap,
-                                                 txVector,
-                                                 mac->GetWifiPhy(linkId)->GetPhyBand());
-                Simulator::Stop(txDuration + MicroSeconds(1));
-            }
-        }
-        break;
-
-    default:;
-    }
-
-    if (psdu->GetHeader(0).IsCfEnd())
-    {
-        // we do not check CF-End frames
-        m_txPsdus.pop_back();
-    }
-}
-
-void
-EmlsrUlOfdmaTest::DoRun()
-{
-    Simulator::Stop(m_duration);
-    Simulator::Run();
-
-    CheckResults();
-
-    Simulator::Destroy();
-}
-
-void
-EmlsrUlOfdmaTest::StartTraffic()
-{
-    auto muScheduler = m_apMac->GetObject<MultiUserScheduler>();
-    NS_TEST_ASSERT_MSG_NE(muScheduler, nullptr, "No MU scheduler installed on AP MLD");
-
-    NS_LOG_INFO("Setting Access Request interval");
-
-    const auto interval = MilliSeconds(50);
-    muScheduler->SetAccessReqInterval(interval);
-    m_startAccessReq = Simulator::Now() + interval;
-}
-
-void
-EmlsrUlOfdmaTest::CheckResults()
-{
-    /**
-     * Sending BSRP TF disabled.
-     *
-     * The figure assumes that link 0 is used to send the first Trigger Frame after that the
-     * AP MLD requests channel access through the Multi-user scheduler. The first Trigger Frame
-     * is MU-RTS because EMLSR client needs an ICF; the other Trigger Frames are Basic TFs and
-     * do not solicit the EMLSR client.
-     *             ┌─────┐     ┌─────┐           ┌──────┐
-     *             │ MU  │     │Basic│           │Multi-│
-     *  [link 0]   │ RTS │     │  TF │           │STA BA│
-     *  ───────────┴─────┴┬───┬┴─────┴┬────────┬─┴──────┴───────────────
-     *                    │CTS│       │QoS Null│
-     *                    ├───┤       ├────────┤
-     *                    │CTS│       │QoS Data│
-     *                    └───┘       └────────┘
-     *
-     *               ┌─────┐
-     *               │Basic│
-     *  [link 1]     │  TF │
-     *  ─────────────┴─────┴┬────┬──────────────────────────────────────
-     *                      │QoS │
-     *                      │Null│
-     *                      └────┘
-     *
-     *               ┌─────┐
-     *               │Basic│
-     *  [link 2]     │  TF │
-     *  ─────────────┴─────┴┬────┬──────────────────────────────────────
-     *                      │QoS │
-     *                      │Null│
-     *                      └────┘
-     *
-     * Sending BSRP TF enabled.
-     *
-     * The figure assumes that link 0 is used to send the first Trigger Frame after that the
-     * AP MLD requests channel access through the Multi-user scheduler. The first Trigger Frames
-     * are all BSRP Trigger Frames, but only the first one solicits the EMLSR client, too.
-     *             ┌─────┐          ┌─────┐           ┌──────┐
-     *             │BSRP │          │Basic│           │Multi-│
-     *  [link 0]   │  TF │          │  TF │           │STA BA│
-     *  ───────────┴─────┴┬────────┬┴─────┴┬────────┬─┴──────┴──────────
-     *                    │QoS Null│       │QoS Data│
-     *                    ├────────┤       └────────┘
-     *                    │QoS Null│
-     *                    └────────┘
-     *
-     *               ┌─────┐
-     *               │BSRP │
-     *  [link 1]     │  TF │
-     *  ─────────────┴─────┴┬────┬──────────────────────────────────────
-     *                      │QoS │
-     *                      │Null│
-     *                      └────┘
-     *
-     *               ┌─────┐
-     *               │BSRP │
-     *  [link 2]     │  TF │
-     *  ─────────────┴─────┴┬────┬──────────────────────────────────────
-     *                      │QoS │
-     *                      │Null│
-     *                      └────┘
-     */
-
-    NS_TEST_ASSERT_MSG_GT(m_txPsdusPos, 0, "First Trigger Frame not detected");
-
-    // Check the Trigger Frames (one per link) after requesting channel access
-    auto index = m_txPsdusPos;
-    const auto firstLinkId = m_txPsdus[m_txPsdusPos].linkId;
-    for (; index < m_txPsdusPos + 3; ++index)
-    {
-        NS_TEST_ASSERT_MSG_EQ(m_txPsdus[index].psduMap.cbegin()->second->GetHeader(0).IsTrigger(),
-                              true,
-                              "Expected a Trigger Frame");
-        CtrlTriggerHeader trigger;
-        m_txPsdus[index].psduMap.cbegin()->second->GetPayload(0)->PeekHeader(trigger);
-
-        TriggerFrameType triggerType =
-            m_enableBsrp ? TriggerFrameType::BSRP_TRIGGER
-                         : (index == m_txPsdusPos ? TriggerFrameType::MU_RTS_TRIGGER
-                                                  : TriggerFrameType::BASIC_TRIGGER);
-        NS_TEST_EXPECT_MSG_EQ(+static_cast<uint8_t>(trigger.GetType()),
-                              +static_cast<uint8_t>(triggerType),
-                              "Unexpected Trigger Frame type on link " << +m_txPsdus[index].linkId);
-
-        // only the first TF solicits the EMLSR client and the non-AP MLD
-        NS_TEST_EXPECT_MSG_EQ(
-            trigger.GetNUserInfoFields(),
-            (index == m_txPsdusPos ? 2 : 1),
-            "Unexpected number of User Info fields for Trigger Frame, index=" << index);
-    }
-
-    auto startIndex = index;
-    std::size_t ctsCount = 0;
-    std::size_t qosNullCount = 0;
-    // Check responses to Trigger Frames
-    for (; index < startIndex + 4; ++index)
-    {
-        const auto& hdr = m_txPsdus[index].psduMap.cbegin()->second->GetHeader(0);
-
-        if (hdr.IsCts())
-        {
-            ++ctsCount;
-            continue;
-        }
-
-        if (hdr.IsQosData() && !hdr.HasData())
-        {
-            ++qosNullCount;
-            // if BSRP is enabled, the QoS Null frame sent by the EMLSR client in response to the
-            // first BSRP TF reports a non-null buffer status
-            if (m_enableBsrp &&
-                hdr.GetAddr2() == m_staMacs[0]->GetFrameExchangeManager(firstLinkId)->GetAddress())
-            {
-                NS_TEST_EXPECT_MSG_GT(+hdr.GetQosQueueSize(), 0, "Unexpected buffer size");
-            }
-            else
-            {
-                NS_TEST_EXPECT_MSG_EQ(+hdr.GetQosQueueSize(), 0, "Unexpected buffer size");
-            }
-            continue;
-        }
-    }
-    NS_TEST_EXPECT_MSG_EQ(ctsCount, (m_enableBsrp ? 0 : 2), "Unexpected number of CTS frames");
-    NS_TEST_EXPECT_MSG_EQ(qosNullCount,
-                          (m_enableBsrp ? 4 : 2),
-                          "Unexpected number of QoS Null frames");
-
-    // we expect only one Basic Trigger Frame (sent on the same link as the first Trigger Frame),
-    // because the buffer status reported on the other links by the non-EMLSR client is zero
-    NS_TEST_ASSERT_MSG_EQ(m_txPsdus[index].psduMap.cbegin()->second->GetHeader(0).IsTrigger(),
-                          true,
-                          "Expected a Trigger Frame");
-    NS_TEST_EXPECT_MSG_EQ(+m_txPsdus[index].linkId,
-                          +firstLinkId,
-                          "Unexpected link ID for Basic TF");
-    CtrlTriggerHeader trigger;
-    m_txPsdus[index].psduMap.cbegin()->second->GetPayload(0)->PeekHeader(trigger);
-
-    NS_TEST_EXPECT_MSG_EQ(+static_cast<uint8_t>(trigger.GetType()),
-                          +static_cast<uint8_t>(TriggerFrameType::BASIC_TRIGGER),
-                          "Unexpected Trigger Frame type");
-
-    // when BSRP TF is enabled, the non-EMLSR client has already communicated a buffer status of
-    // zero, so it is not solicited by the AP through the Basic Trigger Frame. Otherwise, it is
-    // solicited because buffer status was not known when the BSRP TF was prepared (before sending
-    // MU-RTS)
-    NS_TEST_EXPECT_MSG_EQ(trigger.GetNUserInfoFields(),
-                          (m_enableBsrp ? 1 : 2),
-                          "Unexpected number of User Info fields for Basic Trigger Frame");
-
-    // Response(s) to the Basic Trigger Frame
-    startIndex = ++index;
-    for (; index < startIndex + (m_enableBsrp ? 1 : 2); ++index)
-    {
-        const auto& hdr = m_txPsdus[index].psduMap.cbegin()->second->GetHeader(0);
-
-        NS_TEST_EXPECT_MSG_EQ(hdr.IsQosData(), true, "Expected a QoS frame");
-
-        // EMLSR client sends a QoS Data frame, non-EMLSR client sends a QoS Null frame
-        NS_TEST_EXPECT_MSG_EQ(
-            hdr.HasData(),
-            (hdr.GetAddr2() == m_staMacs[0]->GetFrameExchangeManager(firstLinkId)->GetAddress()),
-            "Unexpected type of QoS data frame");
-
-        if (hdr.HasData())
-        {
-            NS_TEST_EXPECT_MSG_EQ(m_txPsdus[index].txVector.IsUlMu(),
-                                  true,
-                                  "QoS Data frame should be sent in a TB PPDU");
-        }
-    }
-
-    // Finally, the AP MLD sends a Multi-STA BlockAck
-    NS_TEST_EXPECT_MSG_EQ(m_txPsdus[index].psduMap.cbegin()->second->GetHeader(0).IsBlockAck(),
-                          true,
-                          "Expected a BlockAck frame");
-    CtrlBAckResponseHeader blockAck;
-    m_txPsdus[index].psduMap.cbegin()->second->GetPayload(0)->PeekHeader(blockAck);
-    NS_TEST_EXPECT_MSG_EQ(blockAck.IsMultiSta(), true, "Expected a Multi-STA BlockAck");
-}
-
-EmlsrLinkSwitchTest::EmlsrLinkSwitchTest(const Params& params)
-    : EmlsrOperationsTestBase(
-          std::string("Check EMLSR link switching (switchAuxPhy=") +
-          std::to_string(params.switchAuxPhy) + ", resetCamStateAndInterruptSwitch=" +
-          std::to_string(params.resetCamStateAndInterruptSwitch) +
-          ", auxPhyMaxChWidth=" + std::to_string(params.auxPhyMaxChWidth) + "MHz )"),
-      m_switchAuxPhy(params.switchAuxPhy),
-      m_resetCamStateAndInterruptSwitch(params.resetCamStateAndInterruptSwitch),
-      m_auxPhyMaxChWidth(params.auxPhyMaxChWidth),
-      m_countQoSframes(0),
-      m_countIcfFrames(0),
-      m_countRtsFrames(0),
-      m_txPsdusPos(0)
-{
-    m_nEmlsrStations = 1;
-    m_nNonEmlsrStations = 0;
-    m_linksToEnableEmlsrOn = {0, 1, 2}; // enable EMLSR on all links right after association
-    m_mainPhyId = 1;
-    m_establishBaDl = true;
-    m_duration = Seconds(1);
-    // when aux PHYs do not switch link, the main PHY switches back to its previous link after
-    // a TXOP, hence the transition delay must exceed the channel switch delay (default: 250us)
-    m_transitionDelay = {MicroSeconds(128)};
-}
-
-void
-EmlsrLinkSwitchTest::Transmit(Ptr<WifiMac> mac,
-                              uint8_t phyId,
-                              WifiConstPsduMap psduMap,
-                              WifiTxVector txVector,
-                              double txPowerW)
-{
-    EmlsrOperationsTestBase::Transmit(mac, phyId, psduMap, txVector, txPowerW);
-    auto linkId = m_txPsdus.back().linkId;
-
-    auto psdu = psduMap.begin()->second;
-    auto nodeId = mac->GetDevice()->GetNode()->GetId();
-
-    switch (psdu->GetHeader(0).GetType())
-    {
-    case WIFI_MAC_MGT_ASSOCIATION_REQUEST:
-        NS_ASSERT_MSG(nodeId > 0, "APs do not send AssocReq frames");
-        NS_TEST_EXPECT_MSG_EQ(+linkId, +m_mainPhyId, "AssocReq not sent by the main PHY");
-        break;
-
-    case WIFI_MAC_MGT_ACTION: {
-        auto [category, action] = WifiActionHeader::Peek(psdu->GetPayload(0));
-
-        if (nodeId == 1 && category == WifiActionHeader::PROTECTED_EHT &&
-            action.protectedEhtAction ==
-                WifiActionHeader::PROTECTED_EHT_EML_OPERATING_MODE_NOTIFICATION)
-        {
-            // the EMLSR client is starting the transmission of the EML OMN frame;
-            // temporarily block transmissions of QoS data frames from the AP MLD to the
-            // non-AP MLD on all the links but the one used for ML setup, so that we know
-            // that the first QoS data frame is sent on the link of the main PHY
-            std::set<uint8_t> linksToBlock;
-            for (uint8_t id = 0; id < m_apMac->GetNLinks(); id++)
-            {
-                if (id != m_mainPhyId)
-                {
-                    linksToBlock.insert(id);
-                }
-            }
-            m_apMac->GetMacQueueScheduler()->BlockQueues(WifiQueueBlockedReason::TID_NOT_MAPPED,
-                                                         AC_BE,
-                                                         {WIFI_QOSDATA_QUEUE},
-                                                         m_staMacs[0]->GetAddress(),
-                                                         m_apMac->GetAddress(),
-                                                         {0},
-                                                         linksToBlock);
-        }
-    }
-    break;
-
-    case WIFI_MAC_CTL_TRIGGER:
-        CheckInitialControlFrame(psduMap, txVector, linkId);
-        break;
-
-    case WIFI_MAC_QOSDATA:
-        CheckQosFrames(psduMap, txVector, linkId);
-        break;
-
-    case WIFI_MAC_CTL_RTS:
-        CheckRtsFrame(psduMap, txVector, linkId);
-        break;
-
-    default:;
-    }
-}
-
-void
-EmlsrLinkSwitchTest::DoSetup()
-{
-    Config::SetDefault("ns3::DefaultEmlsrManager::SwitchAuxPhy", BooleanValue(m_switchAuxPhy));
-    Config::SetDefault("ns3::EmlsrManager::ResetCamState",
-                       BooleanValue(m_resetCamStateAndInterruptSwitch));
-    Config::SetDefault("ns3::AdvancedEmlsrManager::InterruptSwitch",
-                       BooleanValue(m_resetCamStateAndInterruptSwitch));
-    Config::SetDefault("ns3::EmlsrManager::AuxPhyChannelWidth", UintegerValue(m_auxPhyMaxChWidth));
-    Config::SetDefault("ns3::WifiPhy::ChannelSwitchDelay", TimeValue(MicroSeconds(45)));
-
-    EmlsrOperationsTestBase::DoSetup();
-
-    m_errorModel = CreateObject<ListErrorModel>();
-    for (std::size_t linkId = 0; linkId < m_apMac->GetNLinks(); ++linkId)
-    {
-        m_apMac->GetWifiPhy(linkId)->SetPostReceptionErrorModel(m_errorModel);
-    }
-
-    // use channels of different widths
-    for (auto mac : std::initializer_list<Ptr<WifiMac>>{m_apMac, m_staMacs[0]})
-    {
-        mac->GetWifiPhy(0)->SetOperatingChannel(
-            WifiPhy::ChannelTuple{4, 40, WIFI_PHY_BAND_2_4GHZ, 1});
-        mac->GetWifiPhy(1)->SetOperatingChannel(
-            WifiPhy::ChannelTuple{58, 80, WIFI_PHY_BAND_5GHZ, 3});
-        mac->GetWifiPhy(2)->SetOperatingChannel(
-            WifiPhy::ChannelTuple{79, 160, WIFI_PHY_BAND_6GHZ, 7});
-    }
-}
-
-void
-EmlsrLinkSwitchTest::DoRun()
-{
-    Simulator::Stop(m_duration);
-    Simulator::Run();
-
-    CheckResults();
-
-    Simulator::Destroy();
-}
-
-void
-EmlsrLinkSwitchTest::CheckQosFrames(const WifiConstPsduMap& psduMap,
-                                    const WifiTxVector& txVector,
-                                    uint8_t linkId)
-{
-    m_countQoSframes++;
-
-    switch (m_countQoSframes)
-    {
-    case 1:
-        // unblock transmissions on all links
-        m_apMac->GetMacQueueScheduler()->UnblockQueues(WifiQueueBlockedReason::TID_NOT_MAPPED,
-                                                       AC_BE,
-                                                       {WIFI_QOSDATA_QUEUE},
-                                                       m_staMacs[0]->GetAddress(),
-                                                       m_apMac->GetAddress(),
-                                                       {0},
-                                                       {0, 1, 2});
-        // block transmissions on the link used for ML setup
-        m_apMac->GetMacQueueScheduler()->BlockQueues(WifiQueueBlockedReason::TID_NOT_MAPPED,
-                                                     AC_BE,
-                                                     {WIFI_QOSDATA_QUEUE},
-                                                     m_staMacs[0]->GetAddress(),
-                                                     m_apMac->GetAddress(),
-                                                     {0},
-                                                     {m_mainPhyId});
-        // generate a new data packet, which will be sent on a link other than the one
-        // used for ML setup, hence triggering a link switching on the EMLSR client
-        m_apMac->GetDevice()->GetNode()->AddApplication(GetApplication(DOWNLINK, 0, 2, 1000));
-        break;
-    case 2:
-        // block transmission on the link used to send this QoS data frame
-        m_apMac->GetMacQueueScheduler()->BlockQueues(WifiQueueBlockedReason::TID_NOT_MAPPED,
-                                                     AC_BE,
-                                                     {WIFI_QOSDATA_QUEUE},
-                                                     m_staMacs[0]->GetAddress(),
-                                                     m_apMac->GetAddress(),
-                                                     {0},
-                                                     {linkId});
-        // generate a new data packet, which will be sent on the link that has not been used
-        // so far, hence triggering another link switching on the EMLSR client
-        m_apMac->GetDevice()->GetNode()->AddApplication(GetApplication(DOWNLINK, 0, 2, 1000));
-        break;
-    case 3:
-        // block transmission on the link used to send this QoS data frame
-        m_apMac->GetMacQueueScheduler()->BlockQueues(WifiQueueBlockedReason::TID_NOT_MAPPED,
-                                                     AC_BE,
-                                                     {WIFI_QOSDATA_QUEUE},
-                                                     m_staMacs[0]->GetAddress(),
-                                                     m_apMac->GetAddress(),
-                                                     {0},
-                                                     {linkId});
-        // unblock transmissions on the link used for ML setup
-        m_apMac->GetMacQueueScheduler()->UnblockQueues(WifiQueueBlockedReason::TID_NOT_MAPPED,
-                                                       AC_BE,
-                                                       {WIFI_QOSDATA_QUEUE},
-                                                       m_staMacs[0]->GetAddress(),
-                                                       m_apMac->GetAddress(),
-                                                       {0},
-                                                       {m_mainPhyId});
-        // generate a new data packet, which will be sent again on the link used for ML setup,
-        // hence triggering yet another link switching on the EMLSR client
-        m_apMac->GetDevice()->GetNode()->AddApplication(GetApplication(DOWNLINK, 0, 2, 1000));
-        break;
-    case 4:
-        // block transmissions on all links at non-AP MLD side
-        m_staMacs[0]->GetMacQueueScheduler()->BlockQueues(WifiQueueBlockedReason::TID_NOT_MAPPED,
-                                                          AC_BE,
-                                                          {WIFI_QOSDATA_QUEUE},
-                                                          m_apMac->GetAddress(),
-                                                          m_staMacs[0]->GetAddress(),
-                                                          {0},
-                                                          {0, 1, 2});
-        // unblock transmissions on the link used for ML setup (non-AP MLD side)
-        m_staMacs[0]->GetMacQueueScheduler()->UnblockQueues(WifiQueueBlockedReason::TID_NOT_MAPPED,
-                                                            AC_BE,
-                                                            {WIFI_QOSDATA_QUEUE},
-                                                            m_apMac->GetAddress(),
-                                                            m_staMacs[0]->GetAddress(),
-                                                            {0},
-                                                            {m_mainPhyId});
-        // trigger establishment of BA agreement with AP as recipient
-        m_staMacs[0]->GetDevice()->GetNode()->AddApplication(GetApplication(UPLINK, 0, 4, 1000));
-        break;
-    case 5:
-        // unblock transmissions on all links at non-AP MLD side
-        m_staMacs[0]->GetMacQueueScheduler()->UnblockQueues(WifiQueueBlockedReason::TID_NOT_MAPPED,
-                                                            AC_BE,
-                                                            {WIFI_QOSDATA_QUEUE},
-                                                            m_apMac->GetAddress(),
-                                                            m_staMacs[0]->GetAddress(),
-                                                            {0},
-                                                            {0, 1, 2});
-        // block transmissions on the link used for ML setup (non-AP MLD side)
-        m_staMacs[0]->GetMacQueueScheduler()->BlockQueues(WifiQueueBlockedReason::TID_NOT_MAPPED,
-                                                          AC_BE,
-                                                          {WIFI_QOSDATA_QUEUE},
-                                                          m_apMac->GetAddress(),
-                                                          m_staMacs[0]->GetAddress(),
-                                                          {0},
-                                                          {m_mainPhyId});
-        // generate a new data packet, which will be sent on a link other than the one
-        // used for ML setup, hence triggering a link switching on the EMLSR client
-        m_staMacs[0]->GetDevice()->GetNode()->AddApplication(GetApplication(UPLINK, 0, 2, 1000));
-        break;
-    }
-}
-
-/**
- * AUX PHY switching enabled (X = channel switch delay)
- *
- *  |--------- aux PHY A ---------|------ main PHY ------|-------------- aux PHY B -------------
- *                           ┌───┐     ┌───┐
- *                           │ICF│     │QoS│
- * ──────────────────────────┴───┴┬───┬┴───┴┬──┬────────────────────────────────────────────────
- *  [link 0]                      │CTS│     │BA│
- *                                └───┘     └──┘
- *
- *
- *  |--------- main PHY ----------|------------------ aux PHY A ----------------|--- main PHY ---
- *     ┌───┐     ┌───┐                                                      ┌───┐     ┌───┐
- *     │ICF│     │QoS│                                                      │ICF│     │QoS│
- *  ───┴───┴┬───┬┴───┴┬──┬──────────────────────────────────────────────────┴───┴┬───┬┴───┴┬──┬──
- *  [link 1]│CTS│     │BA│                                                       │CTS│     │BA│
- *          └───┘     └──┘                                                       └───┘     └──┘
- *
- *
- *  |--------------------- aux PHY B --------------------|------ main PHY ------|-- aux PHY A ---
- *                                                   ┌───┐     ┌───┐
- *                                                   │ICF│     │QoS│
- *  ─────────────────────────────────────────────────┴───┴┬───┬┴───┴┬──┬─────────────────────────
- *  [link 2]                                              │CTS│     │BA│
- *                                                        └───┘     └──┘
- *
- * ... continued ...
- *
- *  |----------------------------------------- aux PHY B ---------------------------------------
- * ─────────────────────────────────────────────────────────────────────────────────────────────
- *  [link 0]
- *
- *  |--------- main PHY ----------|X|X|------------------------ aux PHY A ----------------------
- *                 ┌───┐
- *                 │ACK│
- *  ──────────┬───┬┴───┴────────────────────────────────────────────────────────────────────────
- *  [link 1]  │QoS│
- *            └───┘
- *
- *  |-------- aux PHY A ----------|X|---------------------- main PHY ---------------------------
- *                                          ┌──┐
- *                                          │BA│
- *  ────────────────────────┬───X──────┬───┬┴──┴────────────────────────────────────────────────
- *  [link 2]                │RTS│      │QoS│
- *                          └───┘      └───┘
- ************************************************************************************************
- *
- * AUX PHY switching disabled (X = channel switch delay)
- *
- *  |------------------------------------------ aux PHY A ---------------------------------------
- *                                |-- main PHY --|X|
- *                            ┌───┐     ┌───┐
- *                            │ICF│     │QoS│
- *  ──────────────────────────┴───┴┬───┬┴───┴┬──┬────────────────────────────────────────────────
- *  [link 0]                       │CTS│     │BA│
- *                                 └───┘     └──┘
- *
- *                                                 |-main|
- *  |--------- main PHY ----------|                |-PHY-|                |------ main PHY ------
- *     ┌───┐     ┌───┐                                                      ┌───┐     ┌───┐
- *     │ICF│     │QoS│                                                      │ICF│     │QoS│
- *  ───┴───┴┬───┬┴───┴┬──┬──────────────────────────────────────────────────┴───┴┬───┬┴───┴┬──┬──
- *  [link 1]│CTS│     │BA│                                                       │CTS│     │BA│
- *          └───┘     └──┘                                                       └───┘     └──┘
- *
- *
- *  |------------------------------------------ aux PHY B ---------------------------------------
- *                                                       |-- main PHY --|X|
- *                                                   ┌───┐     ┌───┐
- *                                                   │ICF│     │QoS│
- *  ─────────────────────────────────────────────────┴───┴┬───┬┴───┴┬──┬─────────────────────────
- *  [link 2]                                              │CTS│     │BA│
- *                                                        └───┘     └──┘
- *
- * ... continued ...
- *
- *  |----------------------------------------- aux PHY A ---------------------------------------
- * ─────────────────────────────────────────────────────────────────────────────────────────────
- *  [link 0]
- *
- *  |-------- main PHY --------|      |--- main PHY ---|
- *                 ┌───┐
- *                 │ACK│
- *  ──────────┬───┬┴───┴────────────────────────────────────────────────────────────────────────
- *  [link 1]  │QoS│
- *            └───┘
- *
- *  |------------------------------------------ aux PHY B --------------------------------------
- *                              |X||X|                 |X|-------------- main PHY --------------
- *                                                   ┌───┐     ┌──┐
- *                                                   │CTS│     │BA│
- *  ────────────────────────┬───X───────────────┬───┬┴───┴┬───┬┴──┴─────────────────────────────
- *  [link 2]                │RTS│               │RTS│     │QoS│
- *                          └───┘               └───┘     └───┘
- *
- */
-
-void
-EmlsrLinkSwitchTest::CheckInitialControlFrame(const WifiConstPsduMap& psduMap,
-                                              const WifiTxVector& txVector,
-                                              uint8_t linkId)
-{
-    if (++m_countIcfFrames == 1)
-    {
-        m_txPsdusPos = m_txPsdus.size() - 1;
-    }
-
-    // the first ICF is sent to protect ADDBA_REQ for DL BA agreement, then one ICF is sent before
-    // each of the 4 DL QoS Data frames; finally, another ICF is sent before the ADDBA_RESP for UL
-    // BA agreement. Hence, at any time the number of ICF sent is always greater than or equal to
-    // the number of QoS data frames sent.
-    NS_TEST_EXPECT_MSG_GT_OR_EQ(m_countIcfFrames, m_countQoSframes, "Unexpected number of ICFs");
-
-    auto mainPhy = m_staMacs[0]->GetDevice()->GetPhy(m_mainPhyId);
-    auto phyRecvIcf = m_staMacs[0]->GetWifiPhy(linkId); // PHY receiving the ICF
-
-    auto currMainPhyLinkId = m_staMacs[0]->GetLinkForPhy(mainPhy);
-    NS_TEST_ASSERT_MSG_EQ(currMainPhyLinkId.has_value(),
-                          true,
-                          "Didn't find the link on which the Main PHY is operating");
-    NS_TEST_ASSERT_MSG_NE(phyRecvIcf,
-                          nullptr,
-                          "No PHY on the link where ICF " << m_countQoSframes << " was sent");
-
-    if (phyRecvIcf != mainPhy)
-    {
-        NS_TEST_EXPECT_MSG_LT_OR_EQ(
-            phyRecvIcf->GetChannelWidth(),
-            m_auxPhyMaxChWidth,
-            "Aux PHY that received ICF "
-                << m_countQoSframes << " is operating on a channel whose width exceeds the limit");
-    }
-
-    // the first two ICFs (before ADDBA_REQ and before first DL QoS Data) and the ICF before the
-    // ADDBA_RESP are received by the main PHY. If aux PHYs do not switch links, the ICF before
-    // the last DL QoS Data is also received by the main PHY
-    NS_TEST_EXPECT_MSG_EQ((phyRecvIcf == mainPhy),
-                          (m_countIcfFrames == 1 || m_countIcfFrames == 2 ||
-                           (!m_switchAuxPhy && m_countIcfFrames == 5) || m_countIcfFrames == 6),
-                          "Expecting that the ICF was received by the main PHY");
-
-    // if aux PHYs do not switch links, the main PHY is operating on its original link when
-    // the transmission of an ICF starts
-    NS_TEST_EXPECT_MSG_EQ(m_switchAuxPhy || currMainPhyLinkId == m_mainPhyId,
-                          true,
-                          "Main PHY is operating on an unexpected link ("
-                              << +currMainPhyLinkId.value() << ", expected " << +m_mainPhyId
-                              << ")");
-
-    auto txDuration =
-        WifiPhy::CalculateTxDuration(psduMap, txVector, m_apMac->GetWifiPhy(linkId)->GetPhyBand());
-
-    // check that PHYs are operating on the expected link after the reception of the ICF
-    Simulator::Schedule(txDuration + NanoSeconds(1), [=, this]() {
-        // the main PHY must be operating on the link where ICF was sent
-        NS_TEST_EXPECT_MSG_EQ(m_staMacs[0]->GetWifiPhy(linkId),
-                              mainPhy,
-                              "PHY operating on link where ICF was sent is not the main PHY");
-
-        // the behavior of Aux PHYs depends on whether they switch channel or not
-        if (m_switchAuxPhy)
-        {
-            if (mainPhy != phyRecvIcf)
-            {
-                NS_TEST_EXPECT_MSG_EQ(phyRecvIcf->IsStateSwitching(),
-                                      true,
-                                      "Aux PHY expected to switch channel");
-            }
-            Simulator::Schedule(phyRecvIcf->GetChannelSwitchDelay(), [=, this]() {
-                NS_TEST_EXPECT_MSG_EQ(m_staMacs[0]->GetWifiPhy(*currMainPhyLinkId),
-                                      phyRecvIcf,
-                                      "The Aux PHY that received the ICF is expected to operate "
-                                      "on the link where Main PHY was before switching channel");
-            });
-        }
-        else
-        {
-            NS_TEST_EXPECT_MSG_EQ(phyRecvIcf->IsStateSwitching(),
-                                  false,
-                                  "Aux PHY is not expected to switch channel");
-            NS_TEST_EXPECT_MSG_EQ(phyRecvIcf->GetPhyBand(),
-                                  mainPhy->GetPhyBand(),
-                                  "The Aux PHY that received the ICF is expected to operate "
-                                  "on the same band as the Main PHY");
-        }
-    });
-}
-
-void
-EmlsrLinkSwitchTest::CheckRtsFrame(const WifiConstPsduMap& psduMap,
-                                   const WifiTxVector& txVector,
-                                   uint8_t linkId)
-{
-    // corrupt the first RTS frame (sent by the EMLSR client)
-    if (++m_countRtsFrames == 1)
-    {
-        auto psdu = psduMap.begin()->second;
-        m_errorModel->SetList({psdu->GetPacket()->GetUid()});
-
-        // check that when CTS timeout occurs, the main PHY is switching
-        Simulator::Schedule(
-            m_staMacs[0]->GetFrameExchangeManager(linkId)->GetWifiTxTimer().GetDelayLeft() -
-                TimeStep(1),
-            [=, this]() {
-                // store the time to complete the current channel switch at CTS timeout
-                auto mainPhy = m_staMacs[0]->GetDevice()->GetPhy(m_mainPhyId);
-                auto toCurrSwitchEnd = mainPhy->GetDelayUntilIdle() + TimeStep(1);
-
-                Simulator::Schedule(TimeStep(1), [=, this]() {
-                    NS_TEST_EXPECT_MSG_EQ(mainPhy->IsStateSwitching(),
-                                          true,
-                                          "Main PHY expected to be in SWITCHING state instead of "
-                                              << mainPhy->GetState()->GetState());
-
-                    // If main PHY channel switch can be interrupted, the main PHY should be back
-                    // operating on the preferred link after a channel switch delay. Otherwise, it
-                    // will be operating on the preferred link, if SwitchAuxPhy is false, or on the
-                    // link used to send the RTS, if SwitchAuxPhy is true, after the remaining
-                    // channel switching time plus the channel switch delay.
-                    auto newLinkId = (m_resetCamStateAndInterruptSwitch || !m_switchAuxPhy)
-                                         ? m_mainPhyId
-                                         : linkId;
-                    auto delayLeft = m_resetCamStateAndInterruptSwitch
-                                         ? Time{0}
-                                         : toCurrSwitchEnd; // time to complete current switch
-                    if (m_resetCamStateAndInterruptSwitch || !m_switchAuxPhy)
-                    {
-                        // add the time to perform another channel switch
-                        delayLeft += mainPhy->GetChannelSwitchDelay();
-                    }
-
-                    auto totalSwitchDelay =
-                        delayLeft + (mainPhy->GetChannelSwitchDelay() - toCurrSwitchEnd);
-
-                    Simulator::Schedule(delayLeft - TimeStep(1), [=, this]() {
-                        // check if the MSD timer was running on the link left by the main PHY
-                        // before completing channel switch
-                        bool msdWasRunning = m_staMacs[0]
-                                                 ->GetEmlsrManager()
-                                                 ->GetElapsedMediumSyncDelayTimer(m_mainPhyId)
-                                                 .has_value();
-
-                        Simulator::Schedule(TimeStep(2), [=, this]() {
-                            auto id = m_staMacs[0]->GetLinkForPhy(mainPhy);
-                            NS_TEST_EXPECT_MSG_EQ(id.has_value(),
-                                                  true,
-                                                  "Expected main PHY to operate on a link");
-                            NS_TEST_EXPECT_MSG_EQ(*id,
-                                                  newLinkId,
-                                                  "Main PHY is operating on an unexpected link");
-                            const auto startMsd =
-                                (totalSwitchDelay >
-                                 MicroSeconds(EmlsrManager::MEDIUM_SYNC_THRESHOLD_USEC));
-                            const auto msdIsRunning = msdWasRunning || startMsd;
-                            CheckMsdTimerRunning(
-                                m_staMacs[0],
-                                m_mainPhyId,
-                                msdIsRunning,
-                                std::string("because total switch delay was ") +
-                                    std::to_string(totalSwitchDelay.GetNanoSeconds()) + "ns");
-                        });
-                    });
-                });
-            });
-    }
-    // block transmissions on all other links at non-AP MLD side
-    std::set<uint8_t> links{0, 1, 2};
-    links.erase(linkId);
-    m_staMacs[0]->GetMacQueueScheduler()->BlockQueues(WifiQueueBlockedReason::TID_NOT_MAPPED,
-                                                      AC_BE,
-                                                      {WIFI_QOSDATA_QUEUE},
-                                                      m_apMac->GetAddress(),
-                                                      m_staMacs[0]->GetAddress(),
-                                                      {0},
-                                                      links);
-}
-
-void
-EmlsrLinkSwitchTest::CheckResults()
-{
-    NS_TEST_ASSERT_MSG_NE(m_txPsdusPos, 0, "BA agreement establishment not completed");
-
-    // Expected frame exchanges after ML setup and EML OMN exchange:
-    //  1. (DL) ICF + CTS + ADDBA_REQ + ACK
-    //  2. (UL) ADDBA_RESP + ACK
-    //  3. (DL) ICF + CTS + DATA + BA
-    //  4. (DL) ICF + CTS + DATA + BA
-    //  5. (DL) ICF + CTS + DATA + BA
-    //  6. (DL) ICF + CTS + DATA + BA
-    //  7. (UL) ADDBA_REQ + ACK
-    //  8. (DL) ICF + CTS + ADDBA_RESP + ACK
-    //  9. (UL) DATA + BA
-    // 10. (UL) RTS - CTS timeout
-    // 11. (UL) (RTS + CTS + ) DATA + BA
-
-    // frame exchange 11 is protected if SwitchAuxPhy is false or (SwitchAuxPhy is true and) the
-    // main PHY switch can be interrupted
-    bool fe11protected = !m_switchAuxPhy || m_resetCamStateAndInterruptSwitch;
-
-    NS_TEST_EXPECT_MSG_EQ(m_countIcfFrames, 6, "Unexpected number of ICFs sent");
-
-    // frame exchanges without RTS because the EMLSR client sent the initial frame through main PHY
-    const std::size_t nFrameExchNoRts = fe11protected ? 3 : 4;
-
-    const std::size_t nFrameExchWithRts = fe11protected ? 1 : 0;
-
-    NS_TEST_ASSERT_MSG_GT_OR_EQ(m_txPsdus.size(),
-                                m_txPsdusPos +
-                                    m_countIcfFrames * 4 + /* frames in frame exchange with ICF */
-                                    nFrameExchNoRts * 2 + /* frames in frame exchange without RTS */
-                                    nFrameExchWithRts * 4 + /* frames in frame exchange with RTS */
-                                    1,                      /* corrupted RTS */
-                                "Insufficient number of TX PSDUs");
-
-    // m_txPsdusPos points to the first ICF
-    auto psduIt = std::next(m_txPsdus.cbegin(), m_txPsdusPos);
-
-    const std::size_t nFrameExchanges =
-        m_countIcfFrames + nFrameExchNoRts + nFrameExchWithRts + 1 /* corrupted RTS */;
-
-    for (std::size_t i = 1; i <= nFrameExchanges; ++i)
-    {
-        if (i == 1 || (i >= 3 && i <= 6) || i == 8 || i == 10 || (i == 11 && fe11protected))
-        {
-            // frame exchanges with protection
-            NS_TEST_EXPECT_MSG_EQ((psduIt->psduMap.size() == 1 &&
-                                   (i < 9 ? psduIt->psduMap.at(SU_STA_ID)->GetHeader(0).IsTrigger()
-                                          : psduIt->psduMap.at(SU_STA_ID)->GetHeader(0).IsRts())),
-                                  true,
-                                  "Expected a Trigger Frame (ICF)");
-            psduIt++;
-            if (i == 10)
-            {
-                continue; // corrupted RTS
-            }
-            NS_TEST_EXPECT_MSG_EQ((psduIt->psduMap.size() == 1 &&
-                                   psduIt->psduMap.at(SU_STA_ID)->GetHeader(0).IsCts()),
-                                  true,
-                                  "Expected a CTS");
-            psduIt++;
-        }
-
-        if (i == 1 || i == 2 || i == 7 || i == 8) // frame exchanges with ADDBA REQ/RESP frames
-        {
-            NS_TEST_EXPECT_MSG_EQ((psduIt->psduMap.size() == 1 &&
-                                   psduIt->psduMap.at(SU_STA_ID)->GetHeader(0).IsMgt()),
-                                  true,
-                                  "Expected a management frame");
-            psduIt++;
-            NS_TEST_EXPECT_MSG_EQ((psduIt->psduMap.size() == 1 &&
-                                   psduIt->psduMap.at(SU_STA_ID)->GetHeader(0).IsAck()),
-                                  true,
-                                  "Expected a Normal Ack");
-        }
-        else
-        {
-            NS_TEST_EXPECT_MSG_EQ((psduIt->psduMap.size() == 1 &&
-                                   psduIt->psduMap.at(SU_STA_ID)->GetHeader(0).IsQosData()),
-                                  true,
-                                  "Expected a QoS Data frame");
-            psduIt++;
-            NS_TEST_EXPECT_MSG_EQ((psduIt->psduMap.size() == 1 &&
-                                   psduIt->psduMap.at(SU_STA_ID)->GetHeader(0).IsBlockAck()),
-                                  true,
-                                  "Expected a BlockAck");
-        }
-        psduIt++;
-    }
-}
-
-EmlsrCcaBusyTest::EmlsrCcaBusyTest(MHz_u auxPhyMaxChWidth)
-    : EmlsrOperationsTestBase(std::string("Check EMLSR link switching (auxPhyMaxChWidth=") +
-                              std::to_string(auxPhyMaxChWidth) + "MHz )"),
-      m_auxPhyMaxChWidth(auxPhyMaxChWidth),
-      m_channelSwitchDelay(MicroSeconds(75)),
-      m_currMainPhyLinkId(0),
-      m_nextMainPhyLinkId(0)
-{
-    m_nEmlsrStations = 1;
-    m_nNonEmlsrStations = 1;
-    m_linksToEnableEmlsrOn = {0, 1, 2}; // enable EMLSR on all links right after association
-    m_mainPhyId = 1;
-    m_establishBaUl = true;
-    m_duration = Seconds(1);
-    m_transitionDelay = {MicroSeconds(128)};
-}
-
-void
-EmlsrCcaBusyTest::DoRun()
-{
-    Simulator::Stop(m_duration);
-    Simulator::Run();
-
-    Simulator::Destroy();
-}
-
-void
-EmlsrCcaBusyTest::DoSetup()
-{
-    Config::SetDefault("ns3::DefaultEmlsrManager::SwitchAuxPhy", BooleanValue(true));
-    Config::SetDefault("ns3::EmlsrManager::AuxPhyChannelWidth", UintegerValue(m_auxPhyMaxChWidth));
-    Config::SetDefault("ns3::EmlsrManager::AuxPhyMaxModClass", StringValue("EHT"));
-    Config::SetDefault("ns3::WifiPhy::ChannelSwitchDelay", TimeValue(m_channelSwitchDelay));
-
-    EmlsrOperationsTestBase::DoSetup();
-
-    // use channels of different widths
-    for (auto mac : std::initializer_list<Ptr<WifiMac>>{m_apMac, m_staMacs[0], m_staMacs[1]})
-    {
-        mac->GetWifiPhy(0)->SetOperatingChannel(
-            WifiPhy::ChannelTuple{4, 40, WIFI_PHY_BAND_2_4GHZ, 0});
-        mac->GetWifiPhy(1)->SetOperatingChannel(
-            WifiPhy::ChannelTuple{58, 80, WIFI_PHY_BAND_5GHZ, 0});
-        mac->GetWifiPhy(2)->SetOperatingChannel(
-            WifiPhy::ChannelTuple{79, 160, WIFI_PHY_BAND_6GHZ, 0});
-    }
-}
-
-void
-EmlsrCcaBusyTest::TransmitPacketToAp(uint8_t linkId)
-{
-    m_staMacs[1]->GetDevice()->GetNode()->AddApplication(GetApplication(UPLINK, 1, 1, 2000));
-
-    // force the transmission of the packet to happen now on the given link.
-    // Multiple ScheduleNow calls are needed because Node::AddApplication() schedules a call to
-    // Application::Initialize(), which schedules a call to Application::StartApplication(), which
-    // schedules a call to PacketSocketClient::Send(), which finally generates the packet
-    Simulator::ScheduleNow([=, this]() {
-        Simulator::ScheduleNow([=, this]() {
-            Simulator::ScheduleNow([=, this]() {
-                m_staMacs[1]->GetFrameExchangeManager(linkId)->StartTransmission(
-                    m_staMacs[1]->GetQosTxop(AC_BE),
-                    m_staMacs[1]->GetWifiPhy(linkId)->GetChannelWidth());
-            });
-        });
-    });
-
-    // check that the other MLD started transmitting on the correct link
-    Simulator::Schedule(TimeStep(1), [=, this]() {
-        NS_TEST_EXPECT_MSG_EQ(m_staMacs[1]->GetWifiPhy(linkId)->IsStateTx(),
-                              true,
-                              "At time " << Simulator::Now().As(Time::NS)
-                                         << ", other MLD did not start transmitting on link "
-                                         << +linkId);
-    });
-}
-
-void
-EmlsrCcaBusyTest::StartTraffic()
-{
-    auto currMainPhyLinkId = m_staMacs[0]->GetLinkForPhy(m_mainPhyId);
-    NS_TEST_ASSERT_MSG_EQ(currMainPhyLinkId.has_value(),
-                          true,
-                          "Main PHY is not operating on any link");
-    m_currMainPhyLinkId = *currMainPhyLinkId;
-    m_nextMainPhyLinkId = (m_currMainPhyLinkId + 1) % 2;
-
-    // request the main PHY to switch to another link
-    m_staMacs[0]->GetEmlsrManager()->SwitchMainPhy(
-        m_nextMainPhyLinkId,
-        false,
-        EmlsrManager::DONT_RESET_BACKOFF,
-        EmlsrManager::DONT_REQUEST_ACCESS,
-        EmlsrDlTxopIcfReceivedByAuxPhyTrace{}); // trace info not used
-
-    // the other MLD transmits a packet to the AP
-    TransmitPacketToAp(m_nextMainPhyLinkId);
-
-    // schedule another packet transmission slightly (10 us) before the end of aux PHY switch
-    Simulator::Schedule(m_channelSwitchDelay - MicroSeconds(10),
-                        &EmlsrCcaBusyTest::TransmitPacketToAp,
-                        this,
-                        m_currMainPhyLinkId);
-
-    // first checkpoint is after that the preamble of the PPDU has been received
-    Simulator::Schedule(MicroSeconds(8), &EmlsrCcaBusyTest::CheckPoint1, this);
-}
-
-/**
- *                               ┌───────────────┐
- *  [link X]                     │  other to AP  │CP3
- * ──────────────────────────────┴───────────────┴──────────────────────────────────────────────
- *  |------ main PHY ------|                  |------------------- aux PHY ---------------------
- *                         .\_              _/
- *                         .  \_          _/
- *                         .    \_      _/
- *                         .      \_  _/
- *  [link Y]               . CP1    \/ CP2
- *                         .┌───────────────┐
- *                         .│  other to AP  │
- * ─────────────────────────┴───────────────┴────────────────────────────────────────────────────
- *  |------------ aux PHY ----------|---------------------- main PHY ----------------------------
- *
- */
-
-void
-EmlsrCcaBusyTest::CheckPoint1()
-{
-    // first checkpoint is after that the preamble of the first PPDU has been received
-    auto mainPhy = m_staMacs[0]->GetDevice()->GetPhy(m_mainPhyId);
-
-    // 1. Main PHY is switching
-    NS_TEST_EXPECT_MSG_EQ(mainPhy->IsStateSwitching(), true, "Main PHY is not switching");
-
-    auto auxPhy = m_staMacs[0]->GetWifiPhy(m_nextMainPhyLinkId);
-    NS_TEST_EXPECT_MSG_NE(mainPhy, auxPhy, "Main PHY is operating on an unexpected link");
-
-    // 2. Aux PHY is receiving the PHY header
-    NS_TEST_EXPECT_MSG_EQ(auxPhy->GetInfoIfRxingPhyHeader().has_value(),
-                          true,
-                          "Aux PHY is not receiving a PHY header");
-
-    // 3. Main PHY dropped the preamble because it is switching
-    NS_TEST_EXPECT_MSG_EQ(mainPhy->GetInfoIfRxingPhyHeader().has_value(),
-                          false,
-                          "Main PHY is receiving a PHY header");
-
-    // 4. Channel access manager on destination link (Y) has been notified of CCA busy, but not
-    // until the end of transmission (main PHY dropped the preamble and notified CCA busy until
-    // end of transmission but the channel access manager on link Y does not yet have a listener
-    // attached to the main PHY; aux PHY notified CCA busy until the end of the PHY header field
-    // being received)
-    const auto caManager = m_staMacs[0]->GetChannelAccessManager(m_nextMainPhyLinkId);
-    const auto endTxTime = m_staMacs[1]->GetChannelAccessManager(m_nextMainPhyLinkId)->m_lastTxEnd;
-    NS_TEST_ASSERT_MSG_EQ(caManager->m_lastBusyEnd.contains(WIFI_CHANLIST_PRIMARY),
-                          true,
-                          "No CCA information for primary20 channel");
-    NS_TEST_EXPECT_MSG_GT_OR_EQ(
-        caManager->m_lastBusyEnd[WIFI_CHANLIST_PRIMARY],
-        Simulator::Now(),
-        "ChannelAccessManager on destination link not notified of CCA busy");
-    NS_TEST_EXPECT_MSG_LT(
-        caManager->m_lastBusyEnd[WIFI_CHANLIST_PRIMARY],
-        endTxTime,
-        "ChannelAccessManager on destination link notified of CCA busy until end of transmission");
-
-    // second checkpoint is after that the main PHY completed the link switch
-    Simulator::Schedule(mainPhy->GetDelayUntilIdle() + TimeStep(1),
-                        &EmlsrCcaBusyTest::CheckPoint2,
-                        this);
-}
-
-void
-EmlsrCcaBusyTest::CheckPoint2()
-{
-    // second checkpoint is after that the main PHY completed the link switch. The channel access
-    // manager on destination link (Y) is expected to be notified by the main PHY that medium is
-    // busy until the end of the ongoing transmission
-    const auto caManager = m_staMacs[0]->GetChannelAccessManager(m_nextMainPhyLinkId);
-    const auto endTxTime = m_staMacs[1]->GetChannelAccessManager(m_nextMainPhyLinkId)->m_lastTxEnd;
-    NS_TEST_ASSERT_MSG_EQ(caManager->m_lastBusyEnd.contains(WIFI_CHANLIST_PRIMARY),
-                          true,
-                          "No CCA information for primary20 channel");
-    NS_TEST_EXPECT_MSG_GT_OR_EQ(
-        caManager->m_lastBusyEnd[WIFI_CHANLIST_PRIMARY],
-        Simulator::Now(),
-        "ChannelAccessManager on destination link not notified of CCA busy");
-    NS_TEST_EXPECT_MSG_GT_OR_EQ(caManager->m_lastBusyEnd[WIFI_CHANLIST_PRIMARY],
-                                endTxTime,
-                                "ChannelAccessManager on destination link not notified of CCA busy "
-                                "until end of transmission");
-
-    // third checkpoint is after that the aux PHY completed the link switch
-    Simulator::Schedule(m_channelSwitchDelay, &EmlsrCcaBusyTest::CheckPoint3, this);
-}
-
-void
-EmlsrCcaBusyTest::CheckPoint3()
-{
-    // third checkpoint is after that the aux PHY completed the link switch. The channel access
-    // manager on source link (X) is expected to be notified by the aux PHY that medium is
-    // busy until the end of the ongoing transmission (even if the aux PHY was not listening to
-    // link X when transmission started, its interface on link X recorded the transmission)
-    const auto caManager = m_staMacs[0]->GetChannelAccessManager(m_currMainPhyLinkId);
-    const auto endTxTime = m_staMacs[1]->GetChannelAccessManager(m_currMainPhyLinkId)->m_lastTxEnd;
-    NS_TEST_ASSERT_MSG_EQ(caManager->m_lastBusyEnd.contains(WIFI_CHANLIST_PRIMARY),
-                          true,
-                          "No CCA information for primary20 channel");
-    NS_TEST_EXPECT_MSG_GT_OR_EQ(caManager->m_lastBusyEnd[WIFI_CHANLIST_PRIMARY],
-                                Simulator::Now(),
-                                "ChannelAccessManager on source link not notified of CCA busy");
-    NS_TEST_EXPECT_MSG_GT_OR_EQ(caManager->m_lastBusyEnd[WIFI_CHANLIST_PRIMARY],
-                                endTxTime,
-                                "ChannelAccessManager on source link not notified of CCA busy "
-                                "until end of transmission");
-}
-
-WifiEmlsrTestSuite::WifiEmlsrTestSuite()
-    : TestSuite("wifi-emlsr", Type::UNIT)
-{
-    AddTestCase(new EmlOperatingModeNotificationTest(), TestCase::Duration::QUICK);
-    AddTestCase(new EmlOmnExchangeTest({1, 2}, MicroSeconds(0)), TestCase::Duration::QUICK);
-    AddTestCase(new EmlOmnExchangeTest({1, 2}, MicroSeconds(2048)), TestCase::Duration::QUICK);
-    AddTestCase(new EmlOmnExchangeTest({0, 1, 2, 3}, MicroSeconds(0)), TestCase::Duration::QUICK);
-    AddTestCase(new EmlOmnExchangeTest({0, 1, 2, 3}, MicroSeconds(2048)),
-                TestCase::Duration::QUICK);
-    for (const auto& emlsrLinks :
-         {std::set<uint8_t>{0, 1, 2}, std::set<uint8_t>{1, 2}, std::set<uint8_t>{0, 1}})
-    {
-        AddTestCase(new EmlsrDlTxopTest({1,
-                                         0,
-                                         emlsrLinks,
-                                         {MicroSeconds(32)},
-                                         {MicroSeconds(32)},
-                                         MicroSeconds(512),
-                                         true /* putAuxPhyToSleep */}),
-                    TestCase::Duration::QUICK);
-        AddTestCase(new EmlsrDlTxopTest({1,
-                                         1,
-                                         emlsrLinks,
-                                         {MicroSeconds(64)},
-                                         {MicroSeconds(64)},
-                                         MicroSeconds(512),
-                                         false /* putAuxPhyToSleep */}),
-                    TestCase::Duration::QUICK);
-        AddTestCase(new EmlsrDlTxopTest({2,
-                                         2,
-                                         emlsrLinks,
-                                         {MicroSeconds(128), MicroSeconds(256)},
-                                         {MicroSeconds(128), MicroSeconds(256)},
-                                         MicroSeconds(512),
-                                         true /* putAuxPhyToSleep */}),
-                    TestCase::Duration::QUICK);
-    }
-
-    for (auto genBackoffAndUseAuxPhyCca : {true, false})
-    {
-        for (auto nSlotsLeft : std::initializer_list<uint8_t>{0, 4})
-        {
-            AddTestCase(new EmlsrUlTxopTest({{0, 1, 2},
-                                             MHz_u{40},
-                                             MHz_u{20},
-                                             MicroSeconds(5504),
-                                             3,
-                                             genBackoffAndUseAuxPhyCca,
-                                             nSlotsLeft,
-                                             true, /* putAuxPhyToSleep */
-                                             false /* switchMainPhyBackDelayTimeout */}),
-                        TestCase::Duration::QUICK);
-            AddTestCase(new EmlsrUlTxopTest({{0, 1},
-                                             MHz_u{40},
-                                             MHz_u{20},
-                                             MicroSeconds(5504),
-                                             1,
-                                             genBackoffAndUseAuxPhyCca,
-                                             nSlotsLeft,
-                                             false, /* putAuxPhyToSleep */
-                                             true /* switchMainPhyBackDelayTimeout */}),
-                        TestCase::Duration::QUICK);
-        }
-    }
-
-    for (bool switchAuxPhy : {true, false})
-    {
-        for (bool resetCamStateAndInterruptSwitch : {true, false})
-        {
-            for (auto auxPhyMaxChWidth : {MHz_u{20}, MHz_u{40}, MHz_u{80}, MHz_u{160}})
-            {
-                AddTestCase(new EmlsrLinkSwitchTest(
-                                {switchAuxPhy, resetCamStateAndInterruptSwitch, auxPhyMaxChWidth}),
-                            TestCase::Duration::QUICK);
-            }
-        }
-    }
-
-    AddTestCase(new EmlsrUlOfdmaTest(false), TestCase::Duration::QUICK);
-    AddTestCase(new EmlsrUlOfdmaTest(true), TestCase::Duration::QUICK);
-
-    AddTestCase(new EmlsrCcaBusyTest(MHz_u{20}), TestCase::Duration::QUICK);
-    AddTestCase(new EmlsrCcaBusyTest(MHz_u{80}), TestCase::Duration::QUICK);
-}
-
-static WifiEmlsrTestSuite g_wifiEmlsrTestSuite; ///< the test suite
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/test/wifi-emlsr-test.h ns-3.45/src/wifi/test/wifi-emlsr-test.h
--- ns-3.44/src/wifi/test/wifi-emlsr-test.h	2025-03-09 16:55:49.807372600 -0700
+++ ns-3.45/src/wifi/test/wifi-emlsr-test.h	1969-12-31 16:00:00.000000000 -0800
@@ -1,976 +0,0 @@
-/*
- * Copyright (c) 2023 Universita' degli Studi di Napoli Federico II
- *
- * SPDX-License-Identifier: GPL-2.0-only
- *
- * Author: Stefano Avallone <stavallo@unina.it>
- */
-
-#ifndef WIFI_EMLSR_TEST_H
-#define WIFI_EMLSR_TEST_H
-
-#include "ns3/ap-wifi-mac.h"
-#include "ns3/error-model.h"
-#include "ns3/header-serialization-test.h"
-#include "ns3/packet-socket-address.h"
-#include "ns3/packet-socket-client.h"
-#include "ns3/sta-wifi-mac.h"
-#include "ns3/test.h"
-#include "ns3/wifi-mac-queue-scheduler.h"
-#include "ns3/wifi-mac.h"
-#include "ns3/wifi-ppdu.h"
-#include "ns3/wifi-psdu.h"
-
-#include <list>
-#include <map>
-#include <memory>
-#include <optional>
-#include <set>
-#include <vector>
-
-using namespace ns3;
-
-// forward declaration
-namespace ns3
-{
-struct EmlsrMainPhySwitchTrace;
-}
-
-/**
- * @ingroup wifi-test
- * @ingroup tests
- *
- * @brief Test EML Operating Mode Notification frame serialization and deserialization
- */
-class EmlOperatingModeNotificationTest : public HeaderSerializationTestCase
-{
-  public:
-    /**
-     * Constructor
-     */
-    EmlOperatingModeNotificationTest();
-    ~EmlOperatingModeNotificationTest() override = default;
-
-  private:
-    void DoRun() override;
-};
-
-/**
- * @ingroup wifi-test
- * @ingroup tests
- *
- * @brief Base class for EMLSR Operations tests
- *
- * This base class setups and configures one AP MLD, a variable number of non-AP MLDs with
- * EMLSR activated and a variable number of non-AP MLD with EMLSR deactivated. Every MLD has
- * three links, each operating on a distinct PHY band (2.4 GHz, 5 GHz and 6 GHz). Therefore,
- * it is expected that three links are setup by the non-AP MLD(s). The values for the Padding
- * Delay, the Transition Delay and the Transition Timeout are provided as argument to the
- * constructor of this class, along with the IDs of the links on which EMLSR mode must be
- * enabled for the non-AP MLDs (this information is used to set the EmlsrLinkSet attribute
- * of the DefaultEmlsrManager installed on the non-AP MLDs).
- */
-class EmlsrOperationsTestBase : public TestCase
-{
-  public:
-    /**
-     * Constructor
-     *
-     * @param name The name of the new TestCase created
-     */
-    EmlsrOperationsTestBase(const std::string& name);
-    ~EmlsrOperationsTestBase() override = default;
-
-    /// Enumeration for traffic directions
-    enum TrafficDirection : uint8_t
-    {
-        DOWNLINK = 0,
-        UPLINK
-    };
-
-  protected:
-    /**
-     * Callback invoked when a FEM passes PSDUs to the PHY.
-     *
-     * @param mac the MAC transmitting the PSDUs
-     * @param phyId the ID of the PHY transmitting the PSDUs
-     * @param psduMap the PSDU map
-     * @param txVector the TX vector
-     * @param txPowerW the tx power in Watts
-     */
-    virtual void Transmit(Ptr<WifiMac> mac,
-                          uint8_t phyId,
-                          WifiConstPsduMap psduMap,
-                          WifiTxVector txVector,
-                          double txPowerW);
-
-    /**
-     * @param dir the traffic direction (downlink/uplink)
-     * @param staId the index (starting at 0) of the non-AP MLD generating/receiving packets
-     * @param count the number of packets to generate
-     * @param pktSize the size of the packets to generate
-     * @return an application generating the given number packets of the given size from/to the
-     *         AP MLD to/from the given non-AP MLD
-     */
-    Ptr<PacketSocketClient> GetApplication(TrafficDirection dir,
-                                           std::size_t staId,
-                                           std::size_t count,
-                                           std::size_t pktSize) const;
-
-    /**
-     * Check whether QoS data unicast transmissions addressed to the given destination on the
-     * given link are blocked or unblocked for the given reason on the given device.
-     *
-     * @param mac the MAC of the given device
-     * @param dest the MAC address of the given destination
-     * @param linkId the ID of the given link
-     * @param reason the reason for blocking transmissions to test
-     * @param blocked whether transmissions are blocked for the given reason
-     * @param description text indicating when this check is performed
-     * @param testUnblockedForOtherReasons whether to test if transmissions are unblocked for
-     *                                     all the reasons other than the one provided
-     */
-    void CheckBlockedLink(Ptr<WifiMac> mac,
-                          Mac48Address dest,
-                          uint8_t linkId,
-                          WifiQueueBlockedReason reason,
-                          bool blocked,
-                          std::string description,
-                          bool testUnblockedForOtherReasons = true);
-
-    /**
-     * Check whether the MediumSyncDelay timer is running on the given link of the given device.
-     *
-     * @param staMac the MAC of the given device
-     * @param linkId the ID of the given link
-     * @param isRunning whether the MediumSyncDelay timer is running
-     * @param msg message to print in case the check failed
-     */
-    void CheckMsdTimerRunning(Ptr<StaWifiMac> staMac,
-                              uint8_t linkId,
-                              bool isRunning,
-                              const std::string& msg);
-
-    /**
-     * Check whether aux PHYs of the given device are in sleep mode/awake.
-     *
-     * @param staMac the MAC of the given device
-     * @param sleep whether aux PHYs should be in sleep mode
-     */
-    void CheckAuxPhysSleepMode(Ptr<StaWifiMac> staMac, bool sleep);
-
-    /**
-     * Callback connected to the EMLSR Manager MainPhySwitch trace source.
-     *
-     * @param index the index of the EMLSR client whose main PHY switch event is logged
-     * @param info the information associated with the main PHY switch event
-     */
-    void MainPhySwitchInfoCallback(std::size_t index, const EmlsrMainPhySwitchTrace& info);
-
-    /**
-     * Check information provided by the EMLSR Manager MainPhySwitch trace.
-     *
-     * @param index the ID of the EMLSR client this check refers to
-     * @param reason the reason for main PHY to switch
-     * @param fromLinkId the ID of the link the main PHY is moving from (if any)
-     * @param toLinkId the ID of the link the main PHY is moving to
-     * @param checkFromLinkId whether to check the given fromLinkId value
-     * @param checkToLinkId whether to check the given toLinkId value
-     */
-    void CheckMainPhyTraceInfo(std::size_t index,
-                               std::string_view reason,
-                               const std::optional<uint8_t>& fromLinkId,
-                               uint8_t toLinkId,
-                               bool checkFromLinkId = true,
-                               bool checkToLinkId = true);
-
-    void DoSetup() override;
-
-    /// Information about transmitted frames
-    struct FrameInfo
-    {
-        Time startTx;             ///< TX start time
-        WifiConstPsduMap psduMap; ///< transmitted PSDU map
-        WifiTxVector txVector;    ///< TXVECTOR
-        uint8_t linkId;           ///< link ID
-        uint8_t phyId;            ///< ID of the transmitting PHY
-    };
-
-    uint8_t m_mainPhyId{0};                   //!< ID of the main PHY
-    std::set<uint8_t> m_linksToEnableEmlsrOn; /**< IDs of the links on which EMLSR mode has to
-                                                   be enabled */
-    std::size_t m_nEmlsrStations{1};          ///< number of stations to create that activate EMLSR
-    std::size_t m_nNonEmlsrStations{0};       /**< number of stations to create that do not
-                                                activate EMLSR */
-    Time m_transitionTimeout{MicroSeconds(128)}; ///< Transition Timeout advertised by the AP MLD
-    std::vector<Time> m_paddingDelay{
-        {MicroSeconds(32)}}; ///< Padding Delay advertised by the non-AP MLD
-    std::vector<Time> m_transitionDelay{
-        {MicroSeconds(16)}};          ///< Transition Delay advertised by the non-AP MLD
-    bool m_establishBaDl{false};      /**< whether BA needs to be established (for TID 0)
-                                           with the AP as originator */
-    bool m_establishBaUl{false};      /**< whether BA needs to be established (for TID 0)
-                                           with the AP as recipient */
-    bool m_putAuxPhyToSleep{false};   //!< whether aux PHYs are put to sleep during DL/UL TXOPs
-    std::vector<FrameInfo> m_txPsdus; ///< transmitted PSDUs
-    Ptr<ApWifiMac> m_apMac;           ///< AP wifi MAC
-    std::vector<Ptr<StaWifiMac>> m_staMacs;       ///< MACs of the non-AP MLDs
-    std::vector<PacketSocketAddress> m_dlSockets; ///< packet socket address for DL traffic
-    std::vector<PacketSocketAddress> m_ulSockets; ///< packet socket address for UL traffic
-    uint16_t m_lastAid{0};                        ///< AID of last associated station
-    Time m_duration{0};                           ///< simulation duration
-    std::map<std::size_t, std::shared_ptr<EmlsrMainPhySwitchTrace>>
-        m_traceInfo; ///< EMLSR client ID-indexed map of trace info from last main PHY switch
-
-  private:
-    /**
-     * Set the SSID on the next station that needs to start the association procedure.
-     * This method is connected to the ApWifiMac's AssociatedSta trace source.
-     * Start generating traffic (if needed) when all stations are associated.
-     *
-     * @param aid the AID assigned to the previous associated STA
-     */
-    void SetSsid(uint16_t aid, Mac48Address /* addr */);
-
-    /**
-     * Start the generation of traffic (needs to be overridden)
-     */
-    virtual void StartTraffic()
-    {
-    }
-};
-
-/**
- * @ingroup wifi-test
- * @ingroup tests
- *
- * @brief Test the exchange of EML Operating Mode Notification frames.
- *
- * This test considers an AP MLD and a non-AP MLD with EMLSR activated. Upon association,
- * the non-AP MLD sends an EML Operating Mode Notification frame, which is however corrupted
- * by using a post reception error model (installed on the AP MLD). We keep corrupting the
- * EML Notification frames transmitted by the non-AP MLD until the frame is dropped due to
- * exceeded max retry limit. It is checked that:
- *
- * - the Association Request contains a Multi-Link Element including an EML Capabilities field
- *   that contains the expected values for Padding Delay and Transition Delay
- * - the Association Response contains a Multi-Link Element including an EML Capabilities field
- *   that contains the expected value for Transition Timeout
- * - all EML Notification frames contain the expected values for EMLSR Mode, EMLMR Mode and
- *   Link Bitmap fields and are transmitted on the link used for association
- * - the correct EMLSR link set is stored by the EMLSR Manager, both when the transition
- *   timeout expires and when an EML Notification response is received from the AP MLD (thus,
- *   the correct EMLSR link set is stored after whichever of the two events occur first)
- */
-class EmlOmnExchangeTest : public EmlsrOperationsTestBase
-{
-  public:
-    /**
-     * Constructor
-     *
-     * @param linksToEnableEmlsrOn IDs of links on which EMLSR mode should be enabled
-     * @param transitionTimeout the Transition Timeout advertised by the AP MLD
-     */
-    EmlOmnExchangeTest(const std::set<uint8_t>& linksToEnableEmlsrOn, Time transitionTimeout);
-    ~EmlOmnExchangeTest() override = default;
-
-  protected:
-    void DoSetup() override;
-    void DoRun() override;
-    void Transmit(Ptr<WifiMac> mac,
-                  uint8_t phyId,
-                  WifiConstPsduMap psduMap,
-                  WifiTxVector txVector,
-                  double txPowerW) override;
-
-    /**
-     * Callback invoked when the non-AP MLD receives the acknowledgment for a transmitted MPDU.
-     *
-     * @param mpdu the acknowledged MPDU
-     */
-    void TxOk(Ptr<const WifiMpdu> mpdu);
-    /**
-     * Callback invoked when the non-AP MLD drops the given MPDU for the given reason.
-     *
-     * @param reason the reason why the MPDU was dropped
-     * @param mpdu the dropped MPDU
-     */
-    void TxDropped(WifiMacDropReason reason, Ptr<const WifiMpdu> mpdu);
-
-    /**
-     * Check the content of the EML Capabilities subfield of the Multi-Link Element included
-     * in the Association Request frame sent by the non-AP MLD.
-     *
-     * @param mpdu the MPDU containing the Association Request frame
-     * @param txVector the TXVECTOR used to transmit the frame
-     * @param linkId the ID of the link on which the frame was transmitted
-     */
-    void CheckEmlCapabilitiesInAssocReq(Ptr<const WifiMpdu> mpdu,
-                                        const WifiTxVector& txVector,
-                                        uint8_t linkId);
-    /**
-     * Check the content of the EML Capabilities subfield of the Multi-Link Element included
-     * in the Association Response frame sent by the AP MLD to the EMLSR client.
-     *
-     * @param mpdu the MPDU containing the Association Response frame
-     * @param txVector the TXVECTOR used to transmit the frame
-     * @param linkId the ID of the link on which the frame was transmitted
-     */
-    void CheckEmlCapabilitiesInAssocResp(Ptr<const WifiMpdu> mpdu,
-                                         const WifiTxVector& txVector,
-                                         uint8_t linkId);
-    /**
-     * Check the content of a received EML Operating Mode Notification frame.
-     *
-     * @param psdu the PSDU containing the EML Operating Mode Notification frame
-     * @param txVector the TXVECTOR used to transmit the frame
-     * @param linkId the ID of the link on which the frame was transmitted
-     */
-    void CheckEmlNotification(Ptr<const WifiPsdu> psdu,
-                              const WifiTxVector& txVector,
-                              uint8_t linkId);
-    /**
-     * Check that the EMLSR mode has been enabled on the expected EMLSR links.
-     */
-    void CheckEmlsrLinks();
-
-  private:
-    std::size_t m_checkEmlsrLinksCount;        /**< counter for the number of times CheckEmlsrLinks
-                                                    is called (should be two: when the transition
-                                                    timeout expires and when the EML Notification
-                                                    response from the AP MLD is received */
-    std::size_t m_emlNotificationDroppedCount; /**< counter for the number of times the EML
-                                                    Notification frame sent by the non-AP MLD
-                                                    has been dropped due to max retry limit */
-    Ptr<ListErrorModel> m_errorModel;          ///< error rate model to corrupt packets at AP MLD
-    std::list<uint64_t> m_uidList;             ///< list of UIDs of packets to corrupt
-};
-
-/**
- * @ingroup wifi-test
- * @ingroup tests
- *
- * @brief Test the transmission of DL frames to EMLSR clients.
- *
- * This test considers an AP MLD and a configurable number of non-AP MLDs that support EMLSR
- * and a configurable number of non-AP MLDs that do not support EMLSR. All MLDs have three
- * setup links, while the set of EMLSR links for the EMLSR clients is configurable.
- * Block ack agreements (for TID 0, with the AP MLD as originator) are established with all
- * the non-AP MLDs before that EMLSR clients send the EML Operating Mode Notification frame
- * to enable the EMLSR mode on their EMLSR links.
- *
- * Before enabling EMLSR mode, it is checked that:
- *
- * - all EMLSR links (but the link used for ML setup) of the EMLSR clients are considered to
- *   be in power save mode and are blocked by the AP MLD; all the other links have transitioned
- *   to active mode and are not blocked
- * - no MU-RTS Trigger Frame is sent as Initial control frame
- * - In case of EMLSR clients having no link that is not an EMLSR link and is different than
- *   the link used for ML setup, the two A-MPDUs used to trigger BA establishment are
- *   transmitted one after another on the link used for ML setup. Otherwise, the two A-MPDUs
- *   are sent concurrently on two distinct links
- *
- * After enabling EMLSR mode, it is checked that:
- *
- * - all EMLSR links of the EMLSR clients are considered to be in active mode and are not
- *   blocked by the AP MLD
- * - If all setup links are EMLSR links, the first two frame exchanges are both protected by
- *   MU-RTS TF and occur one after another. Otherwise, one frame exchange occurs on the
- *   non-EMLSR link and is not protected by MU-RTS TF; the other frame exchange occurs on an
- *   EMLSR link and is protected by MU-RTS TF
- * - the AP MLD blocks transmission on all other EMLSR links when sending an ICF to an EMLSR client
- * - After completing a frame exchange with an EMLSR client, the AP MLD can start another frame
- *   exchange with that EMLSR client within the same TXOP (after a SIFS) without sending an ICF
- * - During the transition delay, all EMLSR links are not used for DL transmissions
- * - The padding added to Initial Control frames is the largest among all the EMLSR clients
- *   solicited by the ICF
- *
- * After disabling EMLSR mode, it is checked that:
- *
- * - all EMLSR links (but the link used to exchange EML Notification frames) of the EMLSR clients
- *   are considered to be in power save mode and are blocked by the AP MLD
- * - an MU-RTS Trigger Frame is sent by the AP MLD as ICF for sending the EML Notification
- *   response, unless the link used to exchange EML Notification frames is a non-EMLSR link
- * - no MU-RTS Trigger Frame is used as ICF for QoS data frames
- * - In case of EMLSR clients having no link that is not an EMLSR link and is different than
- *   the link used to exchange EML Notification frames, the two A-MPDUs are transmitted one
- *   after another on the link used to exchange EML Notification frames. Otherwise, the two
- *   A-MPDUs are sent concurrently on two distinct links
- *
- * Also, if the PutAuxPhyToSleep attribute is set to true, it is checked that aux PHYs are in
- * sleep mode after receiving an ICF and are resumed from sleep after receiving the CF-End frame.
- */
-class EmlsrDlTxopTest : public EmlsrOperationsTestBase
-{
-  public:
-    /**
-     * Parameters for the EMLSR DL TXOP test
-     */
-    struct Params
-    {
-        std::size_t nEmlsrStations;    //!< number of non-AP MLDs that support EMLSR
-        std::size_t nNonEmlsrStations; //!< number of non-AP MLDs that do not support EMLSR
-        std::set<uint8_t>
-            linksToEnableEmlsrOn;       //!< IDs of links on which EMLSR mode should be enabled
-        std::vector<Time> paddingDelay; //!< vector (whose size equals <i>nEmlsrStations</i>) of the
-                                        //!< padding delay values advertised by non-AP MLDs
-        std::vector<Time>
-            transitionDelay;    //!< vector (whose size equals <i>nEmlsrStations</i>) of
-                                //!< transition the delay values advertised by non-AP MLDs
-        Time transitionTimeout; //!< the Transition Timeout advertised by the AP MLD
-        bool putAuxPhyToSleep;  //!< whether aux PHYs are put to sleep during DL/UL TXOPs
-    };
-
-    /**
-     * Constructor
-     *
-     * @param params parameters for the EMLSR DL TXOP test
-     */
-    EmlsrDlTxopTest(const Params& params);
-    ~EmlsrDlTxopTest() override = default;
-
-  protected:
-    void DoSetup() override;
-    void DoRun() override;
-    void Transmit(Ptr<WifiMac> mac,
-                  uint8_t phyId,
-                  WifiConstPsduMap psduMap,
-                  WifiTxVector txVector,
-                  double txPowerW) override;
-
-    /**
-     * Check that the simulation produced the expected results.
-     */
-    void CheckResults();
-
-    /**
-     * Check that the AP MLD considers the correct Power Management mode for the links setup
-     * with the given non-AP MLD. This method is intended to be called shortly after ML setup.
-     *
-     * @param address a link address of the given non-AP MLD
-     */
-    void CheckPmModeAfterAssociation(const Mac48Address& address);
-
-    /**
-     * Check that appropriate actions are taken when the AP MLD transmits an EML Operating Mode
-     * Notification response frame to an EMLSR client on the given link.
-     *
-     * @param mpdu the MPDU carrying the EML Operating Mode Notification frame
-     * @param txVector the TXVECTOR used to send the PPDU
-     * @param linkId the ID of the given link
-     */
-    void CheckApEmlNotificationFrame(Ptr<const WifiMpdu> mpdu,
-                                     const WifiTxVector& txVector,
-                                     uint8_t linkId);
-
-    /**
-     * Check that appropriate actions are taken when an EMLSR client transmits an EML Operating
-     * Mode Notification frame to the AP MLD on the given link.
-     *
-     * @param mpdu the MPDU carrying the EML Operating Mode Notification frame
-     * @param txVector the TXVECTOR used to send the PPDU
-     * @param linkId the ID of the given link
-     */
-    void CheckStaEmlNotificationFrame(Ptr<const WifiMpdu> mpdu,
-                                      const WifiTxVector& txVector,
-                                      uint8_t linkId);
-
-    /**
-     * Check that appropriate actions are taken by the AP MLD transmitting an initial
-     * Control frame to an EMLSR client on the given link.
-     *
-     * @param mpdu the MPDU carrying the MU-RTS TF
-     * @param txVector the TXVECTOR used to send the PPDU
-     * @param linkId the ID of the given link
-     */
-    void CheckInitialControlFrame(Ptr<const WifiMpdu> mpdu,
-                                  const WifiTxVector& txVector,
-                                  uint8_t linkId);
-
-    /**
-     * Check that appropriate actions are taken by the AP MLD transmitting a PPDU containing
-     * QoS data frames to EMLSR clients on the given link.
-     *
-     * @param psduMap the PSDU(s) carrying QoS data frames
-     * @param txVector the TXVECTOR used to send the PPDU
-     * @param linkId the ID of the given link
-     */
-    void CheckQosFrames(const WifiConstPsduMap& psduMap,
-                        const WifiTxVector& txVector,
-                        uint8_t linkId);
-
-    /**
-     * Check that appropriate actions are taken by the AP MLD receiving a PPDU containing
-     * BlockAck frames from EMLSR clients on the given link.
-     *
-     * @param psduMap the PSDU carrying BlockAck frames
-     * @param txVector the TXVECTOR used to send the PPDU
-     * @param phyId the ID of the PHY transmitting the PSDU(s)
-     */
-    void CheckBlockAck(const WifiConstPsduMap& psduMap,
-                       const WifiTxVector& txVector,
-                       uint8_t phyId);
-
-  private:
-    void StartTraffic() override;
-
-    /**
-     * Enable EMLSR mode on the next EMLSR client
-     */
-    void EnableEmlsrMode();
-
-    std::set<uint8_t> m_emlsrLinks; /**< IDs of the links on which EMLSR mode has to be enabled */
-    Time m_emlsrEnabledTime;        //!< when EMLSR mode has been enabled on all EMLSR clients
-    const Time m_fe2to3delay;       /**< time interval between 2nd and 3rd frame exchange sequences
-                                         after the enablement of EMLSR mode */
-    std::size_t m_countQoSframes;   //!< counter for QoS frames (transition delay test)
-    std::size_t m_countBlockAck;    //!< counter for BlockAck frames (transition delay test)
-    Ptr<ListErrorModel> m_errorModel; ///< error rate model to corrupt BlockAck at AP MLD
-};
-
-/**
- * @ingroup wifi-test
- * @ingroup tests
- *
- * @brief Test the transmission of UL frames from EMLSR clients.
- *
- * This test considers an AP MLD and a non-AP MLD that support EMLSR. The non-AP MLD setups three
- * links, while the set of EMLSR links is configurable. Block ack agreements (for TID 0) for both
- * DL and UL directions are established after that the EML Operating Mode Notification frames are
- * exchanged to enable the EMLSR mode on the EMLSR links. Aux PHYs on the EMLSR client do not
- * switch link, hence the main PHY will switch link (if needed) when terminating a TXOP.
- *
- * It is checked that:
- *
- * - Initially, aux PHYs are configured so that they are unable to transmit frames. Before
- *   generating the packets for the first UL data frame, transmissions on the link where the
- *   main PHY is operating and on the non-EMLSR link (if any) are blocked. Thus, the first UL data
- *   frame is held until transmissions on the link where the main PHY is operating are unblocked.
- *   The first UL data frame is sent by the main PHY without RTS protection. When the data frame
- *   exchange terminates, the MediumSyncDelay timer is started on the other EMLSR links and the
- *   CCA ED threshold is set as expected
- * - If there is a non-EMLSR link, another data frame can be sent concurrently (without protection)
- *   on the non-EMLSR link
- * - When the first UL data frame is transmitted, we make the aux PHYs on the EMLSR client capable
- *   of transmitting, we block transmissions on the link where the main PHY is operating and
- *   generate new UL packets, which will then be transmitted on a link where an aux PHY is
- *   operating. Thus, the aux PHY transmits an RTS frame and the main PHY will take over and
- *   transmit the second UL data frame. We check that, while the link on which the main PHY was
- *   operating is blocked because another EMLSR link is being used, new backoff values for that
- *   link are generated if and only if the QosTxop::GenerateBackoffIfTxopWithoutTx attribute is
- *   true; otherwise, a new backoff value is generated when the link is unblocked.
- * - When the exchange of the second UL data frame terminates, we make the aux PHY unable to
- *   transmit, block transmissions on the non-EMLSR link (if any) and generate some more UL
- *   packets, which will then be transmitted by the main PHY. However, a MediumSyncDelay timer
- *   is now running on the link where the main PHY is operating, hence transmissions are protected
- *   by an RTS frame. We install a post reception error model on the AP MLD so that all RTS frames
- *   sent by the EMLSR client are not received by the AP MLD. We check that the EMLSR client makes
- *   at most the configured max number of transmission attempts and that another UL data frame is
- *   sent once the MediumSyncDelay timer is expired. We also check that the TX width of the RTS
- *   frames and the UL data frame equal the channel width used by the main PHY.
- * - We check that no issue arises in case an aux PHY sends an RTS frame but the CTS response is
- *   not transmitted successfully. Specifically, we check that the main PHY is completing the
- *   channel switch when the (unsuccessful) reception of the CTS ends and that a new RTS/CTS
- *   exchange is carried out to protect the transmission of the last data frame.
- * - While the main PHY is operating on the same link as an aux PHY (which does not switch
- *   channel), the aux PHY is put in sleep mode as soon as the main PHY starts operating on the
- *   link, stays in sleep mode until the TXOP ends and is resumed from sleep mode right after the
- *   end of the DL/UL TXOP.
- * - When an aux PHY that is not TX capable gains a TXOP, it checks whether the main PHY can switch
- *   to the auxiliary link a start an UL TXOP. If the main PHY is switching, the aux PHY waits
- *   until the channel switch is completed and checks again; if the remaining backoff time on the
- *   preferred link is greater than the channel switch delay, the main PHY is requested to switch to
- *   the auxiliary link of the aux PHY. When the channel switch is completed, if the medium is
- *   idle on the auxiliary link and the backoff is zero, the main PHY starts an UL TXOP after a
- *   PIFS period; otherwise, the main PHY starts an UL TXOP when the backoff timer counts down to
- *   zero. The QoS data frame sent by the main PHY is not protected by RTS and the bandwidth it
- *   occupies is not affected by possible limitations on the aux PHY TX bandwidth capabilities.
- *
- * Also, if the PutAuxPhyToSleep attribute is set to true, it is checked that aux PHYs are in
- * sleep mode a SIFS after receiving the ICF and are still in sleep mode right before receiving
- * a Block Ack frame, and they are resumed from sleep after receiving the Block Ack frame.
- */
-class EmlsrUlTxopTest : public EmlsrOperationsTestBase
-{
-  public:
-    /**
-     * Parameters for the EMLSR UL TXOP test
-     */
-    struct Params
-    {
-        std::set<uint8_t>
-            linksToEnableEmlsrOn;       //!< IDs of links on which EMLSR mode should be enabled
-        MHz_u channelWidth;             //!< width of the channels used by MLDs
-        MHz_u auxPhyChannelWidth;       //!< max width supported by aux PHYs
-        Time mediumSyncDuration;        //!< duration of the MediumSyncDelay timer
-        uint8_t msdMaxNTxops;           //!< Max number of TXOPs that an EMLSR client is allowed
-                                        //!< to attempt to initiate while the MediumSyncDelay
-                                        //!< timer is running (zero indicates no limit)
-        bool genBackoffAndUseAuxPhyCca; //!< this variable controls two boolean values that are
-                                        //!< either both set to true or both set to false;
-                                        //!< the first value controls whether the backoff should be
-                                        //!< invoked when the AC gains the right to start a TXOP
-                                        //!< but it does not transmit any frame, the second value
-                                        //!< controls whether CCA info from aux PHY is used when
-                                        //!< aux PHY is not TX capable
-        uint8_t nSlotsLeftAlert;        //!< value to set the ChannelAccessManager NSlotsLeft
-                                        //!< attribute to
-        bool putAuxPhyToSleep;          //!< whether aux PHYs are put to sleep during DL/UL TXOPs
-        bool switchMainPhyBackDelayTimeout; //!< whether a SwitchMainPhyBackDelay timer expires
-                                            //!< after that the main PHY moved to an aux PHY link
-    };
-
-    /**
-     * Constructor
-     *
-     * @param params parameters for the EMLSR UL TXOP test
-     */
-    EmlsrUlTxopTest(const Params& params);
-    ~EmlsrUlTxopTest() override = default;
-
-  protected:
-    void DoSetup() override;
-    void DoRun() override;
-    void Transmit(Ptr<WifiMac> mac,
-                  uint8_t phyId,
-                  WifiConstPsduMap psduMap,
-                  WifiTxVector txVector,
-                  double txPowerW) override;
-
-    /**
-     * Check that the simulation produced the expected results.
-     */
-    void CheckResults();
-
-    /**
-     * Check that appropriate actions are taken by the EMLSR client when transmitting an RTS
-     * frame on the given link.
-     *
-     * @param mpdu the MPDU carrying the RTS frame
-     * @param txVector the TXVECTOR used to send the PPDU
-     * @param linkId the ID of the given link
-     */
-    void CheckRtsFrames(Ptr<const WifiMpdu> mpdu, const WifiTxVector& txVector, uint8_t linkId);
-
-    /**
-     * Check that appropriate actions are taken by the EMLSR client when receiving a CTS
-     * frame on the given link.
-     *
-     * @param mpdu the MPDU carrying the CTS frame
-     * @param txVector the TXVECTOR used to send the PPDU
-     * @param linkId the ID of the given link
-     */
-    void CheckCtsFrames(Ptr<const WifiMpdu> mpdu, const WifiTxVector& txVector, uint8_t linkId);
-
-    /**
-     * Check that appropriate actions are taken when an MLD transmits a PPDU containing
-     * QoS data frames on the given link.
-     *
-     * @param psduMap the PSDU(s) carrying QoS data frames
-     * @param txVector the TXVECTOR used to send the PPDU
-     * @param linkId the ID of the given link
-     */
-    void CheckQosFrames(const WifiConstPsduMap& psduMap,
-                        const WifiTxVector& txVector,
-                        uint8_t linkId);
-
-    /**
-     * Check that appropriate actions are taken when an MLD transmits a PPDU containing
-     * BlockAck frames on the given link.
-     *
-     * @param psduMap the PSDU carrying BlockAck frames
-     * @param txVector the TXVECTOR used to send the PPDU
-     * @param linkId the ID of the given link
-     */
-    void CheckBlockAck(const WifiConstPsduMap& psduMap,
-                       const WifiTxVector& txVector,
-                       uint8_t linkId);
-
-  private:
-    void StartTraffic() override;
-
-    /**
-     * Callback invoked when a new backoff value is generated by the EMLSR client.
-     *
-     * @param backoff the generated backoff value
-     * @param linkId the ID of the link for which the backoff value has been generated
-     */
-    void BackoffGenerated(uint32_t backoff, uint8_t linkId);
-
-    std::set<uint8_t> m_emlsrLinks; /**< IDs of the links on which EMLSR mode has to be enabled */
-    MHz_u m_channelWidth;           //!< width of the channels used by MLDs
-    MHz_u m_auxPhyChannelWidth;     //!< max width supported by aux PHYs
-    Time m_mediumSyncDuration;      //!< duration of the MediumSyncDelay timer
-    uint8_t m_msdMaxNTxops;         //!< Max number of TXOPs that an EMLSR client is allowed
-                                    //!< to attempt to initiate while the MediumSyncDelay
-                                    //!< timer is running (zero indicates no limit)
-    std::optional<uint8_t> m_nonEmlsrLink; //!< ID of the non-EMLSR link (if any)
-    Time m_emlsrEnabledTime;              //!< when EMLSR mode has been enabled on all EMLSR clients
-    Time m_firstUlPktsGenTime;            //!< generation time of the first two UL packets
-    const Time m_unblockMainPhyLinkDelay; //!< delay between the time the first two UL packets are
-                                          //!< generated and the time transmissions are unblocked
-                                          //!< on the link where the main PHY is operating on
-    Time m_lastMsdExpiryTime;             //!< expiry time of the last MediumSyncDelay timer
-    bool m_checkBackoffStarted;           //!< whether we are checking the generated backoff values
-    std::optional<Time> m_backoffEndTime; //!< expected backoff end time on main PHY link
-    Ptr<ListErrorModel> m_errorModel;     ///< error rate model to corrupt packets
-    std::size_t m_countQoSframes;         //!< counter for QoS frames
-    std::size_t m_countBlockAck;          //!< counter for BlockAck frames
-    std::size_t m_countRtsframes;         //!< counter for RTS frames
-    bool m_genBackoffIfTxopWithoutTx;     //!< whether the backoff should be invoked when the AC
-                                          //!< gains the right to start a TXOP but it does not
-                                          //!< transmit any frame
-    bool m_useAuxPhyCca;                  //!< whether CCA info from aux PHY is used when
-                                          //!< aux PHY is not TX capable
-    uint8_t m_nSlotsLeftAlert;            //!< value for ChannelAccessManager NSlotsLeft attribute
-    bool m_switchMainPhyBackDelayTimeout; //!< whether a SwitchMainPhyBackDelay timer expires
-                                          //!< after that the main PHY moved to an aux PHY link
-    std::optional<bool> m_corruptCts;     //!< whether the transmitted CTS must be corrupted
-    Time m_5thQosFrameTxTime;             //!< start transmission time of the 5th QoS data frame
-    MHz_u m_5thQosFrameExpWidth;          //!< expected width of the 5th QoS data frame
-};
-
-/**
- * @ingroup wifi-test
- * @ingroup tests
- *
- * @brief Check UL OFDMA operations with EMLSR clients.
- *
- * This test considers an AP MLD and an EMLSR client and a non-AP MLD that setup three links with
- * the AP MLD. Once block ack agreements (for TID 0) are established for the UL direction, the
- * AP MLD starts requesting channel access (on all the links) through the Multi-User scheduler.
- * Given that links are idle, AP MLD accesses the channel on all the links and concurrently sends
- * Trigger Frames. When the transmission of the first Trigger Frame is over, a client application
- * on the EMLSR client generates two packets addressed to the AP MLD.
- *
- * It is checked that:
- * - when sending BSRP TF is disabled, the first Trigger Frame sent is an MU-RTS; otherwise, it is
- *   a BSRP Trigger Frame. In both cases, such Trigger Frame acts as an ICF for the EMLSR client
- * - the other Trigger Frames sent concurrently with the ICF only solicit the non-EMLSR client
- *   (AP MLD has blocked transmissions to the EMLSR client upon preparing the first Trigger Frame)
- * - the buffer status reported in QoS Null frames is as expected
- * - the EMLSR client sends a QoS Data frame in a TB PPDU
- */
-class EmlsrUlOfdmaTest : public EmlsrOperationsTestBase
-{
-  public:
-    /**
-     * Constructor
-     *
-     * @param enableBsrp whether MU scheduler sends BSRP TFs
-     */
-    EmlsrUlOfdmaTest(bool enableBsrp);
-
-  protected:
-    void DoSetup() override;
-    void DoRun() override;
-    void Transmit(Ptr<WifiMac> mac,
-                  uint8_t phyId,
-                  WifiConstPsduMap psduMap,
-                  WifiTxVector txVector,
-                  double txPowerW) override;
-
-    /**
-     * Check that the simulation produced the expected results.
-     */
-    void CheckResults();
-
-  private:
-    void StartTraffic() override;
-
-    bool m_enableBsrp;        //!< whether MU scheduler sends BSRP TFs
-    std::size_t m_txPsdusPos; //!< position in the vector of TX PSDUs of the first ICF
-    Time m_startAccessReq;    //!< start time of the first AP MLD access request via MU scheduler
-};
-
-/**
- * @ingroup wifi-test
- * @ingroup tests
- *
- * @brief Test the switching of PHYs on EMLSR clients.
- *
- * An AP MLD and an EMLSR client setup 3 links, on which EMLSR mode is enabled. The AP MLD
- * transmits 4 QoS data frames (one after another, each protected by ICF):
- *
- * - the first one on the link used for ML setup, hence no PHY switch occurs
- * - the second one on another link, thus causing the main PHY to switch link
- * - the third one on the remaining link, thus causing the main PHY to switch link again
- * - the fourth one on the link used for ML setup
- *
- * Afterwards, the EMLSR client transmits 2 QoS data frames; the first one on the link used for
- * ML setup (hence, no RTS is sent), the second one on another link.
- */
-class EmlsrLinkSwitchTest : public EmlsrOperationsTestBase
-{
-  public:
-    /**
-     * Parameters for the EMLSR link switching test
-     */
-    struct Params
-    {
-        bool
-            switchAuxPhy; //!< whether AUX PHY should switch channel to operate on the link on which
-                          //!<  the Main PHY was operating before moving to the link of the Aux PHY
-        bool resetCamStateAndInterruptSwitch; //!< this variable controls two boolean values that
-                                              //!< are either both set to true or both set to false;
-                                              //!< the first value controls whether to reset the
-                                              //!< state of the ChannelAccessManager associated
-                                              //!< with the link on which the main PHY has just
-                                              //!< switched to, the second value controls whether
-                                              //!< a main PHY channel switch can be interrupted
-        MHz_u auxPhyMaxChWidth;               //!< max channel width supported by aux PHYs
-    };
-
-    /**
-     * Constructor
-     *
-     * @param params parameters for the EMLSR link switching test
-     */
-    EmlsrLinkSwitchTest(const Params& params);
-
-    ~EmlsrLinkSwitchTest() override = default;
-
-  protected:
-    void DoSetup() override;
-    void DoRun() override;
-    void Transmit(Ptr<WifiMac> mac,
-                  uint8_t phyId,
-                  WifiConstPsduMap psduMap,
-                  WifiTxVector txVector,
-                  double txPowerW) override;
-
-    /**
-     * Check that the simulation produced the expected results.
-     */
-    void CheckResults();
-
-    /**
-     * Check that the Main PHY (and possibly the Aux PHY) correctly switches channel when the
-     * reception of an ICF ends.
-     *
-     * @param psduMap the PSDU carrying the MU-RTS TF
-     * @param txVector the TXVECTOR used to send the PPDU
-     * @param linkId the ID of the given link
-     */
-    void CheckInitialControlFrame(const WifiConstPsduMap& psduMap,
-                                  const WifiTxVector& txVector,
-                                  uint8_t linkId);
-
-    /**
-     * Check that appropriate actions are taken by the AP MLD transmitting a PPDU containing
-     * QoS data frames to the EMLSR client on the given link.
-     *
-     * @param psduMap the PSDU(s) carrying QoS data frames
-     * @param txVector the TXVECTOR used to send the PPDU
-     * @param linkId the ID of the given link
-     */
-    void CheckQosFrames(const WifiConstPsduMap& psduMap,
-                        const WifiTxVector& txVector,
-                        uint8_t linkId);
-
-    /**
-     * Check that appropriate actions are taken by the EMLSR client transmitting a PPDU containing
-     * an RTS frame to the AP MLD on the given link.
-     *
-     * @param psduMap the PSDU carrying RTS frame
-     * @param txVector the TXVECTOR used to send the PPDU
-     * @param linkId the ID of the given link
-     */
-    void CheckRtsFrame(const WifiConstPsduMap& psduMap,
-                       const WifiTxVector& txVector,
-                       uint8_t linkId);
-
-  private:
-    bool m_switchAuxPhy; /**< whether AUX PHY should switch channel to operate on the link on which
-                              the Main PHY was operating before moving to the link of Aux PHY */
-    bool
-        m_resetCamStateAndInterruptSwitch; /**< whether to reset the state of the
-                              ChannelAccessManager associated with the link on which the main PHY
-                              has just switched to and whether main PHY switch can be interrupted */
-    MHz_u m_auxPhyMaxChWidth;              //!< max channel width supported by aux PHYs
-    std::size_t m_countQoSframes;          //!< counter for QoS data frames
-    std::size_t m_countIcfFrames;          //!< counter for ICF frames
-    std::size_t m_countRtsFrames;          //!< counter for RTS frames
-    std::size_t m_txPsdusPos;              //!< position in the vector of TX PSDUs of the first ICF
-    Ptr<ListErrorModel> m_errorModel;      ///< error rate model to corrupt packets at AP MLD
-};
-
-/**
- * @ingroup wifi-test
- * @ingroup tests
- *
- * @brief wifi EMLSR Test Suite
- */
-class WifiEmlsrTestSuite : public TestSuite
-{
-  public:
-    WifiEmlsrTestSuite();
-};
-
-/**
- * @ingroup wifi-test
- * @ingroup tests
- *
- * @brief Test CCA busy notifications on EMLSR clients.
- *
- * SwitchAuxPhy is set to true, so that the aux PHY starts switching when the main PHY switch is
- * completed.
- *
- * - Main PHY switches to a link on which an aux PHY is operating. Right after the start of the
- *   channel switch, the AP transmits a frame to another device on the aux PHY link. Verify that,
- *   once the main PHY is operating on the new link, the channel access manager on that link is
- *   notified of CCA busy until the end of the transmission
- * - When the main PHY switch is completed, the aux PHY switches to a link on which no PHY is
- *   operating. Before the aux PHY starts switching, the AP starts transmitting a frame to another
- *   device on the link on which no PHY is operating. Verify that, once the aux PHY is operating
- *   on the new link, the channel access manager on that link is notified of CCA busy until the
- *   end of the transmission
- */
-class EmlsrCcaBusyTest : public EmlsrOperationsTestBase
-{
-  public:
-    /**
-     * Constructor
-     *
-     * @param auxPhyMaxChWidth max channel width supported by aux PHYs
-     */
-    EmlsrCcaBusyTest(MHz_u auxPhyMaxChWidth);
-
-    ~EmlsrCcaBusyTest() override = default;
-
-  protected:
-    void DoSetup() override;
-    void DoRun() override;
-
-  private:
-    void StartTraffic() override;
-
-    /**
-     * Make the other MLD transmit a packet to the AP on the given link.
-     *
-     * @param linkId the ID of the given link
-     */
-    void TransmitPacketToAp(uint8_t linkId);
-
-    /**
-     * Perform checks after that the preamble of the first PPDU has been received.
-     */
-    void CheckPoint1();
-
-    /**
-     * Perform checks after that the main PHY completed the link switch.
-     */
-    void CheckPoint2();
-
-    /**
-     * Perform checks after that the aux PHY completed the link switch.
-     */
-    void CheckPoint3();
-
-    MHz_u m_auxPhyMaxChWidth;    //!< max channel width supported by aux PHYs
-    Time m_channelSwitchDelay;   //!< the PHY channel switch delay
-    uint8_t m_currMainPhyLinkId; //!< the ID of the link the main PHY switches from
-    uint8_t m_nextMainPhyLinkId; //!< the ID of the link the main PHY switches to
-};
-
-#endif /* WIFI_EMLSR_TEST_H */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/test/wifi-fils-frame-test.cc ns-3.45/src/wifi/test/wifi-fils-frame-test.cc
--- ns-3.44/src/wifi/test/wifi-fils-frame-test.cc	2025-03-09 16:55:49.807372600 -0700
+++ ns-3.45/src/wifi/test/wifi-fils-frame-test.cc	2025-06-01 20:34:45.637702200 -0700
@@ -70,11 +70,13 @@
 static const auto DEFAULT_ENABLE_PCAP = false;
 static const auto DEFAULT_AP_LOC = Vector(0.01, 0, 0);
 static const auto DEFAULT_CLIENT_LOC = Vector(0, 0, 0);
-static const uint8_t WIFI_6GHZ_FD_PHY_IDX = 4;
+static const uint8_t WIFI_11AX_FD_PHY_IDX = 4;
+static const uint8_t WIFI_11BE_FD_PHY_IDX = 5;
 
 /// @brief  Wi-Fi FILS frame test parameters
 struct WifiFilsFrameTestParams
 {
+    WifiStandard standard{DEFAULT_STANDARD};            ///< Standard
     MHz_u bw{DEFAULT_BANDWIDTH};                        ///< Operation bandwidth
     std::string ssid{DEFAULT_SSID};                     ///< SSID name
     uint8_t nss{0};                                     ///< Number of spatial streams
@@ -186,7 +188,7 @@
     phy.Set("MaxSupportedTxSpatialStreams", UintegerValue(m_params.nss));
     phy.Set("MaxSupportedRxSpatialStreams", UintegerValue(m_params.nss));
 
-    wifi.SetStandard(DEFAULT_STANDARD);
+    wifi.SetStandard(m_params.standard);
     wifi.SetRemoteStationManager("ns3::ConstantRateWifiManager");
 
     if (isAp)
@@ -341,7 +343,9 @@
                           +m_params.expNssFld,
                           "FILS Discovery frame NSS mismatch");
     NS_TEST_ASSERT_MSG_EQ(+filsDisc.m_fdCap->m_phyIdx,
-                          +WIFI_6GHZ_FD_PHY_IDX,
+                          ((m_params.standard == WifiStandard::WIFI_STANDARD_80211be)
+                               ? +WIFI_11BE_FD_PHY_IDX
+                               : +WIFI_11AX_FD_PHY_IDX),
                           "FILS Discovery frame PHY idx mismatch");
 }
 
@@ -373,6 +377,7 @@
     BW80MHZ_NSS2_DISC,
     BW160MHZ_NSS2_DISC,
     BW160MHZ_NSS2_PROBE,
+    BW320MHZ_NSS3_DISC,
     COUNT,
 };
 
@@ -429,6 +434,15 @@
         params.expChWidFld = 3;
         params.expNssFld = 1;
         break;
+    case WifiFilsFrameTestCase::BW320MHZ_NSS3_DISC:
+        params.standard = WifiStandard::WIFI_STANDARD_80211be;
+        params.bw = MHz_u{320};
+        params.ssid = "BW320MHZ_NSS3";
+        params.nss = 3;
+        params.filsIntrvl = 20 * WIFI_TU;
+        params.expChWidFld = 4;
+        params.expNssFld = 2;
+        break;
     default:
         NS_ABORT_MSG("Testcase is unsupported");
         break;
@@ -455,6 +469,7 @@
         {WifiFilsFrameTestBuildCase(WifiFilsFrameTestCase::BW80MHZ_NSS2_DISC)},
         {WifiFilsFrameTestBuildCase(WifiFilsFrameTestCase::BW160MHZ_NSS2_DISC)},
         {WifiFilsFrameTestBuildCase(WifiFilsFrameTestCase::BW160MHZ_NSS2_PROBE)},
+        {WifiFilsFrameTestBuildCase(WifiFilsFrameTestCase::BW320MHZ_NSS3_DISC)},
     };
     for (const auto& tc : testCases)
     {
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/test/wifi-gcr-test.cc ns-3.45/src/wifi/test/wifi-gcr-test.cc
--- ns-3.44/src/wifi/test/wifi-gcr-test.cc	2025-03-09 16:55:49.807372600 -0700
+++ ns-3.45/src/wifi/test/wifi-gcr-test.cc	2025-06-01 20:34:45.637702200 -0700
@@ -744,9 +744,9 @@
     // WifiHelper::EnableLogComponents();
     // LogComponentEnable("WifiGcrTest", LOG_LEVEL_ALL);
 
-    RngSeedManager::SetSeed(1);
-    RngSeedManager::SetRun(2);
-    int64_t streamNumber = 100;
+    RngSeedManager::SetSeed(m_rngSeed);
+    RngSeedManager::SetRun(m_rngRun);
+    int64_t streamNumber = m_streamNo;
 
     Config::SetDefault("ns3::WifiMacQueue::MaxDelay", TimeValue(m_params.maxLifetime));
     const auto maxPacketsInQueue = std::max<uint16_t>(m_params.numGroupcastPackets + 1, 500);
@@ -908,17 +908,12 @@
         if (m_params.stas.at(i).standard >= WIFI_STANDARD_80211n)
         {
             auto staHtConfiguration = CreateObject<HtConfiguration>();
-            staHtConfiguration->m_40MHzSupported =
-                (m_params.stas.at(i).standard >= WIFI_STANDARD_80211ac ||
-                 m_params.stas.at(i).maxChannelWidth >= MHz_u{40});
             staHtConfiguration->m_sgiSupported = (m_params.stas.at(i).minGi == NanoSeconds(400));
             staNetDevice->SetHtConfiguration(staHtConfiguration);
         }
         if (m_params.stas.at(i).standard >= WIFI_STANDARD_80211ac)
         {
             auto staVhtConfiguration = CreateObject<VhtConfiguration>();
-            staVhtConfiguration->m_160MHzSupported =
-                (m_params.stas.at(i).maxChannelWidth >= MHz_u{160});
             staNetDevice->SetVhtConfiguration(staVhtConfiguration);
         }
         if (m_params.stas.at(i).standard >= WIFI_STANDARD_80211ax)
@@ -1046,6 +1041,7 @@
       m_gcrUrParams{gcrUrParams},
       m_currentUid{0}
 {
+    m_rngRun = 2;
 }
 
 void
@@ -1373,6 +1369,7 @@
       m_lastTxSeq{-1},
       m_nTxGcrBarsInCurrentTxop{0}
 {
+    m_rngRun = 5;
 }
 
 void
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/test/wifi-gcr-test.h ns-3.45/src/wifi/test/wifi-gcr-test.h
--- ns-3.44/src/wifi/test/wifi-gcr-test.h	2025-03-09 16:55:49.807372600 -0700
+++ ns-3.45/src/wifi/test/wifi-gcr-test.h	2025-06-01 20:34:45.637702200 -0700
@@ -192,9 +192,12 @@
      */
     virtual bool IsUsingAmpduOrSmpdu() const;
 
-    std::string m_testName; ///< name of the test
-    GcrParameters m_params; ///< parameters for the test to run
-    bool m_expectGcrUsed;   ///< flag whether GCR is expected to be used during the test
+    std::string m_testName;  ///< name of the test
+    uint32_t m_rngSeed{1};   ///< RNG seed value
+    uint64_t m_rngRun{1};    ///< RNG run value
+    int64_t m_streamNo{100}; ///< RNG stream number
+    GcrParameters m_params;  ///< parameters for the test to run
+    bool m_expectGcrUsed;    ///< flag whether GCR is expected to be used during the test
     uint16_t m_expectedMaxNumMpdusInPsdu; ///< expected maximum number of MPDUs in PSDUs
 
     Ptr<ApWifiMac> m_apWifiMac;                 ///< AP wifi MAC
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/test/wifi-mac-ofdma-test.cc ns-3.45/src/wifi/test/wifi-mac-ofdma-test.cc
--- ns-3.44/src/wifi/test/wifi-mac-ofdma-test.cc	2025-03-09 16:55:49.811372800 -0700
+++ ns-3.45/src/wifi/test/wifi-mac-ofdma-test.cc	2025-06-01 20:34:45.638702400 -0700
@@ -30,6 +30,7 @@
 #include "ns3/wifi-psdu.h"
 
 #include <iomanip>
+#include <utility>
 
 using namespace ns3;
 
@@ -302,40 +303,79 @@
     }
     NS_ABORT_MSG_IF(staList.size() != 4, "There must be 4 associated stations");
 
-    HeRu::RuType ruType;
+    RuType ruType;
     switch (static_cast<uint16_t>(bw))
     {
-    case 20:
-        ruType = HeRu::RU_52_TONE;
-        m_txVector.SetRuAllocation({112}, 0);
+    case 20: {
+        ruType = RuType::RU_52_TONE;
+        const uint16_t ruAllocPer20 = IsEht(m_txVector.GetPreambleType()) ? 24 : 112;
+        m_txVector.SetRuAllocation({ruAllocPer20}, 0);
         break;
-    case 40:
-        ruType = HeRu::RU_106_TONE;
-        m_txVector.SetRuAllocation({96, 96}, 0);
+    }
+    case 40: {
+        ruType = RuType::RU_106_TONE;
+        const uint16_t ruAllocPer20 = IsEht(m_txVector.GetPreambleType()) ? 48 : 96;
+        m_txVector.SetRuAllocation({ruAllocPer20, ruAllocPer20}, 0);
         break;
-    case 80:
-        ruType = HeRu::RU_242_TONE;
-        m_txVector.SetRuAllocation({192, 192, 192, 192}, 0);
+    }
+    case 80: {
+        ruType = RuType::RU_242_TONE;
+        const uint16_t ruAllocPer20 = IsEht(m_txVector.GetPreambleType()) ? 64 : 112;
+        m_txVector.SetRuAllocation({ruAllocPer20, ruAllocPer20, ruAllocPer20, ruAllocPer20}, 0);
         break;
-    case 160:
-        ruType = HeRu::RU_484_TONE;
-        m_txVector.SetRuAllocation({200, 200, 200, 200, 200, 200, 200, 200}, 0);
+    }
+    case 160: {
+        ruType = RuType::RU_484_TONE;
+        const uint16_t ruAllocPer20 = IsEht(m_txVector.GetPreambleType()) ? 72 : 200;
+        m_txVector.SetRuAllocation({ruAllocPer20,
+                                    ruAllocPer20,
+                                    ruAllocPer20,
+                                    ruAllocPer20,
+                                    ruAllocPer20,
+                                    ruAllocPer20,
+                                    ruAllocPer20,
+                                    ruAllocPer20},
+                                   0);
+        break;
+    }
+    case 320: {
+        ruType = RuType::RU_996_TONE;
+        NS_ASSERT(IsEht(m_txVector.GetPreambleType()));
+        m_txVector.SetRuAllocation({80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80},
+                                   0);
         break;
+    }
     default:
-        NS_ABORT_MSG("Unsupported channel width");
+        NS_ABORT_MSG("Unsupported channel width: " << bw);
     }
 
-    bool primary80 = true;
-    std::size_t ruIndex = 1;
-
+    auto primary80OrLow80{true};
+    auto primary160{true};
+    std::size_t ruIndex{1};
     for (auto& sta : staList)
     {
-        if (bw == MHz_u{160} && ruIndex == 3)
+        auto index{ruIndex};
+        if (bw > MHz_u{80})
         {
-            ruIndex = 1;
-            primary80 = false;
+            if (!IsEht(m_txVector.GetPreambleType()))
+            {
+                index = HeRu::GetIndexIn80MHzSegment(bw, ruType, ruIndex);
+                primary80OrLow80 = HeRu::GetPrimary80MHzFlag(bw, ruType, ruIndex, 0);
+            }
+            else
+            {
+                index = EhtRu::GetIndexIn80MHzSegment(bw, ruType, ruIndex);
+                const auto& [p160, p80OrLow80] = EhtRu::GetPrimaryFlags(bw, ruType, ruIndex, 0);
+                primary160 = p160;
+                primary80OrLow80 = p80OrLow80;
+            }
         }
-        m_txVector.SetHeMuUserInfo(sta.first, {{ruType, ruIndex++, primary80}, 11, 1});
+        const auto ru =
+            IsEht(m_txVector.GetPreambleType())
+                ? WifiRu::RuSpec(EhtRu::RuSpec{ruType, index, primary160, primary80OrLow80})
+                : WifiRu::RuSpec(HeRu::RuSpec{ruType, index, primary80OrLow80});
+        m_txVector.SetHeMuUserInfo(sta.first, {ru, 11, 1});
+        ruIndex++;
     }
     m_txVector.SetSigBMode(VhtPhy::GetVhtMcs5());
 }
@@ -541,6 +581,9 @@
     case 160:
         m_muRtsRuAllocation = 68;
         break;
+    case 320:
+        m_muRtsRuAllocation = 69;
+        break;
     default:
         NS_ABORT_MSG("Unhandled channel width (" << m_channelWidth << " MHz)");
     }
@@ -582,7 +625,10 @@
     // request/response, ADDBA request, ...)
     if (!psduMap.begin()->second->GetHeader(0).IsBeacon() && Simulator::Now() >= Seconds(1.5))
     {
-        Time txDuration = WifiPhy::CalculateTxDuration(psduMap, txVector, WIFI_PHY_BAND_5GHZ);
+        Time txDuration = WifiPhy::CalculateTxDuration(
+            psduMap,
+            txVector,
+            (m_channelWidth < MHz_u{320}) ? WIFI_PHY_BAND_5GHZ : WIFI_PHY_BAND_6GHZ);
         m_txPsdus.push_back({Simulator::Now(), Simulator::Now() + txDuration, psduMap, txVector});
 
         for (const auto& [staId, psdu] : psduMap)
@@ -685,7 +731,10 @@
         {
             // the AP is starting the transmission of the Basic Trigger frame, so generate
             // the configured number of packets at STAs, which are sent in HE TB PPDUs
-            Time txDuration = WifiPhy::CalculateTxDuration(psduMap, txVector, WIFI_PHY_BAND_5GHZ);
+            Time txDuration = WifiPhy::CalculateTxDuration(
+                psduMap,
+                txVector,
+                (m_channelWidth < MHz_u{320}) ? WIFI_PHY_BAND_5GHZ : WIFI_PHY_BAND_6GHZ);
             for (uint16_t i = 0; i < m_nStations; i++)
             {
                 Ptr<PacketSocketClient> client = CreateObject<PacketSocketClient>();
@@ -2068,8 +2117,11 @@
     case 160:
         phy.Set("ChannelSettings", StringValue("{50, 160, BAND_5GHZ, 0}"));
         break;
+    case 320:
+        phy.Set("ChannelSettings", StringValue("{31, 320, BAND_6GHZ, 0}"));
+        break;
     default:
-        NS_ABORT_MSG("Invalid channel bandwidth (must be 20, 40, 80 or 160)");
+        NS_ABORT_MSG("Invalid channel bandwidth: " << m_channelWidth);
     }
 
     Config::SetDefault("ns3::HeConfiguration::MuBeAifsn",
@@ -2175,9 +2227,12 @@
                                                          : WIFI_STANDARD_80211be);
     m_staDevices = NetDeviceContainer(m_staDevices, wifi.Install(phy, mac, wifiNewStaNodes));
 
-    // create a listening VHT station
-    wifi.SetStandard(WIFI_STANDARD_80211ac);
-    wifi.Install(phy, mac, Create<Node>());
+    if (m_channelWidth < MHz_u{320})
+    {
+        // create a listening VHT station
+        wifi.SetStandard(WIFI_STANDARD_80211ac);
+        wifi.Install(phy, mac, Create<Node>());
+    }
 
     wifi.SetStandard(m_scenario == WifiOfdmaScenario::HE ? WIFI_STANDARD_80211ax
                                                          : WIFI_STANDARD_80211be);
@@ -2351,86 +2406,100 @@
     : TestSuite("wifi-mac-ofdma", Type::UNIT)
 {
     using MuEdcaParams = std::initializer_list<OfdmaAckSequenceTest::MuEdcaParameterSet>;
+    using ChannelWidths = std::initializer_list<std::pair<MHz_u, MHz_u>>;
 
-    for (auto& muEdcaParameterSet : MuEdcaParams{{0, 0, 0, 0} /* no MU EDCA */,
-                                                 {0, 127, 2047, 100} /* EDCA disabled */,
+    for (auto& muEdcaParameterSet : MuEdcaParams{{0, 0, 0, 0},        /* no MU EDCA */
+                                                 {0, 127, 2047, 100}, /* EDCA disabled */
                                                  {10, 127, 2047, 100} /* worse parameters */})
     {
         for (const auto scenario :
              {WifiOfdmaScenario::HE, WifiOfdmaScenario::HE_EHT, WifiOfdmaScenario::EHT})
         {
-            AddTestCase(new OfdmaAckSequenceTest(
-                            {.channelWidth = MHz_u{20},
-                             .dlMuAckType = WifiAcknowledgment::DL_MU_BAR_BA_SEQUENCE,
-                             .maxAmpduSize = 10000,
-                             .txopLimit = 5632,
-                             .continueTxopAfterBsrp = false, // unused because non-zero TXOP limit
-                             .skipMuRtsBeforeBsrp = true,
-                             .protectedIfResponded = false,
-                             .nPktsPerSta = 15,
-                             .muEdcaParameterSet = muEdcaParameterSet,
-                             .scenario = scenario}),
-                        TestCase::Duration::QUICK);
-            AddTestCase(new OfdmaAckSequenceTest(
-                            {.channelWidth = MHz_u{20},
-                             .dlMuAckType = WifiAcknowledgment::DL_MU_AGGREGATE_TF,
-                             .maxAmpduSize = 10000,
-                             .txopLimit = 5632,
-                             .continueTxopAfterBsrp = false, // unused because non-zero TXOP limit
-                             .skipMuRtsBeforeBsrp = false,
-                             .protectedIfResponded = false,
-                             .nPktsPerSta = 15,
-                             .muEdcaParameterSet = muEdcaParameterSet,
-                             .scenario = scenario}),
-                        TestCase::Duration::QUICK);
-            AddTestCase(new OfdmaAckSequenceTest(
-                            {.channelWidth = MHz_u{20},
-                             .dlMuAckType = WifiAcknowledgment::DL_MU_TF_MU_BAR,
-                             .maxAmpduSize = 10000,
-                             .txopLimit = 5632,
-                             .continueTxopAfterBsrp = false, // unused because non-zero TXOP limit
-                             .skipMuRtsBeforeBsrp = true,
-                             .protectedIfResponded = true,
-                             .nPktsPerSta = 15,
-                             .muEdcaParameterSet = muEdcaParameterSet,
-                             .scenario = scenario}),
-                        TestCase::Duration::QUICK);
-            AddTestCase(
-                new OfdmaAckSequenceTest({.channelWidth = MHz_u{40},
-                                          .dlMuAckType = WifiAcknowledgment::DL_MU_BAR_BA_SEQUENCE,
-                                          .maxAmpduSize = 10000,
-                                          .txopLimit = 0,
-                                          .continueTxopAfterBsrp = true,
-                                          .skipMuRtsBeforeBsrp = false,
-                                          .protectedIfResponded = false,
-                                          .nPktsPerSta = 15,
-                                          .muEdcaParameterSet = muEdcaParameterSet,
-                                          .scenario = scenario}),
-                TestCase::Duration::QUICK);
-            AddTestCase(
-                new OfdmaAckSequenceTest({.channelWidth = MHz_u{40},
-                                          .dlMuAckType = WifiAcknowledgment::DL_MU_AGGREGATE_TF,
-                                          .maxAmpduSize = 10000,
-                                          .txopLimit = 0,
-                                          .continueTxopAfterBsrp = false,
-                                          .skipMuRtsBeforeBsrp = true,
-                                          .protectedIfResponded = false,
-                                          .nPktsPerSta = 15,
-                                          .muEdcaParameterSet = muEdcaParameterSet,
-                                          .scenario = scenario}),
-                TestCase::Duration::QUICK);
-            AddTestCase(
-                new OfdmaAckSequenceTest({.channelWidth = MHz_u{40},
-                                          .dlMuAckType = WifiAcknowledgment::DL_MU_TF_MU_BAR,
-                                          .maxAmpduSize = 10000,
-                                          .txopLimit = 0,
-                                          .continueTxopAfterBsrp = true,
-                                          .skipMuRtsBeforeBsrp = false,
-                                          .protectedIfResponded = true,
-                                          .nPktsPerSta = 15,
-                                          .muEdcaParameterSet = muEdcaParameterSet,
-                                          .scenario = scenario}),
-                TestCase::Duration::QUICK);
+            // limit test to 2 channel widths per TXOP limit combination
+            for (const auto& [chWidth1, chWidth2] : ChannelWidths{{MHz_u{20}, MHz_u{40}},
+                                                                  {MHz_u{80}, MHz_u{160}},
+                                                                  {MHz_u{320}, MHz_u{320}}})
+            {
+                if ((chWidth1 > MHz_u{160}) && (scenario < WifiOfdmaScenario::EHT))
+                {
+                    continue;
+                }
+                AddTestCase(
+                    new OfdmaAckSequenceTest(
+                        {.channelWidth = chWidth1,
+                         .dlMuAckType = WifiAcknowledgment::DL_MU_BAR_BA_SEQUENCE,
+                         .maxAmpduSize = 10000,
+                         .txopLimit = 5632,
+                         .continueTxopAfterBsrp = false, // unused because non-zero TXOP limit
+                         .skipMuRtsBeforeBsrp = true,
+                         .protectedIfResponded = false,
+                         .nPktsPerSta = 15,
+                         .muEdcaParameterSet = muEdcaParameterSet,
+                         .scenario = scenario}),
+                    TestCase::Duration::QUICK);
+                AddTestCase(
+                    new OfdmaAckSequenceTest(
+                        {.channelWidth = chWidth1,
+                         .dlMuAckType = WifiAcknowledgment::DL_MU_AGGREGATE_TF,
+                         .maxAmpduSize = 10000,
+                         .txopLimit = 5632,
+                         .continueTxopAfterBsrp = false, // unused because non-zero TXOP limit
+                         .skipMuRtsBeforeBsrp = false,
+                         .protectedIfResponded = false,
+                         .nPktsPerSta = 15,
+                         .muEdcaParameterSet = muEdcaParameterSet,
+                         .scenario = scenario}),
+                    TestCase::Duration::QUICK);
+                AddTestCase(
+                    new OfdmaAckSequenceTest(
+                        {.channelWidth = chWidth1,
+                         .dlMuAckType = WifiAcknowledgment::DL_MU_TF_MU_BAR,
+                         .maxAmpduSize = 10000,
+                         .txopLimit = 5632,
+                         .continueTxopAfterBsrp = false, // unused because non-zero TXOP limit
+                         .skipMuRtsBeforeBsrp = true,
+                         .protectedIfResponded = true,
+                         .nPktsPerSta = 15,
+                         .muEdcaParameterSet = muEdcaParameterSet,
+                         .scenario = scenario}),
+                    TestCase::Duration::QUICK);
+                AddTestCase(new OfdmaAckSequenceTest(
+                                {.channelWidth = chWidth2,
+                                 .dlMuAckType = WifiAcknowledgment::DL_MU_BAR_BA_SEQUENCE,
+                                 .maxAmpduSize = 10000,
+                                 .txopLimit = 0,
+                                 .continueTxopAfterBsrp = true,
+                                 .skipMuRtsBeforeBsrp = false,
+                                 .protectedIfResponded = false,
+                                 .nPktsPerSta = 15,
+                                 .muEdcaParameterSet = muEdcaParameterSet,
+                                 .scenario = scenario}),
+                            TestCase::Duration::QUICK);
+                AddTestCase(
+                    new OfdmaAckSequenceTest({.channelWidth = chWidth2,
+                                              .dlMuAckType = WifiAcknowledgment::DL_MU_AGGREGATE_TF,
+                                              .maxAmpduSize = 10000,
+                                              .txopLimit = 0,
+                                              .continueTxopAfterBsrp = false,
+                                              .skipMuRtsBeforeBsrp = true,
+                                              .protectedIfResponded = false,
+                                              .nPktsPerSta = 15,
+                                              .muEdcaParameterSet = muEdcaParameterSet,
+                                              .scenario = scenario}),
+                    TestCase::Duration::QUICK);
+                AddTestCase(
+                    new OfdmaAckSequenceTest({.channelWidth = chWidth2,
+                                              .dlMuAckType = WifiAcknowledgment::DL_MU_TF_MU_BAR,
+                                              .maxAmpduSize = 10000,
+                                              .txopLimit = 0,
+                                              .continueTxopAfterBsrp = true,
+                                              .skipMuRtsBeforeBsrp = false,
+                                              .protectedIfResponded = true,
+                                              .nPktsPerSta = 15,
+                                              .muEdcaParameterSet = muEdcaParameterSet,
+                                              .scenario = scenario}),
+                    TestCase::Duration::QUICK);
+            }
         }
     }
 }
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/test/wifi-mlo-test.cc ns-3.45/src/wifi/test/wifi-mlo-test.cc
--- ns-3.44/src/wifi/test/wifi-mlo-test.cc	2025-03-09 16:55:49.811372800 -0700
+++ ns-3.45/src/wifi/test/wifi-mlo-test.cc	2025-06-01 20:34:45.639702300 -0700
@@ -264,11 +264,13 @@
     RunOne("Move all links to a new set of IDs", 2, {{0, 2}, {1, 3}}, {{2, 0}, {3, 1}});
 }
 
-AidAssignmentTest::AidAssignmentTest(const std::vector<std::set<uint8_t>>& linkIds)
+AidAssignmentTest::AidAssignmentTest(const std::vector<std::set<uint8_t>>& linkIds,
+                                     WifiAssocType assocType)
     : TestCase("Test the assignment of AIDs"),
       m_linkChannels({"{36, 0, BAND_5GHZ, 0}", "{1, 0, BAND_6GHZ, 0}", "{2, 0, BAND_2_4GHZ, 0}"}),
       m_linkIds(linkIds),
-      m_expectedAid(1) // AID for first station
+      m_assocType(assocType),
+      m_expectedAid(1) // AID for first station (to be updated in case of AP MLD)
 {
 }
 
@@ -332,7 +334,9 @@
                     "Ssid", // first non-AP STA/MLD only starts associating
                     SsidValue(Ssid(m_staDevices.GetN() == 0 ? "ns-3-ssid" : "default")),
                     "ActiveProbing",
-                    BooleanValue(false));
+                    BooleanValue(false),
+                    "AssocType",
+                    EnumValue(m_assocType));
 
         auto staNode = CreateObject<Node>();
         auto staDevice = wifi.Install(phyHelper, mac, staNode);
@@ -359,12 +363,16 @@
             "Assoc",
             MakeCallback(&AidAssignmentTest::SetSsid, this).Bind(DynamicCast<StaWifiMac>(mac)));
     }
+
+    auto apMac = StaticCast<ApWifiMac>(StaticCast<WifiNetDevice>(apDevice.Get(0))->GetMac());
+    m_expectedAid = m_startAid = apMac->GetNextAssociationId();
 }
 
 void
 AidAssignmentTest::SetSsid(Ptr<StaWifiMac> staMac, Mac48Address /* apAddr */)
 {
     const auto aid = staMac->GetAssociationId();
+    std::size_t index = aid - m_startAid;
 
     std::stringstream linksStr;
     const auto setupLinks = staMac->GetSetupLinkIds();
@@ -374,21 +382,21 @@
                        << linksStr.str());
 
     NS_TEST_EXPECT_MSG_EQ(aid, m_expectedAid, "Unexpected AID for STA " << staMac->GetAddress());
-    // For non-AP MLDs, check that the requested links have been setup (for non-AP STAs, link ID
-    // as seen by the non-AP STAs is always zero and could not match link ID as seen by the AP MLD)
-    if (m_linkIds.at(aid - 1).size() > 1)
-    {
-        NS_TEST_EXPECT_MSG_EQ((staMac->GetSetupLinkIds() == m_linkIds.at(aid - 1)),
-                              true,
-                              "Unexpected set of setup links " << linksStr.str());
-    }
 
-    if (m_expectedAid < m_staDevices.GetN())
+    // if ML setup is performed, check that the requested links have been setup; otherwise, link 0
+    // only is setup
+    const auto expectedLinks =
+        (m_assocType == WifiAssocType::ML_SETUP ? m_linkIds.at(index)
+                                                : std::set{SINGLE_LINK_OP_ID});
+
+    NS_TEST_EXPECT_MSG_EQ((staMac->GetSetupLinkIds() == expectedLinks),
+                          true,
+                          "Unexpected set of setup links " << linksStr.str());
+
+    if (++index < m_staDevices.GetN())
     {
         // let the next STA associate with the AP
-        StaticCast<WifiNetDevice>(m_staDevices.Get(m_expectedAid))
-            ->GetMac()
-            ->SetSsid(Ssid("ns-3-ssid"));
+        StaticCast<WifiNetDevice>(m_staDevices.Get(index))->GetMac()->SetSsid(Ssid("ns-3-ssid"));
         ++m_expectedAid;
     }
     else
@@ -403,7 +411,9 @@
     Simulator::Stop(Seconds(5)); // simulation will stop earlier if all STAs complete association
     Simulator::Run();
 
-    NS_TEST_EXPECT_MSG_EQ(m_expectedAid, m_staDevices.GetN(), "Not all STAs completed association");
+    NS_TEST_EXPECT_MSG_EQ(m_expectedAid,
+                          m_startAid + m_staDevices.GetN() - 1,
+                          "Not all STAs completed association");
 
     for (uint32_t i = 0; i < m_staDevices.GetN(); ++i)
     {
@@ -423,8 +433,10 @@
       m_staChannels(baseParams.staChannels),
       m_apChannels(baseParams.apChannels),
       m_fixedPhyBands(baseParams.fixedPhyBands),
+      m_assocType(baseParams.assocType),
       m_staMacs(nStations),
       m_nStations(nStations),
+      m_startAid(1),
       m_lastAid(0),
       m_rxPkts(nStations + 1)
 {
@@ -643,7 +655,7 @@
 MultiLinkOperationsTestBase::DoSetup()
 {
     RngSeedManager::SetSeed(1);
-    RngSeedManager::SetRun(5);
+    RngSeedManager::SetRun(1);
     int64_t streamNumber = 30;
 
     NodeContainer wifiApNode;
@@ -680,7 +692,9 @@
                 "MaxMissedBeacons",
                 UintegerValue(1e6), // do not deassociate
                 "ActiveProbing",
-                BooleanValue(false));
+                BooleanValue(false),
+                "AssocType",
+                EnumValue(m_assocType));
 
     NetDeviceContainer staDevices = wifi.Install(staPhyHelper, mac, wifiStaNodes);
 
@@ -771,6 +785,8 @@
     m_apMac->TraceConnectWithoutContext("AssociatedSta",
                                         MakeCallback(&MultiLinkOperationsTestBase::SetSsid, this));
     m_staMacs[0]->SetSsid(Ssid("ns-3-ssid"));
+
+    m_startAid = m_apMac->GetNextAssociationId();
 }
 
 Ptr<PacketSocketClient>
@@ -803,9 +819,9 @@
     m_lastAid = aid;
 
     // make the next STA to start ML discovery & setup
-    if (aid < m_nStations)
+    if (const std::size_t count = aid - m_startAid + 1; count < m_nStations)
     {
-        m_staMacs[aid]->SetSsid(Ssid("ns-3-ssid"));
+        m_staMacs[count]->SetSsid(Ssid("ns-3-ssid"));
         return;
     }
     // stop generation of beacon frames in order to avoid interference
@@ -818,12 +834,14 @@
 MultiLinkSetupTest::MultiLinkSetupTest(const BaseParams& baseParams,
                                        WifiScanType scanType,
                                        const std::vector<uint8_t>& setupLinks,
+                                       const std::vector<uint8_t>& staSetupLinks,
                                        WifiTidToLinkMappingNegSupport apNegSupport,
                                        const std::string& dlTidToLinkMapping,
                                        const std::string& ulTidToLinkMapping,
                                        bool support160MHzOp)
     : MultiLinkOperationsTestBase("Check correctness of Multi-Link Setup", 1, baseParams),
       m_setupLinks(setupLinks),
+      m_staSetupLinks(staSetupLinks.empty() ? setupLinks : staSetupLinks),
       m_scanType(scanType),
       m_nProbeResp(0),
       m_apNegSupport(apNegSupport),
@@ -831,6 +849,9 @@
       m_ulTidLinkMappingStr(ulTidToLinkMapping),
       m_support160MHzOp(support160MHzOp)
 {
+    NS_TEST_ASSERT_MSG_EQ(m_setupLinks.size(),
+                          m_staSetupLinks.size(),
+                          "Number of setup links must be the same for AP and non-AP device");
 }
 
 void
@@ -839,13 +860,11 @@
     MultiLinkOperationsTestBase::DoSetup();
 
     m_staMacs[0]->SetAttribute("ActiveProbing", BooleanValue(m_scanType == WifiScanType::ACTIVE));
-    m_apMac->GetEhtConfiguration()->SetAttribute("TidToLinkMappingNegSupport",
-                                                 EnumValue(m_apNegSupport));
+    m_apMac->GetEhtConfiguration()->m_tidLinkMappingSupport = m_apNegSupport;
     // For non-AP MLD, it does not make sense to set the negotiation type to 0 (unless the AP MLD
     // also advertises 0) or 1 (the AP MLD is discarded if it advertises a support of 3)
     auto staEhtConfig = m_staMacs[0]->GetEhtConfiguration();
-    staEhtConfig->SetAttribute("TidToLinkMappingNegSupport",
-                               EnumValue(WifiTidToLinkMappingNegSupport::ANY_LINK_SET));
+    staEhtConfig->m_tidLinkMappingSupport = WifiTidToLinkMappingNegSupport::ANY_LINK_SET;
     staEhtConfig->SetAttribute("TidToLinkMappingDl", StringValue(m_dlTidLinkMappingStr));
     staEhtConfig->SetAttribute("TidToLinkMappingUl", StringValue(m_ulTidLinkMappingStr));
 
@@ -940,8 +959,6 @@
     // are compatible
     for (auto staMac : m_staMacs)
     {
-        staMac->GetVhtConfiguration()->SetAttribute("Support160MHzOperation",
-                                                    BooleanValue(m_support160MHzOp));
         uint8_t linkId = 0;
         for (const auto& str : m_staChannels)
         {
@@ -1209,11 +1226,18 @@
     mpdu->GetPacket()->PeekHeader(assoc);
     const auto& mle = assoc.Get<MultiLinkElement>();
 
-    if (m_apMac->GetNLinks() == 1 || m_staMacs[0]->GetNLinks() == 1)
+    if (m_apMac->GetNLinks() == 1)
     {
         NS_TEST_EXPECT_MSG_EQ(mle.has_value(),
                               false,
-                              "Multi-Link Element in Assoc Request frame from single link STA");
+                              "Multi-Link Element in Assoc Request frame to single link AP");
+    }
+    else if (m_staMacs[0]->GetAssocType() == WifiAssocType::LEGACY)
+    {
+        NS_TEST_EXPECT_MSG_EQ(
+            mle.has_value(),
+            false,
+            "Multi-Link Element in Assoc Request frame from non-AP using legacy association");
     }
     else
     {
@@ -1260,9 +1284,9 @@
     const auto& tlm = assoc.Get<TidToLinkMapping>();
 
     // A TID-to-Link Mapping IE is included in the Association Request if and only if the AP MLD
-    // and the non-AP MLD are performing ML setup (i.e., they both have multiple links) and the
-    // AP MLD advertises a non-null negotiation support type
-    if (m_apMac->GetNLinks() == 1 || m_staMacs[0]->GetNLinks() == 1 ||
+    // and the non-AP MLD are performing ML setup and the AP MLD advertises a non-null negotiation
+    // support type
+    if (m_apMac->GetNLinks() == 1 || m_staMacs[0]->GetAssocType() == WifiAssocType::LEGACY ||
         m_apNegSupport == WifiTidToLinkMappingNegSupport::NOT_SUPPORTED)
     {
         NS_TEST_EXPECT_MSG_EQ(tlm.empty(),
@@ -1340,12 +1364,20 @@
     mpdu->GetPacket()->PeekHeader(assoc);
     const auto& mle = assoc.Get<MultiLinkElement>();
 
-    if (m_apMac->GetNLinks() == 1 || m_staMacs[0]->GetNLinks() == 1)
+    if (m_apMac->GetNLinks() == 1)
+    {
+        NS_TEST_EXPECT_MSG_EQ(mle.has_value(),
+                              false,
+                              "Multi-Link Element in Assoc Response frame with single link AP");
+        return;
+    }
+
+    if (m_staMacs[0]->GetAssocType() == WifiAssocType::LEGACY)
     {
         NS_TEST_EXPECT_MSG_EQ(
             mle.has_value(),
             false,
-            "Multi-Link Element in Assoc Response frame with single link AP or single link STA");
+            "Multi-Link Element in Assoc Response frame with non-AP using legacy association");
         return;
     }
 
@@ -1399,10 +1431,12 @@
      */
     NS_TEST_EXPECT_MSG_EQ(m_staMacs[0]->IsAssociated(), true, "Expected the STA to be associated");
 
-    for (const auto linkId : m_setupLinks)
+    for (auto linkIdIter = m_setupLinks.cbegin(), staLinkIdIter = m_staSetupLinks.cbegin();
+         linkIdIter != m_setupLinks.cend();
+         ++linkIdIter, ++staLinkIdIter)
     {
-        auto staLinkId = (m_staMacs[0]->GetNLinks() > 1 ? linkId : SINGLE_LINK_OP_ID);
-        auto apLinkId = (m_apMac->GetNLinks() > 1 ? linkId : SINGLE_LINK_OP_ID);
+        auto staLinkId = *staLinkIdIter;
+        auto apLinkId = *linkIdIter;
 
         auto staAddr = m_staMacs[0]->GetFrameExchangeManager(staLinkId)->GetAddress();
         auto apAddr = m_apMac->GetFrameExchangeManager(apLinkId)->GetAddress();
@@ -1414,7 +1448,7 @@
         NS_TEST_EXPECT_MSG_EQ(m_staMacs[0]->GetFrameExchangeManager(staLinkId)->GetBssid(),
                               apAddr,
                               "Unexpected BSSID for STA link ID " << +staLinkId);
-        if (m_apMac->GetNLinks() > 1 && m_staMacs[0]->GetNLinks() > 1)
+        if (m_apMac->GetNLinks() > 1 && m_assocType == WifiAssocType::ML_SETUP)
         {
             NS_TEST_EXPECT_MSG_EQ((staRemoteMgr->GetMldAddress(apAddr) == m_apMac->GetAddress()),
                                   true,
@@ -1430,7 +1464,7 @@
                               true,
                               "Expecting STA " << staAddr << " to be associated on link "
                                                << +apLinkId);
-        if (m_apMac->GetNLinks() > 1 && m_staMacs[0]->GetNLinks() > 1)
+        if (m_apMac->GetNLinks() > 1 && m_assocType == WifiAssocType::ML_SETUP)
         {
             NS_TEST_EXPECT_MSG_EQ(
                 (apRemoteMgr->GetMldAddress(staAddr) == m_staMacs[0]->GetAddress()),
@@ -1519,8 +1553,9 @@
             }
         };
 
-    auto storedMapping = m_apMac->GetNLinks() > 1 && m_staMacs[0]->GetNLinks() > 1 &&
-                         m_apNegSupport > WifiTidToLinkMappingNegSupport::NOT_SUPPORTED;
+    auto storedMapping = (m_apMac->GetNLinks() > 1) &&
+                         (m_staMacs[0]->GetAssocType() == WifiAssocType::ML_SETUP) &&
+                         (m_apNegSupport > WifiTidToLinkMappingNegSupport::NOT_SUPPORTED);
     checkStoredMapping(m_apMac, m_staMacs[0], WifiDirection::DOWNLINK, storedMapping);
     checkStoredMapping(m_apMac, m_staMacs[0], WifiDirection::UPLINK, storedMapping);
     checkStoredMapping(m_staMacs[0], m_apMac, WifiDirection::DOWNLINK, storedMapping);
@@ -1530,35 +1565,35 @@
 void
 MultiLinkSetupTest::CheckDisabledLinks()
 {
-    if (m_apMac->GetNLinks() > 1)
-    {
-        WifiContainerQueueId queueId(WIFI_QOSDATA_QUEUE,
-                                     WIFI_UNICAST,
-                                     m_staMacs[0]->GetAddress(),
-                                     0);
-
-        for (uint8_t linkId = 0; linkId < m_apMac->GetNLinks(); ++linkId)
-        {
-            auto it = std::find(m_setupLinks.cbegin(), m_setupLinks.cend(), linkId);
+    const auto legacyAssoc = (m_assocType == WifiAssocType::LEGACY || m_apMac->GetNLinks() == 1);
 
-            // the queue on the AP should have a mask if and only if the link has been setup
-            auto mask = m_apMac->GetMacQueueScheduler()->GetQueueLinkMask(AC_BE, queueId, linkId);
-            NS_TEST_EXPECT_MSG_EQ(mask.has_value(),
-                                  (it != m_setupLinks.cend()),
-                                  "Unexpected presence/absence of mask on link " << +linkId);
-        }
+    if (legacyAssoc)
+    {
+        NS_TEST_ASSERT_MSG_EQ(m_staSetupLinks.size(),
+                              1,
+                              "One link is expected to be setup with legacy association");
     }
 
-    if (m_staMacs[0]->GetNLinks() == 1)
+    for (uint8_t linkId = 0; linkId < m_apMac->GetNLinks(); ++linkId)
     {
-        // no link is disabled on a single link device
-        return;
+        auto it = std::find(m_setupLinks.cbegin(), m_setupLinks.cend(), linkId);
+        auto addr =
+            (legacyAssoc
+                 ? m_staMacs[0]->GetFrameExchangeManager(m_staSetupLinks.front())->GetAddress()
+                 : m_staMacs[0]->GetAddress());
+        WifiContainerQueueId queueId(WIFI_QOSDATA_QUEUE, WIFI_UNICAST, addr, 0);
+
+        // the queue on the AP should have a mask if and only if the link has been setup
+        auto mask = m_apMac->GetMacQueueScheduler()->GetQueueLinkMask(AC_BE, queueId, linkId);
+        NS_TEST_EXPECT_MSG_EQ(mask.has_value(),
+                              (it != m_setupLinks.cend()),
+                              "Unexpected presence/absence of mask on link " << +linkId);
     }
 
     for (const auto& linkId : m_staMacs[0]->GetLinkIds())
     {
-        auto it = std::find(m_setupLinks.begin(), m_setupLinks.end(), linkId);
-        if (it == m_setupLinks.end())
+        auto it = std::find(m_staSetupLinks.begin(), m_staSetupLinks.end(), linkId);
+        if (it == m_staSetupLinks.end())
         {
             // the link has not been setup
             NS_TEST_EXPECT_MSG_EQ(m_staMacs[0]->GetWifiPhy(linkId)->GetState()->IsStateOff(),
@@ -1677,7 +1712,7 @@
         }
     }
 
-    if (m_apMac->GetNLinks() > 1 && m_staMacs[0]->GetNLinks() > 1)
+    if (m_apMac->GetNLinks() > 1 && m_assocType == WifiAssocType::ML_SETUP)
     {
         NS_TEST_EXPECT_MSG_EQ(std::count(linkSet.cbegin(), linkSet.cend(), linkId),
                               1,
@@ -2714,7 +2749,8 @@
           1,
           BaseParams{{"{36, 0, BAND_5GHZ, 0}", "{2, 0, BAND_2_4GHZ, 0}", "{1, 0, BAND_6GHZ, 0}"},
                      {"{36, 0, BAND_5GHZ, 0}", "{2, 0, BAND_2_4GHZ, 0}", "{1, 0, BAND_6GHZ, 0}"},
-                     {}}),
+                     {},
+                     WifiAssocType::ML_SETUP}),
       m_nQosDataFrames(0),
       m_errorModel(CreateObject<ListErrorModel>()),
       m_rtsCorrupted(false)
@@ -2831,7 +2867,8 @@
           1,
           BaseParams{{"{36, 0, BAND_5GHZ, 0}", "{1, 0, BAND_6GHZ, 0}"},
                      {"{36, 0, BAND_5GHZ, 0}", "{1, 0, BAND_6GHZ, 0}"},
-                     {}}),
+                     {},
+                     WifiAssocType::ML_SETUP}),
       m_nQosDataCount(0),
       m_staErrorModel(CreateObject<ListErrorModel>())
 {
@@ -2980,20 +3017,235 @@
     Simulator::Destroy();
 }
 
+BarAfterDroppedMpduTest::BarAfterDroppedMpduTest(WifiAssocType assocType)
+    : MultiLinkOperationsTestBase("Check correct reception of the BAR sent after dropping MPDUs",
+                                  1,
+                                  BaseParams{{"{1, 0, BAND_6GHZ, 0}"},
+                                             {"{36, 0, BAND_5GHZ, 0}", "{1, 0, BAND_6GHZ, 0}"},
+                                             {},
+                                             assocType}),
+      m_staErrorModel(CreateObject<ListErrorModel>()),
+      m_apErrorModel(CreateObject<ListErrorModel>())
+{
+}
+
+void
+BarAfterDroppedMpduTest::DoSetup()
+{
+    // Set the frame retry limit to 1 so that QoS data frames are dropped after the first TX failure
+    Config::SetDefault("ns3::WifiMac::FrameRetryLimit", UintegerValue(1));
+    Config::SetDefault("ns3::WifiRemoteStationManager::IncrementRetryCountUnderBa",
+                       BooleanValue(true));
+
+    MultiLinkOperationsTestBase::DoSetup();
+
+    // install post reception error model on all STAs affiliated with non-AP MLD
+    for (const auto linkId : m_staMacs[0]->GetLinkIds())
+    {
+        m_staMacs[0]->GetWifiPhy(linkId)->SetPostReceptionErrorModel(m_staErrorModel);
+    }
+    // install post reception error model on all APs affiliated with the AP MLD
+    for (const auto linkId : m_apMac->GetLinkIds())
+    {
+        m_apMac->GetWifiPhy(linkId)->SetPostReceptionErrorModel(m_apErrorModel);
+    }
+}
+
+void
+BarAfterDroppedMpduTest::Transmit(Ptr<WifiMac> mac,
+                                  uint8_t phyId,
+                                  WifiConstPsduMap psduMap,
+                                  WifiTxVector txVector,
+                                  double txPowerW)
+{
+    MultiLinkOperationsTestBase::Transmit(mac, phyId, psduMap, txVector, txPowerW);
+
+    const auto psdu = psduMap.cbegin()->second;
+    const auto& hdr = psdu->GetHeader(0);
+
+    // nothing to do before setup is completed or if this is a Beacon frame
+    if (!m_setupDone || hdr.IsBeacon())
+    {
+        return;
+    }
+
+    auto linkId = mac->GetLinkForPhy(phyId);
+    NS_TEST_ASSERT_MSG_EQ(linkId.has_value(),
+                          true,
+                          "PHY " << +phyId << " is not operating on any link");
+
+    if (!m_events.empty())
+    {
+        // check that the expected frame is being transmitted
+        NS_TEST_EXPECT_MSG_EQ(WifiMacHeader(m_events.front().hdrType).GetTypeString(),
+                              std::string(hdr.GetTypeString()),
+                              "Unexpected MAC header type for frame #" << ++m_processedEvents);
+        // perform actions/checks, if any
+        if (m_events.front().func)
+        {
+            m_events.front().func(psdu, txVector, linkId.value());
+        }
+
+        m_events.pop_front();
+    }
+}
+
+void
+BarAfterDroppedMpduTest::StartTraffic()
+{
+    m_setupDone = true;
+    InsertEvents();
+
+    PacketSocketAddress sockAddr;
+    sockAddr.SetSingleDevice(m_apMac->GetDevice()->GetIfIndex());
+    sockAddr.SetPhysicalAddress(m_staMacs[0]->GetAddress());
+    sockAddr.SetProtocol(1);
+
+    // install client application generating 2 packets of 1000 bytes on the AP MLD
+    m_apMac->GetDevice()->GetNode()->AddApplication(GetApplication(sockAddr, 2, 1000));
+}
+
+void
+BarAfterDroppedMpduTest::InsertEvents()
+{
+    // lambda returning the UIDs of all MPDUs in the given PSDU
+    auto getUids = [](Ptr<const WifiPsdu> psdu) {
+        std::list<uint64_t> uids;
+        for (const auto& mpdu : *PeekPointer(psdu))
+        {
+            uids.push_back(mpdu->GetPacket()->GetUid());
+        }
+        return uids;
+    };
+
+    // BlockAck agreement establishment (AP MLD -> non-AP STA)
+    m_events.emplace_back(WIFI_MAC_MGT_ACTION);
+    m_events.emplace_back(WIFI_MAC_CTL_ACK);
+    m_events.emplace_back(WIFI_MAC_MGT_ACTION);
+    m_events.emplace_back(WIFI_MAC_CTL_ACK);
+
+    m_events.emplace_back(
+        WIFI_MAC_QOSDATA,
+        [=, this](Ptr<const WifiPsdu> psdu, const WifiTxVector& txVector, uint8_t linkId) {
+            NS_TEST_EXPECT_MSG_EQ(psdu->GetAddr2(),
+                                  m_apMac->GetFrameExchangeManager(linkId)->GetAddress(),
+                                  "Unexpected TA for the data frame sent by the AP");
+            NS_TEST_EXPECT_MSG_EQ(psdu->GetNMpdus(), 2, "Expected to transmit an A-MPDU");
+
+            // corrupt all the MPDUs in the A-MPDU
+            m_staErrorModel->SetList(getUids(psdu));
+        });
+
+    // QoS data frames are dropped, thus expect a BAR to advance recipient window
+    m_events.emplace_back(
+        WIFI_MAC_CTL_BACKREQ,
+        [=, this](Ptr<const WifiPsdu> psdu, const WifiTxVector& txVector, uint8_t linkId) {
+            NS_TEST_EXPECT_MSG_EQ(psdu->GetAddr2(),
+                                  m_apMac->GetFrameExchangeManager(linkId)->GetAddress(),
+                                  "Unexpected TA for the BlockAckReq sent by the AP");
+            NS_TEST_EXPECT_MSG_EQ(psdu->GetAddr1(),
+                                  m_staMacs[0]->GetAddress(),
+                                  "Unexpected RA for the BlockAckReq sent by the AP");
+        });
+
+    m_events.emplace_back(
+        WIFI_MAC_CTL_BACKRESP,
+        [=, this](Ptr<const WifiPsdu> psdu, const WifiTxVector& txVector, uint8_t linkId) {
+            NS_TEST_EXPECT_MSG_EQ(psdu->GetAddr2(),
+                                  m_staMacs[0]->GetAddress(),
+                                  "Unexpected TA for the BlockAck sent by the non-AP STA");
+            NS_TEST_EXPECT_MSG_EQ(psdu->GetAddr1(),
+                                  m_staMacs[0]->GetBssid(linkId),
+                                  "Unexpected RA for the BlockAck sent by the non-AP STA");
+
+            // generate uplink frames
+            Simulator::Schedule(MilliSeconds(5), [=, this]() {
+                PacketSocketAddress sockAddr;
+                sockAddr.SetSingleDevice(m_staMacs[0]->GetDevice()->GetIfIndex());
+                sockAddr.SetPhysicalAddress(m_apMac->GetAddress());
+                sockAddr.SetProtocol(1);
+
+                // install client application generating 2 packets of 1000 bytes on the non-AP STA
+                m_staMacs[0]->GetDevice()->GetNode()->AddApplication(
+                    GetApplication(sockAddr, 2, 1000));
+            });
+        });
+
+    // BlockAck agreement establishment (non-AP STA -> AP MLD)
+    m_events.emplace_back(WIFI_MAC_MGT_ACTION);
+    m_events.emplace_back(WIFI_MAC_CTL_ACK);
+    m_events.emplace_back(WIFI_MAC_MGT_ACTION);
+    m_events.emplace_back(WIFI_MAC_CTL_ACK);
+
+    m_events.emplace_back(
+        WIFI_MAC_QOSDATA,
+        [=, this](Ptr<const WifiPsdu> psdu, const WifiTxVector& txVector, uint8_t linkId) {
+            NS_TEST_EXPECT_MSG_EQ(psdu->GetAddr2(),
+                                  m_staMacs[0]->GetFrameExchangeManager(linkId)->GetAddress(),
+                                  "Unexpected TA for the data frame sent by the non-AP STA");
+            NS_TEST_EXPECT_MSG_EQ(psdu->GetNMpdus(), 2, "Expected to transmit an A-MPDU");
+
+            // corrupt all the MPDUs in the A-MPDU
+            m_apErrorModel->SetList(getUids(psdu));
+        });
+
+    // QoS data frames are dropped, thus expect a BAR to advance recipient window
+    m_events.emplace_back(
+        WIFI_MAC_CTL_BACKREQ,
+        [=, this](Ptr<const WifiPsdu> psdu, const WifiTxVector& txVector, uint8_t linkId) {
+            NS_TEST_EXPECT_MSG_EQ(psdu->GetAddr2(),
+                                  m_staMacs[0]->GetAddress(),
+                                  "Unexpected TA for the BlockAckReq sent by the non-AP STA");
+            NS_TEST_EXPECT_MSG_EQ(psdu->GetAddr1(),
+                                  m_staMacs[0]->GetBssid(linkId),
+                                  "Unexpected RA for the BlockAckReq sent by the non-AP STA");
+        });
+
+    m_events.emplace_back(
+        WIFI_MAC_CTL_BACKRESP,
+        [=, this](Ptr<const WifiPsdu> psdu, const WifiTxVector& txVector, uint8_t linkId) {
+            NS_TEST_EXPECT_MSG_EQ(psdu->GetAddr2(),
+                                  m_apMac->GetFrameExchangeManager(linkId)->GetAddress(),
+                                  "Unexpected TA for the BlockAck sent by the AP");
+            NS_TEST_EXPECT_MSG_EQ(psdu->GetAddr1(),
+                                  m_staMacs[0]->GetAddress(),
+                                  "Unexpected RA for the BlockAck sent by the AP");
+        });
+}
+
+void
+BarAfterDroppedMpduTest::DoRun()
+{
+    Simulator::Stop(m_duration);
+    Simulator::Run();
+
+    NS_TEST_EXPECT_MSG_EQ(m_events.empty(), true, "Not all events took place");
+
+    Simulator::Destroy();
+}
+
 WifiMultiLinkOperationsTestSuite::WifiMultiLinkOperationsTestSuite()
     : TestSuite("wifi-mlo", Type::UNIT)
 {
-    using ParamsTuple = std::tuple<MultiLinkOperationsTestBase::BaseParams, // base config params
-                                   std::vector<uint8_t>,           // link ID of setup links
-                                   WifiTidToLinkMappingNegSupport, // AP negotiation support
-                                   std::string,                    // DL TID-to-Link Mapping
-                                   std::string>;                   // UL TID-to-Link Mapping
+    using ParamsTuple =
+        std::tuple<MultiLinkOperationsTestBase::BaseParams, // base config params
+                   std::vector<uint8_t>, // link ID (as seen by AP device) of setup links
+                   std::vector<uint8_t>, // link ID (as seen by non-AP device) of setup links
+                   WifiTidToLinkMappingNegSupport, // AP negotiation support
+                   std::string,                    // DL TID-to-Link Mapping
+                   std::string>;                   // UL TID-to-Link Mapping
 
     AddTestCase(new GetRnrLinkInfoTest(), TestCase::Duration::QUICK);
     AddTestCase(new MldSwapLinksTest(), TestCase::Duration::QUICK);
     AddTestCase(
         new AidAssignmentTest(
-            std::vector<std::set<uint8_t>>{{0, 1, 2}, {1, 2}, {0, 1}, {0, 2}, {0}, {1}, {2}}),
+            std::vector<std::set<uint8_t>>{{0, 1, 2}, {1, 2}, {0, 1}, {0, 2}, {0}, {1}, {2}},
+            WifiAssocType::ML_SETUP),
+        TestCase::Duration::QUICK);
+    AddTestCase(
+        new AidAssignmentTest(
+            std::vector<std::set<uint8_t>>{{0, 1, 2}, {1, 2}, {0, 1}, {0, 2}, {0}, {1}, {2}},
+            WifiAssocType::LEGACY),
         TestCase::Duration::QUICK);
 
     // check that the selection of channels in ML setup accounts for the inability of a
@@ -3003,9 +3255,11 @@
             MultiLinkOperationsTestBase::BaseParams{
                 {"{42, 80, BAND_5GHZ, 2}", "{5, 40, BAND_2_4GHZ, 0}", "{7, 80, BAND_6GHZ, 0}"},
                 {"{3, 40, BAND_2_4GHZ, 0}", "{15, 160, BAND_6GHZ, 7}", "{50, 160, BAND_5GHZ, 2}"},
-                {}},
+                {},
+                WifiAssocType::ML_SETUP},
             WifiScanType::PASSIVE,
             {0, 1, 2},
+            {}, // IDs of setup links are the same for AP and non-AP devices
             WifiTidToLinkMappingNegSupport::ANY_LINK_SET,
             "",
             "",
@@ -3014,6 +3268,7 @@
 
     for (const auto& [baseParams,
                       setupLinks,
+                      staSetupLinks,
                       apNegSupport,
                       dlTidLinkMapping,
                       ulTidLinkMapping] :
@@ -3021,8 +3276,10 @@
           ParamsTuple(
               {{"{36, 0, BAND_5GHZ, 0}", "{2, 0, BAND_2_4GHZ, 0}", "{1, 0, BAND_6GHZ, 0}"},
                {"{36, 0, BAND_5GHZ, 0}", "{2, 0, BAND_2_4GHZ, 0}", "{1, 0, BAND_6GHZ, 0}"},
-               {}},
+               {},
+               WifiAssocType::ML_SETUP},
               {0, 1, 2},
+              {}, // IDs of setup links are the same for AP and non-AP devices
               WifiTidToLinkMappingNegSupport::NOT_SUPPORTED, // AP MLD does not support TID-to-Link
                                                              // Mapping negotiation
               "0,1,2,3  0,1,2;  4,5  0,1",                   // default mapping used instead
@@ -3031,8 +3288,10 @@
           // non-matching channels, matching PHY bands: setup all links
           ParamsTuple({{"{108, 0, BAND_5GHZ, 0}", "{36, 0, BAND_5GHZ, 0}", "{1, 0, BAND_6GHZ, 0}"},
                        {"{36, 0, BAND_5GHZ, 0}", "{120, 0, BAND_5GHZ, 0}", "{5, 0, BAND_6GHZ, 0}"},
-                       {}},
+                       {},
+                       WifiAssocType::ML_SETUP},
                       {0, 1, 2},
+                      {}, // IDs of setup links are the same for AP and non-AP devices
                       WifiTidToLinkMappingNegSupport::SAME_LINK_SET, // AP MLD does not support
                                                                      // distinct link sets for TIDs
                       "0,1,2,3  0,1,2;  4,5  0,1",                   // default mapping used instead
@@ -3040,8 +3299,10 @@
           // non-AP MLD switches band on some links to setup 3 links
           ParamsTuple({{"{2, 0, BAND_2_4GHZ, 0}", "{1, 0, BAND_6GHZ, 0}", "{36, 0, BAND_5GHZ, 0}"},
                        {"{36, 0, BAND_5GHZ, 0}", "{9, 0, BAND_6GHZ, 0}", "{120, 0, BAND_5GHZ, 0}"},
-                       {}},
+                       {},
+                       WifiAssocType::ML_SETUP},
                       {0, 1, 2},
+                      {}, // IDs of setup links are the same for AP and non-AP devices
                       WifiTidToLinkMappingNegSupport::ANY_LINK_SET,
                       "0,1,2,3  0;  4,5,6,7  1,2", // frames of two TIDs are generated
                       "0,2,3  1,2;  1,4,5,6,7  0"  // frames of two TIDs are generated
@@ -3051,8 +3312,10 @@
           ParamsTuple(
               {{"{2, 0, BAND_2_4GHZ, 0}", "{36, 0, BAND_5GHZ, 0}", "{8, 20, BAND_2_4GHZ, 0}"},
                {"{36, 0, BAND_5GHZ, 0}", "{1, 0, BAND_6GHZ, 0}", "{120, 0, BAND_5GHZ, 0}"},
-               {0}},
+               {0},
+               WifiAssocType::ML_SETUP},
               {0, 1},
+              {}, // IDs of setup links are the same for AP and non-AP devices
               WifiTidToLinkMappingNegSupport::SAME_LINK_SET, // AP MLD does not support distinct
                                                              // link sets for TIDs
               "0,1,2,3,4,5,6,7  0",
@@ -3063,8 +3326,10 @@
           ParamsTuple(
               {{"{2, 0, BAND_2_4GHZ, 0}", "{36, 0, BAND_5GHZ, 0}", "{8, 20, BAND_2_4GHZ, 0}"},
                {"{36, 0, BAND_5GHZ, 0}", "{1, 0, BAND_6GHZ, 0}", "{120, 0, BAND_5GHZ, 0}"},
-               {0, 1}},
+               {0, 1},
+               WifiAssocType::ML_SETUP},
               {0, 1},
+              {}, // IDs of setup links are the same for AP and non-AP devices
               WifiTidToLinkMappingNegSupport::ANY_LINK_SET,
               "0,1,2,3  1",
               "0,1,2,3  1"),
@@ -3075,8 +3340,10 @@
           // hence 2 links are setup by switching channel (not band) on the third link
           ParamsTuple({{"{2, 0, BAND_2_4GHZ, 0}", "{36, 0, BAND_5GHZ, 0}", "{60, 0, BAND_5GHZ, 0}"},
                        {"{36, 0, BAND_5GHZ, 0}", "{1, 0, BAND_6GHZ, 0}", "{120, 0, BAND_5GHZ, 0}"},
-                       {0, 1, 2}},
+                       {0, 1, 2},
+                       WifiAssocType::ML_SETUP},
                       {0, 2},
+                      {}, // IDs of setup links are the same for AP and non-AP devices
                       WifiTidToLinkMappingNegSupport::ANY_LINK_SET,
                       "",
                       ""),
@@ -3085,32 +3352,70 @@
           // an AP operating on the same channel; hence one link only is setup
           ParamsTuple({{"{2, 0, BAND_2_4GHZ, 0}", "{120, 0, BAND_5GHZ, 0}"},
                        {"{36, 0, BAND_5GHZ, 0}", "{1, 0, BAND_6GHZ, 0}", "{120, 0, BAND_5GHZ, 0}"},
-                       {0, 1}},
+                       {0, 1},
+                       WifiAssocType::ML_SETUP},
                       {2},
+                      {}, // IDs of setup links are the same for AP and non-AP devices
                       WifiTidToLinkMappingNegSupport::ANY_LINK_SET,
                       "",
                       ""),
           // non-AP MLD has only two STAs and setups two links
           ParamsTuple({{"{2, 0, BAND_2_4GHZ, 0}", "{36, 0, BAND_5GHZ, 0}"},
                        {"{36, 0, BAND_5GHZ, 0}", "{1, 0, BAND_6GHZ, 0}", "{120, 0, BAND_5GHZ, 0}"},
-                       {}},
+                       {},
+                       WifiAssocType::ML_SETUP},
                       {1, 0},
+                      {}, // IDs of setup links are the same for AP and non-AP devices
                       WifiTidToLinkMappingNegSupport::ANY_LINK_SET,
                       "0,1,2,3  1",
                       ""),
-          // single link non-AP STA associates with an AP affiliated with an AP MLD
+          // AP MLD and non-AP MLD setup only one link using legacy association
+          ParamsTuple({{"{2, 0, BAND_2_4GHZ, 0}", "{36, 0, BAND_5GHZ, 0}", "{60, 0, BAND_5GHZ, 0}"},
+                       {"{120, 0, BAND_5GHZ, 0}", "{1, 0, BAND_6GHZ, 0}", "{36, 0, BAND_5GHZ, 0}"},
+                       {},
+                       WifiAssocType::LEGACY},
+                      {2},
+                      {1},
+                      WifiTidToLinkMappingNegSupport::ANY_LINK_SET,
+                      "",
+                      ""),
+          // single link non-AP STA performs legacy association with an AP affiliated with an AP MLD
           ParamsTuple({{"{120, 0, BAND_5GHZ, 0}"},
                        {"{36, 0, BAND_5GHZ, 0}", "{1, 0, BAND_6GHZ, 0}", "{120, 0, BAND_5GHZ, 0}"},
-                       {}},
-                      {2}, // link ID of AP MLD only (non-AP STA is single link)
+                       {},
+                       WifiAssocType::LEGACY},
+                      {2},
+                      {0}, // non-AP STA performs legacy association
                       WifiTidToLinkMappingNegSupport::ANY_LINK_SET,
                       "",
                       ""),
-          // a STA affiliated with a non-AP MLD associates with a single link AP
+          // single link non-AP STA performs ML setup with an AP affiliated with an AP MLD
+          ParamsTuple({{"{120, 0, BAND_5GHZ, 0}"},
+                       {"{36, 0, BAND_5GHZ, 0}", "{1, 0, BAND_6GHZ, 0}", "{120, 0, BAND_5GHZ, 0}"},
+                       {},
+                       WifiAssocType::ML_SETUP},
+                      {2},
+                      {2}, // IDs of setup links are the same for AP and non-AP devices
+                      WifiTidToLinkMappingNegSupport::ANY_LINK_SET,
+                      "",
+                      ""),
+          // a STA affiliated with a non-AP MLD performs legacy association with a single link AP
+          ParamsTuple({{"{36, 0, BAND_5GHZ, 0}", "{1, 0, BAND_6GHZ, 0}", "{120, 0, BAND_5GHZ, 0}"},
+                       {"{120, 0, BAND_5GHZ, 0}"},
+                       {},
+                       WifiAssocType::LEGACY},
+                      {0}, // AP is single link
+                      {2},
+                      WifiTidToLinkMappingNegSupport::NOT_SUPPORTED,
+                      "0,1,2,3  0,1;  4,5,6,7  0,1", // ignored by single link AP
+                      ""),
+          // a STA affiliated with a non-AP MLD performs ML setup with a single link AP
           ParamsTuple({{"{36, 0, BAND_5GHZ, 0}", "{1, 0, BAND_6GHZ, 0}", "{120, 0, BAND_5GHZ, 0}"},
                        {"{120, 0, BAND_5GHZ, 0}"},
-                       {}},
-                      {2}, // link ID of non-AP MLD only (AP is single link)
+                       {},
+                       WifiAssocType::ML_SETUP},
+                      {0}, // AP is single link
+                      {2}, // legacy association is performed anyway because AP is single link
                       WifiTidToLinkMappingNegSupport::NOT_SUPPORTED,
                       "0,1,2,3  0,1;  4,5,6,7  0,1", // ignored by single link AP
                       "")})
@@ -3118,6 +3423,7 @@
         AddTestCase(new MultiLinkSetupTest(baseParams,
                                            WifiScanType::PASSIVE,
                                            setupLinks,
+                                           staSetupLinks,
                                            apNegSupport,
                                            dlTidLinkMapping,
                                            ulTidLinkMapping),
@@ -3125,6 +3431,7 @@
         AddTestCase(new MultiLinkSetupTest(baseParams,
                                            WifiScanType::ACTIVE,
                                            setupLinks,
+                                           staSetupLinks,
                                            apNegSupport,
                                            dlTidLinkMapping,
                                            ulTidLinkMapping),
@@ -3185,6 +3492,8 @@
 
     AddTestCase(new ReleaseSeqNoAfterCtsTimeoutTest(), TestCase::Duration::QUICK);
     AddTestCase(new StartSeqNoUpdateAfterAddBaTimeoutTest(), TestCase::Duration::QUICK);
+    AddTestCase(new BarAfterDroppedMpduTest(WifiAssocType::ML_SETUP), TestCase::Duration::QUICK);
+    AddTestCase(new BarAfterDroppedMpduTest(WifiAssocType::LEGACY), TestCase::Duration::QUICK);
 }
 
 static WifiMultiLinkOperationsTestSuite g_wifiMultiLinkOperationsTestSuite; ///< the test suite
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/test/wifi-mlo-test.h ns-3.45/src/wifi/test/wifi-mlo-test.h
--- ns-3.44/src/wifi/test/wifi-mlo-test.h	2025-03-09 16:55:49.811372800 -0700
+++ ns-3.45/src/wifi/test/wifi-mlo-test.h	2025-06-01 20:34:45.639702300 -0700
@@ -149,8 +149,9 @@
      * Constructor.
      *
      * @param linkIds A vector specifying the set of link IDs each STA will setup
+     * @param assocType the type of association procedure for non-AP devices
      */
-    AidAssignmentTest(const std::vector<std::set<uint8_t>>& linkIds);
+    AidAssignmentTest(const std::vector<std::set<uint8_t>>& linkIds, WifiAssocType assocType);
 
   private:
     void DoSetup() override;
@@ -166,7 +167,9 @@
 
     const std::vector<std::string> m_linkChannels;  //!< channels for all AP links
     const std::vector<std::set<uint8_t>> m_linkIds; //!< link IDs for all non-AP STAs/MLDs
+    WifiAssocType m_assocType;                      //!< association type
     NetDeviceContainer m_staDevices;                //!< non-AP STAs/MLDs devices
+    uint16_t m_startAid;                            //!< first AID to allocate to stations
     uint16_t m_expectedAid;                         //!< expected AID for current non-AP STA/MLD
 };
 
@@ -193,7 +196,8 @@
         std::vector<std::string>
             apChannels; //!< the strings specifying the operating channels for the AP MLD
         std::vector<uint8_t>
-            fixedPhyBands; //!< list of IDs of non-AP MLD PHYs that cannot switch band
+            fixedPhyBands;         //!< list of IDs of non-AP MLD PHYs that cannot switch band
+        WifiAssocType assocType{}; //!< type of the association procedure used by non-AP devices
     };
 
     /**
@@ -295,13 +299,15 @@
     const std::vector<std::string> m_staChannels; ///< strings specifying channels for STA
     const std::vector<std::string> m_apChannels;  ///< strings specifying channels for AP
     const std::vector<uint8_t> m_fixedPhyBands;   ///< links on non-AP MLD with fixed PHY band
-    Ptr<ApWifiMac> m_apMac;                       ///< AP wifi MAC
-    std::vector<Ptr<StaWifiMac>> m_staMacs;       ///< STA wifi MACs
-    uint8_t m_nStations;                          ///< number of stations to create
-    uint16_t m_lastAid;                           ///< AID of last associated station
-    Time m_duration{Seconds(1)};                  ///< simulation duration
-    std::vector<std::size_t> m_rxPkts; ///< number of packets received at application layer
-                                       ///< by each node (index is node ID)
+    WifiAssocType m_assocType; ///< type of the association procedure used by non-AP devices
+    Ptr<ApWifiMac> m_apMac;    ///< AP wifi MAC
+    std::vector<Ptr<StaWifiMac>> m_staMacs; ///< STA wifi MACs
+    uint8_t m_nStations;                    ///< number of stations to create
+    uint16_t m_startAid;                    ///< first AID to allocate to stations
+    uint16_t m_lastAid;                     ///< AID of last associated station
+    Time m_duration{Seconds(1)};            ///< simulation duration
+    std::vector<std::size_t> m_rxPkts;      ///< number of packets received at application layer
+                                            ///< by each node (index is node ID)
 
     /**
      * Reset the given PHY helper, use the given strings to set the ChannelSettings
@@ -372,8 +378,11 @@
      *
      * @param baseParams common configuration parameters
      * @param scanType the scan type (active or passive)
-     * @param setupLinks a list of links that are expected to be setup. In case one of the two
-     *                   devices has a single link, the ID of the link on the MLD is indicated
+     * @param setupLinks a list of IDs (as seen by the AP device) of the links that are expected
+     *                   to be setup
+     * @param staSetupLinks a list of IDs (as seen by the non-AP device) of the links that are
+     *                      expected to be setup. This list shall be left empty (indicating that
+     *                      it equals the setupLinks argument) when ML setup is performed
      * @param apNegSupport TID-to-Link Mapping negotiation supported by the AP MLD (0, 1, or 3)
      * @param dlTidToLinkMapping DL TID-to-Link Mapping for EHT configuration of non-AP MLD
      * @param ulTidToLinkMapping UL TID-to-Link Mapping for EHT configuration of non-AP MLD
@@ -382,6 +391,7 @@
     MultiLinkSetupTest(const BaseParams& baseParams,
                        WifiScanType scanType,
                        const std::vector<uint8_t>& setupLinks,
+                       const std::vector<uint8_t>& staSetupLinks,
                        WifiTidToLinkMappingNegSupport apNegSupport,
                        const std::string& dlTidToLinkMapping,
                        const std::string& ulTidToLinkMapping,
@@ -453,8 +463,11 @@
                       uint8_t linkId,
                       std::size_t index);
 
-    const std::vector<uint8_t> m_setupLinks; //!< IDs of the expected links to setup
-    WifiScanType m_scanType;                 //!< the scan type (active or passive)
+    const std::vector<uint8_t> m_setupLinks;    //!< IDs (as seen by the AP device) of the expected
+                                                //!< links to setup
+    const std::vector<uint8_t> m_staSetupLinks; //!< IDs (as seen by the non-AP device) of the
+                                                //!< expected links to setup
+    WifiScanType m_scanType;                    //!< the scan type (active or passive)
     std::size_t m_nProbeResp; //!< number of Probe Responses received by the non-AP MLD
     WifiTidToLinkMappingNegSupport
         m_apNegSupport;                //!< TID-to-Link Mapping negotiation supported by the AP MLD
@@ -776,6 +789,73 @@
 };
 
 /**
+ * @ingroup wifi-test
+ * @ingroup tests
+ *
+ * @brief Test BlockAckReq frame sent by a Block Ack originator after dropping QoS data frames
+ *
+ * In this test, a non-AP STA associates with an AP MLD with 2 links using either legacy association
+ * or ML setup. A Block Ack agreement is established first in the downlink direction; the AP MLD
+ * sends 2 data frames, which are both corrupted. When a timeout occurs at the AP MLD, the 2 data
+ * frames are dropped, thus the AP MLD sends a BlockAckReq to advance the recipient window. It is
+ * checked that the BlockAckReq has the correct link addresses and that the non-AP STA replies with
+ * a BlockAck having correct link addresses. Then, a Block Ack agreement is established in the
+ * uplink direction and the same pattern of actions are repeated (in the inverse direction).
+ */
+class BarAfterDroppedMpduTest : public MultiLinkOperationsTestBase
+{
+  public:
+    /**
+     * Constructor.
+     *
+     * @param assocType the association type
+     */
+    BarAfterDroppedMpduTest(WifiAssocType assocType);
+
+  protected:
+    void DoSetup() override;
+    void DoRun() override;
+    void Transmit(Ptr<WifiMac> mac,
+                  uint8_t phyId,
+                  WifiConstPsduMap psduMap,
+                  WifiTxVector txVector,
+                  double txPowerW) override;
+
+    /// Actions and checks to perform upon the transmission of each frame
+    struct Events
+    {
+        /**
+         * Constructor.
+         *
+         * @param type the frame MAC header type
+         * @param f function to perform actions and checks
+         */
+        Events(WifiMacType type,
+               std::function<void(Ptr<const WifiPsdu>, const WifiTxVector&, uint8_t)>&& f = {})
+            : hdrType(type),
+              func(f)
+        {
+        }
+
+        WifiMacType hdrType; ///< MAC header type of frame being transmitted
+        std::function<void(Ptr<const WifiPsdu>, const WifiTxVector&, uint8_t)>
+            func; ///< function to perform actions and checks
+    };
+
+    /// Insert elements in the list of expected events (transmitted frames)
+    void InsertEvents();
+
+  private:
+    void StartTraffic() override;
+
+    bool m_setupDone{false};             //!< whether association has been completed
+    std::list<Events> m_events;          //!< list of events for a test run
+    std::size_t m_processedEvents{0};    //!< number of processed events
+    Ptr<ListErrorModel> m_staErrorModel; //!< error rate model to corrupt frames at the non-AP STA
+    Ptr<ListErrorModel> m_apErrorModel;  //!< error rate model to corrupt frames at the AP MLD
+};
+
+/**
  * @ingroup wifi-test
  * @ingroup tests
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/test/wifi-non-ht-dup-test.cc ns-3.45/src/wifi/test/wifi-non-ht-dup-test.cc
--- ns-3.44/src/wifi/test/wifi-non-ht-dup-test.cc	2025-03-09 16:55:49.811372800 -0700
+++ ns-3.45/src/wifi/test/wifi-non-ht-dup-test.cc	2025-06-01 20:34:45.639702300 -0700
@@ -65,7 +65,9 @@
      * @param muRtsTxVector the TXVECTOR used to transmit MU-RTS trigger frame
      */
     void SetMuRtsTxVector(const WifiTxVector& muRtsTxVector);
-}; // class MuRtsCtsHePhy
+
+    // end of class MuRtsCtsHePhy
+};
 
 MuRtsCtsHePhy::MuRtsCtsHePhy()
     : HePhy()
@@ -126,7 +128,9 @@
 
   private:
     Ptr<MuRtsCtsHePhy> m_muRtsCtsHePhy; ///< Pointer to HE PHY instance used for MU-RTS/CTS PHY test
-};                                      // class MuRtsCtsSpectrumWifiPhy
+
+    // end of class MuRtsCtsSpectrumWifiPhy
+};
 
 TypeId
 MuRtsCtsSpectrumWifiPhy::GetTypeId()
@@ -335,16 +339,9 @@
                                          channelWidth,
                                          false);
 
-    Ptr<Packet> pkt = Create<Packet>(1000);
+    auto pkt = Create<Packet>(1000);
     WifiMacHeader hdr;
-
-    hdr.SetType(WIFI_MAC_QOSDATA);
-    hdr.SetQosTid(0);
-
-    Ptr<WifiPsdu> psdu = Create<WifiPsdu>(pkt, hdr);
-    Time txDuration =
-        SpectrumWifiPhy::CalculateTxDuration(psdu->GetSize(), txVector, m_phyAp->GetPhyBand());
-
+    auto psdu = Create<WifiPsdu>(pkt, hdr);
     m_phyAp->Send(WifiConstPsduMap({std::make_pair(SU_STA_ID, psdu)}), txVector);
 }
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/test/wifi-operating-channel-test.cc ns-3.45/src/wifi/test/wifi-operating-channel-test.cc
--- ns-3.44/src/wifi/test/wifi-operating-channel-test.cc	2025-03-09 16:55:49.811372800 -0700
+++ ns-3.45/src/wifi/test/wifi-operating-channel-test.cc	2025-06-01 20:34:45.639702300 -0700
@@ -220,6 +220,14 @@
            WIFI_STANDARD_UNSPECIFIED,
            WIFI_PHY_BAND_UNSPECIFIED,
            true);
+
+    RunOne("default 320 MHz OFDM channel operating on channel 31",
+           {{31, 0, 320, WIFI_PHY_BAND_6GHZ}},
+           WIFI_STANDARD_UNSPECIFIED,
+           WIFI_PHY_BAND_UNSPECIFIED,
+           false,
+           WifiChannelWidthType::CW_320MHZ,
+           {{31, 6105, 320, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM}});
 }
 
 /**
@@ -275,7 +283,7 @@
     m_phy->SetErrorRateModel(error);
     m_phy->SetDevice(dev);
     m_phy->AddChannel(spectrumChannel);
-    m_phy->ConfigureStandard(WIFI_STANDARD_80211ax);
+    m_phy->ConfigureStandard(WIFI_STANDARD_80211be);
     dev->SetPhy(m_phy);
     node->AddDevice(dev);
 }
@@ -416,6 +424,13 @@
            {{50, MHz_u{5250}, MHz_u{160}, WIFI_PHY_BAND_5GHZ}},
            0);
 
+    // Test unique channel 31 (320 MHz)
+    // TODO: logic should be changed to support passing BAND_UNSPECIFIED
+    RunOne("{31, 0, BAND_6GHZ, 0}",
+           WifiChannelWidthType::CW_320MHZ,
+           {{31, 6105, 320, WIFI_PHY_BAND_6GHZ}},
+           0);
+
     // Test 80+80 MHz
     RunOne("{42, 0, BAND_UNSPECIFIED, 0};{106, 0, BAND_UNSPECIFIED, 0}",
            WifiChannelWidthType::CW_80_PLUS_80MHZ,
@@ -460,6 +475,13 @@
            {{42, MHz_u{5210}, MHz_u{80}, WIFI_PHY_BAND_5GHZ},
             {106, MHz_u{5530}, MHz_u{80}, WIFI_PHY_BAND_5GHZ}},
            0);
+
+    // Test default 320 MHz channel
+    // TODO: logic should be changed to support passing BAND_UNSPECIFIED
+    RunOne("{0, 320, BAND_6GHZ, 0}",
+           WifiChannelWidthType::CW_320MHZ,
+           {{31, 6105, 320, WIFI_PHY_BAND_6GHZ}},
+           0);
 }
 
 /**
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/test/wifi-phy-cca-test.cc ns-3.45/src/wifi/test/wifi-phy-cca-test.cc
--- ns-3.44/src/wifi/test/wifi-phy-cca-test.cc	2025-03-09 16:55:49.811372800 -0700
+++ ns-3.45/src/wifi/test/wifi-phy-cca-test.cc	2025-06-01 20:34:45.640702200 -0700
@@ -7,7 +7,9 @@
  */
 
 #include "ns3/constant-obss-pd-algorithm.h"
-#include "ns3/he-phy.h"
+#include "ns3/eht-configuration.h"
+#include "ns3/eht-phy.h"
+#include "ns3/eht-ppdu.h"
 #include "ns3/he-ppdu.h"
 #include "ns3/ht-ppdu.h"
 #include "ns3/interference-helper.h"
@@ -30,8 +32,10 @@
 #include "ns3/wifi-phy-listener.h"
 #include "ns3/wifi-psdu.h"
 #include "ns3/wifi-spectrum-value-helper.h"
+#include "ns3/wifi-standards.h"
 #include "ns3/wifi-utils.h"
 
+#include <algorithm>
 #include <memory>
 #include <vector>
 
@@ -39,21 +43,32 @@
 
 NS_LOG_COMPONENT_DEFINE("WifiPhyCcaTest");
 
-constexpr MHz_u P20_CENTER_FREQUENCY{5180};
+constexpr MHz_u P20_CENTER_FREQUENCY{5955};
 constexpr MHz_u S20_CENTER_FREQUENCY = P20_CENTER_FREQUENCY + MHz_u{20};
 constexpr MHz_u P40_CENTER_FREQUENCY = P20_CENTER_FREQUENCY + MHz_u{10};
 constexpr MHz_u S40_CENTER_FREQUENCY = P40_CENTER_FREQUENCY + MHz_u{40};
 constexpr MHz_u P80_CENTER_FREQUENCY = P40_CENTER_FREQUENCY + MHz_u{20};
 constexpr MHz_u S80_CENTER_FREQUENCY = P80_CENTER_FREQUENCY + MHz_u{80};
 constexpr MHz_u P160_CENTER_FREQUENCY = P80_CENTER_FREQUENCY + MHz_u{40};
+constexpr MHz_u S160_CENTER_FREQUENCY = P160_CENTER_FREQUENCY + MHz_u{160};
+constexpr MHz_u P320_CENTER_FREQUENCY = P160_CENTER_FREQUENCY + MHz_u{80};
 const Time smallDelta = NanoSeconds(1);
-// add small delta to be right after aCCATime, since test checks are scheduled before wifi events
-const Time aCcaTime = MicroSeconds(4) + smallDelta;
-const std::map<MHz_u, Time> PpduDurations = {
+const Time aCcaTime = MicroSeconds(4);
+const Time phyHeaderDuration = MicroSeconds(32);
+// add small delta to be right after aCcaTime, since test checks are scheduled before wifi
+// events
+const Time aCcaTimeWithDelta = aCcaTime + smallDelta;
+const std::map<MHz_u, Time> hePpduDurations = {
     {20, NanoSeconds(1009600)},
     {40, NanoSeconds(533600)},
     {80, NanoSeconds(275200)},
 };
+const std::map<MHz_u, Time> ehtPpduDurations = {
+    {20, NanoSeconds(1017600)},
+    {40, NanoSeconds(541600)},
+    {80, NanoSeconds(287200)},
+    {160, NanoSeconds(178400)},
+};
 
 /**
  * @ingroup wifi-test
@@ -108,6 +123,13 @@
      * @return a HE PPDU
      */
     Ptr<HePpdu> CreateDummyHePpdu(MHz_u bandwidth, const WifiPhyOperatingChannel& channel);
+    /**
+     * Create a EHT PPDU
+     * @param bandwidth the bandwidth used for the transmission the PPDU
+     * @param channel the operating channel of the PHY used for the transmission
+     * @return a EHT PPDU
+     */
+    Ptr<EhtPpdu> CreateDummyEhtPpdu(MHz_u bandwidth, const WifiPhyOperatingChannel& channel);
 
     /**
      * Function to verify the CCA threshold that is being reported by a given PHY entity upon
@@ -127,16 +149,19 @@
     Ptr<SpectrumWifiPhy> m_phy;               ///< The spectrum PHY
     Ptr<ObssPdAlgorithm> m_obssPdAlgorithm;   ///< The OBSS-PD algorithm
     Ptr<VhtConfiguration> m_vhtConfiguration; ///< The VHT configuration
+    Ptr<EhtConfiguration> m_ehtConfiguration; ///< The EHT configuration
 
     dBm_u m_CcaEdThreshold; ///< The current CCA-ED threshold for a 20 MHz subchannel
-    dBm_u m_CcaSensitivity; ///< The current CCA sensitivity threshold for signals that occupy the
-                            ///< primary 20 MHz channel
+    dBm_u m_CcaSensitivity; ///< The current CCA sensitivity threshold for signals that occupy
+                            ///< the primary 20 MHz channel
 
     VhtConfiguration::SecondaryCcaSensitivityThresholds
-        m_secondaryCcaSensitivityThresholds; ///< The current CCA sensitivity thresholds for signals
-                                             ///< that do not occupy the primary 20 MHz channel
+        m_secondaryCcaSensitivityThresholds; ///< The current CCA sensitivity thresholds for
+                                             ///< signals that do not occupy the primary 20 MHz
+                                             ///< channel
 
-    dBm_u m_obssPdLevel; ///< The current OBSS-PD level
+    dBm_u m_obssPdLevel;         ///< The current OBSS-PD level
+    dBm_u m_per20CcaSensitivity; ///< The current CCA sensitivity threshold for Per 20MHz check
 };
 
 WifiPhyCcaThresholdsTest::WifiPhyCcaThresholdsTest()
@@ -144,7 +169,8 @@
       m_CcaEdThreshold{-62.0},
       m_CcaSensitivity{-82.0},
       m_secondaryCcaSensitivityThresholds{dBm_u{-72}, dBm_u{-72}, dBm_u{-69}},
-      m_obssPdLevel{-82.0}
+      m_obssPdLevel{-82.0},
+      m_per20CcaSensitivity{-72.0}
 {
 }
 
@@ -223,6 +249,29 @@
     return Create<HePpdu>(psdu, txVector, channel, MicroSeconds(100), 0);
 }
 
+Ptr<EhtPpdu>
+WifiPhyCcaThresholdsTest::CreateDummyEhtPpdu(MHz_u bandwidth,
+                                             const WifiPhyOperatingChannel& channel)
+{
+    WifiTxVector txVector{EhtPhy::GetEhtMcs0(),
+                          0,
+                          WIFI_PREAMBLE_EHT_MU,
+                          NanoSeconds(800),
+                          1,
+                          1,
+                          0,
+                          bandwidth,
+                          false};
+    WifiConstPsduMap psdus;
+    psdus.emplace(1, CreateDummyPsdu());
+    return Create<EhtPpdu>(psdus,
+                           txVector,
+                           channel,
+                           MicroSeconds(100),
+                           0,
+                           HePpdu::PSD_NON_HE_PORTION);
+}
+
 void
 WifiPhyCcaThresholdsTest::VerifyCcaThreshold(const Ptr<PhyEntity> phy,
                                              const Ptr<const WifiPpdu> ppdu,
@@ -250,9 +299,11 @@
     // LogComponentEnable ("WifiPhyCcaTest", LOG_LEVEL_ALL);
 
     m_device = CreateObject<WifiNetDevice>();
-    m_device->SetStandard(WIFI_STANDARD_80211ax);
+    m_device->SetStandard(WIFI_STANDARD_80211be);
     m_vhtConfiguration = CreateObject<VhtConfiguration>();
     m_device->SetVhtConfiguration(m_vhtConfiguration);
+    m_ehtConfiguration = CreateObject<EhtConfiguration>();
+    m_device->SetEhtConfiguration(m_ehtConfiguration);
 
     m_phy = CreateObject<SpectrumWifiPhy>();
     m_phy->SetDevice(m_device);
@@ -262,12 +313,12 @@
 
     auto channelNum = WifiPhyOperatingChannel::FindFirst(0,
                                                          MHz_u{0},
-                                                         MHz_u{160},
-                                                         WIFI_STANDARD_80211ax,
-                                                         WIFI_PHY_BAND_5GHZ)
+                                                         MHz_u{320},
+                                                         WIFI_STANDARD_80211be,
+                                                         WIFI_PHY_BAND_6GHZ)
                           ->number;
-    m_phy->SetOperatingChannel(WifiPhy::ChannelTuple{channelNum, 160, WIFI_PHY_BAND_5GHZ, 0});
-    m_phy->ConfigureStandard(WIFI_STANDARD_80211ax);
+    m_phy->SetOperatingChannel(WifiPhy::ChannelTuple{channelNum, 320, WIFI_PHY_BAND_6GHZ, 0});
+    m_phy->ConfigureStandard(WIFI_STANDARD_80211be);
 
     m_obssPdAlgorithm = CreateObject<ConstantObssPdAlgorithm>();
     m_device->AggregateObject(m_obssPdAlgorithm);
@@ -288,6 +339,7 @@
     m_phy->SetCcaSensitivityThreshold(m_CcaSensitivity);
     m_vhtConfiguration->SetSecondaryCcaSensitivityThresholds(m_secondaryCcaSensitivityThresholds);
     m_obssPdAlgorithm->SetObssPdLevel(m_obssPdLevel);
+    m_ehtConfiguration->m_per20CcaSensitivityThreshold = m_per20CcaSensitivity;
 
     // OFDM PHY: any signal in primary channel (20 MHz) if power above CCA-ED threshold
     VerifyCcaThreshold(m_phy->GetPhyEntity(WIFI_MOD_CLASS_OFDM),
@@ -320,15 +372,15 @@
 
     //-----------------------------------------------------------------------------------------------------------------------------------
 
-    // HT PHY: 20 MHz HT PPDU in primary channel (20 MHz) if power in primary above CCA sensitivity
-    // threshold
+    // HT PHY: 20 MHz HT PPDU in primary channel (20 MHz) if power in primary above CCA
+    // sensitivity threshold
     VerifyCcaThreshold(m_phy->GetPhyEntity(WIFI_MOD_CLASS_HT),
                        CreateDummyHtPpdu(MHz_u{20}, m_phy->GetOperatingChannel()),
                        WIFI_CHANLIST_PRIMARY,
                        m_CcaSensitivity);
 
-    // HT PHY: 40 MHz HT PPDU in primary channel (20 MHz) if power in primary above CCA sensitivity
-    // threshold
+    // HT PHY: 40 MHz HT PPDU in primary channel (20 MHz) if power in primary above CCA
+    // sensitivity threshold
     VerifyCcaThreshold(m_phy->GetPhyEntity(WIFI_MOD_CLASS_HT),
                        CreateDummyHtPpdu(MHz_u{40}, m_phy->GetOperatingChannel()),
                        WIFI_CHANLIST_PRIMARY,
@@ -399,36 +451,41 @@
                        WIFI_CHANLIST_SECONDARY,
                        std::get<0>(m_secondaryCcaSensitivityThresholds));
 
-    // VHT PHY: 20 MHz VHT PPDU in secondary40 channel (40 MHz) if power above the CCA sensitivity
-    // threshold corresponding to a 20 MHz PPDU that does not occupy the primary 20 MHz
+    // VHT PHY: 20 MHz VHT PPDU in secondary40 channel (40 MHz) if power above the CCA
+    // sensitivity threshold corresponding to a 20 MHz PPDU that does not occupy the primary 20
+    // MHz
     VerifyCcaThreshold(m_phy->GetPhyEntity(WIFI_MOD_CLASS_VHT),
                        CreateDummyVhtPpdu(MHz_u{20}, m_phy->GetOperatingChannel()),
                        WIFI_CHANLIST_SECONDARY40,
                        std::get<0>(m_secondaryCcaSensitivityThresholds));
 
-    // VHT PHY: 40 MHz VHT PPDU in secondary40 channel (40 MHz) if power above the CCA sensitivity
-    // threshold corresponding to a 40 MHz PPDU that does not occupy the primary 20 MHz
+    // VHT PHY: 40 MHz VHT PPDU in secondary40 channel (40 MHz) if power above the CCA
+    // sensitivity threshold corresponding to a 40 MHz PPDU that does not occupy the primary 20
+    // MHz
     VerifyCcaThreshold(m_phy->GetPhyEntity(WIFI_MOD_CLASS_VHT),
                        CreateDummyVhtPpdu(MHz_u{40}, m_phy->GetOperatingChannel()),
                        WIFI_CHANLIST_SECONDARY40,
                        std::get<1>(m_secondaryCcaSensitivityThresholds));
 
-    // VHT PHY: 20 MHz VHT PPDU in secondary80 channel (80 MHz) if power above the CCA sensitivity
-    // threshold corresponding to a 20 MHz PPDU that does not occupy the primary 20 MHz
+    // VHT PHY: 20 MHz VHT PPDU in secondary80 channel (80 MHz) if power above the CCA
+    // sensitivity threshold corresponding to a 20 MHz PPDU that does not occupy the primary 20
+    // MHz
     VerifyCcaThreshold(m_phy->GetPhyEntity(WIFI_MOD_CLASS_VHT),
                        CreateDummyVhtPpdu(MHz_u{20}, m_phy->GetOperatingChannel()),
                        WIFI_CHANLIST_SECONDARY80,
                        std::get<0>(m_secondaryCcaSensitivityThresholds));
 
-    // VHT PHY: 40 MHz VHT PPDU in secondary80 channel (80 MHz) if power above the CCA sensitivity
-    // threshold corresponding to a 40 MHz PPDU that does not occupy the primary 20 MHz
+    // VHT PHY: 40 MHz VHT PPDU in secondary80 channel (80 MHz) if power above the CCA
+    // sensitivity threshold corresponding to a 40 MHz PPDU that does not occupy the primary 20
+    // MHz
     VerifyCcaThreshold(m_phy->GetPhyEntity(WIFI_MOD_CLASS_VHT),
                        CreateDummyVhtPpdu(MHz_u{40}, m_phy->GetOperatingChannel()),
                        WIFI_CHANLIST_SECONDARY80,
                        std::get<1>(m_secondaryCcaSensitivityThresholds));
 
-    // VHT PHY: 80 MHz VHT PPDU in secondary80 channel (80 MHz) if power above the CCA sensitivity
-    // threshold corresponding to a 80 MHz PPDU that does not occupy the primary 20 MHz
+    // VHT PHY: 80 MHz VHT PPDU in secondary80 channel (80 MHz) if power above the CCA
+    // sensitivity threshold corresponding to a 80 MHz PPDU that does not occupy the primary 20
+    // MHz
     VerifyCcaThreshold(m_phy->GetPhyEntity(WIFI_MOD_CLASS_VHT),
                        CreateDummyVhtPpdu(MHz_u{80}, m_phy->GetOperatingChannel()),
                        WIFI_CHANLIST_SECONDARY80,
@@ -462,29 +519,29 @@
 
     //-----------------------------------------------------------------------------------------------------------------------------------
 
-    // HE PHY: 20 MHz HE PPDU in primary channel (20 MHz) if power in primary above CCA sensitivity
-    // threshold
+    // HE PHY: 20 MHz HE PPDU in primary channel (20 MHz) if power in primary above CCA
+    // sensitivity threshold
     VerifyCcaThreshold(m_phy->GetPhyEntity(WIFI_MOD_CLASS_HE),
                        CreateDummyHePpdu(MHz_u{20}, m_phy->GetOperatingChannel()),
                        WIFI_CHANLIST_PRIMARY,
                        m_CcaSensitivity);
 
-    // HE PHY: 40 MHz HE PPDU in primary channel (20 MHz) if power in primary above CCA sensitivity
-    // threshold
+    // HE PHY: 40 MHz HE PPDU in primary channel (20 MHz) if power in primary above CCA
+    // sensitivity threshold
     VerifyCcaThreshold(m_phy->GetPhyEntity(WIFI_MOD_CLASS_HE),
                        CreateDummyHePpdu(MHz_u{40}, m_phy->GetOperatingChannel()),
                        WIFI_CHANLIST_PRIMARY,
                        m_CcaSensitivity);
 
-    // HE PHY: 80 MHz HE PPDU in primary channel (20 MHz) if power in primary above CCA sensitivity
-    // threshold
+    // HE PHY: 80 MHz HE PPDU in primary channel (20 MHz) if power in primary above CCA
+    // sensitivity threshold
     VerifyCcaThreshold(m_phy->GetPhyEntity(WIFI_MOD_CLASS_HE),
                        CreateDummyHePpdu(MHz_u{80}, m_phy->GetOperatingChannel()),
                        WIFI_CHANLIST_PRIMARY,
                        m_CcaSensitivity);
 
-    // HE PHY: 160 MHz HE PPDU in primary channel (20 MHz) if power in primary above CCA sensitivity
-    // threshold
+    // HE PHY: 160 MHz HE PPDU in primary channel (20 MHz) if power in primary above CCA
+    // sensitivity threshold
     VerifyCcaThreshold(m_phy->GetPhyEntity(WIFI_MOD_CLASS_HE),
                        CreateDummyHePpdu(MHz_u{160}, m_phy->GetOperatingChannel()),
                        WIFI_CHANLIST_PRIMARY,
@@ -492,56 +549,177 @@
 
     //-----------------------------------------------------------------------------------------------------------------------------------
 
-    // HE PHY: 20 MHz HE PPDU in secondary channel (20 MHz) if power above the max between the CCA
-    // sensitivity threshold corresponding to a 20 MHz PPDU that does not occupy the primary 20 MHz
-    // and the OBSS-PD level
+    // HE PHY: 20 MHz HE PPDU in secondary channel (20 MHz) if power above the max between the
+    // CCA sensitivity threshold corresponding to a 20 MHz PPDU that does not occupy the primary
+    // 20 MHz and the OBSS-PD level
     VerifyCcaThreshold(m_phy->GetPhyEntity(WIFI_MOD_CLASS_HE),
                        CreateDummyHePpdu(MHz_u{20}, m_phy->GetOperatingChannel()),
                        WIFI_CHANLIST_SECONDARY,
                        std::max(m_obssPdLevel, std::get<0>(m_secondaryCcaSensitivityThresholds)));
 
-    // HE PHY: 20 MHz HE PPDU in secondary40 channel (40 MHz) if power above the max between the CCA
-    // sensitivity threshold corresponding to a 20 MHz PPDU that does not occupy the primary 20 MHz
-    // and the OBSS-PD level
+    // HE PHY: 20 MHz HE PPDU in secondary40 channel (40 MHz) if power above the max between the
+    // CCA sensitivity threshold corresponding to a 20 MHz PPDU that does not occupy the primary
+    // 20 MHz and the OBSS-PD level
     VerifyCcaThreshold(m_phy->GetPhyEntity(WIFI_MOD_CLASS_HE),
                        CreateDummyHePpdu(MHz_u{20}, m_phy->GetOperatingChannel()),
                        WIFI_CHANLIST_SECONDARY40,
                        std::max(m_obssPdLevel, std::get<0>(m_secondaryCcaSensitivityThresholds)));
 
-    // HE PHY: 40 MHz HE PPDU in secondary40 channel (40 MHz) if power above the max between the CCA
-    // sensitivity threshold corresponding to a 40 MHz PPDU that does not occupy the primary 20 MHz
-    // and the OBSS-PD level plus 3 dB
+    // HE PHY: 40 MHz HE PPDU in secondary40 channel (40 MHz) if power above the max between the
+    // CCA sensitivity threshold corresponding to a 40 MHz PPDU that does not occupy the primary
+    // 20 MHz and the OBSS-PD level plus 3 dB
     VerifyCcaThreshold(
         m_phy->GetPhyEntity(WIFI_MOD_CLASS_HE),
         CreateDummyHePpdu(MHz_u{40}, m_phy->GetOperatingChannel()),
         WIFI_CHANLIST_SECONDARY40,
         std::max(m_obssPdLevel + dB_u{3.0}, std::get<1>(m_secondaryCcaSensitivityThresholds)));
 
-    // HE PHY: 20 MHz HE PPDU in secondary80 channel (80 MHz) if power above the max between the CCA
-    // sensitivity threshold corresponding to a 20 MHz PPDU that does not occupy the primary 20 MHz
-    // and the OBSS-PD level
+    // HE PHY: 20 MHz HE PPDU in secondary80 channel (80 MHz) if power above the max between the
+    // CCA sensitivity threshold corresponding to a 20 MHz PPDU that does not occupy the primary
+    // 20 MHz and the OBSS-PD level
     VerifyCcaThreshold(m_phy->GetPhyEntity(WIFI_MOD_CLASS_HE),
                        CreateDummyHePpdu(MHz_u{20}, m_phy->GetOperatingChannel()),
                        WIFI_CHANLIST_SECONDARY80,
                        std::max(m_obssPdLevel, std::get<0>(m_secondaryCcaSensitivityThresholds)));
 
-    // HE PHY: 40 MHz HE PPDU in secondary80 channel (80 MHz) if power above the max between the CCA
-    // sensitivity threshold corresponding to a 40 MHz PPDU that does not occupy the primary 20 MHz
-    // and the OBSS-PD level plus 3 dB
+    // HE PHY: 40 MHz HE PPDU in secondary80 channel (80 MHz) if power above the max between the
+    // CCA sensitivity threshold corresponding to a 40 MHz PPDU that does not occupy the primary
+    // 20 MHz and the OBSS-PD level plus 3 dB
     VerifyCcaThreshold(
         m_phy->GetPhyEntity(WIFI_MOD_CLASS_HE),
         CreateDummyHePpdu(MHz_u{40}, m_phy->GetOperatingChannel()),
         WIFI_CHANLIST_SECONDARY80,
         std::max(m_obssPdLevel + dB_u{3.0}, std::get<1>(m_secondaryCcaSensitivityThresholds)));
 
-    // HE PHY: 80 MHz HE PPDU in secondary80 channel (80 MHz) if power above the max between the CCA
-    // sensitivity threshold corresponding to a 80 MHz PPDU that does not occupy the primary 20 MHz
-    // and the OBSS-PD level plus 6 dB
+    // HE PHY: 80 MHz HE PPDU in secondary80 channel (80 MHz) if power above the max between the
+    // CCA sensitivity threshold corresponding to a 80 MHz PPDU that does not occupy the primary
+    // 20 MHz and the OBSS-PD level plus 6 dB
     VerifyCcaThreshold(
         m_phy->GetPhyEntity(WIFI_MOD_CLASS_HE),
         CreateDummyHePpdu(MHz_u{80}, m_phy->GetOperatingChannel()),
         WIFI_CHANLIST_SECONDARY80,
         std::max(m_obssPdLevel + dB_u{6.0}, std::get<2>(m_secondaryCcaSensitivityThresholds)));
+
+    //-----------------------------------------------------------------------------------------------------------------------------------
+
+    // EHT PHY: any signal in primary channel (20 MHz) if power above CCA-ED threshold
+    VerifyCcaThreshold(m_phy->GetPhyEntity(WIFI_MOD_CLASS_EHT),
+                       nullptr,
+                       WIFI_CHANLIST_PRIMARY,
+                       m_CcaEdThreshold);
+
+    // EHT PHY: any signal in secondary channel (20 MHz) if power above CCA-ED threshold
+    VerifyCcaThreshold(m_phy->GetPhyEntity(WIFI_MOD_CLASS_EHT),
+                       nullptr,
+                       WIFI_CHANLIST_SECONDARY,
+                       m_CcaEdThreshold);
+
+    // EHT PHY: any signal in secondary40 channel (40 MHz) if power in any 20 MHz subchannel
+    // above CCA-ED threshold
+    VerifyCcaThreshold(m_phy->GetPhyEntity(WIFI_MOD_CLASS_EHT),
+                       nullptr,
+                       WIFI_CHANLIST_SECONDARY40,
+                       m_CcaEdThreshold);
+
+    // EHT PHY: any signal in secondary80 channel (80 MHz) if power in any 20 MHz subchannel
+    // above CCA-ED threshold
+    VerifyCcaThreshold(m_phy->GetPhyEntity(WIFI_MOD_CLASS_EHT),
+                       nullptr,
+                       WIFI_CHANLIST_SECONDARY80,
+                       m_CcaEdThreshold);
+
+    // EHT PHY: any signal in secondary160 channel (160 MHz) if power in any 20 MHz subchannel
+    // above CCA-ED threshold
+    VerifyCcaThreshold(m_phy->GetPhyEntity(WIFI_MOD_CLASS_EHT),
+                       nullptr,
+                       WIFI_CHANLIST_SECONDARY160,
+                       m_CcaEdThreshold);
+
+    //-----------------------------------------------------------------------------------------------------------------------------------
+    // EHT PHY: 20 MHz EHT PPDU in primary channel (20 MHz) if power in primary above CCA
+    // sensitivity threshold
+    VerifyCcaThreshold(m_phy->GetPhyEntity(WIFI_MOD_CLASS_EHT),
+                       CreateDummyEhtPpdu(MHz_u{20}, m_phy->GetOperatingChannel()),
+                       WIFI_CHANLIST_PRIMARY,
+                       m_CcaSensitivity);
+    // EHT PHY: 40 MHz EHT PPDU in primary channel (20 MHz) if power in primary above CCA
+    // sensitivity threshold
+    VerifyCcaThreshold(m_phy->GetPhyEntity(WIFI_MOD_CLASS_EHT),
+                       CreateDummyEhtPpdu(MHz_u{40}, m_phy->GetOperatingChannel()),
+                       WIFI_CHANLIST_PRIMARY,
+                       m_CcaSensitivity);
+
+    // EHT PHY: 80 MHz EHT PPDU in primary channel (20 MHz) if power in primary above CCA
+    // sensitivity threshold
+    VerifyCcaThreshold(m_phy->GetPhyEntity(WIFI_MOD_CLASS_EHT),
+                       CreateDummyEhtPpdu(MHz_u{80}, m_phy->GetOperatingChannel()),
+                       WIFI_CHANLIST_PRIMARY,
+                       m_CcaSensitivity);
+
+    // EHT PHY: 160 MHz EHT PPDU in primary channel (20 MHz) if power in primary above CCA
+    // sensitivity threshold
+    VerifyCcaThreshold(m_phy->GetPhyEntity(WIFI_MOD_CLASS_EHT),
+                       CreateDummyEhtPpdu(MHz_u{160}, m_phy->GetOperatingChannel()),
+                       WIFI_CHANLIST_PRIMARY,
+                       m_CcaSensitivity);
+
+    // EHT PHY: 320 MHz EHT PPDU in primary channel (20 MHz) if power in primary above CCA
+    // sensitivity threshold
+    VerifyCcaThreshold(m_phy->GetPhyEntity(WIFI_MOD_CLASS_EHT),
+                       CreateDummyEhtPpdu(MHz_u{320}, m_phy->GetOperatingChannel()),
+                       WIFI_CHANLIST_PRIMARY,
+                       m_CcaSensitivity);
+
+    //-----------------------------------------------------------------------------------------------------------------------------------
+
+    // EHT PHY: 20 MHz EHT PPDU in secondary channel (20 MHz) if power above the max between the
+    // CCA sensitivity threshold for Per 20MHz check and the OBSS-PD level
+    VerifyCcaThreshold(m_phy->GetPhyEntity(WIFI_MOD_CLASS_EHT),
+                       CreateDummyEhtPpdu(MHz_u{20}, m_phy->GetOperatingChannel()),
+                       WIFI_CHANLIST_SECONDARY,
+                       std::max(m_obssPdLevel, m_per20CcaSensitivity));
+
+    // EHT PHY: 20 MHz EHT PPDU in secondary40 channel (40 MHz) if power above the max between
+    // the CCA sensitivity threshold for Per 20MHz check and the OBSS-PD level
+    VerifyCcaThreshold(m_phy->GetPhyEntity(WIFI_MOD_CLASS_EHT),
+                       CreateDummyEhtPpdu(MHz_u{20}, m_phy->GetOperatingChannel()),
+                       WIFI_CHANLIST_SECONDARY40,
+                       std::max(m_obssPdLevel, m_per20CcaSensitivity));
+
+    // EHT PHY: 40 MHz EHT PPDU in secondary40 channel (40 MHz) if power above the max between
+    // the CCA sensitivity threshold for Per 20MHz check and the OBSS-PD level
+    VerifyCcaThreshold(m_phy->GetPhyEntity(WIFI_MOD_CLASS_EHT),
+                       CreateDummyEhtPpdu(MHz_u{40}, m_phy->GetOperatingChannel()),
+                       WIFI_CHANLIST_SECONDARY40,
+                       std::max(m_obssPdLevel, m_per20CcaSensitivity));
+
+    // EHT PHY: 20 MHz EHT PPDU in secondary80 channel (80 MHz) if power above the max between
+    // the CCA sensitivity threshold for Per 20MHz check and the OBSS-PD level
+    VerifyCcaThreshold(m_phy->GetPhyEntity(WIFI_MOD_CLASS_EHT),
+                       CreateDummyEhtPpdu(MHz_u{80}, m_phy->GetOperatingChannel()),
+                       WIFI_CHANLIST_SECONDARY80,
+                       std::max(m_obssPdLevel, m_per20CcaSensitivity));
+
+    // EHT PHY: 40 MHz EHT PPDU in secondary80 channel (80 MHz) if power above the max between
+    // the CCA sensitivity threshold for Per 20MHz check and the OBSS-PD level
+    VerifyCcaThreshold(m_phy->GetPhyEntity(WIFI_MOD_CLASS_EHT),
+                       CreateDummyEhtPpdu(MHz_u{40}, m_phy->GetOperatingChannel()),
+                       WIFI_CHANLIST_SECONDARY80,
+                       std::max(m_obssPdLevel, m_per20CcaSensitivity));
+
+    // EHT PHY: 80 MHz EHT PPDU in secondary80 channel (80 MHz) if power above the max between
+    // the CCA sensitivity threshold for Per 20MHz check and the OBSS-PD level
+    VerifyCcaThreshold(m_phy->GetPhyEntity(WIFI_MOD_CLASS_EHT),
+                       CreateDummyEhtPpdu(MHz_u{80}, m_phy->GetOperatingChannel()),
+                       WIFI_CHANLIST_SECONDARY80,
+                       std::max(m_obssPdLevel, m_per20CcaSensitivity));
+
+    // EHT PHY: 160 MHz EHT PPDU in secondary160 channel (160 MHz) if power above the max
+    // between the CCA sensitivity threshold for Per 20MHz check and the OBSS-PD level
+    VerifyCcaThreshold(m_phy->GetPhyEntity(WIFI_MOD_CLASS_EHT),
+                       CreateDummyEhtPpdu(160, m_phy->GetOperatingChannel()),
+                       WIFI_CHANLIST_SECONDARY160,
+                       std::max(m_obssPdLevel, m_per20CcaSensitivity));
 }
 
 void
@@ -552,6 +730,7 @@
     m_CcaSensitivity = dBm_u{-82};
     m_secondaryCcaSensitivityThresholds = std::make_tuple(dBm_u{-72}, dBm_u{-72}, dBm_u{-69});
     m_obssPdLevel = dBm_u{-82};
+    m_per20CcaSensitivity = dBm_u{-72.0};
     RunOne();
 
     // default attributes with OBSS-PD level set to -80 dBm
@@ -559,6 +738,7 @@
     m_CcaSensitivity = dBm_u{-82};
     m_secondaryCcaSensitivityThresholds = std::make_tuple(dBm_u{-72}, dBm_u{-72}, dBm_u{-69});
     m_obssPdLevel = dBm_u{-80};
+    m_per20CcaSensitivity = dBm_u{-72.0};
     RunOne();
 
     // default attributes with OBSS-PD level set to -70 dBm
@@ -566,6 +746,7 @@
     m_CcaSensitivity = dBm_u{-82};
     m_secondaryCcaSensitivityThresholds = std::make_tuple(dBm_u{-72}, dBm_u{-72}, dBm_u{-69});
     m_obssPdLevel = dBm_u{-70};
+    m_per20CcaSensitivity = dBm_u{-72.0};
     RunOne();
 
     // CCA-ED set to -65 dBm
@@ -573,6 +754,7 @@
     m_CcaSensitivity = dBm_u{-82};
     m_secondaryCcaSensitivityThresholds = std::make_tuple(dBm_u{-72}, dBm_u{-72}, dBm_u{-69});
     m_obssPdLevel = dBm_u{-82};
+    m_per20CcaSensitivity = dBm_u{-72.0};
     RunOne();
 
     // CCA sensitivity for signals in primary set to -75 dBm
@@ -580,6 +762,7 @@
     m_CcaSensitivity = dBm_u{-75};
     m_secondaryCcaSensitivityThresholds = std::make_tuple(dBm_u{-72}, dBm_u{-72}, dBm_u{-69});
     m_obssPdLevel = dBm_u{-82};
+    m_per20CcaSensitivity = dBm_u{-72.0};
     RunOne();
 
     // custom CCA sensitivities for signals not in primary
@@ -587,6 +770,7 @@
     m_CcaSensitivity = dBm_u{-72};
     m_secondaryCcaSensitivityThresholds = std::make_tuple(dBm_u{-70}, dBm_u{-70}, dBm_u{-70});
     m_obssPdLevel = dBm_u{-82};
+    m_per20CcaSensitivity = -75.0;
     RunOne();
 
     // custom CCA sensitivities for signals not in primary with OBSS-PD level set to -80 dBm
@@ -594,6 +778,7 @@
     m_CcaSensitivity = dBm_u{-72};
     m_secondaryCcaSensitivityThresholds = std::make_tuple(dBm_u{-70}, dBm_u{-70}, dBm_u{-70});
     m_obssPdLevel = dBm_u{-80};
+    m_per20CcaSensitivity = -69.0;
     RunOne();
 
     // custom CCA sensitivities for signals not in primary with OBSS-PD level set to -70 dBm
@@ -601,6 +786,7 @@
     m_CcaSensitivity = dBm_u{-72};
     m_secondaryCcaSensitivityThresholds = std::make_tuple(dBm_u{-70}, dBm_u{-70}, dBm_u{-70});
     m_obssPdLevel = dBm_u{-70};
+    m_per20CcaSensitivity = -66.0;
     RunOne();
 
     Simulator::Destroy();
@@ -627,9 +813,9 @@
         NS_LOG_FUNCTION(this);
     }
 
-    void NotifyRxEndError() override
+    void NotifyRxEndError(const WifiTxVector& txVector) override
     {
-        NS_LOG_FUNCTION(this);
+        NS_LOG_FUNCTION(this << txVector);
     }
 
     void NotifyTxStart(Time duration, dBm_u txPower) override
@@ -696,7 +882,12 @@
 class WifiPhyCcaIndicationTest : public TestCase
 {
   public:
-    WifiPhyCcaIndicationTest();
+    /**
+     * Constructor
+     *
+     * @param standard the standard to use for the test
+     */
+    WifiPhyCcaIndicationTest(WifiStandard standard);
 
   private:
     void DoSetup() override;
@@ -704,12 +895,12 @@
     void DoTeardown() override;
 
     /**
-     * Send an HE SU PPDU
+     * Send a HE or EHT SU PPDU
      * @param txPower the transmit power
      * @param frequency the center frequency the transmitter is operating on
      * @param bandwidth the bandwidth to use for the transmission
      */
-    void SendHeSuPpdu(dBm_u txPower, MHz_u frequency, MHz_u bandwidth);
+    void SendSuPpdu(dBm_u txPower, MHz_u frequency, MHz_u bandwidth);
 
     /**
      * Start to generate a signal
@@ -819,29 +1010,42 @@
     void Reset();
 
     /**
+     * Reset the expected Per 20 MHz CCA durations
+     */
+    void ResetExpectedPer20MhzCcaBusyDurations();
+
+    /**
      * Run one function
      */
     void RunOne();
 
+    WifiStandard m_standard; ///< The standard to use for the test
+
     Ptr<SpectrumWifiPhy> m_rxPhy; ///< PHY object of the receiver
     Ptr<SpectrumWifiPhy> m_txPhy; ///< PHY object of the transmitter
 
     std::vector<Ptr<WaveformGenerator>> m_signalGenerators; ///< Generators of non-wifi signals
-    std::size_t
-        m_numSignalGenerators; ///< The number of non-wifi signals generators needed for the test
+    std::size_t m_numSignalGenerators; ///< The number of non-wifi signals generators needed for
+                                       ///< the test
 
     std::shared_ptr<CcaTestPhyListener>
         m_rxPhyStateListener; ///< Listener for PHY state transitions
 
     MHz_u m_frequency;    ///< Operating frequency
     MHz_u m_channelWidth; ///< Operating channel width
+
+    std::vector<std::vector<Time>>
+        m_expectedPer20MhzCcaBusyDurations{}; ///< expected Per 20Mhz CCA durations per check
 };
 
-WifiPhyCcaIndicationTest::WifiPhyCcaIndicationTest()
-    : TestCase("Wi-Fi PHY CCA indication test"),
-      m_numSignalGenerators(2),
-      m_frequency(P20_CENTER_FREQUENCY),
-      m_channelWidth(MHz_u{20})
+WifiPhyCcaIndicationTest::WifiPhyCcaIndicationTest(WifiStandard standard)
+    : TestCase("Wi-Fi PHY CCA indication test for " + ((standard == WIFI_STANDARD_80211ax)
+                                                           ? std::string("802.11ax")
+                                                           : std::string("802.11be"))),
+      m_standard{standard},
+      m_numSignalGenerators{2},
+      m_frequency{P20_CENTER_FREQUENCY},
+      m_channelWidth{MHz_u{20}}
 {
 }
 
@@ -879,29 +1083,21 @@
 }
 
 void
-WifiPhyCcaIndicationTest::SendHeSuPpdu(dBm_u txPower, MHz_u frequency, MHz_u bandwidth)
+WifiPhyCcaIndicationTest::SendSuPpdu(dBm_u txPower, MHz_u frequency, MHz_u bandwidth)
 {
     NS_LOG_FUNCTION(this << txPower);
 
-    auto channelNum = WifiPhyOperatingChannel::FindFirst(0,
-                                                         frequency,
-                                                         bandwidth,
-                                                         WIFI_STANDARD_80211ax,
-                                                         WIFI_PHY_BAND_5GHZ)
-                          ->number;
+    auto channelNum =
+        WifiPhyOperatingChannel::FindFirst(0, frequency, bandwidth, m_standard, WIFI_PHY_BAND_6GHZ)
+            ->number;
     m_txPhy->SetOperatingChannel(
-        WifiPhy::ChannelTuple{channelNum, bandwidth, WIFI_PHY_BAND_5GHZ, 0});
-
-    WifiTxVector txVector = WifiTxVector(HePhy::GetHeMcs0(),
-                                         0,
-                                         WIFI_PREAMBLE_HE_SU,
-                                         NanoSeconds(800),
-                                         1,
-                                         1,
-                                         0,
-                                         bandwidth,
-                                         false);
+        WifiPhy::ChannelTuple{channelNum, bandwidth, WIFI_PHY_BAND_6GHZ, 0});
 
+    const auto mcs =
+        (m_standard == WIFI_STANDARD_80211ax) ? HePhy::GetHeMcs0() : EhtPhy::GetEhtMcs0();
+    const auto preamble =
+        (m_standard == WIFI_STANDARD_80211ax) ? WIFI_PREAMBLE_HE_SU : WIFI_PREAMBLE_EHT_MU;
+    WifiTxVector txVector{mcs, 0, preamble, NanoSeconds(800), 1, 1, 0, bandwidth, false};
     Ptr<Packet> pkt = Create<Packet>(1000);
     WifiMacHeader hdr;
     hdr.SetType(WIFI_MAC_QOSDATA);
@@ -982,7 +1178,7 @@
     for (const auto& generatedPpdu : generatedPpdus)
     {
         Simulator::Schedule(delay + generatedPpdu.startTime,
-                            &WifiPhyCcaIndicationTest::SendHeSuPpdu,
+                            &WifiPhyCcaIndicationTest::SendSuPpdu,
                             this,
                             generatedPpdu.power,
                             generatedPpdu.centerFreq,
@@ -1030,6 +1226,99 @@
 }
 
 void
+WifiPhyCcaIndicationTest::ResetExpectedPer20MhzCcaBusyDurations()
+{
+    m_expectedPer20MhzCcaBusyDurations.clear();
+    switch (static_cast<uint16_t>(m_channelWidth))
+    {
+    case 20:
+    default:
+        // no Per-20 MHz CCA
+        m_expectedPer20MhzCcaBusyDurations.emplace_back();
+        m_expectedPer20MhzCcaBusyDurations.emplace_back();
+        break;
+    case 40:
+        m_expectedPer20MhzCcaBusyDurations.push_back({MicroSeconds(0), MicroSeconds(0)});
+        m_expectedPer20MhzCcaBusyDurations.push_back({MicroSeconds(0), MicroSeconds(0)});
+        break;
+    case 80:
+        m_expectedPer20MhzCcaBusyDurations.push_back({
+            MicroSeconds(0),
+            MicroSeconds(0),
+            MicroSeconds(0),
+            MicroSeconds(0),
+        });
+        m_expectedPer20MhzCcaBusyDurations.push_back({
+            MicroSeconds(0),
+            MicroSeconds(0),
+            MicroSeconds(0),
+            MicroSeconds(0),
+        });
+        break;
+    case 160:
+        m_expectedPer20MhzCcaBusyDurations.push_back({
+            MicroSeconds(0),
+            MicroSeconds(0),
+            MicroSeconds(0),
+            MicroSeconds(0),
+            MicroSeconds(0),
+            MicroSeconds(0),
+            MicroSeconds(0),
+            MicroSeconds(0),
+        });
+        m_expectedPer20MhzCcaBusyDurations.push_back({
+            MicroSeconds(0),
+            MicroSeconds(0),
+            MicroSeconds(0),
+            MicroSeconds(0),
+            MicroSeconds(0),
+            MicroSeconds(0),
+            MicroSeconds(0),
+            MicroSeconds(0),
+        });
+        break;
+    case 320:
+        m_expectedPer20MhzCcaBusyDurations.push_back({
+            MicroSeconds(0),
+            MicroSeconds(0),
+            MicroSeconds(0),
+            MicroSeconds(0),
+            MicroSeconds(0),
+            MicroSeconds(0),
+            MicroSeconds(0),
+            MicroSeconds(0),
+            MicroSeconds(0),
+            MicroSeconds(0),
+            MicroSeconds(0),
+            MicroSeconds(0),
+            MicroSeconds(0),
+            MicroSeconds(0),
+            MicroSeconds(0),
+            MicroSeconds(0),
+        });
+        m_expectedPer20MhzCcaBusyDurations.push_back({
+            MicroSeconds(0),
+            MicroSeconds(0),
+            MicroSeconds(0),
+            MicroSeconds(0),
+            MicroSeconds(0),
+            MicroSeconds(0),
+            MicroSeconds(0),
+            MicroSeconds(0),
+            MicroSeconds(0),
+            MicroSeconds(0),
+            MicroSeconds(0),
+            MicroSeconds(0),
+            MicroSeconds(0),
+            MicroSeconds(0),
+            MicroSeconds(0),
+            MicroSeconds(0),
+        });
+        break;
+    }
+}
+
+void
 WifiPhyCcaIndicationTest::DoSetup()
 {
     // WifiHelper::EnableLogComponents ();
@@ -1039,9 +1328,14 @@
 
     Ptr<Node> rxNode = CreateObject<Node>();
     Ptr<WifiNetDevice> rxDev = CreateObject<WifiNetDevice>();
-    rxDev->SetStandard(WIFI_STANDARD_80211ax);
-    Ptr<VhtConfiguration> vhtConfiguration = CreateObject<VhtConfiguration>();
+    rxDev->SetStandard(m_standard);
+    auto vhtConfiguration = CreateObject<VhtConfiguration>();
     rxDev->SetVhtConfiguration(vhtConfiguration);
+    if (m_standard > WIFI_STANDARD_80211ax)
+    {
+        auto ehtConfiguration = CreateObject<EhtConfiguration>();
+        rxDev->SetEhtConfiguration(ehtConfiguration);
+    }
     m_rxPhy = CreateObject<SpectrumWifiPhy>();
     m_rxPhyStateListener = std::make_unique<CcaTestPhyListener>();
     m_rxPhy->RegisterListener(m_rxPhyStateListener);
@@ -1053,7 +1347,7 @@
         CreateObject<ThresholdPreambleDetectionModel>();
     m_rxPhy->SetPreambleDetectionModel(preambleDetectionModel);
     m_rxPhy->AddChannel(spectrumChannel);
-    m_rxPhy->ConfigureStandard(WIFI_STANDARD_80211ax);
+    m_rxPhy->ConfigureStandard(m_standard);
     m_rxPhy->SetDevice(rxDev);
     rxDev->SetPhy(m_rxPhy);
     rxNode->AddDevice(rxDev);
@@ -1067,7 +1361,7 @@
     Ptr<ErrorRateModel> txErrorModel = CreateObject<NistErrorRateModel>();
     m_txPhy->SetErrorRateModel(txErrorModel);
     m_txPhy->AddChannel(spectrumChannel);
-    m_txPhy->ConfigureStandard(WIFI_STANDARD_80211ax);
+    m_txPhy->ConfigureStandard(m_standard);
     m_txPhy->SetDevice(txDev);
     txDev->SetPhy(m_txPhy);
     txNode->AddDevice(txDev);
@@ -1098,23 +1392,27 @@
     auto channelNum = WifiPhyOperatingChannel::FindFirst(0,
                                                          m_frequency,
                                                          m_channelWidth,
-                                                         WIFI_STANDARD_80211ax,
-                                                         WIFI_PHY_BAND_5GHZ)
+                                                         m_standard,
+                                                         WIFI_PHY_BAND_6GHZ)
                           ->number;
 
     m_rxPhy->SetOperatingChannel(
-        WifiPhy::ChannelTuple{channelNum, m_channelWidth, WIFI_PHY_BAND_5GHZ, 0});
+        WifiPhy::ChannelTuple{channelNum, m_channelWidth, WIFI_PHY_BAND_6GHZ, 0});
     m_txPhy->SetOperatingChannel(
-        WifiPhy::ChannelTuple{channelNum, m_channelWidth, WIFI_PHY_BAND_5GHZ, 0});
+        WifiPhy::ChannelTuple{channelNum, m_channelWidth, WIFI_PHY_BAND_6GHZ, 0});
+
+    const auto& ppduDurations =
+        (m_standard == WIFI_STANDARD_80211ax) ? hePpduDurations : ehtPpduDurations;
 
-    std::vector<Time> expectedPer20MhzCcaBusyDurations{};
     Time delay;
     Simulator::Schedule(delay, &WifiPhyCcaIndicationTest::Reset, this);
     delay += Seconds(1);
 
+    ResetExpectedPer20MhzCcaBusyDurations();
+
     //----------------------------------------------------------------------------------------------------------------------------------
-    // Verify PHY state stays IDLE and no CCA-BUSY indication is reported when a signal below the
-    // energy detection threshold occupies P20
+    // Verify PHY state stays IDLE and no CCA-BUSY indication is reported when a signal below
+    // the energy detection threshold occupies P20
     Simulator::Schedule(delay,
                         &WifiPhyCcaIndicationTest::LogScenario,
                         this,
@@ -1124,7 +1422,7 @@
         {{dBm_u{-65}, MicroSeconds(0), MicroSeconds(100), P20_CENTER_FREQUENCY, MHz_u{20}}},
         {},
         {
-            {aCcaTime, WifiPhyState::IDLE}, // IDLE after aCCATime
+            {aCcaTimeWithDelta, WifiPhyState::IDLE}, // IDLE after aCcaTimeWithDelta
             {MicroSeconds(100) - smallDelta,
              WifiPhyState::IDLE}, // IDLE just before the transmission ends
             {MicroSeconds(100) + smallDelta,
@@ -1134,18 +1432,22 @@
     delay += Seconds(1);
 
     //----------------------------------------------------------------------------------------------------------------------------------
-    // Verify PHY state is CCA-BUSY as long as a 20 MHz signal above the energy detection threshold
-    // occupies P20
+    // Verify PHY state is CCA-BUSY as long as a 20 MHz signal above the energy detection
+    // threshold occupies P20
     Simulator::Schedule(delay,
                         &WifiPhyCcaIndicationTest::LogScenario,
                         this,
                         "Reception of signal that occupies P20 above ED threshold");
+    if (m_channelWidth > 20)
+    {
+        m_expectedPer20MhzCcaBusyDurations.at(0).at(0) = MicroSeconds(100);
+    }
     ScheduleTest(
         delay,
         {{dBm_u{-60.0}, MicroSeconds(0), MicroSeconds(100), P20_CENTER_FREQUENCY, MHz_u{20}}},
         {},
         {
-            {aCcaTime, WifiPhyState::CCA_BUSY}, // CCA-BUSY after aCCATime
+            {aCcaTimeWithDelta, WifiPhyState::CCA_BUSY}, // CCA-BUSY after aCcaTimeWithDelta
             {MicroSeconds(100) - smallDelta,
              WifiPhyState::CCA_BUSY}, // CCA-BUSY just before the transmission ends
             {MicroSeconds(100) + smallDelta,
@@ -1154,192 +1456,142 @@
         {{MicroSeconds(100) - smallDelta,
           MicroSeconds(100),
           WIFI_CHANLIST_PRIMARY,
-          ((m_channelWidth > MHz_u{20})
-               ? ((m_channelWidth > MHz_u{40})
-                      ? ((m_channelWidth > MHz_u{80}) ? std::vector<Time>{MicroSeconds(100),
-                                                                          MicroSeconds(0),
-                                                                          MicroSeconds(0),
-                                                                          MicroSeconds(0),
-                                                                          MicroSeconds(0),
-                                                                          MicroSeconds(0),
-                                                                          MicroSeconds(0),
-                                                                          MicroSeconds(0)}
-                                                      : std::vector<Time>{MicroSeconds(100),
-                                                                          MicroSeconds(0),
-                                                                          MicroSeconds(0),
-                                                                          MicroSeconds(0)})
-                      : std::vector<Time>{MicroSeconds(100), MicroSeconds(0)})
-               : std::vector<Time>{})}});
+          m_expectedPer20MhzCcaBusyDurations.at(0)}});
     delay += Seconds(1);
+    ResetExpectedPer20MhzCcaBusyDurations();
 
     //----------------------------------------------------------------------------------------------------------------------------------
-    // Verify PHY state is CCA-BUSY as long as the sum of 20 MHz signals occupying P20 is above the
-    // energy detection threshold
+    // Verify PHY state is CCA-BUSY as long as the sum of 20 MHz signals occupying P20 is above
+    // the energy detection threshold
     Simulator::Schedule(delay,
                         &WifiPhyCcaIndicationTest::LogScenario,
                         this,
                         "Reception of two 20 MHz signals that occupies P20 below ED threshold with "
                         "sum above ED threshold");
-    ScheduleTest(
-        delay,
-        {{dBm_u{-64.0}, MicroSeconds(0), MicroSeconds(100), P20_CENTER_FREQUENCY, MHz_u{20}},
-         {dBm_u{-65.0}, MicroSeconds(50), MicroSeconds(200), P20_CENTER_FREQUENCY, MHz_u{20}}},
-        {},
-        {
-            {MicroSeconds(50) + aCcaTime, WifiPhyState::CCA_BUSY}, // CCA-BUSY after aCCATime
-            {MicroSeconds(100) - smallDelta,
-             WifiPhyState::CCA_BUSY}, // CCA-BUSY just before the transmission ends
-            {MicroSeconds(100) + smallDelta,
-             WifiPhyState::IDLE} // IDLE just after the transmission ends
-        },
-        {{MicroSeconds(100) - smallDelta,
-          MicroSeconds(100),
-          WIFI_CHANLIST_PRIMARY,
-          ((m_channelWidth > MHz_u{20})
-               ? ((m_channelWidth > MHz_u{40})
-                      ? ((m_channelWidth > MHz_u{80}) ? std::vector<Time>{MicroSeconds(50),
-                                                                          MicroSeconds(0),
-                                                                          MicroSeconds(0),
-                                                                          MicroSeconds(0),
-                                                                          MicroSeconds(0),
-                                                                          MicroSeconds(0),
-                                                                          MicroSeconds(0),
-                                                                          MicroSeconds(0)}
-                                                      : std::vector<Time>{MicroSeconds(50),
-                                                                          MicroSeconds(0),
-                                                                          MicroSeconds(0),
-                                                                          MicroSeconds(0)})
-                      : std::vector<Time>{MicroSeconds(50), MicroSeconds(0)})
-               : std::vector<Time>{})}});
+    if (m_channelWidth > 20)
+    {
+        m_expectedPer20MhzCcaBusyDurations.at(0).at(0) = MicroSeconds(50);
+    }
+    ScheduleTest(delay,
+                 {{-64.0, MicroSeconds(0), MicroSeconds(100), P20_CENTER_FREQUENCY, MHz_u{20}},
+                  {-65.0, MicroSeconds(50), MicroSeconds(200), P20_CENTER_FREQUENCY, MHz_u{20}}},
+                 {},
+                 {
+                     {MicroSeconds(50) + aCcaTimeWithDelta,
+                      WifiPhyState::CCA_BUSY}, // CCA-BUSY after aCcaTimeWithDelta
+                     {MicroSeconds(100) - smallDelta,
+                      WifiPhyState::CCA_BUSY}, // CCA-BUSY just before the transmission ends
+                     {MicroSeconds(100) + smallDelta,
+                      WifiPhyState::IDLE} // IDLE just after the transmission ends
+                 },
+                 {{MicroSeconds(100) - smallDelta,
+                   MicroSeconds(100),
+                   WIFI_CHANLIST_PRIMARY,
+                   m_expectedPer20MhzCcaBusyDurations.at(0)}});
     delay += Seconds(1);
+    ResetExpectedPer20MhzCcaBusyDurations();
 
     //----------------------------------------------------------------------------------------------------------------------------------
-    // Verify PHY state stays IDLE when a 20 MHz HE SU PPDU with received power below the
+    // Verify PHY state stays IDLE when a 20 MHz PPDU with received power below the
     // corresponding CCA sensitivity threshold occupies P20
     Simulator::Schedule(
         delay,
         &WifiPhyCcaIndicationTest::LogScenario,
         this,
-        "Reception of a 20 MHz HE PPDU that occupies P20 below CCA sensitivity threshold");
+        "Reception of a 20 MHz PPDU that occupies P20 below CCA sensitivity threshold");
     ScheduleTest(delay,
                  {},
                  {{dBm_u{-85}, MicroSeconds(0), P20_CENTER_FREQUENCY, MHz_u{20}}},
                  {
-                     {aCcaTime, WifiPhyState::IDLE}, // IDLE after aCCATime
-                     {PpduDurations.at(MHz_u{20}) - smallDelta,
+                     {aCcaTimeWithDelta, WifiPhyState::IDLE}, // IDLE after aCcaTimeWithDelta
+                     {ppduDurations.at(MHz_u{20}) - smallDelta,
                       WifiPhyState::IDLE}, // IDLE just before the transmission ends
-                     {PpduDurations.at(MHz_u{20}) + smallDelta,
+                     {ppduDurations.at(MHz_u{20}) + smallDelta,
                       WifiPhyState::IDLE} // IDLE just after the transmission ends
                  },
                  {});
     delay += Seconds(1);
 
     //----------------------------------------------------------------------------------------------------------------------------------
-    // Verify PHY state transitions to CCA-BUSY when an HE SU PPDU with received power above the CCA
-    // sensitivity threshold occupies P20. The per20Bitmap should indicate idle on the primary 20
-    // MHz subchannel because received power is below -72 dBm (27.3.20.6.5).
+    // Verify PHY state transitions to CCA-BUSY when an PPDU with received power above the CCA
+    // sensitivity threshold occupies P20. The per20Bitmap should indicate idle on the primary
+    // 20 MHz subchannel because received power is below -72 dBm (27.3.20.6.5).
     Simulator::Schedule(
         delay,
         &WifiPhyCcaIndicationTest::LogScenario,
         this,
-        "Reception of a 20 MHz HE PPDU that occupies P20 above CCA sensitivity threshold");
+        "Reception of a 20 MHz PPDU that occupies P20 above CCA sensitivity threshold");
     ScheduleTest(
         delay,
         {},
         {{dBm_u{-80}, MicroSeconds(0), P20_CENTER_FREQUENCY, MHz_u{20}}},
         {
-            {aCcaTime, WifiPhyState::CCA_BUSY}, // CCA-BUSY after aCCATime
-            {PpduDurations.at(MHz_u{20}) - smallDelta,
+            {aCcaTimeWithDelta, WifiPhyState::CCA_BUSY}, // CCA-BUSY after aCcaTimeWithDelta
+            {ppduDurations.at(MHz_u{20}) - smallDelta,
              WifiPhyState::RX}, // RX just before the transmission ends
-            {PpduDurations.at(MHz_u{20}) + smallDelta,
+            {ppduDurations.at(MHz_u{20}) + smallDelta,
              WifiPhyState::IDLE} // IDLE just after the transmission ends
         },
-        {{aCcaTime,
+        {{aCcaTimeWithDelta,
           MicroSeconds(16),
           WIFI_CHANLIST_PRIMARY,
-          ((m_channelWidth > 20)
-               ? ((m_channelWidth > 40)
-                      ? ((m_channelWidth > 80)
-                             ? std::vector<Time>{Seconds(0),
-                                                 Seconds(0),
-                                                 Seconds(0),
-                                                 Seconds(0),
-                                                 Seconds(0),
-                                                 Seconds(0),
-                                                 Seconds(0),
-                                                 Seconds(0)}
-                             : std::vector<Time>{Seconds(0), Seconds(0), Seconds(0), Seconds(0)})
-                      : std::vector<Time>{Seconds(0), Seconds(0)})
-               : std::vector<Time>{})}});
+          m_expectedPer20MhzCcaBusyDurations.at(0)}});
     delay += Seconds(1);
 
     //----------------------------------------------------------------------------------------------------------------------------------
-    // Verify PHY state stays IDLE when a 40 MHz HE SU PPDU with received power below the CCA
+    // Verify PHY state stays IDLE when a 40 MHz PPDU with received power below the CCA
     // sensitivity threshold occupies P40
     Simulator::Schedule(
         delay,
         &WifiPhyCcaIndicationTest::LogScenario,
         this,
-        "Reception of a 40 MHz HE PPDU that occupies P20 below CCA sensitivity threshold");
+        "Reception of a 40 MHz PPDU that occupies P20 below CCA sensitivity threshold");
     ScheduleTest(delay,
                  {},
                  {{dBm_u{-80}, MicroSeconds(0), P40_CENTER_FREQUENCY, MHz_u{40}}},
                  {
-                     {aCcaTime, WifiPhyState::IDLE}, // IDLE after aCCATime
-                     {PpduDurations.at(MHz_u{40}) - smallDelta,
+                     {aCcaTimeWithDelta, WifiPhyState::IDLE}, // IDLE after aCcaTimeWithDelta
+                     {ppduDurations.at(MHz_u{40}) - smallDelta,
                       WifiPhyState::IDLE}, // IDLE just before the transmission ends
-                     {PpduDurations.at(MHz_u{40}) + smallDelta,
+                     {ppduDurations.at(MHz_u{40}) + smallDelta,
                       WifiPhyState::IDLE} // IDLE just after the transmission ends
                  },
                  {});
     delay += Seconds(1);
 
     //----------------------------------------------------------------------------------------------------------------------------------
-    // Verify PHY state transitions to CCA-BUSY when an HE SU PPDU with received power above the CCA
-    // sensitivity threshold occupies P40. The per20Bitmap should indicate idle on the primary 20
-    // MHz subchannel because received power is below -72 dBm (27.3.20.6.5).
+    // Verify PHY state transitions to CCA-BUSY when an PPDU with received power above the CCA
+    // sensitivity threshold occupies P40. The per20Bitmap should indicate idle on the primary
+    // 20 MHz subchannel because received power is below -72 dBm (27.3.20.6.5).
     Simulator::Schedule(
         delay,
         &WifiPhyCcaIndicationTest::LogScenario,
         this,
-        "Reception of a 40 MHz HE PPDU that occupies P40 above CCA sensitivity threshold");
+        "Reception of a 40 MHz PPDU that occupies P40 above CCA sensitivity threshold");
     ScheduleTest(
         delay,
         {},
         {{dBm_u{-75}, MicroSeconds(0), P40_CENTER_FREQUENCY, MHz_u{40}}},
         {
-            {aCcaTime, WifiPhyState::CCA_BUSY}, // CCA-BUSY after aCCATime
-            {PpduDurations.at(MHz_u{40}) - smallDelta,
+            {aCcaTimeWithDelta, WifiPhyState::CCA_BUSY}, // CCA-BUSY after aCcaTimeWithDelta
+            {ppduDurations.at(MHz_u{40}) - smallDelta,
              (m_channelWidth > MHz_u{20})
                  ? WifiPhyState::RX
                  : WifiPhyState::CCA_BUSY}, // RX or IDLE just before the transmission ends
-            {PpduDurations.at(MHz_u{40}) + smallDelta,
+            {ppduDurations.at(MHz_u{40}) + smallDelta,
              WifiPhyState::IDLE} // IDLE just after the transmission ends
         },
-        {{aCcaTime,
+        {{aCcaTimeWithDelta,
           MicroSeconds(16),
           WIFI_CHANLIST_PRIMARY,
-          ((m_channelWidth > 20)
-               ? ((m_channelWidth > 40)
-                      ? ((m_channelWidth > 80)
-                             ? std::vector<Time>{Seconds(0),
-                                                 Seconds(0),
-                                                 Seconds(0),
-                                                 Seconds(0),
-                                                 Seconds(0),
-                                                 Seconds(0),
-                                                 Seconds(0),
-                                                 Seconds(0)}
-                             : std::vector<Time>{Seconds(0), Seconds(0), Seconds(0), Seconds(0)})
-                      : std::vector<Time>{Seconds(0), Seconds(0)})
-               : std::vector<Time>{})}});
+          m_expectedPer20MhzCcaBusyDurations.at(0)}});
     delay += Seconds(1);
 
     if (m_channelWidth > MHz_u{20})
     {
         //----------------------------------------------------------------------------------------------------------------------------------
-        // Verify PHY state stays IDLE and no CCA-BUSY indication is reported when a 20 MHz signal
-        // below the energy detection threshold occupies S20
+        // Verify PHY state stays IDLE and no CCA-BUSY indication is reported when a 20 MHz
+        // signal below the energy detection threshold occupies S20
         Simulator::Schedule(delay,
                             &WifiPhyCcaIndicationTest::LogScenario,
                             this,
@@ -1349,7 +1601,7 @@
             {{dBm_u{-65}, MicroSeconds(0), MicroSeconds(100), S20_CENTER_FREQUENCY, MHz_u{20}}},
             {},
             {
-                {aCcaTime, WifiPhyState::IDLE}, // IDLE after aCCATime
+                {aCcaTimeWithDelta, WifiPhyState::IDLE}, // IDLE after aCcaTimeWithDelta
                 {MicroSeconds(100) - smallDelta,
                  WifiPhyState::IDLE}, // IDLE just before the transmission ends
                 {MicroSeconds(100) + smallDelta,
@@ -1365,12 +1617,13 @@
                             &WifiPhyCcaIndicationTest::LogScenario,
                             this,
                             "Reception of a 20 MHz signal that occupies S20 above ED threshold");
+        m_expectedPer20MhzCcaBusyDurations.at(0).at(1) = MicroSeconds(100);
         ScheduleTest(
             delay,
             {{dBm_u{-60}, MicroSeconds(0), MicroSeconds(100), S20_CENTER_FREQUENCY, MHz_u{20}}},
             {},
             {
-                {aCcaTime, WifiPhyState::IDLE}, // IDLE after aCCATime
+                {aCcaTimeWithDelta, WifiPhyState::IDLE}, // IDLE after aCcaTimeWithDelta
                 {MicroSeconds(100) - smallDelta,
                  WifiPhyState::IDLE}, // IDLE just before the transmission ends
                 {MicroSeconds(100) + smallDelta,
@@ -1379,21 +1632,9 @@
             {{MicroSeconds(100) - smallDelta,
               MicroSeconds(100),
               WIFI_CHANLIST_SECONDARY,
-              ((m_channelWidth > MHz_u{40})
-                   ? ((m_channelWidth > MHz_u{80}) ? std::vector<Time>{MicroSeconds(0),
-                                                                       MicroSeconds(100),
-                                                                       MicroSeconds(0),
-                                                                       MicroSeconds(0),
-                                                                       MicroSeconds(0),
-                                                                       MicroSeconds(0),
-                                                                       MicroSeconds(0),
-                                                                       MicroSeconds(0)}
-                                                   : std::vector<Time>{MicroSeconds(0),
-                                                                       MicroSeconds(100),
-                                                                       MicroSeconds(0),
-                                                                       MicroSeconds(0)})
-                   : std::vector<Time>{MicroSeconds(0), MicroSeconds(100)})}});
+              m_expectedPer20MhzCcaBusyDurations.at(0)}});
         delay += Seconds(1);
+        ResetExpectedPer20MhzCcaBusyDurations();
 
         //----------------------------------------------------------------------------------------------------------------------------------
         // Verify PHY state is CCA-BUSY as long as a 40 MHz signal above the energy detection
@@ -1402,12 +1643,13 @@
                             &WifiPhyCcaIndicationTest::LogScenario,
                             this,
                             "Reception of a 40 MHz signal that occupies P40 above ED threshold");
+        std::fill_n(m_expectedPer20MhzCcaBusyDurations.at(0).begin(), 2, MicroSeconds(100));
         ScheduleTest(
             delay,
             {{dBm_u{-55}, MicroSeconds(0), MicroSeconds(100), P40_CENTER_FREQUENCY, MHz_u{40}}},
             {},
             {
-                {aCcaTime, WifiPhyState::CCA_BUSY}, // CCA-BUSY after aCCATime
+                {aCcaTimeWithDelta, WifiPhyState::CCA_BUSY}, // CCA-BUSY after aCcaTimeWithDelta
                 {MicroSeconds(100) - smallDelta,
                  WifiPhyState::CCA_BUSY}, // CCA-BUSY just before the transmission ends
                 {MicroSeconds(100) + smallDelta,
@@ -1416,20 +1658,9 @@
             {{MicroSeconds(100) - smallDelta,
               MicroSeconds(100),
               WIFI_CHANLIST_PRIMARY,
-              ((m_channelWidth > 40) ? ((m_channelWidth > 80) ? std::vector<Time>{MicroSeconds(100),
-                                                                                  MicroSeconds(100),
-                                                                                  MicroSeconds(0),
-                                                                                  MicroSeconds(0),
-                                                                                  MicroSeconds(0),
-                                                                                  MicroSeconds(0),
-                                                                                  MicroSeconds(0),
-                                                                                  MicroSeconds(0)}
-                                                              : std::vector<Time>{MicroSeconds(100),
-                                                                                  MicroSeconds(100),
-                                                                                  MicroSeconds(0),
-                                                                                  MicroSeconds(0)})
-                                     : std::vector<Time>{MicroSeconds(100), MicroSeconds(100)})}});
+              m_expectedPer20MhzCcaBusyDurations.at(0)}});
         delay += Seconds(1);
+        ResetExpectedPer20MhzCcaBusyDurations();
 
         //----------------------------------------------------------------------------------------------------------------------------------
         // Verify PHY notifies CCA-BUSY for the primary channel while the secondary channel was
@@ -1439,181 +1670,136 @@
                             this,
                             "Reception of a signal that occupies S20 followed by the reception of "
                             "another signal that occupies P20");
+        m_expectedPer20MhzCcaBusyDurations.at(0).at(1) = MicroSeconds(100);
+        m_expectedPer20MhzCcaBusyDurations.at(1).at(0) = MicroSeconds(100);
+        m_expectedPer20MhzCcaBusyDurations.at(1).at(1) = MicroSeconds(50);
         ScheduleTest(
             delay,
             {{dBm_u{-60}, MicroSeconds(0), MicroSeconds(100), S20_CENTER_FREQUENCY, MHz_u{20}},
              {dBm_u{-60}, MicroSeconds(50), MicroSeconds(100), P20_CENTER_FREQUENCY, MHz_u{20}}},
             {},
             {
-                {aCcaTime, WifiPhyState::IDLE}, // state of primary stays idle after aCCATime
-                {MicroSeconds(50) + aCcaTime,
-                 WifiPhyState::CCA_BUSY}, // state of primary is CCA-BUSY after aCCATime that
-                                          // followed the second transmission
+                {aCcaTimeWithDelta,
+                 WifiPhyState::IDLE}, // state of primary stays idle after aCcaTimeWithDelta
+                {MicroSeconds(50) + aCcaTimeWithDelta,
+                 WifiPhyState::CCA_BUSY}, // state of primary is CCA-BUSY after
+                                          // aCcaTimeWithDelta that followed the second
+                                          // transmission
                 {MicroSeconds(50) + MicroSeconds(100) - smallDelta,
                  WifiPhyState::CCA_BUSY}, // CCA-BUSY just before the transmission ends
                 {MicroSeconds(50) + MicroSeconds(100) + smallDelta,
                  WifiPhyState::IDLE} // IDLE just after the transmission ends
             },
-            {{aCcaTime, // notification upon reception of the first signal
+            {{aCcaTimeWithDelta, // notification upon reception of the first signal
               MicroSeconds(100),
               WIFI_CHANLIST_SECONDARY,
-              ((m_channelWidth > 40) ? ((m_channelWidth > 80) ? std::vector<Time>{MicroSeconds(0),
-                                                                                  MicroSeconds(100),
-                                                                                  MicroSeconds(0),
-                                                                                  MicroSeconds(0),
-                                                                                  MicroSeconds(0),
-                                                                                  MicroSeconds(0),
-                                                                                  MicroSeconds(0),
-                                                                                  MicroSeconds(0)}
-                                                              : std::vector<Time>{MicroSeconds(0),
-                                                                                  MicroSeconds(100),
-                                                                                  MicroSeconds(0),
-                                                                                  MicroSeconds(0)})
-                                     : std::vector<Time>{MicroSeconds(0), MicroSeconds(100)})},
-             {MicroSeconds(50) + aCcaTime, // notification upon reception of the second signal
+              m_expectedPer20MhzCcaBusyDurations.at(0)},
+             {MicroSeconds(50) +
+                  aCcaTimeWithDelta, // notification upon reception of the second signal
               MicroSeconds(50) + MicroSeconds(100),
               WIFI_CHANLIST_PRIMARY,
-              ((m_channelWidth > 40) ? ((m_channelWidth > 80) ? std::vector<Time>{MicroSeconds(100),
-                                                                                  MicroSeconds(50),
-                                                                                  MicroSeconds(0),
-                                                                                  MicroSeconds(0),
-                                                                                  MicroSeconds(0),
-                                                                                  MicroSeconds(0),
-                                                                                  MicroSeconds(0),
-                                                                                  MicroSeconds(0)}
-                                                              : std::vector<Time>{MicroSeconds(100),
-                                                                                  MicroSeconds(50),
-                                                                                  MicroSeconds(0),
-                                                                                  MicroSeconds(0)})
-                                     : std::vector<Time>{MicroSeconds(100), MicroSeconds(50)})}});
+              m_expectedPer20MhzCcaBusyDurations.at(1)}});
         delay += Seconds(1);
+        ResetExpectedPer20MhzCcaBusyDurations();
 
         //----------------------------------------------------------------------------------------------------------------------------------
-        // Verify PHY updates per-20 MHz CCA durations if a signal arrives on the secondary channel
-        // while primary is CCA-BUSY
+        // Verify PHY updates per-20 MHz CCA durations if a signal arrives on the secondary
+        // channel while primary is CCA-BUSY
         Simulator::Schedule(delay,
                             &WifiPhyCcaIndicationTest::LogScenario,
                             this,
                             "Reception of a signal that occupies P20 followed by the reception of "
                             "another signal that occupies S20");
+        m_expectedPer20MhzCcaBusyDurations.at(0).at(0) = MicroSeconds(100);
+        m_expectedPer20MhzCcaBusyDurations.at(1).at(0) = MicroSeconds(50);
+        m_expectedPer20MhzCcaBusyDurations.at(1).at(1) = MicroSeconds(100);
         ScheduleTest(
             delay,
             {{dBm_u{-60}, MicroSeconds(0), MicroSeconds(100), P20_CENTER_FREQUENCY, MHz_u{20}},
              {dBm_u{-60}, MicroSeconds(50), MicroSeconds(100), S20_CENTER_FREQUENCY, MHz_u{20}}},
             {},
             {
-                {aCcaTime, WifiPhyState::CCA_BUSY}, // CCA-BUSY after aCCATime
-                {MicroSeconds(50) + aCcaTime,
-                 WifiPhyState::CCA_BUSY}, // state of primary is still CCA-BUSY after aCCATime that
-                                          // followed the second transmission
+                {aCcaTimeWithDelta, WifiPhyState::CCA_BUSY}, // CCA-BUSY after aCcaTimeWithDelta
+                {MicroSeconds(50) + aCcaTimeWithDelta,
+                 WifiPhyState::CCA_BUSY}, // state of primary is still CCA-BUSY after
+                                          // aCcaTimeWithDelta that followed the second
+                                          // transmission
                 {MicroSeconds(100) - smallDelta,
                  WifiPhyState::CCA_BUSY}, // CCA-BUSY just before the first transmission ends
                 {MicroSeconds(100) + smallDelta,
                  WifiPhyState::IDLE} // IDLE just after the first transmission ends
             },
-            {{aCcaTime, // notification upon reception of the first signal
+            {{aCcaTimeWithDelta, // notification upon reception of the first signal
               MicroSeconds(100),
               WIFI_CHANLIST_PRIMARY,
-              ((m_channelWidth > 40) ? ((m_channelWidth > 80) ? std::vector<Time>{MicroSeconds(100),
-                                                                                  MicroSeconds(0),
-                                                                                  MicroSeconds(0),
-                                                                                  MicroSeconds(0),
-                                                                                  MicroSeconds(0),
-                                                                                  MicroSeconds(0),
-                                                                                  MicroSeconds(0),
-                                                                                  MicroSeconds(0)}
-                                                              : std::vector<Time>{MicroSeconds(100),
-                                                                                  MicroSeconds(0),
-                                                                                  MicroSeconds(0),
-                                                                                  MicroSeconds(0)})
-                                     : std::vector<Time>{MicroSeconds(100), MicroSeconds(0)})},
-             {MicroSeconds(50) + aCcaTime, // notification upon reception of the second signal
+              m_expectedPer20MhzCcaBusyDurations.at(0)},
+             {MicroSeconds(50) +
+                  aCcaTimeWithDelta, // notification upon reception of the second signal
               MicroSeconds(100),
               WIFI_CHANLIST_PRIMARY,
-              ((m_channelWidth > 40) ? ((m_channelWidth > 80) ? std::vector<Time>{MicroSeconds(50),
-                                                                                  MicroSeconds(100),
-                                                                                  MicroSeconds(0),
-                                                                                  MicroSeconds(0),
-                                                                                  MicroSeconds(0),
-                                                                                  MicroSeconds(0),
-                                                                                  MicroSeconds(0),
-                                                                                  MicroSeconds(0)}
-                                                              : std::vector<Time>{MicroSeconds(50),
-                                                                                  MicroSeconds(100),
-                                                                                  MicroSeconds(0),
-                                                                                  MicroSeconds(0)})
-                                     : std::vector<Time>{MicroSeconds(50), MicroSeconds(100)})}});
+              m_expectedPer20MhzCcaBusyDurations.at(1)}});
         delay += Seconds(1);
+        ResetExpectedPer20MhzCcaBusyDurations();
 
         //----------------------------------------------------------------------------------------------------------------------------------
-        // Verify PHY state stays IDLE when a 20 MHz HE SU PPDU with received power below the CCA
+        // Verify PHY state stays IDLE when a 20 MHz PPDU with received power below the CCA
         // sensitivity threshold occupies S40
         Simulator::Schedule(
             delay,
             &WifiPhyCcaIndicationTest::LogScenario,
             this,
-            "Reception of a 20 MHz HE PPDU that occupies S20 below CCA sensitivity threshold");
+            "Reception of a 20 MHz PPDU that occupies S20 below CCA sensitivity threshold");
         ScheduleTest(delay,
                      {},
                      {{dBm_u{-75}, MicroSeconds(0), S20_CENTER_FREQUENCY, MHz_u{20}}},
                      {
-                         {aCcaTime, WifiPhyState::IDLE}, // IDLE after aCCATime
-                         {PpduDurations.at(MHz_u{20}) - smallDelta,
+                         {aCcaTimeWithDelta, WifiPhyState::IDLE}, // IDLE after aCcaTimeWithDelta
+                         {ppduDurations.at(MHz_u{20}) - smallDelta,
                           WifiPhyState::IDLE}, // IDLE just before the transmission ends
-                         {PpduDurations.at(MHz_u{20}) + smallDelta,
+                         {ppduDurations.at(MHz_u{20}) + smallDelta,
                           WifiPhyState::IDLE} // IDLE just after the transmission ends
                      },
                      {});
         delay += Seconds(1);
 
         //----------------------------------------------------------------------------------------------------------------------------------
-        // Verify PHY state stays IDLE but CCA-BUSY indication is reported when a 20 MHz HE SU PPDU
+        // Verify PHY state stays IDLE but CCA-BUSY indication is reported when a 20 MHz PPDU
         // with received power above the CCA sensitivity threshold occupies S20
         Simulator::Schedule(
             delay,
             &WifiPhyCcaIndicationTest::LogScenario,
             this,
-            "Reception of a 20 MHz HE PPDU that occupies S20 above CCA sensitivity threshold");
-        ScheduleTest(
-            delay,
-            {},
-            {{dBm_u{-70}, MicroSeconds(0), S20_CENTER_FREQUENCY, MHz_u{20}}},
-            {
-                {aCcaTime, WifiPhyState::IDLE}, // IDLE after aCCATime
-                {PpduDurations.at(MHz_u{20}) - smallDelta,
-                 WifiPhyState::IDLE}, // IDLE just before the transmission ends
-                {PpduDurations.at(MHz_u{20}) + smallDelta,
-                 WifiPhyState::IDLE} // IDLE just after the transmission ends
-            },
-            {{aCcaTime,
-              PpduDurations.at(MHz_u{20}),
-              WIFI_CHANLIST_SECONDARY,
-              ((m_channelWidth > MHz_u{40})
-                   ? ((m_channelWidth > MHz_u{80}) ? std::vector<Time>{NanoSeconds(0),
-                                                                       PpduDurations.at(MHz_u{20}),
-                                                                       NanoSeconds(0),
-                                                                       NanoSeconds(0),
-                                                                       NanoSeconds(0),
-                                                                       NanoSeconds(0),
-                                                                       NanoSeconds(0),
-                                                                       NanoSeconds(0)}
-                                                   : std::vector<Time>{NanoSeconds(0),
-                                                                       PpduDurations.at(MHz_u{20}),
-                                                                       NanoSeconds(0),
-                                                                       NanoSeconds(0)})
-                   : std::vector<Time>{NanoSeconds(0), PpduDurations.at(MHz_u{20})})}});
+            "Reception of a 20 MHz PPDU that occupies S20 above CCA sensitivity threshold");
+        m_expectedPer20MhzCcaBusyDurations.at(0).at(1) = ppduDurations.at(MHz_u{20});
+        ScheduleTest(delay,
+                     {},
+                     {{dBm_u{-70}, MicroSeconds(0), S20_CENTER_FREQUENCY, MHz_u{20}}},
+                     {
+                         {aCcaTimeWithDelta, WifiPhyState::IDLE}, // IDLE after aCcaTimeWithDelta
+                         {ppduDurations.at(MHz_u{20}) - smallDelta,
+                          WifiPhyState::IDLE}, // IDLE just before the transmission ends
+                         {ppduDurations.at(MHz_u{20}) + smallDelta,
+                          WifiPhyState::IDLE} // IDLE just after the transmission ends
+                     },
+                     {{aCcaTimeWithDelta,
+                       ppduDurations.at(MHz_u{20}),
+                       WIFI_CHANLIST_SECONDARY,
+                       m_expectedPer20MhzCcaBusyDurations.at(0)}});
         delay += Seconds(1);
+        ResetExpectedPer20MhzCcaBusyDurations();
 
         //----------------------------------------------------------------------------------------------------------------------------------
-        // Verify PHY state stays IDLE but CCA-BUSY indication is still reported as long as a signal
-        // above the energy detection threshold occupies the S20 while a 40 MHz PPDU below the CCA
-        // sensitivity threshold is received on P40.
-        Simulator::Schedule(
-            delay,
-            &WifiPhyCcaIndicationTest::LogScenario,
-            this,
-            "Reception of a 20 MHz signal that occupies S20 above ED threshold followed by a 40 "
-            "MHz HE PPDU that occupies P40 below CCA sensitivity threshold");
+        // Verify PHY state stays IDLE but CCA-BUSY indication is still reported as long as a
+        // signal above the energy detection threshold occupies the S20 while a 40 MHz PPDU
+        // below the CCA sensitivity threshold is received on P40.
+        Simulator::Schedule(delay,
+                            &WifiPhyCcaIndicationTest::LogScenario,
+                            this,
+                            "Reception of a 20 MHz signal that occupies S20 above ED threshold "
+                            "followed by a 40 "
+                            "MHz PPDU that occupies P40 below CCA sensitivity threshold");
+        m_expectedPer20MhzCcaBusyDurations.at(0).at(1) = MicroSeconds(100);
+        m_expectedPer20MhzCcaBusyDurations.at(1).at(1) = MicroSeconds(46);
         ScheduleTest(
             delay,
             {{dBm_u{-60},
@@ -1626,51 +1812,25 @@
               P40_CENTER_FREQUENCY,
               MHz_u{40}}}, // PPDU on P40 below threshold
             {
-                {MicroSeconds(50) + aCcaTime, WifiPhyState::IDLE}, // PHY state stays IDLE
+                {MicroSeconds(50) + aCcaTimeWithDelta, WifiPhyState::IDLE}, // PHY state stays IDLE
             },
             {{MicroSeconds(50) - smallDelta,
               MicroSeconds(100),
               WIFI_CHANLIST_SECONDARY,
-              ((m_channelWidth > 20)
-                   ? ((m_channelWidth > 40)
-                          ? ((m_channelWidth > 80) ? std::vector<Time>{MicroSeconds(0),
-                                                                       MicroSeconds(100),
-                                                                       MicroSeconds(0),
-                                                                       MicroSeconds(0),
-                                                                       MicroSeconds(0),
-                                                                       MicroSeconds(0),
-                                                                       MicroSeconds(0),
-                                                                       MicroSeconds(0)}
-                                                   : std::vector<Time>{MicroSeconds(0),
-                                                                       MicroSeconds(100),
-                                                                       MicroSeconds(0),
-                                                                       MicroSeconds(0)})
-                          : std::vector<Time>{MicroSeconds(0), MicroSeconds(100)})
-                   : std::vector<Time>{})},
+              m_expectedPer20MhzCcaBusyDurations.at(0)},
              {MicroSeconds(100) - smallDelta,
               MicroSeconds(100),
               WIFI_CHANLIST_SECONDARY,
-              ((m_channelWidth > 40) ? ((m_channelWidth > 80) ? std::vector<Time>{MicroSeconds(0),
-                                                                                  MicroSeconds(46),
-                                                                                  MicroSeconds(0),
-                                                                                  MicroSeconds(0),
-                                                                                  MicroSeconds(0),
-                                                                                  MicroSeconds(0),
-                                                                                  MicroSeconds(0),
-                                                                                  MicroSeconds(0)}
-                                                              : std::vector<Time>{MicroSeconds(0),
-                                                                                  MicroSeconds(46),
-                                                                                  MicroSeconds(0),
-                                                                                  MicroSeconds(0)})
-                                     : std::vector<Time>{MicroSeconds(0), MicroSeconds(46)})}});
+              m_expectedPer20MhzCcaBusyDurations.at(1)}});
         delay += Seconds(1);
+        ResetExpectedPer20MhzCcaBusyDurations();
     }
 
     if (m_channelWidth > MHz_u{40})
     {
         //----------------------------------------------------------------------------------------------------------------------------------
-        // Verify PHY state stays IDLE and no CCA-BUSY indication is reported when a signal below
-        // the energy detection threshold occupies S40
+        // Verify PHY state stays IDLE and no CCA-BUSY indication is reported when a signal
+        // below the energy detection threshold occupies S40
         Simulator::Schedule(delay,
                             &WifiPhyCcaIndicationTest::LogScenario,
                             this,
@@ -1684,7 +1844,7 @@
                        MHz_u{20}}},
                      {},
                      {
-                         {aCcaTime, WifiPhyState::IDLE}, // IDLE after aCCATime
+                         {aCcaTimeWithDelta, WifiPhyState::IDLE}, // IDLE after aCcaTimeWithDelta
                          {MicroSeconds(100) - smallDelta,
                           WifiPhyState::IDLE}, // IDLE just before the transmission ends
                          {MicroSeconds(100) + smallDelta,
@@ -1694,15 +1854,16 @@
         delay += Seconds(1);
 
         //----------------------------------------------------------------------------------------------------------------------------------
-        // Verify PHY notifies CCA-BUSY for the S40 as long as a signal above the energy detection
-        // threshold occupies the first 20 MHz subchannel of the S40: 27.3.20.6.4: Any signal within
-        // the secondary 40 MHz channel at or above a threshold of –59 dBm within a period of
-        // aCCATime after the signal arrives at the receiver's antenna(s).
+        // Verify PHY notifies CCA-BUSY for the S40 as long as a signal above the energy
+        // detection threshold occupies the first 20 MHz subchannel of the S40: 27.3.20.6.4: Any
+        // signal within the secondary 40 MHz channel at or above a threshold of –59 dBm within
+        // a period of aCcaTimeWithDelta after the signal arrives at the receiver’s antenna(s).
         Simulator::Schedule(delay,
                             &WifiPhyCcaIndicationTest::LogScenario,
                             this,
                             "Reception of a 20 MHz signal that occupies the first subchannel of "
                             "S40 above ED threshold");
+        m_expectedPer20MhzCcaBusyDurations.at(0).at(2) = MicroSeconds(100);
         ScheduleTest(delay,
                      {{dBm_u{-55},
                        MicroSeconds(0),
@@ -1711,7 +1872,7 @@
                        MHz_u{20}}},
                      {},
                      {
-                         {aCcaTime, WifiPhyState::IDLE}, // IDLE after aCCATime
+                         {aCcaTimeWithDelta, WifiPhyState::IDLE}, // IDLE after aCcaTimeWithDelta
                          {MicroSeconds(100) - smallDelta,
                           WifiPhyState::IDLE}, // IDLE just before the transmission ends
                          {MicroSeconds(100) + smallDelta,
@@ -1720,23 +1881,13 @@
                      {{MicroSeconds(100) - smallDelta,
                        MicroSeconds(100),
                        WIFI_CHANLIST_SECONDARY40,
-                       ((m_channelWidth > 80) ? std::vector<Time>{MicroSeconds(0),
-                                                                  MicroSeconds(0),
-                                                                  MicroSeconds(100),
-                                                                  MicroSeconds(0),
-                                                                  MicroSeconds(0),
-                                                                  MicroSeconds(0),
-                                                                  MicroSeconds(0),
-                                                                  MicroSeconds(0)}
-                                              : std::vector<Time>{MicroSeconds(0),
-                                                                  MicroSeconds(0),
-                                                                  MicroSeconds(100),
-                                                                  MicroSeconds(0)})}});
+                       m_expectedPer20MhzCcaBusyDurations.at(0)}});
         delay += Seconds(1);
+        ResetExpectedPer20MhzCcaBusyDurations();
 
         //----------------------------------------------------------------------------------------------------------------------------------
-        // Verify PHY state stays IDLE for the S40 if a signal below the energy detection threshold
-        // occupies the second 20 MHz subchannel of the S40
+        // Verify PHY state stays IDLE for the S40 if a signal below the energy detection
+        // threshold occupies the second 20 MHz subchannel of the S40
         Simulator::Schedule(delay,
                             &WifiPhyCcaIndicationTest::LogScenario,
                             this,
@@ -1750,7 +1901,7 @@
                        MHz_u{20}}},
                      {},
                      {
-                         {aCcaTime, WifiPhyState::IDLE}, // IDLE after aCCATime
+                         {aCcaTimeWithDelta, WifiPhyState::IDLE}, // IDLE after aCcaTimeWithDelta
                          {MicroSeconds(100) - smallDelta,
                           WifiPhyState::IDLE}, // IDLE just before the transmission ends
                          {MicroSeconds(100) + smallDelta,
@@ -1760,15 +1911,17 @@
         delay += Seconds(1);
 
         //----------------------------------------------------------------------------------------------------------------------------------
-        // Verify PHY notifies CCA-BUSY for the S40 as long as a signal above the energy detection
-        // threshold occupies the second 20 MHz subchannel of the S40: 27.3.20.6.4: Any signal
-        // within the secondary 40 MHz channel at or above a threshold of –59 dBm within a period of
-        // aCCATime after the signal arrives at the receiver's antenna(s).
+        // Verify PHY notifies CCA-BUSY for the S40 as long as a signal above the energy
+        // detection threshold occupies the second 20 MHz subchannel of the S40: 27.3.20.6.4:
+        // Any signal within the secondary 40 MHz channel at or above a threshold of –59 dBm
+        // within a period of aCcaTimeWithDelta after the signal arrives at the receiver's
+        // antenna(s).
         Simulator::Schedule(delay,
                             &WifiPhyCcaIndicationTest::LogScenario,
                             this,
                             "Reception of a 20 MHz signal that occupies the second subchannel of "
                             "S40 above ED threshold");
+        m_expectedPer20MhzCcaBusyDurations.at(0).at(3) = MicroSeconds(100);
         ScheduleTest(delay,
                      {{dBm_u{-55},
                        MicroSeconds(0),
@@ -1777,7 +1930,7 @@
                        MHz_u{20}}},
                      {},
                      {
-                         {aCcaTime, WifiPhyState::IDLE}, // IDLE after aCCATime
+                         {aCcaTimeWithDelta, WifiPhyState::IDLE}, // IDLE after aCcaTimeWithDelta
                          {MicroSeconds(100) - smallDelta,
                           WifiPhyState::IDLE}, // IDLE just before the transmission ends
                          {MicroSeconds(100) + smallDelta,
@@ -1786,23 +1939,13 @@
                      {{MicroSeconds(100) - smallDelta,
                        MicroSeconds(100),
                        WIFI_CHANLIST_SECONDARY40,
-                       ((m_channelWidth > 80) ? std::vector<Time>{MicroSeconds(0),
-                                                                  MicroSeconds(0),
-                                                                  MicroSeconds(0),
-                                                                  MicroSeconds(100),
-                                                                  MicroSeconds(0),
-                                                                  MicroSeconds(0),
-                                                                  MicroSeconds(0),
-                                                                  MicroSeconds(0)}
-                                              : std::vector<Time>{MicroSeconds(0),
-                                                                  MicroSeconds(0),
-                                                                  MicroSeconds(0),
-                                                                  MicroSeconds(100)})}});
+                       m_expectedPer20MhzCcaBusyDurations.at(0)}});
         delay += Seconds(1);
+        ResetExpectedPer20MhzCcaBusyDurations();
 
         //----------------------------------------------------------------------------------------------------------------------------------
-        // Verify PHY state stays IDLE for the S40 if a signal below the energy detection threshold
-        // occupies S40
+        // Verify PHY state stays IDLE for the S40 if a signal below the energy detection
+        // threshold occupies S40
         Simulator::Schedule(delay,
                             &WifiPhyCcaIndicationTest::LogScenario,
                             this,
@@ -1812,7 +1955,7 @@
             {{dBm_u{-60}, MicroSeconds(0), MicroSeconds(100), S40_CENTER_FREQUENCY, MHz_u{40}}},
             {},
             {
-                {aCcaTime, WifiPhyState::IDLE}, // IDLE after aCCATime
+                {aCcaTimeWithDelta, WifiPhyState::IDLE}, // IDLE after aCcaTimeWithDelta
                 {MicroSeconds(100) - smallDelta,
                  WifiPhyState::IDLE}, // IDLE just before the transmission ends
                 {MicroSeconds(100) + smallDelta,
@@ -1822,21 +1965,22 @@
         delay += Seconds(1);
 
         //----------------------------------------------------------------------------------------------------------------------------------
-        // Verify PHY notifies CCA-BUSY for the S40 as long as a signal above the energy detection
-        // threshold occupies S40: 27.3.20.6.4: Any signal within the secondary 40 MHz channel at or
-        // above a threshold of –59 dBm within a period of aCCATime after the signal arrives at the
-        // receiver's antenna(s).
+        // Verify PHY notifies CCA-BUSY for the S40 as long as a signal above the energy
+        // detection threshold occupies S40: 27.3.20.6.4: Any signal within the secondary 40 MHz
+        // channel at or above a threshold of –59 dBm within a period of aCcaTimeWithDelta after
+        // the signal arrives at the receiver's antenna(s).
         Simulator::Schedule(delay,
                             &WifiPhyCcaIndicationTest::LogScenario,
                             this,
                             "Reception of a 20 MHz signal that occupies the second subchannel of "
                             "S40 above ED threshold");
+        std::fill_n(m_expectedPer20MhzCcaBusyDurations.at(0).begin() + 2, 2, MicroSeconds(100));
         ScheduleTest(
             delay,
             {{dBm_u{-55}, MicroSeconds(0), MicroSeconds(100), S40_CENTER_FREQUENCY, MHz_u{40}}},
             {},
             {
-                {aCcaTime, WifiPhyState::IDLE}, // IDLE after aCCATime
+                {aCcaTimeWithDelta, WifiPhyState::IDLE}, // IDLE after aCcaTimeWithDelta
                 {MicroSeconds(100) - smallDelta,
                  WifiPhyState::IDLE}, // IDLE just before the transmission ends
                 {MicroSeconds(100) + smallDelta,
@@ -1845,19 +1989,9 @@
             {{MicroSeconds(100) - smallDelta,
               MicroSeconds(100),
               WIFI_CHANLIST_SECONDARY40,
-              ((m_channelWidth > MHz_u{80}) ? std::vector<Time>{MicroSeconds(0),
-                                                                MicroSeconds(0),
-                                                                MicroSeconds(100),
-                                                                MicroSeconds(100),
-                                                                MicroSeconds(0),
-                                                                MicroSeconds(0),
-                                                                MicroSeconds(0),
-                                                                MicroSeconds(0)}
-                                            : std::vector<Time>{MicroSeconds(0),
-                                                                MicroSeconds(0),
-                                                                MicroSeconds(100),
-                                                                MicroSeconds(100)})}});
+              m_expectedPer20MhzCcaBusyDurations.at(0)}});
         delay += Seconds(1);
+        ResetExpectedPer20MhzCcaBusyDurations();
 
         //----------------------------------------------------------------------------------------------------------------------------------
         // Verify PHY state is CCA-BUSY as long as a 80 MHz signal above the energy detection
@@ -1866,12 +2000,13 @@
                             &WifiPhyCcaIndicationTest::LogScenario,
                             this,
                             "Reception of a 80 MHz signal that occupies P80 above ED threshold");
+        std::fill_n(m_expectedPer20MhzCcaBusyDurations.at(0).begin(), 4, MicroSeconds(100));
         ScheduleTest(
             delay,
             {{dBm_u{-55}, MicroSeconds(0), MicroSeconds(100), P80_CENTER_FREQUENCY, MHz_u{80}}},
             {},
             {
-                {aCcaTime, WifiPhyState::CCA_BUSY}, // CCA-BUSY after aCCATime
+                {aCcaTimeWithDelta, WifiPhyState::CCA_BUSY}, // CCA-BUSY after aCcaTimeWithDelta
                 {MicroSeconds(100) - smallDelta,
                  WifiPhyState::CCA_BUSY}, // CCA-BUSY just before the transmission ends
                 {MicroSeconds(100) + smallDelta,
@@ -1880,19 +2015,9 @@
             {{MicroSeconds(100) - smallDelta,
               MicroSeconds(100),
               WIFI_CHANLIST_PRIMARY,
-              ((m_channelWidth > MHz_u{80}) ? std::vector<Time>{MicroSeconds(100),
-                                                                MicroSeconds(100),
-                                                                MicroSeconds(100),
-                                                                MicroSeconds(100),
-                                                                MicroSeconds(0),
-                                                                MicroSeconds(0),
-                                                                MicroSeconds(0),
-                                                                MicroSeconds(0)}
-                                            : std::vector<Time>{MicroSeconds(100),
-                                                                MicroSeconds(100),
-                                                                MicroSeconds(100),
-                                                                MicroSeconds(100)})}});
+              m_expectedPer20MhzCcaBusyDurations.at(0)}});
         delay += Seconds(1);
+        ResetExpectedPer20MhzCcaBusyDurations();
 
         //----------------------------------------------------------------------------------------------------------------------------------
         // Verify PHY notifies CCA-BUSY for the P20 channel while the S40 channel was already in
@@ -1902,6 +2027,9 @@
                             this,
                             "Reception of a 20 MHz signal that occupies S40 followed by the "
                             "reception of another 20 MHz signal that occupies P20");
+        m_expectedPer20MhzCcaBusyDurations.at(0).at(2) = MicroSeconds(100);
+        m_expectedPer20MhzCcaBusyDurations.at(1).at(0) = MicroSeconds(100);
+        m_expectedPer20MhzCcaBusyDurations.at(1).at(2) = MicroSeconds(50);
         ScheduleTest(
             delay,
             {{dBm_u{-55},
@@ -1912,46 +2040,28 @@
              {dBm_u{-55}, MicroSeconds(50), MicroSeconds(100), P20_CENTER_FREQUENCY, MHz_u{20}}},
             {},
             {
-                {aCcaTime, WifiPhyState::IDLE}, // state of primary stays idle after aCCATime
-                {MicroSeconds(50) + aCcaTime,
-                 WifiPhyState::CCA_BUSY}, // state of primary is CCA-BUSY after aCCATime that
-                                          // followed the second transmission
+                {aCcaTimeWithDelta,
+                 WifiPhyState::IDLE}, // state of primary stays idle after aCcaTimeWithDelta
+                {MicroSeconds(50) + aCcaTimeWithDelta,
+                 WifiPhyState::CCA_BUSY}, // state of primary is CCA-BUSY after
+                                          // aCcaTimeWithDelta that followed the second
+                                          // transmission
                 {MicroSeconds(50) + MicroSeconds(100) - smallDelta,
                  WifiPhyState::CCA_BUSY}, // CCA-BUSY just before the transmission ends
                 {MicroSeconds(50) + MicroSeconds(100) + smallDelta,
                  WifiPhyState::IDLE} // IDLE just after the transmission ends
             },
-            {{aCcaTime, // notification upon reception of the first signal
+            {{aCcaTimeWithDelta, // notification upon reception of the first signal
               MicroSeconds(100),
               WIFI_CHANLIST_SECONDARY40,
-              ((m_channelWidth > 80) ? std::vector<Time>{MicroSeconds(0),
-                                                         MicroSeconds(0),
-                                                         MicroSeconds(100),
-                                                         MicroSeconds(0),
-                                                         MicroSeconds(0),
-                                                         MicroSeconds(0),
-                                                         MicroSeconds(0),
-                                                         MicroSeconds(0)}
-                                     : std::vector<Time>{MicroSeconds(0),
-                                                         MicroSeconds(0),
-                                                         MicroSeconds(100),
-                                                         MicroSeconds(0)})},
-             {MicroSeconds(50) + aCcaTime, // notification upon reception of the second signal
+              m_expectedPer20MhzCcaBusyDurations.at(0)},
+             {MicroSeconds(50) +
+                  aCcaTimeWithDelta, // notification upon reception of the second signal
               MicroSeconds(50) + MicroSeconds(100),
               WIFI_CHANLIST_PRIMARY,
-              ((m_channelWidth > 80) ? std::vector<Time>{MicroSeconds(100),
-                                                         MicroSeconds(0),
-                                                         MicroSeconds(50),
-                                                         MicroSeconds(0),
-                                                         MicroSeconds(0),
-                                                         MicroSeconds(0),
-                                                         MicroSeconds(0),
-                                                         MicroSeconds(0)}
-                                     : std::vector<Time>{MicroSeconds(100),
-                                                         MicroSeconds(0),
-                                                         MicroSeconds(50),
-                                                         MicroSeconds(0)})}});
+              m_expectedPer20MhzCcaBusyDurations.at(1)}});
         delay += Seconds(1);
+        ResetExpectedPer20MhzCcaBusyDurations();
 
         //----------------------------------------------------------------------------------------------------------------------------------
         // Verify PHY state stays IDLE but notifies CCA-BUSY for the S20 channel while the S40
@@ -1961,6 +2071,9 @@
                             this,
                             "Reception of a signal that occupies S40 followed by the reception of "
                             "another signal that occupies S20");
+        m_expectedPer20MhzCcaBusyDurations.at(0).at(2) = MicroSeconds(100);
+        m_expectedPer20MhzCcaBusyDurations.at(1).at(1) = MicroSeconds(100);
+        m_expectedPer20MhzCcaBusyDurations.at(1).at(2) = MicroSeconds(50);
         ScheduleTest(
             delay,
             {{dBm_u{-55},
@@ -1971,277 +2084,186 @@
              {dBm_u{-55}, MicroSeconds(50), MicroSeconds(100), S20_CENTER_FREQUENCY, MHz_u{20}}},
             {},
             {
-                {aCcaTime, WifiPhyState::IDLE}, // state of primary stays idle after aCCATime
-                {MicroSeconds(50) + aCcaTime, WifiPhyState::IDLE}, // state of primary stays IDLE
+                {aCcaTimeWithDelta,
+                 WifiPhyState::IDLE}, // state of primary stays idle after aCcaTimeWithDelta
+                {MicroSeconds(50) + aCcaTimeWithDelta,
+                 WifiPhyState::IDLE}, // state of primary stays IDLE
                 {MicroSeconds(50) + MicroSeconds(100) - smallDelta,
                  WifiPhyState::IDLE}, // IDLE just before the transmission ends
                 {MicroSeconds(50) + MicroSeconds(100) + smallDelta,
                  WifiPhyState::IDLE} // IDLE just after the transmission ends
             },
-            {{aCcaTime, // notification upon reception of the first signal
+            {{aCcaTimeWithDelta, // notification upon reception of the first signal
               MicroSeconds(100),
               WIFI_CHANLIST_SECONDARY40,
-              ((m_channelWidth > 80) ? std::vector<Time>{MicroSeconds(0),
-                                                         MicroSeconds(0),
-                                                         MicroSeconds(100),
-                                                         MicroSeconds(0),
-                                                         MicroSeconds(0),
-                                                         MicroSeconds(0),
-                                                         MicroSeconds(0),
-                                                         MicroSeconds(0)}
-                                     : std::vector<Time>{MicroSeconds(0),
-                                                         MicroSeconds(0),
-                                                         MicroSeconds(100),
-                                                         MicroSeconds(0)})},
-             {MicroSeconds(50) + aCcaTime, // notification upon reception of the second signal
+              m_expectedPer20MhzCcaBusyDurations.at(0)},
+             {MicroSeconds(50) +
+                  aCcaTimeWithDelta, // notification upon reception of the second signal
               MicroSeconds(50) + MicroSeconds(100),
               WIFI_CHANLIST_SECONDARY,
-              ((m_channelWidth > 80) ? std::vector<Time>{MicroSeconds(0),
-                                                         MicroSeconds(100),
-                                                         MicroSeconds(50),
-                                                         MicroSeconds(0),
-                                                         MicroSeconds(0),
-                                                         MicroSeconds(0),
-                                                         MicroSeconds(0),
-                                                         MicroSeconds(0)}
-                                     : std::vector<Time>{MicroSeconds(0),
-                                                         MicroSeconds(100),
-                                                         MicroSeconds(50),
-                                                         MicroSeconds(0)})}});
+              m_expectedPer20MhzCcaBusyDurations.at(1)}});
         delay += Seconds(1);
+        ResetExpectedPer20MhzCcaBusyDurations();
 
         //----------------------------------------------------------------------------------------------------------------------------------
-        // Verify PHY state stays IDLE when a 40 MHz HE SU PPDU with received power below the CCA
+        // Verify PHY state stays IDLE when a 40 MHz PPDU with received power below the CCA
         // sensitivity threshold occupies S40
         Simulator::Schedule(
             delay,
             &WifiPhyCcaIndicationTest::LogScenario,
             this,
-            "Reception of a 40 MHz HE PPDU that occupies S40 below CCA sensitivity threshold");
+            "Reception of a 40 MHz PPDU that occupies S40 below CCA sensitivity threshold");
         ScheduleTest(delay,
                      {},
                      {{dBm_u{-75}, MicroSeconds(0), S40_CENTER_FREQUENCY, MHz_u{40}}},
                      {
-                         {aCcaTime, WifiPhyState::IDLE}, // IDLE after aCCATime
-                         {PpduDurations.at(MHz_u{20}) - smallDelta,
+                         {aCcaTimeWithDelta, WifiPhyState::IDLE}, // IDLE after aCcaTimeWithDelta
+                         {ppduDurations.at(MHz_u{40}) - smallDelta,
                           WifiPhyState::IDLE}, // IDLE just before the transmission ends
-                         {PpduDurations.at(MHz_u{20}) + smallDelta,
+                         {ppduDurations.at(MHz_u{40}) + smallDelta,
                           WifiPhyState::IDLE} // IDLE just after the transmission ends
                      },
                      {});
         delay += Seconds(1);
 
         //----------------------------------------------------------------------------------------------------------------------------------
-        // Verify PHY state stays IDLE but CCA-BUSY indication is reported when a 40 MHz HE SU PPDU
+        // Verify PHY state stays IDLE but CCA-BUSY indication is reported when a 40 MHz PPDU
         // with received power above the CCA sensitivity threshold occupies S40
+        const dBm_u rxPower{(m_standard == WIFI_STANDARD_80211ax) ? -70.0 : -67.0};
         Simulator::Schedule(
             delay,
             &WifiPhyCcaIndicationTest::LogScenario,
             this,
-            "Reception of a 40 MHz HE PPDU that occupies S40 above CCA sensitivity threshold");
+            "Reception of a 40 MHz PPDU that occupies S40 above CCA sensitivity threshold");
+        std::fill_n(m_expectedPer20MhzCcaBusyDurations.at(0).begin() + 2,
+                    2,
+                    ppduDurations.at(MHz_u{40}));
+        ScheduleTest(delay,
+                     {},
+                     {{rxPower, MicroSeconds(0), S40_CENTER_FREQUENCY, MHz_u{40}}},
+                     {
+                         {aCcaTimeWithDelta, WifiPhyState::IDLE}, // IDLE after aCcaTimeWithDelta
+                         {ppduDurations.at(MHz_u{40}) - smallDelta,
+                          WifiPhyState::IDLE}, // IDLE just before the transmission ends
+                         {ppduDurations.at(MHz_u{40}) + smallDelta,
+                          WifiPhyState::IDLE} // IDLE just after the transmission ends
+                     },
+                     {{aCcaTimeWithDelta,
+                       ppduDurations.at(MHz_u{40}),
+                       WIFI_CHANLIST_SECONDARY40,
+                       m_expectedPer20MhzCcaBusyDurations.at(0)}});
+        delay += Seconds(1);
+        ResetExpectedPer20MhzCcaBusyDurations();
+
+        //----------------------------------------------------------------------------------------------------------------------------------
+        // Verify PHY state stays IDLE but CCA-BUSY indication is still reported as long as a
+        // signal above the energy detection threshold occupies the S40 while a 80 MHz PPDU
+        // below the CCA sensitivity threshold is received on P80.
+        Simulator::Schedule(delay,
+                            &WifiPhyCcaIndicationTest::LogScenario,
+                            this,
+                            "Reception of a 40 MHz signal that occupies S40 above ED threshold "
+                            "followed by a 80 "
+                            "MHz PPDU that occupies P80 below CCA sensitivity threshold");
+        std::fill_n(m_expectedPer20MhzCcaBusyDurations.at(0).begin() + 2, 2, MicroSeconds(100));
+        std::fill_n(m_expectedPer20MhzCcaBusyDurations.at(1).begin() + 2, 2, MicroSeconds(46));
         ScheduleTest(
             delay,
-            {},
-            {{dBm_u{-70.0}, MicroSeconds(0), S40_CENTER_FREQUENCY, MHz_u{40}}},
+            {{dBm_u{-55},
+              MicroSeconds(0),
+              MicroSeconds(100),
+              S40_CENTER_FREQUENCY,
+              MHz_u{40}}}, // signal on S40 above threshold
+            {{dBm_u{-80},
+              MicroSeconds(50),
+              P80_CENTER_FREQUENCY,
+              MHz_u{80}}}, // PPDU on P80 below threshold
             {
-                {aCcaTime, WifiPhyState::IDLE}, // IDLE after aCCATime
-                {PpduDurations.at(MHz_u{40}) - smallDelta,
-                 WifiPhyState::IDLE}, // IDLE just before the transmission ends
-                {PpduDurations.at(MHz_u{40}) + smallDelta,
-                 WifiPhyState::IDLE} // IDLE just after the transmission ends
+                {MicroSeconds(50) + aCcaTimeWithDelta, WifiPhyState::IDLE}, // PHY state stays IDLE
             },
-            {{aCcaTime,
-              PpduDurations.at(MHz_u{40}),
+            {{MicroSeconds(50) - smallDelta,
+              MicroSeconds(100),
               WIFI_CHANLIST_SECONDARY40,
-              ((m_channelWidth > MHz_u{80}) ? std::vector<Time>{NanoSeconds(0),
-                                                                NanoSeconds(0),
-                                                                PpduDurations.at(MHz_u{40}),
-                                                                PpduDurations.at(MHz_u{40}),
-                                                                NanoSeconds(0),
-                                                                NanoSeconds(0),
-                                                                NanoSeconds(0),
-                                                                NanoSeconds(0)}
-                                            : std::vector<Time>{NanoSeconds(0),
-                                                                NanoSeconds(0),
-                                                                PpduDurations.at(MHz_u{40}),
-                                                                PpduDurations.at(MHz_u{40})})}});
-        delay += Seconds(1);
-
-        //----------------------------------------------------------------------------------------------------------------------------------
-        // Verify PHY state stays IDLE but CCA-BUSY indication is still reported as long as a signal
-        // above the energy detection threshold occupies the S40 while a 80 MHz PPDU below the CCA
-        // sensitivity threshold is received on P80.
-        Simulator::Schedule(
-            delay,
-            &WifiPhyCcaIndicationTest::LogScenario,
-            this,
-            "Reception of a 40 MHz signal that occupies S40 above ED threshold followed by a 80 "
-            "MHz HE PPDU that occupies P80 below CCA sensitivity threshold");
-        ScheduleTest(delay,
-                     {{dBm_u{-55},
-                       MicroSeconds(0),
-                       MicroSeconds(100),
-                       S40_CENTER_FREQUENCY,
-                       MHz_u{40}}}, // signal on S40 above threshold
-                     {{dBm_u{-80},
-                       MicroSeconds(50),
-                       P80_CENTER_FREQUENCY,
-                       MHz_u{80}}}, // PPDU on P80 below threshold
-                     {
-                         {MicroSeconds(50) + aCcaTime, WifiPhyState::IDLE}, // PHY state stays IDLE
-                     },
-                     {{MicroSeconds(50) - smallDelta,
-                       MicroSeconds(100),
-                       WIFI_CHANLIST_SECONDARY40,
-                       ((m_channelWidth > 80) ? std::vector<Time>{MicroSeconds(0),
-                                                                  MicroSeconds(0),
-                                                                  MicroSeconds(100),
-                                                                  MicroSeconds(100),
-                                                                  MicroSeconds(0),
-                                                                  MicroSeconds(0),
-                                                                  MicroSeconds(0),
-                                                                  MicroSeconds(0)}
-                                              : std::vector<Time>{MicroSeconds(0),
-                                                                  MicroSeconds(0),
-                                                                  MicroSeconds(100),
-                                                                  MicroSeconds(100)})},
-                      {MicroSeconds(100) - smallDelta,
-                       MicroSeconds(100),
-                       WIFI_CHANLIST_SECONDARY40,
-                       ((m_channelWidth > 80) ? std::vector<Time>{MicroSeconds(0),
-                                                                  MicroSeconds(0),
-                                                                  MicroSeconds(46),
-                                                                  MicroSeconds(46),
-                                                                  MicroSeconds(0),
-                                                                  MicroSeconds(0),
-                                                                  MicroSeconds(0),
-                                                                  MicroSeconds(0)}
-                                              : std::vector<Time>{MicroSeconds(0),
-                                                                  MicroSeconds(0),
-                                                                  MicroSeconds(46),
-                                                                  MicroSeconds(46)})}});
+              m_expectedPer20MhzCcaBusyDurations.at(0)},
+             {MicroSeconds(100) - smallDelta,
+              MicroSeconds(100),
+              WIFI_CHANLIST_SECONDARY40,
+              m_expectedPer20MhzCcaBusyDurations.at(1)}});
         delay += Seconds(1);
+        ResetExpectedPer20MhzCcaBusyDurations();
     }
     else // 20 or 40 MHz receiver
     {
         //----------------------------------------------------------------------------------------------------------------------------------
-        // Verify PHY notifies CCA-BUSY when a 80 MHz HE SU PPDU with received power above the CCA
+        // Verify PHY notifies CCA-BUSY when a 80 MHz PPDU with received power above the CCA
         // sensitivity threshold occupies P40 The per20Bitmap should indicate idle for all
         // subchannels because received power is below -62 dBm (27.3.20.6.5).
         Simulator::Schedule(delay,
                             &WifiPhyCcaIndicationTest::LogScenario,
                             this,
-                            "Reception of a 80 MHz HE PPDU that occupies the 40 MHz band above CCA "
+                            "Reception of a 80 MHz PPDU that occupies the 40 MHz band above CCA "
                             "sensitivity threshold");
-        ScheduleTest(delay,
-                     {},
-                     {{dBm_u{-70}, MicroSeconds(0), P80_CENTER_FREQUENCY, MHz_u{80}}},
-                     {
-                         {aCcaTime, WifiPhyState::CCA_BUSY}, // CCA_BUSY after aCCATime
-                         {PpduDurations.at(MHz_u{80}) - smallDelta,
-                          WifiPhyState::CCA_BUSY}, // CCA_BUSY just before the transmission ends
-                         {PpduDurations.at(MHz_u{80}) + smallDelta,
-                          WifiPhyState::IDLE} // IDLE just after the transmission ends
-                     },
-                     {{aCcaTime,
-                       MicroSeconds(16),
-                       WIFI_CHANLIST_PRIMARY,
-                       ((m_channelWidth > MHz_u{20})
-                            ? ((m_channelWidth > MHz_u{40})
-                                   ? ((m_channelWidth > MHz_u{80}) ? std::vector<Time>{Seconds(0),
-                                                                                       Seconds(0),
-                                                                                       Seconds(0),
-                                                                                       Seconds(0),
-                                                                                       Seconds(0),
-                                                                                       Seconds(0),
-                                                                                       Seconds(0),
-                                                                                       Seconds(0)}
-                                                                   : std::vector<Time>{Seconds(0),
-                                                                                       Seconds(0),
-                                                                                       Seconds(0),
-                                                                                       Seconds(0)})
-                                   : std::vector<Time>{Seconds(0), Seconds(0)})
-                            : std::vector<Time>{})},
-                      {PpduDurations.at(MHz_u{80}) - smallDelta,
-                       PpduDurations.at(MHz_u{80}),
-                       WIFI_CHANLIST_PRIMARY,
-                       ((m_channelWidth > MHz_u{20})
-                            ? ((m_channelWidth > MHz_u{40})
-                                   ? ((m_channelWidth > MHz_u{80}) ? std::vector<Time>{Seconds(0),
-                                                                                       Seconds(0),
-                                                                                       Seconds(0),
-                                                                                       Seconds(0),
-                                                                                       Seconds(0),
-                                                                                       Seconds(0),
-                                                                                       Seconds(0),
-                                                                                       Seconds(0)}
-                                                                   : std::vector<Time>{Seconds(0),
-                                                                                       Seconds(0),
-                                                                                       Seconds(0),
-                                                                                       Seconds(0)})
-                                   : std::vector<Time>{Seconds(0), Seconds(0)})
-                            : std::vector<Time>{})}});
+        ScheduleTest(
+            delay,
+            {},
+            {{dBm_u{-70}, MicroSeconds(0), P80_CENTER_FREQUENCY, MHz_u{80}}},
+            {
+                {aCcaTimeWithDelta, WifiPhyState::CCA_BUSY}, // CCA_BUSY after aCcaTimeWithDelta
+                {ppduDurations.at(MHz_u{80}) - smallDelta,
+                 WifiPhyState::CCA_BUSY}, // CCA_BUSY just before the transmission ends
+                {ppduDurations.at(MHz_u{80}) + smallDelta,
+                 WifiPhyState::IDLE} // IDLE just after the transmission ends
+            },
+            {{aCcaTimeWithDelta,
+              MicroSeconds(16),
+              WIFI_CHANLIST_PRIMARY,
+              m_expectedPer20MhzCcaBusyDurations.at(0)},
+             {ppduDurations.at(MHz_u{80}) - smallDelta,
+              ppduDurations.at(MHz_u{80}),
+              WIFI_CHANLIST_PRIMARY,
+              m_expectedPer20MhzCcaBusyDurations.at(0)}});
         delay += Seconds(1);
+        ResetExpectedPer20MhzCcaBusyDurations();
 
         //----------------------------------------------------------------------------------------------------------------------------------
-        // Verify PHY notifies CCA-BUSY when a 80 MHz HE SU PPDU with received power above the CCA
+        // Verify PHY notifies CCA-BUSY when a 80 MHz PPDU with received power above the CCA
         // sensitivity threshold occupies P40 The per20Bitmap should indicate CCA_BUSY for all
         // subchannels because received power is above -62 dBm (27.3.20.6.5).
         Simulator::Schedule(delay,
                             &WifiPhyCcaIndicationTest::LogScenario,
                             this,
-                            "Reception of a 80 MHz HE PPDU that occupies the 40 MHz band above CCA "
+                            "Reception of a 80 MHz PPDU that occupies the 40 MHz band above CCA "
                             "sensitivity threshold");
+        if (m_channelWidth > 20)
+        {
+            std::fill_n(m_expectedPer20MhzCcaBusyDurations.at(0).begin(),
+                        2,
+                        ppduDurations.at(80) - aCcaTime);
+            std::fill_n(m_expectedPer20MhzCcaBusyDurations.at(1).begin(),
+                        2,
+                        ppduDurations.at(80) - phyHeaderDuration);
+        }
         ScheduleTest(
             delay,
             {},
             {{dBm_u{-55}, MicroSeconds(0), P80_CENTER_FREQUENCY, MHz_u{80}}},
             {
-                {aCcaTime, WifiPhyState::CCA_BUSY}, // CCA_BUSY after aCCATime
-                {PpduDurations.at(MHz_u{80}) - smallDelta,
+                {aCcaTimeWithDelta, WifiPhyState::CCA_BUSY}, // CCA_BUSY after aCcaTimeWithDelta
+                {ppduDurations.at(MHz_u{80}) - smallDelta,
                  WifiPhyState::CCA_BUSY}, // CCA_BUSY just before the transmission ends
-                {PpduDurations.at(MHz_u{80}) + smallDelta,
+                {ppduDurations.at(MHz_u{80}) + smallDelta,
                  WifiPhyState::IDLE} // IDLE just after the transmission ends
             },
-            {{aCcaTime,
+            {{aCcaTimeWithDelta,
               MicroSeconds(16),
               WIFI_CHANLIST_PRIMARY,
-              ((m_channelWidth > MHz_u{20})
-                   ? ((m_channelWidth > MHz_u{40})
-                          ? ((m_channelWidth > MHz_u{80}) ? std::vector<Time>{NanoSeconds(271200),
-                                                                              NanoSeconds(271200),
-                                                                              NanoSeconds(271200),
-                                                                              NanoSeconds(271200),
-                                                                              NanoSeconds(0),
-                                                                              NanoSeconds(0),
-                                                                              NanoSeconds(0),
-                                                                              NanoSeconds(0)}
-                                                          : std::vector<Time>{NanoSeconds(271200),
-                                                                              NanoSeconds(271200),
-                                                                              NanoSeconds(271200),
-                                                                              NanoSeconds(271200)})
-                          : std::vector<Time>{NanoSeconds(271200), NanoSeconds(271200)})
-                   : std::vector<Time>{})},
-             {PpduDurations.at(MHz_u{80}) - smallDelta,
-              PpduDurations.at(MHz_u{80}),
+              m_expectedPer20MhzCcaBusyDurations.at(0)},
+             {ppduDurations.at(MHz_u{80}) - smallDelta,
+              ppduDurations.at(MHz_u{80}),
               WIFI_CHANLIST_PRIMARY,
-              ((m_channelWidth > 20)
-                   ? ((m_channelWidth > 40)
-                          ? ((m_channelWidth > 80) ? std::vector<Time>{NanoSeconds(243200),
-                                                                       NanoSeconds(243200),
-                                                                       NanoSeconds(243200),
-                                                                       NanoSeconds(243200),
-                                                                       NanoSeconds(0),
-                                                                       NanoSeconds(0),
-                                                                       NanoSeconds(0),
-                                                                       NanoSeconds(0)}
-                                                   : std::vector<Time>{NanoSeconds(243200),
-                                                                       NanoSeconds(243200),
-                                                                       NanoSeconds(243200),
-                                                                       NanoSeconds(243200)})
-                          : std::vector<Time>{NanoSeconds(243200), NanoSeconds(243200)})
-                   : std::vector<Time>{})}});
+              m_expectedPer20MhzCcaBusyDurations.at(1)}});
         delay += Seconds(1);
+        ResetExpectedPer20MhzCcaBusyDurations();
 
         //----------------------------------------------------------------------------------------------------------------------------------
         // Verify PHY state stays IDLE and no CCA-BUSY indication is reported when a signal not
@@ -2250,15 +2272,15 @@
             delay,
             &WifiPhyCcaIndicationTest::LogScenario,
             this,
-            "Reception of a 40 MHz HE PPDU that does not occupy the operational channel");
+            "Reception of a 40 MHz PPDU that does not occupy the operational channel");
         ScheduleTest(delay,
                      {},
                      {{dBm_u{-50}, MicroSeconds(0), S40_CENTER_FREQUENCY, MHz_u{40}}},
                      {
-                         {aCcaTime, WifiPhyState::IDLE}, // IDLE after aCCATime
-                         {PpduDurations.at(MHz_u{20}) - smallDelta,
+                         {aCcaTimeWithDelta, WifiPhyState::IDLE}, // IDLE after aCcaTimeWithDelta
+                         {ppduDurations.at(MHz_u{20}) - smallDelta,
                           WifiPhyState::IDLE}, // IDLE just before the transmission ends
-                         {PpduDurations.at(MHz_u{20}) + smallDelta,
+                         {ppduDurations.at(MHz_u{20}) + smallDelta,
                           WifiPhyState::IDLE} // IDLE just after the transmission ends
                      },
                      {});
@@ -2268,8 +2290,8 @@
     if (m_channelWidth > MHz_u{80})
     {
         //----------------------------------------------------------------------------------------------------------------------------------
-        // Verify PHY state stays IDLE and no CCA-BUSY indication is reported if a signal below the
-        // energy detection threshold occupies the first 20 MHz subchannel of the S80
+        // Verify PHY state stays IDLE and no CCA-BUSY indication is reported if a signal below
+        // the energy detection threshold occupies the first 20 MHz subchannel of the S80
         Simulator::Schedule(delay,
                             &WifiPhyCcaIndicationTest::LogScenario,
                             this,
@@ -2283,7 +2305,7 @@
                        MHz_u{20}}},
                      {},
                      {
-                         {aCcaTime, WifiPhyState::IDLE}, // IDLE after aCCATime
+                         {aCcaTimeWithDelta, WifiPhyState::IDLE}, // IDLE after aCcaTimeWithDelta
                          {MicroSeconds(100) - smallDelta,
                           WifiPhyState::IDLE}, // IDLE just before the transmission ends
                          {MicroSeconds(100) + smallDelta,
@@ -2294,13 +2316,14 @@
 
         //----------------------------------------------------------------------------------------------------------------------------------
         // Verify PHY state stays IDLE and CCA-BUSY indication is reported if a signal above the
-        // energy detection threshold occupies the first 20 MHz subchannel of the S80 27.3.20.6.4:
-        // Any signal within the secondary 80 MHz channel at or above –56 dBm.
+        // energy detection threshold occupies the first 20 MHz subchannel of the
+        // S80 27.3.20.6.4: Any signal within the secondary 80 MHz channel at or above –56 dBm.
         Simulator::Schedule(delay,
                             &WifiPhyCcaIndicationTest::LogScenario,
                             this,
                             "Reception of a 20 MHz signal that occupies the first subchannel of "
                             "S80 above ED threshold");
+        m_expectedPer20MhzCcaBusyDurations.at(0).at(4) = MicroSeconds(100);
         ScheduleTest(delay,
                      {{dBm_u{-55},
                        MicroSeconds(0),
@@ -2309,7 +2332,7 @@
                        MHz_u{20}}},
                      {},
                      {
-                         {aCcaTime, WifiPhyState::IDLE}, // IDLE after aCCATime
+                         {aCcaTimeWithDelta, WifiPhyState::IDLE}, // IDLE after aCcaTimeWithDelta
                          {MicroSeconds(100) - smallDelta,
                           WifiPhyState::IDLE}, // IDLE just before the transmission ends
                          {MicroSeconds(100) + smallDelta,
@@ -2318,19 +2341,13 @@
                      {{MicroSeconds(100) - smallDelta,
                        MicroSeconds(100),
                        WIFI_CHANLIST_SECONDARY80,
-                       std::vector<Time>{MicroSeconds(0),
-                                         MicroSeconds(0),
-                                         MicroSeconds(0),
-                                         MicroSeconds(0),
-                                         MicroSeconds(100),
-                                         MicroSeconds(0),
-                                         MicroSeconds(0),
-                                         MicroSeconds(0)}}});
+                       m_expectedPer20MhzCcaBusyDurations.at(0)}});
         delay += Seconds(1);
+        ResetExpectedPer20MhzCcaBusyDurations();
 
         //----------------------------------------------------------------------------------------------------------------------------------
-        // Verify PHY state stays IDLE and no CCA-BUSY indication is reported if a signal below the
-        // energy detection threshold occupies the second 20 MHz subchannel of the S80
+        // Verify PHY state stays IDLE and no CCA-BUSY indication is reported if a signal below
+        // the energy detection threshold occupies the second 20 MHz subchannel of the S80
         Simulator::Schedule(delay,
                             &WifiPhyCcaIndicationTest::LogScenario,
                             this,
@@ -2344,7 +2361,7 @@
                        MHz_u{20}}},
                      {},
                      {
-                         {aCcaTime, WifiPhyState::IDLE}, // IDLE after aCCATime
+                         {aCcaTimeWithDelta, WifiPhyState::IDLE}, // IDLE after aCcaTimeWithDelta
                          {MicroSeconds(100) - smallDelta,
                           WifiPhyState::IDLE}, // IDLE just before the transmission ends
                          {MicroSeconds(100) + smallDelta,
@@ -2355,13 +2372,14 @@
 
         //----------------------------------------------------------------------------------------------------------------------------------
         // Verify PHY state stays IDLE and CCA-BUSY indication is reported if a signal above the
-        // energy detection threshold occupies the second 20 MHz subchannel of the S80 27.3.20.6.4:
-        // Any signal within the secondary 80 MHz channel at or above –56 dBm.
+        // energy detection threshold occupies the second 20 MHz subchannel of the
+        // S80 27.3.20.6.4: Any signal within the secondary 80 MHz channel at or above –56 dBm.
         Simulator::Schedule(delay,
                             &WifiPhyCcaIndicationTest::LogScenario,
                             this,
                             "Reception of a 20 MHz signal that occupies the second subchannel of "
                             "S80 above ED threshold");
+        m_expectedPer20MhzCcaBusyDurations.at(0).at(5) = MicroSeconds(100);
         ScheduleTest(delay,
                      {{dBm_u{-55},
                        MicroSeconds(0),
@@ -2370,7 +2388,7 @@
                        MHz_u{20}}},
                      {},
                      {
-                         {aCcaTime, WifiPhyState::IDLE}, // IDLE after aCCATime
+                         {aCcaTimeWithDelta, WifiPhyState::IDLE}, // IDLE after aCcaTimeWithDelta
                          {MicroSeconds(100) - smallDelta,
                           WifiPhyState::IDLE}, // IDLE just before the transmission ends
                          {MicroSeconds(100) + smallDelta,
@@ -2379,19 +2397,13 @@
                      {{MicroSeconds(100) - smallDelta,
                        MicroSeconds(100),
                        WIFI_CHANLIST_SECONDARY80,
-                       std::vector<Time>{MicroSeconds(0),
-                                         MicroSeconds(0),
-                                         MicroSeconds(0),
-                                         MicroSeconds(0),
-                                         MicroSeconds(0),
-                                         MicroSeconds(100),
-                                         MicroSeconds(0),
-                                         MicroSeconds(0)}}});
+                       m_expectedPer20MhzCcaBusyDurations.at(0)}});
         delay += Seconds(1);
+        ResetExpectedPer20MhzCcaBusyDurations();
 
         //----------------------------------------------------------------------------------------------------------------------------------
-        // Verify PHY state stays IDLE and no CCA-BUSY indication is reported if a signal below the
-        // energy detection threshold occupies the third 20 MHz subchannel of the S80
+        // Verify PHY state stays IDLE and no CCA-BUSY indication is reported if a signal below
+        // the energy detection threshold occupies the third 20 MHz subchannel of the S80
         Simulator::Schedule(delay,
                             &WifiPhyCcaIndicationTest::LogScenario,
                             this,
@@ -2405,7 +2417,7 @@
                        MHz_u{20}}},
                      {},
                      {
-                         {aCcaTime, WifiPhyState::IDLE}, // IDLE after aCCATime
+                         {aCcaTimeWithDelta, WifiPhyState::IDLE}, // IDLE after aCcaTimeWithDelta
                          {MicroSeconds(100) - smallDelta,
                           WifiPhyState::IDLE}, // IDLE just before the transmission ends
                          {MicroSeconds(100) + smallDelta,
@@ -2416,13 +2428,14 @@
 
         //----------------------------------------------------------------------------------------------------------------------------------
         // Verify PHY state stays IDLE and CCA-BUSY indication is reported if a signal above the
-        // energy detection threshold occupies the third 20 MHz subchannel of the S80 27.3.20.6.4:
-        // Any signal within the secondary 80 MHz channel at or above –56 dBm.
+        // energy detection threshold occupies the third 20 MHz subchannel of the
+        // S80 27.3.20.6.4: Any signal within the secondary 80 MHz channel at or above –56 dBm.
         Simulator::Schedule(delay,
                             &WifiPhyCcaIndicationTest::LogScenario,
                             this,
                             "Reception of a 20 MHz signal that occupies the third subchannel of "
                             "S80 above ED threshold");
+        m_expectedPer20MhzCcaBusyDurations.at(0).at(6) = MicroSeconds(100);
         ScheduleTest(delay,
                      {{dBm_u{-55},
                        MicroSeconds(0),
@@ -2431,7 +2444,7 @@
                        MHz_u{20}}},
                      {},
                      {
-                         {aCcaTime, WifiPhyState::IDLE}, // IDLE after aCCATime
+                         {aCcaTimeWithDelta, WifiPhyState::IDLE}, // IDLE after aCcaTimeWithDelta
                          {MicroSeconds(100) - smallDelta,
                           WifiPhyState::IDLE}, // IDLE just before the transmission ends
                          {MicroSeconds(100) + smallDelta,
@@ -2440,19 +2453,13 @@
                      {{MicroSeconds(100) - smallDelta,
                        MicroSeconds(100),
                        WIFI_CHANLIST_SECONDARY80,
-                       std::vector<Time>{MicroSeconds(0),
-                                         MicroSeconds(0),
-                                         MicroSeconds(0),
-                                         MicroSeconds(0),
-                                         MicroSeconds(0),
-                                         MicroSeconds(0),
-                                         MicroSeconds(100),
-                                         MicroSeconds(0)}}});
+                       m_expectedPer20MhzCcaBusyDurations.at(0)}});
         delay += Seconds(1);
+        ResetExpectedPer20MhzCcaBusyDurations();
 
         //----------------------------------------------------------------------------------------------------------------------------------
-        // Verify PHY state stays IDLE and no CCA-BUSY indication is reported if a signal below the
-        // energy detection threshold occupies the fourth 20 MHz subchannel of the S80
+        // Verify PHY state stays IDLE and no CCA-BUSY indication is reported if a signal below
+        // the energy detection threshold occupies the fourth 20 MHz subchannel of the S80
         Simulator::Schedule(delay,
                             &WifiPhyCcaIndicationTest::LogScenario,
                             this,
@@ -2466,7 +2473,7 @@
                        MHz_u{20}}},
                      {},
                      {
-                         {aCcaTime, WifiPhyState::IDLE}, // IDLE after aCCATime
+                         {aCcaTimeWithDelta, WifiPhyState::IDLE}, // IDLE after aCcaTimeWithDelta
                          {MicroSeconds(100) - smallDelta,
                           WifiPhyState::IDLE}, // IDLE just before the transmission ends
                          {MicroSeconds(100) + smallDelta,
@@ -2477,13 +2484,14 @@
 
         //----------------------------------------------------------------------------------------------------------------------------------
         // Verify PHY state stays IDLE and CCA-BUSY indication is reported if a signal above the
-        // energy detection threshold occupies the fourth 20 MHz subchannel of the S80 27.3.20.6.4:
-        // Any signal within the secondary 80 MHz channel at or above –56 dBm.
+        // energy detection threshold occupies the fourth 20 MHz subchannel of the
+        // S80 27.3.20.6.4: Any signal within the secondary 80 MHz channel at or above –56 dBm.
         Simulator::Schedule(delay,
                             &WifiPhyCcaIndicationTest::LogScenario,
                             this,
                             "Reception of a 20 MHz signal that occupies the fourth subchannel of "
                             "S80 above ED threshold");
+        m_expectedPer20MhzCcaBusyDurations.at(0).at(7) = MicroSeconds(100);
         ScheduleTest(delay,
                      {{dBm_u{-55},
                        MicroSeconds(0),
@@ -2492,7 +2500,7 @@
                        MHz_u{20}}},
                      {},
                      {
-                         {aCcaTime, WifiPhyState::IDLE}, // IDLE after aCCATime
+                         {aCcaTimeWithDelta, WifiPhyState::IDLE}, // IDLE after aCcaTimeWithDelta
                          {MicroSeconds(100) - smallDelta,
                           WifiPhyState::IDLE}, // IDLE just before the transmission ends
                          {MicroSeconds(100) + smallDelta,
@@ -2501,19 +2509,14 @@
                      {{MicroSeconds(100) - smallDelta,
                        MicroSeconds(100),
                        WIFI_CHANLIST_SECONDARY80,
-                       std::vector<Time>{MicroSeconds(0),
-                                         MicroSeconds(0),
-                                         MicroSeconds(0),
-                                         MicroSeconds(0),
-                                         MicroSeconds(0),
-                                         MicroSeconds(0),
-                                         MicroSeconds(0),
-                                         MicroSeconds(100)}}});
+                       m_expectedPer20MhzCcaBusyDurations.at(0)}});
         delay += Seconds(1);
+        ResetExpectedPer20MhzCcaBusyDurations();
 
         //----------------------------------------------------------------------------------------------------------------------------------
-        // Verify PHY state stays IDLE and no CCA-BUSY indication is reported if a signal below the
-        // energy detection threshold occupies the first and second 20 MHz subchannels of the S80
+        // Verify PHY state stays IDLE and no CCA-BUSY indication is reported if a signal below
+        // the energy detection threshold occupies the first and second 20 MHz subchannels of
+        // the S80
         Simulator::Schedule(delay,
                             &WifiPhyCcaIndicationTest::LogScenario,
                             this,
@@ -2527,7 +2530,7 @@
                        MHz_u{40}}},
                      {},
                      {
-                         {aCcaTime, WifiPhyState::IDLE}, // IDLE after aCCATime
+                         {aCcaTimeWithDelta, WifiPhyState::IDLE}, // IDLE after aCcaTimeWithDelta
                          {MicroSeconds(100) - smallDelta,
                           WifiPhyState::IDLE}, // IDLE just before the transmission ends
                          {MicroSeconds(100) + smallDelta,
@@ -2538,13 +2541,14 @@
 
         //----------------------------------------------------------------------------------------------------------------------------------
         // Verify PHY state stays IDLE and CCA-BUSY indication is reported if a signal above the
-        // energy detection threshold occupies the first and second 20 MHz subchannels of the S80
-        // 27.3.20.6.4: Any signal within the secondary 80 MHz channel at or above –56 dBm.
+        // energy detection threshold occupies the first and second 20 MHz subchannels of the
+        // S80 27.3.20.6.4: Any signal within the secondary 80 MHz channel at or above –56 dBm.
         Simulator::Schedule(delay,
                             &WifiPhyCcaIndicationTest::LogScenario,
                             this,
                             "Reception of a 40 MHz signal that occupies the first and second "
                             "subchannels of S80 above ED threshold");
+        std::fill_n(m_expectedPer20MhzCcaBusyDurations.at(0).begin() + 4, 2, MicroSeconds(100));
         ScheduleTest(delay,
                      {{dBm_u{-55},
                        MicroSeconds(0),
@@ -2553,7 +2557,7 @@
                        MHz_u{40}}},
                      {},
                      {
-                         {aCcaTime, WifiPhyState::IDLE}, // IDLE after aCCATime
+                         {aCcaTimeWithDelta, WifiPhyState::IDLE}, // IDLE after aCcaTimeWithDelta
                          {MicroSeconds(100) - smallDelta,
                           WifiPhyState::IDLE}, // IDLE just before the transmission ends
                          {MicroSeconds(100) + smallDelta,
@@ -2562,19 +2566,14 @@
                      {{MicroSeconds(100) - smallDelta,
                        MicroSeconds(100),
                        WIFI_CHANLIST_SECONDARY80,
-                       std::vector<Time>{MicroSeconds(0),
-                                         MicroSeconds(0),
-                                         MicroSeconds(0),
-                                         MicroSeconds(0),
-                                         MicroSeconds(100),
-                                         MicroSeconds(100),
-                                         MicroSeconds(0),
-                                         MicroSeconds(0)}}});
+                       m_expectedPer20MhzCcaBusyDurations.at(0)}});
         delay += Seconds(1);
+        ResetExpectedPer20MhzCcaBusyDurations();
 
         //----------------------------------------------------------------------------------------------------------------------------------
-        // Verify PHY state stays IDLE and no CCA-BUSY indication is reported if a signal below the
-        // energy detection threshold occupies the third and fourth 20 MHz subchannels of the S80
+        // Verify PHY state stays IDLE and no CCA-BUSY indication is reported if a signal below
+        // the energy detection threshold occupies the third and fourth 20 MHz subchannels of
+        // the S80
         Simulator::Schedule(delay,
                             &WifiPhyCcaIndicationTest::LogScenario,
                             this,
@@ -2588,7 +2587,7 @@
                        MHz_u{40}}},
                      {},
                      {
-                         {aCcaTime, WifiPhyState::IDLE}, // IDLE after aCCATime
+                         {aCcaTimeWithDelta, WifiPhyState::IDLE}, // IDLE after aCcaTimeWithDelta
                          {MicroSeconds(100) - smallDelta,
                           WifiPhyState::IDLE}, // IDLE just before the transmission ends
                          {MicroSeconds(100) + smallDelta,
@@ -2599,13 +2598,14 @@
 
         //----------------------------------------------------------------------------------------------------------------------------------
         // Verify PHY state stays IDLE and CCA-BUSY indication is reported if a signal above the
-        // energy detection threshold occupies the third and fourth 20 MHz subchannels of the S80
-        // 27.3.20.6.4: Any signal within the secondary 80 MHz channel at or above –56 dBm.
+        // energy detection threshold occupies the third and fourth 20 MHz subchannels of the
+        // S80 27.3.20.6.4: Any signal within the secondary 80 MHz channel at or above –56 dBm.
         Simulator::Schedule(delay,
                             &WifiPhyCcaIndicationTest::LogScenario,
                             this,
                             "Reception of a 40 MHz signal that occupies the third and fourth "
                             "subchannels of S80 above ED threshold");
+        std::fill_n(m_expectedPer20MhzCcaBusyDurations.at(0).begin() + 6, 2, MicroSeconds(100));
         ScheduleTest(delay,
                      {{dBm_u{-55},
                        MicroSeconds(0),
@@ -2614,7 +2614,7 @@
                        MHz_u{40}}},
                      {},
                      {
-                         {aCcaTime, WifiPhyState::IDLE}, // IDLE after aCCATime
+                         {aCcaTimeWithDelta, WifiPhyState::IDLE}, // IDLE after aCcaTimeWithDelta
                          {MicroSeconds(100) - smallDelta,
                           WifiPhyState::IDLE}, // IDLE just before the transmission ends
                          {MicroSeconds(100) + smallDelta,
@@ -2623,19 +2623,13 @@
                      {{MicroSeconds(100) - smallDelta,
                        MicroSeconds(100),
                        WIFI_CHANLIST_SECONDARY80,
-                       std::vector<Time>{MicroSeconds(0),
-                                         MicroSeconds(0),
-                                         MicroSeconds(0),
-                                         MicroSeconds(0),
-                                         MicroSeconds(0),
-                                         MicroSeconds(0),
-                                         MicroSeconds(100),
-                                         MicroSeconds(100)}}});
+                       m_expectedPer20MhzCcaBusyDurations.at(0)}});
         delay += Seconds(1);
+        ResetExpectedPer20MhzCcaBusyDurations();
 
         //----------------------------------------------------------------------------------------------------------------------------------
-        // Verify PHY state stays IDLE and no CCA-BUSY indication is reported if a signal below the
-        // energy detection threshold occupies the S80
+        // Verify PHY state stays IDLE and no CCA-BUSY indication is reported if a signal below
+        // the energy detection threshold occupies the S80
         Simulator::Schedule(delay,
                             &WifiPhyCcaIndicationTest::LogScenario,
                             this,
@@ -2645,7 +2639,7 @@
             {{dBm_u{-65}, MicroSeconds(0), MicroSeconds(100), S80_CENTER_FREQUENCY, MHz_u{80}}},
             {},
             {
-                {aCcaTime, WifiPhyState::IDLE}, // IDLE after aCCATime
+                {aCcaTimeWithDelta, WifiPhyState::IDLE}, // IDLE after aCcaTimeWithDelta
                 {MicroSeconds(100) - smallDelta,
                  WifiPhyState::IDLE}, // IDLE just before the transmission ends
                 {MicroSeconds(100) + smallDelta,
@@ -2656,18 +2650,19 @@
 
         //----------------------------------------------------------------------------------------------------------------------------------
         // Verify PHY state stays IDLE and CCA-BUSY indication is reported if a signal above the
-        // energy detection threshold occupies the S80 27.3.20.6.4: Any signal within the secondary
-        // 80 MHz channel at or above –56 dBm.
+        // energy detection threshold occupies the S80 27.3.20.6.4: Any signal within the
+        // secondary 80 MHz channel at or above –56 dBm.
         Simulator::Schedule(delay,
                             &WifiPhyCcaIndicationTest::LogScenario,
                             this,
                             "Reception of a 80 MHz signal that occupies S80 above ED threshold");
+        std::fill_n(m_expectedPer20MhzCcaBusyDurations.at(0).begin() + 4, 4, MicroSeconds(100));
         ScheduleTest(
             delay,
             {{dBm_u{-55}, MicroSeconds(0), MicroSeconds(100), S80_CENTER_FREQUENCY, MHz_u{80}}},
             {},
             {
-                {aCcaTime, WifiPhyState::IDLE}, // IDLE after aCCATime
+                {aCcaTimeWithDelta, WifiPhyState::IDLE}, // IDLE after aCcaTimeWithDelta
                 {MicroSeconds(100) - smallDelta,
                  WifiPhyState::IDLE}, // IDLE just before the transmission ends
                 {MicroSeconds(100) + smallDelta,
@@ -2676,15 +2671,9 @@
             {{MicroSeconds(100) - smallDelta,
               MicroSeconds(100),
               WIFI_CHANLIST_SECONDARY80,
-              std::vector<Time>{MicroSeconds(0),
-                                MicroSeconds(0),
-                                MicroSeconds(0),
-                                MicroSeconds(0),
-                                MicroSeconds(100),
-                                MicroSeconds(100),
-                                MicroSeconds(100),
-                                MicroSeconds(100)}}});
+              m_expectedPer20MhzCcaBusyDurations.at(0)}});
         delay += Seconds(1);
+        ResetExpectedPer20MhzCcaBusyDurations();
 
         //----------------------------------------------------------------------------------------------------------------------------------
         // Verify PHY state stays IDLE as long as a 160 MHz signal below the energy detection
@@ -2699,7 +2688,7 @@
             {{dBm_u{-55}, MicroSeconds(0), MicroSeconds(100), P160_CENTER_FREQUENCY, MHz_u{160}}},
             {},
             {
-                {aCcaTime, WifiPhyState::IDLE}, // IDLE after aCCATime
+                {aCcaTimeWithDelta, WifiPhyState::IDLE}, // IDLE after aCcaTimeWithDelta
                 {MicroSeconds(100) - smallDelta,
                  WifiPhyState::IDLE}, // IDLE just before the transmission ends
                 {MicroSeconds(100) + smallDelta,
@@ -2717,12 +2706,13 @@
             &WifiPhyCcaIndicationTest::LogScenario,
             this,
             "Reception of a 160 MHz signal that occupies the whole band above ED threshold");
+        std::fill_n(m_expectedPer20MhzCcaBusyDurations.at(0).begin(), 8, MicroSeconds(100));
         ScheduleTest(
             delay,
             {{dBm_u{-50}, MicroSeconds(0), MicroSeconds(100), P160_CENTER_FREQUENCY, MHz_u{160}}},
             {},
             {
-                {aCcaTime, WifiPhyState::CCA_BUSY}, // CCA-BUSY after aCCATime
+                {aCcaTimeWithDelta, WifiPhyState::CCA_BUSY}, // CCA-BUSY after aCcaTimeWithDelta
                 {MicroSeconds(100) - smallDelta,
                  WifiPhyState::CCA_BUSY}, // CCA-BUSY just before the transmission ends
                 {MicroSeconds(100) + smallDelta,
@@ -2731,15 +2721,9 @@
             {{MicroSeconds(100) - smallDelta,
               MicroSeconds(100),
               WIFI_CHANLIST_PRIMARY,
-              std::vector<Time>{MicroSeconds(100),
-                                MicroSeconds(100),
-                                MicroSeconds(100),
-                                MicroSeconds(100),
-                                MicroSeconds(100),
-                                MicroSeconds(100),
-                                MicroSeconds(100),
-                                MicroSeconds(100)}}});
+              m_expectedPer20MhzCcaBusyDurations.at(0)}});
         delay += Seconds(1);
+        ResetExpectedPer20MhzCcaBusyDurations();
 
         //----------------------------------------------------------------------------------------------------------------------------------
         // Verify PHY notifies CCA-BUSY for the P20 channel while the S80 channel was already in
@@ -2749,6 +2733,9 @@
                             this,
                             "Reception of a 20 MHz signal that occupies S80 followed by the "
                             "reception of another 20 MHz signal that occupies P20");
+        m_expectedPer20MhzCcaBusyDurations.at(0).at(6) = MicroSeconds(100);
+        m_expectedPer20MhzCcaBusyDurations.at(1).at(0) = MicroSeconds(100);
+        m_expectedPer20MhzCcaBusyDurations.at(1).at(6) = MicroSeconds(50);
         ScheduleTest(
             delay,
             {{dBm_u{-55},
@@ -2759,38 +2746,28 @@
              {dBm_u{-55}, MicroSeconds(50), MicroSeconds(100), P20_CENTER_FREQUENCY, MHz_u{20}}},
             {},
             {
-                {aCcaTime, WifiPhyState::IDLE}, // state of primary stays idle after aCCATime
-                {MicroSeconds(50) + aCcaTime,
-                 WifiPhyState::CCA_BUSY}, // state of primary is CCA-BUSY after aCCATime that
-                                          // followed the second transmission
+                {aCcaTimeWithDelta,
+                 WifiPhyState::IDLE}, // state of primary stays idle after aCcaTimeWithDelta
+                {MicroSeconds(50) + aCcaTimeWithDelta,
+                 WifiPhyState::CCA_BUSY}, // state of primary is CCA-BUSY after
+                                          // aCcaTimeWithDelta that followed the second
+                                          // transmission
                 {MicroSeconds(50) + MicroSeconds(100) - smallDelta,
                  WifiPhyState::CCA_BUSY}, // CCA-BUSY just before the transmission ends
                 {MicroSeconds(50) + MicroSeconds(100) + smallDelta,
                  WifiPhyState::IDLE} // IDLE just after the transmission ends
             },
-            {{aCcaTime, // notification upon reception of the first signal
+            {{aCcaTimeWithDelta, // notification upon reception of the first signal
               MicroSeconds(100),
               WIFI_CHANLIST_SECONDARY80,
-              std::vector<Time>{MicroSeconds(0),
-                                MicroSeconds(0),
-                                MicroSeconds(0),
-                                MicroSeconds(0),
-                                MicroSeconds(0),
-                                MicroSeconds(0),
-                                MicroSeconds(100),
-                                MicroSeconds(0)}},
-             {MicroSeconds(50) + aCcaTime, // notification upon reception of the second signal
+              m_expectedPer20MhzCcaBusyDurations.at(0)},
+             {MicroSeconds(50) +
+                  aCcaTimeWithDelta, // notification upon reception of the second signal
               MicroSeconds(50) + MicroSeconds(100),
               WIFI_CHANLIST_PRIMARY,
-              std::vector<Time>{MicroSeconds(100),
-                                MicroSeconds(0),
-                                MicroSeconds(00),
-                                MicroSeconds(0),
-                                MicroSeconds(0),
-                                MicroSeconds(0),
-                                MicroSeconds(50),
-                                MicroSeconds(0)}}});
+              m_expectedPer20MhzCcaBusyDurations.at(1)}});
         delay += Seconds(1);
+        ResetExpectedPer20MhzCcaBusyDurations();
 
         //----------------------------------------------------------------------------------------------------------------------------------
         // Verify PHY state stays IDLE but notifies CCA-BUSY for the S40 channel while the S80
@@ -2800,6 +2777,9 @@
                             this,
                             "Reception of a signal that occupies S80 followed by the reception of "
                             "another signal that occupies S40");
+        m_expectedPer20MhzCcaBusyDurations.at(0).at(7) = MicroSeconds(100);
+        m_expectedPer20MhzCcaBusyDurations.at(1).at(2) = MicroSeconds(100);
+        m_expectedPer20MhzCcaBusyDurations.at(1).at(7) = MicroSeconds(50);
         ScheduleTest(
             delay,
             {{dBm_u{-55},
@@ -2814,36 +2794,26 @@
               MHz_u{20}}},
             {},
             {
-                {aCcaTime, WifiPhyState::IDLE}, // state of primary stays idle after aCCATime
-                {MicroSeconds(50) + aCcaTime, WifiPhyState::IDLE}, // state of primary stays IDLE
+                {aCcaTimeWithDelta,
+                 WifiPhyState::IDLE}, // state of primary stays idle after aCcaTimeWithDelta
+                {MicroSeconds(50) + aCcaTimeWithDelta,
+                 WifiPhyState::IDLE}, // state of primary stays IDLE
                 {MicroSeconds(50) + MicroSeconds(100) - smallDelta,
                  WifiPhyState::IDLE}, // IDLE just before the transmission ends
                 {MicroSeconds(50) + MicroSeconds(100) + smallDelta,
                  WifiPhyState::IDLE} // IDLE just after the transmission ends
             },
-            {{aCcaTime, // notification upon reception of the first signal
+            {{aCcaTimeWithDelta, // notification upon reception of the first signal
               MicroSeconds(100),
               WIFI_CHANLIST_SECONDARY80,
-              std::vector<Time>{MicroSeconds(0),
-                                MicroSeconds(0),
-                                MicroSeconds(0),
-                                MicroSeconds(0),
-                                MicroSeconds(0),
-                                MicroSeconds(0),
-                                MicroSeconds(0),
-                                MicroSeconds(100)}},
-             {MicroSeconds(50) + aCcaTime, // notification upon reception of the second signal
+              m_expectedPer20MhzCcaBusyDurations.at(0)},
+             {MicroSeconds(50) +
+                  aCcaTimeWithDelta, // notification upon reception of the second signal
               MicroSeconds(50) + MicroSeconds(100),
               WIFI_CHANLIST_SECONDARY40,
-              std::vector<Time>{MicroSeconds(0),
-                                MicroSeconds(0),
-                                MicroSeconds(100),
-                                MicroSeconds(0),
-                                MicroSeconds(0),
-                                MicroSeconds(0),
-                                MicroSeconds(0),
-                                MicroSeconds(50)}}});
+              m_expectedPer20MhzCcaBusyDurations.at(1)}});
         delay += Seconds(1);
+        ResetExpectedPer20MhzCcaBusyDurations();
 
         //----------------------------------------------------------------------------------------------------------------------------------
         // Verify PHY state stays IDLE but notifies CCA-BUSY for the S20 channel while the S80
@@ -2853,6 +2823,9 @@
                             this,
                             "Reception of a signal that occupies S80 followed by the reception of "
                             "another signal that occupies S20");
+        m_expectedPer20MhzCcaBusyDurations.at(0).at(4) = MicroSeconds(100);
+        m_expectedPer20MhzCcaBusyDurations.at(1).at(1) = MicroSeconds(100);
+        m_expectedPer20MhzCcaBusyDurations.at(1).at(4) = MicroSeconds(50);
         ScheduleTest(
             delay,
             {{dBm_u{-55},
@@ -2863,172 +2836,938 @@
              {dBm_u{-55}, MicroSeconds(50), MicroSeconds(100), S20_CENTER_FREQUENCY, MHz_u{20}}},
             {},
             {
-                {aCcaTime, WifiPhyState::IDLE}, // state of primary stays idle after aCCATime
-                {MicroSeconds(50) + aCcaTime, WifiPhyState::IDLE}, // state of primary stays IDLE
+                {aCcaTimeWithDelta,
+                 WifiPhyState::IDLE}, // state of primary stays idle after aCcaTimeWithDelta
+                {MicroSeconds(50) + aCcaTimeWithDelta,
+                 WifiPhyState::IDLE}, // state of primary stays IDLE
                 {MicroSeconds(50) + MicroSeconds(100) - smallDelta,
                  WifiPhyState::IDLE}, // IDLE just before the transmission ends
                 {MicroSeconds(50) + MicroSeconds(100) + smallDelta,
                  WifiPhyState::IDLE} // IDLE just after the transmission ends
             },
-            {{aCcaTime, // notification upon reception of the first signal
+            {{aCcaTimeWithDelta, // notification upon reception of the first signal
               MicroSeconds(100),
               WIFI_CHANLIST_SECONDARY80,
-              std::vector<Time>{MicroSeconds(0),
-                                MicroSeconds(0),
-                                MicroSeconds(0),
-                                MicroSeconds(0),
-                                MicroSeconds(100),
-                                MicroSeconds(0),
-                                MicroSeconds(0),
-                                MicroSeconds(0)}},
-             {MicroSeconds(50) + aCcaTime, // notification upon reception of the second signal
+              m_expectedPer20MhzCcaBusyDurations.at(0)},
+             {MicroSeconds(50) +
+                  aCcaTimeWithDelta, // notification upon reception of the second signal
               MicroSeconds(50) + MicroSeconds(100),
               WIFI_CHANLIST_SECONDARY,
-              std::vector<Time>{MicroSeconds(0),
-                                MicroSeconds(100),
-                                MicroSeconds(0),
-                                MicroSeconds(0),
-                                MicroSeconds(50),
-                                MicroSeconds(0),
-                                MicroSeconds(0),
-                                MicroSeconds(0)}}});
+              m_expectedPer20MhzCcaBusyDurations.at(1)}});
         delay += Seconds(1);
+        ResetExpectedPer20MhzCcaBusyDurations();
 
         //----------------------------------------------------------------------------------------------------------------------------------
-        // Verify PHY state stays IDLE when a 80 MHz HE SU PPDU with received power below the CCA
+        // Verify PHY state stays IDLE when a 80 MHz PPDU with received power below the CCA
         // sensitivity threshold occupies S80
         Simulator::Schedule(
             delay,
             &WifiPhyCcaIndicationTest::LogScenario,
             this,
-            "Reception of a 40 MHz HE PPDU that occupies S40 below CCA sensitivity threshold");
+            "Reception of a 80 MHz PPDU that occupies S80 below CCA sensitivity threshold");
         ScheduleTest(delay,
                      {},
                      {{dBm_u{-70}, MicroSeconds(0), S80_CENTER_FREQUENCY, MHz_u{80}}},
                      {
-                         {aCcaTime, WifiPhyState::IDLE}, // IDLE after aCCATime
-                         {PpduDurations.at(MHz_u{20}) - smallDelta,
+                         {aCcaTimeWithDelta, WifiPhyState::IDLE}, // IDLE after aCcaTimeWithDelta
+                         {ppduDurations.at(MHz_u{80}) - smallDelta,
                           WifiPhyState::IDLE}, // IDLE just before the transmission ends
-                         {PpduDurations.at(MHz_u{20}) + smallDelta,
+                         {ppduDurations.at(MHz_u{80}) + smallDelta,
                           WifiPhyState::IDLE} // IDLE just after the transmission ends
                      },
                      {});
         delay += Seconds(1);
 
         //----------------------------------------------------------------------------------------------------------------------------------
-        // Verify PHY state stays IDLE but CCA-BUSY indication is reported when a 80 MHz HE SU PPDU
+        // Verify PHY state stays IDLE but CCA-BUSY indication is reported when a 80 MHz PPDU
         // with received power above the CCA sensitivity threshold occupies S80
         Simulator::Schedule(
             delay,
             &WifiPhyCcaIndicationTest::LogScenario,
             this,
-            "Reception of a 80 MHz HE PPDU that occupies S80 above CCA sensitivity threshold");
+            "Reception of a 80 MHz PPDU that occupies S80 above CCA sensitivity threshold");
+        std::fill_n(m_expectedPer20MhzCcaBusyDurations.at(0).begin() + 4, 4, ppduDurations.at(80));
         ScheduleTest(delay,
                      {},
                      {{dBm_u{-65}, MicroSeconds(0), S80_CENTER_FREQUENCY, MHz_u{80}}},
                      {
-                         {aCcaTime, WifiPhyState::IDLE}, // IDLE after aCCATime
-                         {PpduDurations.at(MHz_u{80}) - smallDelta,
+                         {aCcaTimeWithDelta, WifiPhyState::IDLE}, // IDLE after aCcaTimeWithDelta
+                         {ppduDurations.at(MHz_u{80}) - smallDelta,
                           WifiPhyState::IDLE}, // IDLE just before the transmission ends
-                         {PpduDurations.at(MHz_u{80}) + smallDelta,
+                         {ppduDurations.at(MHz_u{80}) + smallDelta,
                           WifiPhyState::IDLE} // IDLE just after the transmission ends
                      },
-                     {{aCcaTime,
-                       PpduDurations.at(MHz_u{80}),
+                     {{aCcaTimeWithDelta,
+                       ppduDurations.at(MHz_u{80}),
                        WIFI_CHANLIST_SECONDARY80,
-                       std::vector<Time>{NanoSeconds(0),
-                                         NanoSeconds(0),
-                                         NanoSeconds(0),
-                                         NanoSeconds(0),
-                                         PpduDurations.at(MHz_u{80}),
-                                         PpduDurations.at(MHz_u{80}),
-                                         PpduDurations.at(MHz_u{80}),
-                                         PpduDurations.at(MHz_u{80})}}});
+                       m_expectedPer20MhzCcaBusyDurations.at(0)}});
         delay += Seconds(1);
+        ResetExpectedPer20MhzCcaBusyDurations();
+
+        if (m_standard == WIFI_STANDARD_80211ax)
+        {
+            //----------------------------------------------------------------------------------------------------------------------------------
+            // Verify PHY state stays IDLE and CCA-BUSY indication is reported if only the
+            // per20bitmap parameter changes
+            Simulator::Schedule(
+                delay,
+                &WifiPhyCcaIndicationTest::LogScenario,
+                this,
+                "Reception of a 20 MHz signal that generates a per20bitmap parameter "
+                "change when previous CCA indication reports IDLE");
+            m_expectedPer20MhzCcaBusyDurations.at(0).at(7) = MicroSeconds(100);
+            ScheduleTest(
+                delay,
+                {{dBm_u{-60.0},
+                  MicroSeconds(0),
+                  MicroSeconds(100),
+                  S80_CENTER_FREQUENCY + MHz_u{30},
+                  MHz_u{20}}},
+                {},
+                {
+                    {aCcaTimeWithDelta, WifiPhyState::IDLE}, // IDLE after aCcaTimeWithDelta
+                    {MicroSeconds(100) - smallDelta,
+                     WifiPhyState::IDLE}, // IDLE just before the transmission ends
+                    {MicroSeconds(100) + smallDelta,
+                     WifiPhyState::IDLE} // IDLE just after the transmission ends
+                },
+                {{aCcaTimeWithDelta,
+                  Seconds(0),
+                  WIFI_CHANLIST_PRIMARY,
+                  m_expectedPer20MhzCcaBusyDurations.at(0)}});
+            delay += Seconds(1);
+            ResetExpectedPer20MhzCcaBusyDurations();
+
+            //----------------------------------------------------------------------------------------------------------------------------------
+            // Verify PHY state stays CCA_BUSY and CCA-BUSY indication is reported if only the
+            // per20bitmap parameter changes
+            Simulator::Schedule(delay,
+                                &WifiPhyCcaIndicationTest::LogScenario,
+                                this,
+                                "Reception of a 20 MHz signal that generates a per20bitmap "
+                                "parameter change when "
+                                "previous CCA indication reports BUSY for the primary channel");
+            std::fill_n(m_expectedPer20MhzCcaBusyDurations.at(0).begin(), 4, MicroSeconds(100));
+            std::fill_n(m_expectedPer20MhzCcaBusyDurations.at(1).begin(), 4, MicroSeconds(50));
+            m_expectedPer20MhzCcaBusyDurations.at(1).at(7) = MicroSeconds(200);
+            ScheduleTest(
+                delay,
+                {{dBm_u{-50.0},
+                  MicroSeconds(0),
+                  MicroSeconds(100),
+                  P80_CENTER_FREQUENCY,
+                  MHz_u{80}},
+                 {dBm_u{-60.0},
+                  MicroSeconds(50),
+                  MicroSeconds(200),
+                  S80_CENTER_FREQUENCY + MHz_u{30},
+                  MHz_u{20}}},
+                {},
+                {
+                    {aCcaTimeWithDelta, WifiPhyState::CCA_BUSY}, // CCA-BUSY after aCcaTimeWithDelta
+                    {MicroSeconds(100) - smallDelta,
+                     WifiPhyState::CCA_BUSY}, // CCA-BUSY just before the transmission ends
+                    {MicroSeconds(100) + smallDelta,
+                     WifiPhyState::IDLE} // IDLE just after the transmission ends
+                },
+                {{aCcaTimeWithDelta,
+                  MicroSeconds(100),
+                  WIFI_CHANLIST_PRIMARY,
+                  m_expectedPer20MhzCcaBusyDurations.at(0)},
+                 {MicroSeconds(50) +
+                      aCcaTimeWithDelta, // notification upon reception of the second signal
+                  MicroSeconds(100),
+                  WIFI_CHANLIST_PRIMARY,
+                  m_expectedPer20MhzCcaBusyDurations.at(1)}});
+            delay += Seconds(1);
+            ResetExpectedPer20MhzCcaBusyDurations();
+        }
+    }
 
+    if (m_channelWidth > 160)
+    {
         //----------------------------------------------------------------------------------------------------------------------------------
-        // Verify PHY state stays IDLE and CCA-BUSY indication is reported if only the per20bitmap
-        // parameter changes
+        // Verify PHY state stays IDLE and no CCA-BUSY indication is reported if a signal below
+        // the energy detection threshold occupies the first 20 MHz subchannel of the S160
         Simulator::Schedule(delay,
                             &WifiPhyCcaIndicationTest::LogScenario,
                             this,
-                            "Reception of a 20 MHz signal that generates a per20bitmap parameter "
-                            "change when previous CCA indication reports IDLE");
+                            "Reception of a 20 MHz signal that occupies the first subchannel of "
+                            "S160 below ED threshold");
         ScheduleTest(delay,
-                     {{dBm_u{-60},
+                     {{-65.0,
                        MicroSeconds(0),
                        MicroSeconds(100),
-                       S80_CENTER_FREQUENCY + MHz_u{30},
+                       S160_CENTER_FREQUENCY - MHz_u{70},
                        MHz_u{20}}},
                      {},
                      {
-                         {aCcaTime, WifiPhyState::IDLE}, // IDLE after aCCATime
+                         {aCcaTimeWithDelta, WifiPhyState::IDLE}, // IDLE after aCcaTimeWithDelta
                          {MicroSeconds(100) - smallDelta,
                           WifiPhyState::IDLE}, // IDLE just before the transmission ends
                          {MicroSeconds(100) + smallDelta,
                           WifiPhyState::IDLE} // IDLE just after the transmission ends
                      },
-                     {{aCcaTime,
-                       Seconds(0),
-                       WIFI_CHANLIST_PRIMARY,
-                       std::vector<Time>{MicroSeconds(0),
-                                         MicroSeconds(0),
-                                         MicroSeconds(0),
-                                         MicroSeconds(0),
-                                         MicroSeconds(0),
-                                         MicroSeconds(0),
-                                         MicroSeconds(0),
-                                         MicroSeconds(100)}}});
-        delay += Seconds(1);
+                     {});
+        delay += Seconds(1.0);
+
+        //----------------------------------------------------------------------------------------------------------------------------------
+        // Verify PHY state stays IDLE and CCA-BUSY indication is reported if a signal above the
+        // energy detection threshold occupies the first 20 MHz subchannel of the S160.
+        // 36.3.21.6.4: (...) A signal is present on the 20 MHz subchannel at or above a
+        // threshold of –62 dBm. (...)
+        Simulator::Schedule(delay,
+                            &WifiPhyCcaIndicationTest::LogScenario,
+                            this,
+                            "Reception of a 20 MHz signal that occupies the first subchannel of "
+                            "S160 above ED threshold");
+        m_expectedPer20MhzCcaBusyDurations.at(0).at(8) = MicroSeconds(100);
+        ScheduleTest(delay,
+                     {{-61.0,
+                       MicroSeconds(0),
+                       MicroSeconds(100),
+                       S160_CENTER_FREQUENCY - MHz_u{70},
+                       MHz_u{20}}},
+                     {},
+                     {
+                         {aCcaTimeWithDelta, WifiPhyState::IDLE}, // IDLE after aCcaTimeWithDelta
+                         {MicroSeconds(100) - smallDelta,
+                          WifiPhyState::IDLE}, // IDLE just before the transmission ends
+                         {MicroSeconds(100) + smallDelta,
+                          WifiPhyState::IDLE} // IDLE just after the transmission ends
+                     },
+                     {{MicroSeconds(100) - smallDelta,
+                       MicroSeconds(100),
+                       WIFI_CHANLIST_SECONDARY160,
+                       m_expectedPer20MhzCcaBusyDurations.at(0)}});
+        delay += Seconds(1.0);
+        ResetExpectedPer20MhzCcaBusyDurations();
+
+        //----------------------------------------------------------------------------------------------------------------------------------
+        // Verify PHY state stays IDLE and no CCA-BUSY indication is reported if a signal below
+        // the energy detection threshold occupies the second 20 MHz subchannel of the S80
+        Simulator::Schedule(delay,
+                            &WifiPhyCcaIndicationTest::LogScenario,
+                            this,
+                            "Reception of a 20 MHz signal that occupies the second subchannel of "
+                            "S160 below ED threshold");
+        ScheduleTest(delay,
+                     {{-65.0,
+                       MicroSeconds(0),
+                       MicroSeconds(100),
+                       S160_CENTER_FREQUENCY - MHz_u{50},
+                       MHz_u{20}}},
+                     {},
+                     {
+                         {aCcaTimeWithDelta, WifiPhyState::IDLE}, // IDLE after aCcaTimeWithDelta
+                         {MicroSeconds(100) - smallDelta,
+                          WifiPhyState::IDLE}, // IDLE just before the transmission ends
+                         {MicroSeconds(100) + smallDelta,
+                          WifiPhyState::IDLE} // IDLE just after the transmission ends
+                     },
+                     {});
+        delay += Seconds(1.0);
+
+        //----------------------------------------------------------------------------------------------------------------------------------
+        // Verify PHY state stays IDLE and CCA-BUSY indication is reported if a signal above the
+        // energy detection threshold occupies the second 20 MHz subchannel of the
+        // S160 27.3.20.6.4: 36.3.21.6.4: (...) A signal is present on the 20 MHz subchannel at
+        // or above a threshold of –62 dBm. (...)
+        Simulator::Schedule(delay,
+                            &WifiPhyCcaIndicationTest::LogScenario,
+                            this,
+                            "Reception of a 20 MHz signal that occupies the second subchannel of "
+                            "S160 above ED threshold");
+        m_expectedPer20MhzCcaBusyDurations.at(0).at(9) = MicroSeconds(100);
+        ScheduleTest(delay,
+                     {{-61.0,
+                       MicroSeconds(0),
+                       MicroSeconds(100),
+                       S160_CENTER_FREQUENCY - MHz_u{50},
+                       MHz_u{20}}},
+                     {},
+                     {
+                         {aCcaTimeWithDelta, WifiPhyState::IDLE}, // IDLE after aCcaTimeWithDelta
+                         {MicroSeconds(100) - smallDelta,
+                          WifiPhyState::IDLE}, // IDLE just before the transmission ends
+                         {MicroSeconds(100) + smallDelta,
+                          WifiPhyState::IDLE} // IDLE just after the transmission ends
+                     },
+                     {{MicroSeconds(100) - smallDelta,
+                       MicroSeconds(100),
+                       WIFI_CHANLIST_SECONDARY160,
+                       m_expectedPer20MhzCcaBusyDurations.at(0)}});
+        delay += Seconds(1.0);
+        ResetExpectedPer20MhzCcaBusyDurations();
+
+        //----------------------------------------------------------------------------------------------------------------------------------
+        // Verify PHY state stays IDLE and no CCA-BUSY indication is reported if a signal below
+        // the energy detection threshold occupies the third 20 MHz subchannel of the S80
+        Simulator::Schedule(delay,
+                            &WifiPhyCcaIndicationTest::LogScenario,
+                            this,
+                            "Reception of a 20 MHz signal that occupies the third subchannel of "
+                            "S160 below ED threshold");
+        ScheduleTest(delay,
+                     {{-65.0,
+                       MicroSeconds(0),
+                       MicroSeconds(100),
+                       S160_CENTER_FREQUENCY - MHz_u{30},
+                       MHz_u{20}}},
+                     {},
+                     {
+                         {aCcaTimeWithDelta, WifiPhyState::IDLE}, // IDLE after aCcaTimeWithDelta
+                         {MicroSeconds(100) - smallDelta,
+                          WifiPhyState::IDLE}, // IDLE just before the transmission ends
+                         {MicroSeconds(100) + smallDelta,
+                          WifiPhyState::IDLE} // IDLE just after the transmission ends
+                     },
+                     {});
+        delay += Seconds(1.0);
+
+        //----------------------------------------------------------------------------------------------------------------------------------
+        // Verify PHY state stays IDLE and CCA-BUSY indication is reported if a signal above the
+        // energy detection threshold occupies the third 20 MHz subchannel of the
+        // S160 27.3.20.6.4: 36.3.21.6.4: (...) A signal is present on the 20 MHz subchannel at
+        // or above a threshold of –62 dBm. (...)
+        Simulator::Schedule(delay,
+                            &WifiPhyCcaIndicationTest::LogScenario,
+                            this,
+                            "Reception of a 20 MHz signal that occupies the third subchannel of "
+                            "S160 above ED threshold");
+        m_expectedPer20MhzCcaBusyDurations.at(0).at(10) = MicroSeconds(100);
+        ScheduleTest(delay,
+                     {{-61.0,
+                       MicroSeconds(0),
+                       MicroSeconds(100),
+                       S160_CENTER_FREQUENCY - MHz_u{30},
+                       MHz_u{20}}},
+                     {},
+                     {
+                         {aCcaTimeWithDelta, WifiPhyState::IDLE}, // IDLE after aCcaTimeWithDelta
+                         {MicroSeconds(100) - smallDelta,
+                          WifiPhyState::IDLE}, // IDLE just before the transmission ends
+                         {MicroSeconds(100) + smallDelta,
+                          WifiPhyState::IDLE} // IDLE just after the transmission ends
+                     },
+                     {{MicroSeconds(100) - smallDelta,
+                       MicroSeconds(100),
+                       WIFI_CHANLIST_SECONDARY160,
+                       m_expectedPer20MhzCcaBusyDurations.at(0)}});
+        delay += Seconds(1.0);
+        ResetExpectedPer20MhzCcaBusyDurations();
+
+        //----------------------------------------------------------------------------------------------------------------------------------
+        // Verify PHY state stays IDLE and no CCA-BUSY indication is reported if a signal below
+        // the energy detection threshold occupies the fourth 20 MHz subchannel of the S80
+        Simulator::Schedule(delay,
+                            &WifiPhyCcaIndicationTest::LogScenario,
+                            this,
+                            "Reception of a 20 MHz signal that occupies the fourth subchannel of "
+                            "S160 below ED threshold");
+        ScheduleTest(delay,
+                     {{-65.0,
+                       MicroSeconds(0),
+                       MicroSeconds(100),
+                       S160_CENTER_FREQUENCY - MHz_u{10},
+                       MHz_u{20}}},
+                     {},
+                     {
+                         {aCcaTimeWithDelta, WifiPhyState::IDLE}, // IDLE after aCcaTimeWithDelta
+                         {MicroSeconds(100) - smallDelta,
+                          WifiPhyState::IDLE}, // IDLE just before the transmission ends
+                         {MicroSeconds(100) + smallDelta,
+                          WifiPhyState::IDLE} // IDLE just after the transmission ends
+                     },
+                     {});
+        delay += Seconds(1.0);
+
+        //----------------------------------------------------------------------------------------------------------------------------------
+        // Verify PHY state stays IDLE and CCA-BUSY indication is reported if a signal above the
+        // energy detection threshold occupies the fourth 20 MHz subchannel of the
+        // S160 27.3.20.6.4: 36.3.21.6.4: (...) A signal is present on the 20 MHz subchannel at
+        // or above a threshold of –62 dBm. (...)
+        Simulator::Schedule(delay,
+                            &WifiPhyCcaIndicationTest::LogScenario,
+                            this,
+                            "Reception of a 20 MHz signal that occupies the fourth subchannel of "
+                            "S160 above ED threshold");
+        m_expectedPer20MhzCcaBusyDurations.at(0).at(11) = MicroSeconds(100);
+        ScheduleTest(delay,
+                     {{-61.0,
+                       MicroSeconds(0),
+                       MicroSeconds(100),
+                       S160_CENTER_FREQUENCY - MHz_u{10},
+                       MHz_u{20}}},
+                     {},
+                     {
+                         {aCcaTimeWithDelta, WifiPhyState::IDLE}, // IDLE after aCcaTimeWithDelta
+                         {MicroSeconds(100) - smallDelta,
+                          WifiPhyState::IDLE}, // IDLE just before the transmission ends
+                         {MicroSeconds(100) + smallDelta,
+                          WifiPhyState::IDLE} // IDLE just after the transmission ends
+                     },
+                     {{MicroSeconds(100) - smallDelta,
+                       MicroSeconds(100),
+                       WIFI_CHANLIST_SECONDARY160,
+                       m_expectedPer20MhzCcaBusyDurations.at(0)}});
+        delay += Seconds(1.0);
+        ResetExpectedPer20MhzCcaBusyDurations();
+
+        //----------------------------------------------------------------------------------------------------------------------------------
+        // Verify PHY state stays IDLE and no CCA-BUSY indication is reported if a signal
+        // occupies the fifth and sixth 20 MHz subchannels of the S160 with received power below
+        // the energy detection threshold for all occupied 20 MHz subchannels
+        Simulator::Schedule(delay,
+                            &WifiPhyCcaIndicationTest::LogScenario,
+                            this,
+                            "Reception of a 40 MHz signal that occupies the fifth and sixth "
+                            "subchannels of S160 below ED threshold");
+        ScheduleTest(delay,
+                     {{-60.0,
+                       MicroSeconds(0),
+                       MicroSeconds(100),
+                       S160_CENTER_FREQUENCY + MHz_u{20},
+                       MHz_u{40}}},
+                     {},
+                     {
+                         {aCcaTimeWithDelta, WifiPhyState::IDLE}, // IDLE after aCcaTimeWithDelta
+                         {MicroSeconds(100) - smallDelta,
+                          WifiPhyState::IDLE}, // IDLE just before the transmission ends
+                         {MicroSeconds(100) + smallDelta,
+                          WifiPhyState::IDLE} // IDLE just after the transmission ends
+                     },
+                     {});
+        delay += Seconds(1.0);
+
+        //----------------------------------------------------------------------------------------------------------------------------------
+        // Verify PHY state stays IDLE and no CCA-BUSY indication is reported if a signal
+        // occupies the fifth and sixth 20 MHz subchannels of the S160 with received power above
+        // the energy detection threshold for any occupied 20 MHz subchannels
+        Simulator::Schedule(delay,
+                            &WifiPhyCcaIndicationTest::LogScenario,
+                            this,
+                            "Reception of a 40 MHz signal that occupies the fifth and sixth "
+                            "subchannels of S160 above ED threshold");
+        std::fill_n(m_expectedPer20MhzCcaBusyDurations.at(0).begin() + 12, 2, MicroSeconds(100));
+        ScheduleTest(delay,
+                     {{-58.0,
+                       MicroSeconds(0),
+                       MicroSeconds(100),
+                       S160_CENTER_FREQUENCY + MHz_u{20},
+                       MHz_u{40}}},
+                     {},
+                     {
+                         {aCcaTimeWithDelta, WifiPhyState::IDLE}, // IDLE after aCcaTimeWithDelta
+                         {MicroSeconds(100) - smallDelta,
+                          WifiPhyState::IDLE}, // IDLE just before the transmission ends
+                         {MicroSeconds(100) + smallDelta,
+                          WifiPhyState::IDLE} // IDLE just after the transmission ends
+                     },
+                     {{MicroSeconds(100) - smallDelta,
+                       MicroSeconds(100),
+                       WIFI_CHANLIST_SECONDARY160,
+                       m_expectedPer20MhzCcaBusyDurations.at(0)}});
+        delay += Seconds(1.0);
+        ResetExpectedPer20MhzCcaBusyDurations();
+
+        //----------------------------------------------------------------------------------------------------------------------------------
+        // Verify PHY state stays IDLE and no CCA-BUSY indication is reported if a signal
+        // occupies the seventh and eighth 20 MHz subchannels of the S160 with received power
+        // below the energy detection threshold for all occupied 20 MHz subchannels
+        Simulator::Schedule(delay,
+                            &WifiPhyCcaIndicationTest::LogScenario,
+                            this,
+                            "Reception of a 40 MHz signal that occupies the seventh and eighth "
+                            "subchannels of S160 below ED threshold");
+        ScheduleTest(delay,
+                     {{-60.0,
+                       MicroSeconds(0),
+                       MicroSeconds(100),
+                       S160_CENTER_FREQUENCY + MHz_u{60},
+                       MHz_u{40}}},
+                     {},
+                     {
+                         {aCcaTimeWithDelta, WifiPhyState::IDLE}, // IDLE after aCcaTimeWithDelta
+                         {MicroSeconds(100) - smallDelta,
+                          WifiPhyState::IDLE}, // IDLE just before the transmission ends
+                         {MicroSeconds(100) + smallDelta,
+                          WifiPhyState::IDLE} // IDLE just after the transmission ends
+                     },
+                     {});
+        delay += Seconds(1.0);
+
+        //----------------------------------------------------------------------------------------------------------------------------------
+        // Verify PHY state stays IDLE and no CCA-BUSY indication is reported if a signal
+        // occupies the seventh and eighth 20 MHz subchannels of the S160 with received power
+        // above the energy detection threshold for any occupied 20 MHz subchannels
+        Simulator::Schedule(delay,
+                            &WifiPhyCcaIndicationTest::LogScenario,
+                            this,
+                            "Reception of a 40 MHz signal that occupies the seventh and eighth "
+                            "subchannels of S160 above ED threshold");
+        std::fill_n(m_expectedPer20MhzCcaBusyDurations.at(0).begin() + 14, 2, MicroSeconds(100));
+        ScheduleTest(delay,
+                     {{-58.0,
+                       MicroSeconds(0),
+                       MicroSeconds(100),
+                       S160_CENTER_FREQUENCY + MHz_u{60},
+                       MHz_u{40}}},
+                     {},
+                     {
+                         {aCcaTimeWithDelta, WifiPhyState::IDLE}, // IDLE after aCcaTimeWithDelta
+                         {MicroSeconds(100) - smallDelta,
+                          WifiPhyState::IDLE}, // IDLE just before the transmission ends
+                         {MicroSeconds(100) + smallDelta,
+                          WifiPhyState::IDLE} // IDLE just after the transmission ends
+                     },
+                     {{MicroSeconds(100) - smallDelta,
+                       MicroSeconds(100),
+                       WIFI_CHANLIST_SECONDARY160,
+                       m_expectedPer20MhzCcaBusyDurations.at(0)}});
+        delay += Seconds(1.0);
+        ResetExpectedPer20MhzCcaBusyDurations();
+
+        //----------------------------------------------------------------------------------------------------------------------------------
+        // Verify PHY state stays IDLE and no CCA-BUSY indication is reported if a signal
+        // occupies the first four 20 MHz subchannels of the S160 with received power below the
+        // energy detection threshold for all occupied 20 MHz subchannels
+        Simulator::Schedule(delay,
+                            &WifiPhyCcaIndicationTest::LogScenario,
+                            this,
+                            "Reception of a 80 MHz signal that occupies the first four "
+                            "subchannels of S160 below ED threshold");
+        ScheduleTest(delay,
+                     {{-57.0,
+                       MicroSeconds(0),
+                       MicroSeconds(100),
+                       S160_CENTER_FREQUENCY - MHz_u{40},
+                       MHz_u{80}}},
+                     {},
+                     {
+                         {aCcaTimeWithDelta, WifiPhyState::IDLE}, // IDLE after aCcaTimeWithDelta
+                         {MicroSeconds(100) - smallDelta,
+                          WifiPhyState::IDLE}, // IDLE just before the transmission ends
+                         {MicroSeconds(100) + smallDelta,
+                          WifiPhyState::IDLE} // IDLE just after the transmission ends
+                     },
+                     {});
+        delay += Seconds(1.0);
 
         //----------------------------------------------------------------------------------------------------------------------------------
-        // Verify PHY state stays CCA_BUSY and CCA-BUSY indication is reported if only the
-        // per20bitmap parameter changes
+        // Verify PHY state stays IDLE and no CCA-BUSY indication is reported if a signal
+        // occupies the first four 20 MHz subchannels of the S160 with received power above the
+        // energy detection threshold for any occupied 20 MHz subchannels
+        Simulator::Schedule(delay,
+                            &WifiPhyCcaIndicationTest::LogScenario,
+                            this,
+                            "Reception of a 80 MHz signal that occupies the first four "
+                            "subchannels of S160 above ED threshold");
+        std::fill_n(m_expectedPer20MhzCcaBusyDurations.at(0).begin() + 8, 4, MicroSeconds(100));
+        ScheduleTest(delay,
+                     {{-55.0,
+                       MicroSeconds(0),
+                       MicroSeconds(100),
+                       S160_CENTER_FREQUENCY - MHz_u{40},
+                       MHz_u{80}}},
+                     {},
+                     {
+                         {aCcaTimeWithDelta, WifiPhyState::IDLE}, // IDLE after aCcaTimeWithDelta
+                         {MicroSeconds(100) - smallDelta,
+                          WifiPhyState::IDLE}, // IDLE just before the transmission ends
+                         {MicroSeconds(100) + smallDelta,
+                          WifiPhyState::IDLE} // IDLE just after the transmission ends
+                     },
+                     {{MicroSeconds(100) - smallDelta,
+                       MicroSeconds(100),
+                       WIFI_CHANLIST_SECONDARY160,
+                       m_expectedPer20MhzCcaBusyDurations.at(0)}});
+        delay += Seconds(1.0);
+        ResetExpectedPer20MhzCcaBusyDurations();
+
+        //----------------------------------------------------------------------------------------------------------------------------------
+        // Verify PHY state stays IDLE and no CCA-BUSY indication is reported if a signal
+        // occupies the last four 20 MHz subchannels of the S160 with received power below the
+        // energy detection threshold for all occupied 20 MHz subchannels
+        Simulator::Schedule(delay,
+                            &WifiPhyCcaIndicationTest::LogScenario,
+                            this,
+                            "Reception of a 80 MHz signal that occupies the last four "
+                            "subchannels of S160 below ED threshold");
+        ScheduleTest(delay,
+                     {{-57.0,
+                       MicroSeconds(0),
+                       MicroSeconds(100),
+                       S160_CENTER_FREQUENCY + MHz_u{40},
+                       MHz_u{80}}},
+                     {},
+                     {
+                         {aCcaTimeWithDelta, WifiPhyState::IDLE}, // IDLE after aCcaTimeWithDelta
+                         {MicroSeconds(100) - smallDelta,
+                          WifiPhyState::IDLE}, // IDLE just before the transmission ends
+                         {MicroSeconds(100) + smallDelta,
+                          WifiPhyState::IDLE} // IDLE just after the transmission ends
+                     },
+                     {});
+        delay += Seconds(1.0);
+
+        //----------------------------------------------------------------------------------------------------------------------------------
+        // Verify PHY state stays IDLE and no CCA-BUSY indication is reported if a signal
+        // occupies the last four 20 MHz subchannels of the S160 with received power above the
+        // energy detection threshold for any occupied 20 MHz subchannels
+        Simulator::Schedule(delay,
+                            &WifiPhyCcaIndicationTest::LogScenario,
+                            this,
+                            "Reception of a 80 MHz signal that occupies the last four "
+                            "subchannels of S160 above ED threshold");
+        std::fill_n(m_expectedPer20MhzCcaBusyDurations.at(0).begin() + 12, 4, MicroSeconds(100));
+        ScheduleTest(delay,
+                     {{-55.0,
+                       MicroSeconds(0),
+                       MicroSeconds(100),
+                       S160_CENTER_FREQUENCY + MHz_u{40},
+                       MHz_u{80}}},
+                     {},
+                     {
+                         {aCcaTimeWithDelta, WifiPhyState::IDLE}, // IDLE after aCcaTimeWithDelta
+                         {MicroSeconds(100) - smallDelta,
+                          WifiPhyState::IDLE}, // IDLE just before the transmission ends
+                         {MicroSeconds(100) + smallDelta,
+                          WifiPhyState::IDLE} // IDLE just after the transmission ends
+                     },
+                     {{MicroSeconds(100) - smallDelta,
+                       MicroSeconds(100),
+                       WIFI_CHANLIST_SECONDARY160,
+                       m_expectedPer20MhzCcaBusyDurations.at(0)}});
+        delay += Seconds(1.0);
+        ResetExpectedPer20MhzCcaBusyDurations();
+
+        //----------------------------------------------------------------------------------------------------------------------------------
+        // Verify PHY state stays IDLE and no CCA-BUSY indication is reported if a signal
+        // occupies the whole S160 with received power below the energy detection threshold for
+        // all occupied 20 MHz subchannels
         Simulator::Schedule(
             delay,
             &WifiPhyCcaIndicationTest::LogScenario,
             this,
-            "Reception of a 20 MHz signal that generates a per20bitmap parameter change when "
-            "previous CCA indication reports BUSY for the primary channel");
+            "Reception of a 160 MHz signal that occupies the whole S160 below ED threshold");
         ScheduleTest(
             delay,
-            {{dBm_u{-50.0}, MicroSeconds(0), MicroSeconds(100), P80_CENTER_FREQUENCY, MHz_u{80}},
-             {dBm_u{-60.0},
-              MicroSeconds(50),
-              MicroSeconds(200),
-              S80_CENTER_FREQUENCY + MHz_u{30},
-              MHz_u{20}}},
+            {{-54.0, MicroSeconds(0), MicroSeconds(100), S160_CENTER_FREQUENCY, MHz_u{160}}},
+            {},
+            {
+                {aCcaTimeWithDelta, WifiPhyState::IDLE}, // IDLE after aCcaTimeWithDelta
+                {MicroSeconds(100) - smallDelta,
+                 WifiPhyState::IDLE}, // IDLE just before the transmission ends
+                {MicroSeconds(100) + smallDelta,
+                 WifiPhyState::IDLE} // IDLE just after the transmission ends
+            },
+            {});
+        delay += Seconds(1.0);
+
+        //----------------------------------------------------------------------------------------------------------------------------------
+        // Verify PHY state stays IDLE and no CCA-BUSY indication is reported if a signal
+        // occupies the whole S160 with received power above the energy detection threshold for
+        // any occupied 20 MHz subchannels
+        Simulator::Schedule(
+            delay,
+            &WifiPhyCcaIndicationTest::LogScenario,
+            this,
+            "Reception of a 160 MHz signal that occupies the whole S160 above ED threshold");
+        std::fill_n(m_expectedPer20MhzCcaBusyDurations.at(0).begin() + 8, 8, MicroSeconds(100));
+        ScheduleTest(
+            delay,
+            {{-52.0, MicroSeconds(0), MicroSeconds(100), S160_CENTER_FREQUENCY, MHz_u{160}}},
+            {},
+            {
+                {aCcaTimeWithDelta, WifiPhyState::IDLE}, // IDLE after aCcaTimeWithDelta
+                {MicroSeconds(100) - smallDelta,
+                 WifiPhyState::IDLE}, // IDLE just before the transmission ends
+                {MicroSeconds(100) + smallDelta,
+                 WifiPhyState::IDLE} // IDLE just after the transmission ends
+            },
+            {{MicroSeconds(100) - smallDelta,
+              MicroSeconds(100),
+              WIFI_CHANLIST_SECONDARY160,
+              m_expectedPer20MhzCcaBusyDurations.at(0)}});
+        delay += Seconds(1.0);
+        ResetExpectedPer20MhzCcaBusyDurations();
+
+        //----------------------------------------------------------------------------------------------------------------------------------
+        // Verify PHY state stays IDLE as long as a 320 MHz signal below the energy detection
+        // threshold occupies the whole band
+        Simulator::Schedule(
+            delay,
+            &WifiPhyCcaIndicationTest::LogScenario,
+            this,
+            "Reception of a 320 MHz signal that occupies the whole band below ED threshold");
+        ScheduleTest(
+            delay,
+            {{-51.0, MicroSeconds(0), MicroSeconds(100), P320_CENTER_FREQUENCY, MHz_u{320}}},
             {},
             {
-                {aCcaTime, WifiPhyState::CCA_BUSY}, // CCA-BUSY after aCCATime
+                {aCcaTimeWithDelta, WifiPhyState::IDLE}, // IDLE after aCcaTimeWithDelta
+                {MicroSeconds(100) - smallDelta,
+                 WifiPhyState::IDLE}, // IDLE just before the transmission ends
+                {MicroSeconds(100) + smallDelta,
+                 WifiPhyState::IDLE} // IDLE just after the transmission ends
+            },
+            {});
+
+        delay += Seconds(1.0);
+
+        //----------------------------------------------------------------------------------------------------------------------------------
+        // Verify PHY state is CCA-BUSY as long as a 320 MHz signal above the energy detection
+        // threshold occupies the whole band
+        Simulator::Schedule(
+            delay,
+            &WifiPhyCcaIndicationTest::LogScenario,
+            this,
+            "Reception of a 320 MHz signal that occupies the whole band above ED threshold");
+        std::fill_n(m_expectedPer20MhzCcaBusyDurations.at(0).begin(), 16, MicroSeconds(100));
+        ScheduleTest(
+            delay,
+            {{-49.0, MicroSeconds(0), MicroSeconds(100), P320_CENTER_FREQUENCY, MHz_u{320}}},
+            {},
+            {
+                {aCcaTimeWithDelta, WifiPhyState::CCA_BUSY}, // CCA-BUSY after aCcaTimeWithDelta
                 {MicroSeconds(100) - smallDelta,
                  WifiPhyState::CCA_BUSY}, // CCA-BUSY just before the transmission ends
                 {MicroSeconds(100) + smallDelta,
                  WifiPhyState::IDLE} // IDLE just after the transmission ends
             },
-            {{aCcaTime,
+            {{MicroSeconds(100) - smallDelta,
               MicroSeconds(100),
               WIFI_CHANLIST_PRIMARY,
-              std::vector<Time>{MicroSeconds(100),
-                                MicroSeconds(100),
-                                MicroSeconds(100),
-                                MicroSeconds(100),
-                                MicroSeconds(0),
-                                MicroSeconds(0),
-                                MicroSeconds(0),
-                                MicroSeconds(0)}},
-             {MicroSeconds(50) + aCcaTime, // notification upon reception of the second signal
+              m_expectedPer20MhzCcaBusyDurations.at(0)}});
+        delay += Seconds(1.0);
+        ResetExpectedPer20MhzCcaBusyDurations();
+
+        //----------------------------------------------------------------------------------------------------------------------------------
+        // Verify PHY notifies CCA-BUSY for the P20 channel while the S160 channel was already
+        // in CCA-BUSY state
+        Simulator::Schedule(delay,
+                            &WifiPhyCcaIndicationTest::LogScenario,
+                            this,
+                            "Reception of a 20 MHz signal that occupies S160 followed by the "
+                            "reception of another 20 MHz signal that occupies P20");
+        m_expectedPer20MhzCcaBusyDurations.at(0).at(15) = MicroSeconds(100);
+        m_expectedPer20MhzCcaBusyDurations.at(1).at(0) = MicroSeconds(100);
+        m_expectedPer20MhzCcaBusyDurations.at(1).at(15) = MicroSeconds(50);
+        ScheduleTest(
+            delay,
+            {{-52.0,
+              MicroSeconds(0),
               MicroSeconds(100),
+              S160_CENTER_FREQUENCY + MHz_u{70},
+              MHz_u{20}},
+             {-52.0, MicroSeconds(50), MicroSeconds(100), P20_CENTER_FREQUENCY, MHz_u{20}}},
+            {},
+            {
+                {aCcaTimeWithDelta,
+                 WifiPhyState::IDLE}, // state of primary stays idle after aCcaTimeWithDelta
+                {MicroSeconds(50) + aCcaTimeWithDelta,
+                 WifiPhyState::CCA_BUSY}, // state of primary is CCA-BUSY after
+                                          // aCcaTimeWithDelta that followed the second
+                                          // transmission
+                {MicroSeconds(50) + MicroSeconds(100) - smallDelta,
+                 WifiPhyState::CCA_BUSY}, // CCA-BUSY just before the transmission ends
+                {MicroSeconds(50) + MicroSeconds(100) + smallDelta,
+                 WifiPhyState::IDLE} // IDLE just after the transmission ends
+            },
+            {{aCcaTimeWithDelta, // notification upon reception of the first signal
+              MicroSeconds(100),
+              WIFI_CHANLIST_SECONDARY160,
+              m_expectedPer20MhzCcaBusyDurations.at(0)},
+             {MicroSeconds(50) +
+                  aCcaTimeWithDelta, // notification upon reception of the second signal
+              MicroSeconds(50) + MicroSeconds(100),
               WIFI_CHANLIST_PRIMARY,
-              std::vector<Time>{MicroSeconds(50),
-                                MicroSeconds(50),
-                                MicroSeconds(50),
-                                MicroSeconds(50),
-                                MicroSeconds(0),
-                                MicroSeconds(0),
-                                MicroSeconds(0),
-                                MicroSeconds(200)}}});
-        delay += Seconds(1);
+              m_expectedPer20MhzCcaBusyDurations.at(1)}});
+        delay += Seconds(1.0);
+        ResetExpectedPer20MhzCcaBusyDurations();
+
+        //----------------------------------------------------------------------------------------------------------------------------------
+        // Verify PHY state stays IDLE but notifies CCA-BUSY for the S80 channel while the S160
+        // channel was already in CCA-BUSY state
+        Simulator::Schedule(delay,
+                            &WifiPhyCcaIndicationTest::LogScenario,
+                            this,
+                            "Reception of a signal that occupies S160 followed by the reception of "
+                            "another signal that occupies S80");
+        m_expectedPer20MhzCcaBusyDurations.at(0).at(14) = MicroSeconds(100);
+        m_expectedPer20MhzCcaBusyDurations.at(1).at(5) = MicroSeconds(100);
+        m_expectedPer20MhzCcaBusyDurations.at(1).at(14) = MicroSeconds(50);
+        ScheduleTest(
+            delay,
+            {{-52.0,
+              MicroSeconds(0),
+              MicroSeconds(100),
+              S160_CENTER_FREQUENCY + MHz_u{50},
+              MHz_u{20}},
+             {-52.0,
+              MicroSeconds(50),
+              MicroSeconds(100),
+              S80_CENTER_FREQUENCY - MHz_u{10},
+              MHz_u{20}}},
+            {},
+            {
+                {aCcaTimeWithDelta,
+                 WifiPhyState::IDLE}, // state of primary stays idle after aCcaTimeWithDelta
+                {MicroSeconds(50) + aCcaTimeWithDelta,
+                 WifiPhyState::IDLE}, // state of primary stays IDLE
+                {MicroSeconds(50) + MicroSeconds(100) - smallDelta,
+                 WifiPhyState::IDLE}, // IDLE just before the transmission ends
+                {MicroSeconds(50) + MicroSeconds(100) + smallDelta,
+                 WifiPhyState::IDLE} // IDLE just after the transmission ends
+            },
+            {{aCcaTimeWithDelta, // notification upon reception of the first signal
+              MicroSeconds(100),
+              WIFI_CHANLIST_SECONDARY160,
+              m_expectedPer20MhzCcaBusyDurations.at(0)},
+             {MicroSeconds(50) +
+                  aCcaTimeWithDelta, // notification upon reception of the second signal
+              MicroSeconds(50) + MicroSeconds(100),
+              WIFI_CHANLIST_SECONDARY80,
+              m_expectedPer20MhzCcaBusyDurations.at(1)}});
+        delay += Seconds(1.0);
+        ResetExpectedPer20MhzCcaBusyDurations();
+
+        //----------------------------------------------------------------------------------------------------------------------------------
+        // Verify PHY state stays IDLE but notifies CCA-BUSY for the S40 channel while the S160
+        // channel was already in CCA-BUSY state
+        Simulator::Schedule(delay,
+                            &WifiPhyCcaIndicationTest::LogScenario,
+                            this,
+                            "Reception of a signal that occupies S160 followed by the reception of "
+                            "another signal that occupies S40");
+        m_expectedPer20MhzCcaBusyDurations.at(0).at(13) = MicroSeconds(100);
+        m_expectedPer20MhzCcaBusyDurations.at(1).at(3) = MicroSeconds(100);
+        m_expectedPer20MhzCcaBusyDurations.at(1).at(13) = MicroSeconds(50);
+        ScheduleTest(
+            delay,
+            {{-52.0,
+              MicroSeconds(0),
+              MicroSeconds(100),
+              S160_CENTER_FREQUENCY + MHz_u{30},
+              MHz_u{20}},
+             {-52.0,
+              MicroSeconds(50),
+              MicroSeconds(100),
+              S40_CENTER_FREQUENCY + MHz_u{10},
+              MHz_u{20}}},
+            {},
+            {
+                {aCcaTimeWithDelta,
+                 WifiPhyState::IDLE}, // state of primary stays idle after aCcaTimeWithDelta
+                {MicroSeconds(50) + aCcaTimeWithDelta,
+                 WifiPhyState::IDLE}, // state of primary stays IDLE
+                {MicroSeconds(50) + MicroSeconds(100) - smallDelta,
+                 WifiPhyState::IDLE}, // IDLE just before the transmission ends
+                {MicroSeconds(50) + MicroSeconds(100) + smallDelta,
+                 WifiPhyState::IDLE} // IDLE just after the transmission ends
+            },
+            {{aCcaTimeWithDelta, // notification upon reception of the first signal
+              MicroSeconds(100),
+              WIFI_CHANLIST_SECONDARY160,
+              m_expectedPer20MhzCcaBusyDurations.at(0)},
+             {MicroSeconds(50) +
+                  aCcaTimeWithDelta, // notification upon reception of the second signal
+              MicroSeconds(50) + MicroSeconds(100),
+              WIFI_CHANLIST_SECONDARY40,
+              m_expectedPer20MhzCcaBusyDurations.at(1)}});
+        delay += Seconds(1.0);
+        ResetExpectedPer20MhzCcaBusyDurations();
+
+        //----------------------------------------------------------------------------------------------------------------------------------
+        // Verify PHY state stays IDLE but notifies CCA-BUSY for the S20 channel while the S160
+        // channel was already in CCA-BUSY state
+        Simulator::Schedule(delay,
+                            &WifiPhyCcaIndicationTest::LogScenario,
+                            this,
+                            "Reception of a signal that occupies S160 followed by the reception of "
+                            "another signal that occupies S20");
+        m_expectedPer20MhzCcaBusyDurations.at(0).at(12) = MicroSeconds(100);
+        m_expectedPer20MhzCcaBusyDurations.at(1).at(1) = MicroSeconds(100);
+        m_expectedPer20MhzCcaBusyDurations.at(1).at(12) = MicroSeconds(50);
+        ScheduleTest(
+            delay,
+            {{-52.0,
+              MicroSeconds(0),
+              MicroSeconds(100),
+              S160_CENTER_FREQUENCY + MHz_u{10},
+              MHz_u{20}},
+             {-52.0, MicroSeconds(50), MicroSeconds(100), S20_CENTER_FREQUENCY, MHz_u{20}}},
+            {},
+            {
+                {aCcaTimeWithDelta,
+                 WifiPhyState::IDLE}, // state of primary stays idle after aCcaTimeWithDelta
+                {MicroSeconds(50) + aCcaTimeWithDelta,
+                 WifiPhyState::IDLE}, // state of primary stays IDLE
+                {MicroSeconds(50) + MicroSeconds(100) - smallDelta,
+                 WifiPhyState::IDLE}, // IDLE just before the transmission ends
+                {MicroSeconds(50) + MicroSeconds(100) + smallDelta,
+                 WifiPhyState::IDLE} // IDLE just after the transmission ends
+            },
+            {{aCcaTimeWithDelta, // notification upon reception of the first signal
+              MicroSeconds(100),
+              WIFI_CHANLIST_SECONDARY160,
+              m_expectedPer20MhzCcaBusyDurations.at(0)},
+             {MicroSeconds(50) +
+                  aCcaTimeWithDelta, // notification upon reception of the second signal
+              MicroSeconds(50) + MicroSeconds(100),
+              WIFI_CHANLIST_SECONDARY,
+              m_expectedPer20MhzCcaBusyDurations.at(1)}});
+        delay += Seconds(1.0);
+        ResetExpectedPer20MhzCcaBusyDurations();
+
+        //----------------------------------------------------------------------------------------------------------------------------------
+        // Verify PHY state stays IDLE when a 160 MHz PPDU that occupies S160 with received
+        // power below the Per 20 MHz CCA threshold for all occupied 20 MHz subchannels
+        Simulator::Schedule(
+            delay,
+            &WifiPhyCcaIndicationTest::LogScenario,
+            this,
+            "Reception of a 160 MHz PPDU that occupies S160 below CCA sensitivity threshold");
+        ScheduleTest(delay,
+                     {},
+                     {{-64.0, MicroSeconds(0), S160_CENTER_FREQUENCY, MHz_u{160}}},
+                     {
+                         {aCcaTimeWithDelta, WifiPhyState::IDLE}, // IDLE after aCcaTimeWithDelta
+                         {ppduDurations.at(160) - smallDelta,
+                          WifiPhyState::IDLE}, // IDLE just before the transmission ends
+                         {ppduDurations.at(160) + smallDelta,
+                          WifiPhyState::IDLE} // IDLE just after the transmission ends
+                     },
+                     {});
+        delay += Seconds(1.0);
+
+        //----------------------------------------------------------------------------------------------------------------------------------
+        // Verify PHY state stays IDLE but CCA-BUSY indication is reported when a 160 MHz PPDU
+        // that occupies S160 with received power above the Per 20 MHz CCA threshold for any
+        // occupied 20 MHz subchannels
+        Simulator::Schedule(
+            delay,
+            &WifiPhyCcaIndicationTest::LogScenario,
+            this,
+            "Reception of a 160 MHz PPDU that occupies S160 above CCA sensitivity threshold");
+        std::fill_n(m_expectedPer20MhzCcaBusyDurations.at(0).begin() + 8, 8, ppduDurations.at(160));
+        ScheduleTest(delay,
+                     {},
+                     {{-62.0, MicroSeconds(0), S160_CENTER_FREQUENCY, MHz_u{160}}},
+                     {
+                         {aCcaTimeWithDelta, WifiPhyState::IDLE}, // IDLE after aCcaTimeWithDelta
+                         {ppduDurations.at(160) - smallDelta,
+                          WifiPhyState::IDLE}, // IDLE just before the transmission ends
+                         {ppduDurations.at(160) + smallDelta,
+                          WifiPhyState::IDLE} // IDLE just after the transmission ends
+                     },
+                     {{aCcaTimeWithDelta,
+                       ppduDurations.at(160),
+                       WIFI_CHANLIST_SECONDARY160,
+                       m_expectedPer20MhzCcaBusyDurations.at(0)}});
+        delay += Seconds(1.0);
+        ResetExpectedPer20MhzCcaBusyDurations();
     }
 
     Simulator::Run();
@@ -3037,22 +3776,29 @@
 void
 WifiPhyCcaIndicationTest::DoRun()
 {
-    m_frequency = MHz_u{5180};
+    m_frequency = P20_CENTER_FREQUENCY;
     m_channelWidth = MHz_u{20};
     RunOne();
 
-    m_frequency = MHz_u{5190};
+    m_frequency = P40_CENTER_FREQUENCY;
     m_channelWidth = MHz_u{40};
     RunOne();
 
-    m_frequency = MHz_u{5210};
+    m_frequency = P80_CENTER_FREQUENCY;
     m_channelWidth = MHz_u{80};
     RunOne();
 
-    m_frequency = MHz_u{5250};
+    m_frequency = P160_CENTER_FREQUENCY;
     m_channelWidth = MHz_u{160};
     RunOne();
 
+    if (m_standard > WIFI_STANDARD_80211ax)
+    {
+        m_frequency = P320_CENTER_FREQUENCY;
+        m_channelWidth = MHz_u{320};
+        RunOne();
+    }
+
     Simulator::Destroy();
 }
 
@@ -3086,7 +3832,8 @@
     : TestSuite("wifi-phy-cca", Type::UNIT)
 {
     AddTestCase(new WifiPhyCcaThresholdsTest, TestCase::Duration::QUICK);
-    AddTestCase(new WifiPhyCcaIndicationTest, TestCase::Duration::QUICK);
+    AddTestCase(new WifiPhyCcaIndicationTest(WIFI_STANDARD_80211ax), TestCase::Duration::QUICK);
+    AddTestCase(new WifiPhyCcaIndicationTest(WIFI_STANDARD_80211be), TestCase::Duration::QUICK);
 }
 
 static WifiPhyCcaTestSuite WifiPhyCcaTestSuite; ///< the test suite
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/test/wifi-phy-mu-mimo-test.cc ns-3.45/src/wifi/test/wifi-phy-mu-mimo-test.cc
--- ns-3.44/src/wifi/test/wifi-phy-mu-mimo-test.cc	2025-03-09 16:55:49.811372800 -0700
+++ ns-3.45/src/wifi/test/wifi-phy-mu-mimo-test.cc	2025-06-01 20:34:45.640702200 -0700
@@ -92,8 +92,8 @@
 {
     // Verify TxVector is OFDMA
     std::list<HeMuUserInfo> userInfos;
-    userInfos.push_back({{HeRu::RU_106_TONE, 1, true}, 11, 1});
-    userInfos.push_back({{HeRu::RU_106_TONE, 2, true}, 10, 2});
+    userInfos.push_back({HeRu::RuSpec{RuType::RU_106_TONE, 1, true}, 11, 1});
+    userInfos.push_back({HeRu::RuSpec{RuType::RU_106_TONE, 2, true}, 10, 2});
     WifiTxVector txVector = BuildTxVector(MHz_u{20}, userInfos);
     NS_TEST_EXPECT_MSG_EQ(txVector.IsDlOfdma(),
                           true,
@@ -110,8 +110,9 @@
     userInfos.clear();
 
     // Verify TxVector is a full BW MU-MIMO
-    userInfos.push_back({{HeRu::RU_242_TONE, 1, true}, 11, 1});
-    userInfos.push_back({{HeRu::RU_242_TONE, 1, true}, 10, 2});
+    auto ru = HeRu::RuSpec{RuType::RU_242_TONE, 1, true};
+    userInfos.push_back({ru, 11, 1});
+    userInfos.push_back({ru, 10, 2});
     txVector = BuildTxVector(MHz_u{20}, userInfos);
     NS_TEST_EXPECT_MSG_EQ(txVector.IsDlOfdma(),
                           false,
@@ -128,15 +129,16 @@
     userInfos.clear();
 
     // Verify TxVector is not valid if there are more than 8 STAs using the same RU
-    userInfos.push_back({{HeRu::RU_242_TONE, 1, true}, 11, 1});
-    userInfos.push_back({{HeRu::RU_242_TONE, 1, true}, 10, 1});
-    userInfos.push_back({{HeRu::RU_242_TONE, 1, true}, 9, 1});
-    userInfos.push_back({{HeRu::RU_242_TONE, 1, true}, 8, 1});
-    userInfos.push_back({{HeRu::RU_242_TONE, 1, true}, 7, 1});
-    userInfos.push_back({{HeRu::RU_242_TONE, 1, true}, 6, 1});
-    userInfos.push_back({{HeRu::RU_242_TONE, 1, true}, 5, 1});
-    userInfos.push_back({{HeRu::RU_242_TONE, 1, true}, 4, 1});
-    userInfos.push_back({{HeRu::RU_242_TONE, 1, true}, 3, 1});
+    ru = HeRu::RuSpec{RuType::RU_242_TONE, 1, true};
+    userInfos.push_back({ru, 11, 1});
+    userInfos.push_back({ru, 10, 1});
+    userInfos.push_back({ru, 9, 1});
+    userInfos.push_back({ru, 8, 1});
+    userInfos.push_back({ru, 7, 1});
+    userInfos.push_back({ru, 6, 1});
+    userInfos.push_back({ru, 5, 1});
+    userInfos.push_back({ru, 4, 1});
+    userInfos.push_back({ru, 3, 1});
     txVector = BuildTxVector(MHz_u{20}, userInfos);
     NS_TEST_EXPECT_MSG_EQ(txVector.IsDlOfdma(),
                           false,
@@ -152,10 +154,10 @@
                           "TX-VECTOR should not indicate all checks are passed");
 
     // Verify TxVector is not valid if the total number of antennas in a full BW MU-MIMO is above 8
-    userInfos.push_back({{HeRu::RU_242_TONE, 1, true}, 11, 2});
-    userInfos.push_back({{HeRu::RU_242_TONE, 1, true}, 10, 2});
-    userInfos.push_back({{HeRu::RU_242_TONE, 1, true}, 9, 3});
-    userInfos.push_back({{HeRu::RU_242_TONE, 1, true}, 8, 3});
+    userInfos.push_back({ru, 11, 2});
+    userInfos.push_back({ru, 10, 2});
+    userInfos.push_back({ru, 9, 3});
+    userInfos.push_back({ru, 8, 3});
     txVector = BuildTxVector(MHz_u{20}, userInfos);
     NS_TEST_EXPECT_MSG_EQ(txVector.IsDlOfdma(),
                           false,
@@ -203,7 +205,9 @@
 
   private:
     uint16_t m_staId; ///< ID of the STA to which this PHY belongs to
-};                    // class MuMimoTestHePhy
+
+    // end of class MuMimoTestHePhy
+};
 
 MuMimoTestHePhy::MuMimoTestHePhy(uint16_t staId)
     : HePhy(),
@@ -270,7 +274,9 @@
     void DoDispose() override;
 
     Ptr<MuMimoTestHePhy> m_ofdmTestHePhy; ///< Pointer to HE PHY instance used for MU-MIMO test
-};                                        // class MuMimoSpectrumWifiPhy
+
+    // end of class MuMimoSpectrumWifiPhy
+};
 
 TypeId
 MuMimoSpectrumWifiPhy::GetTypeId()
@@ -539,7 +545,7 @@
                                          false);
 
     WifiConstPsduMap psdus;
-    HeRu::RuSpec ru(HeRu::GetRuType(m_channelWidth), 1, true); // full BW MU-MIMO
+    HeRu::RuSpec ru(WifiRu::GetRuType(m_channelWidth), 1, true); // full BW MU-MIMO
     for (const auto& staInfo : staInfos)
     {
         txVector.SetRu(ru, staInfo.staId);
@@ -1329,7 +1335,7 @@
                                          false,
                                          bssColor);
 
-    HeRu::RuSpec ru(HeRu::GetRuType(m_channelWidth), 1, true); // full BW MU-MIMO
+    HeRu::RuSpec ru(WifiRu::GetRuType(m_channelWidth), 1, true); // full BW MU-MIMO
     txVector.SetRu(ru, txStaId);
     txVector.SetMode(HePhy::GetHeMcs7(), txStaId);
     txVector.SetNss(nss, txStaId);
@@ -1353,7 +1359,7 @@
                           false,
                           bssColor);
 
-    HeRu::RuSpec ru(HeRu::GetRuType(m_channelWidth), 1, true); // full BW MU-MIMO
+    HeRu::RuSpec ru(WifiRu::GetRuType(m_channelWidth), 1, true); // full BW MU-MIMO
     for (auto staId : staIds)
     {
         txVector.SetRu(ru, staId);
@@ -1532,7 +1538,7 @@
 {
     Ptr<WifiNetDevice> device = DynamicCast<WifiNetDevice>(phy->GetDevice());
     Ptr<HeConfiguration> heConfiguration = device->GetHeConfiguration();
-    heConfiguration->SetAttribute("BssColor", UintegerValue(bssColor));
+    heConfiguration->m_bssColor = bssColor;
 }
 
 void
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/test/wifi-phy-ofdma-test.cc ns-3.45/src/wifi/test/wifi-phy-ofdma-test.cc
--- ns-3.44/src/wifi/test/wifi-phy-ofdma-test.cc	2025-03-09 16:55:49.811372800 -0700
+++ ns-3.45/src/wifi/test/wifi-phy-ofdma-test.cc	2025-06-01 20:34:45.641702400 -0700
@@ -10,9 +10,11 @@
 #include "ns3/boolean.h"
 #include "ns3/constant-position-mobility-model.h"
 #include "ns3/ctrl-headers.h"
+#include "ns3/demangle.h"
 #include "ns3/double.h"
+#include "ns3/eht-configuration.h"
+#include "ns3/eht-phy.h"
 #include "ns3/he-configuration.h"
-#include "ns3/he-phy.h"
 #include "ns3/he-ppdu.h"
 #include "ns3/interference-helper.h"
 #include "ns3/log.h"
@@ -57,10 +59,11 @@
     DEFAULT_CHANNEL_WIDTH; // expanded to channel width to model spectrum mask
 
 /**
- * HE PHY slightly modified so as to return a given
+ * PHY entity slightly modified so as to return a given
  * STA-ID in case of DL MU for OfdmaSpectrumWifiPhy.
  */
-class OfdmaTestHePhy : public HePhy
+template <typename PhyEntityType>
+class OfdmaTestPhy : public PhyEntityType
 {
   public:
     /**
@@ -68,8 +71,7 @@
      *
      * @param staId the ID of the STA to which this PHY belongs to
      */
-    OfdmaTestHePhy(uint16_t staId);
-    ~OfdmaTestHePhy() override;
+    OfdmaTestPhy(uint16_t staId);
 
     /**
      * Return the STA ID that has been assigned to the station this PHY belongs to.
@@ -87,39 +89,94 @@
      */
     void SetGlobalPpduUid(uint64_t uid);
 
+    /**
+     * Get the band used to transmit the non-OFDMA part of an HE TB PPDU.
+     *
+     * @param txVector the TXVECTOR used for the transmission
+     * @param staId the STA-ID of the station taking part of the UL MU
+     *
+     * @return the spectrum band used to transmit the non-OFDMA part of an HE TB PPDU
+     */
+    WifiSpectrumBandInfo GetNonOfdmaBand(const WifiTxVector& txVector, uint16_t staId) const;
+
   private:
     uint16_t m_staId; ///< ID of the STA to which this PHY belongs to
-};                    // class OfdmaTestHePhy
 
-OfdmaTestHePhy::OfdmaTestHePhy(uint16_t staId)
-    : HePhy(),
-      m_staId(staId)
-{
-}
+    // end of class OfdmaTestPhy
+};
 
-OfdmaTestHePhy::~OfdmaTestHePhy()
+template <typename PhyEntityType>
+OfdmaTestPhy<PhyEntityType>::OfdmaTestPhy(uint16_t staId)
+    : PhyEntityType(),
+      m_staId(staId)
 {
 }
 
+template <typename PhyEntityType>
 uint16_t
-OfdmaTestHePhy::GetStaId(const Ptr<const WifiPpdu> ppdu) const
+OfdmaTestPhy<PhyEntityType>::GetStaId(const Ptr<const WifiPpdu> ppdu) const
 {
+    NS_LOG_FUNCTION(this << ppdu);
     if (ppdu->GetType() == WIFI_PPDU_TYPE_DL_MU)
     {
         return m_staId;
     }
-    return HePhy::GetStaId(ppdu);
+    return PhyEntityType::GetStaId(ppdu);
 }
 
+template <typename PhyEntityType>
 void
-OfdmaTestHePhy::SetGlobalPpduUid(uint64_t uid)
+OfdmaTestPhy<PhyEntityType>::SetGlobalPpduUid(uint64_t uid)
 {
-    m_globalPpduUid = uid;
+    PhyEntityType::m_globalPpduUid = uid;
+}
+
+template <typename PhyEntityType>
+WifiSpectrumBandInfo
+OfdmaTestPhy<PhyEntityType>::GetNonOfdmaBand(const WifiTxVector& txVector, uint16_t staId) const
+{
+    const auto mc = txVector.GetModulationClass();
+    NS_ASSERT(txVector.IsUlMu() && (mc >= WIFI_MOD_CLASS_HE));
+    const auto channelWidth = txVector.GetChannelWidth();
+    NS_ASSERT(channelWidth <= PhyEntityType::m_wifiPhy->GetChannelWidth());
+
+    auto ru = txVector.GetRu(staId);
+    const auto nonOfdmaWidth = PhyEntityType::GetNonOfdmaWidth(ru);
+
+    // Find the RU that encompasses the non-OFDMA part of the HE TB PPDU for the STA-ID
+    auto nonOfdmaRu = WifiRu::FindOverlappingRu(channelWidth, ru, WifiRu::GetRuType(nonOfdmaWidth));
+
+    const auto groupPreamble = WifiRu::GetSubcarrierGroup(
+        channelWidth,
+        WifiRu::GetRuType(nonOfdmaRu),
+        WifiRu::GetPhyIndex(
+            nonOfdmaRu,
+            channelWidth,
+            PhyEntityType::m_wifiPhy->GetOperatingChannel().GetPrimaryChannelIndex(MHz_u{20})),
+        mc);
+    const auto indices = PhyEntityType::ConvertRuSubcarriers(
+        {channelWidth,
+         PhyEntityType::GetGuardBandwidth(PhyEntityType::m_wifiPhy->GetChannelWidth()),
+         PhyEntityType::m_wifiPhy->GetOperatingChannel().GetFrequencies(),
+         PhyEntityType::m_wifiPhy->GetChannelWidth(),
+         PhyEntityType::m_wifiPhy->GetSubcarrierSpacing(),
+         mc,
+         {groupPreamble.front().first, groupPreamble.back().second},
+         PhyEntityType::m_wifiPhy->GetOperatingChannel().GetPrimaryChannelIndex(channelWidth)});
+    WifiSpectrumBandInfo nonOfdmaBand{};
+    for (const auto& indicesPerSegment : indices)
+    {
+        nonOfdmaBand.indices.emplace_back(indicesPerSegment);
+        nonOfdmaBand.frequencies.emplace_back(
+            PhyEntityType::m_wifiPhy->ConvertIndicesToFrequencies(indicesPerSegment));
+    }
+    return nonOfdmaBand;
 }
 
 /**
  * SpectrumWifiPhy used for testing OFDMA.
  */
+template <typename LatestPhyEntityType>
 class OfdmaSpectrumWifiPhy : public SpectrumWifiPhy
 {
   public:
@@ -134,7 +191,6 @@
      * @param staId the ID of the STA to which this PHY belongs to
      */
     OfdmaSpectrumWifiPhy(uint16_t staId);
-    ~OfdmaSpectrumWifiPhy() override;
 
     void DoInitialize() override;
     void DoDispose() override;
@@ -185,98 +241,113 @@
     Time GetEnergyDuration(Watt_u energy, WifiSpectrumBandInfo band);
 
     /**
-     * @return a const pointer to the HE PHY instance
+     * @return a const pointer to the latest PHY entity instance
      */
-    Ptr<const HePhy> GetHePhy() const;
+    Ptr<LatestPhyEntityType> GetPhyEntity() const;
 
   private:
-    Ptr<OfdmaTestHePhy> m_ofdmTestHePhy; ///< Pointer to HE PHY instance used for OFDMA test
-    TracedCallback<uint64_t>
-        m_phyTxPpduUidTrace; //!< Callback providing UID of the PPDU that is about to be transmitted
-};                           // class OfdmaSpectrumWifiPhy
+    /// Pointer to latest PHY entity instance used for OFDMA test
+    Ptr<OfdmaTestPhy<LatestPhyEntityType>> m_ofdmaTestPhy;
 
+    /// Callback providing UID of the PPDU that is about to be transmitted
+    TracedCallback<uint64_t> m_phyTxPpduUidTrace;
+
+    // end of class OfdmaSpectrumWifiPhy
+};
+
+template <typename LatestPhyEntityType>
 TypeId
-OfdmaSpectrumWifiPhy::GetTypeId()
+OfdmaSpectrumWifiPhy<LatestPhyEntityType>::GetTypeId()
 {
     static TypeId tid =
-        TypeId("ns3::OfdmaSpectrumWifiPhy")
+        TypeId(std::string("ns3::OfdmaSpectrumWifiPhy") +
+               Demangle(typeid(LatestPhyEntityType).name()))
             .SetParent<SpectrumWifiPhy>()
             .SetGroupName("Wifi")
             .AddTraceSource("TxPpduUid",
                             "UID of the PPDU to be transmitted",
-                            MakeTraceSourceAccessor(&OfdmaSpectrumWifiPhy::m_phyTxPpduUidTrace),
-                            "ns3::OfdmaSpectrumWifiPhy::TxPpduUidCallback");
+                            MakeTraceSourceAccessor(
+                                &OfdmaSpectrumWifiPhy<LatestPhyEntityType>::m_phyTxPpduUidTrace),
+                            "ns3::OfdmaSpectrumWifiPhy<LatestPhyEntityType>::TxPpduUidCallback");
     return tid;
 }
 
-OfdmaSpectrumWifiPhy::OfdmaSpectrumWifiPhy(uint16_t staId)
+template <typename LatestPhyEntityType>
+OfdmaSpectrumWifiPhy<LatestPhyEntityType>::OfdmaSpectrumWifiPhy(uint16_t staId)
     : SpectrumWifiPhy()
 {
-    m_ofdmTestHePhy = Create<OfdmaTestHePhy>(staId);
-    m_ofdmTestHePhy->SetOwner(this);
-}
-
-OfdmaSpectrumWifiPhy::~OfdmaSpectrumWifiPhy()
-{
+    m_ofdmaTestPhy = Create<OfdmaTestPhy<LatestPhyEntityType>>(staId);
+    m_ofdmaTestPhy->SetOwner(this);
 }
 
+template <typename LatestPhyEntityType>
 void
-OfdmaSpectrumWifiPhy::DoInitialize()
+OfdmaSpectrumWifiPhy<LatestPhyEntityType>::DoInitialize()
 {
-    // Replace HE PHY instance with test instance
-    m_phyEntities[WIFI_MOD_CLASS_HE] = m_ofdmTestHePhy;
+    const auto modClass = GetModulationClassForStandard(GetStandard());
+    // Replace PHY instance with test instance
+    m_phyEntities[modClass] = m_ofdmaTestPhy;
     SpectrumWifiPhy::DoInitialize();
 }
 
+template <typename LatestPhyEntityType>
 void
-OfdmaSpectrumWifiPhy::DoDispose()
+OfdmaSpectrumWifiPhy<LatestPhyEntityType>::DoDispose()
 {
-    m_ofdmTestHePhy = nullptr;
+    m_ofdmaTestPhy = nullptr;
     SpectrumWifiPhy::DoDispose();
 }
 
+template <typename LatestPhyEntityType>
 void
-OfdmaSpectrumWifiPhy::SetPpduUid(uint64_t uid)
+OfdmaSpectrumWifiPhy<LatestPhyEntityType>::SetPpduUid(uint64_t uid)
 {
-    m_ofdmTestHePhy->SetGlobalPpduUid(uid);
+    m_ofdmaTestPhy->SetGlobalPpduUid(uid);
     m_previouslyRxPpduUid = uid;
 }
 
+template <typename LatestPhyEntityType>
 void
-OfdmaSpectrumWifiPhy::SetTriggerFrameUid(uint64_t uid)
+OfdmaSpectrumWifiPhy<LatestPhyEntityType>::SetTriggerFrameUid(uint64_t uid)
 {
     m_previouslyRxPpduUid = uid;
 }
 
+template <typename LatestPhyEntityType>
 void
-OfdmaSpectrumWifiPhy::StartTx(Ptr<const WifiPpdu> ppdu)
+OfdmaSpectrumWifiPhy<LatestPhyEntityType>::StartTx(Ptr<const WifiPpdu> ppdu)
 {
     m_phyTxPpduUidTrace(ppdu->GetUid());
     SpectrumWifiPhy::StartTx(ppdu);
 }
 
+template <typename LatestPhyEntityType>
 std::map<std::pair<uint64_t, WifiPreamble>, Ptr<Event>>&
-OfdmaSpectrumWifiPhy::GetCurrentPreambleEvents()
+OfdmaSpectrumWifiPhy<LatestPhyEntityType>::GetCurrentPreambleEvents()
 {
     return m_currentPreambleEvents;
 }
 
+template <typename LatestPhyEntityType>
 Ptr<Event>
-OfdmaSpectrumWifiPhy::GetCurrentEvent()
+OfdmaSpectrumWifiPhy<LatestPhyEntityType>::GetCurrentEvent()
 {
     return m_currentEvent;
 }
 
+template <typename LatestPhyEntityType>
 Time
-OfdmaSpectrumWifiPhy::GetEnergyDuration(Watt_u energy, WifiSpectrumBandInfo band)
+OfdmaSpectrumWifiPhy<LatestPhyEntityType>::GetEnergyDuration(Watt_u energy,
+                                                             WifiSpectrumBandInfo band)
 {
     return m_interference->GetEnergyDuration(energy, band);
 }
 
-Ptr<const HePhy>
-OfdmaSpectrumWifiPhy::GetHePhy() const
+template <typename LatestPhyEntityType>
+Ptr<LatestPhyEntityType>
+OfdmaSpectrumWifiPhy<LatestPhyEntityType>::GetPhyEntity() const
 {
-    return DynamicCast<const HePhy>(GetLatestPhyEntity());
+    return DynamicCast<LatestPhyEntityType>(m_ofdmaTestPhy /*GetLatestPhyEntity()*/);
 }
 
 /**
@@ -285,11 +356,14 @@
  *
  * @brief DL-OFDMA PHY test
  */
+template <typename LatestPhyEntityType>
 class TestDlOfdmaPhyTransmission : public TestCase
 {
   public:
+    /**
+     * Constructor
+     */
     TestDlOfdmaPhyTransmission();
-    ~TestDlOfdmaPhyTransmission() override;
 
   private:
     void DoSetup() override;
@@ -407,54 +481,55 @@
      * @param phy the PHY
      * @param expectedState the expected state of the PHY
      */
-    void CheckPhyState(Ptr<OfdmaSpectrumWifiPhy> phy, WifiPhyState expectedState);
+    void CheckPhyState(Ptr<OfdmaSpectrumWifiPhy<LatestPhyEntityType>> phy,
+                       WifiPhyState expectedState);
     /**
      * Check the PHY state now
      * @param phy the PHY
      * @param expectedState the expected state of the PHY
      */
-    void DoCheckPhyState(Ptr<OfdmaSpectrumWifiPhy> phy, WifiPhyState expectedState);
+    void DoCheckPhyState(Ptr<OfdmaSpectrumWifiPhy<LatestPhyEntityType>> phy,
+                         WifiPhyState expectedState);
 
-    uint32_t m_countRxSuccessSta1; ///< count RX success for STA 1
-    uint32_t m_countRxSuccessSta2; ///< count RX success for STA 2
-    uint32_t m_countRxSuccessSta3; ///< count RX success for STA 3
-    uint32_t m_countRxFailureSta1; ///< count RX failure for STA 1
-    uint32_t m_countRxFailureSta2; ///< count RX failure for STA 2
-    uint32_t m_countRxFailureSta3; ///< count RX failure for STA 3
-    uint32_t m_countRxBytesSta1;   ///< count RX bytes for STA 1
-    uint32_t m_countRxBytesSta2;   ///< count RX bytes for STA 2
-    uint32_t m_countRxBytesSta3;   ///< count RX bytes for STA 3
-
-    Ptr<SpectrumWifiPhy> m_phyAp;           ///< PHY of AP
-    Ptr<OfdmaSpectrumWifiPhy> m_phySta1;    ///< PHY of STA 1
-    Ptr<OfdmaSpectrumWifiPhy> m_phySta2;    ///< PHY of STA 2
-    Ptr<OfdmaSpectrumWifiPhy> m_phySta3;    ///< PHY of STA 3
-    Ptr<WaveformGenerator> m_phyInterferer; ///< PHY of interferer
+    WifiModulationClass m_modClass; ///< the modulation class to consider for the test
 
-    MHz_u m_frequency;           ///< frequency
-    MHz_u m_channelWidth;        ///< channel width
-    Time m_expectedPpduDuration; ///< expected duration to send MU PPDU
+    uint32_t m_countRxSuccessSta1{0}; ///< count RX success for STA 1
+    uint32_t m_countRxSuccessSta2{0}; ///< count RX success for STA 2
+    uint32_t m_countRxSuccessSta3{0}; ///< count RX success for STA 3
+    uint32_t m_countRxFailureSta1{0}; ///< count RX failure for STA 1
+    uint32_t m_countRxFailureSta2{0}; ///< count RX failure for STA 2
+    uint32_t m_countRxFailureSta3{0}; ///< count RX failure for STA 3
+    uint32_t m_countRxBytesSta1{0};   ///< count RX bytes for STA 1
+    uint32_t m_countRxBytesSta2{0};   ///< count RX bytes for STA 2
+    uint32_t m_countRxBytesSta3{0};   ///< count RX bytes for STA 3
+
+    Ptr<SpectrumWifiPhy> m_phyAp;                             ///< PHY of AP
+    Ptr<OfdmaSpectrumWifiPhy<LatestPhyEntityType>> m_phySta1; ///< PHY of STA 1
+    Ptr<OfdmaSpectrumWifiPhy<LatestPhyEntityType>> m_phySta2; ///< PHY of STA 2
+    Ptr<OfdmaSpectrumWifiPhy<LatestPhyEntityType>> m_phySta3; ///< PHY of STA 3
+    Ptr<WaveformGenerator> m_phyInterferer;                   ///< PHY of interferer
+
+    MHz_u m_frequency{DEFAULT_FREQUENCY};        ///< frequency
+    MHz_u m_channelWidth{DEFAULT_CHANNEL_WIDTH}; ///< channel width
+    Time m_expectedPpduDuration;                 ///< expected duration to send MU PPDU
 };
 
-TestDlOfdmaPhyTransmission::TestDlOfdmaPhyTransmission()
-    : TestCase("DL-OFDMA PHY test"),
-      m_countRxSuccessSta1(0),
-      m_countRxSuccessSta2(0),
-      m_countRxSuccessSta3(0),
-      m_countRxFailureSta1(0),
-      m_countRxFailureSta2(0),
-      m_countRxFailureSta3(0),
-      m_countRxBytesSta1(0),
-      m_countRxBytesSta2(0),
-      m_countRxBytesSta3(0),
-      m_frequency(DEFAULT_FREQUENCY),
-      m_channelWidth(DEFAULT_CHANNEL_WIDTH),
-      m_expectedPpduDuration(NanoSeconds(306400))
+template <typename LatestPhyEntityType>
+TestDlOfdmaPhyTransmission<LatestPhyEntityType>::TestDlOfdmaPhyTransmission()
+    : TestCase{std::string("DL-OFDMA PHY test for ") +
+               ((Demangle(typeid(LatestPhyEntityType).name()).find("He") != std::string::npos)
+                    ? "HE"
+                    : "EHT")},
+      m_modClass{(Demangle(typeid(LatestPhyEntityType).name()).find("He") != std::string::npos)
+                     ? WIFI_MOD_CLASS_HE
+                     : WIFI_MOD_CLASS_EHT},
+      m_expectedPpduDuration{NanoSeconds(306400)}
 {
 }
 
+template <typename LatestPhyEntityType>
 void
-TestDlOfdmaPhyTransmission::ResetResults()
+TestDlOfdmaPhyTransmission<LatestPhyEntityType>::ResetResults()
 {
     m_countRxSuccessSta1 = 0;
     m_countRxSuccessSta2 = 0;
@@ -467,57 +542,92 @@
     m_countRxBytesSta3 = 0;
 }
 
+template <typename LatestPhyEntityType>
 void
-TestDlOfdmaPhyTransmission::SendMuPpdu(uint16_t rxStaId1, uint16_t rxStaId2)
+TestDlOfdmaPhyTransmission<LatestPhyEntityType>::SendMuPpdu(uint16_t rxStaId1, uint16_t rxStaId2)
 {
     NS_LOG_FUNCTION(this << rxStaId1 << rxStaId2);
     WifiConstPsduMap psdus;
-    WifiTxVector txVector{HePhy::GetHeMcs7(),
-                          0,
-                          WIFI_PREAMBLE_HE_MU,
-                          NanoSeconds(800),
-                          1,
-                          1,
-                          0,
-                          m_channelWidth,
-                          false,
-                          false};
-    HeRu::RuType ruType = HeRu::RU_106_TONE;
+    WifiTxVector txVector{
+        (m_modClass == WIFI_MOD_CLASS_HE) ? HePhy::GetHeMcs7() : EhtPhy::GetEhtMcs7(),
+        0,
+        (m_modClass == WIFI_MOD_CLASS_HE) ? WIFI_PREAMBLE_HE_MU : WIFI_PREAMBLE_EHT_MU,
+        NanoSeconds(800),
+        1,
+        1,
+        0,
+        m_channelWidth,
+        false,
+        false};
+    if (m_modClass == WIFI_MOD_CLASS_EHT)
+    {
+        txVector.SetEhtPpduType(0);
+    }
+    auto ruType{RuType::RU_TYPE_MAX};
     if (m_channelWidth == MHz_u{20})
     {
-        ruType = HeRu::RU_106_TONE;
-        txVector.SetRuAllocation({96}, 0);
+        ruType = RuType::RU_106_TONE;
+        const uint16_t ruAllocPer20 = (m_modClass == WIFI_MOD_CLASS_HE) ? 96 : 48;
+        txVector.SetRuAllocation({ruAllocPer20}, 0);
     }
     else if (m_channelWidth == MHz_u{40})
     {
-        ruType = HeRu::RU_242_TONE;
-        txVector.SetRuAllocation({192, 192}, 0);
+        ruType = RuType::RU_242_TONE;
+        const uint16_t ruAllocPer20 = (m_modClass == WIFI_MOD_CLASS_HE) ? 192 : 64;
+        txVector.SetRuAllocation({ruAllocPer20, ruAllocPer20}, 0);
     }
     else if (m_channelWidth == MHz_u{80})
     {
-        ruType = HeRu::RU_484_TONE;
-        txVector.SetRuAllocation({200, 200, 200, 200}, 0);
+        ruType = RuType::RU_484_TONE;
+        const uint16_t ruAllocUser = (m_modClass == WIFI_MOD_CLASS_HE) ? 200 : 72;
+        const uint16_t ruAllocNoUser = (m_modClass == WIFI_MOD_CLASS_HE) ? 114 : 29;
+        txVector.SetRuAllocation({ruAllocUser, ruAllocNoUser, ruAllocNoUser, ruAllocUser}, 0);
     }
     else if (m_channelWidth == MHz_u{160})
     {
-        ruType = HeRu::RU_996_TONE;
-        txVector.SetRuAllocation({208, 208, 208, 208, 208, 208, 208, 208}, 0);
+        ruType = RuType::RU_996_TONE;
+        const uint16_t ruAllocUser = (m_modClass == WIFI_MOD_CLASS_HE) ? 208 : 80;
+        const uint16_t ruAllocNoUser = (m_modClass == WIFI_MOD_CLASS_HE) ? 115 : 30;
+        txVector.SetRuAllocation({ruAllocUser,
+                                  ruAllocNoUser,
+                                  ruAllocUser,
+                                  ruAllocNoUser,
+                                  ruAllocNoUser,
+                                  ruAllocUser,
+                                  ruAllocNoUser,
+                                  ruAllocUser},
+                                 0);
+    }
+    else if (m_channelWidth == MHz_u{320})
+    {
+        NS_ASSERT(m_modClass >= WIFI_MOD_CLASS_EHT);
+        ruType = RuType::RU_2x996_TONE;
+        txVector.SetRuAllocation({88, 30, 88, 30, 88, 30, 88, 30, 30, 88, 30, 88, 30, 88, 30, 88},
+                                 0);
     }
     else
     {
-        NS_ASSERT_MSG(false, "Unsupported channel width");
+        NS_ASSERT_MSG(false, "Unsupported channel width: " << m_channelWidth);
     }
 
     txVector.SetSigBMode(VhtPhy::GetVhtMcs5());
 
-    HeRu::RuSpec ru1(ruType, 1, true);
+    const auto ru1 = (m_modClass == WIFI_MOD_CLASS_HE)
+                         ? WifiRu::RuSpec(HeRu::RuSpec{ruType, 1, true})
+                         : WifiRu::RuSpec(EhtRu::RuSpec{ruType, 1, true, true});
     txVector.SetRu(ru1, rxStaId1);
-    txVector.SetMode(HePhy::GetHeMcs7(), rxStaId1);
+    txVector.SetMode((m_modClass == WIFI_MOD_CLASS_HE) ? HePhy::GetHeMcs7() : EhtPhy::GetEhtMcs7(),
+                     rxStaId1);
     txVector.SetNss(1, rxStaId1);
 
-    HeRu::RuSpec ru2(ruType, (m_channelWidth == MHz_u{160} ? 1 : 2), m_channelWidth != MHz_u{160});
+    std::size_t ru2Index = (m_channelWidth > MHz_u{80}) ? 1 : 2;
+    const auto ru2 =
+        (m_modClass == WIFI_MOD_CLASS_HE)
+            ? WifiRu::RuSpec(HeRu::RuSpec{ruType, ru2Index, m_channelWidth != MHz_u{160}})
+            : WifiRu::RuSpec(EhtRu::RuSpec{ruType, ru2Index, m_channelWidth != MHz_u{320}, true});
     txVector.SetRu(ru2, rxStaId2);
-    txVector.SetMode(HePhy::GetHeMcs9(), rxStaId2);
+    txVector.SetMode((m_modClass == WIFI_MOD_CLASS_HE) ? HePhy::GetHeMcs9() : EhtPhy::GetEhtMcs9(),
+                     rxStaId2);
     txVector.SetNss(1, rxStaId2);
 
     Ptr<Packet> pkt1 = Create<Packet>(1000);
@@ -541,138 +651,160 @@
     m_phyAp->Send(psdus, txVector);
 }
 
+template <typename LatestPhyEntityType>
 void
-TestDlOfdmaPhyTransmission::GenerateInterference(Ptr<SpectrumValue> interferencePsd, Time duration)
+TestDlOfdmaPhyTransmission<LatestPhyEntityType>::GenerateInterference(
+    Ptr<SpectrumValue> interferencePsd,
+    Time duration)
 {
     m_phyInterferer->SetTxPowerSpectralDensity(interferencePsd);
     m_phyInterferer->SetPeriod(duration);
     m_phyInterferer->Start();
-    Simulator::Schedule(duration, &TestDlOfdmaPhyTransmission::StopInterference, this);
+    Simulator::Schedule(duration,
+                        &TestDlOfdmaPhyTransmission<LatestPhyEntityType>::StopInterference,
+                        this);
 }
 
+template <typename LatestPhyEntityType>
 void
-TestDlOfdmaPhyTransmission::StopInterference()
+TestDlOfdmaPhyTransmission<LatestPhyEntityType>::StopInterference()
 {
     m_phyInterferer->Stop();
 }
 
-TestDlOfdmaPhyTransmission::~TestDlOfdmaPhyTransmission()
-{
-}
-
+template <typename LatestPhyEntityType>
 void
-TestDlOfdmaPhyTransmission::RxSuccessSta1(Ptr<const WifiPsdu> psdu,
-                                          RxSignalInfo rxSignalInfo,
-                                          const WifiTxVector& txVector,
-                                          const std::vector<bool>& /*statusPerMpdu*/)
+TestDlOfdmaPhyTransmission<LatestPhyEntityType>::RxSuccessSta1(
+    Ptr<const WifiPsdu> psdu,
+    RxSignalInfo rxSignalInfo,
+    const WifiTxVector& txVector,
+    const std::vector<bool>& /*statusPerMpdu*/)
 {
     NS_LOG_FUNCTION(this << *psdu << rxSignalInfo << txVector);
     m_countRxSuccessSta1++;
     m_countRxBytesSta1 += (psdu->GetSize() - 30);
 }
 
+template <typename LatestPhyEntityType>
 void
-TestDlOfdmaPhyTransmission::RxSuccessSta2(Ptr<const WifiPsdu> psdu,
-                                          RxSignalInfo rxSignalInfo,
-                                          const WifiTxVector& txVector,
-                                          const std::vector<bool>& /*statusPerMpdu*/)
+TestDlOfdmaPhyTransmission<LatestPhyEntityType>::RxSuccessSta2(
+    Ptr<const WifiPsdu> psdu,
+    RxSignalInfo rxSignalInfo,
+    const WifiTxVector& txVector,
+    const std::vector<bool>& /*statusPerMpdu*/)
 {
     NS_LOG_FUNCTION(this << *psdu << rxSignalInfo << txVector);
     m_countRxSuccessSta2++;
     m_countRxBytesSta2 += (psdu->GetSize() - 30);
 }
 
+template <typename LatestPhyEntityType>
 void
-TestDlOfdmaPhyTransmission::RxSuccessSta3(Ptr<const WifiPsdu> psdu,
-                                          RxSignalInfo rxSignalInfo,
-                                          const WifiTxVector& txVector,
-                                          const std::vector<bool>& /*statusPerMpdu*/)
+TestDlOfdmaPhyTransmission<LatestPhyEntityType>::RxSuccessSta3(
+    Ptr<const WifiPsdu> psdu,
+    RxSignalInfo rxSignalInfo,
+    const WifiTxVector& txVector,
+    const std::vector<bool>& /*statusPerMpdu*/)
 {
     NS_LOG_FUNCTION(this << *psdu << rxSignalInfo << txVector);
     m_countRxSuccessSta3++;
     m_countRxBytesSta3 += (psdu->GetSize() - 30);
 }
 
+template <typename LatestPhyEntityType>
 void
-TestDlOfdmaPhyTransmission::RxFailureSta1(Ptr<const WifiPsdu> psdu)
+TestDlOfdmaPhyTransmission<LatestPhyEntityType>::RxFailureSta1(Ptr<const WifiPsdu> psdu)
 {
     NS_LOG_FUNCTION(this << *psdu);
     m_countRxFailureSta1++;
 }
 
+template <typename LatestPhyEntityType>
 void
-TestDlOfdmaPhyTransmission::RxFailureSta2(Ptr<const WifiPsdu> psdu)
+TestDlOfdmaPhyTransmission<LatestPhyEntityType>::RxFailureSta2(Ptr<const WifiPsdu> psdu)
 {
     NS_LOG_FUNCTION(this << *psdu);
     m_countRxFailureSta2++;
 }
 
+template <typename LatestPhyEntityType>
 void
-TestDlOfdmaPhyTransmission::RxFailureSta3(Ptr<const WifiPsdu> psdu)
+TestDlOfdmaPhyTransmission<LatestPhyEntityType>::RxFailureSta3(Ptr<const WifiPsdu> psdu)
 {
     NS_LOG_FUNCTION(this << *psdu);
     m_countRxFailureSta3++;
 }
 
+template <typename LatestPhyEntityType>
 void
-TestDlOfdmaPhyTransmission::CheckResultsSta1(uint32_t expectedRxSuccess,
-                                             uint32_t expectedRxFailure,
-                                             uint32_t expectedRxBytes)
+TestDlOfdmaPhyTransmission<LatestPhyEntityType>::CheckResultsSta1(uint32_t expectedRxSuccess,
+                                                                  uint32_t expectedRxFailure,
+                                                                  uint32_t expectedRxBytes)
 {
     NS_TEST_ASSERT_MSG_EQ(m_countRxSuccessSta1,
                           expectedRxSuccess,
                           "The number of successfully received packets by STA 1 is not correct!");
     NS_TEST_ASSERT_MSG_EQ(m_countRxFailureSta1,
                           expectedRxFailure,
-                          "The number of unsuccessfuly received packets by STA 1 is not correct!");
+                          "The number of unsuccessfully received packets by STA 1 is not correct!");
     NS_TEST_ASSERT_MSG_EQ(m_countRxBytesSta1,
                           expectedRxBytes,
                           "The number of bytes received by STA 1 is not correct!");
 }
 
+template <typename LatestPhyEntityType>
 void
-TestDlOfdmaPhyTransmission::CheckResultsSta2(uint32_t expectedRxSuccess,
-                                             uint32_t expectedRxFailure,
-                                             uint32_t expectedRxBytes)
+TestDlOfdmaPhyTransmission<LatestPhyEntityType>::CheckResultsSta2(uint32_t expectedRxSuccess,
+                                                                  uint32_t expectedRxFailure,
+                                                                  uint32_t expectedRxBytes)
 {
     NS_TEST_ASSERT_MSG_EQ(m_countRxSuccessSta2,
                           expectedRxSuccess,
                           "The number of successfully received packets by STA 2 is not correct!");
     NS_TEST_ASSERT_MSG_EQ(m_countRxFailureSta2,
                           expectedRxFailure,
-                          "The number of unsuccessfuly received packets by STA 2 is not correct!");
+                          "The number of unsuccessfully received packets by STA 2 is not correct!");
     NS_TEST_ASSERT_MSG_EQ(m_countRxBytesSta2,
                           expectedRxBytes,
                           "The number of bytes received by STA 2 is not correct!");
 }
 
+template <typename LatestPhyEntityType>
 void
-TestDlOfdmaPhyTransmission::CheckResultsSta3(uint32_t expectedRxSuccess,
-                                             uint32_t expectedRxFailure,
-                                             uint32_t expectedRxBytes)
+TestDlOfdmaPhyTransmission<LatestPhyEntityType>::CheckResultsSta3(uint32_t expectedRxSuccess,
+                                                                  uint32_t expectedRxFailure,
+                                                                  uint32_t expectedRxBytes)
 {
     NS_TEST_ASSERT_MSG_EQ(m_countRxSuccessSta3,
                           expectedRxSuccess,
                           "The number of successfully received packets by STA 3 is not correct!");
     NS_TEST_ASSERT_MSG_EQ(m_countRxFailureSta3,
                           expectedRxFailure,
-                          "The number of unsuccessfuly received packets by STA 3 is not correct!");
+                          "The number of unsuccessfully received packets by STA 3 is not correct!");
     NS_TEST_ASSERT_MSG_EQ(m_countRxBytesSta3,
                           expectedRxBytes,
                           "The number of bytes received by STA 3 is not correct!");
 }
 
+template <typename LatestPhyEntityType>
 void
-TestDlOfdmaPhyTransmission::CheckPhyState(Ptr<OfdmaSpectrumWifiPhy> phy, WifiPhyState expectedState)
+TestDlOfdmaPhyTransmission<LatestPhyEntityType>::CheckPhyState(
+    Ptr<OfdmaSpectrumWifiPhy<LatestPhyEntityType>> phy,
+    WifiPhyState expectedState)
 {
     // This is needed to make sure PHY state will be checked as the last event if a state change
     // occurred at the exact same time as the check
-    Simulator::ScheduleNow(&TestDlOfdmaPhyTransmission::DoCheckPhyState, this, phy, expectedState);
+    Simulator::ScheduleNow(&TestDlOfdmaPhyTransmission<LatestPhyEntityType>::DoCheckPhyState,
+                           this,
+                           phy,
+                           expectedState);
 }
 
+template <typename LatestPhyEntityType>
 void
-TestDlOfdmaPhyTransmission::DoCheckPhyState(Ptr<OfdmaSpectrumWifiPhy> phy,
-                                            WifiPhyState expectedState)
+TestDlOfdmaPhyTransmission<LatestPhyEntityType>::DoCheckPhyState(
+    Ptr<OfdmaSpectrumWifiPhy<LatestPhyEntityType>> phy,
+    WifiPhyState expectedState)
 {
     WifiPhyState currentState;
     PointerValue ptr;
@@ -686,9 +818,13 @@
                                        << expectedState << " at " << Simulator::Now());
 }
 
+template <typename LatestPhyEntityType>
 void
-TestDlOfdmaPhyTransmission::DoSetup()
+TestDlOfdmaPhyTransmission<LatestPhyEntityType>::DoSetup()
 {
+    const auto standard =
+        (m_modClass == WIFI_MOD_CLASS_HE) ? WIFI_STANDARD_80211ax : WIFI_STANDARD_80211be;
+
     Ptr<MultiModelSpectrumChannel> spectrumChannel = CreateObject<MultiModelSpectrumChannel>();
     Ptr<FriisPropagationLossModel> lossModel = CreateObject<FriisPropagationLossModel>();
     lossModel->SetFrequency(MHzToHz(m_frequency));
@@ -706,69 +842,93 @@
     m_phyAp->SetErrorRateModel(apErrorModel);
     m_phyAp->SetDevice(apDev);
     m_phyAp->AddChannel(spectrumChannel);
-    m_phyAp->ConfigureStandard(WIFI_STANDARD_80211ax);
+    m_phyAp->ConfigureStandard(standard);
     Ptr<ConstantPositionMobilityModel> apMobility = CreateObject<ConstantPositionMobilityModel>();
     m_phyAp->SetMobility(apMobility);
     apDev->SetPhy(m_phyAp);
     apNode->AggregateObject(apMobility);
     apNode->AddDevice(apDev);
+    apDev->SetStandard(standard);
+    if (m_modClass >= WIFI_MOD_CLASS_EHT)
+    {
+        apDev->SetEhtConfiguration(CreateObject<EhtConfiguration>());
+    }
 
     Ptr<Node> sta1Node = CreateObject<Node>();
     Ptr<WifiNetDevice> sta1Dev = CreateObject<WifiNetDevice>();
-    m_phySta1 = CreateObject<OfdmaSpectrumWifiPhy>(1);
+    m_phySta1 = CreateObject<OfdmaSpectrumWifiPhy<LatestPhyEntityType>>(1);
     Ptr<InterferenceHelper> sta1InterferenceHelper = CreateObject<InterferenceHelper>();
     m_phySta1->SetInterferenceHelper(sta1InterferenceHelper);
     Ptr<ErrorRateModel> sta1ErrorModel = CreateObject<NistErrorRateModel>();
     m_phySta1->SetErrorRateModel(sta1ErrorModel);
     m_phySta1->SetDevice(sta1Dev);
     m_phySta1->AddChannel(spectrumChannel);
-    m_phySta1->ConfigureStandard(WIFI_STANDARD_80211ax);
-    m_phySta1->SetReceiveOkCallback(MakeCallback(&TestDlOfdmaPhyTransmission::RxSuccessSta1, this));
+    m_phySta1->ConfigureStandard(standard);
+    m_phySta1->SetReceiveOkCallback(
+        MakeCallback(&TestDlOfdmaPhyTransmission<LatestPhyEntityType>::RxSuccessSta1, this));
     m_phySta1->SetReceiveErrorCallback(
-        MakeCallback(&TestDlOfdmaPhyTransmission::RxFailureSta1, this));
+        MakeCallback(&TestDlOfdmaPhyTransmission<LatestPhyEntityType>::RxFailureSta1, this));
     Ptr<ConstantPositionMobilityModel> sta1Mobility = CreateObject<ConstantPositionMobilityModel>();
     m_phySta1->SetMobility(sta1Mobility);
     sta1Dev->SetPhy(m_phySta1);
     sta1Node->AggregateObject(sta1Mobility);
     sta1Node->AddDevice(sta1Dev);
+    sta1Dev->SetStandard(standard);
+    if (m_modClass >= WIFI_MOD_CLASS_EHT)
+    {
+        sta1Dev->SetEhtConfiguration(CreateObject<EhtConfiguration>());
+    }
 
     Ptr<Node> sta2Node = CreateObject<Node>();
     Ptr<WifiNetDevice> sta2Dev = CreateObject<WifiNetDevice>();
-    m_phySta2 = CreateObject<OfdmaSpectrumWifiPhy>(2);
+    m_phySta2 = CreateObject<OfdmaSpectrumWifiPhy<LatestPhyEntityType>>(2);
     Ptr<InterferenceHelper> sta2InterferenceHelper = CreateObject<InterferenceHelper>();
     m_phySta2->SetInterferenceHelper(sta2InterferenceHelper);
     Ptr<ErrorRateModel> sta2ErrorModel = CreateObject<NistErrorRateModel>();
     m_phySta2->SetErrorRateModel(sta2ErrorModel);
     m_phySta2->SetDevice(sta2Dev);
     m_phySta2->AddChannel(spectrumChannel);
-    m_phySta2->ConfigureStandard(WIFI_STANDARD_80211ax);
-    m_phySta2->SetReceiveOkCallback(MakeCallback(&TestDlOfdmaPhyTransmission::RxSuccessSta2, this));
+    m_phySta2->ConfigureStandard(standard);
+    m_phySta2->SetReceiveOkCallback(
+        MakeCallback(&TestDlOfdmaPhyTransmission<LatestPhyEntityType>::RxSuccessSta2, this));
     m_phySta2->SetReceiveErrorCallback(
-        MakeCallback(&TestDlOfdmaPhyTransmission::RxFailureSta2, this));
+        MakeCallback(&TestDlOfdmaPhyTransmission<LatestPhyEntityType>::RxFailureSta2, this));
     Ptr<ConstantPositionMobilityModel> sta2Mobility = CreateObject<ConstantPositionMobilityModel>();
     m_phySta2->SetMobility(sta2Mobility);
     sta2Dev->SetPhy(m_phySta2);
     sta2Node->AggregateObject(sta2Mobility);
     sta2Node->AddDevice(sta2Dev);
+    sta2Dev->SetStandard(standard);
+    if (m_modClass >= WIFI_MOD_CLASS_EHT)
+    {
+        sta2Dev->SetEhtConfiguration(CreateObject<EhtConfiguration>());
+    }
 
     Ptr<Node> sta3Node = CreateObject<Node>();
     Ptr<WifiNetDevice> sta3Dev = CreateObject<WifiNetDevice>();
-    m_phySta3 = CreateObject<OfdmaSpectrumWifiPhy>(3);
+    m_phySta3 = CreateObject<OfdmaSpectrumWifiPhy<LatestPhyEntityType>>(3);
     Ptr<InterferenceHelper> sta3InterferenceHelper = CreateObject<InterferenceHelper>();
     m_phySta3->SetInterferenceHelper(sta3InterferenceHelper);
     Ptr<ErrorRateModel> sta3ErrorModel = CreateObject<NistErrorRateModel>();
     m_phySta3->SetErrorRateModel(sta3ErrorModel);
     m_phySta3->SetDevice(sta3Dev);
     m_phySta3->AddChannel(spectrumChannel);
-    m_phySta3->ConfigureStandard(WIFI_STANDARD_80211ax);
-    m_phySta3->SetReceiveOkCallback(MakeCallback(&TestDlOfdmaPhyTransmission::RxSuccessSta3, this));
+    m_phySta3->ConfigureStandard(standard);
+    sta3Dev->SetEhtConfiguration(CreateObject<EhtConfiguration>());
+    m_phySta3->SetReceiveOkCallback(
+        MakeCallback(&TestDlOfdmaPhyTransmission<LatestPhyEntityType>::RxSuccessSta3, this));
     m_phySta3->SetReceiveErrorCallback(
-        MakeCallback(&TestDlOfdmaPhyTransmission::RxFailureSta3, this));
+        MakeCallback(&TestDlOfdmaPhyTransmission<LatestPhyEntityType>::RxFailureSta3, this));
     Ptr<ConstantPositionMobilityModel> sta3Mobility = CreateObject<ConstantPositionMobilityModel>();
     m_phySta3->SetMobility(sta3Mobility);
     sta3Dev->SetPhy(m_phySta3);
     sta3Node->AggregateObject(sta3Mobility);
     sta3Node->AddDevice(sta3Dev);
+    sta3Dev->SetStandard(standard);
+    if (m_modClass >= WIFI_MOD_CLASS_EHT)
+    {
+        sta3Dev->SetEhtConfiguration(CreateObject<EhtConfiguration>());
+    }
 
     Ptr<Node> interfererNode = CreateObject<Node>();
     Ptr<NonCommunicatingNetDevice> interfererDev = CreateObject<NonCommunicatingNetDevice>();
@@ -779,8 +939,9 @@
     interfererNode->AddDevice(interfererDev);
 }
 
+template <typename LatestPhyEntityType>
 void
-TestDlOfdmaPhyTransmission::DoTeardown()
+TestDlOfdmaPhyTransmission<LatestPhyEntityType>::DoTeardown()
 {
     m_phyAp->Dispose();
     m_phyAp = nullptr;
@@ -794,8 +955,9 @@
     m_phyInterferer = nullptr;
 }
 
+template <typename LatestPhyEntityType>
 void
-TestDlOfdmaPhyTransmission::RunOne()
+TestDlOfdmaPhyTransmission<LatestPhyEntityType>::RunOne()
 {
     RngSeedManager::SetSeed(1);
     RngSeedManager::SetRun(1);
@@ -808,138 +970,165 @@
     auto channelNum = WifiPhyOperatingChannel::FindFirst(0,
                                                          m_frequency,
                                                          m_channelWidth,
-                                                         WIFI_STANDARD_80211ax,
-                                                         WIFI_PHY_BAND_5GHZ)
+                                                         WIFI_STANDARD_80211be,
+                                                         WIFI_PHY_BAND_6GHZ)
                           ->number;
 
-    m_phyAp->SetOperatingChannel(
-        WifiPhy::ChannelTuple{channelNum, m_channelWidth, WIFI_PHY_BAND_5GHZ, 0});
-    m_phySta1->SetOperatingChannel(
-        WifiPhy::ChannelTuple{channelNum, m_channelWidth, WIFI_PHY_BAND_5GHZ, 0});
-    m_phySta2->SetOperatingChannel(
-        WifiPhy::ChannelTuple{channelNum, m_channelWidth, WIFI_PHY_BAND_5GHZ, 0});
-    m_phySta3->SetOperatingChannel(
-        WifiPhy::ChannelTuple{channelNum, m_channelWidth, WIFI_PHY_BAND_5GHZ, 0});
+    const auto operatingChannel{
+        WifiPhy::ChannelTuple{channelNum, m_channelWidth, WIFI_PHY_BAND_6GHZ, 0}};
+    m_phyAp->SetOperatingChannel(operatingChannel);
+    m_phySta1->SetOperatingChannel(operatingChannel);
+    m_phySta2->SetOperatingChannel(operatingChannel);
+    m_phySta3->SetOperatingChannel(operatingChannel);
 
-    Simulator::Schedule(Seconds(0.5), &TestDlOfdmaPhyTransmission::ResetResults, this);
+    Simulator::Schedule(Seconds(0.5),
+                        &TestDlOfdmaPhyTransmission<LatestPhyEntityType>::ResetResults,
+                        this);
 
     // Send MU PPDU with two PSDUs addressed to STA 1 and STA 2:
     // Each STA should receive its PSDU.
-    Simulator::Schedule(Seconds(1), &TestDlOfdmaPhyTransmission::SendMuPpdu, this, 1, 2);
+    Simulator::Schedule(Seconds(1),
+                        &TestDlOfdmaPhyTransmission<LatestPhyEntityType>::SendMuPpdu,
+                        this,
+                        1,
+                        2);
 
     // Since it takes m_expectedPpduDuration to transmit the PPDU,
     // all 3 PHYs should be back to IDLE at the same time,
     // even the PHY that has no PSDU addressed to it.
     Simulator::Schedule(Seconds(1) + m_expectedPpduDuration - NanoSeconds(1),
-                        &TestDlOfdmaPhyTransmission::CheckPhyState,
+                        &TestDlOfdmaPhyTransmission<LatestPhyEntityType>::CheckPhyState,
                         this,
                         m_phySta1,
                         WifiPhyState::RX);
+
     Simulator::Schedule(Seconds(1) + m_expectedPpduDuration - NanoSeconds(1),
-                        &TestDlOfdmaPhyTransmission::CheckPhyState,
+                        &TestDlOfdmaPhyTransmission<LatestPhyEntityType>::CheckPhyState,
                         this,
                         m_phySta2,
                         WifiPhyState::RX);
     Simulator::Schedule(Seconds(1) + m_expectedPpduDuration - NanoSeconds(1),
-                        &TestDlOfdmaPhyTransmission::CheckPhyState,
+                        &TestDlOfdmaPhyTransmission<LatestPhyEntityType>::CheckPhyState,
                         this,
                         m_phySta3,
                         WifiPhyState::CCA_BUSY);
     Simulator::Schedule(Seconds(1) + m_expectedPpduDuration,
-                        &TestDlOfdmaPhyTransmission::CheckPhyState,
+                        &TestDlOfdmaPhyTransmission<LatestPhyEntityType>::CheckPhyState,
                         this,
                         m_phySta1,
                         WifiPhyState::IDLE);
     Simulator::Schedule(Seconds(1) + m_expectedPpduDuration,
-                        &TestDlOfdmaPhyTransmission::CheckPhyState,
+                        &TestDlOfdmaPhyTransmission<LatestPhyEntityType>::CheckPhyState,
                         this,
                         m_phySta2,
                         WifiPhyState::IDLE);
     Simulator::Schedule(Seconds(1) + m_expectedPpduDuration,
-                        &TestDlOfdmaPhyTransmission::CheckPhyState,
+                        &TestDlOfdmaPhyTransmission<LatestPhyEntityType>::CheckPhyState,
                         this,
                         m_phySta3,
                         WifiPhyState::IDLE);
 
     // One PSDU of 1000 bytes should have been successfully received by STA 1
     Simulator::Schedule(Seconds(1.1),
-                        &TestDlOfdmaPhyTransmission::CheckResultsSta1,
+                        &TestDlOfdmaPhyTransmission<LatestPhyEntityType>::CheckResultsSta1,
                         this,
                         1,
                         0,
                         1000);
     // One PSDU of 1500 bytes should have been successfully received by STA 2
     Simulator::Schedule(Seconds(1.1),
-                        &TestDlOfdmaPhyTransmission::CheckResultsSta2,
+                        &TestDlOfdmaPhyTransmission<LatestPhyEntityType>::CheckResultsSta2,
                         this,
                         1,
                         0,
                         1500);
     // No PSDU should have been received by STA 3
-    Simulator::Schedule(Seconds(1.1), &TestDlOfdmaPhyTransmission::CheckResultsSta3, this, 0, 0, 0);
+    Simulator::Schedule(Seconds(1.1),
+                        &TestDlOfdmaPhyTransmission<LatestPhyEntityType>::CheckResultsSta3,
+                        this,
+                        0,
+                        0,
+                        0);
 
-    Simulator::Schedule(Seconds(1.5), &TestDlOfdmaPhyTransmission::ResetResults, this);
+    Simulator::Schedule(Seconds(1.5),
+                        &TestDlOfdmaPhyTransmission<LatestPhyEntityType>::ResetResults,
+                        this);
 
     // Send MU PPDU with two PSDUs addressed to STA 1 and STA 3:
     // STA 1 should receive its PSDU, whereas STA 2 should not receive any PSDU
     // but should keep its PHY busy during all PPDU duration.
-    Simulator::Schedule(Seconds(2), &TestDlOfdmaPhyTransmission::SendMuPpdu, this, 1, 3);
+    Simulator::Schedule(Seconds(2),
+                        &TestDlOfdmaPhyTransmission<LatestPhyEntityType>::SendMuPpdu,
+                        this,
+                        1,
+                        3);
 
     // Since it takes m_expectedPpduDuration to transmit the PPDU,
     // all 3 PHYs should be back to IDLE at the same time,
     // even the PHY that has no PSDU addressed to it.
     Simulator::Schedule(Seconds(2) + m_expectedPpduDuration - NanoSeconds(1),
-                        &TestDlOfdmaPhyTransmission::CheckPhyState,
+                        &TestDlOfdmaPhyTransmission<LatestPhyEntityType>::CheckPhyState,
                         this,
                         m_phySta1,
                         WifiPhyState::RX);
     Simulator::Schedule(Seconds(2) + m_expectedPpduDuration - NanoSeconds(1),
-                        &TestDlOfdmaPhyTransmission::CheckPhyState,
+                        &TestDlOfdmaPhyTransmission<LatestPhyEntityType>::CheckPhyState,
                         this,
                         m_phySta2,
                         WifiPhyState::CCA_BUSY);
     Simulator::Schedule(Seconds(2) + m_expectedPpduDuration - NanoSeconds(1),
-                        &TestDlOfdmaPhyTransmission::CheckPhyState,
+                        &TestDlOfdmaPhyTransmission<LatestPhyEntityType>::CheckPhyState,
                         this,
                         m_phySta3,
                         WifiPhyState::RX);
     Simulator::Schedule(Seconds(2) + m_expectedPpduDuration,
-                        &TestDlOfdmaPhyTransmission::CheckPhyState,
+                        &TestDlOfdmaPhyTransmission<LatestPhyEntityType>::CheckPhyState,
                         this,
                         m_phySta1,
                         WifiPhyState::IDLE);
     Simulator::Schedule(Seconds(2) + m_expectedPpduDuration,
-                        &TestDlOfdmaPhyTransmission::CheckPhyState,
+                        &TestDlOfdmaPhyTransmission<LatestPhyEntityType>::CheckPhyState,
                         this,
                         m_phySta2,
                         WifiPhyState::IDLE);
     Simulator::Schedule(Seconds(2) + m_expectedPpduDuration,
-                        &TestDlOfdmaPhyTransmission::CheckPhyState,
+                        &TestDlOfdmaPhyTransmission<LatestPhyEntityType>::CheckPhyState,
                         this,
                         m_phySta3,
                         WifiPhyState::IDLE);
 
     // One PSDU of 1000 bytes should have been successfully received by STA 1
     Simulator::Schedule(Seconds(2.1),
-                        &TestDlOfdmaPhyTransmission::CheckResultsSta1,
+                        &TestDlOfdmaPhyTransmission<LatestPhyEntityType>::CheckResultsSta1,
                         this,
                         1,
                         0,
                         1000);
     // No PSDU should have been received by STA 2
-    Simulator::Schedule(Seconds(2.1), &TestDlOfdmaPhyTransmission::CheckResultsSta2, this, 0, 0, 0);
+    Simulator::Schedule(Seconds(2.1),
+                        &TestDlOfdmaPhyTransmission<LatestPhyEntityType>::CheckResultsSta2,
+                        this,
+                        0,
+                        0,
+                        0);
     // One PSDU of 1500 bytes should have been successfully received by STA 3
     Simulator::Schedule(Seconds(2.1),
-                        &TestDlOfdmaPhyTransmission::CheckResultsSta3,
+                        &TestDlOfdmaPhyTransmission<LatestPhyEntityType>::CheckResultsSta3,
                         this,
                         1,
                         0,
                         1500);
 
-    Simulator::Schedule(Seconds(2.5), &TestDlOfdmaPhyTransmission::ResetResults, this);
+    Simulator::Schedule(Seconds(2.5),
+                        &TestDlOfdmaPhyTransmission<LatestPhyEntityType>::ResetResults,
+                        this);
 
     // Send MU PPDU with two PSDUs addressed to STA 1 and STA 2:
-    Simulator::Schedule(Seconds(3), &TestDlOfdmaPhyTransmission::SendMuPpdu, this, 1, 2);
+    Simulator::Schedule(Seconds(3),
+                        &TestDlOfdmaPhyTransmission<LatestPhyEntityType>::SendMuPpdu,
+                        this,
+                        1,
+                        2);
 
     // A strong non-wifi interference is generated on RU 1 during PSDU reception
     BandInfo bandInfo;
@@ -954,8 +1143,8 @@
     Watt_u interferencePower{0.1};
     *interferencePsdRu1 = interferencePower / (MHzToHz(m_channelWidth / 2) * 20);
 
-    Simulator::Schedule(Seconds(3) + MicroSeconds(50),
-                        &TestDlOfdmaPhyTransmission::GenerateInterference,
+    Simulator::Schedule(Seconds(3) + MicroSeconds(40),
+                        &TestDlOfdmaPhyTransmission<LatestPhyEntityType>::GenerateInterference,
                         this,
                         interferencePsdRu1,
                         MilliSeconds(100));
@@ -964,53 +1153,69 @@
     // both PHYs should be back to CCA_BUSY (due to the interference) at the same time,
     // even the PHY that has no PSDU addressed to it.
     Simulator::Schedule(Seconds(3) + m_expectedPpduDuration - NanoSeconds(1),
-                        &TestDlOfdmaPhyTransmission::CheckPhyState,
+                        &TestDlOfdmaPhyTransmission<LatestPhyEntityType>::CheckPhyState,
                         this,
                         m_phySta1,
                         WifiPhyState::RX);
     Simulator::Schedule(Seconds(3) + m_expectedPpduDuration - NanoSeconds(1),
-                        &TestDlOfdmaPhyTransmission::CheckPhyState,
+                        &TestDlOfdmaPhyTransmission<LatestPhyEntityType>::CheckPhyState,
                         this,
                         m_phySta2,
                         WifiPhyState::RX);
     Simulator::Schedule(Seconds(3) + m_expectedPpduDuration - NanoSeconds(1),
-                        &TestDlOfdmaPhyTransmission::CheckPhyState,
+                        &TestDlOfdmaPhyTransmission<LatestPhyEntityType>::CheckPhyState,
                         this,
                         m_phySta3,
                         WifiPhyState::CCA_BUSY);
     Simulator::Schedule(Seconds(3) + m_expectedPpduDuration,
-                        &TestDlOfdmaPhyTransmission::CheckPhyState,
+                        &TestDlOfdmaPhyTransmission<LatestPhyEntityType>::CheckPhyState,
                         this,
                         m_phySta1,
                         WifiPhyState::CCA_BUSY);
     Simulator::Schedule(Seconds(3) + m_expectedPpduDuration,
-                        &TestDlOfdmaPhyTransmission::CheckPhyState,
+                        &TestDlOfdmaPhyTransmission<LatestPhyEntityType>::CheckPhyState,
                         this,
                         m_phySta2,
                         WifiPhyState::CCA_BUSY);
     Simulator::Schedule(Seconds(3) + m_expectedPpduDuration,
-                        &TestDlOfdmaPhyTransmission::CheckPhyState,
+                        &TestDlOfdmaPhyTransmission<LatestPhyEntityType>::CheckPhyState,
                         this,
                         m_phySta3,
                         WifiPhyState::CCA_BUSY);
 
-    // One PSDU of 1000 bytes should have been unsuccessfuly received by STA 1 (since interference
+    // One PSDU of 1000 bytes should have been unsuccessfully received by STA 1 (since interference
     // occupies RU 1)
-    Simulator::Schedule(Seconds(3.1), &TestDlOfdmaPhyTransmission::CheckResultsSta1, this, 0, 1, 0);
+    Simulator::Schedule(Seconds(3.1),
+                        &TestDlOfdmaPhyTransmission<LatestPhyEntityType>::CheckResultsSta1,
+                        this,
+                        0,
+                        1,
+                        0);
     // One PSDU of 1500 bytes should have been successfully received by STA 2
     Simulator::Schedule(Seconds(3.1),
-                        &TestDlOfdmaPhyTransmission::CheckResultsSta2,
+                        &TestDlOfdmaPhyTransmission<LatestPhyEntityType>::CheckResultsSta2,
                         this,
                         1,
                         0,
                         1500);
     // No PSDU should have been received by STA3
-    Simulator::Schedule(Seconds(3.1), &TestDlOfdmaPhyTransmission::CheckResultsSta3, this, 0, 0, 0);
+    Simulator::Schedule(Seconds(3.1),
+                        &TestDlOfdmaPhyTransmission<LatestPhyEntityType>::CheckResultsSta3,
+                        this,
+                        0,
+                        0,
+                        0);
 
-    Simulator::Schedule(Seconds(3.5), &TestDlOfdmaPhyTransmission::ResetResults, this);
+    Simulator::Schedule(Seconds(3.5),
+                        &TestDlOfdmaPhyTransmission<LatestPhyEntityType>::ResetResults,
+                        this);
 
     // Send MU PPDU with two PSDUs addressed to STA 1 and STA 2:
-    Simulator::Schedule(Seconds(4), &TestDlOfdmaPhyTransmission::SendMuPpdu, this, 1, 2);
+    Simulator::Schedule(Seconds(4),
+                        &TestDlOfdmaPhyTransmission<LatestPhyEntityType>::SendMuPpdu,
+                        this,
+                        1,
+                        2);
 
     // A strong non-wifi interference is generated on RU 2 during PSDU reception
     bandInfo.fc = MHzToHz(m_frequency + (m_channelWidth / 4));
@@ -1023,8 +1228,8 @@
     Ptr<SpectrumValue> interferencePsdRu2 = Create<SpectrumValue>(SpectrumInterferenceRu2);
     *interferencePsdRu2 = interferencePower / (MHzToHz(m_channelWidth / 2) * 20);
 
-    Simulator::Schedule(Seconds(4) + MicroSeconds(50),
-                        &TestDlOfdmaPhyTransmission::GenerateInterference,
+    Simulator::Schedule(Seconds(4) + MicroSeconds(40),
+                        &TestDlOfdmaPhyTransmission<LatestPhyEntityType>::GenerateInterference,
                         this,
                         interferencePsdRu2,
                         MilliSeconds(100));
@@ -1033,34 +1238,34 @@
     // both PHYs should be back to IDLE (or CCA_BUSY if interference on the primary 20 MHz) at the
     // same time, even the PHY that has no PSDU addressed to it.
     Simulator::Schedule(Seconds(4) + m_expectedPpduDuration - NanoSeconds(1),
-                        &TestDlOfdmaPhyTransmission::CheckPhyState,
+                        &TestDlOfdmaPhyTransmission<LatestPhyEntityType>::CheckPhyState,
                         this,
                         m_phySta1,
                         WifiPhyState::RX);
     Simulator::Schedule(Seconds(4) + m_expectedPpduDuration - NanoSeconds(1),
-                        &TestDlOfdmaPhyTransmission::CheckPhyState,
+                        &TestDlOfdmaPhyTransmission<LatestPhyEntityType>::CheckPhyState,
                         this,
                         m_phySta2,
                         WifiPhyState::RX);
     Simulator::Schedule(Seconds(4) + m_expectedPpduDuration - NanoSeconds(1),
-                        &TestDlOfdmaPhyTransmission::CheckPhyState,
+                        &TestDlOfdmaPhyTransmission<LatestPhyEntityType>::CheckPhyState,
                         this,
                         m_phySta3,
                         WifiPhyState::CCA_BUSY);
     Simulator::Schedule(Seconds(4) + m_expectedPpduDuration,
-                        &TestDlOfdmaPhyTransmission::CheckPhyState,
+                        &TestDlOfdmaPhyTransmission<LatestPhyEntityType>::CheckPhyState,
                         this,
                         m_phySta1,
                         (m_channelWidth >= MHz_u{40}) ? WifiPhyState::IDLE
                                                       : WifiPhyState::CCA_BUSY);
     Simulator::Schedule(Seconds(4) + m_expectedPpduDuration,
-                        &TestDlOfdmaPhyTransmission::CheckPhyState,
+                        &TestDlOfdmaPhyTransmission<LatestPhyEntityType>::CheckPhyState,
                         this,
                         m_phySta2,
                         (m_channelWidth >= MHz_u{40}) ? WifiPhyState::IDLE
                                                       : WifiPhyState::CCA_BUSY);
     Simulator::Schedule(Seconds(4) + m_expectedPpduDuration,
-                        &TestDlOfdmaPhyTransmission::CheckPhyState,
+                        &TestDlOfdmaPhyTransmission<LatestPhyEntityType>::CheckPhyState,
                         this,
                         m_phySta3,
                         (m_channelWidth >= MHz_u{40}) ? WifiPhyState::IDLE
@@ -1068,21 +1273,37 @@
 
     // One PSDU of 1000 bytes should have been successfully received by STA 1
     Simulator::Schedule(Seconds(4.1),
-                        &TestDlOfdmaPhyTransmission::CheckResultsSta1,
+                        &TestDlOfdmaPhyTransmission<LatestPhyEntityType>::CheckResultsSta1,
                         this,
                         1,
                         0,
                         1000);
-    // One PSDU of 1500 bytes should have been unsuccessfuly received by STA 2 (since interference
+    // One PSDU of 1500 bytes should have been unsuccessfully received by STA 2 (since interference
     // occupies RU 2)
-    Simulator::Schedule(Seconds(4.1), &TestDlOfdmaPhyTransmission::CheckResultsSta2, this, 0, 1, 0);
+    Simulator::Schedule(Seconds(4.1),
+                        &TestDlOfdmaPhyTransmission<LatestPhyEntityType>::CheckResultsSta2,
+                        this,
+                        0,
+                        1,
+                        0);
     // No PSDU should have been received by STA3
-    Simulator::Schedule(Seconds(4.1), &TestDlOfdmaPhyTransmission::CheckResultsSta3, this, 0, 0, 0);
+    Simulator::Schedule(Seconds(4.1),
+                        &TestDlOfdmaPhyTransmission<LatestPhyEntityType>::CheckResultsSta3,
+                        this,
+                        0,
+                        0,
+                        0);
 
-    Simulator::Schedule(Seconds(4.5), &TestDlOfdmaPhyTransmission::ResetResults, this);
+    Simulator::Schedule(Seconds(4.5),
+                        &TestDlOfdmaPhyTransmission<LatestPhyEntityType>::ResetResults,
+                        this);
 
     // Send MU PPDU with two PSDUs addressed to STA 1 and STA 2:
-    Simulator::Schedule(Seconds(5), &TestDlOfdmaPhyTransmission::SendMuPpdu, this, 1, 2);
+    Simulator::Schedule(Seconds(5),
+                        &TestDlOfdmaPhyTransmission<LatestPhyEntityType>::SendMuPpdu,
+                        this,
+                        1,
+                        2);
 
     // A strong non-wifi interference is generated on the full band during PSDU reception
     bandInfo.fc = MHzToHz(m_frequency);
@@ -1095,8 +1316,8 @@
     Ptr<SpectrumValue> interferencePsdAll = Create<SpectrumValue>(SpectrumInterferenceAll);
     *interferencePsdAll = interferencePower / (MHzToHz(m_channelWidth) * 20);
 
-    Simulator::Schedule(Seconds(5) + MicroSeconds(50),
-                        &TestDlOfdmaPhyTransmission::GenerateInterference,
+    Simulator::Schedule(Seconds(5) + MicroSeconds(40),
+                        &TestDlOfdmaPhyTransmission<LatestPhyEntityType>::GenerateInterference,
                         this,
                         interferencePsdAll,
                         MilliSeconds(100));
@@ -1105,73 +1326,99 @@
     // both PHYs should be back to CCA_BUSY (due to the interference) at the same time,
     // even the PHY that has no PSDU addressed to it.
     Simulator::Schedule(Seconds(5) + m_expectedPpduDuration - NanoSeconds(1),
-                        &TestDlOfdmaPhyTransmission::CheckPhyState,
+                        &TestDlOfdmaPhyTransmission<LatestPhyEntityType>::CheckPhyState,
                         this,
                         m_phySta1,
                         WifiPhyState::RX);
     Simulator::Schedule(Seconds(5) + m_expectedPpduDuration - NanoSeconds(1),
-                        &TestDlOfdmaPhyTransmission::CheckPhyState,
+                        &TestDlOfdmaPhyTransmission<LatestPhyEntityType>::CheckPhyState,
                         this,
                         m_phySta2,
                         WifiPhyState::RX);
     Simulator::Schedule(Seconds(5) + m_expectedPpduDuration - NanoSeconds(1),
-                        &TestDlOfdmaPhyTransmission::CheckPhyState,
+                        &TestDlOfdmaPhyTransmission<LatestPhyEntityType>::CheckPhyState,
                         this,
                         m_phySta3,
                         WifiPhyState::CCA_BUSY);
     Simulator::Schedule(Seconds(5) + m_expectedPpduDuration,
-                        &TestDlOfdmaPhyTransmission::CheckPhyState,
+                        &TestDlOfdmaPhyTransmission<LatestPhyEntityType>::CheckPhyState,
                         this,
                         m_phySta1,
                         WifiPhyState::CCA_BUSY);
     Simulator::Schedule(Seconds(5) + m_expectedPpduDuration,
-                        &TestDlOfdmaPhyTransmission::CheckPhyState,
+                        &TestDlOfdmaPhyTransmission<LatestPhyEntityType>::CheckPhyState,
                         this,
                         m_phySta2,
                         WifiPhyState::CCA_BUSY);
     Simulator::Schedule(Seconds(5) + m_expectedPpduDuration,
-                        &TestDlOfdmaPhyTransmission::CheckPhyState,
+                        &TestDlOfdmaPhyTransmission<LatestPhyEntityType>::CheckPhyState,
                         this,
                         m_phySta3,
                         WifiPhyState::CCA_BUSY);
 
-    // One PSDU of 1000 bytes should have been unsuccessfuly received by STA 1 (since interference
+    // One PSDU of 1000 bytes should have been unsuccessfully received by STA 1 (since interference
     // occupies RU 1)
-    Simulator::Schedule(Seconds(5.1), &TestDlOfdmaPhyTransmission::CheckResultsSta1, this, 0, 1, 0);
-    // One PSDU of 1500 bytes should have been unsuccessfuly received by STA 2 (since interference
+    Simulator::Schedule(Seconds(5.1),
+                        &TestDlOfdmaPhyTransmission<LatestPhyEntityType>::CheckResultsSta1,
+                        this,
+                        0,
+                        1,
+                        0);
+    // One PSDU of 1500 bytes should have been unsuccessfully received by STA 2 (since interference
     // occupies RU 2)
-    Simulator::Schedule(Seconds(5.1), &TestDlOfdmaPhyTransmission::CheckResultsSta2, this, 0, 1, 0);
+    Simulator::Schedule(Seconds(5.1),
+                        &TestDlOfdmaPhyTransmission<LatestPhyEntityType>::CheckResultsSta2,
+                        this,
+                        0,
+                        1,
+                        0);
     // No PSDU should have been received by STA3
-    Simulator::Schedule(Seconds(5.1), &TestDlOfdmaPhyTransmission::CheckResultsSta3, this, 0, 0, 0);
+    Simulator::Schedule(Seconds(5.1),
+                        &TestDlOfdmaPhyTransmission<LatestPhyEntityType>::CheckResultsSta3,
+                        this,
+                        0,
+                        0,
+                        0);
 
-    Simulator::Schedule(Seconds(5.5), &TestDlOfdmaPhyTransmission::ResetResults, this);
+    Simulator::Schedule(Seconds(5.5),
+                        &TestDlOfdmaPhyTransmission<LatestPhyEntityType>::ResetResults,
+                        this);
 
     Simulator::Run();
 }
 
+template <typename LatestPhyEntityType>
 void
-TestDlOfdmaPhyTransmission::DoRun()
+TestDlOfdmaPhyTransmission<LatestPhyEntityType>::DoRun()
 {
-    m_frequency = MHz_u{5180};
+    m_frequency = MHz_u{5955};
     m_channelWidth = MHz_u{20};
     m_expectedPpduDuration = NanoSeconds(306400);
     RunOne();
 
-    m_frequency = MHz_u{5190};
+    m_frequency = MHz_u{5965};
     m_channelWidth = MHz_u{40};
     m_expectedPpduDuration = NanoSeconds(156800);
     RunOne();
 
-    m_frequency = MHz_u{5210};
+    m_frequency = MHz_u{5985};
     m_channelWidth = MHz_u{80};
     m_expectedPpduDuration = NanoSeconds(102400);
     RunOne();
 
-    m_frequency = MHz_u{5250};
+    m_frequency = MHz_u{6025};
     m_channelWidth = MHz_u{160};
     m_expectedPpduDuration = NanoSeconds(75200);
     RunOne();
 
+    if (m_modClass >= WIFI_MOD_CLASS_EHT)
+    {
+        m_frequency = MHz_u{6105};
+        m_channelWidth = MHz_u{320};
+        m_expectedPpduDuration = NanoSeconds(61600);
+        RunOne();
+    }
+
     Simulator::Destroy();
 }
 
@@ -1285,14 +1532,14 @@
      * @param phy the PHY
      * @param expectedState the expected state of the PHY
      */
-    void CheckPhyState(Ptr<OfdmaSpectrumWifiPhy> phy, WifiPhyState expectedState);
+    void CheckPhyState(Ptr<OfdmaSpectrumWifiPhy<HePhy>> phy, WifiPhyState expectedState);
 
     /**
      * Check the PHY state now
      * @param phy the PHY
      * @param expectedState the expected state of the PHY
      */
-    void DoCheckPhyState(Ptr<OfdmaSpectrumWifiPhy> phy, WifiPhyState expectedState);
+    void DoCheckPhyState(Ptr<OfdmaSpectrumWifiPhy<HePhy>> phy, WifiPhyState expectedState);
 
     uint32_t m_countRxSuccessSta1; ///< count RX success for STA 1
     uint32_t m_countRxSuccessSta2; ///< count RX success for STA 2
@@ -1301,10 +1548,10 @@
     uint32_t m_countRxBytesSta1;   ///< count RX bytes for STA 1
     uint32_t m_countRxBytesSta2;   ///< count RX bytes for STA 2
 
-    Ptr<SpectrumWifiPhy> m_phyAp;           ///< PHY of AP
-    Ptr<OfdmaSpectrumWifiPhy> m_phySta1;    ///< PHY of STA 1
-    Ptr<OfdmaSpectrumWifiPhy> m_phySta2;    ///< PHY of STA 2
-    Ptr<WaveformGenerator> m_phyInterferer; ///< PHY of interferer
+    Ptr<SpectrumWifiPhy> m_phyAp;               ///< PHY of AP
+    Ptr<OfdmaSpectrumWifiPhy<HePhy>> m_phySta1; ///< PHY of STA 1
+    Ptr<OfdmaSpectrumWifiPhy<HePhy>> m_phySta2; ///< PHY of STA 2
+    Ptr<WaveformGenerator> m_phyInterferer;     ///< PHY of interferer
 
     MHz_u m_frequency;    ///< frequency
     MHz_u m_channelWidth; ///< channel width
@@ -1361,20 +1608,19 @@
                           false,
                           false};
 
-    HeRu::RuType ruType =
-        puncturedSubchannels.empty()
-            ? HeRu::RU_484_TONE
-            : (puncturedSubchannels.at(1) ? HeRu::RU_242_TONE : HeRu::RU_484_TONE);
+    RuType ruType = puncturedSubchannels.empty()
+                        ? RuType::RU_484_TONE
+                        : (puncturedSubchannels.at(1) ? RuType::RU_242_TONE : RuType::RU_484_TONE);
     HeRu::RuSpec ru1(ruType, 1, true);
     txVector.SetRu(ru1, rxStaId1);
     txVector.SetMode(HePhy::GetHeMcs7(), rxStaId1);
     txVector.SetNss(1, rxStaId1);
 
     ruType = puncturedSubchannels.empty()
-                 ? HeRu::RU_484_TONE
-                 : (puncturedSubchannels.at(1) ? HeRu::RU_484_TONE : HeRu::RU_242_TONE);
+                 ? RuType::RU_484_TONE
+                 : (puncturedSubchannels.at(1) ? RuType::RU_484_TONE : RuType::RU_242_TONE);
     HeRu::RuSpec ru2(ruType,
-                     ruType == HeRu::RU_484_TONE ? 2 : (puncturedSubchannels.at(3) ? 3 : 4),
+                     ruType == RuType::RU_484_TONE ? 2 : (puncturedSubchannels.at(3) ? 3 : 4),
                      true);
     txVector.SetRu(ru2, rxStaId2);
     txVector.SetMode(HePhy::GetHeMcs9(), rxStaId2);
@@ -1383,14 +1629,17 @@
     RuAllocation ruAlloc;
     if (puncturedSubchannels.empty())
     {
-        std::fill_n(std::back_inserter(ruAlloc), 4, 200);
+        ruAlloc.push_back(200);
+        ruAlloc.push_back(114);
+        ruAlloc.push_back(114);
+        ruAlloc.push_back(200);
     }
     else
     {
         ruAlloc.push_back(puncturedSubchannels.at(1) ? 192 : 200);
-        ruAlloc.push_back(puncturedSubchannels.at(1) ? 113 : 200);
+        ruAlloc.push_back(puncturedSubchannels.at(1) ? 113 : 114);
         ruAlloc.push_back(puncturedSubchannels.at(2) ? 113
-                                                     : (puncturedSubchannels.at(3) ? 192 : 200));
+                                                     : (puncturedSubchannels.at(3) ? 192 : 114));
         ruAlloc.push_back(puncturedSubchannels.at(2) ? 192
                                                      : (puncturedSubchannels.at(3) ? 113 : 200));
     }
@@ -1487,7 +1736,7 @@
                           "The number of successfully received packets by STA 1 is not correct!");
     NS_TEST_ASSERT_MSG_EQ(m_countRxFailureSta1,
                           expectedRxFailure,
-                          "The number of unsuccessfuly received packets by STA 1 is not correct!");
+                          "The number of unsuccessfully received packets by STA 1 is not correct!");
     NS_TEST_ASSERT_MSG_EQ(m_countRxBytesSta1,
                           expectedRxBytes,
                           "The number of bytes received by STA 1 is not correct!");
@@ -1503,14 +1752,15 @@
                           "The number of successfully received packets by STA 2 is not correct!");
     NS_TEST_ASSERT_MSG_EQ(m_countRxFailureSta2,
                           expectedRxFailure,
-                          "The number of unsuccessfuly received packets by STA 2 is not correct!");
+                          "The number of unsuccessfully received packets by STA 2 is not correct!");
     NS_TEST_ASSERT_MSG_EQ(m_countRxBytesSta2,
                           expectedRxBytes,
                           "The number of bytes received by STA 2 is not correct!");
 }
 
 void
-TestDlOfdmaPhyPuncturing::CheckPhyState(Ptr<OfdmaSpectrumWifiPhy> phy, WifiPhyState expectedState)
+TestDlOfdmaPhyPuncturing::CheckPhyState(Ptr<OfdmaSpectrumWifiPhy<HePhy>> phy,
+                                        WifiPhyState expectedState)
 {
     // This is needed to make sure PHY state will be checked as the last event if a state change
     // occurred at the exact same time as the check
@@ -1518,7 +1768,8 @@
 }
 
 void
-TestDlOfdmaPhyPuncturing::DoCheckPhyState(Ptr<OfdmaSpectrumWifiPhy> phy, WifiPhyState expectedState)
+TestDlOfdmaPhyPuncturing::DoCheckPhyState(Ptr<OfdmaSpectrumWifiPhy<HePhy>> phy,
+                                          WifiPhyState expectedState)
 {
     WifiPhyState currentState;
     PointerValue ptr;
@@ -1558,10 +1809,11 @@
     apDev->SetPhy(m_phyAp);
     apNode->AggregateObject(apMobility);
     apNode->AddDevice(apDev);
+    apDev->SetStandard(WIFI_STANDARD_80211ax);
 
     Ptr<Node> sta1Node = CreateObject<Node>();
     Ptr<WifiNetDevice> sta1Dev = CreateObject<WifiNetDevice>();
-    m_phySta1 = CreateObject<OfdmaSpectrumWifiPhy>(1);
+    m_phySta1 = CreateObject<OfdmaSpectrumWifiPhy<HePhy>>(1);
     Ptr<InterferenceHelper> sta1InterferenceHelper = CreateObject<InterferenceHelper>();
     m_phySta1->SetInterferenceHelper(sta1InterferenceHelper);
     Ptr<ErrorRateModel> sta1ErrorModel = CreateObject<NistErrorRateModel>();
@@ -1577,10 +1829,11 @@
     sta1Dev->SetPhy(m_phySta1);
     sta1Node->AggregateObject(sta1Mobility);
     sta1Node->AddDevice(sta1Dev);
+    sta1Dev->SetStandard(WIFI_STANDARD_80211ax);
 
     Ptr<Node> sta2Node = CreateObject<Node>();
     Ptr<WifiNetDevice> sta2Dev = CreateObject<WifiNetDevice>();
-    m_phySta2 = CreateObject<OfdmaSpectrumWifiPhy>(2);
+    m_phySta2 = CreateObject<OfdmaSpectrumWifiPhy<HePhy>>(2);
     Ptr<InterferenceHelper> sta2InterferenceHelper = CreateObject<InterferenceHelper>();
     m_phySta2->SetInterferenceHelper(sta2InterferenceHelper);
     Ptr<ErrorRateModel> sta2ErrorModel = CreateObject<NistErrorRateModel>();
@@ -1596,6 +1849,7 @@
     sta2Dev->SetPhy(m_phySta2);
     sta2Node->AggregateObject(sta2Mobility);
     sta2Node->AddDevice(sta2Dev);
+    sta2Dev->SetStandard(WIFI_STANDARD_80211ax);
 
     Ptr<Node> interfererNode = CreateObject<Node>();
     Ptr<NonCommunicatingNetDevice> interfererDev = CreateObject<NonCommunicatingNetDevice>();
@@ -1699,7 +1953,7 @@
 
     if (m_indexSubchannel < 2) // interference in RU 1
     {
-        // One PSDU of 1000 bytes should have been unsuccessfuly received by STA 1
+        // One PSDU of 1000 bytes should have been unsuccessfully received by STA 1
         Simulator::Schedule(Seconds(1.1),
                             &TestDlOfdmaPhyPuncturing::CheckResultsSta1,
                             this,
@@ -1723,7 +1977,7 @@
                             1,
                             0,
                             1000);
-        // One PSDU of 1500 bytes should have been unsuccessfuly received by STA 2
+        // One PSDU of 1500 bytes should have been unsuccessfully received by STA 2
         Simulator::Schedule(Seconds(1.1),
                             &TestDlOfdmaPhyPuncturing::CheckResultsSta2,
                             this,
@@ -1871,9 +2125,9 @@
      */
     void CheckUid(uint16_t staId, uint64_t expectedUid);
 
-    Ptr<OfdmaSpectrumWifiPhy> m_phyAp;   ///< PHY of AP
-    Ptr<OfdmaSpectrumWifiPhy> m_phySta1; ///< PHY of STA 1
-    Ptr<OfdmaSpectrumWifiPhy> m_phySta2; ///< PHY of STA 2
+    Ptr<OfdmaSpectrumWifiPhy<HePhy>> m_phyAp;   ///< PHY of AP
+    Ptr<OfdmaSpectrumWifiPhy<HePhy>> m_phySta1; ///< PHY of STA 1
+    Ptr<OfdmaSpectrumWifiPhy<HePhy>> m_phySta2; ///< PHY of STA 2
 
     uint64_t m_ppduUidAp;   ///< UID of PPDU transmitted by AP
     uint64_t m_ppduUidSta1; ///< UID of PPDU transmitted by STA1
@@ -1905,7 +2159,7 @@
 
     Ptr<Node> apNode = CreateObject<Node>();
     Ptr<WifiNetDevice> apDev = CreateObject<WifiNetDevice>();
-    m_phyAp = CreateObject<OfdmaSpectrumWifiPhy>(0);
+    m_phyAp = CreateObject<OfdmaSpectrumWifiPhy<HePhy>>(0);
     Ptr<InterferenceHelper> apInterferenceHelper = CreateObject<InterferenceHelper>();
     m_phyAp->SetInterferenceHelper(apInterferenceHelper);
     Ptr<ErrorRateModel> apErrorModel = CreateObject<NistErrorRateModel>();
@@ -1933,7 +2187,7 @@
 
     Ptr<Node> sta1Node = CreateObject<Node>();
     Ptr<WifiNetDevice> sta1Dev = CreateObject<WifiNetDevice>();
-    m_phySta1 = CreateObject<OfdmaSpectrumWifiPhy>(1);
+    m_phySta1 = CreateObject<OfdmaSpectrumWifiPhy<HePhy>>(1);
     Ptr<InterferenceHelper> sta1InterferenceHelper = CreateObject<InterferenceHelper>();
     m_phySta1->SetInterferenceHelper(sta1InterferenceHelper);
     Ptr<ErrorRateModel> sta1ErrorModel = CreateObject<NistErrorRateModel>();
@@ -1953,7 +2207,7 @@
 
     Ptr<Node> sta2Node = CreateObject<Node>();
     Ptr<WifiNetDevice> sta2Dev = CreateObject<WifiNetDevice>();
-    m_phySta2 = CreateObject<OfdmaSpectrumWifiPhy>(2);
+    m_phySta2 = CreateObject<OfdmaSpectrumWifiPhy<HePhy>>(2);
     Ptr<InterferenceHelper> sta2InterferenceHelper = CreateObject<InterferenceHelper>();
     m_phySta2->SetInterferenceHelper(sta2InterferenceHelper);
     Ptr<ErrorRateModel> sta2ErrorModel = CreateObject<NistErrorRateModel>();
@@ -2055,13 +2309,13 @@
                           false};
 
     uint16_t rxStaId1 = 1;
-    HeRu::RuSpec ru1(HeRu::RU_106_TONE, 1, true);
+    HeRu::RuSpec ru1(RuType::RU_106_TONE, 1, true);
     txVector.SetRu(ru1, rxStaId1);
     txVector.SetMode(HePhy::GetHeMcs7(), rxStaId1);
     txVector.SetNss(1, rxStaId1);
 
     uint16_t rxStaId2 = 2;
-    HeRu::RuSpec ru2(HeRu::RU_106_TONE, 2, true);
+    HeRu::RuSpec ru2(RuType::RU_106_TONE, 2, true);
     txVector.SetRu(ru2, rxStaId2);
     txVector.SetMode(HePhy::GetHeMcs9(), rxStaId2);
     txVector.SetNss(1, rxStaId2);
@@ -2109,7 +2363,7 @@
     WifiTxVector trigVector{txVector2};
 
     uint16_t rxStaId1 = 1;
-    HeRu::RuSpec ru1(HeRu::RU_106_TONE, 1, false);
+    HeRu::RuSpec ru1(RuType::RU_106_TONE, 1, false);
     txVector1.SetRu(ru1, rxStaId1);
     txVector1.SetMode(HePhy::GetHeMcs7(), rxStaId1);
     txVector1.SetNss(1, rxStaId1);
@@ -2127,7 +2381,7 @@
     psdus1.insert(std::make_pair(rxStaId1, psdu1));
 
     uint16_t rxStaId2 = 2;
-    HeRu::RuSpec ru2(HeRu::RU_106_TONE, 2, false);
+    HeRu::RuSpec ru2(RuType::RU_106_TONE, 2, false);
     txVector2.SetRu(ru2, rxStaId2);
     txVector2.SetMode(HePhy::GetHeMcs9(), rxStaId2);
     txVector2.SetNss(1, rxStaId2);
@@ -2144,14 +2398,16 @@
     auto psdu2 = Create<WifiPsdu>(pkt2, hdr2);
     psdus2.insert(std::make_pair(rxStaId2, psdu2));
 
-    const auto txDuration1 = OfdmaSpectrumWifiPhy::CalculateTxDuration(psdu1->GetSize(),
-                                                                       txVector1,
-                                                                       m_phySta1->GetPhyBand(),
-                                                                       rxStaId1);
-    const auto txDuration2 = OfdmaSpectrumWifiPhy::CalculateTxDuration(psdu2->GetSize(),
-                                                                       txVector2,
-                                                                       m_phySta1->GetPhyBand(),
-                                                                       rxStaId2);
+    const auto txDuration1 =
+        OfdmaSpectrumWifiPhy<HePhy>::CalculateTxDuration(psdu1->GetSize(),
+                                                         txVector1,
+                                                         m_phySta1->GetPhyBand(),
+                                                         rxStaId1);
+    const auto txDuration2 =
+        OfdmaSpectrumWifiPhy<HePhy>::CalculateTxDuration(psdu2->GetSize(),
+                                                         txVector2,
+                                                         m_phySta1->GetPhyBand(),
+                                                         rxStaId2);
     const auto txDuration = std::max(txDuration1, txDuration2);
 
     txVector1.SetLength(
@@ -2161,8 +2417,8 @@
         HePhy::ConvertHeTbPpduDurationToLSigLength(txDuration, txVector2, m_phySta2->GetPhyBand())
             .first);
 
-    auto hePhyAp = DynamicCast<HePhy>(m_phyAp->GetPhyEntity(WIFI_MOD_CLASS_HE));
-    hePhyAp->SetTrigVector(trigVector, txDuration);
+    auto phyAp = m_phyAp->GetPhyEntity();
+    phyAp->SetTrigVector(trigVector, txDuration);
 
     m_phySta1->Send(psdus1, txVector1);
     m_phySta2->Send(psdus2, txVector2);
@@ -2316,7 +2572,7 @@
      */
     void CheckBytesDropped(size_t expectedBytesDropped);
 
-    Ptr<OfdmaSpectrumWifiPhy> m_phy; ///< Phy
+    Ptr<OfdmaSpectrumWifiPhy<HePhy>> m_phy; ///< Phy
 
     uint64_t m_totalBytesDropped; ///< total number of dropped bytes
     WifiTxVector m_trigVector;    ///< TRIGVECTOR
@@ -2401,7 +2657,7 @@
                           false,
                           false};
 
-    HeRu::RuSpec ru(HeRu::RU_106_TONE, staId, false);
+    HeRu::RuSpec ru(RuType::RU_106_TONE, staId, false);
     txVector.SetRu(ru, staId);
     txVector.SetMode(HePhy::GetHeMcs7(), staId);
     txVector.SetNss(1, staId);
@@ -2417,10 +2673,10 @@
     auto psdu = Create<WifiPsdu>(pkt, hdr);
     psdus.insert(std::make_pair(staId, psdu));
 
-    auto ppduDuration = OfdmaSpectrumWifiPhy::CalculateTxDuration(psdu->GetSize(),
-                                                                  txVector,
-                                                                  m_phy->GetPhyBand(),
-                                                                  staId);
+    auto ppduDuration = OfdmaSpectrumWifiPhy<HePhy>::CalculateTxDuration(psdu->GetSize(),
+                                                                         txVector,
+                                                                         m_phy->GetPhyBand(),
+                                                                         staId);
     auto ppdu = Create<HePpdu>(psdus,
                                txVector,
                                m_phy->GetOperatingChannel(),
@@ -2429,11 +2685,11 @@
                                HePpdu::PSD_NON_HE_PORTION);
 
     // Send non-OFDMA part
-    const auto nonOfdmaDuration = m_phy->GetHePhy()->CalculateNonHeDurationForHeTb(txVector);
+    const auto nonOfdmaDuration = m_phy->GetPhyEntity()->CalculateNonHeDurationForHeTb(txVector);
     const auto centerFrequency =
-        m_phy->GetHePhy()->GetCenterFrequenciesForNonHePart(ppdu, staId).front();
-    MHz_u ruWidth = HeRu::GetBandwidth(txVector.GetRu(staId).GetRuType());
-    MHz_u channelWidth = ruWidth < MHz_u{20} ? MHz_u{20} : ruWidth;
+        m_phy->GetPhyEntity()->GetCenterFrequenciesForNonHePart(ppdu, staId).front();
+    auto ruWidth = WifiRu::GetBandwidth(WifiRu::GetRuType(txVector.GetRu(staId)));
+    auto channelWidth = ruWidth < MHz_u{20} ? MHz_u{20} : ruWidth;
     Ptr<SpectrumValue> rxPsd = WifiSpectrumValueHelper::CreateHeOfdmTxPowerSpectralDensity(
         centerFrequency,
         channelWidth,
@@ -2458,7 +2714,7 @@
     // Schedule OFDMA part
     auto ppduOfdma = DynamicCast<HePpdu>(ppdu->Copy()); // since flag will be modified
     ppduOfdma->SetTxPsdFlag(HePpdu::PSD_HE_PORTION);
-    const auto band = m_phy->GetHePhy()->GetRuBandForRx(txVector, staId);
+    const auto band = m_phy->GetPhyEntity()->GetRuBandForRx(txVector, staId);
     auto rxPsdOfdma =
         WifiSpectrumValueHelper::CreateHeMuOfdmTxPowerSpectralDensity({DEFAULT_FREQUENCY},
                                                                       DEFAULT_CHANNEL_WIDTH,
@@ -2498,7 +2754,7 @@
     Ptr<Node> node = CreateObject<Node>();
     Ptr<WifiNetDevice> dev = CreateObject<WifiNetDevice>();
     dev->SetStandard(WIFI_STANDARD_80211ax);
-    m_phy = CreateObject<OfdmaSpectrumWifiPhy>(0);
+    m_phy = CreateObject<OfdmaSpectrumWifiPhy<HePhy>>(0);
     Ptr<InterferenceHelper> interferenceHelper = CreateObject<InterferenceHelper>();
     Ptr<ErrorRateModel> error = CreateObject<NistErrorRateModel>();
     auto mac = CreateObjectWithAttributes<ApWifiMac>(
@@ -2823,9 +3079,9 @@
         m_lastRxSuccess = true;
     }
 
-    void NotifyRxEndError() override
+    void NotifyRxEndError(const WifiTxVector& txVector) override
     {
-        NS_LOG_FUNCTION(this);
+        NS_LOG_FUNCTION(this << txVector);
         m_lastRxEnd = Simulator::Now();
         ++m_notifyRxEnd;
         m_lastRxSuccess = false;
@@ -2934,6 +3190,7 @@
  *
  * @brief UL-OFDMA PHY test
  */
+template <typename LatestPhyEntityType>
 class TestUlOfdmaPhyTransmission : public TestCase
 {
   public:
@@ -2949,7 +3206,6 @@
     };
 
     TestUlOfdmaPhyTransmission();
-    ~TestUlOfdmaPhyTransmission() override;
 
   private:
     void DoSetup() override;
@@ -2957,15 +3213,13 @@
     void DoRun() override;
 
     /**
-     * Get TXVECTOR for HE TB PPDU.
+     * Get TXVECTOR for HE PPDU.
      * @param txStaId the ID of the TX STA
      * @param index the RU index used for the transmission
      * @param bssColor the BSS color of the TX STA
      * @return the TXVECTOR for HE TB PPDU
      */
-    WifiTxVector GetTxVectorForHeTbPpdu(uint16_t txStaId,
-                                        std::size_t index,
-                                        uint8_t bssColor) const;
+    WifiTxVector GetTxVectorForTbPpdu(uint16_t txStaId, std::size_t index, uint8_t bssColor) const;
     /**
      * Set TRIGVECTOR for HE TB PPDU
      *
@@ -2982,12 +3236,12 @@
      * @param bssColor the BSS color of the TX STA
      * @param incrementUid whether UID shall be incremented
      */
-    void SendHeTbPpdu(uint16_t txStaId,
-                      std::size_t index,
-                      std::size_t payloadSize,
-                      uint64_t uid,
-                      uint8_t bssColor,
-                      bool incrementUid);
+    void SendTbPpdu(uint16_t txStaId,
+                    std::size_t index,
+                    std::size_t payloadSize,
+                    uint64_t uid,
+                    uint8_t bssColor,
+                    bool incrementUid);
 
     /**
      * Send HE SU PPDU function
@@ -2996,7 +3250,7 @@
      * @param uid the UID of the trigger frame that is initiating this transmission
      * @param bssColor the BSS color of the TX STA
      */
-    void SendHeSuPpdu(uint16_t txStaId, std::size_t payloadSize, uint64_t uid, uint8_t bssColor);
+    void SendSuPpdu(uint16_t txStaId, std::size_t payloadSize, uint64_t uid, uint8_t bssColor);
 
     /**
      * Set the BSS color
@@ -3054,7 +3308,7 @@
      * @param band the indices of the band over which the power is measured
      * @param expectedRxPower the expected received power
      */
-    void CheckNonOfdmaRxPower(Ptr<OfdmaSpectrumWifiPhy> phy,
+    void CheckNonOfdmaRxPower(Ptr<OfdmaSpectrumWifiPhy<LatestPhyEntityType>> phy,
                               WifiSpectrumBandInfo band,
                               Watt_u expectedRxPower);
     /**
@@ -3063,7 +3317,7 @@
      * @param band the indices of the band over which the power is measured
      * @param expectedRxPower the expected received power
      */
-    void CheckOfdmaRxPower(Ptr<OfdmaSpectrumWifiPhy> phy,
+    void CheckOfdmaRxPower(Ptr<OfdmaSpectrumWifiPhy<LatestPhyEntityType>> phy,
                            WifiSpectrumBandInfo band,
                            Watt_u expectedRxPower);
 
@@ -3077,9 +3331,11 @@
      * @param phy the PHY
      * @param expectedState the expected state of the PHY
      */
-    void CheckPhyState(Ptr<OfdmaSpectrumWifiPhy> phy, WifiPhyState expectedState);
+    void CheckPhyState(Ptr<OfdmaSpectrumWifiPhy<LatestPhyEntityType>> phy,
+                       WifiPhyState expectedState);
     /// @copydoc CheckPhyState
-    void DoCheckPhyState(Ptr<OfdmaSpectrumWifiPhy> phy, WifiPhyState expectedState);
+    void DoCheckPhyState(Ptr<OfdmaSpectrumWifiPhy<LatestPhyEntityType>> phy,
+                         WifiPhyState expectedState);
 
     /**
      * Check the the number of RX start notifications at the AP as well as the last time a RX start
@@ -3177,63 +3433,66 @@
      */
     void LogScenario(std::string log) const;
 
-    Ptr<OfdmaSpectrumWifiPhy> m_phyAp;   ///< PHY of AP
-    Ptr<OfdmaSpectrumWifiPhy> m_phySta1; ///< PHY of STA 1
-    Ptr<OfdmaSpectrumWifiPhy> m_phySta2; ///< PHY of STA 2
-    Ptr<OfdmaSpectrumWifiPhy> m_phySta3; ///< PHY of STA 3
+    WifiModulationClass m_modClass; ///< the modulation class to consider for the test
+
+    Ptr<OfdmaSpectrumWifiPhy<LatestPhyEntityType>> m_phyAp;   ///< PHY of AP
+    Ptr<OfdmaSpectrumWifiPhy<LatestPhyEntityType>> m_phySta1; ///< PHY of STA 1
+    Ptr<OfdmaSpectrumWifiPhy<LatestPhyEntityType>> m_phySta2; ///< PHY of STA 2
+    Ptr<OfdmaSpectrumWifiPhy<LatestPhyEntityType>> m_phySta3; ///< PHY of STA 3
 
     std::shared_ptr<OfdmaTestPhyListener>
         m_apPhyStateListener; ///< listener for AP PHY state transitions
 
     Ptr<WaveformGenerator> m_phyInterferer; ///< PHY of interferer
 
-    uint32_t m_countRxSuccessFromSta1; ///< count RX success from STA 1
-    uint32_t m_countRxSuccessFromSta2; ///< count RX success from STA 2
-    uint32_t m_countRxFailureFromSta1; ///< count RX failure from STA 1
-    uint32_t m_countRxFailureFromSta2; ///< count RX failure from STA 2
-    uint32_t m_countRxBytesFromSta1;   ///< count RX bytes from STA 1
-    uint32_t m_countRxBytesFromSta2;   ///< count RX bytes from STA 2
-
-    MHz_u m_frequency;           ///< frequency
-    MHz_u m_channelWidth;        ///< channel width
-    Time m_expectedPpduDuration; ///< expected duration to send MU PPDU
+    uint32_t m_countRxSuccessFromSta1{0}; ///< count RX success from STA 1
+    uint32_t m_countRxSuccessFromSta2{0}; ///< count RX success from STA 2
+    uint32_t m_countRxFailureFromSta1{0}; ///< count RX failure from STA 1
+    uint32_t m_countRxFailureFromSta2{0}; ///< count RX failure from STA 2
+    uint32_t m_countRxBytesFromSta1{0};   ///< count RX bytes from STA 1
+    uint32_t m_countRxBytesFromSta2{0};   ///< count RX bytes from STA 2
+
+    MHz_u m_frequency{DEFAULT_FREQUENCY};        ///< frequency
+    MHz_u m_channelWidth{DEFAULT_CHANNEL_WIDTH}; ///< channel width
+    Time m_expectedPpduDuration;                 ///< expected duration to send MU PPDU
 };
 
-TestUlOfdmaPhyTransmission::TestUlOfdmaPhyTransmission()
-    : TestCase("UL-OFDMA PHY test"),
-      m_countRxSuccessFromSta1(0),
-      m_countRxSuccessFromSta2(0),
-      m_countRxFailureFromSta1(0),
-      m_countRxFailureFromSta2(0),
-      m_countRxBytesFromSta1(0),
-      m_countRxBytesFromSta2(0),
-      m_frequency(DEFAULT_FREQUENCY),
-      m_channelWidth(DEFAULT_CHANNEL_WIDTH),
-      m_expectedPpduDuration(NanoSeconds(271200))
+template <typename LatestPhyEntityType>
+TestUlOfdmaPhyTransmission<LatestPhyEntityType>::TestUlOfdmaPhyTransmission()
+    : TestCase{std::string("UL-OFDMA PHY test for ") +
+               ((Demangle(typeid(LatestPhyEntityType).name()).find("He") != std::string::npos)
+                    ? "HE"
+                    : "EHT")},
+      m_modClass{(Demangle(typeid(LatestPhyEntityType).name()).find("He") != std::string::npos)
+                     ? WIFI_MOD_CLASS_HE
+                     : WIFI_MOD_CLASS_EHT},
+      m_expectedPpduDuration{NanoSeconds(271200)}
 {
 }
 
-void
-TestUlOfdmaPhyTransmission::SendHeSuPpdu(uint16_t txStaId,
-                                         std::size_t payloadSize,
-                                         uint64_t uid,
-                                         uint8_t bssColor)
+template <typename LatestPhyEntityType>
+void
+TestUlOfdmaPhyTransmission<LatestPhyEntityType>::SendSuPpdu(uint16_t txStaId,
+                                                            std::size_t payloadSize,
+                                                            uint64_t uid,
+                                                            uint8_t bssColor)
 {
     NS_LOG_FUNCTION(this << txStaId << payloadSize << uid << +bssColor);
     WifiConstPsduMap psdus;
 
-    WifiTxVector txVector{HePhy::GetHeMcs7(),
-                          0,
-                          WIFI_PREAMBLE_HE_SU,
-                          NanoSeconds(800),
-                          1,
-                          1,
-                          0,
-                          m_channelWidth,
-                          false,
-                          false,
-                          false,
-                          bssColor};
+    WifiTxVector txVector{
+        (m_modClass == WIFI_MOD_CLASS_HE) ? HePhy::GetHeMcs7() : EhtPhy::GetEhtMcs7(),
+        0,
+        (m_modClass == WIFI_MOD_CLASS_HE) ? WIFI_PREAMBLE_HE_SU : WIFI_PREAMBLE_EHT_MU,
+        NanoSeconds(800),
+        1,
+        1,
+        0,
+        m_channelWidth,
+        false,
+        false,
+        false,
+        bssColor};
 
     auto pkt = Create<Packet>(payloadSize);
     WifiMacHeader hdr;
@@ -3247,7 +3506,7 @@
     auto psdu = Create<WifiPsdu>(pkt, hdr);
     psdus.insert(std::make_pair(SU_STA_ID, psdu));
 
-    Ptr<OfdmaSpectrumWifiPhy> phy;
+    Ptr<OfdmaSpectrumWifiPhy<LatestPhyEntityType>> phy;
     if (txStaId == 1)
     {
         phy = m_phySta1;
@@ -3268,114 +3527,158 @@
     phy->Send(psdus, txVector);
 }
 
+template <typename LatestPhyEntityType>
 WifiTxVector
-TestUlOfdmaPhyTransmission::GetTxVectorForHeTbPpdu(uint16_t txStaId,
-                                                   std::size_t index,
-                                                   uint8_t bssColor) const
+TestUlOfdmaPhyTransmission<LatestPhyEntityType>::GetTxVectorForTbPpdu(uint16_t txStaId,
+                                                                      std::size_t index,
+                                                                      uint8_t bssColor) const
 {
-    WifiTxVector txVector{HePhy::GetHeMcs7(),
-                          0,
-                          WIFI_PREAMBLE_HE_TB,
-                          NanoSeconds(1600),
-                          1,
-                          1,
-                          0,
-                          m_channelWidth,
-                          false,
-                          false,
-                          false,
-                          bssColor};
-
-    auto ruType = HeRu::RU_106_TONE;
+    WifiTxVector txVector{
+        (m_modClass == WIFI_MOD_CLASS_HE) ? HePhy::GetHeMcs7() : EhtPhy::GetEhtMcs7(),
+        0,
+        (m_modClass == WIFI_MOD_CLASS_HE) ? WIFI_PREAMBLE_HE_TB : WIFI_PREAMBLE_EHT_TB,
+        NanoSeconds(1600),
+        1,
+        1,
+        0,
+        m_channelWidth,
+        false,
+        false,
+        false,
+        bssColor};
+    if (m_modClass == WIFI_MOD_CLASS_EHT)
+    {
+        txVector.SetEhtPpduType(0);
+    }
+    auto ruType{RuType::RU_TYPE_MAX};
     if (m_channelWidth == MHz_u{20})
     {
-        ruType = HeRu::RU_106_TONE;
+        ruType = RuType::RU_106_TONE;
     }
     else if (m_channelWidth == MHz_u{40})
     {
-        ruType = HeRu::RU_242_TONE;
+        ruType = RuType::RU_242_TONE;
     }
     else if (m_channelWidth == MHz_u{80})
     {
-        ruType = HeRu::RU_484_TONE;
+        ruType = RuType::RU_484_TONE;
     }
     else if (m_channelWidth == MHz_u{160})
     {
-        ruType = HeRu::RU_996_TONE;
+        ruType = RuType::RU_996_TONE;
+    }
+    else if (m_channelWidth == MHz_u{320})
+    {
+        ruType = RuType::RU_2x996_TONE;
     }
     else
     {
-        NS_ASSERT_MSG(false, "Unsupported channel width");
+        NS_ASSERT_MSG(false, "Unsupported channel width: " << m_channelWidth);
     }
 
-    auto primary80MHz = true;
-    if (m_channelWidth == MHz_u{160} && index == 2)
+    auto primary80MHzOrLow80MHz{true};
+    auto primary160MHz{true};
+    if (m_channelWidth > MHz_u{80})
     {
-        primary80MHz = false;
-        index = 1;
+        if (m_modClass == WIFI_MOD_CLASS_HE)
+        {
+            primary80MHzOrLow80MHz = HeRu::GetPrimary80MHzFlag(m_channelWidth, ruType, index, 0);
+            index = HeRu::GetIndexIn80MHzSegment(m_channelWidth, ruType, index);
+        }
+        else
+        {
+            const auto& [p160, p80OrLow80] =
+                EhtRu::GetPrimaryFlags(m_channelWidth, ruType, index, 0);
+            primary160MHz = p160;
+            primary80MHzOrLow80MHz = p80OrLow80;
+            index = EhtRu::GetIndexIn80MHzSegment(m_channelWidth, ruType, index);
+        }
     }
-    HeRu::RuSpec ru(ruType, index, primary80MHz);
+    const auto ru =
+        (m_modClass == WIFI_MOD_CLASS_HE)
+            ? WifiRu::RuSpec(HeRu::RuSpec{ruType, index, primary80MHzOrLow80MHz})
+            : WifiRu::RuSpec(EhtRu::RuSpec{ruType, index, primary160MHz, primary80MHzOrLow80MHz});
     txVector.SetRu(ru, txStaId);
-    txVector.SetMode(HePhy::GetHeMcs7(), txStaId);
+    txVector.SetMode((m_modClass == WIFI_MOD_CLASS_HE) ? HePhy::GetHeMcs7() : EhtPhy::GetEhtMcs7(),
+                     txStaId);
     txVector.SetNss(1, txStaId);
     return txVector;
 }
 
+template <typename LatestPhyEntityType>
 void
-TestUlOfdmaPhyTransmission::SetTrigVector(uint8_t bssColor, TrigVectorInfo error)
+TestUlOfdmaPhyTransmission<LatestPhyEntityType>::SetTrigVector(uint8_t bssColor,
+                                                               TrigVectorInfo error)
 {
     auto channelWidth = m_channelWidth;
     if (error == CHANNEL_WIDTH)
     {
-        channelWidth = (channelWidth == MHz_u{160} ? MHz_u{20} : channelWidth * 2);
+        channelWidth =
+            (channelWidth >= GetMaximumChannelWidth(m_modClass) ? MHz_u{20} : channelWidth * 2);
     }
 
-    WifiTxVector txVector(HePhy::GetHeMcs7(),
-                          0,
-                          WIFI_PREAMBLE_HE_TB,
-                          NanoSeconds(1600),
-                          1,
-                          1,
-                          0,
-                          channelWidth,
-                          false,
-                          false,
-                          false,
-                          bssColor);
+    WifiTxVector txVector(
+        (m_modClass == WIFI_MOD_CLASS_HE) ? HePhy::GetHeMcs7() : EhtPhy::GetEhtMcs7(),
+        0,
+        (m_modClass == WIFI_MOD_CLASS_HE) ? WIFI_PREAMBLE_HE_TB : WIFI_PREAMBLE_EHT_TB,
+        NanoSeconds(1600),
+        1,
+        1,
+        0,
+        channelWidth,
+        false,
+        false,
+        false,
+        bssColor);
 
-    HeRu::RuType ruType = HeRu::RU_106_TONE;
+    RuType ruType = RuType::RU_106_TONE;
     if (channelWidth == MHz_u{20})
     {
-        ruType = HeRu::RU_106_TONE;
+        ruType = RuType::RU_106_TONE;
     }
     else if (channelWidth == MHz_u{40})
     {
-        ruType = HeRu::RU_242_TONE;
+        ruType = RuType::RU_242_TONE;
     }
     else if (channelWidth == MHz_u{80})
     {
-        ruType = HeRu::RU_484_TONE;
+        ruType = RuType::RU_484_TONE;
     }
     else if (channelWidth == MHz_u{160})
     {
-        ruType = HeRu::RU_996_TONE;
+        ruType = RuType::RU_996_TONE;
+    }
+    else if (channelWidth == MHz_u{320})
+    {
+        ruType = RuType::RU_2x996_TONE;
     }
     else
     {
-        NS_ASSERT_MSG(false, "Unsupported channel width");
+        NS_ASSERT_MSG(false, "Unsupported channel width: " << channelWidth);
     }
 
     uint16_t aid1 = (error == AID ? 3 : 1);
     uint16_t aid2 = (error == AID ? 4 : 2);
 
-    HeRu::RuSpec ru1(ruType, 1, true);
+    const auto ru1 = (m_modClass == WIFI_MOD_CLASS_HE)
+                         ? WifiRu::RuSpec(HeRu::RuSpec{ruType, 1, true})
+                         : WifiRu::RuSpec(EhtRu::RuSpec{ruType, 1, true, true});
     txVector.SetRu(ru1, aid1);
-    txVector.SetMode(HePhy::GetHeMcs7(), aid1);
+    txVector.SetMode((m_modClass == WIFI_MOD_CLASS_HE) ? HePhy::GetHeMcs7() : EhtPhy::GetEhtMcs7(),
+                     aid1);
     txVector.SetNss(1, aid1);
 
-    HeRu::RuSpec ru2(ruType, (channelWidth == MHz_u{160} ? 1 : 2), (channelWidth != MHz_u{160}));
+    const auto ru2 = (m_modClass == WIFI_MOD_CLASS_HE)
+                         ? WifiRu::RuSpec(HeRu::RuSpec{ruType,
+                                                       (channelWidth == MHz_u{160} ? 1ULL : 2ULL),
+                                                       (channelWidth != MHz_u{160})})
+                         : WifiRu::RuSpec(EhtRu::RuSpec{ruType,
+                                                        (channelWidth == MHz_u{320} ? 1ULL : 2ULL),
+                                                        (channelWidth != MHz_u{320}),
+                                                        true});
     txVector.SetRu(ru2, aid2);
-    txVector.SetMode(HePhy::GetHeMcs7(), aid2);
+    txVector.SetMode((m_modClass == WIFI_MOD_CLASS_HE) ? HePhy::GetHeMcs7() : EhtPhy::GetEhtMcs7(),
+                     aid2);
     txVector.SetNss(1, aid2);
 
     uint16_t length;
@@ -3388,17 +3691,18 @@
         ++length;
     }
     txVector.SetLength(length);
-    auto hePhyAp = DynamicCast<HePhy>(m_phyAp->GetLatestPhyEntity());
-    hePhyAp->SetTrigVector(txVector, m_expectedPpduDuration);
+    auto phyAp = m_phyAp->GetPhyEntity();
+    phyAp->SetTrigVector(txVector, m_expectedPpduDuration);
 }
 
+template <typename LatestPhyEntityType>
 void
-TestUlOfdmaPhyTransmission::SendHeTbPpdu(uint16_t txStaId,
-                                         std::size_t index,
-                                         std::size_t payloadSize,
-                                         uint64_t uid,
-                                         uint8_t bssColor,
-                                         bool incrementUid)
+TestUlOfdmaPhyTransmission<LatestPhyEntityType>::SendTbPpdu(uint16_t txStaId,
+                                                            std::size_t index,
+                                                            std::size_t payloadSize,
+                                                            uint64_t uid,
+                                                            uint8_t bssColor,
+                                                            bool incrementUid)
 {
     NS_LOG_FUNCTION(this << txStaId << index << payloadSize << uid << +bssColor << (incrementUid));
     WifiConstPsduMap psdus;
@@ -3408,7 +3712,7 @@
         ++uid;
     }
 
-    WifiTxVector txVector = GetTxVectorForHeTbPpdu(txStaId, index, bssColor);
+    auto txVector = GetTxVectorForTbPpdu(txStaId, index, bssColor);
     Ptr<Packet> pkt = Create<Packet>(payloadSize);
     WifiMacHeader hdr;
     hdr.SetType(WIFI_MAC_QOSDATA);
@@ -3421,7 +3725,7 @@
     Ptr<WifiPsdu> psdu = Create<WifiPsdu>(pkt, hdr);
     psdus.insert(std::make_pair(txStaId, psdu));
 
-    Ptr<OfdmaSpectrumWifiPhy> phy;
+    Ptr<OfdmaSpectrumWifiPhy<LatestPhyEntityType>> phy;
     if (txStaId == 1)
     {
         phy = m_phySta1;
@@ -3435,10 +3739,11 @@
         phy = m_phySta3;
     }
 
-    Time txDuration = OfdmaSpectrumWifiPhy::CalculateTxDuration(psdu->GetSize(),
-                                                                txVector,
-                                                                phy->GetPhyBand(),
-                                                                txStaId);
+    Time txDuration =
+        OfdmaSpectrumWifiPhy<LatestPhyEntityType>::CalculateTxDuration(psdu->GetSize(),
+                                                                       txVector,
+                                                                       phy->GetPhyBand(),
+                                                                       txStaId);
     txVector.SetLength(
         HePhy::ConvertHeTbPpduDurationToLSigLength(txDuration, txVector, phy->GetPhyBand()).first);
 
@@ -3446,31 +3751,35 @@
     phy->Send(psdus, txVector);
 }
 
+template <typename LatestPhyEntityType>
 void
-TestUlOfdmaPhyTransmission::GenerateInterference(Ptr<SpectrumValue> interferencePsd, Time duration)
+TestUlOfdmaPhyTransmission<LatestPhyEntityType>::GenerateInterference(
+    Ptr<SpectrumValue> interferencePsd,
+    Time duration)
 {
     NS_LOG_FUNCTION(this << duration);
     m_phyInterferer->SetTxPowerSpectralDensity(interferencePsd);
     m_phyInterferer->SetPeriod(duration);
     m_phyInterferer->Start();
-    Simulator::Schedule(duration, &TestUlOfdmaPhyTransmission::StopInterference, this);
+    Simulator::Schedule(duration,
+                        &TestUlOfdmaPhyTransmission<LatestPhyEntityType>::StopInterference,
+                        this);
 }
 
+template <typename LatestPhyEntityType>
 void
-TestUlOfdmaPhyTransmission::StopInterference()
+TestUlOfdmaPhyTransmission<LatestPhyEntityType>::StopInterference()
 {
     m_phyInterferer->Stop();
 }
 
-TestUlOfdmaPhyTransmission::~TestUlOfdmaPhyTransmission()
-{
-}
-
+template <typename LatestPhyEntityType>
 void
-TestUlOfdmaPhyTransmission::RxSuccess(Ptr<const WifiPsdu> psdu,
-                                      RxSignalInfo rxSignalInfo,
-                                      const WifiTxVector& txVector,
-                                      const std::vector<bool>& /*statusPerMpdu*/)
+TestUlOfdmaPhyTransmission<LatestPhyEntityType>::RxSuccess(
+    Ptr<const WifiPsdu> psdu,
+    RxSignalInfo rxSignalInfo,
+    const WifiTxVector& txVector,
+    const std::vector<bool>& /*statusPerMpdu*/)
 {
     NS_LOG_FUNCTION(this << *psdu << psdu->GetAddr2() << rxSignalInfo << txVector);
     if (psdu->GetAddr2() == Mac48Address("00:00:00:00:00:01"))
@@ -3485,8 +3794,9 @@
     }
 }
 
+template <typename LatestPhyEntityType>
 void
-TestUlOfdmaPhyTransmission::RxFailure(Ptr<const WifiPsdu> psdu)
+TestUlOfdmaPhyTransmission<LatestPhyEntityType>::RxFailure(Ptr<const WifiPsdu> psdu)
 {
     NS_LOG_FUNCTION(this << *psdu << psdu->GetAddr2());
     if (psdu->GetAddr2() == Mac48Address("00:00:00:00:00:01"))
@@ -3499,10 +3809,11 @@
     }
 }
 
+template <typename LatestPhyEntityType>
 void
-TestUlOfdmaPhyTransmission::CheckRxFromSta1(uint32_t expectedSuccess,
-                                            uint32_t expectedFailures,
-                                            uint32_t expectedBytes)
+TestUlOfdmaPhyTransmission<LatestPhyEntityType>::CheckRxFromSta1(uint32_t expectedSuccess,
+                                                                 uint32_t expectedFailures,
+                                                                 uint32_t expectedBytes)
 {
     NS_TEST_ASSERT_MSG_EQ(m_countRxSuccessFromSta1,
                           expectedSuccess,
@@ -3510,16 +3821,17 @@
     NS_TEST_ASSERT_MSG_EQ(
         m_countRxFailureFromSta1,
         expectedFailures,
-        "The number of unsuccessfuly received packets from STA 1 is not correct!");
+        "The number of unsuccessfully received packets from STA 1 is not correct!");
     NS_TEST_ASSERT_MSG_EQ(m_countRxBytesFromSta1,
                           expectedBytes,
                           "The number of bytes received from STA 1 is not correct!");
 }
 
+template <typename LatestPhyEntityType>
 void
-TestUlOfdmaPhyTransmission::CheckRxFromSta2(uint32_t expectedSuccess,
-                                            uint32_t expectedFailures,
-                                            uint32_t expectedBytes)
+TestUlOfdmaPhyTransmission<LatestPhyEntityType>::CheckRxFromSta2(uint32_t expectedSuccess,
+                                                                 uint32_t expectedFailures,
+                                                                 uint32_t expectedBytes)
 {
     NS_TEST_ASSERT_MSG_EQ(m_countRxSuccessFromSta2,
                           expectedSuccess,
@@ -3527,16 +3839,18 @@
     NS_TEST_ASSERT_MSG_EQ(
         m_countRxFailureFromSta2,
         expectedFailures,
-        "The number of unsuccessfuly received packets from STA 2 is not correct!");
+        "The number of unsuccessfully received packets from STA 2 is not correct!");
     NS_TEST_ASSERT_MSG_EQ(m_countRxBytesFromSta2,
                           expectedBytes,
                           "The number of bytes received from STA 2 is not correct!");
 }
 
+template <typename LatestPhyEntityType>
 void
-TestUlOfdmaPhyTransmission::CheckNonOfdmaRxPower(Ptr<OfdmaSpectrumWifiPhy> phy,
-                                                 WifiSpectrumBandInfo band,
-                                                 Watt_u expectedRxPower)
+TestUlOfdmaPhyTransmission<LatestPhyEntityType>::CheckNonOfdmaRxPower(
+    Ptr<OfdmaSpectrumWifiPhy<LatestPhyEntityType>> phy,
+    WifiSpectrumBandInfo band,
+    Watt_u expectedRxPower)
 {
     auto event = phy->GetCurrentEvent();
     NS_ASSERT(event);
@@ -3551,10 +3865,12 @@
                                           << " at " << Simulator::Now());
 }
 
+template <typename LatestPhyEntityType>
 void
-TestUlOfdmaPhyTransmission::CheckOfdmaRxPower(Ptr<OfdmaSpectrumWifiPhy> phy,
-                                              WifiSpectrumBandInfo band,
-                                              Watt_u expectedRxPower)
+TestUlOfdmaPhyTransmission<LatestPhyEntityType>::CheckOfdmaRxPower(
+    Ptr<OfdmaSpectrumWifiPhy<LatestPhyEntityType>> phy,
+    WifiSpectrumBandInfo band,
+    Watt_u expectedRxPower)
 {
     /**
      * The current event cannot be used since it points to the preamble part of the HE TB PPDU.
@@ -3586,8 +3902,9 @@
     }
 }
 
+template <typename LatestPhyEntityType>
 void
-TestUlOfdmaPhyTransmission::VerifyEventsCleared()
+TestUlOfdmaPhyTransmission<LatestPhyEntityType>::VerifyEventsCleared()
 {
     NS_TEST_ASSERT_MSG_EQ(m_phyAp->GetCurrentEvent(),
                           nullptr,
@@ -3600,17 +3917,25 @@
                           "m_currentEvent for STA 2 was not cleared");
 }
 
+template <typename LatestPhyEntityType>
 void
-TestUlOfdmaPhyTransmission::CheckPhyState(Ptr<OfdmaSpectrumWifiPhy> phy, WifiPhyState expectedState)
+TestUlOfdmaPhyTransmission<LatestPhyEntityType>::CheckPhyState(
+    Ptr<OfdmaSpectrumWifiPhy<LatestPhyEntityType>> phy,
+    WifiPhyState expectedState)
 {
     // This is needed to make sure PHY state will be checked as the last event if a state change
     // occurred at the exact same time as the check
-    Simulator::ScheduleNow(&TestUlOfdmaPhyTransmission::DoCheckPhyState, this, phy, expectedState);
+    Simulator::ScheduleNow(&TestUlOfdmaPhyTransmission<LatestPhyEntityType>::DoCheckPhyState,
+                           this,
+                           phy,
+                           expectedState);
 }
 
+template <typename LatestPhyEntityType>
 void
-TestUlOfdmaPhyTransmission::DoCheckPhyState(Ptr<OfdmaSpectrumWifiPhy> phy,
-                                            WifiPhyState expectedState)
+TestUlOfdmaPhyTransmission<LatestPhyEntityType>::DoCheckPhyState(
+    Ptr<OfdmaSpectrumWifiPhy<LatestPhyEntityType>> phy,
+    WifiPhyState expectedState)
 {
     WifiPhyState currentState;
     PointerValue ptr;
@@ -3624,9 +3949,10 @@
                                        << expectedState << " at " << Simulator::Now());
 }
 
+template <typename LatestPhyEntityType>
 void
-TestUlOfdmaPhyTransmission::CheckApRxStart(uint32_t expectedNotifications,
-                                           Time expectedLastNotification)
+TestUlOfdmaPhyTransmission<LatestPhyEntityType>::CheckApRxStart(uint32_t expectedNotifications,
+                                                                Time expectedLastNotification)
 {
     NS_TEST_ASSERT_MSG_EQ(m_apPhyStateListener->GetNumRxStartNotifications(),
                           expectedNotifications,
@@ -3642,10 +3968,11 @@
                               << " for AP at " << Simulator::Now());
 }
 
+template <typename LatestPhyEntityType>
 void
-TestUlOfdmaPhyTransmission::CheckApRxEnd(uint32_t expectedNotifications,
-                                         Time expectedLastNotification,
-                                         bool expectedSuccess)
+TestUlOfdmaPhyTransmission<LatestPhyEntityType>::CheckApRxEnd(uint32_t expectedNotifications,
+                                                              Time expectedLastNotification,
+                                                              bool expectedSuccess)
 {
     NS_TEST_ASSERT_MSG_EQ(m_apPhyStateListener->GetNumRxEndNotifications(),
                           expectedNotifications,
@@ -3667,8 +3994,9 @@
                               << " for AP at " << Simulator::Now());
 }
 
+template <typename LatestPhyEntityType>
 void
-TestUlOfdmaPhyTransmission::Reset()
+TestUlOfdmaPhyTransmission<LatestPhyEntityType>::Reset()
 {
     m_countRxSuccessFromSta1 = 0;
     m_countRxSuccessFromSta2 = 0;
@@ -3683,24 +4011,31 @@
     m_apPhyStateListener->Reset();
 }
 
+template <typename LatestPhyEntityType>
 void
-TestUlOfdmaPhyTransmission::SetBssColor(Ptr<WifiPhy> phy, uint8_t bssColor)
+TestUlOfdmaPhyTransmission<LatestPhyEntityType>::SetBssColor(Ptr<WifiPhy> phy, uint8_t bssColor)
 {
     Ptr<WifiNetDevice> device = DynamicCast<WifiNetDevice>(phy->GetDevice());
     Ptr<HeConfiguration> heConfiguration = device->GetHeConfiguration();
-    heConfiguration->SetAttribute("BssColor", UintegerValue(bssColor));
+    heConfiguration->m_bssColor = bssColor;
 }
 
+template <typename LatestPhyEntityType>
 void
-TestUlOfdmaPhyTransmission::SetPsdLimit(Ptr<WifiPhy> phy, dBm_per_MHz_u psdLimit)
+TestUlOfdmaPhyTransmission<LatestPhyEntityType>::SetPsdLimit(Ptr<WifiPhy> phy,
+                                                             dBm_per_MHz_u psdLimit)
 {
     NS_LOG_FUNCTION(this << phy << psdLimit);
     phy->SetAttribute("PowerDensityLimit", DoubleValue(psdLimit));
 }
 
+template <typename LatestPhyEntityType>
 void
-TestUlOfdmaPhyTransmission::DoSetup()
+TestUlOfdmaPhyTransmission<LatestPhyEntityType>::DoSetup()
 {
+    const auto standard =
+        (m_modClass == WIFI_MOD_CLASS_HE) ? WIFI_STANDARD_80211ax : WIFI_STANDARD_80211be;
+
     Ptr<MultiModelSpectrumChannel> spectrumChannel = CreateObject<MultiModelSpectrumChannel>();
     Ptr<FriisPropagationLossModel> lossModel = CreateObject<FriisPropagationLossModel>();
     lossModel->SetFrequency(m_frequency);
@@ -3719,24 +4054,30 @@
 
     Ptr<Node> apNode = CreateObject<Node>();
     Ptr<WifiNetDevice> apDev = CreateObject<WifiNetDevice>();
-    apDev->SetStandard(WIFI_STANDARD_80211ax);
+    apDev->SetStandard(standard);
     auto apMac = CreateObjectWithAttributes<ApWifiMac>(
         "Txop",
         PointerValue(CreateObjectWithAttributes<Txop>("AcIndex", StringValue("AC_BE_NQOS"))));
     apMac->SetAttribute("BeaconGeneration", BooleanValue(false));
     apDev->SetMac(apMac);
-    m_phyAp = CreateObject<OfdmaSpectrumWifiPhy>(0);
+    m_phyAp = CreateObject<OfdmaSpectrumWifiPhy<LatestPhyEntityType>>(0);
     Ptr<HeConfiguration> heConfiguration = CreateObject<HeConfiguration>();
     apDev->SetHeConfiguration(heConfiguration);
+    if (m_modClass >= WIFI_MOD_CLASS_EHT)
+    {
+        apDev->SetEhtConfiguration(CreateObject<EhtConfiguration>());
+    }
     Ptr<InterferenceHelper> apInterferenceHelper = CreateObject<InterferenceHelper>();
     m_phyAp->SetInterferenceHelper(apInterferenceHelper);
     Ptr<ErrorRateModel> apErrorModel = CreateObject<NistErrorRateModel>();
     m_phyAp->SetErrorRateModel(apErrorModel);
     m_phyAp->SetDevice(apDev);
     m_phyAp->AddChannel(spectrumChannel);
-    m_phyAp->ConfigureStandard(WIFI_STANDARD_80211ax);
-    m_phyAp->SetReceiveOkCallback(MakeCallback(&TestUlOfdmaPhyTransmission::RxSuccess, this));
-    m_phyAp->SetReceiveErrorCallback(MakeCallback(&TestUlOfdmaPhyTransmission::RxFailure, this));
+    m_phyAp->ConfigureStandard(standard);
+    m_phyAp->SetReceiveOkCallback(
+        MakeCallback(&TestUlOfdmaPhyTransmission<LatestPhyEntityType>::RxSuccess, this));
+    m_phyAp->SetReceiveErrorCallback(
+        MakeCallback(&TestUlOfdmaPhyTransmission<LatestPhyEntityType>::RxFailure, this));
     m_phyAp->SetPreambleDetectionModel(preambleDetectionModel);
     Ptr<ConstantPositionMobilityModel> apMobility = CreateObject<ConstantPositionMobilityModel>();
     m_phyAp->SetMobility(apMobility);
@@ -3749,16 +4090,20 @@
 
     Ptr<Node> sta1Node = CreateObject<Node>();
     Ptr<WifiNetDevice> sta1Dev = CreateObject<WifiNetDevice>();
-    sta1Dev->SetStandard(WIFI_STANDARD_80211ax);
+    sta1Dev->SetStandard(standard);
     sta1Dev->SetHeConfiguration(CreateObject<HeConfiguration>());
-    m_phySta1 = CreateObject<OfdmaSpectrumWifiPhy>(1);
+    if (m_modClass >= WIFI_MOD_CLASS_EHT)
+    {
+        sta1Dev->SetEhtConfiguration(CreateObject<EhtConfiguration>());
+    }
+    m_phySta1 = CreateObject<OfdmaSpectrumWifiPhy<LatestPhyEntityType>>(1);
     Ptr<InterferenceHelper> sta1InterferenceHelper = CreateObject<InterferenceHelper>();
     m_phySta1->SetInterferenceHelper(sta1InterferenceHelper);
     Ptr<ErrorRateModel> sta1ErrorModel = CreateObject<NistErrorRateModel>();
     m_phySta1->SetErrorRateModel(sta1ErrorModel);
     m_phySta1->SetDevice(sta1Dev);
     m_phySta1->AddChannel(spectrumChannel);
-    m_phySta1->ConfigureStandard(WIFI_STANDARD_80211ax);
+    m_phySta1->ConfigureStandard(standard);
     m_phySta1->SetPreambleDetectionModel(preambleDetectionModel);
     Ptr<ConstantPositionMobilityModel> sta1Mobility = CreateObject<ConstantPositionMobilityModel>();
     m_phySta1->SetMobility(sta1Mobility);
@@ -3768,16 +4113,20 @@
 
     Ptr<Node> sta2Node = CreateObject<Node>();
     Ptr<WifiNetDevice> sta2Dev = CreateObject<WifiNetDevice>();
-    sta2Dev->SetStandard(WIFI_STANDARD_80211ax);
+    sta2Dev->SetStandard(standard);
     sta2Dev->SetHeConfiguration(CreateObject<HeConfiguration>());
-    m_phySta2 = CreateObject<OfdmaSpectrumWifiPhy>(2);
+    if (m_modClass >= WIFI_MOD_CLASS_EHT)
+    {
+        sta2Dev->SetEhtConfiguration(CreateObject<EhtConfiguration>());
+    }
+    m_phySta2 = CreateObject<OfdmaSpectrumWifiPhy<LatestPhyEntityType>>(2);
     Ptr<InterferenceHelper> sta2InterferenceHelper = CreateObject<InterferenceHelper>();
     m_phySta2->SetInterferenceHelper(sta2InterferenceHelper);
     Ptr<ErrorRateModel> sta2ErrorModel = CreateObject<NistErrorRateModel>();
     m_phySta2->SetErrorRateModel(sta2ErrorModel);
     m_phySta2->SetDevice(sta2Dev);
     m_phySta2->AddChannel(spectrumChannel);
-    m_phySta2->ConfigureStandard(WIFI_STANDARD_80211ax);
+    m_phySta2->ConfigureStandard(standard);
     m_phySta2->SetPreambleDetectionModel(preambleDetectionModel);
     Ptr<ConstantPositionMobilityModel> sta2Mobility = CreateObject<ConstantPositionMobilityModel>();
     m_phySta2->SetMobility(sta2Mobility);
@@ -3787,16 +4136,20 @@
 
     Ptr<Node> sta3Node = CreateObject<Node>();
     Ptr<WifiNetDevice> sta3Dev = CreateObject<WifiNetDevice>();
-    sta3Dev->SetStandard(WIFI_STANDARD_80211ax);
+    sta3Dev->SetStandard(standard);
     sta3Dev->SetHeConfiguration(CreateObject<HeConfiguration>());
-    m_phySta3 = CreateObject<OfdmaSpectrumWifiPhy>(3);
+    if (m_modClass >= WIFI_MOD_CLASS_EHT)
+    {
+        sta3Dev->SetEhtConfiguration(CreateObject<EhtConfiguration>());
+    }
+    m_phySta3 = CreateObject<OfdmaSpectrumWifiPhy<LatestPhyEntityType>>(3);
     Ptr<InterferenceHelper> sta3InterferenceHelper = CreateObject<InterferenceHelper>();
     m_phySta3->SetInterferenceHelper(sta3InterferenceHelper);
     Ptr<ErrorRateModel> sta3ErrorModel = CreateObject<NistErrorRateModel>();
     m_phySta3->SetErrorRateModel(sta3ErrorModel);
     m_phySta3->SetDevice(sta3Dev);
     m_phySta3->AddChannel(spectrumChannel);
-    m_phySta3->ConfigureStandard(WIFI_STANDARD_80211ax);
+    m_phySta3->ConfigureStandard(standard);
     m_phySta3->SetPreambleDetectionModel(preambleDetectionModel);
     Ptr<ConstantPositionMobilityModel> sta3Mobility = CreateObject<ConstantPositionMobilityModel>();
     m_phySta3->SetMobility(sta3Mobility);
@@ -3828,8 +4181,9 @@
     }
 }
 
+template <typename LatestPhyEntityType>
 void
-TestUlOfdmaPhyTransmission::DoTeardown()
+TestUlOfdmaPhyTransmission<LatestPhyEntityType>::DoTeardown()
 {
     m_phyAp->Dispose();
     m_phyAp = nullptr;
@@ -3843,32 +4197,34 @@
     m_phyInterferer = nullptr;
 }
 
+template <typename LatestPhyEntityType>
 void
-TestUlOfdmaPhyTransmission::LogScenario(std::string log) const
+TestUlOfdmaPhyTransmission<LatestPhyEntityType>::LogScenario(std::string log) const
 {
     NS_LOG_INFO(log);
 }
 
+template <typename LatestPhyEntityType>
 void
-TestUlOfdmaPhyTransmission::ScheduleTest(Time delay,
-                                         bool solicited,
-                                         WifiPhyState expectedStateAtEnd,
-                                         uint32_t expectedSuccessFromSta1,
-                                         uint32_t expectedFailuresFromSta1,
-                                         uint32_t expectedBytesFromSta1,
-                                         uint32_t expectedSuccessFromSta2,
-                                         uint32_t expectedFailuresFromSta2,
-                                         uint32_t expectedBytesFromSta2,
-                                         bool scheduleTxSta1,
-                                         Time ulTimeDifference,
-                                         WifiPhyState expectedStateBeforeEnd,
-                                         TrigVectorInfo error)
+TestUlOfdmaPhyTransmission<LatestPhyEntityType>::ScheduleTest(Time delay,
+                                                              bool solicited,
+                                                              WifiPhyState expectedStateAtEnd,
+                                                              uint32_t expectedSuccessFromSta1,
+                                                              uint32_t expectedFailuresFromSta1,
+                                                              uint32_t expectedBytesFromSta1,
+                                                              uint32_t expectedSuccessFromSta2,
+                                                              uint32_t expectedFailuresFromSta2,
+                                                              uint32_t expectedBytesFromSta2,
+                                                              bool scheduleTxSta1,
+                                                              Time ulTimeDifference,
+                                                              WifiPhyState expectedStateBeforeEnd,
+                                                              TrigVectorInfo error)
 {
     static uint64_t uid = 0;
 
     // AP sends an SU packet preceding HE TB PPDUs
     Simulator::Schedule(delay - MilliSeconds(10),
-                        &TestUlOfdmaPhyTransmission::SendHeSuPpdu,
+                        &TestUlOfdmaPhyTransmission<LatestPhyEntityType>::SendSuPpdu,
                         this,
                         0,
                         50,
@@ -3881,7 +4237,11 @@
     }
     else
     {
-        Simulator::Schedule(delay, &TestUlOfdmaPhyTransmission::SetTrigVector, this, 0, error);
+        Simulator::Schedule(delay,
+                            &TestUlOfdmaPhyTransmission<LatestPhyEntityType>::SetTrigVector,
+                            this,
+                            0,
+                            error);
     }
     // STA1 and STA2 send MU UL PPDUs addressed to AP
     Simulator::Schedule(delay - MilliSeconds(1),
@@ -3890,7 +4250,7 @@
     if (scheduleTxSta1)
     {
         Simulator::Schedule(delay,
-                            &TestUlOfdmaPhyTransmission::SendHeTbPpdu,
+                            &TestUlOfdmaPhyTransmission<LatestPhyEntityType>::SendTbPpdu,
                             this,
                             1,
                             1,
@@ -3900,7 +4260,7 @@
                             false);
     }
     Simulator::Schedule(delay + ulTimeDifference,
-                        &TestUlOfdmaPhyTransmission::SendHeTbPpdu,
+                        &TestUlOfdmaPhyTransmission<LatestPhyEntityType>::SendTbPpdu,
                         this,
                         2,
                         2,
@@ -3911,12 +4271,12 @@
 
     // Verify it takes m_expectedPpduDuration to transmit the PPDUs
     Simulator::Schedule(delay + m_expectedPpduDuration - NanoSeconds(1),
-                        &TestUlOfdmaPhyTransmission::CheckPhyState,
+                        &TestUlOfdmaPhyTransmission<LatestPhyEntityType>::CheckPhyState,
                         this,
                         m_phyAp,
                         expectedStateBeforeEnd);
     Simulator::Schedule(delay + m_expectedPpduDuration + ulTimeDifference,
-                        &TestUlOfdmaPhyTransmission::CheckPhyState,
+                        &TestUlOfdmaPhyTransmission<LatestPhyEntityType>::CheckPhyState,
                         this,
                         m_phyAp,
                         expectedStateAtEnd);
@@ -3938,14 +4298,14 @@
         // At the end of the transmission, verify that a single RX start notification shall have
         // been notified when the reception of the first HE RB PPDU starts.
         Simulator::Schedule(expectedPayloadEnd,
-                            &TestUlOfdmaPhyTransmission::CheckApRxStart,
+                            &TestUlOfdmaPhyTransmission<LatestPhyEntityType>::CheckApRxStart,
                             this,
                             1,
                             Simulator::Now() + expectedPayloadStart);
         // After the reception (hence we add 1ns to expectedPayloadEnd), a single RX end
         // notification shall have been notified when the reception of the last HE RB PPDU ends
         Simulator::Schedule(expectedPayloadEnd + NanoSeconds(1),
-                            &TestUlOfdmaPhyTransmission::CheckApRxEnd,
+                            &TestUlOfdmaPhyTransmission<LatestPhyEntityType>::CheckApRxEnd,
                             this,
                             1,
                             Simulator::Now() + expectedPayloadEnd,
@@ -3955,45 +4315,49 @@
     delay += MilliSeconds(100);
     // Check reception state from STA 1
     Simulator::Schedule(delay,
-                        &TestUlOfdmaPhyTransmission::CheckRxFromSta1,
+                        &TestUlOfdmaPhyTransmission<LatestPhyEntityType>::CheckRxFromSta1,
                         this,
                         expectedSuccessFromSta1,
                         expectedFailuresFromSta1,
                         expectedBytesFromSta1);
     // Check reception state from STA 2
     Simulator::Schedule(delay,
-                        &TestUlOfdmaPhyTransmission::CheckRxFromSta2,
+                        &TestUlOfdmaPhyTransmission<LatestPhyEntityType>::CheckRxFromSta2,
                         this,
                         expectedSuccessFromSta2,
                         expectedFailuresFromSta2,
                         expectedBytesFromSta2);
     // Verify events data have been cleared
-    Simulator::Schedule(delay, &TestUlOfdmaPhyTransmission::VerifyEventsCleared, this);
+    Simulator::Schedule(delay,
+                        &TestUlOfdmaPhyTransmission<LatestPhyEntityType>::VerifyEventsCleared,
+                        this);
 
     delay += MilliSeconds(100);
-    Simulator::Schedule(delay, &TestUlOfdmaPhyTransmission::Reset, this);
+    Simulator::Schedule(delay, &TestUlOfdmaPhyTransmission<LatestPhyEntityType>::Reset, this);
 }
 
+template <typename LatestPhyEntityType>
 void
-TestUlOfdmaPhyTransmission::SchedulePowerMeasurementChecks(Time delay,
-                                                           Watt_u rxPowerNonOfdmaRu1,
-                                                           Watt_u rxPowerNonOfdmaRu2,
-                                                           Watt_u rxPowerOfdmaRu1,
-                                                           Watt_u rxPowerOfdmaRu2)
+TestUlOfdmaPhyTransmission<LatestPhyEntityType>::SchedulePowerMeasurementChecks(
+    Time delay,
+    Watt_u rxPowerNonOfdmaRu1,
+    Watt_u rxPowerNonOfdmaRu2,
+    Watt_u rxPowerOfdmaRu1,
+    Watt_u rxPowerOfdmaRu2)
 {
     const auto detectionDuration = WifiPhy::GetPreambleDetectionDuration();
-    const auto txVectorSta1 = GetTxVectorForHeTbPpdu(1, 1, 0);
-    const auto txVectorSta2 = GetTxVectorForHeTbPpdu(2, 2, 0);
-    const auto hePhy = m_phyAp->GetHePhy();
-    const auto nonOfdmaDuration = hePhy->CalculateNonHeDurationForHeTb(txVectorSta2);
-    NS_ASSERT(nonOfdmaDuration == hePhy->CalculateNonHeDurationForHeTb(txVectorSta1));
+    const auto txVectorSta1 = GetTxVectorForTbPpdu(1, 1, 0);
+    const auto txVectorSta2 = GetTxVectorForTbPpdu(2, 2, 0);
+    const auto phyEntity = DynamicCast<OfdmaTestPhy<LatestPhyEntityType>>(m_phyAp->GetPhyEntity());
+    const auto nonOfdmaDuration = phyEntity->CalculateNonHeDurationForHeTb(txVectorSta2);
+    NS_ASSERT(nonOfdmaDuration == phyEntity->CalculateNonHeDurationForHeTb(txVectorSta1));
 
     std::vector<Watt_u> rxPowerNonOfdma{rxPowerNonOfdmaRu1, rxPowerNonOfdmaRu2};
-    std::vector<WifiSpectrumBandInfo> nonOfdmaBand{hePhy->GetNonOfdmaBand(txVectorSta1, 1),
-                                                   hePhy->GetNonOfdmaBand(txVectorSta2, 2)};
+    std::vector<WifiSpectrumBandInfo> nonOfdmaBand{phyEntity->GetNonOfdmaBand(txVectorSta1, 1),
+                                                   phyEntity->GetNonOfdmaBand(txVectorSta2, 2)};
     std::vector<Watt_u> rxPowerOfdma{rxPowerOfdmaRu1, rxPowerOfdmaRu2};
-    std::vector<WifiSpectrumBandInfo> ofdmaBand{hePhy->GetRuBandForRx(txVectorSta1, 1),
-                                                hePhy->GetRuBandForRx(txVectorSta2, 2)};
+    std::vector<WifiSpectrumBandInfo> ofdmaBand{phyEntity->GetRuBandForRx(txVectorSta1, 1),
+                                                phyEntity->GetRuBandForRx(txVectorSta2, 2)};
 
     for (uint8_t i = 0; i < 2; ++i)
     {
@@ -4004,13 +4368,13 @@
         Simulator::Schedule(
             delay + detectionDuration +
                 NanoSeconds(1), // just after beginning of portion (once event is stored)
-            &TestUlOfdmaPhyTransmission::CheckNonOfdmaRxPower,
+            &TestUlOfdmaPhyTransmission<LatestPhyEntityType>::CheckNonOfdmaRxPower,
             this,
             m_phyAp,
             nonOfdmaBand[i],
             rxPowerNonOfdma[i]);
         Simulator::Schedule(delay + nonOfdmaDuration - NanoSeconds(1), // just before end of portion
-                            &TestUlOfdmaPhyTransmission::CheckNonOfdmaRxPower,
+                            &TestUlOfdmaPhyTransmission<LatestPhyEntityType>::CheckNonOfdmaRxPower,
                             this,
                             m_phyAp,
                             nonOfdmaBand[i],
@@ -4018,14 +4382,14 @@
         // Check received power on OFDMA portion
         Simulator::Schedule(delay + nonOfdmaDuration +
                                 NanoSeconds(1), // just after beginning of portion
-                            &TestUlOfdmaPhyTransmission::CheckOfdmaRxPower,
+                            &TestUlOfdmaPhyTransmission<LatestPhyEntityType>::CheckOfdmaRxPower,
                             this,
                             m_phyAp,
                             ofdmaBand[i],
                             rxPowerOfdma[i]);
         Simulator::Schedule(delay + m_expectedPpduDuration -
                                 NanoSeconds(1), // just before end of portion
-                            &TestUlOfdmaPhyTransmission::CheckOfdmaRxPower,
+                            &TestUlOfdmaPhyTransmission<LatestPhyEntityType>::CheckOfdmaRxPower,
                             this,
                             m_phyAp,
                             ofdmaBand[i],
@@ -4040,13 +4404,13 @@
         Simulator::Schedule(
             delay + detectionDuration +
                 NanoSeconds(1), // just after beginning of portion (once event is stored)
-            &TestUlOfdmaPhyTransmission::CheckOfdmaRxPower,
+            &TestUlOfdmaPhyTransmission<LatestPhyEntityType>::CheckOfdmaRxPower,
             this,
             m_phySta3,
             nonOfdmaBand[i],
             rxPowerNonOfdma[i]);
         Simulator::Schedule(delay + nonOfdmaDuration - NanoSeconds(1), // just before end of portion
-                            &TestUlOfdmaPhyTransmission::CheckOfdmaRxPower,
+                            &TestUlOfdmaPhyTransmission<LatestPhyEntityType>::CheckOfdmaRxPower,
                             this,
                             m_phySta3,
                             nonOfdmaBand[i],
@@ -4054,14 +4418,14 @@
         // Check received power on OFDMA portion
         Simulator::Schedule(delay + nonOfdmaDuration +
                                 NanoSeconds(1), // just after beginning of portion
-                            &TestUlOfdmaPhyTransmission::CheckOfdmaRxPower,
+                            &TestUlOfdmaPhyTransmission<LatestPhyEntityType>::CheckOfdmaRxPower,
                             this,
                             m_phySta3,
                             ofdmaBand[i],
                             rxPowerOfdma[i]);
         Simulator::Schedule(delay + m_expectedPpduDuration -
                                 NanoSeconds(1), // just before end of portion
-                            &TestUlOfdmaPhyTransmission::CheckOfdmaRxPower,
+                            &TestUlOfdmaPhyTransmission<LatestPhyEntityType>::CheckOfdmaRxPower,
                             this,
                             m_phySta3,
                             ofdmaBand[i],
@@ -4083,13 +4447,13 @@
         Simulator::Schedule(
             delay + detectionDuration +
                 NanoSeconds(1), // just after beginning of portion (once event is stored)
-            &TestUlOfdmaPhyTransmission::CheckOfdmaRxPower,
+            &TestUlOfdmaPhyTransmission<LatestPhyEntityType>::CheckOfdmaRxPower,
             this,
             m_phySta2,
             nonOfdmaBand[0],
             rxPowerNonOfdmaSta1Only);
         Simulator::Schedule(delay + nonOfdmaDuration - NanoSeconds(1), // just before end of portion
-                            &TestUlOfdmaPhyTransmission::CheckOfdmaRxPower,
+                            &TestUlOfdmaPhyTransmission<LatestPhyEntityType>::CheckOfdmaRxPower,
                             this,
                             m_phySta2,
                             nonOfdmaBand[0],
@@ -4097,14 +4461,14 @@
         // Check received power on OFDMA portion
         Simulator::Schedule(delay + nonOfdmaDuration +
                                 NanoSeconds(1), // just after beginning of portion
-                            &TestUlOfdmaPhyTransmission::CheckOfdmaRxPower,
+                            &TestUlOfdmaPhyTransmission<LatestPhyEntityType>::CheckOfdmaRxPower,
                             this,
                             m_phySta2,
                             ofdmaBand[0],
                             rxPowerOfdma[0]);
         Simulator::Schedule(delay + m_expectedPpduDuration -
                                 NanoSeconds(1), // just before end of portion
-                            &TestUlOfdmaPhyTransmission::CheckOfdmaRxPower,
+                            &TestUlOfdmaPhyTransmission<LatestPhyEntityType>::CheckOfdmaRxPower,
                             this,
                             m_phySta2,
                             ofdmaBand[0],
@@ -4112,9 +4476,12 @@
     }
 }
 
+template <typename LatestPhyEntityType>
 void
-TestUlOfdmaPhyTransmission::RunOne()
+TestUlOfdmaPhyTransmission<LatestPhyEntityType>::RunOne()
 {
+    NS_LOG_DEBUG("Run UL OFDMA PHY transmission test for " << m_channelWidth << " MHz");
+
     RngSeedManager::SetSeed(1);
     RngSeedManager::SetRun(1);
     int64_t streamNumber = 0;
@@ -4123,24 +4490,24 @@
     m_phySta2->AssignStreams(streamNumber);
     m_phySta3->AssignStreams(streamNumber);
 
+    const auto standard =
+        (m_modClass == WIFI_MOD_CLASS_HE) ? WIFI_STANDARD_80211ax : WIFI_STANDARD_80211be;
     auto channelNum = WifiPhyOperatingChannel::FindFirst(0,
                                                          m_frequency,
                                                          m_channelWidth,
-                                                         WIFI_STANDARD_80211ax,
-                                                         WIFI_PHY_BAND_5GHZ)
+                                                         standard,
+                                                         WIFI_PHY_BAND_6GHZ)
                           ->number;
 
-    m_phyAp->SetOperatingChannel(
-        WifiPhy::ChannelTuple{channelNum, m_channelWidth, WIFI_PHY_BAND_5GHZ, 0});
-    m_phySta1->SetOperatingChannel(
-        WifiPhy::ChannelTuple{channelNum, m_channelWidth, WIFI_PHY_BAND_5GHZ, 0});
-    m_phySta2->SetOperatingChannel(
-        WifiPhy::ChannelTuple{channelNum, m_channelWidth, WIFI_PHY_BAND_5GHZ, 0});
-    m_phySta3->SetOperatingChannel(
-        WifiPhy::ChannelTuple{channelNum, m_channelWidth, WIFI_PHY_BAND_5GHZ, 0});
+    const auto operatingChannel{
+        WifiPhy::ChannelTuple{channelNum, m_channelWidth, WIFI_PHY_BAND_6GHZ, 0}};
+    m_phyAp->SetOperatingChannel(operatingChannel);
+    m_phySta1->SetOperatingChannel(operatingChannel);
+    m_phySta2->SetOperatingChannel(operatingChannel);
+    m_phySta3->SetOperatingChannel(operatingChannel);
 
     Time delay;
-    Simulator::Schedule(delay, &TestUlOfdmaPhyTransmission::Reset, this);
+    Simulator::Schedule(delay, &TestUlOfdmaPhyTransmission<LatestPhyEntityType>::Reset, this);
     delay += Seconds(1);
 
     /**
@@ -4154,7 +4521,7 @@
     //---------------------------------------------------------------------------
     // Verify that both solicited HE TB PPDUs have been corrected received
     Simulator::Schedule(delay,
-                        &TestUlOfdmaPhyTransmission::LogScenario,
+                        &TestUlOfdmaPhyTransmission<LatestPhyEntityType>::LogScenario,
                         this,
                         "Reception of solicited HE TB PPDUs");
     ScheduleTest(delay,
@@ -4173,7 +4540,7 @@
     // corrected received
     Simulator::Schedule(
         delay,
-        &TestUlOfdmaPhyTransmission::LogScenario,
+        &TestUlOfdmaPhyTransmission<LatestPhyEntityType>::LogScenario,
         this,
         "Reception of solicited HE TB PPDUs with delay (< 400ns) between the two signals");
     ScheduleTest(delay,
@@ -4192,7 +4559,7 @@
     //---------------------------------------------------------------------------
     // Verify that no unsolicited HE TB PPDU is received
     Simulator::Schedule(delay,
-                        &TestUlOfdmaPhyTransmission::LogScenario,
+                        &TestUlOfdmaPhyTransmission<LatestPhyEntityType>::LogScenario,
                         this,
                         "Dropping of unsolicited HE TB PPDUs");
     ScheduleTest(delay,
@@ -4212,7 +4579,7 @@
     //---------------------------------------------------------------------------
     // Verify that HE TB PPDUs with channel width differing from TRIGVECTOR are discarded
     Simulator::Schedule(delay,
-                        &TestUlOfdmaPhyTransmission::LogScenario,
+                        &TestUlOfdmaPhyTransmission<LatestPhyEntityType>::LogScenario,
                         this,
                         "Dropping of HE TB PPDUs with channel width differing from TRIGVECTOR");
     ScheduleTest(delay,
@@ -4233,7 +4600,7 @@
     //---------------------------------------------------------------------------
     // Verify that HE TB PPDUs with UL Length differing from TRIGVECTOR are discarded
     Simulator::Schedule(delay,
-                        &TestUlOfdmaPhyTransmission::LogScenario,
+                        &TestUlOfdmaPhyTransmission<LatestPhyEntityType>::LogScenario,
                         this,
                         "Dropping of HE TB PPDUs with UL Length differing from TRIGVECTOR");
     ScheduleTest(delay,
@@ -4254,7 +4621,7 @@
     //---------------------------------------------------------------------------
     // Verify that HE TB PPDUs with AIDs differing from TRIGVECTOR are discarded
     Simulator::Schedule(delay,
-                        &TestUlOfdmaPhyTransmission::LogScenario,
+                        &TestUlOfdmaPhyTransmission<LatestPhyEntityType>::LogScenario,
                         this,
                         "Dropping of HE TB PPDUs with AIDs differing from TRIGVECTOR");
     ScheduleTest(delay,
@@ -4277,7 +4644,7 @@
     // impacted
     Simulator::Schedule(
         delay,
-        &TestUlOfdmaPhyTransmission::LogScenario,
+        &TestUlOfdmaPhyTransmission<LatestPhyEntityType>::LogScenario,
         this,
         "Reception of solicited HE TB PPDUs with interference on RU 1 during PSDU reception");
     // A strong non-wifi interference is generated on RU 1 during PSDU reception
@@ -4293,8 +4660,8 @@
     Watt_u interferencePower{0.1};
     *interferencePsdRu1 = interferencePower / (MHzToHz(m_channelWidth / 2) * 20);
 
-    Simulator::Schedule(delay + MicroSeconds(50),
-                        &TestUlOfdmaPhyTransmission::GenerateInterference,
+    Simulator::Schedule(delay + MicroSeconds(40),
+                        &TestUlOfdmaPhyTransmission<LatestPhyEntityType>::GenerateInterference,
                         this,
                         interferencePsdRu1,
                         MilliSeconds(100));
@@ -4316,7 +4683,7 @@
     // impacted
     Simulator::Schedule(
         delay,
-        &TestUlOfdmaPhyTransmission::LogScenario,
+        &TestUlOfdmaPhyTransmission<LatestPhyEntityType>::LogScenario,
         this,
         "Reception of solicited HE TB PPDUs with interference on RU 2 during PSDU reception");
     // A strong non-wifi interference is generated on RU 2 during PSDU reception
@@ -4330,8 +4697,8 @@
     Ptr<SpectrumValue> interferencePsdRu2 = Create<SpectrumValue>(SpectrumInterferenceRu2);
     *interferencePsdRu2 = interferencePower / (MHzToHz(m_channelWidth / 2) * 20);
 
-    Simulator::Schedule(delay + MicroSeconds(50),
-                        &TestUlOfdmaPhyTransmission::GenerateInterference,
+    Simulator::Schedule(delay + MicroSeconds(40),
+                        &TestUlOfdmaPhyTransmission<LatestPhyEntityType>::GenerateInterference,
                         this,
                         interferencePsdRu2,
                         MilliSeconds(100));
@@ -4354,7 +4721,7 @@
     // Generate an interference on the full band and verify that both solicited HE TB PPDUs have
     // been impacted
     Simulator::Schedule(delay,
-                        &TestUlOfdmaPhyTransmission::LogScenario,
+                        &TestUlOfdmaPhyTransmission<LatestPhyEntityType>::LogScenario,
                         this,
                         "Reception of solicited HE TB PPDUs with interference on the full band "
                         "during PSDU reception");
@@ -4369,8 +4736,8 @@
     Ptr<SpectrumValue> interferencePsdAll = Create<SpectrumValue>(SpectrumInterferenceAll);
     *interferencePsdAll = interferencePower / (MHzToHz(m_channelWidth) * 20);
 
-    Simulator::Schedule(delay + MicroSeconds(50),
-                        &TestUlOfdmaPhyTransmission::GenerateInterference,
+    Simulator::Schedule(delay + MicroSeconds(40),
+                        &TestUlOfdmaPhyTransmission<LatestPhyEntityType>::GenerateInterference,
                         this,
                         interferencePsdAll,
                         MilliSeconds(100));
@@ -4393,13 +4760,13 @@
     // solicited HE TB PPDUs have been impacted if they are on the same
     // 20 MHz channel. Only STA 1's solicited HE TB PPDU is impacted otherwise.
     Simulator::Schedule(delay,
-                        &TestUlOfdmaPhyTransmission::LogScenario,
+                        &TestUlOfdmaPhyTransmission<LatestPhyEntityType>::LogScenario,
                         this,
                         "Reception of solicited HE TB PPDUs with another HE TB PPDU arriving on RU "
                         "1 during PSDU reception");
     // Another HE TB PPDU arrives at AP on the same RU as STA 1 during PSDU reception
-    Simulator::Schedule(delay + MicroSeconds(50),
-                        &TestUlOfdmaPhyTransmission::SendHeTbPpdu,
+    Simulator::Schedule(delay + MicroSeconds(40),
+                        &TestUlOfdmaPhyTransmission<LatestPhyEntityType>::SendTbPpdu,
                         this,
                         3,
                         1,
@@ -4445,13 +4812,13 @@
     // solicited HE TB PPDUs have been impacted if they are on the same
     // 20 MHz channel. Only STA 2's solicited HE TB PPDU is impacted otherwise.
     Simulator::Schedule(delay,
-                        &TestUlOfdmaPhyTransmission::LogScenario,
+                        &TestUlOfdmaPhyTransmission<LatestPhyEntityType>::LogScenario,
                         this,
                         "Reception of solicited HE TB PPDUs with another HE TB PPDU arriving on RU "
                         "2 during PSDU reception");
     // Another HE TB PPDU arrives at AP on the same RU as STA 2 during PSDU reception
-    Simulator::Schedule(delay + MicroSeconds(50),
-                        &TestUlOfdmaPhyTransmission::SendHeTbPpdu,
+    Simulator::Schedule(delay + MicroSeconds(40),
+                        &TestUlOfdmaPhyTransmission<LatestPhyEntityType>::SendTbPpdu,
                         this,
                         3,
                         2,
@@ -4496,12 +4863,12 @@
     // impacted
     Simulator::Schedule(
         delay,
-        &TestUlOfdmaPhyTransmission::LogScenario,
+        &TestUlOfdmaPhyTransmission<LatestPhyEntityType>::LogScenario,
         this,
         "Reception of solicited HE TB PPDUs with an HE SU PPDU arriving during the 400 ns window");
     // One HE SU arrives at AP during the 400ns window
     Simulator::Schedule(delay + NanoSeconds(300),
-                        &TestUlOfdmaPhyTransmission::SendHeSuPpdu,
+                        &TestUlOfdmaPhyTransmission<LatestPhyEntityType>::SendSuPpdu,
                         this,
                         3,
                         1002,
@@ -4523,13 +4890,13 @@
     // Only send a solicited HE TB PPDU from STA 2 on RU 2 and verify that it has been correctly
     // received
     Simulator::Schedule(delay,
-                        &TestUlOfdmaPhyTransmission::LogScenario,
+                        &TestUlOfdmaPhyTransmission<LatestPhyEntityType>::LogScenario,
                         this,
                         "Reception of solicited HE TB PPDU only on RU 2");
     // Check that STA3 will correctly set its state to CCA_BUSY if in measurement channel or IDLE
     // otherwise
     Simulator::Schedule(delay + m_expectedPpduDuration - NanoSeconds(1),
-                        &TestUlOfdmaPhyTransmission::CheckPhyState,
+                        &TestUlOfdmaPhyTransmission<LatestPhyEntityType>::CheckPhyState,
                         this,
                         m_phySta3,
                         (m_channelWidth >= MHz_u{40})
@@ -4553,7 +4920,7 @@
     //---------------------------------------------------------------------------
     // Measure the power of a solicited HE TB PPDU from STA 2 on RU 2
     Simulator::Schedule(delay,
-                        &TestUlOfdmaPhyTransmission::LogScenario,
+                        &TestUlOfdmaPhyTransmission<LatestPhyEntityType>::LogScenario,
                         this,
                         "Measure power for reception of HE TB PPDU only on RU 2");
     auto rxPower = DbmToW(
@@ -4582,13 +4949,13 @@
     // limitation enforced
     Simulator::Schedule(
         delay,
-        &TestUlOfdmaPhyTransmission::LogScenario,
+        &TestUlOfdmaPhyTransmission<LatestPhyEntityType>::LogScenario,
         this,
         "Measure power for reception of HE TB PPDU only on RU 2 with PSD limitation");
     // Configure PSD limitation at 3 dBm/MHz -> 3+13.0103=16.0103 dBm max for 20 MHz,
     // 3+9.0309=12.0309 dBm max for 106-tone RU, no impact for 40 MHz and above
     Simulator::Schedule(delay - NanoSeconds(1), // just before sending HE TB
-                        &TestUlOfdmaPhyTransmission::SetPsdLimit,
+                        &TestUlOfdmaPhyTransmission<LatestPhyEntityType>::SetPsdLimit,
                         this,
                         m_phySta2,
                         dBm_per_MHz_u{3});
@@ -4613,7 +4980,7 @@
 
     // Reset PSD limitation once HE TB has been sent
     Simulator::Schedule(delay + m_expectedPpduDuration,
-                        &TestUlOfdmaPhyTransmission::SetPsdLimit,
+                        &TestUlOfdmaPhyTransmission<LatestPhyEntityType>::SetPsdLimit,
                         this,
                         m_phySta2,
                         dBm_per_MHz_u{100});
@@ -4634,7 +5001,7 @@
     //---------------------------------------------------------------------------
     // Measure the power of 2 solicited HE TB PPDU from both STAs
     Simulator::Schedule(delay,
-                        &TestUlOfdmaPhyTransmission::LogScenario,
+                        &TestUlOfdmaPhyTransmission<LatestPhyEntityType>::LogScenario,
                         this,
                         "Measure power for reception of HE TB PPDU on both RUs");
     rxPower = DbmToW(
@@ -4659,13 +5026,17 @@
     // Verify that an HE TB PPDU from another BSS has been correctly received (no UL MU transmission
     // ongoing)
     Simulator::Schedule(delay,
-                        &TestUlOfdmaPhyTransmission::LogScenario,
+                        &TestUlOfdmaPhyTransmission<LatestPhyEntityType>::LogScenario,
                         this,
                         "Reception of an HE TB PPDU from another BSS");
     // One HE TB from another BSS (BSS color 2) arrives at AP (BSS color 1)
-    Simulator::Schedule(delay, &TestUlOfdmaPhyTransmission::SetBssColor, this, m_phyAp, 1);
+    Simulator::Schedule(delay,
+                        &TestUlOfdmaPhyTransmission<LatestPhyEntityType>::SetBssColor,
+                        this,
+                        m_phyAp,
+                        1);
     Simulator::Schedule(delay + MilliSeconds(100),
-                        &TestUlOfdmaPhyTransmission::SendHeTbPpdu,
+                        &TestUlOfdmaPhyTransmission<LatestPhyEntityType>::SendTbPpdu,
                         this,
                         3,
                         1,
@@ -4676,10 +5047,12 @@
 
     // Verify events data have been cleared
     Simulator::Schedule(delay + MilliSeconds(200),
-                        &TestUlOfdmaPhyTransmission::VerifyEventsCleared,
+                        &TestUlOfdmaPhyTransmission<LatestPhyEntityType>::VerifyEventsCleared,
                         this);
 
-    Simulator::Schedule(delay + MilliSeconds(500), &TestUlOfdmaPhyTransmission::Reset, this);
+    Simulator::Schedule(delay + MilliSeconds(500),
+                        &TestUlOfdmaPhyTransmission<LatestPhyEntityType>::Reset,
+                        this);
     delay += Seconds(1);
 
     //---------------------------------------------------------------------------
@@ -4687,13 +5060,17 @@
     // corrected received
     Simulator::Schedule(
         delay,
-        &TestUlOfdmaPhyTransmission::LogScenario,
+        &TestUlOfdmaPhyTransmission<LatestPhyEntityType>::LogScenario,
         this,
         "Reception of solicited HE TB PPDUs with delay (< 400ns) between the two signals and "
         "reception of an HE TB PPDU from another BSS between the ends of the two HE TB PPDUs");
-    Simulator::Schedule(delay, &TestUlOfdmaPhyTransmission::SetBssColor, this, m_phyAp, 1);
+    Simulator::Schedule(delay,
+                        &TestUlOfdmaPhyTransmission<LatestPhyEntityType>::SetBssColor,
+                        this,
+                        m_phyAp,
+                        1);
     Simulator::Schedule(delay + m_expectedPpduDuration + NanoSeconds(100),
-                        &TestUlOfdmaPhyTransmission::SendHeTbPpdu,
+                        &TestUlOfdmaPhyTransmission<LatestPhyEntityType>::SendTbPpdu,
                         this,
                         3,
                         1,
@@ -4717,33 +5094,38 @@
     Simulator::Run();
 }
 
+template <typename LatestPhyEntityType>
 void
-TestUlOfdmaPhyTransmission::DoRun()
+TestUlOfdmaPhyTransmission<LatestPhyEntityType>::DoRun()
 {
-    m_frequency = MHz_u{5180};
+    m_frequency = MHz_u{5955};
     m_channelWidth = MHz_u{20};
     m_expectedPpduDuration = NanoSeconds(292800);
-    NS_LOG_DEBUG("Run UL OFDMA PHY transmission test for " << m_channelWidth << " MHz");
     RunOne();
 
-    m_frequency = MHz_u{5190};
+    m_frequency = MHz_u{5965};
     m_channelWidth = MHz_u{40};
     m_expectedPpduDuration = NanoSeconds(163200);
-    NS_LOG_DEBUG("Run UL OFDMA PHY transmission test for " << m_channelWidth << " MHz");
     RunOne();
 
-    m_frequency = MHz_u{5210};
+    m_frequency = MHz_u{5985};
     m_channelWidth = MHz_u{80};
     m_expectedPpduDuration = NanoSeconds(105600);
-    NS_LOG_DEBUG("Run UL OFDMA PHY transmission test for " << m_channelWidth << " MHz");
     RunOne();
 
-    m_frequency = MHz_u{5250};
+    m_frequency = MHz_u{6025};
     m_channelWidth = MHz_u{160};
     m_expectedPpduDuration = NanoSeconds(76800);
-    NS_LOG_DEBUG("Run UL OFDMA PHY transmission test for " << m_channelWidth << " MHz");
     RunOne();
 
+    if (m_modClass >= WIFI_MOD_CLASS_EHT)
+    {
+        m_frequency = MHz_u{6105};
+        m_channelWidth = MHz_u{320};
+        m_expectedPpduDuration = NanoSeconds(62400);
+        RunOne();
+    }
+
     Simulator::Destroy();
 }
 
@@ -4771,10 +5153,7 @@
      * @param payloadSize the size of the payload in bytes
      * @param txDuration the duration of the PPDU
      */
-    void SendHeTbPpdu(uint16_t txStaId,
-                      std::size_t index,
-                      std::size_t payloadSize,
-                      Time txDuration);
+    void SendTbPpdu(uint16_t txStaId, std::size_t index, std::size_t payloadSize, Time txDuration);
     /**
      * Set TRIGVECTOR for HE TB PPDU
      *
@@ -4828,9 +5207,9 @@
      * @param phy the PHY
      * @param expectedState the expected state of the PHY
      */
-    void CheckPhyState(Ptr<OfdmaSpectrumWifiPhy> phy, WifiPhyState expectedState);
+    void CheckPhyState(Ptr<OfdmaSpectrumWifiPhy<HePhy>> phy, WifiPhyState expectedState);
     /// @copydoc CheckPhyState
-    void DoCheckPhyState(Ptr<OfdmaSpectrumWifiPhy> phy, WifiPhyState expectedState);
+    void DoCheckPhyState(Ptr<OfdmaSpectrumWifiPhy<HePhy>> phy, WifiPhyState expectedState);
 
     /**
      * Reset function
@@ -4855,9 +5234,9 @@
      */
     void RxFailure(Ptr<const WifiPsdu> psdu);
 
-    Ptr<OfdmaSpectrumWifiPhy> m_phyAp;   ///< PHY of AP
-    Ptr<OfdmaSpectrumWifiPhy> m_phySta1; ///< PHY of STA 1
-    Ptr<OfdmaSpectrumWifiPhy> m_phySta2; ///< PHY of STA 2
+    Ptr<OfdmaSpectrumWifiPhy<HePhy>> m_phyAp;   ///< PHY of AP
+    Ptr<OfdmaSpectrumWifiPhy<HePhy>> m_phySta1; ///< PHY of STA 1
+    Ptr<OfdmaSpectrumWifiPhy<HePhy>> m_phySta2; ///< PHY of STA 2
 
     Ptr<WaveformGenerator> m_phyInterferer; ///< PHY of interferer
 
@@ -4881,10 +5260,10 @@
 }
 
 void
-TestPhyPaddingExclusion::SendHeTbPpdu(uint16_t txStaId,
-                                      std::size_t index,
-                                      std::size_t payloadSize,
-                                      Time txDuration)
+TestPhyPaddingExclusion::SendTbPpdu(uint16_t txStaId,
+                                    std::size_t index,
+                                    std::size_t payloadSize,
+                                    Time txDuration)
 {
     WifiConstPsduMap psdus;
 
@@ -4900,7 +5279,7 @@
                           false,
                           true};
 
-    HeRu::RuSpec ru(HeRu::RU_106_TONE, index, false);
+    HeRu::RuSpec ru(RuType::RU_106_TONE, index, false);
     txVector.SetRu(ru, txStaId);
     txVector.SetMode(HePhy::GetHeMcs7(), txStaId);
     txVector.SetNss(1, txStaId);
@@ -4917,7 +5296,7 @@
     auto psdu = Create<WifiPsdu>(pkt, hdr);
     psdus.insert(std::make_pair(txStaId, psdu));
 
-    Ptr<OfdmaSpectrumWifiPhy> phy;
+    Ptr<OfdmaSpectrumWifiPhy<HePhy>> phy;
     if (txStaId == 1)
     {
         phy = m_phySta1;
@@ -4997,7 +5376,7 @@
     NS_TEST_ASSERT_MSG_EQ(
         m_countRxFailureFromSta1,
         expectedFailures,
-        "The number of unsuccessfuly received packets from STA 1 is not correct!");
+        "The number of unsuccessfully received packets from STA 1 is not correct!");
     NS_TEST_ASSERT_MSG_EQ(m_countRxBytesFromSta1,
                           expectedBytes,
                           "The number of bytes received from STA 1 is not correct!");
@@ -5014,7 +5393,7 @@
     NS_TEST_ASSERT_MSG_EQ(
         m_countRxFailureFromSta2,
         expectedFailures,
-        "The number of unsuccessfuly received packets from STA 2 is not correct!");
+        "The number of unsuccessfully received packets from STA 2 is not correct!");
     NS_TEST_ASSERT_MSG_EQ(m_countRxBytesFromSta2,
                           expectedBytes,
                           "The number of bytes received from STA 2 is not correct!");
@@ -5035,7 +5414,8 @@
 }
 
 void
-TestPhyPaddingExclusion::CheckPhyState(Ptr<OfdmaSpectrumWifiPhy> phy, WifiPhyState expectedState)
+TestPhyPaddingExclusion::CheckPhyState(Ptr<OfdmaSpectrumWifiPhy<HePhy>> phy,
+                                       WifiPhyState expectedState)
 {
     // This is needed to make sure PHY state will be checked as the last event if a state change
     // occurred at the exact same time as the check
@@ -5043,7 +5423,8 @@
 }
 
 void
-TestPhyPaddingExclusion::DoCheckPhyState(Ptr<OfdmaSpectrumWifiPhy> phy, WifiPhyState expectedState)
+TestPhyPaddingExclusion::DoCheckPhyState(Ptr<OfdmaSpectrumWifiPhy<HePhy>> phy,
+                                         WifiPhyState expectedState)
 {
     WifiPhyState currentState = phy->GetState()->GetState();
     NS_LOG_FUNCTION(this << currentState);
@@ -5089,7 +5470,7 @@
         PointerValue(CreateObjectWithAttributes<Txop>("AcIndex", StringValue("AC_BE_NQOS"))));
     apMac->SetAttribute("BeaconGeneration", BooleanValue(false));
     apDev->SetMac(apMac);
-    m_phyAp = CreateObject<OfdmaSpectrumWifiPhy>(0);
+    m_phyAp = CreateObject<OfdmaSpectrumWifiPhy<HePhy>>(0);
     Ptr<HeConfiguration> heConfiguration = CreateObject<HeConfiguration>();
     apDev->SetHeConfiguration(heConfiguration);
     Ptr<InterferenceHelper> apInterferenceHelper = CreateObject<InterferenceHelper>();
@@ -5122,7 +5503,7 @@
 
     Ptr<Node> sta1Node = CreateObject<Node>();
     Ptr<WifiNetDevice> sta1Dev = CreateObject<WifiNetDevice>();
-    m_phySta1 = CreateObject<OfdmaSpectrumWifiPhy>(1);
+    m_phySta1 = CreateObject<OfdmaSpectrumWifiPhy<HePhy>>(1);
     Ptr<InterferenceHelper> sta1InterferenceHelper = CreateObject<InterferenceHelper>();
     m_phySta1->SetInterferenceHelper(sta1InterferenceHelper);
     Ptr<ErrorRateModel> sta1ErrorModel = CreateObject<NistErrorRateModel>();
@@ -5143,7 +5524,7 @@
 
     Ptr<Node> sta2Node = CreateObject<Node>();
     Ptr<WifiNetDevice> sta2Dev = CreateObject<WifiNetDevice>();
-    m_phySta2 = CreateObject<OfdmaSpectrumWifiPhy>(2);
+    m_phySta2 = CreateObject<OfdmaSpectrumWifiPhy<HePhy>>(2);
     Ptr<InterferenceHelper> sta2InterferenceHelper = CreateObject<InterferenceHelper>();
     m_phySta2->SetInterferenceHelper(sta2InterferenceHelper);
     Ptr<ErrorRateModel> sta2ErrorModel = CreateObject<NistErrorRateModel>();
@@ -5198,10 +5579,10 @@
                             false,
                             false,
                             true};
-    trigVector.SetRu(HeRu::RuSpec(HeRu::RU_106_TONE, 1, false), 1);
+    trigVector.SetRu(HeRu::RuSpec(RuType::RU_106_TONE, 1, false), 1);
     trigVector.SetMode(HePhy::GetHeMcs7(), 1);
     trigVector.SetNss(1, 1);
-    trigVector.SetRu(HeRu::RuSpec(HeRu::RU_106_TONE, 2, false), 2);
+    trigVector.SetRu(HeRu::RuSpec(RuType::RU_106_TONE, 2, false), 2);
     trigVector.SetMode(HePhy::GetHeMcs7(), 2);
     trigVector.SetNss(1, 2);
     uint16_t length;
@@ -5223,14 +5604,14 @@
 
     // STA1 and STA2 send MU UL PPDUs addressed to AP:
     Simulator::Schedule(Seconds(1),
-                        &TestPhyPaddingExclusion::SendHeTbPpdu,
+                        &TestPhyPaddingExclusion::SendTbPpdu,
                         this,
                         1,
                         1,
                         1000,
                         ppduWithPaddingDuration);
     Simulator::Schedule(Seconds(1),
-                        &TestPhyPaddingExclusion::SendHeTbPpdu,
+                        &TestPhyPaddingExclusion::SendTbPpdu,
                         this,
                         2,
                         2,
@@ -5266,14 +5647,14 @@
 
     // STA1 and STA2 send MU UL PPDUs addressed to AP:
     Simulator::Schedule(Seconds(2),
-                        &TestPhyPaddingExclusion::SendHeTbPpdu,
+                        &TestPhyPaddingExclusion::SendTbPpdu,
                         this,
                         1,
                         1,
                         1000,
                         ppduWithPaddingDuration);
     Simulator::Schedule(Seconds(2),
-                        &TestPhyPaddingExclusion::SendHeTbPpdu,
+                        &TestPhyPaddingExclusion::SendTbPpdu,
                         this,
                         2,
                         2,
@@ -5461,14 +5842,14 @@
     muBar.SetApTxPower(static_cast<int8_t>(m_txPowerAp));
     muBar.SetUlSpatialReuse(60500);
 
-    HeRu::RuType ru = (staIds.size() == 1) ? HeRu::RU_242_TONE : HeRu::RU_106_TONE;
+    RuType ru = (staIds.size() == 1) ? RuType::RU_242_TONE : RuType::RU_106_TONE;
     std::size_t index = 1;
     int8_t ulTargetRssi = -40; // will be overwritten
     for (const auto& staId : staIds)
     {
         CtrlTriggerUserInfoField& ui = muBar.AddUserInfoField();
         ui.SetAid12(staId);
-        ui.SetRuAllocation({ru, index, true});
+        ui.SetRuAllocation(HeRu::RuSpec{ru, index, true});
         ui.SetUlFecCodingType(true);
         ui.SetUlMcs(7);
         ui.SetUlDcm(false);
@@ -5646,7 +6027,7 @@
                 TimeValue(MicroSeconds(1024 * 600)));
     m_apDev = DynamicCast<WifiNetDevice>(wifi.Install(spectrumPhy, mac, apNode).Get(0));
     NS_ASSERT(m_apDev);
-    m_apDev->GetHeConfiguration()->SetAttribute("BssColor", UintegerValue(m_bssColor));
+    m_apDev->GetHeConfiguration()->m_bssColor = m_bssColor;
     m_phyAp = DynamicCast<SpectrumWifiPhy>(m_apDev->GetPhy());
     NS_ASSERT(m_phyAp);
     // ReceiveOkCallback of AP will be set to corresponding test's method once BA sessions have been
@@ -5853,11 +6234,13 @@
 WifiPhyOfdmaTestSuite::WifiPhyOfdmaTestSuite()
     : TestSuite("wifi-phy-ofdma", Type::UNIT)
 {
-    AddTestCase(new TestDlOfdmaPhyTransmission, TestCase::Duration::QUICK);
+    AddTestCase(new TestDlOfdmaPhyTransmission<HePhy>(), TestCase::Duration::QUICK);
+    AddTestCase(new TestDlOfdmaPhyTransmission<EhtPhy>(), TestCase::Duration::QUICK);
     AddTestCase(new TestDlOfdmaPhyPuncturing, TestCase::Duration::QUICK);
     AddTestCase(new TestUlOfdmaPpduUid, TestCase::Duration::QUICK);
     AddTestCase(new TestMultipleHeTbPreambles, TestCase::Duration::QUICK);
-    AddTestCase(new TestUlOfdmaPhyTransmission, TestCase::Duration::QUICK);
+    AddTestCase(new TestUlOfdmaPhyTransmission<HePhy>(), TestCase::Duration::QUICK);
+    AddTestCase(new TestUlOfdmaPhyTransmission<EhtPhy>(), TestCase::Duration::QUICK);
     AddTestCase(new TestPhyPaddingExclusion, TestCase::Duration::QUICK);
     AddTestCase(new TestUlOfdmaPowerControl, TestCase::Duration::QUICK);
 }
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/test/wifi-primary-channels-test.cc ns-3.45/src/wifi/test/wifi-primary-channels-test.cc
--- ns-3.44/src/wifi/test/wifi-primary-channels-test.cc	2025-03-09 16:55:49.811372800 -0700
+++ ns-3.45/src/wifi/test/wifi-primary-channels-test.cc	2025-06-01 20:34:45.642702300 -0700
@@ -11,9 +11,9 @@
 #include "ns3/boolean.h"
 #include "ns3/config.h"
 #include "ns3/ctrl-headers.h"
+#include "ns3/eht-phy.h"
 #include "ns3/enum.h"
 #include "ns3/he-configuration.h"
-#include "ns3/he-phy.h"
 #include "ns3/mobility-helper.h"
 #include "ns3/multi-model-spectrum-channel.h"
 #include "ns3/rng-seed-manager.h"
@@ -54,11 +54,11 @@
     /**
      * Constructor
      *
+     * @param standard the standard
      * @param channelWidth the operating channel width
      * @param useDistinctBssColors whether to set distinct BSS colors to BSSes
      */
-    WifiPrimaryChannelsTest(MHz_u channelWidth, bool useDistinctBssColors);
-    ~WifiPrimaryChannelsTest() override;
+    WifiPrimaryChannelsTest(WifiStandard standard, MHz_u channelWidth, bool useDistinctBssColors);
 
     /**
      * Callback invoked when PHY receives a PSDU to transmit. Used to print
@@ -90,7 +90,7 @@
      * @param ruType the given RU type
      * @param nRus the number of RUs
      */
-    void SendDlMuPpdu(uint8_t bss, MHz_u txChannelWidth, HeRu::RuType ruType, std::size_t nRus);
+    void SendDlMuPpdu(uint8_t bss, MHz_u txChannelWidth, RuType ruType, std::size_t nRus);
     /**
      * Have the AP of the given BSS transmit a Basic Trigger Frame. This method calls
      * DoSendHeTbPpdu to actually have STAs transmit HE TB PPDUs using the given
@@ -101,7 +101,7 @@
      * @param ruType the given RU type
      * @param nRus the number of RUs
      */
-    void SendHeTbPpdu(uint8_t bss, MHz_u txChannelWidth, HeRu::RuType ruType, std::size_t nRus);
+    void SendHeTbPpdu(uint8_t bss, MHz_u txChannelWidth, RuType ruType, std::size_t nRus);
     /**
      * Have the STAs of the given BSS transmit an HE TB PPDU using the given
      * transmission channel width and RU type
@@ -111,7 +111,7 @@
      * @param ruType the given RU type
      * @param nRus the number of RUs
      */
-    void DoSendHeTbPpdu(uint8_t bss, MHz_u txChannelWidth, HeRu::RuType ruType, std::size_t nRus);
+    void DoSendHeTbPpdu(uint8_t bss, MHz_u txChannelWidth, RuType ruType, std::size_t nRus);
     /**
      * Callback invoked when a station receives a DL PPDU.
      *
@@ -172,7 +172,7 @@
      */
     void CheckReceivedMuPpdus(std::set<uint8_t> txBss,
                               MHz_u txChannelWidth,
-                              HeRu::RuType ruType,
+                              RuType ruType,
                               std::size_t nRus,
                               bool isDlMu);
     /**
@@ -190,6 +190,7 @@
     void DoSetup() override;
     void DoRun() override;
 
+    WifiStandard m_standard;                      ///< standard
     MHz_u m_channelWidth;                         ///< operating channel width
     bool m_useDistinctBssColors;                  ///< true to set distinct BSS colors to BSSes
     uint8_t m_nBss;                               ///< number of BSSes
@@ -206,17 +207,16 @@
     Time m_triggerTxDuration;                 ///< TX duration for Basic Trigger Frame
 };
 
-WifiPrimaryChannelsTest::WifiPrimaryChannelsTest(MHz_u channelWidth, bool useDistinctBssColors)
+WifiPrimaryChannelsTest::WifiPrimaryChannelsTest(WifiStandard standard,
+                                                 MHz_u channelWidth,
+                                                 bool useDistinctBssColors)
     : TestCase("Check correct transmissions for various primary channel settings"),
+      m_standard(standard),
       m_channelWidth(channelWidth),
       m_useDistinctBssColors(useDistinctBssColors)
 {
 }
 
-WifiPrimaryChannelsTest::~WifiPrimaryChannelsTest()
-{
-}
-
 void
 WifiPrimaryChannelsTest::Transmit(std::string context,
                                   WifiConstPsduMap psduMap,
@@ -324,19 +324,23 @@
     {
     case 20:
         m_nStationsPerBss = 9;
-        channelNum = 36;
+        channelNum = 1;
         break;
     case 40:
         m_nStationsPerBss = 18;
-        channelNum = 38;
+        channelNum = 3;
         break;
     case 80:
-        m_nStationsPerBss = 37;
-        channelNum = 42;
+        m_nStationsPerBss = (m_standard == WIFI_STANDARD_80211ax) ? 37 : 36;
+        channelNum = 7;
         break;
     case 160:
-        m_nStationsPerBss = 74;
-        channelNum = 50;
+        m_nStationsPerBss = (m_standard == WIFI_STANDARD_80211ax) ? 74 : 72;
+        channelNum = 15;
+        break;
+    case 320:
+        m_nStationsPerBss = 144;
+        channelNum = 31;
         break;
     default:
         NS_ABORT_MSG("Channel width (" << m_channelWidth << ") not allowed");
@@ -365,7 +369,7 @@
     phy.SetChannel(spectrumChannel);
 
     WifiHelper wifi;
-    wifi.SetStandard(WIFI_STANDARD_80211ax);
+    wifi.SetStandard(m_standard);
     wifi.SetRemoteStationManager("ns3::ConstantRateWifiManager");
 
     WifiMacHelper mac;
@@ -386,7 +390,7 @@
     for (uint8_t bss = 0; bss < m_nBss; bss++)
     {
         channelValue.Set(
-            WifiPhy::ChannelSegments{{channelNum, m_channelWidth, WIFI_PHY_BAND_5GHZ, bss}});
+            WifiPhy::ChannelSegments{{channelNum, m_channelWidth, WIFI_PHY_BAND_6GHZ, bss}});
         phy.Set("ChannelSettings", channelValue);
 
         m_staDevices.push_back(wifi.Install(phy, mac, wifiStaNodes[bss]));
@@ -395,7 +399,7 @@
     for (uint8_t bss = 0; bss < m_nBss; bss++)
     {
         channelValue.Set(
-            WifiPhy::ChannelSegments{{channelNum, m_channelWidth, WIFI_PHY_BAND_5GHZ, bss}});
+            WifiPhy::ChannelSegments{{channelNum, m_channelWidth, WIFI_PHY_BAND_6GHZ, bss}});
         phy.Set("ChannelSettings", channelValue);
 
         mac.SetType("ns3::ApWifiMac",
@@ -655,9 +659,11 @@
 
         for (uint16_t round = 0; round < nRounds; round++)
         {
-            for (unsigned int type = 0; type < 7; type++)
+            for (uint32_t type = 0; type < static_cast<uint32_t>(WifiRu::GetMaxRuType(
+                                               GetModulationClassForStandard(m_standard)));
+                 ++type)
             {
-                auto ruType = static_cast<HeRu::RuType>(type);
+                auto ruType = static_cast<RuType>(type);
                 std::size_t nRus = HeRu::GetNRus(txChannelWidth, ruType);
                 std::set<uint8_t> txBss;
                 if (nRus > 0)
@@ -704,9 +710,11 @@
 
         for (uint16_t round = 0; round < nRounds; round++)
         {
-            for (unsigned int type = 0; type < 7; type++)
+            for (uint32_t type = 0; type < static_cast<uint32_t>(WifiRu::GetMaxRuType(
+                                               GetModulationClassForStandard(m_standard)));
+                 ++type)
             {
-                auto ruType = static_cast<HeRu::RuType>(type);
+                auto ruType = static_cast<RuType>(type);
                 std::size_t nRus = HeRu::GetNRus(txChannelWidth, ruType);
                 std::set<uint8_t> txBss;
                 if (nRus > 0)
@@ -763,18 +771,19 @@
     auto staDev = DynamicCast<WifiNetDevice>(m_staDevices[bss].Get(0));
 
     uint8_t bssColor = apDev->GetHeConfiguration()->m_bssColor;
-    WifiTxVector txVector = WifiTxVector(HePhy::GetHeMcs8(),
-                                         0,
-                                         WIFI_PREAMBLE_HE_SU,
-                                         NanoSeconds(800),
-                                         1,
-                                         1,
-                                         0,
-                                         txChannelWidth,
-                                         false,
-                                         false,
-                                         false,
-                                         bssColor);
+    auto txVector = WifiTxVector(
+        (m_standard == WIFI_STANDARD_80211ax) ? HePhy::GetHeMcs8() : EhtPhy::GetEhtMcs8(),
+        0,
+        (m_standard == WIFI_STANDARD_80211ax) ? WIFI_PREAMBLE_HE_SU : WIFI_PREAMBLE_EHT_MU,
+        NanoSeconds(800),
+        1,
+        1,
+        0,
+        txChannelWidth,
+        false,
+        false,
+        false,
+        bssColor);
     WifiMacHeader hdr;
     hdr.SetType(WIFI_MAC_QOSDATA);
     hdr.SetQosTid(0);
@@ -789,7 +798,7 @@
 void
 WifiPrimaryChannelsTest::SendDlMuPpdu(uint8_t bss,
                                       MHz_u txChannelWidth,
-                                      HeRu::RuType ruType,
+                                      RuType ruType,
                                       std::size_t nRus)
 {
     NS_LOG_INFO("*** BSS " << +bss << " transmits on primary " << txChannelWidth
@@ -799,18 +808,23 @@
     auto apDev = DynamicCast<WifiNetDevice>(m_apDevices.Get(bss));
     uint8_t bssColor = apDev->GetHeConfiguration()->m_bssColor;
 
-    WifiTxVector txVector = WifiTxVector(HePhy::GetHeMcs8(),
-                                         0,
-                                         WIFI_PREAMBLE_HE_MU,
-                                         NanoSeconds(800),
-                                         1,
-                                         1,
-                                         0,
-                                         txChannelWidth,
-                                         false,
-                                         false,
-                                         false,
-                                         bssColor);
+    auto txVector = WifiTxVector(
+        (m_standard == WIFI_STANDARD_80211ax) ? HePhy::GetHeMcs8() : EhtPhy::GetEhtMcs8(),
+        0,
+        (m_standard == WIFI_STANDARD_80211ax) ? WIFI_PREAMBLE_HE_MU : WIFI_PREAMBLE_EHT_MU,
+        NanoSeconds(800),
+        1,
+        1,
+        0,
+        txChannelWidth,
+        false,
+        false,
+        false,
+        bssColor);
+    if (m_standard == WIFI_STANDARD_80211be)
+    {
+        txVector.SetEhtPpduType(0);
+    }
     WifiMacHeader hdr;
     hdr.SetType(WIFI_MAC_QOSDATA);
     hdr.SetQosTid(0);
@@ -822,23 +836,43 @@
 
     for (std::size_t i = 1; i <= nRus; i++)
     {
-        bool primary80 = !(txChannelWidth == MHz_u{160} && i > nRus / 2);
-        std::size_t index = (primary80 ? i : i - nRus / 2);
+        auto primary80OrLow80{true};
+        auto primary160{true};
+        auto index{i};
+        if (txChannelWidth > MHz_u{80})
+        {
+            if (m_standard == WIFI_STANDARD_80211ax)
+            {
+                index = HeRu::GetIndexIn80MHzSegment(txChannelWidth, ruType, i);
+                primary80OrLow80 = HeRu::GetPrimary80MHzFlag(txChannelWidth,
+                                                             ruType,
+                                                             i,
+                                                             apDev->GetPhy()->GetPrimary20Index());
+            }
+            else
+            {
+                index = EhtRu::GetIndexIn80MHzSegment(txChannelWidth, ruType, i);
+                const auto& [p160, p80OrLow80] =
+                    EhtRu::GetPrimaryFlags(txChannelWidth,
+                                           ruType,
+                                           i,
+                                           apDev->GetPhy()->GetPrimary20Index());
+                primary160 = p160;
+                primary80OrLow80 = p80OrLow80;
+            }
+        }
+        const auto ru =
+            (m_standard == WIFI_STANDARD_80211ax)
+                ? WifiRu::RuSpec(HeRu::RuSpec{ruType, index, primary80OrLow80})
+                : WifiRu::RuSpec(EhtRu::RuSpec{ruType, index, primary160, primary80OrLow80});
 
         auto staDev = DynamicCast<WifiNetDevice>(m_staDevices[bss].Get(i - 1));
         uint16_t staId = DynamicCast<StaWifiMac>(staDev->GetMac())->GetAssociationId();
-        txVector.SetHeMuUserInfo(staId, {{ruType, index, primary80}, 8, 1});
+        txVector.SetHeMuUserInfo(staId, {ru, 8, 1});
         hdr.SetAddr1(staDev->GetMac()->GetAddress());
         psduMap[staId] = Create<const WifiPsdu>(Create<Packet>(1000), hdr);
     }
     txVector.SetSigBMode(VhtPhy::GetVhtMcs5());
-    RuAllocation ruAllocations;
-    const auto numRuAllocs = Count20MHzSubchannels(txChannelWidth);
-    ruAllocations.resize(numRuAllocs);
-    auto IsOddNum = (nRus / numRuAllocs) % 2 == 1;
-    auto ruAlloc = HeRu::GetEqualizedRuAllocation(ruType, IsOddNum);
-    std::fill_n(ruAllocations.begin(), numRuAllocs, ruAlloc);
-    txVector.SetRuAllocation(ruAllocations, 0);
 
     apDev->GetPhy()->Send(psduMap, txVector);
 }
@@ -846,7 +880,7 @@
 void
 WifiPrimaryChannelsTest::SendHeTbPpdu(uint8_t bss,
                                       MHz_u txChannelWidth,
-                                      HeRu::RuType ruType,
+                                      RuType ruType,
                                       std::size_t nRus)
 {
     NS_LOG_INFO("*** BSS " << +bss << " transmits a Basic Trigger Frame");
@@ -870,7 +904,7 @@
 void
 WifiPrimaryChannelsTest::DoSendHeTbPpdu(uint8_t bss,
                                         MHz_u txChannelWidth,
-                                        HeRu::RuType ruType,
+                                        RuType ruType,
                                         std::size_t nRus)
 {
     auto apDev = DynamicCast<WifiNetDevice>(m_apDevices.Get(bss));
@@ -885,18 +919,19 @@
 
     Time duration;
     uint16_t length = 0;
-    WifiTxVector trigVector(HePhy::GetHeMcs8(),
-                            0,
-                            WIFI_PREAMBLE_HE_TB,
-                            NanoSeconds(3200),
-                            1,
-                            1,
-                            0,
-                            txChannelWidth,
-                            false,
-                            false,
-                            false,
-                            bssColor);
+    WifiTxVector trigVector(
+        (m_standard == WIFI_STANDARD_80211ax) ? HePhy::GetHeMcs8() : EhtPhy::GetEhtMcs8(),
+        0,
+        (m_standard == WIFI_STANDARD_80211ax) ? WIFI_PREAMBLE_HE_TB : WIFI_PREAMBLE_EHT_TB,
+        NanoSeconds(3200),
+        1,
+        1,
+        0,
+        txChannelWidth,
+        false,
+        false,
+        false,
+        bssColor);
 
     for (std::size_t i = 1; i <= nRus; i++)
     {
@@ -904,26 +939,54 @@
                                << txChannelWidth
                                << " MHz channel an HE TB PPDU (RU type: " << ruType << ")");
 
-        bool primary80 = !(txChannelWidth == MHz_u{160} && i > nRus / 2);
-        std::size_t index = (primary80 ? i : i - nRus / 2);
+        auto primary80OrLow80{true};
+        auto primary160{true};
+        auto index{i};
+        if (txChannelWidth > MHz_u{80})
+        {
+            if (m_standard == WIFI_STANDARD_80211ax)
+            {
+                index = HeRu::GetIndexIn80MHzSegment(txChannelWidth, ruType, i);
+                primary80OrLow80 = HeRu::GetPrimary80MHzFlag(txChannelWidth,
+                                                             ruType,
+                                                             i,
+                                                             apDev->GetPhy()->GetPrimary20Index());
+            }
+            else
+            {
+                index = EhtRu::GetIndexIn80MHzSegment(txChannelWidth, ruType, i);
+                const auto& [p160, p80OrLow80] =
+                    EhtRu::GetPrimaryFlags(txChannelWidth,
+                                           ruType,
+                                           i,
+                                           apDev->GetPhy()->GetPrimary20Index());
+                primary160 = p160;
+                primary80OrLow80 = p80OrLow80;
+            }
+        }
+        const auto ru =
+            (m_standard == WIFI_STANDARD_80211ax)
+                ? WifiRu::RuSpec(HeRu::RuSpec{ruType, index, primary80OrLow80})
+                : WifiRu::RuSpec(EhtRu::RuSpec{ruType, index, primary160, primary80OrLow80});
 
         auto staDev = DynamicCast<WifiNetDevice>(m_staDevices[bss].Get(i - 1));
         uint16_t staId = DynamicCast<StaWifiMac>(staDev->GetMac())->GetAssociationId();
 
-        WifiTxVector txVector(HePhy::GetHeMcs8(),
-                              0,
-                              WIFI_PREAMBLE_HE_TB,
-                              NanoSeconds(3200),
-                              1,
-                              1,
-                              0,
-                              txChannelWidth,
-                              false,
-                              false,
-                              false,
-                              bssColor);
-        txVector.SetHeMuUserInfo(staId, {{ruType, index, primary80}, 8, 1});
-        trigVector.SetHeMuUserInfo(staId, {{ruType, index, primary80}, 8, 1});
+        WifiTxVector txVector(
+            (m_standard == WIFI_STANDARD_80211ax) ? HePhy::GetHeMcs8() : EhtPhy::GetEhtMcs8(),
+            0,
+            (m_standard == WIFI_STANDARD_80211ax) ? WIFI_PREAMBLE_HE_TB : WIFI_PREAMBLE_EHT_TB,
+            NanoSeconds(3200),
+            1,
+            1,
+            0,
+            txChannelWidth,
+            false,
+            false,
+            false,
+            bssColor);
+        txVector.SetHeMuUserInfo(staId, {ru, 8, 1});
+        trigVector.SetHeMuUserInfo(staId, {ru, 8, 1});
 
         hdr.SetAddr2(staDev->GetMac()->GetAddress());
         Ptr<const WifiPsdu> psdu = Create<const WifiPsdu>(Create<Packet>(1000), hdr);
@@ -1045,7 +1108,7 @@
 void
 WifiPrimaryChannelsTest::CheckReceivedMuPpdus(std::set<uint8_t> txBss,
                                               MHz_u txChannelWidth,
-                                              HeRu::RuType ruType,
+                                              RuType ruType,
                                               std::size_t nRus,
                                               bool isDlMu)
 {
@@ -1237,13 +1300,17 @@
      * @param secondary40 the expected indices of the 20 MHz channels in the secondary40 channel
      * @param primary80 the expected indices of the 20 MHz channels in the primary80 channel
      * @param secondary80 the expected indices of the 20 MHz channels in the secondary80 channel
+     * @param primary160 the expected indices of the 20 MHz channels in the primary160 channel
+     * @param secondary160 the expected indices of the 20 MHz channels in the secondary160 channel
      */
     void RunOne(uint8_t primary20,
                 const std::set<uint8_t>& secondary20,
                 const std::set<uint8_t>& primary40,
                 const std::set<uint8_t>& secondary40,
                 const std::set<uint8_t>& primary80,
-                const std::set<uint8_t>& secondary80);
+                const std::set<uint8_t>& secondary80,
+                const std::set<uint8_t>& primary160,
+                const std::set<uint8_t>& secondary160);
 
   private:
     void DoRun() override;
@@ -1262,7 +1329,9 @@
                                     const std::set<uint8_t>& primary40,
                                     const std::set<uint8_t>& secondary40,
                                     const std::set<uint8_t>& primary80,
-                                    const std::set<uint8_t>& secondary80)
+                                    const std::set<uint8_t>& secondary80,
+                                    const std::set<uint8_t>& primary160,
+                                    const std::set<uint8_t>& secondary160)
 {
     auto printToStr = [](const std::set<uint8_t>& s) {
         std::stringstream ss;
@@ -1316,37 +1385,182 @@
                           "Expected Secondary80 " << printToStr(secondary80)
                                                   << " differs from actual "
                                                   << printToStr(actualSecondary80));
+
+    auto actualPrimary160 = m_channel.GetAll20MHzChannelIndicesInPrimary(MHz_u{160});
+    NS_TEST_ASSERT_MSG_EQ((actualPrimary160 == primary160),
+                          true,
+                          "Expected Primary160 " << printToStr(primary160)
+                                                 << " differs from actual "
+                                                 << printToStr(actualPrimary160));
+
+    auto actualSecondary160 = m_channel.GetAll20MHzChannelIndicesInSecondary(primary160);
+    NS_TEST_ASSERT_MSG_EQ((actualSecondary160 == secondary160),
+                          true,
+                          "Expected Secondary160 " << printToStr(secondary160)
+                                                   << " differs from actual "
+                                                   << printToStr(actualSecondary160));
 }
 
 void
 Wifi20MHzChannelIndicesTest::DoRun()
 {
     /* 20 MHz channel */
-    m_channel.SetDefault(MHz_u{20}, WIFI_STANDARD_80211ax, WIFI_PHY_BAND_5GHZ);
-    RunOne(0, {}, {}, {}, {}, {});
+    m_channel.SetDefault(MHz_u{20}, WIFI_STANDARD_80211be, WIFI_PHY_BAND_6GHZ);
+    RunOne(0, {}, {}, {}, {}, {}, {}, {});
 
     /* 40 MHz channel */
-    m_channel.SetDefault(MHz_u{40}, WIFI_STANDARD_80211ax, WIFI_PHY_BAND_5GHZ);
-    RunOne(0, {1}, {0, 1}, {}, {}, {});
-    RunOne(1, {0}, {0, 1}, {}, {}, {});
+    m_channel.SetDefault(MHz_u{40}, WIFI_STANDARD_80211be, WIFI_PHY_BAND_6GHZ);
+    RunOne(0, {1}, {0, 1}, {}, {}, {}, {}, {});
+    RunOne(1, {0}, {0, 1}, {}, {}, {}, {}, {});
 
     /* 80 MHz channel */
-    m_channel.SetDefault(MHz_u{80}, WIFI_STANDARD_80211ax, WIFI_PHY_BAND_5GHZ);
-    RunOne(0, {1}, {0, 1}, {2, 3}, {0, 1, 2, 3}, {});
-    RunOne(1, {0}, {0, 1}, {2, 3}, {0, 1, 2, 3}, {});
-    RunOne(2, {3}, {2, 3}, {0, 1}, {0, 1, 2, 3}, {});
-    RunOne(3, {2}, {2, 3}, {0, 1}, {0, 1, 2, 3}, {});
+    m_channel.SetDefault(MHz_u{80}, WIFI_STANDARD_80211be, WIFI_PHY_BAND_6GHZ);
+    RunOne(0, {1}, {0, 1}, {2, 3}, {0, 1, 2, 3}, {}, {}, {});
+    RunOne(1, {0}, {0, 1}, {2, 3}, {0, 1, 2, 3}, {}, {}, {});
+    RunOne(2, {3}, {2, 3}, {0, 1}, {0, 1, 2, 3}, {}, {}, {});
+    RunOne(3, {2}, {2, 3}, {0, 1}, {0, 1, 2, 3}, {}, {}, {});
 
     /* 160 MHz channel */
-    m_channel.SetDefault(MHz_u{160}, WIFI_STANDARD_80211ax, WIFI_PHY_BAND_5GHZ);
-    RunOne(0, {1}, {0, 1}, {2, 3}, {0, 1, 2, 3}, {4, 5, 6, 7});
-    RunOne(1, {0}, {0, 1}, {2, 3}, {0, 1, 2, 3}, {4, 5, 6, 7});
-    RunOne(2, {3}, {2, 3}, {0, 1}, {0, 1, 2, 3}, {4, 5, 6, 7});
-    RunOne(3, {2}, {2, 3}, {0, 1}, {0, 1, 2, 3}, {4, 5, 6, 7});
-    RunOne(4, {5}, {4, 5}, {6, 7}, {4, 5, 6, 7}, {0, 1, 2, 3});
-    RunOne(5, {4}, {4, 5}, {6, 7}, {4, 5, 6, 7}, {0, 1, 2, 3});
-    RunOne(6, {7}, {6, 7}, {4, 5}, {4, 5, 6, 7}, {0, 1, 2, 3});
-    RunOne(7, {6}, {6, 7}, {4, 5}, {4, 5, 6, 7}, {0, 1, 2, 3});
+    m_channel.SetDefault(MHz_u{160}, WIFI_STANDARD_80211be, WIFI_PHY_BAND_6GHZ);
+    RunOne(0, {1}, {0, 1}, {2, 3}, {0, 1, 2, 3}, {4, 5, 6, 7}, {0, 1, 2, 3, 4, 5, 6, 7}, {});
+    RunOne(1, {0}, {0, 1}, {2, 3}, {0, 1, 2, 3}, {4, 5, 6, 7}, {0, 1, 2, 3, 4, 5, 6, 7}, {});
+    RunOne(2, {3}, {2, 3}, {0, 1}, {0, 1, 2, 3}, {4, 5, 6, 7}, {0, 1, 2, 3, 4, 5, 6, 7}, {});
+    RunOne(3, {2}, {2, 3}, {0, 1}, {0, 1, 2, 3}, {4, 5, 6, 7}, {0, 1, 2, 3, 4, 5, 6, 7}, {});
+    RunOne(4, {5}, {4, 5}, {6, 7}, {4, 5, 6, 7}, {0, 1, 2, 3}, {0, 1, 2, 3, 4, 5, 6, 7}, {});
+    RunOne(5, {4}, {4, 5}, {6, 7}, {4, 5, 6, 7}, {0, 1, 2, 3}, {0, 1, 2, 3, 4, 5, 6, 7}, {});
+    RunOne(6, {7}, {6, 7}, {4, 5}, {4, 5, 6, 7}, {0, 1, 2, 3}, {0, 1, 2, 3, 4, 5, 6, 7}, {});
+    RunOne(7, {6}, {6, 7}, {4, 5}, {4, 5, 6, 7}, {0, 1, 2, 3}, {0, 1, 2, 3, 4, 5, 6, 7}, {});
+
+    /* 320 MHz channel */
+    m_channel.SetDefault(MHz_u{320}, WIFI_STANDARD_80211be, WIFI_PHY_BAND_6GHZ);
+    RunOne(0,
+           {1},
+           {0, 1},
+           {2, 3},
+           {0, 1, 2, 3},
+           {4, 5, 6, 7},
+           {0, 1, 2, 3, 4, 5, 6, 7},
+           {8, 9, 10, 11, 12, 13, 14, 15});
+    RunOne(1,
+           {0},
+           {0, 1},
+           {2, 3},
+           {0, 1, 2, 3},
+           {4, 5, 6, 7},
+           {0, 1, 2, 3, 4, 5, 6, 7},
+           {8, 9, 10, 11, 12, 13, 14, 15});
+    RunOne(2,
+           {3},
+           {2, 3},
+           {0, 1},
+           {0, 1, 2, 3},
+           {4, 5, 6, 7},
+           {0, 1, 2, 3, 4, 5, 6, 7},
+           {8, 9, 10, 11, 12, 13, 14, 15});
+    RunOne(3,
+           {2},
+           {2, 3},
+           {0, 1},
+           {0, 1, 2, 3},
+           {4, 5, 6, 7},
+           {0, 1, 2, 3, 4, 5, 6, 7},
+           {8, 9, 10, 11, 12, 13, 14, 15});
+    RunOne(4,
+           {5},
+           {4, 5},
+           {6, 7},
+           {4, 5, 6, 7},
+           {0, 1, 2, 3},
+           {0, 1, 2, 3, 4, 5, 6, 7},
+           {8, 9, 10, 11, 12, 13, 14, 15});
+    RunOne(5,
+           {4},
+           {4, 5},
+           {6, 7},
+           {4, 5, 6, 7},
+           {0, 1, 2, 3},
+           {0, 1, 2, 3, 4, 5, 6, 7},
+           {8, 9, 10, 11, 12, 13, 14, 15});
+    RunOne(6,
+           {7},
+           {6, 7},
+           {4, 5},
+           {4, 5, 6, 7},
+           {0, 1, 2, 3},
+           {0, 1, 2, 3, 4, 5, 6, 7},
+           {8, 9, 10, 11, 12, 13, 14, 15});
+    RunOne(7,
+           {6},
+           {6, 7},
+           {4, 5},
+           {4, 5, 6, 7},
+           {0, 1, 2, 3},
+           {0, 1, 2, 3, 4, 5, 6, 7},
+           {8, 9, 10, 11, 12, 13, 14, 15});
+    RunOne(8,
+           {9},
+           {8, 9},
+           {10, 11},
+           {8, 9, 10, 11},
+           {12, 13, 14, 15},
+           {8, 9, 10, 11, 12, 13, 14, 15},
+           {0, 1, 2, 3, 4, 5, 6, 7});
+    RunOne(9,
+           {8},
+           {8, 9},
+           {10, 11},
+           {8, 9, 10, 11},
+           {12, 13, 14, 15},
+           {8, 9, 10, 11, 12, 13, 14, 15},
+           {0, 1, 2, 3, 4, 5, 6, 7});
+    RunOne(10,
+           {11},
+           {10, 11},
+           {8, 9},
+           {8, 9, 10, 11},
+           {12, 13, 14, 15},
+           {8, 9, 10, 11, 12, 13, 14, 15},
+           {0, 1, 2, 3, 4, 5, 6, 7});
+    RunOne(11,
+           {10},
+           {10, 11},
+           {8, 9},
+           {8, 9, 10, 11},
+           {12, 13, 14, 15},
+           {8, 9, 10, 11, 12, 13, 14, 15},
+           {0, 1, 2, 3, 4, 5, 6, 7});
+    RunOne(12,
+           {13},
+           {12, 13},
+           {14, 15},
+           {12, 13, 14, 15},
+           {8, 9, 10, 11},
+           {8, 9, 10, 11, 12, 13, 14, 15},
+           {0, 1, 2, 3, 4, 5, 6, 7});
+    RunOne(13,
+           {12},
+           {12, 13},
+           {14, 15},
+           {12, 13, 14, 15},
+           {8, 9, 10, 11},
+           {8, 9, 10, 11, 12, 13, 14, 15},
+           {0, 1, 2, 3, 4, 5, 6, 7});
+    RunOne(14,
+           {15},
+           {14, 15},
+           {12, 13},
+           {12, 13, 14, 15},
+           {8, 9, 10, 11},
+           {8, 9, 10, 11, 12, 13, 14, 15},
+           {0, 1, 2, 3, 4, 5, 6, 7});
+    RunOne(15,
+           {14},
+           {14, 15},
+           {12, 13},
+           {12, 13, 14, 15},
+           {8, 9, 10, 11},
+           {8, 9, 10, 11, 12, 13, 14, 15},
+           {0, 1, 2, 3, 4, 5, 6, 7});
 }
 
 /**
@@ -1364,16 +1578,26 @@
 WifiPrimaryChannelsTestSuite::WifiPrimaryChannelsTestSuite()
     : TestSuite("wifi-primary-channels", Type::UNIT)
 {
-    // Test cases for 20 MHz can be added, but are not that useful (there would be a single BSS)
-    AddTestCase(new WifiPrimaryChannelsTest(MHz_u{40}, true), TestCase::Duration::QUICK);
-    AddTestCase(new WifiPrimaryChannelsTest(MHz_u{40}, false), TestCase::Duration::QUICK);
-#if 0
-    // Tests disabled until issue #776 resolved
-    AddTestCase(new WifiPrimaryChannelsTest(MHz_u{80}, true), TestCase::Duration::EXTENSIVE);
-    AddTestCase(new WifiPrimaryChannelsTest(MHz_u{80}, false), TestCase::Duration::EXTENSIVE);
-    AddTestCase(new WifiPrimaryChannelsTest(MHz_u{160}, true), TestCase::Duration::TAKES_FOREVER);
-    AddTestCase(new WifiPrimaryChannelsTest(MHz_u{160}, false), TestCase::Duration::TAKES_FOREVER);
-#endif
+    for (const auto standard : {WIFI_STANDARD_80211ax, WIFI_STANDARD_80211be})
+    {
+        // Test cases for 20 MHz can be added, but are not that useful (there would be a single BSS)
+        AddTestCase(new WifiPrimaryChannelsTest(standard, MHz_u{40}, true),
+                    TestCase::Duration::QUICK);
+        AddTestCase(new WifiPrimaryChannelsTest(standard, MHz_u{40}, false),
+                    TestCase::Duration::QUICK);
+        AddTestCase(new WifiPrimaryChannelsTest(standard, MHz_u{80}, true),
+                    TestCase::Duration::EXTENSIVE);
+        AddTestCase(new WifiPrimaryChannelsTest(standard, MHz_u{80}, false),
+                    TestCase::Duration::EXTENSIVE);
+        AddTestCase(new WifiPrimaryChannelsTest(standard, MHz_u{160}, true),
+                    TestCase::Duration::TAKES_FOREVER);
+        AddTestCase(new WifiPrimaryChannelsTest(standard, MHz_u{160}, false),
+                    TestCase::Duration::TAKES_FOREVER);
+    }
+    AddTestCase(new WifiPrimaryChannelsTest(WIFI_STANDARD_80211be, MHz_u{320}, true),
+                TestCase::Duration::TAKES_FOREVER);
+    AddTestCase(new WifiPrimaryChannelsTest(WIFI_STANDARD_80211be, MHz_u{320}, false),
+                TestCase::Duration::TAKES_FOREVER);
     AddTestCase(new Wifi20MHzChannelIndicesTest(), TestCase::Duration::QUICK);
 }
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/test/wifi-retransmit-test.cc ns-3.45/src/wifi/test/wifi-retransmit-test.cc
--- ns-3.44/src/wifi/test/wifi-retransmit-test.cc	2025-03-09 16:55:49.811372800 -0700
+++ ns-3.45/src/wifi/test/wifi-retransmit-test.cc	2025-06-01 20:34:45.642702300 -0700
@@ -66,6 +66,11 @@
  *
  * In case of multi-link devices, the first TXOP is carried out on link 0 and the second TXOP on
  * link 1. It is checked that QSRC and CW are updated on the link on which the TXOP is carried out.
+ *
+ * The TX width of transmitted frames is also checked, considering that the AP operates on a
+ * 160 MHz channel and the non-AP STA does not support 160 MHz operations (hence the AP will use
+ * its primary80 channel to transmit to the non-AP STA). In case of multi-link devices, the second
+ * link is operated on a 40 MHz channel.
  */
 class WifiRetransmitTest : public TestCase
 {
@@ -190,12 +195,12 @@
 
     SpectrumWifiPhyHelper phy(m_nLinks);
     phy.SetChannel(CreateObject<MultiModelSpectrumChannel>());
-    // use default 20 MHz channel in 5 GHz band
-    phy.Set(0, "ChannelSettings", StringValue("{0, 20, BAND_5GHZ, 0}"));
+    // use default 80 MHz channel in 5 GHz band for the non-AP STA
+    phy.Set(0, "ChannelSettings", StringValue("{0, 80, BAND_5GHZ, 0}"));
     if (m_nLinks > 1)
     {
-        // use default 20 MHz channel in 6 GHz band
-        phy.Set(1, "ChannelSettings", StringValue("{0, 20, BAND_6GHZ, 0}"));
+        // use default 40 MHz channel in 6 GHz band
+        phy.Set(1, "ChannelSettings", StringValue("{0, 40, BAND_6GHZ, 0}"));
     }
 
     Config::SetDefault("ns3::WifiRemoteStationManager::RtsCtsThreshold",
@@ -221,6 +226,9 @@
     NetDeviceContainer staDevice = wifi.Install(phy, mac, wifiStaNode);
     m_staMac = StaticCast<StaWifiMac>(StaticCast<WifiNetDevice>(staDevice.Get(0))->GetMac());
 
+    // use default 160 MHz channel in 5 GHz band for the AP
+    phy.Set(0, "ChannelSettings", StringValue("{0, 160, BAND_5GHZ, 0}"));
+
     mac.SetType("ns3::ApWifiMac");
     mac.SetEdca(AC_BE,
                 "TxopLimits",
@@ -383,6 +391,16 @@
         return;
     }
 
+    // check width of transmitted frames, except CTS because we do not support yet static/dynamic
+    // bandwidth operation
+    const auto expectedWidth = (phyId == 0 ? 80 : 40);
+    if (!hdr.IsCts())
+    {
+        NS_TEST_EXPECT_MSG_EQ(txVector.GetChannelWidth(),
+                              expectedWidth,
+                              "Unexpected width for " << hdr.GetTypeString());
+    }
+
     if (m_eventIt != m_events.cend())
     {
         // check that the expected frame is being transmitted
@@ -654,7 +672,7 @@
                         m_staMac->GetDevice()->GetNode(),
                         GetApplication(2, m_pktSize));
 
-    Simulator::Stop(Seconds(1));
+    Simulator::Stop(Seconds(0.550));
     Simulator::Run();
 
     NS_TEST_EXPECT_MSG_EQ((m_eventIt == m_events.cend()), true, "Not all events took place");
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/test/wifi-ru-allocation-test.cc ns-3.45/src/wifi/test/wifi-ru-allocation-test.cc
--- ns-3.44/src/wifi/test/wifi-ru-allocation-test.cc	2025-03-09 16:55:49.811372800 -0700
+++ ns-3.45/src/wifi/test/wifi-ru-allocation-test.cc	2025-06-01 20:34:45.643702300 -0700
@@ -8,11 +8,42 @@
 
 #include "ns3/test.h"
 #include "ns3/wifi-phy-operating-channel.h"
+#include "ns3/wifi-ru.h"
+#include "ns3/wifi-utils.h"
 
 using namespace ns3;
 
 NS_LOG_COMPONENT_DEFINE("WifiRuAllocationTest");
 
+namespace
+{
+/**
+ * Create an HE or an EHT RU Specification.
+ * If a primary80 is provided, an HE RU Specification is created, other it is an EHT RU
+ * Specification.
+ *
+ * @param ruType the RU type
+ * @param index the RU index (starting at 1)
+ * @param primaryOrLow80MHz whether the RU is allocated in the primary 80MHz channel or in the low
+ * 80 MHz if the RU is allocated in the secondary 160 MHz
+ * @param primary160MHz whether the RU is allocated in the primary 160MHz channel (only for EHT)
+ * @return the created RU Specification.
+ */
+WifiRu::RuSpec
+MakeRuSpec(RuType ruType,
+           std::size_t index,
+           bool primaryOrLow80MHz,
+           std::optional<bool> primary160MHz = std::nullopt)
+{
+    if (!primary160MHz)
+    {
+        return HeRu::RuSpec{ruType, index, primaryOrLow80MHz};
+    }
+    return EhtRu::RuSpec{ruType, index, *primary160MHz, primaryOrLow80MHz};
+}
+
+} // namespace
+
 /**
  * @ingroup wifi-test
  * @ingroup tests
@@ -24,8 +55,9 @@
   public:
     /**
      * Constructor
+     * @param standard the standard to use for the test
      */
-    Wifi20MHzIndicesCoveringRuTest();
+    Wifi20MHzIndicesCoveringRuTest(WifiStandard standard);
     ~Wifi20MHzIndicesCoveringRuTest() override = default;
 
     /**
@@ -35,24 +67,31 @@
      * @param primary20 the index of the primary20 channel to configure
      * @param ru the given RU
      * @param width the width of the channel to which the given RU refers to; normally, it is the
-     * width of the PPDU for which the RU is allocated \param indices the expected indices
+     * width of the PPDU for which the RU is allocated
+     * @param indices the expected indices
      */
-    void RunOne(uint8_t primary20, HeRu::RuSpec ru, MHz_u width, const std::set<uint8_t>& indices);
+    void RunOne(uint8_t primary20,
+                WifiRu::RuSpec ru,
+                MHz_u width,
+                const std::set<uint8_t>& indices);
 
   private:
     void DoRun() override;
 
+    WifiStandard m_standard;           ///< The standard to use for the test
     WifiPhyOperatingChannel m_channel; //!< operating channel
 };
 
-Wifi20MHzIndicesCoveringRuTest::Wifi20MHzIndicesCoveringRuTest()
-    : TestCase("Check computation of the indices of the 20 MHz channels covering an RU")
+Wifi20MHzIndicesCoveringRuTest::Wifi20MHzIndicesCoveringRuTest(WifiStandard standard)
+    : TestCase("Check computation of the indices of the 20 MHz channels covering an RU for " +
+               std::string((standard == WIFI_STANDARD_80211ax) ? "11ax" : "11be")),
+      m_standard(standard)
 {
 }
 
 void
 Wifi20MHzIndicesCoveringRuTest::RunOne(uint8_t primary20,
-                                       HeRu::RuSpec ru,
+                                       WifiRu::RuSpec ru,
                                        MHz_u width,
                                        const std::set<uint8_t>& indices)
 {
@@ -68,12 +107,11 @@
     };
 
     m_channel.SetPrimary20Index(primary20);
-
     auto actualIndices = m_channel.Get20MHzIndicesCoveringRu(ru, width);
-    NS_TEST_ASSERT_MSG_EQ((actualIndices == indices),
+    NS_TEST_EXPECT_MSG_EQ((actualIndices == indices),
                           true,
-                          "Channel width=" << m_channel.GetWidth() << " MHz, PPDU width=" << width
-                                           << " MHz, p20Index=" << +primary20 << " , RU=" << ru
+                          "Channel width=" << m_channel.GetWidth() << ", PPDU width=" << width
+                                           << ", p20Index=" << +primary20 << " , RU=" << ru
                                            << ". Expected indices " << printToStr(indices)
                                            << " differs from actual " << printToStr(actualIndices));
 }
@@ -81,10 +119,13 @@
 void
 Wifi20MHzIndicesCoveringRuTest::DoRun()
 {
+    const auto p80{true};
+    const auto p160{(m_standard == WIFI_STANDARD_80211be) ? std::optional(true) : std::nullopt};
+
     /******************
      * 20 MHz channel *
      ******************/
-    m_channel.SetDefault(MHz_u{20}, WIFI_STANDARD_80211ax, WIFI_PHY_BAND_5GHZ);
+    m_channel.SetDefault(MHz_u{20}, m_standard, WIFI_PHY_BAND_6GHZ);
 
     /* 20 MHz PPDU */
     {
@@ -94,26 +135,26 @@
         // All the 9 26-tone RUs are covered by the unique 20 MHz channel
         for (std::size_t idx = 1; idx <= 9; idx++)
         {
-            RunOne(p20Index, HeRu::RuSpec(HeRu::RU_26_TONE, idx, true), width, {p20Index});
+            RunOne(p20Index, MakeRuSpec(RuType::RU_26_TONE, idx, p80, p160), width, {p20Index});
         }
         // All the 4 52-tone RUs are covered by the unique 20 MHz channel
         for (std::size_t idx = 1; idx <= 4; idx++)
         {
-            RunOne(p20Index, HeRu::RuSpec(HeRu::RU_52_TONE, idx, true), width, {p20Index});
+            RunOne(p20Index, MakeRuSpec(RuType::RU_52_TONE, idx, p80, p160), width, {p20Index});
         }
         // Both 106-tone RUs are covered by the unique 20 MHz channel
         for (std::size_t idx = 1; idx <= 2; idx++)
         {
-            RunOne(p20Index, HeRu::RuSpec(HeRu::RU_106_TONE, idx, true), width, {p20Index});
+            RunOne(p20Index, MakeRuSpec(RuType::RU_106_TONE, idx, p80, p160), width, {p20Index});
         }
         // The 242-tone RU is covered by the unique 20 MHz channel
-        RunOne(p20Index, HeRu::RuSpec(HeRu::RU_242_TONE, 1, true), width, {p20Index});
+        RunOne(p20Index, MakeRuSpec(RuType::RU_242_TONE, 1, p80, p160), width, {p20Index});
     }
 
     /******************
      * 40 MHz channel *
      ******************/
-    m_channel.SetDefault(MHz_u{40}, WIFI_STANDARD_80211ax, WIFI_PHY_BAND_5GHZ);
+    m_channel.SetDefault(MHz_u{40}, m_standard, WIFI_PHY_BAND_6GHZ);
 
     /* 20 MHz PPDU */
     for (uint8_t p20Index = 0; p20Index < 2; p20Index++)
@@ -123,20 +164,20 @@
         // All the 9 26-tone RUs are covered by the primary 20 MHz channel
         for (std::size_t idx = 1; idx <= 9; idx++)
         {
-            RunOne(p20Index, HeRu::RuSpec(HeRu::RU_26_TONE, idx, true), width, {p20Index});
+            RunOne(p20Index, MakeRuSpec(RuType::RU_26_TONE, idx, p80, p160), width, {p20Index});
         }
         // All the 4 52-tone RUs are covered by the primary 20 MHz channel
         for (std::size_t idx = 1; idx <= 4; idx++)
         {
-            RunOne(p20Index, HeRu::RuSpec(HeRu::RU_52_TONE, idx, true), width, {p20Index});
+            RunOne(p20Index, MakeRuSpec(RuType::RU_52_TONE, idx, p80, p160), width, {p20Index});
         }
         // Both 106-tone RUs are covered by the primary 20 MHz channel
         for (std::size_t idx = 1; idx <= 2; idx++)
         {
-            RunOne(p20Index, HeRu::RuSpec(HeRu::RU_106_TONE, idx, true), width, {p20Index});
+            RunOne(p20Index, MakeRuSpec(RuType::RU_106_TONE, idx, p80, p160), width, {p20Index});
         }
         // The 242-tone RU is covered by the primary 20 MHz channel
-        RunOne(p20Index, HeRu::RuSpec(HeRu::RU_242_TONE, 1, true), width, {p20Index});
+        RunOne(p20Index, MakeRuSpec(RuType::RU_242_TONE, 1, p80, p160), width, {p20Index});
     }
 
     /* 40 MHz PPDU */
@@ -147,45 +188,45 @@
         // The first 9 26-tone RUs are covered by the first 20 MHz channel
         for (std::size_t idx = 1; idx <= 9; idx++)
         {
-            RunOne(p20Index, HeRu::RuSpec(HeRu::RU_26_TONE, idx, true), width, {0});
+            RunOne(p20Index, MakeRuSpec(RuType::RU_26_TONE, idx, p80, p160), width, {0});
         }
         // The second 9 26-tone RUs are covered by the second 20 MHz channel
         for (std::size_t idx = 10; idx <= 18; idx++)
         {
-            RunOne(p20Index, HeRu::RuSpec(HeRu::RU_26_TONE, idx, true), width, {1});
+            RunOne(p20Index, MakeRuSpec(RuType::RU_26_TONE, idx, p80, p160), width, {1});
         }
         // The first 4 52-tone RUs are covered by the first 20 MHz channel
         for (std::size_t idx = 1; idx <= 4; idx++)
         {
-            RunOne(p20Index, HeRu::RuSpec(HeRu::RU_52_TONE, idx, true), width, {0});
+            RunOne(p20Index, MakeRuSpec(RuType::RU_52_TONE, idx, p80, p160), width, {0});
         }
         // The second 4 52-tone RUs are covered by the second 20 MHz channel
         for (std::size_t idx = 5; idx <= 8; idx++)
         {
-            RunOne(p20Index, HeRu::RuSpec(HeRu::RU_52_TONE, idx, true), width, {1});
+            RunOne(p20Index, MakeRuSpec(RuType::RU_52_TONE, idx, p80, p160), width, {1});
         }
         // The first 2 106-tone RUs are covered by the first 20 MHz channel
         for (std::size_t idx = 1; idx <= 2; idx++)
         {
-            RunOne(p20Index, HeRu::RuSpec(HeRu::RU_106_TONE, idx, true), width, {0});
+            RunOne(p20Index, MakeRuSpec(RuType::RU_106_TONE, idx, p80, p160), width, {0});
         }
         // The second 2 106-tone RUs are covered by the second 20 MHz channel
         for (std::size_t idx = 3; idx <= 4; idx++)
         {
-            RunOne(p20Index, HeRu::RuSpec(HeRu::RU_106_TONE, idx, true), width, {1});
+            RunOne(p20Index, MakeRuSpec(RuType::RU_106_TONE, idx, p80, p160), width, {1});
         }
         // The first 242-tone RU is covered by the first 20 MHz channel
-        RunOne(p20Index, HeRu::RuSpec(HeRu::RU_242_TONE, 1, true), width, {0});
+        RunOne(p20Index, MakeRuSpec(RuType::RU_242_TONE, 1, p80, p160), width, {0});
         // The second 242-tone RU is covered by the second 20 MHz channel
-        RunOne(p20Index, HeRu::RuSpec(HeRu::RU_242_TONE, 2, true), width, {1});
+        RunOne(p20Index, MakeRuSpec(RuType::RU_242_TONE, 2, p80, p160), width, {1});
         // The 484-tone RU is covered by both 20 MHz channels
-        RunOne(p20Index, HeRu::RuSpec(HeRu::RU_484_TONE, 1, true), width, {0, 1});
+        RunOne(p20Index, MakeRuSpec(RuType::RU_484_TONE, 1, p80, p160), width, {0, 1});
     }
 
     /******************
      * 80 MHz channel *
      ******************/
-    m_channel.SetDefault(MHz_u{80}, WIFI_STANDARD_80211ax, WIFI_PHY_BAND_5GHZ);
+    m_channel.SetDefault(MHz_u{80}, m_standard, WIFI_PHY_BAND_6GHZ);
 
     /* 20 MHz PPDU */
     for (uint8_t p20Index = 0; p20Index < 4; p20Index++)
@@ -195,20 +236,20 @@
         // All the 9 26-tone RUs are covered by the primary 20 MHz channel
         for (std::size_t idx = 1; idx <= 9; idx++)
         {
-            RunOne(p20Index, HeRu::RuSpec(HeRu::RU_26_TONE, idx, true), width, {p20Index});
+            RunOne(p20Index, MakeRuSpec(RuType::RU_26_TONE, idx, p80, p160), width, {p20Index});
         }
         // All the 4 52-tone RUs are covered by the primary 20 MHz channel
         for (std::size_t idx = 1; idx <= 4; idx++)
         {
-            RunOne(p20Index, HeRu::RuSpec(HeRu::RU_52_TONE, idx, true), width, {p20Index});
+            RunOne(p20Index, MakeRuSpec(RuType::RU_52_TONE, idx, p80, p160), width, {p20Index});
         }
         // Both 106-tone RUs are covered by the primary 20 MHz channel
         for (std::size_t idx = 1; idx <= 2; idx++)
         {
-            RunOne(p20Index, HeRu::RuSpec(HeRu::RU_106_TONE, idx, true), width, {p20Index});
+            RunOne(p20Index, MakeRuSpec(RuType::RU_106_TONE, idx, p80, p160), width, {p20Index});
         }
         // The 242-tone RU is covered by the primary 20 MHz channel
-        RunOne(p20Index, HeRu::RuSpec(HeRu::RU_242_TONE, 1, true), width, {p20Index});
+        RunOne(p20Index, MakeRuSpec(RuType::RU_242_TONE, 1, p80, p160), width, {p20Index});
     }
 
     /* 40 MHz PPDU */
@@ -224,39 +265,42 @@
         // The first 9 26-tone RUs are in the lower 20 MHz of the PPDU bandwidth
         for (std::size_t idx = 1; idx <= 9; idx++)
         {
-            RunOne(p20Index, HeRu::RuSpec(HeRu::RU_26_TONE, idx, true), width, {ch20Index0});
+            RunOne(p20Index, MakeRuSpec(RuType::RU_26_TONE, idx, p80, p160), width, {ch20Index0});
         }
         // The second 9 26-tone RUs are in the higher 20 MHz of the PPDU bandwidth
         for (std::size_t idx = 10; idx <= 18; idx++)
         {
-            RunOne(p20Index, HeRu::RuSpec(HeRu::RU_26_TONE, idx, true), width, {ch20Index1});
+            RunOne(p20Index, MakeRuSpec(RuType::RU_26_TONE, idx, p80, p160), width, {ch20Index1});
         }
         // The first 4 52-tone RUs are in the lower 20 MHz of the PPDU bandwidth
         for (std::size_t idx = 1; idx <= 4; idx++)
         {
-            RunOne(p20Index, HeRu::RuSpec(HeRu::RU_52_TONE, idx, true), width, {ch20Index0});
+            RunOne(p20Index, MakeRuSpec(RuType::RU_52_TONE, idx, p80, p160), width, {ch20Index0});
         }
         // The second 4 52-tone RUs are in the higher 20 MHz of the PPDU bandwidth
         for (std::size_t idx = 5; idx <= 8; idx++)
         {
-            RunOne(p20Index, HeRu::RuSpec(HeRu::RU_52_TONE, idx, true), width, {ch20Index1});
+            RunOne(p20Index, MakeRuSpec(RuType::RU_52_TONE, idx, p80, p160), width, {ch20Index1});
         }
         // The first 2 106-tone RUs are in the lower 20 MHz of the PPDU bandwidth
         for (std::size_t idx = 1; idx <= 2; idx++)
         {
-            RunOne(p20Index, HeRu::RuSpec(HeRu::RU_106_TONE, idx, true), width, {ch20Index0});
+            RunOne(p20Index, MakeRuSpec(RuType::RU_106_TONE, idx, p80, p160), width, {ch20Index0});
         }
         // The second 2 106-tone RUs are in the higher 20 MHz of the PPDU bandwidth
         for (std::size_t idx = 3; idx <= 4; idx++)
         {
-            RunOne(p20Index, HeRu::RuSpec(HeRu::RU_106_TONE, idx, true), width, {ch20Index1});
+            RunOne(p20Index, MakeRuSpec(RuType::RU_106_TONE, idx, p80, p160), width, {ch20Index1});
         }
         // The first 242-tone RU is in the lower 20 MHz of the PPDU bandwidth
-        RunOne(p20Index, HeRu::RuSpec(HeRu::RU_242_TONE, 1, true), width, {ch20Index0});
+        RunOne(p20Index, MakeRuSpec(RuType::RU_242_TONE, 1, p80, p160), width, {ch20Index0});
         // The second 242-tone RU is in the higher 20 MHz of the PPDU bandwidth
-        RunOne(p20Index, HeRu::RuSpec(HeRu::RU_242_TONE, 2, true), width, {ch20Index1});
+        RunOne(p20Index, MakeRuSpec(RuType::RU_242_TONE, 2, p80, p160), width, {ch20Index1});
         // The 484-tone RU is covered by both 20 MHz channels
-        RunOne(p20Index, HeRu::RuSpec(HeRu::RU_484_TONE, 1, true), width, {ch20Index0, ch20Index1});
+        RunOne(p20Index,
+               MakeRuSpec(RuType::RU_484_TONE, 1, p80, p160),
+               width,
+               {ch20Index0, ch20Index1});
     }
 
     /* 80 MHz PPDU */
@@ -267,85 +311,88 @@
         // The first 9 26-tone RUs are in the first 20 MHz channel
         for (std::size_t idx = 1; idx <= 9; idx++)
         {
-            RunOne(p20Index, HeRu::RuSpec(HeRu::RU_26_TONE, idx, true), width, {0});
+            RunOne(p20Index, MakeRuSpec(RuType::RU_26_TONE, idx, p80, p160), width, {0});
         }
         // The second 9 26-tone RUs are in the second 20 MHz channel
         for (std::size_t idx = 10; idx <= 18; idx++)
         {
-            RunOne(p20Index, HeRu::RuSpec(HeRu::RU_26_TONE, idx, true), width, {1});
+            RunOne(p20Index, MakeRuSpec(RuType::RU_26_TONE, idx, p80, p160), width, {1});
+        }
+        if (m_standard == WIFI_STANDARD_80211ax)
+        {
+            // The center 26-tone RU is covered by the central 20 MHz channels
+            RunOne(p20Index, MakeRuSpec(RuType::RU_26_TONE, 19, p80, p160), width, {1, 2});
         }
-        // The center 26-tone RU is covered by the central 20 MHz channels
-        RunOne(p20Index, HeRu::RuSpec(HeRu::RU_26_TONE, 19, true), width, {1, 2});
         // The following 9 26-tone RUs are in the third 20 MHz channel
         for (std::size_t idx = 20; idx <= 28; idx++)
         {
-            RunOne(p20Index, HeRu::RuSpec(HeRu::RU_26_TONE, idx, true), width, {2});
+            RunOne(p20Index, MakeRuSpec(RuType::RU_26_TONE, idx, p80, p160), width, {2});
         }
         // The last 9 26-tone RUs are in the fourth 20 MHz channel
         for (std::size_t idx = 29; idx <= 37; idx++)
         {
-            RunOne(p20Index, HeRu::RuSpec(HeRu::RU_26_TONE, idx, true), width, {3});
+            RunOne(p20Index, MakeRuSpec(RuType::RU_26_TONE, idx, p80, p160), width, {3});
         }
         // The first 4 52-tone RUs are in the first 20 MHz channel
         for (std::size_t idx = 1; idx <= 4; idx++)
         {
-            RunOne(p20Index, HeRu::RuSpec(HeRu::RU_52_TONE, idx, true), width, {0});
+            RunOne(p20Index, MakeRuSpec(RuType::RU_52_TONE, idx, p80, p160), width, {0});
         }
         // The second 4 52-tone RUs are in the second 20 MHz channel
         for (std::size_t idx = 5; idx <= 8; idx++)
         {
-            RunOne(p20Index, HeRu::RuSpec(HeRu::RU_52_TONE, idx, true), width, {1});
+            RunOne(p20Index, MakeRuSpec(RuType::RU_52_TONE, idx, p80, p160), width, {1});
         }
         // The third 4 52-tone RUs are in the third 20 MHz channel
         for (std::size_t idx = 9; idx <= 12; idx++)
         {
-            RunOne(p20Index, HeRu::RuSpec(HeRu::RU_52_TONE, idx, true), width, {2});
+            RunOne(p20Index, MakeRuSpec(RuType::RU_52_TONE, idx, p80, p160), width, {2});
         }
         // The fourth 4 52-tone RUs are in the fourth 20 MHz channel
         for (std::size_t idx = 13; idx <= 16; idx++)
         {
-            RunOne(p20Index, HeRu::RuSpec(HeRu::RU_52_TONE, idx, true), width, {3});
+            RunOne(p20Index, MakeRuSpec(RuType::RU_52_TONE, idx, p80, p160), width, {3});
         }
         // The first 2 106-tone RUs are in the first 20 MHz channel
         for (std::size_t idx = 1; idx <= 2; idx++)
         {
-            RunOne(p20Index, HeRu::RuSpec(HeRu::RU_106_TONE, idx, true), width, {0});
+            RunOne(p20Index, MakeRuSpec(RuType::RU_106_TONE, idx, p80, p160), width, {0});
         }
         // The second 2 106-tone RUs are in the second 20 MHz channel
         for (std::size_t idx = 3; idx <= 4; idx++)
         {
-            RunOne(p20Index, HeRu::RuSpec(HeRu::RU_106_TONE, idx, true), width, {1});
+            RunOne(p20Index, MakeRuSpec(RuType::RU_106_TONE, idx, p80, p160), width, {1});
         }
         // The third 2 106-tone RUs are in the third 20 MHz channel
         for (std::size_t idx = 5; idx <= 6; idx++)
         {
-            RunOne(p20Index, HeRu::RuSpec(HeRu::RU_106_TONE, idx, true), width, {2});
+            RunOne(p20Index, MakeRuSpec(RuType::RU_106_TONE, idx, p80, p160), width, {2});
         }
         // The fourth 2 106-tone RUs are in the fourth 20 MHz channel
         for (std::size_t idx = 7; idx <= 8; idx++)
         {
-            RunOne(p20Index, HeRu::RuSpec(HeRu::RU_106_TONE, idx, true), width, {3});
+            RunOne(p20Index, MakeRuSpec(RuType::RU_106_TONE, idx, p80, p160), width, {3});
         }
         // The first 242-tone RU is in the first 20 MHz channel
-        RunOne(p20Index, HeRu::RuSpec(HeRu::RU_242_TONE, 1, true), width, {0});
+        RunOne(p20Index, MakeRuSpec(RuType::RU_242_TONE, 1, p80, p160), width, {0});
         // The second 242-tone RU is in the second 20 MHz channel
-        RunOne(p20Index, HeRu::RuSpec(HeRu::RU_242_TONE, 2, true), width, {1});
+        RunOne(p20Index, MakeRuSpec(RuType::RU_242_TONE, 2, p80, p160), width, {1});
         // The third 242-tone RU is in the third 20 MHz channel
-        RunOne(p20Index, HeRu::RuSpec(HeRu::RU_242_TONE, 3, true), width, {2});
+        RunOne(p20Index, MakeRuSpec(RuType::RU_242_TONE, 3, p80, p160), width, {2});
         // The fourth 242-tone RU is in the fourth 20 MHz channel
-        RunOne(p20Index, HeRu::RuSpec(HeRu::RU_242_TONE, 4, true), width, {3});
+        RunOne(p20Index, MakeRuSpec(RuType::RU_242_TONE, 4, p80, p160), width, {3});
         // The first 484-tone RU is covered by the first two 20 MHz channels
-        RunOne(p20Index, HeRu::RuSpec(HeRu::RU_484_TONE, 1, true), width, {0, 1});
+        RunOne(p20Index, MakeRuSpec(RuType::RU_484_TONE, 1, p80, p160), width, {0, 1});
         // The second 484-tone RU is covered by the last two 20 MHz channels
-        RunOne(p20Index, HeRu::RuSpec(HeRu::RU_484_TONE, 2, true), width, {2, 3});
+        RunOne(p20Index, MakeRuSpec(RuType::RU_484_TONE, 2, p80, p160), width, {2, 3});
         // The 996-tone RU is covered by all the 20 MHz channels
-        RunOne(p20Index, HeRu::RuSpec(HeRu::RU_996_TONE, 1, true), width, {0, 1, 2, 3});
+        RunOne(p20Index, MakeRuSpec(RuType::RU_996_TONE, 1, p80, p160), width, {0, 1, 2, 3});
     }
 
     /******************
      * 160 MHz channel *
      ******************/
-    m_channel.SetDefault(MHz_u{160}, WIFI_STANDARD_80211ax, WIFI_PHY_BAND_5GHZ);
+    m_channel.SetDefault(MHz_u{160}, m_standard, WIFI_PHY_BAND_6GHZ);
 
     /* 20 MHz PPDU */
     for (uint8_t p20Index = 0; p20Index < 8; p20Index++)
@@ -355,20 +402,20 @@
         // All the 9 26-tone RUs are covered by the primary 20 MHz channel
         for (std::size_t idx = 1; idx <= 9; idx++)
         {
-            RunOne(p20Index, HeRu::RuSpec(HeRu::RU_26_TONE, idx, true), width, {p20Index});
+            RunOne(p20Index, MakeRuSpec(RuType::RU_26_TONE, idx, p80, p160), width, {p20Index});
         }
         // All the 4 52-tone RUs are covered by the primary 20 MHz channel
         for (std::size_t idx = 1; idx <= 4; idx++)
         {
-            RunOne(p20Index, HeRu::RuSpec(HeRu::RU_52_TONE, idx, true), width, {p20Index});
+            RunOne(p20Index, MakeRuSpec(RuType::RU_52_TONE, idx, p80, p160), width, {p20Index});
         }
         // Both 106-tone RUs are covered by the primary 20 MHz channel
         for (std::size_t idx = 1; idx <= 2; idx++)
         {
-            RunOne(p20Index, HeRu::RuSpec(HeRu::RU_106_TONE, idx, true), width, {p20Index});
+            RunOne(p20Index, MakeRuSpec(RuType::RU_106_TONE, idx, p80, p160), width, {p20Index});
         }
         // The 242-tone RU is covered by the primary 20 MHz channel
-        RunOne(p20Index, HeRu::RuSpec(HeRu::RU_242_TONE, 1, true), width, {p20Index});
+        RunOne(p20Index, MakeRuSpec(RuType::RU_242_TONE, 1, p80, p160), width, {p20Index});
     }
 
     /* 40 MHz PPDU */
@@ -384,39 +431,42 @@
         // The first 9 26-tone RUs are in the lower 20 MHz of the PPDU bandwidth
         for (std::size_t idx = 1; idx <= 9; idx++)
         {
-            RunOne(p20Index, HeRu::RuSpec(HeRu::RU_26_TONE, idx, true), width, {ch20Index0});
+            RunOne(p20Index, MakeRuSpec(RuType::RU_26_TONE, idx, p80, p160), width, {ch20Index0});
         }
         // The second 9 26-tone RUs are in the higher 20 MHz of the PPDU bandwidth
         for (std::size_t idx = 10; idx <= 18; idx++)
         {
-            RunOne(p20Index, HeRu::RuSpec(HeRu::RU_26_TONE, idx, true), width, {ch20Index1});
+            RunOne(p20Index, MakeRuSpec(RuType::RU_26_TONE, idx, p80, p160), width, {ch20Index1});
         }
         // The first 4 52-tone RUs are in the lower 20 MHz of the PPDU bandwidth
         for (std::size_t idx = 1; idx <= 4; idx++)
         {
-            RunOne(p20Index, HeRu::RuSpec(HeRu::RU_52_TONE, idx, true), width, {ch20Index0});
+            RunOne(p20Index, MakeRuSpec(RuType::RU_52_TONE, idx, p80, p160), width, {ch20Index0});
         }
         // The second 4 52-tone RUs are in the higher 20 MHz of the PPDU bandwidth
         for (std::size_t idx = 5; idx <= 8; idx++)
         {
-            RunOne(p20Index, HeRu::RuSpec(HeRu::RU_52_TONE, idx, true), width, {ch20Index1});
+            RunOne(p20Index, MakeRuSpec(RuType::RU_52_TONE, idx, p80, p160), width, {ch20Index1});
         }
         // The first 2 106-tone RUs are in the lower 20 MHz of the PPDU bandwidth
         for (std::size_t idx = 1; idx <= 2; idx++)
         {
-            RunOne(p20Index, HeRu::RuSpec(HeRu::RU_106_TONE, idx, true), width, {ch20Index0});
+            RunOne(p20Index, MakeRuSpec(RuType::RU_106_TONE, idx, p80, p160), width, {ch20Index0});
         }
         // The second 2 106-tone RUs are in the higher 20 MHz of the PPDU bandwidth
         for (std::size_t idx = 3; idx <= 4; idx++)
         {
-            RunOne(p20Index, HeRu::RuSpec(HeRu::RU_106_TONE, idx, true), width, {ch20Index1});
+            RunOne(p20Index, MakeRuSpec(RuType::RU_106_TONE, idx, p80, p160), width, {ch20Index1});
         }
         // The first 242-tone RU is in the lower 20 MHz of the PPDU bandwidth
-        RunOne(p20Index, HeRu::RuSpec(HeRu::RU_242_TONE, 1, true), width, {ch20Index0});
+        RunOne(p20Index, MakeRuSpec(RuType::RU_242_TONE, 1, p80, p160), width, {ch20Index0});
         // The second 242-tone RU is in the higher 20 MHz of the PPDU bandwidth
-        RunOne(p20Index, HeRu::RuSpec(HeRu::RU_242_TONE, 2, true), width, {ch20Index1});
+        RunOne(p20Index, MakeRuSpec(RuType::RU_242_TONE, 2, p80, p160), width, {ch20Index1});
         // The 484-tone RU is covered by both 20 MHz channels
-        RunOne(p20Index, HeRu::RuSpec(HeRu::RU_484_TONE, 1, true), width, {ch20Index0, ch20Index1});
+        RunOne(p20Index,
+               MakeRuSpec(RuType::RU_484_TONE, 1, p80, p160),
+               width,
+               {ch20Index0, ch20Index1});
     }
 
     /* 80 MHz PPDU */
@@ -434,80 +484,92 @@
         // The first 9 26-tone RUs are in the first 20 MHz channel
         for (std::size_t idx = 1; idx <= 9; idx++)
         {
-            RunOne(p20Index, HeRu::RuSpec(HeRu::RU_26_TONE, idx, true), width, {ch20Index0});
+            RunOne(p20Index, MakeRuSpec(RuType::RU_26_TONE, idx, p80, p160), width, {ch20Index0});
         }
         // The second 9 26-tone RUs are in the second 20 MHz channel
         for (std::size_t idx = 10; idx <= 18; idx++)
         {
-            RunOne(p20Index, HeRu::RuSpec(HeRu::RU_26_TONE, idx, true), width, {ch20Index1});
+            RunOne(p20Index, MakeRuSpec(RuType::RU_26_TONE, idx, p80, p160), width, {ch20Index1});
+        }
+        if (m_standard == WIFI_STANDARD_80211ax)
+        {
+            // The center 26-tone RU is covered by the central 20 MHz channels
+            RunOne(p20Index,
+                   MakeRuSpec(RuType::RU_26_TONE, 19, p80, p160),
+                   width,
+                   {ch20Index1, ch20Index2});
         }
-        // The center 26-tone RU is covered by the central 20 MHz channels
-        RunOne(p20Index, HeRu::RuSpec(HeRu::RU_26_TONE, 19, true), width, {ch20Index1, ch20Index2});
         // The following 9 26-tone RUs are in the third 20 MHz channel
         for (std::size_t idx = 20; idx <= 28; idx++)
         {
-            RunOne(p20Index, HeRu::RuSpec(HeRu::RU_26_TONE, idx, true), width, {ch20Index2});
+            RunOne(p20Index, MakeRuSpec(RuType::RU_26_TONE, idx, p80, p160), width, {ch20Index2});
         }
         // The last 9 26-tone RUs are in the fourth 20 MHz channel
         for (std::size_t idx = 29; idx <= 37; idx++)
         {
-            RunOne(p20Index, HeRu::RuSpec(HeRu::RU_26_TONE, idx, true), width, {ch20Index3});
+            RunOne(p20Index, MakeRuSpec(RuType::RU_26_TONE, idx, p80, p160), width, {ch20Index3});
         }
         // The first 4 52-tone RUs are in the first 20 MHz channel
         for (std::size_t idx = 1; idx <= 4; idx++)
         {
-            RunOne(p20Index, HeRu::RuSpec(HeRu::RU_52_TONE, idx, true), width, {ch20Index0});
+            RunOne(p20Index, MakeRuSpec(RuType::RU_52_TONE, idx, p80, p160), width, {ch20Index0});
         }
         // The second 4 52-tone RUs are in the second 20 MHz channel
         for (std::size_t idx = 5; idx <= 8; idx++)
         {
-            RunOne(p20Index, HeRu::RuSpec(HeRu::RU_52_TONE, idx, true), width, {ch20Index1});
+            RunOne(p20Index, MakeRuSpec(RuType::RU_52_TONE, idx, p80, p160), width, {ch20Index1});
         }
         // The third 4 52-tone RUs are in the third 20 MHz channel
         for (std::size_t idx = 9; idx <= 12; idx++)
         {
-            RunOne(p20Index, HeRu::RuSpec(HeRu::RU_52_TONE, idx, true), width, {ch20Index2});
+            RunOne(p20Index, MakeRuSpec(RuType::RU_52_TONE, idx, p80, p160), width, {ch20Index2});
         }
         // The fourth 4 52-tone RUs are in the fourth 20 MHz channel
         for (std::size_t idx = 13; idx <= 16; idx++)
         {
-            RunOne(p20Index, HeRu::RuSpec(HeRu::RU_52_TONE, idx, true), width, {ch20Index3});
+            RunOne(p20Index, MakeRuSpec(RuType::RU_52_TONE, idx, p80, p160), width, {ch20Index3});
         }
         // The first 2 106-tone RUs are in the first 20 MHz channel
         for (std::size_t idx = 1; idx <= 2; idx++)
         {
-            RunOne(p20Index, HeRu::RuSpec(HeRu::RU_106_TONE, idx, true), width, {ch20Index0});
+            RunOne(p20Index, MakeRuSpec(RuType::RU_106_TONE, idx, p80, p160), width, {ch20Index0});
         }
         // The second 2 106-tone RUs are in the second 20 MHz channel
         for (std::size_t idx = 3; idx <= 4; idx++)
         {
-            RunOne(p20Index, HeRu::RuSpec(HeRu::RU_106_TONE, idx, true), width, {ch20Index1});
+            RunOne(p20Index, MakeRuSpec(RuType::RU_106_TONE, idx, p80, p160), width, {ch20Index1});
         }
         // The third 2 106-tone RUs are in the third 20 MHz channel
         for (std::size_t idx = 5; idx <= 6; idx++)
         {
-            RunOne(p20Index, HeRu::RuSpec(HeRu::RU_106_TONE, idx, true), width, {ch20Index2});
+            RunOne(p20Index, MakeRuSpec(RuType::RU_106_TONE, idx, p80, p160), width, {ch20Index2});
         }
         // The fourth 2 106-tone RUs are in the fourth 20 MHz channel
         for (std::size_t idx = 7; idx <= 8; idx++)
         {
-            RunOne(p20Index, HeRu::RuSpec(HeRu::RU_106_TONE, idx, true), width, {ch20Index3});
+            RunOne(p20Index, MakeRuSpec(RuType::RU_106_TONE, idx, p80, p160), width, {ch20Index3});
         }
         // The first 242-tone RU is in the first 20 MHz channel
-        RunOne(p20Index, HeRu::RuSpec(HeRu::RU_242_TONE, 1, true), width, {ch20Index0});
+        RunOne(p20Index, MakeRuSpec(RuType::RU_242_TONE, 1, p80, p160), width, {ch20Index0});
         // The second 242-tone RU is in the second 20 MHz channel
-        RunOne(p20Index, HeRu::RuSpec(HeRu::RU_242_TONE, 2, true), width, {ch20Index1});
+        RunOne(p20Index, MakeRuSpec(RuType::RU_242_TONE, 2, p80, p160), width, {ch20Index1});
         // The third 242-tone RU is in the third 20 MHz channel
-        RunOne(p20Index, HeRu::RuSpec(HeRu::RU_242_TONE, 3, true), width, {ch20Index2});
+        RunOne(p20Index, MakeRuSpec(RuType::RU_242_TONE, 3, p80, p160), width, {ch20Index2});
         // The fourth 242-tone RU is in the fourth 20 MHz channel
-        RunOne(p20Index, HeRu::RuSpec(HeRu::RU_242_TONE, 4, true), width, {ch20Index3});
+        RunOne(p20Index, MakeRuSpec(RuType::RU_242_TONE, 4, p80, p160), width, {ch20Index3});
         // The first 484-tone RU is covered by the first two 20 MHz channels
-        RunOne(p20Index, HeRu::RuSpec(HeRu::RU_484_TONE, 1, true), width, {ch20Index0, ch20Index1});
+        RunOne(p20Index,
+               MakeRuSpec(RuType::RU_484_TONE, 1, p80, p160),
+               width,
+               {ch20Index0, ch20Index1});
         // The second 484-tone RU is covered by the last two 20 MHz channels
-        RunOne(p20Index, HeRu::RuSpec(HeRu::RU_484_TONE, 2, true), width, {ch20Index2, ch20Index3});
+        RunOne(p20Index,
+               MakeRuSpec(RuType::RU_484_TONE, 2, p80, p160),
+               width,
+               {ch20Index2, ch20Index3});
         // The 996-tone RU is covered by all the 20 MHz channels
         RunOne(p20Index,
-               HeRu::RuSpec(HeRu::RU_996_TONE, 1, true),
+               MakeRuSpec(RuType::RU_996_TONE, 1, p80, p160),
                width,
                {ch20Index0, ch20Index1, ch20Index2, ch20Index3});
     }
@@ -517,144 +579,186 @@
     {
         const MHz_u width{160};
 
-        for (auto primary80MHz : {true, false})
+        for (auto primary80 : {true, false})
         {
             // RUs can be allocated in one (or more) of the four 20 MHz channels in P80/S80
-            // (depending on the primary80MHz flag)
-            const uint8_t p80Index = (primary80MHz == (p20Index < 4)) ? 0 : 1;
+            // (depending on the primary80 flag)
+            const uint8_t p80Index = (primary80 == (p20Index < 4)) ? 0 : 1;
             const uint8_t ch20Index0 = p80Index * 4;
             const uint8_t ch20Index1 = p80Index * 4 + 1;
             const uint8_t ch20Index2 = p80Index * 4 + 2;
             const uint8_t ch20Index3 = p80Index * 4 + 3;
 
             // The first 9 26-tone RUs are in the first 20 MHz channel
-            for (std::size_t idx = 1; idx <= 9; idx++)
+            std::size_t startIdx = 1;
+            std::size_t stopIdx = startIdx + 8;
+            for (std::size_t idx = startIdx; idx <= stopIdx; idx++)
             {
                 RunOne(p20Index,
-                       HeRu::RuSpec(HeRu::RU_26_TONE, idx, primary80MHz),
+                       MakeRuSpec(RuType::RU_26_TONE, idx, primary80, p160),
                        width,
                        {ch20Index0});
             }
             // The second 9 26-tone RUs are in the second 20 MHz channel
-            for (std::size_t idx = 10; idx <= 18; idx++)
+            startIdx = stopIdx + 1;
+            stopIdx = startIdx + 8;
+            for (std::size_t idx = startIdx; idx <= stopIdx; idx++)
             {
                 RunOne(p20Index,
-                       HeRu::RuSpec(HeRu::RU_26_TONE, idx, primary80MHz),
+                       MakeRuSpec(RuType::RU_26_TONE, idx, primary80, p160),
                        width,
                        {ch20Index1});
             }
-            // The center 26-tone RU is covered by the central 20 MHz channels
-            RunOne(p20Index,
-                   HeRu::RuSpec(HeRu::RU_26_TONE, 19, primary80MHz),
-                   width,
-                   {ch20Index1, ch20Index2});
+            if (m_standard == WIFI_STANDARD_80211ax)
+            {
+                // The center 26-tone RU is covered by the central 20 MHz channels
+                RunOne(p20Index,
+                       MakeRuSpec(RuType::RU_26_TONE, 19, primary80, p160),
+                       width,
+                       {ch20Index1, ch20Index2});
+            }
             // The following 9 26-tone RUs are in the third 20 MHz channel
-            for (std::size_t idx = 20; idx <= 28; idx++)
+            startIdx = stopIdx + 2;
+            stopIdx = startIdx + 8;
+            for (std::size_t idx = startIdx; idx <= stopIdx; idx++)
             {
                 RunOne(p20Index,
-                       HeRu::RuSpec(HeRu::RU_26_TONE, idx, primary80MHz),
+                       MakeRuSpec(RuType::RU_26_TONE, idx, primary80, p160),
                        width,
                        {ch20Index2});
             }
             // The last 9 26-tone RUs are in the fourth 20 MHz channel
-            for (std::size_t idx = 29; idx <= 37; idx++)
+            startIdx = stopIdx + 1;
+            stopIdx = startIdx + 8;
+            for (std::size_t idx = startIdx; idx <= stopIdx; idx++)
             {
                 RunOne(p20Index,
-                       HeRu::RuSpec(HeRu::RU_26_TONE, idx, primary80MHz),
+                       MakeRuSpec(RuType::RU_26_TONE, idx, primary80, p160),
                        width,
                        {ch20Index3});
             }
             // The first 4 52-tone RUs are in the first 20 MHz channel
-            for (std::size_t idx = 1; idx <= 4; idx++)
+            startIdx = 1;
+            stopIdx = startIdx + 3;
+            for (std::size_t idx = startIdx; idx <= stopIdx; idx++)
             {
                 RunOne(p20Index,
-                       HeRu::RuSpec(HeRu::RU_52_TONE, idx, primary80MHz),
+                       MakeRuSpec(RuType::RU_52_TONE, idx, primary80, p160),
                        width,
                        {ch20Index0});
             }
             // The second 4 52-tone RUs are in the second 20 MHz channel
-            for (std::size_t idx = 5; idx <= 8; idx++)
+            startIdx = stopIdx + 1;
+            stopIdx = startIdx + 3;
+            for (std::size_t idx = startIdx; idx <= stopIdx; idx++)
             {
                 RunOne(p20Index,
-                       HeRu::RuSpec(HeRu::RU_52_TONE, idx, primary80MHz),
+                       MakeRuSpec(RuType::RU_52_TONE, idx, primary80, p160),
                        width,
                        {ch20Index1});
             }
             // The third 4 52-tone RUs are in the third 20 MHz channel
-            for (std::size_t idx = 9; idx <= 12; idx++)
+            startIdx = stopIdx + 1;
+            stopIdx = startIdx + 3;
+            for (std::size_t idx = startIdx; idx <= stopIdx; idx++)
             {
                 RunOne(p20Index,
-                       HeRu::RuSpec(HeRu::RU_52_TONE, idx, primary80MHz),
+                       MakeRuSpec(RuType::RU_52_TONE, idx, primary80, p160),
                        width,
                        {ch20Index2});
             }
             // The fourth 4 52-tone RUs are in the fourth 20 MHz channel
-            for (std::size_t idx = 13; idx <= 16; idx++)
+            startIdx = stopIdx + 1;
+            stopIdx = startIdx + 3;
+            for (std::size_t idx = startIdx; idx <= stopIdx; idx++)
             {
                 RunOne(p20Index,
-                       HeRu::RuSpec(HeRu::RU_52_TONE, idx, primary80MHz),
+                       MakeRuSpec(RuType::RU_52_TONE, idx, primary80, p160),
                        width,
                        {ch20Index3});
             }
             // The first 2 106-tone RUs are in the first 20 MHz channel
-            for (std::size_t idx = 1; idx <= 2; idx++)
+            startIdx = 1;
+            stopIdx = startIdx + 1;
+            for (std::size_t idx = startIdx; idx <= stopIdx; idx++)
             {
                 RunOne(p20Index,
-                       HeRu::RuSpec(HeRu::RU_106_TONE, idx, primary80MHz),
+                       MakeRuSpec(RuType::RU_106_TONE, idx, primary80, p160),
                        width,
                        {ch20Index0});
             }
             // The second 2 106-tone RUs are in the second 20 MHz channel
-            for (std::size_t idx = 3; idx <= 4; idx++)
+            startIdx = stopIdx + 1;
+            stopIdx = startIdx + 1;
+            for (std::size_t idx = startIdx; idx <= stopIdx; idx++)
             {
                 RunOne(p20Index,
-                       HeRu::RuSpec(HeRu::RU_106_TONE, idx, primary80MHz),
+                       MakeRuSpec(RuType::RU_106_TONE, idx, primary80, p160),
                        width,
                        {ch20Index1});
             }
             // The third 2 106-tone RUs are in the third 20 MHz channel
-            for (std::size_t idx = 5; idx <= 6; idx++)
+            startIdx = stopIdx + 1;
+            stopIdx = startIdx + 1;
+            for (std::size_t idx = startIdx; idx <= stopIdx; idx++)
             {
                 RunOne(p20Index,
-                       HeRu::RuSpec(HeRu::RU_106_TONE, idx, primary80MHz),
+                       MakeRuSpec(RuType::RU_106_TONE, idx, primary80, p160),
                        width,
                        {ch20Index2});
             }
             // The fourth 2 106-tone RUs are in the fourth 20 MHz channel
-            for (std::size_t idx = 7; idx <= 8; idx++)
+            startIdx = stopIdx + 1;
+            stopIdx = startIdx + 1;
+            for (std::size_t idx = startIdx; idx <= stopIdx; idx++)
             {
                 RunOne(p20Index,
-                       HeRu::RuSpec(HeRu::RU_106_TONE, idx, primary80MHz),
+                       MakeRuSpec(RuType::RU_106_TONE, idx, primary80, p160),
                        width,
                        {ch20Index3});
             }
             // The first 242-tone RU is in the first 20 MHz channel
-            RunOne(p20Index, HeRu::RuSpec(HeRu::RU_242_TONE, 1, primary80MHz), width, {ch20Index0});
+            auto idx = 1;
+            RunOne(p20Index,
+                   MakeRuSpec(RuType::RU_242_TONE, idx++, primary80, p160),
+                   width,
+                   {ch20Index0});
             // The second 242-tone RU is in the second 20 MHz channel
-            RunOne(p20Index, HeRu::RuSpec(HeRu::RU_242_TONE, 2, primary80MHz), width, {ch20Index1});
+            RunOne(p20Index,
+                   MakeRuSpec(RuType::RU_242_TONE, idx++, primary80, p160),
+                   width,
+                   {ch20Index1});
             // The third 242-tone RU is in the third 20 MHz channel
-            RunOne(p20Index, HeRu::RuSpec(HeRu::RU_242_TONE, 3, primary80MHz), width, {ch20Index2});
+            RunOne(p20Index,
+                   MakeRuSpec(RuType::RU_242_TONE, idx++, primary80, p160),
+                   width,
+                   {ch20Index2});
             // The fourth 242-tone RU is in the fourth 20 MHz channel
-            RunOne(p20Index, HeRu::RuSpec(HeRu::RU_242_TONE, 4, primary80MHz), width, {ch20Index3});
+            RunOne(p20Index,
+                   MakeRuSpec(RuType::RU_242_TONE, idx, primary80, p160),
+                   width,
+                   {ch20Index3});
             // The first 484-tone RU is covered by the first two 20 MHz channels
+            idx = 1;
             RunOne(p20Index,
-                   HeRu::RuSpec(HeRu::RU_484_TONE, 1, primary80MHz),
+                   MakeRuSpec(RuType::RU_484_TONE, idx++, primary80, p160),
                    width,
                    {ch20Index0, ch20Index1});
             // The second 484-tone RU is covered by the last two 20 MHz channels
             RunOne(p20Index,
-                   HeRu::RuSpec(HeRu::RU_484_TONE, 2, primary80MHz),
+                   MakeRuSpec(RuType::RU_484_TONE, idx, primary80, p160),
                    width,
                    {ch20Index2, ch20Index3});
             // The 996-tone RU is covered by all the 20 MHz channels
+            idx = 1;
             RunOne(p20Index,
-                   HeRu::RuSpec(HeRu::RU_996_TONE, 1, primary80MHz),
+                   MakeRuSpec(RuType::RU_996_TONE, idx, primary80, p160),
                    width,
                    {ch20Index0, ch20Index1, ch20Index2, ch20Index3});
         }
         // The 2x996-tone RU is covered by all the eight 20 MHz channels
         RunOne(p20Index,
-               HeRu::RuSpec(HeRu::RU_2x996_TONE, 1, true),
+               MakeRuSpec(RuType::RU_2x996_TONE, 1, p80),
                width,
                {0, 1, 2, 3, 4, 5, 6, 7});
     }
@@ -664,6 +768,3401 @@
  * @ingroup wifi-test
  * @ingroup tests
  *
+ * @brief Test the WifiRu::GetNRus() method.
+ */
+class WifiNumRusInChannelTest : public TestCase
+{
+  public:
+    /**
+     * Constructor
+     * @param modClass the modulation class to distinguish 802.11ax and 802.11be
+     */
+    WifiNumRusInChannelTest(WifiModulationClass modClass);
+
+  private:
+    void DoRun() override;
+
+    /**
+     * Check the number of RUs for a given channel width as computed
+     * by GetNRus() is correct.
+     *
+     * @param rutype the given RU type
+     * @param width the width of the channel to check
+     * @param size the expected size
+     */
+    void RunOne(RuType rutype, MHz_u width, std::size_t size);
+
+    WifiModulationClass m_modClass; ///< the modulation class to consider for the test
+};
+
+WifiNumRusInChannelTest::WifiNumRusInChannelTest(WifiModulationClass modClass)
+    : TestCase{"Check returned set of RUs of a given type for a given channel width for " +
+               std::string((modClass == WIFI_MOD_CLASS_HE) ? "HE" : "EHT")},
+      m_modClass{modClass}
+{
+}
+
+void
+WifiNumRusInChannelTest::RunOne(RuType rutype, MHz_u width, std::size_t size)
+{
+    const auto numRus = WifiRu::GetNRus(width, rutype, m_modClass);
+    NS_TEST_EXPECT_MSG_EQ(numRus,
+                          size,
+                          "Channel width=" << width << ", RU type=" << rutype << ". Expected size "
+                                           << size << " differs from computed size " << numRus);
+}
+
+void
+WifiNumRusInChannelTest::DoRun()
+{
+    /******************
+     * 20 MHz channel *
+     ******************/
+    {
+        const MHz_u width{20};
+
+        // 9x 26-tone RUs are in 20 MHz channels
+        RunOne(RuType::RU_26_TONE, width, 9);
+
+        // 4x 52-tone RUs are in 20 MHz channels
+        RunOne(RuType::RU_52_TONE, width, 4);
+
+        // 2x 106-tone RUs are in 20 MHz channels
+        RunOne(RuType::RU_106_TONE, width, 2);
+
+        // 1x 242-tone RUs are in 20 MHz channels
+        RunOne(RuType::RU_242_TONE, width, 1);
+
+        // no 484-tone RUs are in 20 MHz channels
+        RunOne(RuType::RU_484_TONE, width, 0);
+
+        // no 996-tone RUs are in 20 MHz channels
+        RunOne(RuType::RU_996_TONE, width, 0);
+
+        // no 2x996-tone RUs are in 20 MHz channels
+        RunOne(RuType::RU_2x996_TONE, width, 0);
+
+        // no 4x996-tone RUs are in 20 MHz channels
+        RunOne(RuType::RU_4x996_TONE, width, 0);
+    }
+
+    /******************
+     * 40 MHz channel *
+     ******************/
+    {
+        const MHz_u width{40};
+
+        // 18x 26-tone RUs are in 40 MHz channels
+        RunOne(RuType::RU_26_TONE, width, 18);
+
+        // 8x 52-tone RUs are in 40 MHz channels
+        RunOne(RuType::RU_52_TONE, width, 8);
+
+        // 4x 106-tone RUs are in 40 MHz channels
+        RunOne(RuType::RU_106_TONE, width, 4);
+
+        // 2x 242-tone RUs are in 40 MHz channels
+        RunOne(RuType::RU_242_TONE, width, 2);
+
+        // 1x 484-tone RUs are in 40 MHz channels
+        RunOne(RuType::RU_484_TONE, width, 1);
+
+        // no 996-tone RUs are in 40 MHz channels
+        RunOne(RuType::RU_996_TONE, width, 0);
+
+        // no 2x996-tone RUs are in 40 MHz channels
+        RunOne(RuType::RU_2x996_TONE, width, 0);
+
+        // no 4x996-tone RUs are in 40 MHz channels
+        RunOne(RuType::RU_4x996_TONE, width, 0);
+    }
+
+    /******************
+     * 80 MHz channel *
+     ******************/
+    {
+        const MHz_u width{80};
+
+        // 37x (defined) 26-tone RUs are in 80 MHz channels (1 less for EHT)
+        RunOne(RuType::RU_26_TONE, width, (m_modClass == WIFI_MOD_CLASS_HE) ? 37 : 36);
+
+        // 16x 52-tone RUs are in 80 MHz channels
+        RunOne(RuType::RU_52_TONE, width, 16);
+
+        // 8x 106-tone RUs are in 80 MHz channels
+        RunOne(RuType::RU_106_TONE, width, 8);
+
+        // 4x 242-tone RUs are in 80 MHz channels
+        RunOne(RuType::RU_242_TONE, width, 4);
+
+        // 2x 484-tone RUs are in 80 MHz channels
+        RunOne(RuType::RU_484_TONE, width, 2);
+
+        // 1x 996-tone RUs are in 80 MHz channels
+        RunOne(RuType::RU_996_TONE, width, 1);
+
+        // no 2x996-tone RUs are in 80 MHz channels
+        RunOne(RuType::RU_2x996_TONE, width, 0);
+
+        // no 4x996-tone RUs are in 80 MHz channels
+        RunOne(RuType::RU_4x996_TONE, width, 0);
+    }
+
+    /******************
+     * 160 MHz channel *
+     ******************/
+    {
+        const MHz_u width{160};
+
+        // 74x (defined) 26-tone RUs are in 160 MHz channels (2 less for EHT)
+        RunOne(RuType::RU_26_TONE, width, (m_modClass == WIFI_MOD_CLASS_HE) ? 74 : 72);
+
+        // 32x 52-tone RUs are in 160 MHz channels
+        RunOne(RuType::RU_52_TONE, width, 32);
+
+        // 16x 106-tone RUs are in 160 MHz channels
+        RunOne(RuType::RU_106_TONE, width, 16);
+
+        // 8x 242-tone RUs are in 160 MHz channels
+        RunOne(RuType::RU_242_TONE, width, 8);
+
+        // 4x 484-tone RUs are in 160 MHz channels
+        RunOne(RuType::RU_484_TONE, width, 4);
+
+        // 2x 996-tone RUs are in 160 MHz channels
+        RunOne(RuType::RU_996_TONE, width, 2);
+
+        // 1x 2x996-tone RUs are in 160 MHz channels
+        RunOne(RuType::RU_2x996_TONE, width, 1);
+
+        // no 4x996-tone RUs are in 160 MHz channels
+        RunOne(RuType::RU_4x996_TONE, width, 0);
+    }
+}
+
+/**
+ * @ingroup wifi-test
+ * @ingroup tests
+ *
+ * @brief Test the WifiRu::GetRusOfType() method.
+ */
+class WifiRusOfTypeInChannelTest : public TestCase
+{
+  public:
+    /**
+     * Constructor
+     * @param modClass the modulation class to distinguish 802.11ax and 802.11be
+     */
+    WifiRusOfTypeInChannelTest(WifiModulationClass modClass);
+
+  private:
+    void DoRun() override;
+
+    /**
+     * Check the set of RUs returned by GetRusOfType() is correct.
+     *
+     * @param rutype the given RU type
+     * @param width the width of the channel to check
+     * @param expectedRus the expected set of RUs
+     */
+    void RunOne(RuType rutype, MHz_u width, const std::vector<WifiRu::RuSpec>& expectedRus);
+
+    WifiModulationClass m_modClass; ///< the modulation class to consider for the test
+};
+
+WifiRusOfTypeInChannelTest::WifiRusOfTypeInChannelTest(WifiModulationClass modClass)
+    : TestCase{"Check returned RUs of a given type for a given channel width for " +
+               std::string((modClass == WIFI_MOD_CLASS_HE) ? "HE" : "EHT")},
+      m_modClass{modClass}
+{
+}
+
+void
+WifiRusOfTypeInChannelTest::RunOne(RuType rutype,
+                                   MHz_u width,
+                                   const std::vector<WifiRu::RuSpec>& expectedRus)
+{
+    auto printToStr = [](const std::vector<WifiRu::RuSpec>& v) {
+        std::stringstream ss;
+        ss << "{";
+        for (const auto& ru : v)
+        {
+            ss << ru << " ";
+        }
+        ss << "}";
+        return ss.str();
+    };
+
+    const auto actualRus = WifiRu::GetRusOfType(width, rutype, m_modClass);
+    NS_TEST_EXPECT_MSG_EQ((actualRus == expectedRus),
+                          true,
+                          "Channel width=" << width << ", RU type=" << rutype << ". Expected RUs "
+                                           << printToStr(expectedRus) << " differs from actual RUs "
+                                           << printToStr(actualRus));
+}
+
+void
+WifiRusOfTypeInChannelTest::DoRun()
+{
+    const auto p80{true};
+    const auto s80{false};
+    const auto p160{(m_modClass == WIFI_MOD_CLASS_HE) ? std::nullopt : std::optional(true)};
+
+    /******************
+     * 20 MHz channel *
+     ******************/
+    {
+        const MHz_u width{20};
+
+        // 9x 26-tone RUs are in 20 MHz channels
+        RunOne(RuType::RU_26_TONE,
+               width,
+               {MakeRuSpec(RuType::RU_26_TONE, 1, p80, p160),
+                MakeRuSpec(RuType::RU_26_TONE, 2, p80, p160),
+                MakeRuSpec(RuType::RU_26_TONE, 3, p80, p160),
+                MakeRuSpec(RuType::RU_26_TONE, 4, p80, p160),
+                MakeRuSpec(RuType::RU_26_TONE, 5, p80, p160),
+                MakeRuSpec(RuType::RU_26_TONE, 6, p80, p160),
+                MakeRuSpec(RuType::RU_26_TONE, 7, p80, p160),
+                MakeRuSpec(RuType::RU_26_TONE, 8, p80, p160),
+                MakeRuSpec(RuType::RU_26_TONE, 9, p80, p160)});
+
+        // 4x 52-tone RUs are in 20 MHz channels
+        RunOne(RuType::RU_52_TONE,
+               width,
+               {MakeRuSpec(RuType::RU_52_TONE, 1, p80, p160),
+                MakeRuSpec(RuType::RU_52_TONE, 2, p80, p160),
+                MakeRuSpec(RuType::RU_52_TONE, 3, p80, p160),
+                MakeRuSpec(RuType::RU_52_TONE, 4, p80, p160)});
+
+        // 2x 106-tone RUs are in 20 MHz channels
+        RunOne(RuType::RU_106_TONE,
+               width,
+               {MakeRuSpec(RuType::RU_106_TONE, 1, p80, p160),
+                MakeRuSpec(RuType::RU_106_TONE, 2, p80, p160)});
+
+        // 1x 242-tone RUs are in 20 MHz channels
+        RunOne(RuType::RU_242_TONE, width, {MakeRuSpec(RuType::RU_242_TONE, 1, p80, p160)});
+
+        // no 484-tone RUs are in 20 MHz channels
+        RunOne(RuType::RU_484_TONE, width, {});
+
+        // no 996-tone RUs are in 20 MHz channels
+        RunOne(RuType::RU_996_TONE, width, {});
+
+        // no 2x996-tone RUs are in 20 MHz channels
+        RunOne(RuType::RU_2x996_TONE, width, {});
+
+        // no 4x996-tone RUs are in 20 MHz channels
+        RunOne(RuType::RU_4x996_TONE, width, {});
+    }
+
+    /******************
+     * 40 MHz channel *
+     ******************/
+    {
+        const MHz_u width{40};
+
+        // 18x 26-tone RUs are in 40 MHz channels
+        RunOne(RuType::RU_26_TONE,
+               width,
+               {MakeRuSpec(RuType::RU_26_TONE, 1, p80, p160),
+                MakeRuSpec(RuType::RU_26_TONE, 2, p80, p160),
+                MakeRuSpec(RuType::RU_26_TONE, 3, p80, p160),
+                MakeRuSpec(RuType::RU_26_TONE, 4, p80, p160),
+                MakeRuSpec(RuType::RU_26_TONE, 5, p80, p160),
+                MakeRuSpec(RuType::RU_26_TONE, 6, p80, p160),
+                MakeRuSpec(RuType::RU_26_TONE, 7, p80, p160),
+                MakeRuSpec(RuType::RU_26_TONE, 8, p80, p160),
+                MakeRuSpec(RuType::RU_26_TONE, 9, p80, p160),
+                MakeRuSpec(RuType::RU_26_TONE, 10, p80, p160),
+                MakeRuSpec(RuType::RU_26_TONE, 11, p80, p160),
+                MakeRuSpec(RuType::RU_26_TONE, 12, p80, p160),
+                MakeRuSpec(RuType::RU_26_TONE, 13, p80, p160),
+                MakeRuSpec(RuType::RU_26_TONE, 14, p80, p160),
+                MakeRuSpec(RuType::RU_26_TONE, 15, p80, p160),
+                MakeRuSpec(RuType::RU_26_TONE, 16, p80, p160),
+                MakeRuSpec(RuType::RU_26_TONE, 17, p80, p160),
+                MakeRuSpec(RuType::RU_26_TONE, 18, p80, p160)});
+
+        // 8x 52-tone RUs are in 40 MHz channels
+        RunOne(RuType::RU_52_TONE,
+               width,
+               {MakeRuSpec(RuType::RU_52_TONE, 1, p80, p160),
+                MakeRuSpec(RuType::RU_52_TONE, 2, p80, p160),
+                MakeRuSpec(RuType::RU_52_TONE, 3, p80, p160),
+                MakeRuSpec(RuType::RU_52_TONE, 4, p80, p160),
+                MakeRuSpec(RuType::RU_52_TONE, 5, p80, p160),
+                MakeRuSpec(RuType::RU_52_TONE, 6, p80, p160),
+                MakeRuSpec(RuType::RU_52_TONE, 7, p80, p160),
+                MakeRuSpec(RuType::RU_52_TONE, 8, p80, p160)});
+
+        // 4x 106-tone RUs are in 40 MHz channels
+        RunOne(RuType::RU_106_TONE,
+               width,
+               {MakeRuSpec(RuType::RU_106_TONE, 1, p80, p160),
+                MakeRuSpec(RuType::RU_106_TONE, 2, p80, p160),
+                MakeRuSpec(RuType::RU_106_TONE, 3, p80, p160),
+                MakeRuSpec(RuType::RU_106_TONE, 4, p80, p160)});
+
+        // 2x 242-tone RUs are in 40 MHz channels
+        RunOne(RuType::RU_242_TONE,
+               width,
+               {MakeRuSpec(RuType::RU_242_TONE, 1, p80, p160),
+                MakeRuSpec(RuType::RU_242_TONE, 2, p80, p160)});
+
+        // 1x 484-tone RUs are in 40 MHz channels
+        RunOne(RuType::RU_484_TONE, width, {MakeRuSpec(RuType::RU_484_TONE, 1, p80, p160)});
+
+        // no 996-tone RUs are in 40 MHz channels
+        RunOne(RuType::RU_996_TONE, width, {});
+
+        // no 2x996-tone RUs are in 40 MHz channels
+        RunOne(RuType::RU_2x996_TONE, width, {});
+
+        // no 4x996-tone RUs are in 40 MHz channels
+        RunOne(RuType::RU_4x996_TONE, width, {});
+    }
+
+    /******************
+     * 80 MHz channel *
+     ******************/
+    {
+        const MHz_u width{80};
+
+        // 37x 26-tone RUs are in 80 MHz channels (1 less for EHT)
+        std::vector<WifiRu::RuSpec> expectedRus{MakeRuSpec(RuType::RU_26_TONE, 1, p80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 2, p80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 3, p80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 4, p80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 5, p80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 6, p80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 7, p80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 8, p80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 9, p80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 10, p80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 11, p80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 12, p80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 13, p80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 14, p80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 15, p80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 16, p80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 17, p80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 18, p80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 20, p80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 21, p80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 22, p80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 23, p80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 24, p80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 25, p80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 26, p80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 27, p80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 28, p80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 29, p80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 30, p80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 31, p80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 32, p80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 33, p80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 34, p80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 35, p80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 36, p80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 37, p80, p160)};
+        if (m_modClass == WIFI_MOD_CLASS_HE)
+        {
+            // RU 19 is undefined for EHT
+            const auto it = std::next(expectedRus.cbegin(), 18);
+            expectedRus.insert(it, MakeRuSpec(RuType::RU_26_TONE, 19, p80, p160));
+        }
+        RunOne(RuType::RU_26_TONE, width, expectedRus);
+
+        // 16x 52-tone RUs are in 80 MHz channels
+        RunOne(RuType::RU_52_TONE,
+               width,
+               {MakeRuSpec(RuType::RU_52_TONE, 1, p80, p160),
+                MakeRuSpec(RuType::RU_52_TONE, 2, p80, p160),
+                MakeRuSpec(RuType::RU_52_TONE, 3, p80, p160),
+                MakeRuSpec(RuType::RU_52_TONE, 4, p80, p160),
+                MakeRuSpec(RuType::RU_52_TONE, 5, p80, p160),
+                MakeRuSpec(RuType::RU_52_TONE, 6, p80, p160),
+                MakeRuSpec(RuType::RU_52_TONE, 7, p80, p160),
+                MakeRuSpec(RuType::RU_52_TONE, 8, p80, p160),
+                MakeRuSpec(RuType::RU_52_TONE, 9, p80, p160),
+                MakeRuSpec(RuType::RU_52_TONE, 10, p80, p160),
+                MakeRuSpec(RuType::RU_52_TONE, 11, p80, p160),
+                MakeRuSpec(RuType::RU_52_TONE, 12, p80, p160),
+                MakeRuSpec(RuType::RU_52_TONE, 13, p80, p160),
+                MakeRuSpec(RuType::RU_52_TONE, 14, p80, p160),
+                MakeRuSpec(RuType::RU_52_TONE, 15, p80, p160),
+                MakeRuSpec(RuType::RU_52_TONE, 16, p80, p160)});
+
+        // 8x 106-tone RUs are in 80 MHz channels
+        RunOne(RuType::RU_106_TONE,
+               width,
+               {MakeRuSpec(RuType::RU_106_TONE, 1, p80, p160),
+                MakeRuSpec(RuType::RU_106_TONE, 2, p80, p160),
+                MakeRuSpec(RuType::RU_106_TONE, 3, p80, p160),
+                MakeRuSpec(RuType::RU_106_TONE, 4, p80, p160),
+                MakeRuSpec(RuType::RU_106_TONE, 5, p80, p160),
+                MakeRuSpec(RuType::RU_106_TONE, 6, p80, p160),
+                MakeRuSpec(RuType::RU_106_TONE, 7, p80, p160),
+                MakeRuSpec(RuType::RU_106_TONE, 8, p80, p160)});
+
+        // 4x 242-tone RUs are in 80 MHz channels
+        RunOne(RuType::RU_242_TONE,
+               width,
+               {MakeRuSpec(RuType::RU_242_TONE, 1, p80, p160),
+                MakeRuSpec(RuType::RU_242_TONE, 2, p80, p160),
+                MakeRuSpec(RuType::RU_242_TONE, 3, p80, p160),
+                MakeRuSpec(RuType::RU_242_TONE, 4, p80, p160)});
+
+        // 2x 484-tone RUs are in 80 MHz channels
+        RunOne(RuType::RU_484_TONE,
+               width,
+               {MakeRuSpec(RuType::RU_484_TONE, 1, p80, p160),
+                MakeRuSpec(RuType::RU_484_TONE, 2, p80, p160)});
+
+        // 1x 996-tone RUs are in 80 MHz channels
+        RunOne(RuType::RU_996_TONE, width, {MakeRuSpec(RuType::RU_996_TONE, 1, p80, p160)});
+
+        // no 2x996-tone RUs are in 80 MHz channels
+        RunOne(RuType::RU_2x996_TONE, width, {});
+
+        // no 4x996-tone RUs are in 80 MHz channels
+        RunOne(RuType::RU_4x996_TONE, width, {});
+    }
+
+    /******************
+     * 160 MHz channel *
+     ******************/
+    {
+        const MHz_u width{160};
+
+        // 74x 26-tone RUs are in 160 MHz channels (2 less for EHT)
+        std::vector<WifiRu::RuSpec> expectedRus{MakeRuSpec(RuType::RU_26_TONE, 1, p80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 2, p80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 3, p80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 4, p80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 5, p80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 6, p80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 7, p80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 8, p80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 9, p80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 10, p80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 11, p80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 12, p80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 13, p80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 14, p80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 15, p80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 16, p80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 17, p80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 18, p80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 20, p80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 21, p80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 22, p80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 23, p80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 24, p80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 25, p80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 26, p80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 27, p80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 28, p80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 29, p80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 30, p80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 31, p80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 32, p80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 33, p80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 34, p80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 35, p80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 36, p80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 37, p80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 1, s80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 2, s80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 3, s80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 4, s80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 5, s80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 6, s80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 7, s80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 8, s80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 9, s80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 10, s80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 11, s80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 12, s80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 13, s80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 14, s80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 15, s80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 16, s80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 17, s80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 18, s80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 20, s80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 21, s80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 22, s80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 23, s80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 24, s80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 25, s80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 26, s80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 27, s80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 28, s80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 29, s80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 30, s80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 31, s80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 32, s80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 33, s80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 34, s80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 35, s80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 36, s80, p160),
+                                                MakeRuSpec(RuType::RU_26_TONE, 37, s80, p160)};
+        if (m_modClass == WIFI_MOD_CLASS_HE)
+        {
+            // RU 19 and RU 56 are undefined for EHT
+            auto it = std::next(expectedRus.cbegin(), 18);
+            expectedRus.insert(it, MakeRuSpec(RuType::RU_26_TONE, 19, p80));
+            it = std::next(expectedRus.cbegin(), 55);
+            expectedRus.insert(it, MakeRuSpec(RuType::RU_26_TONE, 19, s80));
+        }
+        RunOne(RuType::RU_26_TONE, width, expectedRus);
+
+        // 32x 52-tone RUs are in 160 MHz channels
+        RunOne(RuType::RU_52_TONE, width, {MakeRuSpec(RuType::RU_52_TONE, 1, p80, p160),
+                                           MakeRuSpec(RuType::RU_52_TONE, 2, p80, p160),
+                                           MakeRuSpec(RuType::RU_52_TONE, 3, p80, p160),
+                                           MakeRuSpec(RuType::RU_52_TONE, 4, p80, p160),
+                                           MakeRuSpec(RuType::RU_52_TONE, 5, p80, p160),
+                                           MakeRuSpec(RuType::RU_52_TONE, 6, p80, p160),
+                                           MakeRuSpec(RuType::RU_52_TONE, 7, p80, p160),
+                                           MakeRuSpec(RuType::RU_52_TONE, 8, p80, p160),
+                                           MakeRuSpec(RuType::RU_52_TONE, 9, p80, p160),
+                                           MakeRuSpec(RuType::RU_52_TONE, 10, p80, p160),
+                                           MakeRuSpec(RuType::RU_52_TONE, 11, p80, p160),
+                                           MakeRuSpec(RuType::RU_52_TONE, 12, p80, p160),
+                                           MakeRuSpec(RuType::RU_52_TONE, 13, p80, p160),
+                                           MakeRuSpec(RuType::RU_52_TONE, 14, p80, p160),
+                                           MakeRuSpec(RuType::RU_52_TONE, 15, p80, p160),
+                                           MakeRuSpec(RuType::RU_52_TONE, 16, p80, p160),
+                                           MakeRuSpec(RuType::RU_52_TONE, 1, s80, p160),
+                                           MakeRuSpec(RuType::RU_52_TONE, 2, s80, p160),
+                                           MakeRuSpec(RuType::RU_52_TONE, 3, s80, p160),
+                                           MakeRuSpec(RuType::RU_52_TONE, 4, s80, p160),
+                                           MakeRuSpec(RuType::RU_52_TONE, 5, s80, p160),
+                                           MakeRuSpec(RuType::RU_52_TONE, 6, s80, p160),
+                                           MakeRuSpec(RuType::RU_52_TONE, 7, s80, p160),
+                                           MakeRuSpec(RuType::RU_52_TONE, 8, s80, p160),
+                                           MakeRuSpec(RuType::RU_52_TONE, 9, s80, p160),
+                                           MakeRuSpec(RuType::RU_52_TONE, 10, s80, p160),
+                                           MakeRuSpec(RuType::RU_52_TONE, 11, s80, p160),
+                                           MakeRuSpec(RuType::RU_52_TONE, 12, s80, p160),
+                                           MakeRuSpec(RuType::RU_52_TONE, 13, s80, p160),
+                                           MakeRuSpec(RuType::RU_52_TONE, 14, s80, p160),
+                                           MakeRuSpec(RuType::RU_52_TONE, 15, s80, p160),
+                                           MakeRuSpec(RuType::RU_52_TONE, 16, s80, p160)});
+
+        // 16x 106-tone RUs are in 160 MHz channels
+        RunOne(RuType::RU_106_TONE,
+               width,
+               {MakeRuSpec(RuType::RU_106_TONE, 1, p80, p160),
+                MakeRuSpec(RuType::RU_106_TONE, 2, p80, p160),
+                MakeRuSpec(RuType::RU_106_TONE, 3, p80, p160),
+                MakeRuSpec(RuType::RU_106_TONE, 4, p80, p160),
+                MakeRuSpec(RuType::RU_106_TONE, 5, p80, p160),
+                MakeRuSpec(RuType::RU_106_TONE, 6, p80, p160),
+                MakeRuSpec(RuType::RU_106_TONE, 7, p80, p160),
+                MakeRuSpec(RuType::RU_106_TONE, 8, p80, p160),
+                MakeRuSpec(RuType::RU_106_TONE, 1, s80, p160),
+                MakeRuSpec(RuType::RU_106_TONE, 2, s80, p160),
+                MakeRuSpec(RuType::RU_106_TONE, 3, s80, p160),
+                MakeRuSpec(RuType::RU_106_TONE, 4, s80, p160),
+                MakeRuSpec(RuType::RU_106_TONE, 5, s80, p160),
+                MakeRuSpec(RuType::RU_106_TONE, 6, s80, p160),
+                MakeRuSpec(RuType::RU_106_TONE, 7, s80, p160),
+                MakeRuSpec(RuType::RU_106_TONE, 8, s80, p160)});
+
+        // 8x 242-tone RUs are in 160 MHz channels
+        RunOne(RuType::RU_242_TONE,
+               width,
+               {MakeRuSpec(RuType::RU_242_TONE, 1, p80, p160),
+                MakeRuSpec(RuType::RU_242_TONE, 2, p80, p160),
+                MakeRuSpec(RuType::RU_242_TONE, 3, p80, p160),
+                MakeRuSpec(RuType::RU_242_TONE, 4, p80, p160),
+                MakeRuSpec(RuType::RU_242_TONE, 1, s80, p160),
+                MakeRuSpec(RuType::RU_242_TONE, 2, s80, p160),
+                MakeRuSpec(RuType::RU_242_TONE, 3, s80, p160),
+                MakeRuSpec(RuType::RU_242_TONE, 4, s80, p160)});
+
+        // 4x 484-tone RUs are in 160 MHz channels
+        RunOne(RuType::RU_484_TONE,
+               width,
+               {MakeRuSpec(RuType::RU_484_TONE, 1, p80, p160),
+                MakeRuSpec(RuType::RU_484_TONE, 2, p80, p160),
+                MakeRuSpec(RuType::RU_484_TONE, 1, s80, p160),
+                MakeRuSpec(RuType::RU_484_TONE, 2, s80, p160)});
+
+        // 2x 996-tone RUs are in 160 MHz channels
+        RunOne(RuType::RU_996_TONE,
+               width,
+               {MakeRuSpec(RuType::RU_996_TONE, 1, p80, p160),
+                MakeRuSpec(RuType::RU_996_TONE, 1, s80, p160)});
+
+        // 1x 2x996-tone RUs are in 160 MHz channels
+        RunOne(RuType::RU_2x996_TONE, width, {MakeRuSpec(RuType::RU_2x996_TONE, 1, p80, p160)});
+
+        // no 4x996-tone RUs are in 160 MHz channels
+        RunOne(RuType::RU_4x996_TONE, width, {});
+    }
+}
+
+/**
+ * @ingroup wifi-test
+ * @ingroup tests
+ *
+ * @brief Test the WifiRu::GetCentral26TonesRus() method.
+ */
+class WifiCentral26TonesRusInChannelTest : public TestCase
+{
+  public:
+    /**
+     * Constructor
+     * @param modClass the modulation class to distinguish 802.11ax and 802.11be
+     */
+    WifiCentral26TonesRusInChannelTest(WifiModulationClass modClass);
+
+  private:
+    void DoRun() override;
+
+    /**
+     * Check the set of 26-tone RUs returned by GetCentral26TonesRus() is correct.
+     *
+     * @param rutype the given RU type
+     * @param width the width of the channel to check
+     * @param expectedCentral26TonesRus the expected set of 26-tone RUs
+     */
+    void RunOne(RuType rutype,
+                MHz_u width,
+                const std::vector<WifiRu::RuSpec>& expectedCentral26TonesRus);
+
+    WifiModulationClass m_modClass; ///< the modulation class to consider for the test
+};
+
+WifiCentral26TonesRusInChannelTest::WifiCentral26TonesRusInChannelTest(WifiModulationClass modClass)
+    : TestCase{"Check returned set of 26-tone RUs in a given RU type and a given channel width "
+               "for " +
+               std::string((modClass == WIFI_MOD_CLASS_HE) ? "HE" : "EHT")},
+      m_modClass{modClass}
+{
+}
+
+void
+WifiCentral26TonesRusInChannelTest::RunOne(RuType rutype,
+                                           MHz_u width,
+                                           const std::vector<WifiRu::RuSpec>& expectedRus)
+{
+    auto printToStr = [](const std::vector<WifiRu::RuSpec>& v) {
+        std::stringstream ss;
+        ss << "{";
+        for (const auto& ru : v)
+        {
+            ss << ru << " ";
+        }
+        ss << "}";
+        return ss.str();
+    };
+
+    const auto actualRus = WifiRu::GetCentral26TonesRus(width, rutype, m_modClass);
+    NS_TEST_EXPECT_MSG_EQ((actualRus == expectedRus),
+                          true,
+                          "Channel width=" << width << ", RU type=" << rutype
+                                           << ". Expected 26-tone RUs " << printToStr(expectedRus)
+                                           << " differs from actual 26-tone RUs "
+                                           << printToStr(actualRus));
+}
+
+void
+WifiCentral26TonesRusInChannelTest::DoRun()
+{
+    const auto p80{true};
+    const auto s80{false};
+    const auto p160{(m_modClass == WIFI_MOD_CLASS_HE) ? std::nullopt : std::optional(true)};
+
+    /******************
+     * 20 MHz channel *
+     ******************/
+    {
+        const MHz_u width{20};
+
+        // returned set should be empty for 26-tones RUs
+        RunOne(RuType::RU_26_TONE, width, {});
+
+        // there is room for 1 center 26-tone RU when 52-tone RUs are used over 20 MHz
+        RunOne(RuType::RU_52_TONE, width, {MakeRuSpec(RuType::RU_26_TONE, 5, p80, p160)});
+
+        // there is room for 1 center 26-tone RU when 106-tone RUs are used over 20 MHz
+        RunOne(RuType::RU_106_TONE, width, {MakeRuSpec(RuType::RU_26_TONE, 5, p80, p160)});
+
+        // there is no room for center 26-tone RUs when 242-tone RUs are used over 20 MHz
+        RunOne(RuType::RU_242_TONE, width, {});
+    }
+
+    /******************
+     * 40 MHz channel *
+     ******************/
+    {
+        const MHz_u width{40};
+
+        // returned set should be empty for 26-tones RUs
+        RunOne(RuType::RU_26_TONE, width, {});
+
+        // there is room for 2 center 26-tone RUs when 52-tone RUs are used over 40 MHz
+        RunOne(RuType::RU_52_TONE,
+               width,
+               {MakeRuSpec(RuType::RU_26_TONE, 5, p80, p160),
+                MakeRuSpec(RuType::RU_26_TONE, 14, p80, p160)});
+
+        // there is room for 2 center 26-tone RUs when 106-tone RUs are used over 40 MHz
+        RunOne(RuType::RU_106_TONE,
+               width,
+               {MakeRuSpec(RuType::RU_26_TONE, 5, p80, p160),
+                MakeRuSpec(RuType::RU_26_TONE, 14, p80, p160)});
+
+        // there is no room for center 26-tone RUs when 242-tone RUs are used over 40 MHz
+        RunOne(RuType::RU_242_TONE, width, {});
+
+        // there is no room for center 26-tone RUs when 484-tone RUs are used over 40 MHz
+        RunOne(RuType::RU_484_TONE, width, {});
+    }
+
+    /******************
+     * 80 MHz channel *
+     ******************/
+    {
+        const MHz_u width{80};
+
+        // returned set should be empty for 26-tones RUs
+        RunOne(RuType::RU_26_TONE, width, {});
+
+        // there is room for 5 (1 less for EHT) center 26-tone RUs when
+        // 52-tone/106-tone/242-tone/484-tone RUs are used over 80 MHz
+        std::vector<WifiRu::RuSpec> expectedCentral26TonesRus{
+            MakeRuSpec(RuType::RU_26_TONE, 5, p80, p160),
+            MakeRuSpec(RuType::RU_26_TONE, 14, p80, p160),
+            MakeRuSpec(RuType::RU_26_TONE, 24, p80, p160),
+            MakeRuSpec(RuType::RU_26_TONE, 33, p80, p160)};
+        std::vector<WifiRu::RuSpec> extraCentral26TonesRus{};
+        if (m_modClass == WIFI_MOD_CLASS_HE) // RU 19 is undefined for EHT
+        {
+            HeRu::RuSpec central26TonesRu{RuType::RU_26_TONE, 19, p80};
+            extraCentral26TonesRus.emplace_back(central26TonesRu);
+            const auto it = std::next(expectedCentral26TonesRus.cbegin(), 2);
+            expectedCentral26TonesRus.insert(it, central26TonesRu);
+        }
+
+        RunOne(RuType::RU_52_TONE, width, expectedCentral26TonesRus);
+        RunOne(RuType::RU_106_TONE, width, expectedCentral26TonesRus);
+
+        RunOne(RuType::RU_242_TONE, width, extraCentral26TonesRus);
+        RunOne(RuType::RU_484_TONE, width, extraCentral26TonesRus);
+
+        // there is no room for center 26-tone RUs when 996-tone RUs are used over 80 MHz
+        RunOne(RuType::RU_996_TONE, width, {});
+    }
+
+    /******************
+     * 160 MHz channel *
+     ******************/
+    {
+        const MHz_u width{160};
+
+        // returned set should be empty for 26-tones RUs
+        RunOne(RuType::RU_26_TONE, width, {});
+
+        // there is room for 10 (2 less for EHT) center 26-tone RUs when
+        // 52-tone/106-tone/242-tone/484-tone RUs are used over 80 MHz
+        std::vector<WifiRu::RuSpec> expectedCentral26TonesRus{
+            MakeRuSpec(RuType::RU_26_TONE, 5, p80, p160),
+            MakeRuSpec(RuType::RU_26_TONE, 14, p80, p160),
+            MakeRuSpec(RuType::RU_26_TONE, 24, p80, p160),
+            MakeRuSpec(RuType::RU_26_TONE, 33, p80, p160),
+            MakeRuSpec(RuType::RU_26_TONE, 5, s80, p160),
+            MakeRuSpec(RuType::RU_26_TONE, 14, s80, p160),
+            MakeRuSpec(RuType::RU_26_TONE, 24, s80, p160),
+            MakeRuSpec(RuType::RU_26_TONE, 33, s80, p160)};
+        std::vector<WifiRu::RuSpec> extraCentral26TonesRus{};
+        if (m_modClass == WIFI_MOD_CLASS_HE) // RU 19 and RU 56 are undefined for EHT
+        {
+            {
+                HeRu::RuSpec central26TonesRu{RuType::RU_26_TONE, 19, p80};
+                extraCentral26TonesRus.emplace_back(central26TonesRu);
+                const auto it = std::next(expectedCentral26TonesRus.cbegin(), 2);
+                expectedCentral26TonesRus.insert(it, central26TonesRu);
+            }
+            {
+                HeRu::RuSpec central26TonesRu{RuType::RU_26_TONE, 19, s80};
+                extraCentral26TonesRus.emplace_back(central26TonesRu);
+                const auto it = std::next(expectedCentral26TonesRus.cbegin(), 7);
+                expectedCentral26TonesRus.insert(it, central26TonesRu);
+            }
+        }
+
+        RunOne(RuType::RU_52_TONE, width, expectedCentral26TonesRus);
+        RunOne(RuType::RU_106_TONE, width, expectedCentral26TonesRus);
+
+        RunOne(RuType::RU_242_TONE, width, extraCentral26TonesRus);
+        RunOne(RuType::RU_484_TONE, width, extraCentral26TonesRus);
+
+        // there is no room for center 26-tone RUs when 996-tone/2x996-tone RUs are used over 160
+        // MHz
+        RunOne(RuType::RU_996_TONE, width, {});
+        RunOne(RuType::RU_2x996_TONE, width, {});
+    }
+}
+
+/**
+ * @ingroup wifi-test
+ * @ingroup tests
+ *
+ * @brief Test the WifiRu::GetEqualSizedRusForStations() method.
+ */
+class WifiEqualSizedRusTest : public TestCase
+{
+  public:
+    /**
+     * Constructor
+     *
+     * @param modClass the modulation class to distinguish 802.11ax and 802.11be
+     */
+    WifiEqualSizedRusTest(WifiModulationClass modClass);
+
+    /**
+     * Check the maximization of the number of candidate stations that can be assigned
+     * a RU subject to the constraint that all the stations must be assigned a RU
+     * of the same size as computed by GetEqualSizedRusForStations() is correct.
+     *
+     * @param width the width of the channel to check
+     * @param numStas the number of candidate stations we want to assign a RU
+     * @param expectedNumStas the expected number of candidate stations that can be assigned a RU
+     * @param expectedNumCentral26TonesRus the expected number of additional 26-tone RUs that can be
+     * allocated @param expectedRuType the expected RU type
+     */
+    void RunOne(MHz_u width,
+                std::size_t numStas,
+                std::size_t expectedNumStas,
+                std::size_t expectedNumCentral26TonesRus,
+                RuType expectedRuType);
+
+  private:
+    void DoRun() override;
+
+    WifiModulationClass m_modClass; ///< the modulation class to consider for the test
+};
+
+WifiEqualSizedRusTest::WifiEqualSizedRusTest(WifiModulationClass modClass)
+    : TestCase{"Check computation of the number of equal sized RUs for a given channel width for " +
+               std::string((modClass == WIFI_MOD_CLASS_HE) ? "HE" : "EHT")},
+      m_modClass{modClass}
+{
+}
+
+void
+WifiEqualSizedRusTest::RunOne(MHz_u width,
+                              std::size_t numStas,
+                              std::size_t expectedNumStas,
+                              std::size_t expectedNumCentral26TonesRus,
+                              RuType expectedRuType)
+{
+    std::size_t actualNumStas{numStas};
+    std::size_t actualNumCentral26TonesRus{0};
+    const auto actualRuType = WifiRu::GetEqualSizedRusForStations(width,
+                                                                  actualNumStas,
+                                                                  actualNumCentral26TonesRus,
+                                                                  m_modClass);
+    NS_TEST_EXPECT_MSG_EQ(
+        actualNumStas,
+        expectedNumStas,
+        "Channel width=" << width << " MHz. Expected number of candidate stations "
+                         << expectedNumStas << " differs from actual number of candidate stations "
+                         << actualNumStas);
+    NS_TEST_EXPECT_MSG_EQ(actualNumCentral26TonesRus,
+                          expectedNumCentral26TonesRus,
+                          "Channel width="
+                              << width << " MHz. Expected number of additional 26-tone RUs "
+                              << expectedNumStas
+                              << " differs from actual number of additional 26-tone RUs "
+                              << actualNumStas);
+    NS_TEST_EXPECT_MSG_EQ(actualRuType,
+                          expectedRuType,
+                          "Channel width=" << width << " MHz. Expected RU type " << expectedRuType
+                                           << " differs from actual RU type " << actualRuType);
+}
+
+void
+WifiEqualSizedRusTest::DoRun()
+{
+    /******************
+     * 20 MHz channel *
+     ******************/
+    {
+        const MHz_u width{20};
+
+        // 1 STA using 242-tone RU and no center 26-tone RU available over a 20 MHz channel can be
+        // allocated for 1 candidate station
+        RunOne(width, 1, 1, 0, RuType::RU_242_TONE);
+
+        // 2 STAs using 106-tone RUs and 1 center 26-tone RU available over a 20 MHz channel can be
+        // allocated for 2 candidate stations
+        RunOne(width, 2, 2, 1, RuType::RU_106_TONE);
+
+        // 2 STAs using 106-tone RUs and 1 center 26-tone RU available over a 20 MHz channel can be
+        // allocated for 3 candidate stations
+        RunOne(width, 3, 2, 1, RuType::RU_106_TONE);
+
+        // 4 STAs using 52-tone RUs and 1 center 26-tone RU available over a 20 MHz channel can be
+        // allocated for 4 candidate stations
+        RunOne(width, 4, 4, 1, RuType::RU_52_TONE);
+
+        // 4 STAs using 52-tone RUs and 1 center 26-tone RU available over a 20 MHz channel can be
+        // allocated for 5 candidate stations
+        RunOne(width, 5, 4, 1, RuType::RU_52_TONE);
+
+        // 4 STAs using 52-tone RUs and 1 center 26-tone RU available over a 20 MHz channel can be
+        // allocated for 6 candidate stations
+        RunOne(width, 6, 4, 1, RuType::RU_52_TONE);
+
+        // 4 STAs using 52-tone RUs and 1 center 26-tone RU available over a 20 MHz channel can be
+        // allocated for 7 candidate stations
+        RunOne(width, 7, 4, 1, RuType::RU_52_TONE);
+
+        // 4 STAs using 52-tone RUs and 1 center 26-tone RU available over a 20 MHz channel can be
+        // allocated for 8 candidate stations
+        RunOne(width, 8, 4, 1, RuType::RU_52_TONE);
+
+        // 9 STAs using 26-tone RUs and no center 26-tone RU available over a 20 MHz channel can be
+        // allocated for 9 candidate stations
+        RunOne(width, 9, 9, 0, RuType::RU_26_TONE);
+
+        // 9 STAs using 26-tone RUs over a 20 MHz channel can be allocated for 10 candidate stations
+        RunOne(width, 10, 9, 0, RuType::RU_26_TONE);
+    }
+
+    /******************
+     * 40 MHz channel *
+     ******************/
+    {
+        const MHz_u width{40};
+
+        // 1 STA using 484-tone RU and no center 26-tone RU available over a 40 MHz channel can be
+        // allocated for 1 candidate station
+        RunOne(width, 1, 1, 0, RuType::RU_484_TONE);
+
+        // 2 STAs using 242-tone RUs and no center 26-tone RU available over a 40 MHz channel can be
+        // allocated for 2 candidate stations
+        RunOne(width, 2, 2, 0, RuType::RU_242_TONE);
+
+        // 2 STAs using 242-tone RUs and no center 26-tone RU available over a 40 MHz channel can be
+        // allocated for 3 candidate stations
+        RunOne(width, 3, 2, 0, RuType::RU_242_TONE);
+
+        // 4 STAs using 106-tone RUs and 2 center 26-tone RUs available over a 40 MHz channel can be
+        // allocated for 4 candidate stations
+        RunOne(width, 4, 4, 2, RuType::RU_106_TONE);
+
+        // 4 STAs using 106-tone RUs and 2 center 26-tone RUs available over a 40 MHz channel can be
+        // allocated for 5 candidate stations
+        RunOne(width, 5, 4, 2, RuType::RU_106_TONE);
+
+        // 4 STAs using 106-tone RUs and 2 center 26-tone RUs available over a 40 MHz channel can be
+        // allocated for 6 candidate stations
+        RunOne(width, 6, 4, 2, RuType::RU_106_TONE);
+
+        // 4 STAs using 106-tone RUs and 2 center 26-tone RUs available over a 40 MHz channel can be
+        // allocated for 7 candidate stations
+        RunOne(width, 7, 4, 2, RuType::RU_106_TONE);
+
+        // 8 STAs using 52-tone RUs and 2 center 26-tone RUs available over a 40 MHz channel can be
+        // allocated for 8 candidate stations
+        RunOne(width, 8, 8, 2, RuType::RU_52_TONE);
+
+        // 8 STAs using 52-tone RUs and 2 center 26-tone RUs available over a 40 MHz channel can be
+        // allocated for 9 candidate stations
+        RunOne(width, 9, 8, 2, RuType::RU_52_TONE);
+
+        // 8 STAs using 52-tone RUs and 2 center 26-tone RUs available over a 40 MHz channel can be
+        // allocated for 10 candidate stations
+        RunOne(width, 10, 8, 2, RuType::RU_52_TONE);
+
+        // 8 STAs using 52-tone RUs and 2 center 26-tone RUs available over a 40 MHz channel can be
+        // allocated for 11 candidate stations
+        RunOne(width, 11, 8, 2, RuType::RU_52_TONE);
+
+        // 8 STAs using 52-tone RUs and 2 center 26-tone RUs available over a 40 MHz channel can be
+        // allocated for 12 candidate stations
+        RunOne(width, 12, 8, 2, RuType::RU_52_TONE);
+
+        // 8 STAs using 52-tone RUs and 2 center 26-tone RUs available over a 40 MHz channel can be
+        // allocated for 13 candidate stations
+        RunOne(width, 13, 8, 2, RuType::RU_52_TONE);
+
+        // 8 STAs using 52-tone RUs and 2 center 26-tone RUs available over a 40 MHz channel can be
+        // allocated for 14 candidate stations
+        RunOne(width, 14, 8, 2, RuType::RU_52_TONE);
+
+        // 8 STAs using 52-tone RUs and 2 center 26-tone RUs available over a 40 MHz channel can be
+        // allocated for 15 candidate stations
+        RunOne(width, 15, 8, 2, RuType::RU_52_TONE);
+
+        // 8 STAs using 52-tone RUs and 2 center 26-tone RUs available over a 40 MHz channel can be
+        // allocated for 16 candidate stations
+        RunOne(width, 16, 8, 2, RuType::RU_52_TONE);
+
+        // 8 STAs using 52-tone RUs and 2 center 26-tone RUs available over a 40 MHz channel can be
+        // allocated for 17 candidate stations
+        RunOne(width, 17, 8, 2, RuType::RU_52_TONE);
+
+        // 18 STAs using 26-tone RUs over a 40 MHz channel can be allocated for 18 candidate
+        // stations
+        RunOne(width, 18, 18, 0, RuType::RU_26_TONE);
+
+        // 18 STAs using 26-tone RUs over a 40 MHz channel can be allocated for 19 candidate
+        // stations
+        RunOne(width, 19, 18, 0, RuType::RU_26_TONE);
+    }
+
+    /******************
+     * 80 MHz channel *
+     ******************/
+    {
+        const MHz_u width{80};
+
+        // 1 STA using 996-tone RU and no center 26-tone RU available over a 80 MHz channel can be
+        // allocated for 11 candidate stations for 1 candidate station
+        RunOne(width, 1, 1, 0, RuType::RU_996_TONE);
+
+        // 2 STAs using 484-tone RUs and 1 center 26-tone RU (HE only) available over a 80 MHz
+        // channel can be allocated for 2 candidate stations
+        RunOne(width, 2, 2, (m_modClass == WIFI_MOD_CLASS_HE) ? 1 : 0, RuType::RU_484_TONE);
+
+        // 2 STAs using 484-tone RUs and 1 center 26-tone RU (HE only) available over a 80 MHz
+        // channel can be allocated for 3 candidate stations
+        RunOne(width, 3, 2, (m_modClass == WIFI_MOD_CLASS_HE) ? 1 : 0, RuType::RU_484_TONE);
+
+        // 4 STAs using 242-tone RUs and 1 center 26-tone RU (HE only) available over a 80 MHz
+        // channel can be allocated for 4 candidate stations
+        RunOne(width, 4, 4, (m_modClass == WIFI_MOD_CLASS_HE) ? 1 : 0, RuType::RU_242_TONE);
+
+        // 4 STAs using 242-tone RUs and 1 center 26-tone RU (HE only) available over a 80 MHz
+        // channel can be allocated for 5 candidate stations
+        RunOne(width, 5, 4, (m_modClass == WIFI_MOD_CLASS_HE) ? 1 : 0, RuType::RU_242_TONE);
+
+        // 4 STAs using 242-tone RUs and 1 center 26-tone RU (HE only) available over a 80 MHz
+        // channel can be allocated for 6 candidate stations
+        RunOne(width, 6, 4, (m_modClass == WIFI_MOD_CLASS_HE) ? 1 : 0, RuType::RU_242_TONE);
+
+        // 4 STAs using 242-tone RUs and 1 center 26-tone RU (HE only) available over a 80 MHz
+        // channel can be allocated for 7 candidate stations
+        RunOne(width, 7, 4, (m_modClass == WIFI_MOD_CLASS_HE) ? 1 : 0, RuType::RU_242_TONE);
+
+        // 8 STAs using 106-tone RUs and 5 center 26-tone RUs (1 less for EHT) available over a 80
+        // MHz channel can be allocated for 8 candidate stations
+        RunOne(width, 8, 8, (m_modClass == WIFI_MOD_CLASS_HE) ? 5 : 4, RuType::RU_106_TONE);
+
+        // 8 STAs using 106-tone RUs and 5 center 26-tone RUs (1 less for EHT) available over a 80
+        // MHz channel can be allocated for 9 candidate stations
+        RunOne(width, 9, 8, (m_modClass == WIFI_MOD_CLASS_HE) ? 5 : 4, RuType::RU_106_TONE);
+
+        // 8 STAs using 106-tone RUs and 5 center 26-tone RUs (1 less for EHT) available over a 80
+        // MHz channel can be allocated for 10 candidate stations
+        RunOne(width, 10, 8, (m_modClass == WIFI_MOD_CLASS_HE) ? 5 : 4, RuType::RU_106_TONE);
+
+        // 8 STAs using 106-tone RUs and 5 center 26-tone RUs (1 less for EHT) available over a 80
+        // MHz channel can be allocated for 11 candidate stations
+        RunOne(width, 11, 8, (m_modClass == WIFI_MOD_CLASS_HE) ? 5 : 4, RuType::RU_106_TONE);
+
+        // 8 STAs using 106-tone RUs and 5 center 26-tone RUs (1 less for EHT) available over a 80
+        // MHz channel can be allocated for 11 candidate stations for 12 candidate stations
+        RunOne(width, 12, 8, (m_modClass == WIFI_MOD_CLASS_HE) ? 5 : 4, RuType::RU_106_TONE);
+
+        // 8 STAs using 106-tone RUs and 5 center 26-tone RUs (1 less for EHT) available over a 80
+        // MHz channel can be allocated for 11 candidate stations for 13 candidate stations
+        RunOne(width, 13, 8, (m_modClass == WIFI_MOD_CLASS_HE) ? 5 : 4, RuType::RU_106_TONE);
+
+        // 8 STAs using 106-tone RUs and 5 center 26-tone RUs (1 less for EHT) available over a 80
+        // MHz channel can be allocated for 11 candidate stations for 14 candidate stations
+        RunOne(width, 14, 8, (m_modClass == WIFI_MOD_CLASS_HE) ? 5 : 4, RuType::RU_106_TONE);
+
+        // 8 STAs using 106-tone RUs and 5 center 26-tone RUs (1 less for EHT) available over a 80
+        // MHz channel can be allocated for 11 candidate stations for 15 candidate stations
+        RunOne(width, 15, 8, (m_modClass == WIFI_MOD_CLASS_HE) ? 5 : 4, RuType::RU_106_TONE);
+
+        // 16 STAs using 52-tone RUs and 5 center 26-tone RUs (1 less for EHT) available over a 80
+        // MHz channel can be allocated for 11 candidate stations for 16 candidate stations
+        RunOne(width, 16, 16, (m_modClass == WIFI_MOD_CLASS_HE) ? 5 : 4, RuType::RU_52_TONE);
+
+        // 16 STAs using 52-tone RUs and 5 center 26-tone RUs (1 less for EHT) available over a 80
+        // MHz channel can be allocated for 11 candidate stations for 17 candidate stations
+        RunOne(width, 17, 16, (m_modClass == WIFI_MOD_CLASS_HE) ? 5 : 4, RuType::RU_52_TONE);
+
+        // 16 STAs using 52-tone RUs and 5 center 26-tone RUs (1 less for EHT) available over a 80
+        // MHz channel can be allocated for 11 candidate stations for 18 candidate stations
+        RunOne(width, 18, 16, (m_modClass == WIFI_MOD_CLASS_HE) ? 5 : 4, RuType::RU_52_TONE);
+
+        // 16 STAs using 52-tone RUs and 5 center 26-tone RUs (1 less for EHT) available over a 80
+        // MHz channel can be allocated for 11 candidate stations for 19 candidate stations
+        RunOne(width, 19, 16, (m_modClass == WIFI_MOD_CLASS_HE) ? 5 : 4, RuType::RU_52_TONE);
+
+        // 16 STAs using 52-tone RUs and 5 center 26-tone RUs (1 less for EHT) available over a 80
+        // MHz channel can be allocated for 11 candidate stations for 20 candidate stations
+        RunOne(width, 20, 16, (m_modClass == WIFI_MOD_CLASS_HE) ? 5 : 4, RuType::RU_52_TONE);
+
+        // 16 STAs using 52-tone RUs and 5 center 26-tone RUs (1 less for EHT) available over a 80
+        // MHz channel can be allocated for 11 candidate stations for 21 candidate stations
+        RunOne(width, 21, 16, (m_modClass == WIFI_MOD_CLASS_HE) ? 5 : 4, RuType::RU_52_TONE);
+
+        // 16 STAs using 52-tone RUs and 5 center 26-tone RUs (1 less for EHT) available over a 80
+        // MHz channel can be allocated for 11 candidate stations for 22 candidate stations
+        RunOne(width, 22, 16, (m_modClass == WIFI_MOD_CLASS_HE) ? 5 : 4, RuType::RU_52_TONE);
+
+        // 16 STAs using 52-tone RUs and 5 center 26-tone RUs (1 less for EHT) available over a 80
+        // MHz channel can be allocated for 11 candidate stations for 23 candidate stations
+        RunOne(width, 23, 16, (m_modClass == WIFI_MOD_CLASS_HE) ? 5 : 4, RuType::RU_52_TONE);
+
+        // 16 STAs using 52-tone RUs and 5 center 26-tone RUs (1 less for EHT) available over a 80
+        // MHz channel can be allocated for 11 candidate stations for 24 candidate stations
+        RunOne(width, 24, 16, (m_modClass == WIFI_MOD_CLASS_HE) ? 5 : 4, RuType::RU_52_TONE);
+
+        // 16 STAs using 52-tone RUs and 5 center 26-tone RUs (1 less for EHT) available over a 80
+        // MHz channel can be allocated for 11 candidate stations for 25 candidate stations
+        RunOne(width, 25, 16, (m_modClass == WIFI_MOD_CLASS_HE) ? 5 : 4, RuType::RU_52_TONE);
+
+        // 16 STAs using 52-tone RUs and 5 center 26-tone RUs (1 less for EHT) available over a 80
+        // MHz channel can be allocated for 11 candidate stations for 26 candidate stations
+        RunOne(width, 26, 16, (m_modClass == WIFI_MOD_CLASS_HE) ? 5 : 4, RuType::RU_52_TONE);
+
+        // 16 STAs using 52-tone RUs and 5 center 26-tone RUs (1 less for EHT) available over a 80
+        // MHz channel can be allocated for 11 candidate stations for 27 candidate stations
+        RunOne(width, 27, 16, (m_modClass == WIFI_MOD_CLASS_HE) ? 5 : 4, RuType::RU_52_TONE);
+
+        // 16 STAs using 52-tone RUs and 5 center 26-tone RUs (1 less for EHT) available over a 80
+        // MHz channel can be allocated for 11 candidate stations for 28 candidate stations
+        RunOne(width, 28, 16, (m_modClass == WIFI_MOD_CLASS_HE) ? 5 : 4, RuType::RU_52_TONE);
+
+        // 16 STAs using 52-tone RUs and 5 center 26-tone RUs (1 less for EHT) available over a 80
+        // MHz channel can be allocated for 11 candidate stations for 29 candidate stations
+        RunOne(width, 29, 16, (m_modClass == WIFI_MOD_CLASS_HE) ? 5 : 4, RuType::RU_52_TONE);
+
+        // 16 STAs using 52-tone RUs and 5 center 26-tone RUs (1 less for EHT) available over a 80
+        // MHz channel can be allocated for 11 candidate stations for 30 candidate stations
+        RunOne(width, 30, 16, (m_modClass == WIFI_MOD_CLASS_HE) ? 5 : 4, RuType::RU_52_TONE);
+
+        // 16 STAs using 52-tone RUs and 5 center 26-tone RUs (1 less for EHT) available over a 80
+        // MHz channel can be allocated for 11 candidate stations for 31 candidate stations
+        RunOne(width, 31, 16, (m_modClass == WIFI_MOD_CLASS_HE) ? 5 : 4, RuType::RU_52_TONE);
+
+        // 16 STAs using 52-tone RUs and 5 center 26-tone RUs (1 less for EHT) available over a 80
+        // MHz channel can be allocated for 11 candidate stations for 31 candidate stations
+        RunOne(width, 31, 16, (m_modClass == WIFI_MOD_CLASS_HE) ? 5 : 4, RuType::RU_52_TONE);
+
+        // 16 STAs using 52-tone RUs and 5 center 26-tone RUs (1 less for EHT) available over a 80
+        // MHz channel can be allocated for 11 candidate stations for 32 candidate stations
+        RunOne(width, 32, 16, (m_modClass == WIFI_MOD_CLASS_HE) ? 5 : 4, RuType::RU_52_TONE);
+
+        // 16 STAs using 52-tone RUs and 5 center 26-tone RUs (1 less for EHT) available over a 80
+        // MHz channel can be allocated for 11 candidate stations for 33 candidate stations
+        RunOne(width, 33, 16, (m_modClass == WIFI_MOD_CLASS_HE) ? 5 : 4, RuType::RU_52_TONE);
+
+        // 16 STAs using 52-tone RUs and 5 center 26-tone RUs (1 less for EHT) available over a 80
+        // MHz channel can be allocated for 11 candidate stations for 34 candidate stations
+        RunOne(width, 34, 16, (m_modClass == WIFI_MOD_CLASS_HE) ? 5 : 4, RuType::RU_52_TONE);
+
+        // 16 STAs using 52-tone RUs and 5 center 26-tone RUs (1 less for EHT) available over a 80
+        // MHz channel can be allocated for 11 candidate stations for 35 candidate stations
+        RunOne(width, 35, 16, (m_modClass == WIFI_MOD_CLASS_HE) ? 5 : 4, RuType::RU_52_TONE);
+
+        // 16 STAs (36 for EHT) using 52-tone RUs (26-tone RUs for EHT) and 5 center 26-tone RUs
+        // (HE only) available over a 80 MHz channel can be allocated for 11 candidate stations for
+        // 36 candidate stations
+        RunOne(width,
+               36,
+               (m_modClass == WIFI_MOD_CLASS_HE) ? 16 : 36,
+               (m_modClass == WIFI_MOD_CLASS_HE) ? 5 : 0,
+               (m_modClass == WIFI_MOD_CLASS_HE) ? RuType::RU_52_TONE : RuType::RU_26_TONE);
+
+        // 37 STAs (36 for EHT) using 26-tone RUs over a 80 MHz channel can be allocated for 37
+        // candidate stations
+        RunOne(width, 37, (m_modClass == WIFI_MOD_CLASS_HE) ? 37 : 36, 0, RuType::RU_26_TONE);
+
+        // 37 STAs (36 for EHT) using 26-tone RUs over a 80 MHz channel can be allocated for 38
+        // candidate stations
+        RunOne(width, 38, (m_modClass == WIFI_MOD_CLASS_HE) ? 37 : 36, 0, RuType::RU_26_TONE);
+    }
+
+    /******************
+     * 160 MHz channel *
+     ******************/
+    {
+        const MHz_u width{160};
+
+        // 1 STA using 2x996-tone RU and no center 26-tone RU available over a 160 MHz channel can
+        // be allocated for 1 candidate station
+        RunOne(width, 1, 1, 0, RuType::RU_2x996_TONE);
+
+        // 2 STAs using 996-tone RUs and no center 26-tone RU available over a 160 MHz channel can
+        // be allocated for 2 candidate stations
+        RunOne(width, 2, 2, 0, RuType::RU_996_TONE);
+
+        // 2 STAs using 996-tone RUs and no center 26-tone RU available over a 160 MHz channel can
+        // be allocated for 3 candidate stations
+        RunOne(width, 3, 2, 0, RuType::RU_996_TONE);
+
+        // 4 STAs using 484-tone RUs and 2 center 26-tone RUs (HE only) available over a 160 MHz
+        // channel can be allocated for 4 candidate stations
+        RunOne(width, 4, 4, (m_modClass == WIFI_MOD_CLASS_HE) ? 2 : 0, RuType::RU_484_TONE);
+
+        // 4 STAs using 484-tone RUs and 2 center 26-tone RUs (HE only) available over a 160 MHz
+        // channel can be allocated for 5 candidate stations
+        RunOne(width, 5, 4, (m_modClass == WIFI_MOD_CLASS_HE) ? 2 : 0, RuType::RU_484_TONE);
+
+        // 4 STAs using 484-tone RUs and 2 center 26-tone RUs (HE only) available over a 160 MHz
+        // channel can be allocated for 6 candidate stations
+        RunOne(width, 6, 4, (m_modClass == WIFI_MOD_CLASS_HE) ? 2 : 0, RuType::RU_484_TONE);
+
+        // 4 STAs using 484-tone RUs and 2 center 26-tone RUs (HE only) available over a 160 MHz
+        // channel can be allocated for 7 candidate stations
+        RunOne(width, 7, 4, (m_modClass == WIFI_MOD_CLASS_HE) ? 2 : 0, RuType::RU_484_TONE);
+
+        // 8 STAs using 242-tone RUs and 2 center 26-tone RUs (HE only) available over a 160 MHz
+        // channel can be allocated for 8 candidate stations
+        RunOne(width, 8, 8, (m_modClass == WIFI_MOD_CLASS_HE) ? 2 : 0, RuType::RU_242_TONE);
+
+        // 8 STAs using 242-tone RUs and 2 center 26-tone RUs (HE only) available over a 160 MHz
+        // channel can be allocated for 9 candidate stations
+        RunOne(width, 9, 8, (m_modClass == WIFI_MOD_CLASS_HE) ? 2 : 0, RuType::RU_242_TONE);
+
+        // 8 STAs using 242-tone RUs and 2 center 26-tone RUs (HE only) available over a 160 MHz
+        // channel can be allocated for 10 candidate stations
+        RunOne(width, 10, 8, (m_modClass == WIFI_MOD_CLASS_HE) ? 2 : 0, RuType::RU_242_TONE);
+
+        // 8 STAs using 242-tone RUs and 2 center 26-tone RUs (HE only) available over a 160 MHz
+        // channel can be allocated for 11 candidate stations
+        RunOne(width, 11, 8, (m_modClass == WIFI_MOD_CLASS_HE) ? 2 : 0, RuType::RU_242_TONE);
+
+        // 8 STAs using 242-tone RUs and 2 center 26-tone RUs (HE only) available over a 160 MHz
+        // channel can be allocated for 12 candidate stations
+        RunOne(width, 12, 8, (m_modClass == WIFI_MOD_CLASS_HE) ? 2 : 0, RuType::RU_242_TONE);
+
+        // 8 STAs using 242-tone RUs and 2 center 26-tone RUs (HE only) available over a 160 MHz
+        // channel can be allocated for 13 candidate stations
+        RunOne(width, 13, 8, (m_modClass == WIFI_MOD_CLASS_HE) ? 2 : 0, RuType::RU_242_TONE);
+
+        // 8 STAs using 242-tone RUs and 2 center 26-tone RUs (HE only) available over a 160 MHz
+        // channel can be allocated for 14 candidate stations
+        RunOne(width, 14, 8, (m_modClass == WIFI_MOD_CLASS_HE) ? 2 : 0, RuType::RU_242_TONE);
+
+        // 8 STAs using 242-tone RUs and 2 center 26-tone RUs (HE only) available over a 160 MHz
+        // channel can be allocated for 15 candidate stations
+        RunOne(width, 15, 8, (m_modClass == WIFI_MOD_CLASS_HE) ? 2 : 0, RuType::RU_242_TONE);
+
+        // 16 STAs using 106-tone RUs and 10 center 26-tone RUs (2 less for EHT) available over a
+        // 160 MHz channel can be allocated for 16 candidate stations
+        RunOne(width, 16, 16, (m_modClass == WIFI_MOD_CLASS_HE) ? 10 : 8, RuType::RU_106_TONE);
+
+        // 16 STAs using 106-tone RUs and 10 center 26-tone RUs (2 less for EHT) available over a
+        // 160 MHz channel can be allocated for 17 candidate stations
+        RunOne(width, 17, 16, (m_modClass == WIFI_MOD_CLASS_HE) ? 10 : 8, RuType::RU_106_TONE);
+
+        // 16 STAs using 106-tone RUs and 10 center 26-tone RUs (2 less for EHT) available over a
+        // 160 MHz channel can be allocated for 18 candidate stations
+        RunOne(width, 18, 16, (m_modClass == WIFI_MOD_CLASS_HE) ? 10 : 8, RuType::RU_106_TONE);
+
+        // 16 STAs using 106-tone RUs and 10 center 26-tone RUs (2 less for EHT) available over a
+        // 160 MHz channel can be allocated for 19 candidate stations
+        RunOne(width, 19, 16, (m_modClass == WIFI_MOD_CLASS_HE) ? 10 : 8, RuType::RU_106_TONE);
+
+        // 16 STAs using 106-tone RUs and 10 center 26-tone RUs (2 less for EHT) available over a
+        // 160 MHz channel can be allocated for 20 candidate stations
+        RunOne(width, 20, 16, (m_modClass == WIFI_MOD_CLASS_HE) ? 10 : 8, RuType::RU_106_TONE);
+
+        // 16 STAs using 106-tone RUs and 10 center 26-tone RUs (2 less for EHT) available over a
+        // 160 MHz channel can be allocated for 21 candidate stations
+        RunOne(width, 21, 16, (m_modClass == WIFI_MOD_CLASS_HE) ? 10 : 8, RuType::RU_106_TONE);
+
+        // 16 STAs using 106-tone RUs and 10 center 26-tone RUs (2 less for EHT) available over a
+        // 160 MHz channel can be allocated for 22 candidate stations
+        RunOne(width, 22, 16, (m_modClass == WIFI_MOD_CLASS_HE) ? 10 : 8, RuType::RU_106_TONE);
+
+        // 16 STAs using 106-tone RUs and 10 center 26-tone RUs (2 less for EHT) available over a
+        // 160 MHz channel can be allocated for 23 candidate stations
+        RunOne(width, 23, 16, (m_modClass == WIFI_MOD_CLASS_HE) ? 10 : 8, RuType::RU_106_TONE);
+
+        // 16 STAs using 106-tone RUs and 10 center 26-tone RUs (2 less for EHT) available over a
+        // 160 MHz channel can be allocated for 24 candidate stations
+        RunOne(width, 24, 16, (m_modClass == WIFI_MOD_CLASS_HE) ? 10 : 8, RuType::RU_106_TONE);
+
+        // 16 STAs using 106-tone RUs and 10 center 26-tone RUs (2 less for EHT) available over a
+        // 160 MHz channel can be allocated for 25 candidate stations
+        RunOne(width, 25, 16, (m_modClass == WIFI_MOD_CLASS_HE) ? 10 : 8, RuType::RU_106_TONE);
+
+        // 16 STAs using 106-tone RUs and 10 center 26-tone RUs (2 less for EHT) available over a
+        // 160 MHz channel can be allocated for 26 candidate stations
+        RunOne(width, 26, 16, (m_modClass == WIFI_MOD_CLASS_HE) ? 10 : 8, RuType::RU_106_TONE);
+
+        // 16 STAs using 106-tone RUs and 10 center 26-tone RUs (2 less for EHT) available over a
+        // 160 MHz channel can be allocated for 27 candidate stations
+        RunOne(width, 27, 16, (m_modClass == WIFI_MOD_CLASS_HE) ? 10 : 8, RuType::RU_106_TONE);
+
+        // 16 STAs using 106-tone RUs and 10 center 26-tone RUs (2 less for EHT) available over a
+        // 160 MHz channel can be allocated for 28 candidate stations
+        RunOne(width, 28, 16, (m_modClass == WIFI_MOD_CLASS_HE) ? 10 : 8, RuType::RU_106_TONE);
+
+        // 16 STAs using 106-tone RUs and 10 center 26-tone RUs (2 less for EHT) available over a
+        // 160 MHz channel can be allocated for 29 candidate stations
+        RunOne(width, 29, 16, (m_modClass == WIFI_MOD_CLASS_HE) ? 10 : 8, RuType::RU_106_TONE);
+
+        // 16 STAs using 106-tone RUs and 10 center 26-tone RUs (2 less for EHT) available over a
+        // 160 MHz channel can be allocated for 30 candidate stations
+        RunOne(width, 30, 16, (m_modClass == WIFI_MOD_CLASS_HE) ? 10 : 8, RuType::RU_106_TONE);
+
+        // 16 STAs using 106-tone RUs and 10 center 26-tone RUs (2 less for EHT) available over a
+        // 160 MHz channel can be allocated for 31 candidate stations
+        RunOne(width, 31, 16, (m_modClass == WIFI_MOD_CLASS_HE) ? 10 : 8, RuType::RU_106_TONE);
+
+        // 32 STAs using 52-tone RUs and 10 center 26-tone RUs (2 less for EHT) available over a 160
+        // MHz channel can be allocated for 32 candidate stations
+        RunOne(width, 32, 32, (m_modClass == WIFI_MOD_CLASS_HE) ? 10 : 8, RuType::RU_52_TONE);
+
+        // 32 STAs using 52-tone RUs and 10 center 26-tone RUs (2 less for EHT) available over a 160
+        // MHz channel can be allocated for 33 candidate stations
+        RunOne(width, 33, 32, (m_modClass == WIFI_MOD_CLASS_HE) ? 10 : 8, RuType::RU_52_TONE);
+
+        // 32 STAs using 52-tone RUs and 10 center 26-tone RUs (2 less for EHT) available over a 160
+        // MHz channel can be allocated for 34 candidate stations
+        RunOne(width, 34, 32, (m_modClass == WIFI_MOD_CLASS_HE) ? 10 : 8, RuType::RU_52_TONE);
+
+        // 32 STAs using 52-tone RUs and 10 center 26-tone RUs (2 less for EHT) available over a 160
+        // MHz channel can be allocated for 35 candidate stations
+        RunOne(width, 35, 32, (m_modClass == WIFI_MOD_CLASS_HE) ? 10 : 8, RuType::RU_52_TONE);
+
+        // 32 STAs using 52-tone RUs and 10 center 26-tone RUs (2 less for EHT) available over a 160
+        // MHz channel can be allocated for 36 candidate stations
+        RunOne(width, 36, 32, (m_modClass == WIFI_MOD_CLASS_HE) ? 10 : 8, RuType::RU_52_TONE);
+
+        // 32 STAs using 52-tone RUs and 10 center 26-tone RUs (2 less for EHT) available over a 160
+        // MHz channel can be allocated for 37 candidate stations
+        RunOne(width, 37, 32, (m_modClass == WIFI_MOD_CLASS_HE) ? 10 : 8, RuType::RU_52_TONE);
+
+        // 32 STAs using 52-tone RUs and 10 center 26-tone RUs (2 less for EHT) available over a 160
+        // MHz channel can be allocated for 38 candidate stations
+        RunOne(width, 38, 32, (m_modClass == WIFI_MOD_CLASS_HE) ? 10 : 8, RuType::RU_52_TONE);
+
+        // 32 STAs using 52-tone RUs and 10 center 26-tone RUs (2 less for EHT) available over a 160
+        // MHz channel can be allocated for 39 candidate stations
+        RunOne(width, 39, 32, (m_modClass == WIFI_MOD_CLASS_HE) ? 10 : 8, RuType::RU_52_TONE);
+
+        // 32 STAs using 52-tone RUs and 10 center 26-tone RUs (2 less for EHT) available over a 160
+        // MHz channel can be allocated for 40 candidate stations
+        RunOne(width, 40, 32, (m_modClass == WIFI_MOD_CLASS_HE) ? 10 : 8, RuType::RU_52_TONE);
+
+        // 32 STAs using 52-tone RUs and 10 center 26-tone RUs (2 less for EHT) available over a 160
+        // MHz channel can be allocated for 41 candidate stations
+        RunOne(width, 41, 32, (m_modClass == WIFI_MOD_CLASS_HE) ? 10 : 8, RuType::RU_52_TONE);
+
+        // 32 STAs using 52-tone RUs and 10 center 26-tone RUs (2 less for EHT) available over a 160
+        // MHz channel can be allocated for 42 candidate stations
+        RunOne(width, 42, 32, (m_modClass == WIFI_MOD_CLASS_HE) ? 10 : 8, RuType::RU_52_TONE);
+
+        // 32 STAs using 52-tone RUs and 10 center 26-tone RUs (2 less for EHT) available over a 160
+        // MHz channel can be allocated for 43 candidate stations
+        RunOne(width, 43, 32, (m_modClass == WIFI_MOD_CLASS_HE) ? 10 : 8, RuType::RU_52_TONE);
+
+        // 32 STAs using 52-tone RUs and 10 center 26-tone RUs (2 less for EHT) available over a 160
+        // MHz channel can be allocated for 44 candidate stations
+        RunOne(width, 44, 32, (m_modClass == WIFI_MOD_CLASS_HE) ? 10 : 8, RuType::RU_52_TONE);
+
+        // 32 STAs using 52-tone RUs and 10 center 26-tone RUs (2 less for EHT) available over a 160
+        // MHz channel can be allocated for 45 candidate stations
+        RunOne(width, 45, 32, (m_modClass == WIFI_MOD_CLASS_HE) ? 10 : 8, RuType::RU_52_TONE);
+
+        // 32 STAs using 52-tone RUs and 10 center 26-tone RUs (2 less for EHT) available over a 160
+        // MHz channel can be allocated for 46 candidate stations
+        RunOne(width, 46, 32, (m_modClass == WIFI_MOD_CLASS_HE) ? 10 : 8, RuType::RU_52_TONE);
+
+        // 32 STAs using 52-tone RUs and 10 center 26-tone RUs (2 less for EHT) available over a 160
+        // MHz channel can be allocated for 47 candidate stations
+        RunOne(width, 47, 32, (m_modClass == WIFI_MOD_CLASS_HE) ? 10 : 8, RuType::RU_52_TONE);
+
+        // 32 STAs using 52-tone RUs and 10 center 26-tone RUs (2 less for EHT) available over a 160
+        // MHz channel can be allocated for 48 candidate stations
+        RunOne(width, 48, 32, (m_modClass == WIFI_MOD_CLASS_HE) ? 10 : 8, RuType::RU_52_TONE);
+
+        // 32 STAs using 52-tone RUs and 10 center 26-tone RUs (2 less for EHT) available over a 160
+        // MHz channel can be allocated for 49 candidate stations
+        RunOne(width, 49, 32, (m_modClass == WIFI_MOD_CLASS_HE) ? 10 : 8, RuType::RU_52_TONE);
+
+        // 32 STAs using 52-tone RUs and 10 center 26-tone RUs (2 less for EHT) available over a 160
+        // MHz channel can be allocated for 50 candidate stations
+        RunOne(width, 50, 32, (m_modClass == WIFI_MOD_CLASS_HE) ? 10 : 8, RuType::RU_52_TONE);
+
+        // 32 STAs using 52-tone RUs and 10 center 26-tone RUs (2 less for EHT) available over a 160
+        // MHz channel can be allocated for 51 candidate stations
+        RunOne(width, 51, 32, (m_modClass == WIFI_MOD_CLASS_HE) ? 10 : 8, RuType::RU_52_TONE);
+
+        // 32 STAs using 52-tone RUs and 10 center 26-tone RUs (2 less for EHT) available over a 160
+        // MHz channel can be allocated for 52 candidate stations
+        RunOne(width, 52, 32, (m_modClass == WIFI_MOD_CLASS_HE) ? 10 : 8, RuType::RU_52_TONE);
+
+        // 32 STAs using 52-tone RUs and 10 center 26-tone RUs (2 less for EHT) available over a 160
+        // MHz channel can be allocated for 53 candidate stations
+        RunOne(width, 53, 32, (m_modClass == WIFI_MOD_CLASS_HE) ? 10 : 8, RuType::RU_52_TONE);
+
+        // 32 STAs using 52-tone RUs and 10 center 26-tone RUs (2 less for EHT) available over a 160
+        // MHz channel can be allocated for 54 candidate stations
+        RunOne(width, 54, 32, (m_modClass == WIFI_MOD_CLASS_HE) ? 10 : 8, RuType::RU_52_TONE);
+
+        // 32 STAs using 52-tone RUs and 10 center 26-tone RUs (2 less for EHT) available over a 160
+        // MHz channel can be allocated for 55 candidate stations
+        RunOne(width, 55, 32, (m_modClass == WIFI_MOD_CLASS_HE) ? 10 : 8, RuType::RU_52_TONE);
+
+        // 32 STAs using 52-tone RUs and 10 center 26-tone RUs (2 less for EHT) available over a 160
+        // MHz channel can be allocated for 56 candidate stations
+        RunOne(width, 56, 32, (m_modClass == WIFI_MOD_CLASS_HE) ? 10 : 8, RuType::RU_52_TONE);
+
+        // 32 STAs using 52-tone RUs and 10 center 26-tone RUs (2 less for EHT) available over a 160
+        // MHz channel can be allocated for 57 candidate stations
+        RunOne(width, 57, 32, (m_modClass == WIFI_MOD_CLASS_HE) ? 10 : 8, RuType::RU_52_TONE);
+
+        // 32 STAs using 52-tone RUs and 10 center 26-tone RUs (2 less for EHT) available over a 160
+        // MHz channel can be allocated for 58 candidate stations
+        RunOne(width, 58, 32, (m_modClass == WIFI_MOD_CLASS_HE) ? 10 : 8, RuType::RU_52_TONE);
+
+        // 32 STAs using 52-tone RUs and 10 center 26-tone RUs (2 less for EHT) available over a 160
+        // MHz channel can be allocated for 59 candidate stations
+        RunOne(width, 59, 32, (m_modClass == WIFI_MOD_CLASS_HE) ? 10 : 8, RuType::RU_52_TONE);
+
+        // 32 STAs using 52-tone RUs and 10 center 26-tone RUs (2 less for EHT) available over a 160
+        // MHz channel can be allocated for 60 candidate stations
+        RunOne(width, 60, 32, (m_modClass == WIFI_MOD_CLASS_HE) ? 10 : 8, RuType::RU_52_TONE);
+
+        // 32 STAs using 52-tone RUs and 10 center 26-tone RUs (2 less for EHT) available over a 160
+        // MHz channel can be allocated for 61 candidate stations
+        RunOne(width, 61, 32, (m_modClass == WIFI_MOD_CLASS_HE) ? 10 : 8, RuType::RU_52_TONE);
+
+        // 32 STAs using 52-tone RUs and 10 center 26-tone RUs (2 less for EHT) available over a 160
+        // MHz channel can be allocated for 62 candidate stations
+        RunOne(width, 62, 32, (m_modClass == WIFI_MOD_CLASS_HE) ? 10 : 8, RuType::RU_52_TONE);
+
+        // 32 STAs using 52-tone RUs and 10 center 26-tone RUs (2 less for EHT) available over a 160
+        // MHz channel can be allocated for 63 candidate stations
+        RunOne(width, 63, 32, (m_modClass == WIFI_MOD_CLASS_HE) ? 10 : 8, RuType::RU_52_TONE);
+
+        // 32 STAs using 52-tone RUs and 10 center 26-tone RUs (2 less for EHT) available over a 160
+        // MHz channel can be allocated for 64 candidate stations
+        RunOne(width, 64, 32, (m_modClass == WIFI_MOD_CLASS_HE) ? 10 : 8, RuType::RU_52_TONE);
+
+        // 32 STAs using 52-tone RUs and 10 center 26-tone RUs (2 less for EHT) available over a 160
+        // MHz channel can be allocated for 65 candidate stations
+        RunOne(width, 65, 32, (m_modClass == WIFI_MOD_CLASS_HE) ? 10 : 8, RuType::RU_52_TONE);
+
+        // 32 STAs using 52-tone RUs and 10 center 26-tone RUs (2 less for EHT) available over a 160
+        // MHz channel can be allocated for 66 candidate stations
+        RunOne(width, 66, 32, (m_modClass == WIFI_MOD_CLASS_HE) ? 10 : 8, RuType::RU_52_TONE);
+
+        // 32 STAs using 52-tone RUs and 10 center 26-tone RUs (2 less for EHT) available over a 160
+        // MHz channel can be allocated for 67 candidate stations
+        RunOne(width, 67, 32, (m_modClass == WIFI_MOD_CLASS_HE) ? 10 : 8, RuType::RU_52_TONE);
+
+        // 32 STAs using 52-tone RUs and 10 center 26-tone RUs (2 less for EHT) available over a 160
+        // MHz channel can be allocated for 68 candidate stations
+        RunOne(width, 68, 32, (m_modClass == WIFI_MOD_CLASS_HE) ? 10 : 8, RuType::RU_52_TONE);
+
+        // 32 STAs using 52-tone RUs and 10 center 26-tone RUs (2 less for EHT) available over a 160
+        // MHz channel can be allocated for 69 candidate stations
+        RunOne(width, 69, 32, (m_modClass == WIFI_MOD_CLASS_HE) ? 10 : 8, RuType::RU_52_TONE);
+
+        // 32 STAs using 52-tone RUs and 10 center 26-tone RUs (2 less for EHT) available over a 160
+        // MHz channel can be allocated for 70 candidate stations
+        RunOne(width, 70, 32, (m_modClass == WIFI_MOD_CLASS_HE) ? 10 : 8, RuType::RU_52_TONE);
+
+        // 32 STAs using 52-tone RUs and 10 center 26-tone RUs (2 less for EHT) available over a 160
+        // MHz channel can be allocated for 71 candidate stations
+        RunOne(width, 71, 32, (m_modClass == WIFI_MOD_CLASS_HE) ? 10 : 8, RuType::RU_52_TONE);
+
+        // 32 STAs (72 for EHT) using 52-tone RUs (26-tone RUs for EHT) and 10 center 26-tone RUs
+        // (HE only) available over a 160 MHz channel can be allocated for 72 candidate stations
+        RunOne(width,
+               72,
+               (m_modClass == WIFI_MOD_CLASS_HE) ? 32 : 72,
+               (m_modClass == WIFI_MOD_CLASS_HE) ? 10 : 0,
+               (m_modClass == WIFI_MOD_CLASS_HE) ? RuType::RU_52_TONE : RuType::RU_26_TONE);
+
+        // 32 STAs (72 for EHT) using 52-tone RUs (26-tone RUs for EHT) and 10 center 26-tone RUs
+        // (HE only) available over a 160 MHz channel can be allocated for 73 candidate stations
+        RunOne(width,
+               73,
+               (m_modClass == WIFI_MOD_CLASS_HE) ? 32 : 72,
+               (m_modClass == WIFI_MOD_CLASS_HE) ? 10 : 0,
+               (m_modClass == WIFI_MOD_CLASS_HE) ? RuType::RU_52_TONE : RuType::RU_26_TONE);
+
+        // 74 STAs (72 for EHT) using 26-tone RUs over a 160 MHz channel can be allocated for 74
+        // candidate stations
+        RunOne(width, 74, (m_modClass == WIFI_MOD_CLASS_HE) ? 74 : 72, 0, RuType::RU_26_TONE);
+
+        // 74 STAs (72 for EHT) using 26-tone RUs over a 160 MHz channel can be allocated for 75
+        // candidate stations
+        RunOne(width, 75, (m_modClass == WIFI_MOD_CLASS_HE) ? 74 : 72, 0, RuType::RU_26_TONE);
+    }
+}
+
+/**
+ * @ingroup wifi-test
+ * @ingroup tests
+ *
+ * @brief Test the WifiRu::GetSubcarrierGroup() method.
+ */
+class WifiSubcarrierGroupsTest : public TestCase
+{
+  public:
+    /**
+     * Constructor
+     *
+     * @param modClass the modulation class to distinguish 802.11ax and 802.11be
+     */
+    WifiSubcarrierGroupsTest(WifiModulationClass modClass);
+
+    /**
+     * Check the subcarrier group as returned
+     * by GetSubcarrierGroup() is correct.
+     *
+     * @param width the width of the channel to check
+     * @param ruType the RU type to check
+     * @param phyIndex the PHY index to check
+     * @param expectedSubcarrierGroup the expected subcarrier range
+     */
+    void RunOne(MHz_u width,
+                RuType ruType,
+                std::size_t phyIndex,
+                const SubcarrierGroup& expectedSubcarrierGroup);
+
+  private:
+    void DoRun() override;
+
+    WifiModulationClass m_modClass; ///< the modulation class to consider for the test
+};
+
+WifiSubcarrierGroupsTest::WifiSubcarrierGroupsTest(WifiModulationClass modClass)
+    : TestCase{"Check computation of the subcarrier groups for " +
+               std::string((modClass == WIFI_MOD_CLASS_HE) ? "HE" : "EHT")},
+      m_modClass{modClass}
+{
+}
+
+void
+WifiSubcarrierGroupsTest::RunOne(MHz_u width,
+                                 RuType ruType,
+                                 std::size_t phyIndex,
+                                 const SubcarrierGroup& expectedSubcarrierGroup)
+{
+    auto printToStr = [](const SubcarrierGroup& groups) {
+        std::stringstream ss;
+        ss << "{ ";
+        for (const auto& group : groups)
+        {
+            ss << "(" << group.first << ", " << group.second << ") ";
+        }
+        ss << "}";
+        return ss.str();
+    };
+
+    const auto actualSubcarrierGroup =
+        WifiRu::GetSubcarrierGroup(width, ruType, phyIndex, m_modClass);
+    NS_TEST_EXPECT_MSG_EQ((actualSubcarrierGroup == expectedSubcarrierGroup),
+                          true,
+                          "Channel width=" << width << ", RU type=" << ruType << ", PHY index="
+                                           << phyIndex << ". Expected subcarrier groups "
+                                           << printToStr(expectedSubcarrierGroup)
+                                           << " differs from actual subcarrier groups "
+                                           << printToStr(actualSubcarrierGroup));
+}
+
+void
+WifiSubcarrierGroupsTest::DoRun()
+{
+    const std::map<BwTonesPair, std::vector<SubcarrierGroup>> expectedHeRuSubcarrierGroups = {
+        {{MHz_u{20}, RuType::RU_26_TONE},
+         {/* 1 */ {{-121, -96}},
+          /* 2 */ {{-95, -70}},
+          /* 3 */ {{-68, -43}},
+          /* 4 */ {{-42, -17}},
+          /* 5 */ {{-16, -4}, {4, 16}},
+          /* 6 */ {{17, 42}},
+          /* 7 */ {{43, 68}},
+          /* 8 */ {{70, 95}},
+          /* 9 */ {{96, 121}}}},
+        {{MHz_u{20}, RuType::RU_52_TONE},
+         {/* 1 */ {{-121, -70}},
+          /* 2 */ {{-68, -17}},
+          /* 3 */ {{17, 68}},
+          /* 4 */ {{70, 121}}}},
+        {{MHz_u{20}, RuType::RU_106_TONE},
+         {/* 1 */ {{-122, -17}},
+          /* 2 */ {{17, 122}}}},
+        {{MHz_u{20}, RuType::RU_242_TONE}, {/* 1 */ {{-122, -2}, {2, 122}}}},
+        {{MHz_u{40}, RuType::RU_26_TONE},
+         {/* 1 */ {{-243, -218}},
+          /* 2 */ {{-217, -192}},
+          /* 3 */ {{-189, -164}},
+          /* 4 */ {{-163, -138}},
+          /* 5 */ {{-136, -111}},
+          /* 6 */ {{-109, -84}},
+          /* 7 */ {{-83, -58}},
+          /* 8 */ {{-55, -30}},
+          /* 9 */ {{-29, -4}},
+          /* 10 */ {{4, 29}},
+          /* 11 */ {{30, 55}},
+          /* 12 */ {{58, 83}},
+          /* 13 */ {{84, 109}},
+          /* 14 */ {{111, 136}},
+          /* 15 */ {{138, 163}},
+          /* 16 */ {{164, 189}},
+          /* 17 */ {{192, 217}},
+          /* 18 */ {{218, 243}}}},
+        {{MHz_u{40}, RuType::RU_52_TONE},
+         {/* 1 */ {{-243, -192}},
+          /* 2 */ {{-189, -138}},
+          /* 3 */ {{-109, -58}},
+          /* 4 */ {{-55, -4}},
+          /* 5 */ {{4, 55}},
+          /* 6 */ {{58, 109}},
+          /* 7 */ {{138, 189}},
+          /* 8 */ {{192, 243}}}},
+        {{MHz_u{40}, RuType::RU_106_TONE},
+         {/* 1 */ {{-243, -138}},
+          /* 2 */ {{-109, -4}},
+          /* 3 */ {{4, 109}},
+          /* 4 */ {{138, 243}}}},
+        {{MHz_u{40}, RuType::RU_242_TONE},
+         {/* 1 */ {{-244, -3}},
+          /* 2 */ {{3, 244}}}},
+        {{MHz_u{40}, RuType::RU_484_TONE}, {/* 1 */ {{-244, -3}, {3, 244}}}},
+        {{MHz_u{80}, RuType::RU_26_TONE},
+         {/* 1 */ {{-499, -474}},
+          /* 2 */ {{-473, -448}},
+          /* 3 */ {{-445, -420}},
+          /* 4 */ {{-419, -394}},
+          /* 5 */ {{-392, -367}},
+          /* 6 */ {{-365, -340}},
+          /* 7 */ {{-339, -314}},
+          /* 8 */ {{-311, -286}},
+          /* 9 */ {{-285, -260}},
+          /* 10 */ {{-257, -232}},
+          /* 11 */ {{-231, -206}},
+          /* 12 */ {{-203, -178}},
+          /* 13 */ {{-177, -152}},
+          /* 14 */ {{-150, -125}},
+          /* 15 */ {{-123, -98}},
+          /* 16 */ {{-97, -72}},
+          /* 17 */ {{-69, -44}},
+          /* 18 */ {{-43, -18}},
+          /* 19 */ {{-16, -4}, {4, 16}},
+          /* 20 */ {{18, 43}},
+          /* 21 */ {{44, 69}},
+          /* 22 */ {{72, 97}},
+          /* 23 */ {{98, 123}},
+          /* 24 */ {{125, 150}},
+          /* 25 */ {{152, 177}},
+          /* 26 */ {{178, 203}},
+          /* 27 */ {{206, 231}},
+          /* 28 */ {{232, 257}},
+          /* 29 */ {{260, 285}},
+          /* 30 */ {{286, 311}},
+          /* 31 */ {{314, 339}},
+          /* 32 */ {{340, 365}},
+          /* 33 */ {{367, 392}},
+          /* 34 */ {{394, 419}},
+          /* 35 */ {{420, 445}},
+          /* 36 */ {{448, 473}},
+          /* 37 */ {{474, 499}}}},
+        {{MHz_u{80}, RuType::RU_52_TONE},
+         {/* 1 */ {{-499, -448}},
+          /* 2 */ {{-445, -394}},
+          /* 3 */ {{-365, -314}},
+          /* 4 */ {{-311, -260}},
+          /* 5 */ {{-257, -206}},
+          /* 6 */ {{-203, -152}},
+          /* 7 */ {{-123, -72}},
+          /* 8 */ {{-69, -18}},
+          /* 9 */ {{18, 69}},
+          /* 10 */ {{72, 123}},
+          /* 11 */ {{152, 203}},
+          /* 12 */ {{206, 257}},
+          /* 13 */ {{260, 311}},
+          /* 14 */ {{314, 365}},
+          /* 15 */ {{394, 445}},
+          /* 16 */ {{448, 499}}}},
+        {{MHz_u{80}, RuType::RU_106_TONE},
+         {/* 1 */ {{-499, -394}},
+          /* 2 */ {{-365, -260}},
+          /* 3 */ {{-257, -152}},
+          /* 4 */ {{-123, -18}},
+          /* 5 */ {{18, 123}},
+          /* 6 */ {{152, 257}},
+          /* 7 */ {{260, 365}},
+          /* 8 */ {{394, 499}}}},
+        {{MHz_u{80}, RuType::RU_242_TONE},
+         {/* 1 */ {{-500, -259}},
+          /* 2 */ {{-258, -17}},
+          /* 3 */ {{17, 258}},
+          /* 4 */ {{259, 500}}}},
+        {{MHz_u{80}, RuType::RU_484_TONE},
+         {/* 1 */ {{-500, -17}},
+          /* 2 */ {{17, 500}}}},
+        {{MHz_u{80}, RuType::RU_996_TONE}, {/* 1 */ {{-500, -3}, {3, 500}}}},
+        {{MHz_u{160}, RuType::RU_26_TONE},
+         {/* 1 */ {{-1011, -986}},
+          /* 2 */ {{-985, -960}},
+          /* 3 */ {{-957, -932}},
+          /* 4 */ {{-931, -906}},
+          /* 5 */ {{-904, -879}},
+          /* 6 */ {{-877, -852}},
+          /* 7 */ {{-851, -826}},
+          /* 8 */ {{-823, -798}},
+          /* 9 */ {{-797, -772}},
+          /* 10 */ {{-769, -744}},
+          /* 11 */ {{-743, -718}},
+          /* 12 */ {{-715, -690}},
+          /* 13 */ {{-689, -664}},
+          /* 14 */ {{-662, -637}},
+          /* 15 */ {{-635, -610}},
+          /* 16 */ {{-609, -584}},
+          /* 17 */ {{-581, -556}},
+          /* 18 */ {{-555, -530}},
+          /* 19 */ {{{-528, -516}, {-508, -496}}},
+          /* 20 */ {{-494, -469}},
+          /* 21 */ {{-468, -443}},
+          /* 22 */ {{-440, -415}},
+          /* 23 */ {{-414, -389}},
+          /* 24 */ {{-387, -362}},
+          /* 25 */ {{-360, -335}},
+          /* 26 */ {{-334, -309}},
+          /* 27 */ {{-306, -281}},
+          /* 28 */ {{-280, -255}},
+          /* 29 */ {{-252, -227}},
+          /* 30 */ {{-226, -201}},
+          /* 31 */ {{-198, -173}},
+          /* 32 */ {{-172, -147}},
+          /* 33 */ {{-145, -120}},
+          /* 34 */ {{-118, -93}},
+          /* 35 */ {{-92, -67}},
+          /* 36 */ {{-64, -39}},
+          /* 37 */ {{-38, -13}},
+          /* 38 */ {{13, 38}},
+          /* 39 */ {{39, 64}},
+          /* 40 */ {{67, 92}},
+          /* 41 */ {{93, 118}},
+          /* 42 */ {{120, 145}},
+          /* 43 */ {{147, 172}},
+          /* 44 */ {{173, 198}},
+          /* 45 */ {{201, 226}},
+          /* 46 */ {{227, 252}},
+          /* 47 */ {{255, 280}},
+          /* 48 */ {{281, 306}},
+          /* 49 */ {{309, 334}},
+          /* 50 */ {{335, 360}},
+          /* 51 */ {{362, 387}},
+          /* 52 */ {{389, 414}},
+          /* 53 */ {{415, 440}},
+          /* 54 */ {{443, 468}},
+          /* 55 */ {{469, 494}},
+          /* 56 */ {{496, 508}, {516, 528}},
+          /* 57 */ {{530, 555}},
+          /* 58 */ {{556, 581}},
+          /* 59 */ {{584, 609}},
+          /* 60 */ {{610, 635}},
+          /* 61 */ {{637, 662}},
+          /* 62 */ {{664, 689}},
+          /* 63 */ {{690, 715}},
+          /* 64 */ {{718, 743}},
+          /* 65 */ {{744, 769}},
+          /* 66 */ {{772, 797}},
+          /* 67 */ {{798, 823}},
+          /* 68 */ {{826, 851}},
+          /* 69 */ {{852, 877}},
+          /* 70 */ {{879, 904}},
+          /* 71 */ {{906, 931}},
+          /* 72 */ {{932, 957}},
+          /* 73 */ {{960, 985}},
+          /* 74 */ {{986, 1011}}}},
+        {{MHz_u{160}, RuType::RU_52_TONE},
+         {/* 1 */ {{-1011, -960}},
+          /* 2 */ {{-957, -906}},
+          /* 3 */ {{-877, -826}},
+          /* 4 */ {{-823, -772}},
+          /* 5 */ {{-769, -718}},
+          /* 6 */ {{-715, -664}},
+          /* 7 */ {{-635, -584}},
+          /* 8 */ {{-581, -530}},
+          /* 9 */ {{-494, -443}},
+          /* 10 */ {{-440, -389}},
+          /* 11 */ {{-360, -309}},
+          /* 12 */ {{-306, -255}},
+          /* 13 */ {{-252, -201}},
+          /* 14 */ {{-198, -147}},
+          /* 15 */ {{-118, -67}},
+          /* 16 */ {{-64, -13}},
+          /* 17 */ {{13, 64}},
+          /* 18 */ {{67, 118}},
+          /* 19 */ {{147, 198}},
+          /* 20 */ {{201, 252}},
+          /* 21 */ {{255, 306}},
+          /* 22 */ {{309, 360}},
+          /* 23 */ {{389, 440}},
+          /* 24 */ {{443, 494}},
+          /* 25 */ {{530, 581}},
+          /* 26 */ {{584, 635}},
+          /* 27 */ {{664, 715}},
+          /* 28 */ {{718, 769}},
+          /* 29 */ {{772, 823}},
+          /* 30 */ {{826, 877}},
+          /* 31 */ {{906, 957}},
+          /* 32 */ {{960, 1011}}}},
+        {{MHz_u{160}, RuType::RU_106_TONE},
+         {/* 1 */ {{-1011, -906}},
+          /* 2 */ {{-877, -772}},
+          /* 3 */ {{-769, -664}},
+          /* 4 */ {{-635, -530}},
+          /* 5 */ {{-494, -389}},
+          /* 6 */ {{-360, -255}},
+          /* 7 */ {{-252, -147}},
+          /* 8 */ {{-118, -13}},
+          /* 9 */ {{13, 118}},
+          /* 10 */ {{147, 252}},
+          /* 11 */ {{255, 360}},
+          /* 12 */ {{389, 494}},
+          /* 13 */ {{530, 635}},
+          /* 14 */ {{664, 769}},
+          /* 15 */ {{772, 877}},
+          /* 16 */ {{906, 1011}}}},
+        {{MHz_u{160}, RuType::RU_242_TONE},
+         {/* 1 */ {{-1012, -771}},
+          /* 2 */ {{-770, -529}},
+          /* 3 */ {{-495, -254}},
+          /* 4 */ {{-253, -12}},
+          /* 5 */ {{12, 253}},
+          /* 6 */ {{254, 495}},
+          /* 7 */ {{529, 770}},
+          /* 8 */ {{771, 1012}}}},
+        {{MHz_u{160}, RuType::RU_484_TONE},
+         {/* 1 */ {{-1012, -529}},
+          /* 2 */ {{-495, -12}},
+          /* 3 */ {{12, 495}},
+          /* 4 */ {{529, 1012}}}},
+        {{MHz_u{160}, RuType::RU_996_TONE},
+         {/* 1 */ {{-1012, -515}, {-509, -12}},
+          /* 2 */ {{12, 509}, {515, 1012}}}},
+        {{MHz_u{160}, RuType::RU_2x996_TONE},
+         {/* 1 */ {{-1012, -515}, {-509, -12}, {12, 509}, {515, 1012}}}},
+    };
+
+    const std::map<BwTonesPair, std::vector<SubcarrierGroup>> expectedEhtRuSubcarrierGroups = {
+        {{MHz_u{20}, RuType::RU_26_TONE},
+         {/* 1 */ {{-121, -96}},
+          /* 2 */ {{-95, -70}},
+          /* 3 */ {{-68, -43}},
+          /* 4 */ {{-42, -17}},
+          /* 5 */ {{-16, -4}, {4, 16}},
+          /* 6 */ {{17, 42}},
+          /* 7 */ {{43, 68}},
+          /* 8 */ {{70, 95}},
+          /* 9 */ {{96, 121}}}},
+        {{MHz_u{20}, RuType::RU_52_TONE},
+         {/* 1 */ {{-121, -70}},
+          /* 2 */ {{-68, -17}},
+          /* 3 */ {{17, 68}},
+          /* 4 */ {{70, 121}}}},
+        {{MHz_u{20}, RuType::RU_106_TONE},
+         {/* 1 */ {{-122, -17}},
+          /* 2 */ {{17, 122}}}},
+        {{MHz_u{20}, RuType::RU_242_TONE}, {/* 1 */ {{-122, -2}, {2, 122}}}},
+        {{MHz_u{40}, RuType::RU_26_TONE},
+         {/* 1 */ {{-243, -218}},
+          /* 2 */ {{-217, -192}},
+          /* 3 */ {{-189, -164}},
+          /* 4 */ {{-163, -138}},
+          /* 5 */ {{-136, -111}},
+          /* 6 */ {{-109, -84}},
+          /* 7 */ {{-83, -58}},
+          /* 8 */ {{-55, -30}},
+          /* 9 */ {{-29, -4}},
+          /* 10 */ {{4, 29}},
+          /* 11 */ {{30, 55}},
+          /* 12 */ {{58, 83}},
+          /* 13 */ {{84, 109}},
+          /* 14 */ {{111, 136}},
+          /* 15 */ {{138, 163}},
+          /* 16 */ {{164, 189}},
+          /* 17 */ {{192, 217}},
+          /* 18 */ {{218, 243}}}},
+        {{MHz_u{40}, RuType::RU_52_TONE},
+         {/* 1 */ {{-243, -192}},
+          /* 2 */ {{-189, -138}},
+          /* 3 */ {{-109, -58}},
+          /* 4 */ {{-55, -4}},
+          /* 5 */ {{4, 55}},
+          /* 6 */ {{58, 109}},
+          /* 7 */ {{138, 189}},
+          /* 8 */ {{192, 243}}}},
+        {{MHz_u{40}, RuType::RU_106_TONE},
+         {/* 1 */ {{-243, -138}},
+          /* 2 */ {{-109, -4}},
+          /* 3 */ {{4, 109}},
+          /* 4 */ {{138, 243}}}},
+        {{MHz_u{40}, RuType::RU_242_TONE},
+         {/* 1 */ {{-244, -3}},
+          /* 2 */ {{3, 244}}}},
+        {{MHz_u{40}, RuType::RU_484_TONE}, {/* 1 */ {{-244, -3}, {3, 244}}}},
+        {{MHz_u{80}, RuType::RU_26_TONE},
+         {/* 1 */ {{-499, -474}},
+          /* 2 */ {{-473, -448}},
+          /* 3 */ {{-445, -420}},
+          /* 4 */ {{-419, -394}},
+          /* 5 */ {{-392, -367}},
+          /* 6 */ {{-365, -340}},
+          /* 7 */ {{-339, -314}},
+          /* 8 */ {{-311, -286}},
+          /* 9 */ {{-285, -260}},
+          /* 10 */ {{-252, -227}},
+          /* 11 */ {{-226, -201}},
+          /* 12 */ {{-198, -173}},
+          /* 13 */ {{-172, -147}},
+          /* 14 */ {{-145, -120}},
+          /* 15 */ {{-118, -93}},
+          /* 16 */ {{-92, -67}},
+          /* 17 */ {{-64, -39}},
+          /* 18 */ {{-38, -13}},
+          /* 19 not defined */ {},
+          /* 20 */ {{13, 38}},
+          /* 21 */ {{39, 64}},
+          /* 22 */ {{67, 92}},
+          /* 23 */ {{93, 118}},
+          /* 24 */ {{120, 145}},
+          /* 25 */ {{147, 172}},
+          /* 26 */ {{173, 198}},
+          /* 27 */ {{201, 226}},
+          /* 28 */ {{227, 252}},
+          /* 29 */ {{260, 285}},
+          /* 30 */ {{286, 311}},
+          /* 31 */ {{314, 339}},
+          /* 32 */ {{340, 365}},
+          /* 33 */ {{367, 392}},
+          /* 34 */ {{394, 419}},
+          /* 35 */ {{420, 445}},
+          /* 36 */ {{448, 473}},
+          /* 37 */ {{474, 499}}}},
+        {{MHz_u{80}, RuType::RU_52_TONE},
+         {/* 1 */ {{-499, -448}},
+          /* 2 */ {{-445, -394}},
+          /* 3 */ {{-365, -314}},
+          /* 4 */ {{-311, -260}},
+          /* 5 */ {{-252, -201}},
+          /* 6 */ {{-198, -147}},
+          /* 7 */ {{-118, -67}},
+          /* 8 */ {{-64, -13}},
+          /* 9 */ {{13, 64}},
+          /* 10 */ {{67, 118}},
+          /* 11 */ {{147, 198}},
+          /* 12 */ {{201, 252}},
+          /* 13 */ {{260, 311}},
+          /* 14 */ {{314, 365}},
+          /* 15 */ {{394, 445}},
+          /* 16 */ {{448, 499}}}},
+        {{MHz_u{80}, RuType::RU_106_TONE},
+         {/* 1 */ {{-499, -394}},
+          /* 2 */ {{-365, -260}},
+          /* 3 */ {{-252, -147}},
+          /* 4 */ {{-118, -13}},
+          /* 5 */ {{13, 118}},
+          /* 6 */ {{147, 252}},
+          /* 7 */ {{260, 365}},
+          /* 8 */ {{394, 499}}}},
+        {{MHz_u{80}, RuType::RU_242_TONE},
+         {/* 1 */ {{-500, -259}},
+          /* 2 */ {{-253, -12}},
+          /* 3 */ {{12, 253}},
+          /* 4 */ {{259, 500}}}},
+        {{MHz_u{80}, RuType::RU_484_TONE},
+         {/* 1 */ {{-500, -259}, {-253, -12}},
+          /* 2 */ {{12, 253}, {259, 500}}}},
+        {{MHz_u{80}, RuType::RU_996_TONE}, {/* 1 */ {{-500, -3}, {3, 500}}}},
+        {{MHz_u{160}, RuType::RU_26_TONE},
+         {/* 1 */ {{-1011, -986}},
+          /* 2 */ {{-985, -960}},
+          /* 3 */ {{-957, -932}},
+          /* 4 */ {{-931, -906}},
+          /* 5 */ {{-904, -879}},
+          /* 6 */ {{-877, -852}},
+          /* 7 */ {{-851, -826}},
+          /* 8 */ {{-823, -798}},
+          /* 9 */ {{-797, -772}},
+          /* 10 */ {{-764, -739}},
+          /* 11 */ {{-738, -713}},
+          /* 12 */ {{-710, -685}},
+          /* 13 */ {{-684, -659}},
+          /* 14 */ {{-657, -632}},
+          /* 15 */ {{-630, -605}},
+          /* 16 */ {{-604, -579}},
+          /* 17 */ {{-576, -551}},
+          /* 18 */ {{-550, -525}},
+          /* 19 not defined */ {},
+          /* 20 */ {{-499, -474}},
+          /* 21 */ {{-473, -448}},
+          /* 22 */ {{-445, -420}},
+          /* 23 */ {{-419, -394}},
+          /* 24 */ {{-392, -367}},
+          /* 25 */ {{-365, -340}},
+          /* 26 */ {{-339, -314}},
+          /* 27 */ {{-311, -286}},
+          /* 28 */ {{-285, -260}},
+          /* 29 */ {{-252, -227}},
+          /* 30 */ {{-226, -201}},
+          /* 31 */ {{-198, -173}},
+          /* 32 */ {{-172, -147}},
+          /* 33 */ {{-145, -120}},
+          /* 34 */ {{-118, -93}},
+          /* 35 */ {{-92, -67}},
+          /* 36 */ {{-64, -39}},
+          /* 37 */ {{-38, -13}},
+          /* 38 */ {{13, 38}},
+          /* 39 */ {{39, 64}},
+          /* 40 */ {{67, 92}},
+          /* 41 */ {{93, 118}},
+          /* 42 */ {{120, 145}},
+          /* 43 */ {{147, 172}},
+          /* 44 */ {{173, 198}},
+          /* 45 */ {{201, 226}},
+          /* 46 */ {{227, 252}},
+          /* 47 */ {{260, 285}},
+          /* 48 */ {{286, 311}},
+          /* 49 */ {{314, 339}},
+          /* 50 */ {{340, 365}},
+          /* 51 */ {{367, 392}},
+          /* 52 */ {{394, 419}},
+          /* 53 */ {{420, 445}},
+          /* 54 */ {{448, 473}},
+          /* 55 */ {{474, 499}},
+          /* 56 not defined */ {},
+          /* 57 */ {{525, 550}},
+          /* 58 */ {{551, 576}},
+          /* 59 */ {{579, 604}},
+          /* 60 */ {{605, 630}},
+          /* 61 */ {{632, 657}},
+          /* 62 */ {{659, 684}},
+          /* 63 */ {{685, 710}},
+          /* 64 */ {{713, 738}},
+          /* 65 */ {{739, 764}},
+          /* 66 */ {{772, 797}},
+          /* 67 */ {{798, 823}},
+          /* 68 */ {{826, 851}},
+          /* 69 */ {{852, 877}},
+          /* 70 */ {{879, 904}},
+          /* 71 */ {{906, 931}},
+          /* 72 */ {{932, 957}},
+          /* 73 */ {{960, 985}},
+          /* 74 */ {{986, 1011}}}},
+        {{MHz_u{160}, RuType::RU_52_TONE},
+         {/* 1 */ {{-1011, -960}},
+          /* 2 */ {{-957, -906}},
+          /* 3 */ {{-877, -826}},
+          /* 4 */ {{-823, -772}},
+          /* 5 */ {{-764, -713}},
+          /* 6 */ {{-710, -659}},
+          /* 7 */ {{-630, -579}},
+          /* 8 */ {{-576, -525}},
+          /* 9 */ {{-499, -448}},
+          /* 10 */ {{-445, -394}},
+          /* 11 */ {{-365, -314}},
+          /* 12 */ {{-311, -260}},
+          /* 13 */ {{-252, -201}},
+          /* 14 */ {{-198, -147}},
+          /* 15 */ {{-118, -67}},
+          /* 16 */ {{-64, -13}},
+          /* 17 */ {{13, 64}},
+          /* 18 */ {{67, 118}},
+          /* 19 */ {{147, 198}},
+          /* 20 */ {{201, 252}},
+          /* 21 */ {{260, 311}},
+          /* 22 */ {{314, 365}},
+          /* 23 */ {{394, 445}},
+          /* 24 */ {{448, 499}},
+          /* 25 */ {{525, 576}},
+          /* 26 */ {{579, 630}},
+          /* 27 */ {{659, 710}},
+          /* 28 */ {{713, 764}},
+          /* 29 */ {{772, 823}},
+          /* 30 */ {{826, 877}},
+          /* 31 */ {{906, 957}},
+          /* 32 */ {{960, 1011}}}},
+        {{MHz_u{160}, RuType::RU_106_TONE},
+         {/* 1 */ {{-1011, -906}},
+          /* 2 */ {{-877, -772}},
+          /* 3 */ {{-764, -659}},
+          /* 4 */ {{-630, -525}},
+          /* 5 */ {{-499, -394}},
+          /* 6 */ {{-365, -260}},
+          /* 7 */ {{-252, -147}},
+          /* 8 */ {{-118, -13}},
+          /* 9 */ {{13, 118}},
+          /* 10 */ {{147, 252}},
+          /* 11 */ {{260, 365}},
+          /* 12 */ {{394, 499}},
+          /* 13 */ {{525, 630}},
+          /* 14 */ {{659, 764}},
+          /* 15 */ {{772, 877}},
+          /* 16 */ {{906, 1011}}}},
+        {{MHz_u{160}, RuType::RU_242_TONE},
+         {/* 1 */ {{-1012, -771}},
+          /* 2 */ {{-765, -524}},
+          /* 3 */ {{-500, -259}},
+          /* 4 */ {{-253, -12}},
+          /* 5 */ {{12, 253}},
+          /* 6 */ {{259, 500}},
+          /* 7 */ {{524, 765}},
+          /* 8 */ {{771, 1012}}}},
+        {{MHz_u{160}, RuType::RU_484_TONE},
+         {/* 1 */ {{-1012, -771}, {-765, -524}},
+          /* 2 */ {{-500, -259}, {-253, -12}},
+          /* 3 */ {{12, 253}, {259, 500}},
+          /* 4 */ {{524, 765}, {771, 1012}}}},
+        {{MHz_u{160}, RuType::RU_996_TONE},
+         {/* 1 */ {{-1012, -515}, {-509, -12}},
+          /* 2 */ {{12, 509}, {515, 1012}}}},
+        {{MHz_u{160}, RuType::RU_2x996_TONE},
+         {/* 1 */ {{-1012, -515}, {-509, -12}, {12, 509}, {515, 1012}}}},
+        {{MHz_u{320}, RuType::RU_26_TONE},
+         {/* 1 */ {{-2035, -2010}},
+          /* 2 */ {{-2009, -1984}},
+          /* 3 */ {{-1981, -1956}},
+          /* 4 */ {{-1955, -1930}},
+          /* 5 */ {{-1928, -1903}},
+          /* 6 */ {{-1901, -1876}},
+          /* 7 */ {{-1875, -1850}},
+          /* 8 */ {{-1847, -1822}},
+          /* 9 */ {{-1821, -1796}},
+          /* 10 */ {{-1788, -1763}},
+          /* 11 */ {{-1762, -1737}},
+          /* 12 */ {{-1734, -1709}},
+          /* 13 */ {{-1708, -1683}},
+          /* 14 */ {{-1681, -1656}},
+          /* 15 */ {{-1654, -1629}},
+          /* 16 */ {{-1628, -1603}},
+          /* 17 */ {{-1600, -1575}},
+          /* 18 */ {{-1574, -1549}},
+          /* 19 not defined */ {},
+          /* 20 */ {{-1523, -1498}},
+          /* 21 */ {{-1497, -1472}},
+          /* 22 */ {{-1469, -1444}},
+          /* 23 */ {{-1443, -1418}},
+          /* 24 */ {{-1416, -1391}},
+          /* 25 */ {{-1389, -1364}},
+          /* 26 */ {{-1363, -1338}},
+          /* 27 */ {{-1335, -1310}},
+          /* 28 */ {{-1309, -1284}},
+          /* 29 */ {{-1276, -1251}},
+          /* 30 */ {{-1250, -1225}},
+          /* 31 */ {{-1222, -1197}},
+          /* 32 */ {{-1196, -1171}},
+          /* 33 */ {{-1169, -1144}},
+          /* 34 */ {{-1142, -1117}},
+          /* 35 */ {{-1116, -1091}},
+          /* 36 */ {{-1088, -1063}},
+          /* 37 */ {{-1062, -1037}},
+          /* 38 */ {{-1011, -986}},
+          /* 39 */ {{-985, -960}},
+          /* 40 */ {{-957, -932}},
+          /* 41 */ {{-931, -906}},
+          /* 42 */ {{-904, -879}},
+          /* 43 */ {{-877, -852}},
+          /* 44 */ {{-851, -826}},
+          /* 45 */ {{-823, -798}},
+          /* 46 */ {{-797, -772}},
+          /* 47 */ {{-764, -739}},
+          /* 48 */ {{-738, -713}},
+          /* 49 */ {{-710, -685}},
+          /* 50 */ {{-684, -659}},
+          /* 51 */ {{-657, -632}},
+          /* 52 */ {{-630, -605}},
+          /* 53 */ {{-604, -579}},
+          /* 54 */ {{-576, -551}},
+          /* 55 */ {{-550, -525}},
+          /* 56 not defined */ {},
+          /* 57 */ {{-499, -474}},
+          /* 58 */ {{-473, -448}},
+          /* 59 */ {{-445, -420}},
+          /* 60 */ {{-419, -394}},
+          /* 61 */ {{-392, -367}},
+          /* 62 */ {{-365, -340}},
+          /* 63 */ {{-339, -314}},
+          /* 64 */ {{-311, -286}},
+          /* 65 */ {{-285, -260}},
+          /* 66 */ {{-252, -227}},
+          /* 67 */ {{-226, -201}},
+          /* 68 */ {{-198, -173}},
+          /* 69 */ {{-172, -147}},
+          /* 70 */ {{-145, -120}},
+          /* 71 */ {{-118, -93}},
+          /* 72 */ {{-92, -67}},
+          /* 73 */ {{-64, -39}},
+          /* 74 */ {{-38, -13}},
+          /* 75 */ {{13, 38}},
+          /* 76 */ {{39, 64}},
+          /* 77 */ {{67, 92}},
+          /* 78 */ {{93, 118}},
+          /* 79 */ {{120, 145}},
+          /* 80 */ {{147, 172}},
+          /* 81 */ {{173, 198}},
+          /* 82 */ {{201, 226}},
+          /* 83 */ {{227, 252}},
+          /* 84 */ {{260, 285}},
+          /* 85 */ {{286, 311}},
+          /* 86 */ {{314, 339}},
+          /* 87 */ {{340, 365}},
+          /* 88 */ {{367, 392}},
+          /* 89 */ {{394, 419}},
+          /* 90 */ {{420, 445}},
+          /* 91 */ {{448, 473}},
+          /* 92 */ {{474, 499}},
+          /* 93 not defined */ {},
+          /* 94 */ {{525, 550}},
+          /* 95 */ {{551, 576}},
+          /* 96 */ {{579, 604}},
+          /* 97 */ {{605, 630}},
+          /* 98 */ {{632, 657}},
+          /* 99 */ {{659, 684}},
+          /* 100 */ {{685, 710}},
+          /* 101 */ {{713, 738}},
+          /* 102 */ {{739, 764}},
+          /* 103 */ {{772, 797}},
+          /* 104 */ {{798, 823}},
+          /* 105 */ {{826, 851}},
+          /* 106 */ {{852, 877}},
+          /* 107 */ {{879, 904}},
+          /* 108 */ {{906, 931}},
+          /* 109 */ {{932, 957}},
+          /* 110 */ {{960, 985}},
+          /* 111 */ {{986, 1011}},
+          /* 112 */ {{1037, 1062}},
+          /* 113 */ {{1063, 1088}},
+          /* 114 */ {{1091, 1116}},
+          /* 115 */ {{1117, 1142}},
+          /* 116 */ {{1144, 1169}},
+          /* 117 */ {{1171, 1196}},
+          /* 118 */ {{1197, 1222}},
+          /* 119 */ {{1225, 1250}},
+          /* 120 */ {{1251, 1276}},
+          /* 121 */ {{1284, 1309}},
+          /* 122 */ {{1310, 1335}},
+          /* 123 */ {{1338, 1363}},
+          /* 124 */ {{1364, 1389}},
+          /* 125 */ {{1391, 1416}},
+          /* 126 */ {{1418, 1443}},
+          /* 127 */ {{1444, 1469}},
+          /* 128 */ {{1472, 1497}},
+          /* 129 */ {{1498, 1523}},
+          /* 130 not defined */ {},
+          /* 131 */ {{1549, 1574}},
+          /* 132 */ {{1575, 1600}},
+          /* 133 */ {{1603, 1628}},
+          /* 134 */ {{1629, 1654}},
+          /* 135 */ {{1656, 1681}},
+          /* 136 */ {{1683, 1708}},
+          /* 137 */ {{1709, 1734}},
+          /* 138 */ {{1737, 1762}},
+          /* 139 */ {{1763, 1788}},
+          /* 140 */ {{1796, 1821}},
+          /* 141 */ {{1822, 1847}},
+          /* 142 */ {{1850, 1875}},
+          /* 143 */ {{1876, 1901}},
+          /* 144 */ {{1903, 1928}},
+          /* 145 */ {{1930, 1955}},
+          /* 146 */ {{1956, 1981}},
+          /* 147 */ {{1984, 2009}},
+          /* 148 */ {{2010, 2035}}}},
+        {{MHz_u{320}, RuType::RU_52_TONE},
+         {/* 1 */ {{-2035, -1984}},
+          /* 2 */ {{-1981, -1930}},
+          /* 3 */ {{-1901, -1850}},
+          /* 4 */ {{-1847, -1796}},
+          /* 5 */ {{-1788, -1737}},
+          /* 6 */ {{-1734, -1683}},
+          /* 7 */ {{-1654, -1603}},
+          /* 8 */ {{-1600, -1549}},
+          /* 9 */ {{-1523, -1472}},
+          /* 10 */ {{-1469, -1418}},
+          /* 11 */ {{-1389, -1338}},
+          /* 12 */ {{-1335, -1284}},
+          /* 13 */ {{-1276, -1225}},
+          /* 14 */ {{-1222, -1171}},
+          /* 15 */ {{-1142, -1091}},
+          /* 16 */ {{-1088, -1037}},
+          /* 17 */ {{-1011, -960}},
+          /* 18 */ {{-957, -906}},
+          /* 19 */ {{-877, -826}},
+          /* 20 */ {{-823, -772}},
+          /* 21 */ {{-764, -713}},
+          /* 22 */ {{-710, -659}},
+          /* 23 */ {{-630, -579}},
+          /* 24 */ {{-576, -525}},
+          /* 25 */ {{-499, -448}},
+          /* 26 */ {{-445, -394}},
+          /* 27 */ {{-365, -314}},
+          /* 28 */ {{-311, -260}},
+          /* 29 */ {{-252, -201}},
+          /* 30 */ {{-198, -147}},
+          /* 31 */ {{-118, -67}},
+          /* 32 */ {{-64, -13}},
+          /* 33 */ {{13, 64}},
+          /* 34 */ {{67, 118}},
+          /* 35 */ {{147, 198}},
+          /* 36 */ {{201, 252}},
+          /* 37 */ {{260, 311}},
+          /* 38 */ {{314, 365}},
+          /* 39 */ {{394, 445}},
+          /* 40 */ {{448, 499}},
+          /* 41 */ {{525, 576}},
+          /* 42 */ {{579, 630}},
+          /* 43 */ {{659, 710}},
+          /* 44 */ {{713, 764}},
+          /* 45 */ {{772, 823}},
+          /* 46 */ {{826, 877}},
+          /* 47 */ {{906, 957}},
+          /* 48 */ {{960, 1011}},
+          /* 49 */ {{1037, 1088}},
+          /* 50 */ {{1091, 1142}},
+          /* 51 */ {{1171, 1222}},
+          /* 52 */ {{1225, 1276}},
+          /* 53 */ {{1284, 1335}},
+          /* 54 */ {{1338, 1389}},
+          /* 55 */ {{1418, 1469}},
+          /* 56 */ {{1472, 1523}},
+          /* 57 */ {{1549, 1600}},
+          /* 58 */ {{1603, 1654}},
+          /* 59 */ {{1683, 1734}},
+          /* 60 */ {{1737, 1788}},
+          /* 61 */ {{1796, 1847}},
+          /* 62 */ {{1850, 1901}},
+          /* 63 */ {{1930, 1981}},
+          /* 64 */ {{1984, 2035}}}},
+        {{MHz_u{320}, RuType::RU_106_TONE},
+         {/* 1 */ {{-2035, -1930}},
+          /* 2 */ {{-1901, -1796}},
+          /* 3 */ {{-1788, -1683}},
+          /* 4 */ {{-1654, -1549}},
+          /* 5 */ {{-1523, -1418}},
+          /* 6 */ {{-1389, -1284}},
+          /* 7 */ {{-1276, -1171}},
+          /* 8 */ {{-1142, -1037}},
+          /* 9 */ {{-1011, -906}},
+          /* 10 */ {{-877, -772}},
+          /* 11 */ {{-764, -659}},
+          /* 12 */ {{-630, -525}},
+          /* 13 */ {{-499, -394}},
+          /* 14 */ {{-365, -260}},
+          /* 15 */ {{-252, -147}},
+          /* 16 */ {{-118, -13}},
+          /* 17 */ {{13, 118}},
+          /* 18 */ {{147, 252}},
+          /* 19 */ {{260, 365}},
+          /* 20 */ {{394, 499}},
+          /* 21 */ {{525, 630}},
+          /* 22 */ {{659, 764}},
+          /* 23 */ {{772, 877}},
+          /* 24 */ {{906, 1011}},
+          /* 25 */ {{1037, 1142}},
+          /* 26 */ {{1171, 1276}},
+          /* 27 */ {{1284, 1389}},
+          /* 28 */ {{1418, 1523}},
+          /* 29 */ {{1549, 1654}},
+          /* 30 */ {{1683, 1788}},
+          /* 31 */ {{1796, 1901}},
+          /* 32 */ {{1930, 2035}}}},
+        {{MHz_u{320}, RuType::RU_242_TONE},
+         {/* 1 */ {{-2036, -1795}},
+          /* 2 */ {{-1789, -1548}},
+          /* 3 */ {{-1524, -1283}},
+          /* 4 */ {{-1277, -1036}},
+          /* 5 */ {{-1012, -771}},
+          /* 6 */ {{-765, -524}},
+          /* 7 */ {{-500, -259}},
+          /* 8 */ {{-253, -12}},
+          /* 9 */ {{12, 253}},
+          /* 10 */ {{259, 500}},
+          /* 11 */ {{524, 765}},
+          /* 12 */ {{771, 1012}},
+          /* 13 */ {{1036, 1277}},
+          /* 14 */ {{1283, 1524}},
+          /* 15 */ {{1548, 1789}},
+          /* 16 */ {{1795, 2036}}}},
+        {{MHz_u{320}, RuType::RU_484_TONE},
+         {/* 1 */ {{-2036, -1795}, {-1789, -1548}},
+          /* 2 */ {{-1524, -1283}, {-1277, -1036}},
+          /* 3 */ {{-1012, -771}, {-765, -524}},
+          /* 4 */ {{-500, -259}, {-253, -12}},
+          /* 5 */ {{12, 253}, {259, 500}},
+          /* 6 */ {{524, 765}, {771, 1012}},
+          /* 7 */ {{1036, 1277}, {1283, 1524}},
+          /* 8 */ {{1548, 1789}, {1795, 2036}}}},
+        {{MHz_u{320}, RuType::RU_996_TONE},
+         {/* 1 */ {{-2036, -1539}, {-1533, -1036}},
+          /* 2 */ {{-1012, -515}, {-509, -12}},
+          /* 3 */ {{12, 509}, {515, 1012}},
+          /* 4 */ {{1036, 1533}, {1539, 2036}}}},
+        {{MHz_u{320}, RuType::RU_2x996_TONE},
+         {/* 1 */ {{-2036, -1539}, {-1533, -1036}, {-1012, -515}, {-509, -12}},
+          /* 2 */ {{12, 509}, {515, 1012}, {1036, 1533}, {1539, 2036}}}},
+        {{MHz_u{320}, RuType::RU_4x996_TONE},
+         {/* 1 */ {{-2036, -1539},
+                   {-1533, -1036},
+                   {-1012, -515},
+                   {-509, -12},
+                   {12, 509},
+                   {515, 1012},
+                   {1036, 1533},
+                   {1539, 2036}}}},
+    };
+
+    const auto& expectedRuSubcarrierGroups = (m_modClass == WIFI_MOD_CLASS_HE)
+                                                 ? expectedHeRuSubcarrierGroups
+                                                 : expectedEhtRuSubcarrierGroups;
+    for (const auto& [bwTonesPair, ruSubcarrierGroups] : expectedRuSubcarrierGroups)
+    {
+        std::size_t phyIndex = 1;
+        for (const auto& subcarrierGroups : ruSubcarrierGroups)
+        {
+            RunOne(bwTonesPair.first, bwTonesPair.second, phyIndex++, subcarrierGroups);
+        }
+    }
+}
+
+/**
+ * @ingroup wifi-test
+ * @ingroup tests
+ *
+ * @brief Test the methods to convert PHY indices to 80MHz indices with primary flags.
+ */
+class WifiRuPhyIdxTo80MHzIdxAndFlagsTest : public TestCase
+{
+  public:
+    /**
+     * Constructor
+     * @param modClass the modulation class to distinguish 802.11ax and 802.11be
+     */
+    WifiRuPhyIdxTo80MHzIdxAndFlagsTest(WifiModulationClass modClass);
+
+    /**
+     * Check converted PHY indices to 80MHz indices with primary flag are correct.
+     *
+     * @param primary20 the index of the primary20 channel to configure
+     * @param bw the bandwidth
+     * @param ruType the RU type
+     * @param phyIndex the PHY index of the RU
+     * @param expectedP160 the expected P160 flag
+     * @param expectedP80OrLower80 the expected P80OrLower80 flag
+     * @param expected80MHzIdx the expected index within the 80 MHz segment
+     */
+    void RunOne(uint8_t primary20,
+                MHz_u bw,
+                RuType ruType,
+                std::size_t phyIndex,
+                bool expectedP160,
+                bool expectedP80OrLower80,
+                std::size_t expected80MHzIdx);
+
+  private:
+    void DoRun() override;
+
+    WifiModulationClass m_modClass; ///< the modulation class to consider for the test
+};
+
+WifiRuPhyIdxTo80MHzIdxAndFlagsTest::WifiRuPhyIdxTo80MHzIdxAndFlagsTest(WifiModulationClass modClass)
+    : TestCase{"Check conversion from PHY indices to 80MHz indices with primary flag for " +
+               std::string((modClass == WIFI_MOD_CLASS_HE) ? "HE" : "EHT")},
+      m_modClass{modClass}
+{
+}
+
+void
+WifiRuPhyIdxTo80MHzIdxAndFlagsTest::RunOne(uint8_t primary20,
+                                           MHz_u bw,
+                                           RuType ruType,
+                                           std::size_t phyIndex,
+                                           bool expectedP160,
+                                           bool expectedP80OrLower80,
+                                           std::size_t expected80MHzIdx)
+{
+    auto primary80OrLower80{true};
+    auto primary160{true};
+    std::size_t idx80MHz{1};
+    if (m_modClass == WIFI_MOD_CLASS_HE)
+    {
+        idx80MHz = HeRu::GetIndexIn80MHzSegment(bw, ruType, phyIndex);
+        primary80OrLower80 = HeRu::GetPrimary80MHzFlag(bw, ruType, phyIndex, primary20);
+    }
+    else
+    {
+        idx80MHz = EhtRu::GetIndexIn80MHzSegment(bw, ruType, phyIndex);
+        const auto& [p160, p80OrLower80] = EhtRu::GetPrimaryFlags(bw, ruType, phyIndex, primary20);
+        primary160 = p160;
+        primary80OrLower80 = p80OrLower80;
+    }
+    NS_TEST_EXPECT_MSG_EQ(idx80MHz,
+                          expected80MHzIdx,
+                          "BW=" << bw << ", p20Index=" << +primary20 << " , ruType=" << ruType
+                                << " , phyIndex=" << phyIndex << ". Expected 80MHz index "
+                                << expected80MHzIdx << " differs from actual " << idx80MHz);
+    NS_TEST_EXPECT_MSG_EQ(primary160,
+                          expectedP160,
+                          "BW=" << bw << ", p20Index=" << +primary20 << " , ruType=" << ruType
+                                << " , phyIndex=" << phyIndex << ". Expected P160 flag "
+                                << expectedP160 << " differs from actual " << primary160);
+    NS_TEST_EXPECT_MSG_EQ(primary80OrLower80,
+                          expectedP80OrLower80,
+                          "BW=" << bw << ", p20Index=" << +primary20 << " , ruType=" << ruType
+                                << " , phyIndex=" << phyIndex << ". Expected P80OrLower80 flag "
+                                << expectedP80OrLower80 << " differs from actual "
+                                << primary80OrLower80);
+}
+
+void
+WifiRuPhyIdxTo80MHzIdxAndFlagsTest::DoRun()
+{
+    const auto p160{true};
+    const auto s160{false};
+    const auto p80OrLower80{true};
+    const auto s80OrHigher80{false};
+
+    // consider maximum bandwidth for the test: 160 MHz for HE and 320 MHz otherwise (EHT)
+    uint8_t p20IdxMax = (m_modClass == WIFI_MOD_CLASS_HE) ? 8 : 16;
+
+    /* 20 MHz */
+    {
+        const MHz_u bw{20};
+
+        for (uint8_t p20Index = 0; p20Index < p20IdxMax; p20Index++)
+        {
+            std::size_t numRusPer20MHz = 9;
+            std::size_t startPhyIdx = p20Index * numRusPer20MHz;
+            // All the 26-tone RUs in 20 MHz PPDUs are always in P80 (hence index within 80 MHz
+            // segment equals PHY index)
+            for (std::size_t phyIdx = startPhyIdx; phyIdx <= startPhyIdx + numRusPer20MHz; phyIdx++)
+            {
+                RunOne(p20Index, bw, RuType::RU_26_TONE, phyIdx, p160, p80OrLower80, phyIdx);
+            }
+
+            numRusPer20MHz = 4;
+            startPhyIdx = p20Index * numRusPer20MHz;
+            // All the 52-tone RUs in 20 MHz PPDUs are always in P80 (hence index within 80 MHz
+            // segment equals PHY index)
+            for (std::size_t phyIdx = startPhyIdx; phyIdx <= startPhyIdx + numRusPer20MHz; phyIdx++)
+            {
+                RunOne(p20Index, bw, RuType::RU_52_TONE, phyIdx, p160, p80OrLower80, phyIdx);
+            }
+
+            numRusPer20MHz = 2;
+            startPhyIdx = p20Index * numRusPer20MHz;
+            // Both the 106-tone RUs in 20 MHz PPDUs are always in P80 (hence index within 80 MHz
+            // segment equals PHY index)
+            for (std::size_t phyIdx = startPhyIdx; phyIdx <= startPhyIdx + numRusPer20MHz; phyIdx++)
+            {
+                RunOne(p20Index, bw, RuType::RU_106_TONE, phyIdx, p160, p80OrLower80, phyIdx);
+            }
+
+            numRusPer20MHz = 1;
+            startPhyIdx = p20Index * numRusPer20MHz;
+            // The 242-tone RUs in 20 MHz PPDUs is always in P80 (hence index within 80 MHz segment
+            // equals PHY index)
+            for (std::size_t phyIdx = startPhyIdx; phyIdx <= startPhyIdx + numRusPer20MHz; phyIdx++)
+            {
+                RunOne(p20Index, bw, RuType::RU_242_TONE, phyIdx, p160, p80OrLower80, phyIdx);
+            }
+        }
+    }
+
+    /* 40 MHz */
+    {
+        const MHz_u bw{40};
+
+        for (uint8_t p20Index = 0; p20Index < p20IdxMax; p20Index++)
+        {
+            std::size_t numRusPer40MHz = 18;
+            std::size_t startPhyIdx = (p20Index / 2) * numRusPer40MHz;
+            // All the 26-tone RUs in 40 MHz PPDUs are always in P80 (hence index within 80 MHz
+            // segment equals PHY index)
+            for (std::size_t phyIdx = startPhyIdx; phyIdx <= startPhyIdx + numRusPer40MHz; phyIdx++)
+            {
+                RunOne(p20Index, bw, RuType::RU_26_TONE, phyIdx, p160, p80OrLower80, phyIdx);
+            }
+
+            numRusPer40MHz = 8;
+            startPhyIdx = (p20Index / 2) * numRusPer40MHz;
+            // All the 52-tone RUs in 40 MHz PPDUs are always in P80 (hence index within 80 MHz
+            // segment equals PHY index)
+            for (std::size_t phyIdx = startPhyIdx; phyIdx <= startPhyIdx + numRusPer40MHz; phyIdx++)
+            {
+                RunOne(p20Index, bw, RuType::RU_52_TONE, phyIdx, p160, p80OrLower80, phyIdx);
+            }
+
+            numRusPer40MHz = 4;
+            startPhyIdx = (p20Index / 2) * numRusPer40MHz;
+            // All the 106-tone RUs in 40 MHz PPDUs are always in P80 (hence index within 80 MHz
+            // segment equals PHY index)
+            for (std::size_t phyIdx = startPhyIdx; phyIdx <= startPhyIdx + numRusPer40MHz; phyIdx++)
+            {
+                RunOne(p20Index, bw, RuType::RU_106_TONE, phyIdx, p160, p80OrLower80, phyIdx);
+            }
+
+            numRusPer40MHz = 2;
+            startPhyIdx = (p20Index / 2) * numRusPer40MHz;
+            // Both the 242-tone RUs in 40 MHz PPDUs are always in P80 (hence index within 80 MHz
+            // segment equals PHY index)
+            for (std::size_t phyIdx = startPhyIdx; phyIdx <= startPhyIdx + numRusPer40MHz; phyIdx++)
+            {
+                RunOne(p20Index, bw, RuType::RU_242_TONE, phyIdx, p160, p80OrLower80, phyIdx);
+            }
+
+            numRusPer40MHz = 1;
+            startPhyIdx = (p20Index / 2) * numRusPer40MHz;
+            // The 484-tone RUs in 40 MHz PPDUs is always in P80 (hence index within 80 MHz segment
+            // equals PHY index)
+            for (std::size_t phyIdx = startPhyIdx; phyIdx <= startPhyIdx + numRusPer40MHz; phyIdx++)
+            {
+                RunOne(p20Index, bw, RuType::RU_484_TONE, phyIdx, p160, p80OrLower80, phyIdx);
+            }
+        }
+    }
+
+    /* 80 MHz */
+    {
+        const MHz_u bw{80};
+
+        for (uint8_t p20Index = 0; p20Index < p20IdxMax; p20Index++)
+        {
+            std::size_t numRusPer80MHz = 37;
+            std::size_t startPhyIdx = (p20Index / 4) * numRusPer80MHz;
+            // All the 26-tone RUs in 80 MHz PPDUs are always in P80 (hence index within 80 MHz
+            // segment equals PHY index)
+            for (std::size_t phyIdx = startPhyIdx; phyIdx <= startPhyIdx + numRusPer80MHz; phyIdx++)
+            {
+                if (phyIdx == 19)
+                {
+                    // Undefined RU
+                    continue;
+                }
+                RunOne(p20Index, bw, RuType::RU_26_TONE, phyIdx, p160, p80OrLower80, phyIdx);
+            }
+
+            numRusPer80MHz = 16;
+            startPhyIdx = (p20Index / 4) * numRusPer80MHz;
+            // All the 52-tone RUs in 80 MHz PPDUs are always in P80 (hence index within 80 MHz
+            // segment equals PHY index)
+            for (std::size_t phyIdx = startPhyIdx; phyIdx <= startPhyIdx + numRusPer80MHz; phyIdx++)
+            {
+                RunOne(p20Index, bw, RuType::RU_52_TONE, phyIdx, p160, p80OrLower80, phyIdx);
+            }
+
+            numRusPer80MHz = 8;
+            startPhyIdx = (p20Index / 4) * numRusPer80MHz;
+            // All the 106-tone RUs in 80 MHz PPDUs are always in P80 (hence index within 80 MHz
+            // segment equals PHY index)
+            for (std::size_t phyIdx = startPhyIdx; phyIdx <= startPhyIdx + numRusPer80MHz; phyIdx++)
+            {
+                RunOne(p20Index, bw, RuType::RU_106_TONE, phyIdx, p160, p80OrLower80, phyIdx);
+            }
+
+            numRusPer80MHz = 4;
+            startPhyIdx = (p20Index / 4) * numRusPer80MHz;
+            // All the 242-tone RUs in 80 MHz PPDUs are always in P80 (hence index within 80 MHz
+            // segment equals PHY index)
+            for (std::size_t phyIdx = startPhyIdx; phyIdx <= startPhyIdx + numRusPer80MHz; phyIdx++)
+            {
+                RunOne(p20Index, bw, RuType::RU_242_TONE, phyIdx, p160, p80OrLower80, phyIdx);
+            }
+
+            numRusPer80MHz = 2;
+            startPhyIdx = (p20Index / 4) * numRusPer80MHz;
+            // Both The 484-tone RUs in 80 MHz PPDUs are always in P80 (hence index within 80 MHz
+            // segment equals PHY index)
+            for (std::size_t phyIdx = startPhyIdx; phyIdx <= startPhyIdx + numRusPer80MHz; phyIdx++)
+            {
+                RunOne(p20Index, bw, RuType::RU_484_TONE, phyIdx, p160, p80OrLower80, phyIdx);
+            }
+
+            numRusPer80MHz = 1;
+            startPhyIdx = (p20Index / 4) * numRusPer80MHz;
+            // The 996-tone RUs in 80 MHz PPDUs is always in P80 (hence index within 80 MHz segment
+            // equals PHY index)
+            for (std::size_t phyIdx = startPhyIdx; phyIdx <= startPhyIdx + numRusPer80MHz; phyIdx++)
+            {
+                RunOne(p20Index, bw, RuType::RU_996_TONE, phyIdx, p160, p80OrLower80, phyIdx);
+            }
+        }
+    }
+
+    /* 160 MHz */
+    {
+        const MHz_u bw{160};
+
+        for (uint8_t p20Index = 0; p20Index < p20IdxMax; p20Index++)
+        {
+            const uint8_t p80Index = p20Index / 4;
+            const uint8_t s80Index = (p80Index % 2 == 0) ? (p80Index + 1) : (p80Index - 1);
+
+            // 26-tone RUs in P80
+            std::size_t numRusPer80MHz = 37;
+            std::size_t numRusPer160MHz = 2 * numRusPer80MHz;
+            std::size_t startPhyIdx = ((p80Index * numRusPer80MHz) % numRusPer160MHz) + 1;
+            std::size_t idxIn80MHz = 1;
+            for (std::size_t phyIdx = startPhyIdx; phyIdx < startPhyIdx + numRusPer80MHz; phyIdx++)
+            {
+                if ((m_modClass != WIFI_MOD_CLASS_HE) && (idxIn80MHz == 19))
+                {
+                    // Undefined RU
+                    continue;
+                }
+                RunOne(p20Index, bw, RuType::RU_26_TONE, phyIdx, p160, p80OrLower80, idxIn80MHz++);
+            }
+
+            // 26-tone RUs in S80
+            startPhyIdx = ((s80Index * numRusPer80MHz) % numRusPer160MHz) + 1;
+            idxIn80MHz = 1;
+            for (std::size_t phyIdx = startPhyIdx; phyIdx < startPhyIdx + numRusPer80MHz; phyIdx++)
+            {
+                if ((m_modClass != WIFI_MOD_CLASS_HE) && (idxIn80MHz == 19))
+                {
+                    // Undefined RU
+                    continue;
+                }
+                RunOne(p20Index, bw, RuType::RU_26_TONE, phyIdx, p160, s80OrHigher80, idxIn80MHz++);
+            }
+
+            // 52-tone RUs in P80
+            numRusPer80MHz = 16;
+            numRusPer160MHz = 2 * numRusPer80MHz;
+            startPhyIdx = ((p80Index * numRusPer80MHz) % numRusPer160MHz) + 1;
+            idxIn80MHz = 1;
+            for (std::size_t phyIdx = startPhyIdx; phyIdx < startPhyIdx + numRusPer80MHz; phyIdx++)
+            {
+                RunOne(p20Index, bw, RuType::RU_52_TONE, phyIdx, p160, p80OrLower80, idxIn80MHz++);
+            }
+
+            // 52-tone RUs in S80
+            startPhyIdx = ((s80Index * numRusPer80MHz) % numRusPer160MHz) + 1;
+            idxIn80MHz = 1;
+            for (std::size_t phyIdx = startPhyIdx; phyIdx < startPhyIdx + numRusPer80MHz; phyIdx++)
+            {
+                RunOne(p20Index, bw, RuType::RU_52_TONE, phyIdx, p160, s80OrHigher80, idxIn80MHz++);
+            }
+
+            // 106-tone RUs in P80
+            numRusPer80MHz = 8;
+            numRusPer160MHz = 2 * numRusPer80MHz;
+            startPhyIdx = ((p80Index * numRusPer80MHz) % numRusPer160MHz) + 1;
+            idxIn80MHz = 1;
+            for (std::size_t phyIdx = startPhyIdx; phyIdx < startPhyIdx + numRusPer80MHz; phyIdx++)
+            {
+                RunOne(p20Index, bw, RuType::RU_106_TONE, phyIdx, p160, p80OrLower80, idxIn80MHz++);
+            }
+
+            // 106-tone RUs in S80
+            startPhyIdx = ((s80Index * numRusPer80MHz) % numRusPer160MHz) + 1;
+            idxIn80MHz = 1;
+            for (std::size_t phyIdx = startPhyIdx; phyIdx < startPhyIdx + numRusPer80MHz; phyIdx++)
+            {
+                RunOne(p20Index,
+                       bw,
+                       RuType::RU_106_TONE,
+                       phyIdx,
+                       p160,
+                       s80OrHigher80,
+                       idxIn80MHz++);
+            }
+
+            // 242-tone RUs in P80
+            numRusPer80MHz = 4;
+            numRusPer160MHz = 2 * numRusPer80MHz;
+            startPhyIdx = ((p80Index * numRusPer80MHz) % numRusPer160MHz) + 1;
+            idxIn80MHz = 1;
+            for (std::size_t phyIdx = startPhyIdx; phyIdx < startPhyIdx + numRusPer80MHz; phyIdx++)
+            {
+                RunOne(p20Index, bw, RuType::RU_242_TONE, phyIdx, p160, p80OrLower80, idxIn80MHz++);
+            }
+
+            // 242-tone RUs in S80
+            startPhyIdx = ((s80Index * numRusPer80MHz) % numRusPer160MHz) + 1;
+            idxIn80MHz = 1;
+            for (std::size_t phyIdx = startPhyIdx; phyIdx < startPhyIdx + numRusPer80MHz; phyIdx++)
+            {
+                RunOne(p20Index,
+                       bw,
+                       RuType::RU_242_TONE,
+                       phyIdx,
+                       p160,
+                       s80OrHigher80,
+                       idxIn80MHz++);
+            }
+
+            // 484-tone RUs in P80
+            numRusPer80MHz = 2;
+            numRusPer160MHz = 2 * numRusPer80MHz;
+            startPhyIdx = ((p80Index * numRusPer80MHz) % numRusPer160MHz) + 1;
+            idxIn80MHz = 1;
+            for (std::size_t phyIdx = startPhyIdx; phyIdx < startPhyIdx + numRusPer80MHz; phyIdx++)
+            {
+                RunOne(p20Index, bw, RuType::RU_484_TONE, phyIdx, p160, p80OrLower80, idxIn80MHz++);
+            }
+
+            // 484-tone RUs in S80
+            startPhyIdx = ((s80Index * numRusPer80MHz) % numRusPer160MHz) + 1;
+            idxIn80MHz = 1;
+            for (std::size_t phyIdx = startPhyIdx; phyIdx < startPhyIdx + numRusPer80MHz; phyIdx++)
+            {
+                RunOne(p20Index,
+                       bw,
+                       RuType::RU_484_TONE,
+                       phyIdx,
+                       p160,
+                       s80OrHigher80,
+                       idxIn80MHz++);
+            }
+
+            // 996-tone RU in P80
+            numRusPer80MHz = 1;
+            numRusPer160MHz = 2 * numRusPer80MHz;
+            startPhyIdx = ((p80Index * numRusPer80MHz) % numRusPer160MHz) + 1;
+            idxIn80MHz = 1;
+            for (std::size_t phyIdx = startPhyIdx; phyIdx < startPhyIdx + numRusPer80MHz; phyIdx++)
+            {
+                RunOne(p20Index, bw, RuType::RU_996_TONE, phyIdx, p160, p80OrLower80, idxIn80MHz++);
+            }
+
+            // 996-tone RU in S80
+            startPhyIdx = ((s80Index * numRusPer80MHz) % numRusPer160MHz) + 1;
+            idxIn80MHz = 1;
+            for (std::size_t phyIdx = startPhyIdx; phyIdx < startPhyIdx + numRusPer80MHz; phyIdx++)
+            {
+                RunOne(p20Index,
+                       bw,
+                       RuType::RU_996_TONE,
+                       phyIdx,
+                       p160,
+                       s80OrHigher80,
+                       idxIn80MHz++);
+            }
+
+            // 2x996-tone RU
+            RunOne(p20Index, bw, RuType::RU_2x996_TONE, 1, p160, p80OrLower80, 1);
+        }
+    }
+
+    /* 320 MHz */
+    if (m_modClass == WIFI_MOD_CLASS_EHT)
+    {
+        const MHz_u bw{320};
+
+        for (uint8_t p20Index = 0; p20Index < p20IdxMax; p20Index++)
+        {
+            const uint8_t p160Index = p20Index / 8;
+            const uint8_t s160Index = (p160Index % 2 == 0) ? (p160Index + 1) : (p160Index - 1);
+            const uint8_t p80Index = p20Index / 4;
+            const uint8_t s80Index = (p80Index % 2 == 0) ? (p80Index + 1) : (p80Index - 1);
+
+            // 26-tone RUs in P80
+            std::size_t numRusPer80MHz = 37;
+            std::size_t numRusPer320MHz = 4 * numRusPer80MHz;
+            std::size_t startPhyIdx = ((p80Index * numRusPer80MHz) % numRusPer320MHz) + 1;
+            std::size_t idxIn80MHz = 1;
+            for (std::size_t phyIdx = startPhyIdx; phyIdx < startPhyIdx + numRusPer80MHz; phyIdx++)
+            {
+                if ((m_modClass != WIFI_MOD_CLASS_HE) && (idxIn80MHz == 19))
+                {
+                    // Undefined RU
+                    continue;
+                }
+                RunOne(p20Index, bw, RuType::RU_26_TONE, phyIdx, p160, p80OrLower80, idxIn80MHz++);
+            }
+
+            // 26-tone RUs in S80
+            startPhyIdx = ((s80Index * numRusPer80MHz) % numRusPer320MHz) + 1;
+            idxIn80MHz = 1;
+            for (std::size_t phyIdx = startPhyIdx; phyIdx < startPhyIdx + numRusPer80MHz; phyIdx++)
+            {
+                if ((m_modClass != WIFI_MOD_CLASS_HE) && (idxIn80MHz == 19))
+                {
+                    // Undefined RU
+                    continue;
+                }
+                RunOne(p20Index, bw, RuType::RU_26_TONE, phyIdx, p160, s80OrHigher80, idxIn80MHz++);
+            }
+
+            // 26-tone RUs in S160
+            std::size_t numRusPer160MHz = 2 * numRusPer80MHz;
+            startPhyIdx = ((s160Index * numRusPer160MHz) % numRusPer320MHz) + 1;
+            idxIn80MHz = 1;
+            // lower 80 MHz
+            for (std::size_t phyIdx = startPhyIdx; phyIdx < startPhyIdx + numRusPer80MHz; phyIdx++)
+            {
+                if ((m_modClass != WIFI_MOD_CLASS_HE) && (idxIn80MHz == 19))
+                {
+                    // Undefined RU
+                    continue;
+                }
+                RunOne(p20Index, bw, RuType::RU_26_TONE, phyIdx, s160, p80OrLower80, idxIn80MHz++);
+            }
+            // higher 80 MHz
+            startPhyIdx += numRusPer80MHz;
+            idxIn80MHz = 1;
+            for (std::size_t phyIdx = startPhyIdx; phyIdx < startPhyIdx + numRusPer80MHz; phyIdx++)
+            {
+                if ((m_modClass != WIFI_MOD_CLASS_HE) && (idxIn80MHz == 19))
+                {
+                    // Undefined RU
+                    continue;
+                }
+                RunOne(p20Index, bw, RuType::RU_26_TONE, phyIdx, s160, s80OrHigher80, idxIn80MHz++);
+            }
+
+            // 52-tone RUs in P80
+            numRusPer80MHz = 16;
+            numRusPer320MHz = 4 * numRusPer80MHz;
+            startPhyIdx = ((p80Index * numRusPer80MHz) % numRusPer320MHz) + 1;
+            idxIn80MHz = 1;
+            for (std::size_t phyIdx = startPhyIdx; phyIdx < startPhyIdx + numRusPer80MHz; phyIdx++)
+            {
+                RunOne(p20Index, bw, RuType::RU_52_TONE, phyIdx, p160, p80OrLower80, idxIn80MHz++);
+            }
+
+            // 52-tone RUs in S80
+            startPhyIdx = ((s80Index * numRusPer80MHz) % numRusPer320MHz) + 1;
+            idxIn80MHz = 1;
+            for (std::size_t phyIdx = startPhyIdx; phyIdx < startPhyIdx + numRusPer80MHz; phyIdx++)
+            {
+                RunOne(p20Index, bw, RuType::RU_52_TONE, phyIdx, p160, s80OrHigher80, idxIn80MHz++);
+            }
+
+            // 52-tone RUs in S160
+            numRusPer160MHz = 2 * numRusPer80MHz;
+            startPhyIdx = ((s160Index * numRusPer160MHz) % numRusPer320MHz) + 1;
+            idxIn80MHz = 1;
+            // lower 80 MHz
+            for (std::size_t phyIdx = startPhyIdx; phyIdx < startPhyIdx + numRusPer80MHz; phyIdx++)
+            {
+                RunOne(p20Index, bw, RuType::RU_52_TONE, phyIdx, s160, p80OrLower80, idxIn80MHz++);
+            }
+            // higher 80 MHz
+            startPhyIdx += numRusPer80MHz;
+            idxIn80MHz = 1;
+            for (std::size_t phyIdx = startPhyIdx; phyIdx < startPhyIdx + numRusPer80MHz; phyIdx++)
+            {
+                RunOne(p20Index, bw, RuType::RU_52_TONE, phyIdx, s160, s80OrHigher80, idxIn80MHz++);
+            }
+
+            // 106-tone RUs in P80
+            numRusPer80MHz = 8;
+            numRusPer320MHz = 4 * numRusPer80MHz;
+            startPhyIdx = ((p80Index * numRusPer80MHz) % numRusPer320MHz) + 1;
+            idxIn80MHz = 1;
+            for (std::size_t phyIdx = startPhyIdx; phyIdx < startPhyIdx + numRusPer80MHz; phyIdx++)
+            {
+                RunOne(p20Index, bw, RuType::RU_106_TONE, phyIdx, p160, p80OrLower80, idxIn80MHz++);
+            }
+
+            // 106-tone RUs in S80
+            startPhyIdx = ((s80Index * numRusPer80MHz) % numRusPer320MHz) + 1;
+            idxIn80MHz = 1;
+            for (std::size_t phyIdx = startPhyIdx; phyIdx < startPhyIdx + numRusPer80MHz; phyIdx++)
+            {
+                RunOne(p20Index,
+                       bw,
+                       RuType::RU_106_TONE,
+                       phyIdx,
+                       p160,
+                       s80OrHigher80,
+                       idxIn80MHz++);
+            }
+
+            // 106-tone RUs in S160
+            numRusPer160MHz = 2 * numRusPer80MHz;
+            startPhyIdx = ((s160Index * numRusPer160MHz) % numRusPer320MHz) + 1;
+            idxIn80MHz = 1;
+            // lower 80 MHz
+            for (std::size_t phyIdx = startPhyIdx; phyIdx < startPhyIdx + numRusPer80MHz; phyIdx++)
+            {
+                RunOne(p20Index, bw, RuType::RU_106_TONE, phyIdx, s160, p80OrLower80, idxIn80MHz++);
+            }
+            // higher 80 MHz
+            startPhyIdx += numRusPer80MHz;
+            idxIn80MHz = 1;
+            for (std::size_t phyIdx = startPhyIdx; phyIdx < startPhyIdx + numRusPer80MHz; phyIdx++)
+            {
+                RunOne(p20Index,
+                       bw,
+                       RuType::RU_106_TONE,
+                       phyIdx,
+                       s160,
+                       s80OrHigher80,
+                       idxIn80MHz++);
+            }
+
+            // 242-tone RUs in P80
+            numRusPer80MHz = 4;
+            numRusPer320MHz = 4 * numRusPer80MHz;
+            startPhyIdx = ((p80Index * numRusPer80MHz) % numRusPer320MHz) + 1;
+            idxIn80MHz = 1;
+            for (std::size_t phyIdx = startPhyIdx; phyIdx < startPhyIdx + numRusPer80MHz; phyIdx++)
+            {
+                RunOne(p20Index, bw, RuType::RU_242_TONE, phyIdx, p160, p80OrLower80, idxIn80MHz++);
+            }
+
+            // 242-tone RUs in S80
+            startPhyIdx = ((s80Index * numRusPer80MHz) % numRusPer320MHz) + 1;
+            idxIn80MHz = 1;
+            for (std::size_t phyIdx = startPhyIdx; phyIdx < startPhyIdx + numRusPer80MHz; phyIdx++)
+            {
+                RunOne(p20Index,
+                       bw,
+                       RuType::RU_242_TONE,
+                       phyIdx,
+                       p160,
+                       s80OrHigher80,
+                       idxIn80MHz++);
+            }
+
+            // 242-tone RUs in S160
+            numRusPer160MHz = 2 * numRusPer80MHz;
+            startPhyIdx = ((s160Index * numRusPer160MHz) % numRusPer320MHz) + 1;
+            idxIn80MHz = 1;
+            // lower 80 MHz
+            for (std::size_t phyIdx = startPhyIdx; phyIdx < startPhyIdx + numRusPer80MHz; phyIdx++)
+            {
+                RunOne(p20Index, bw, RuType::RU_242_TONE, phyIdx, s160, p80OrLower80, idxIn80MHz++);
+            }
+            // higher 80 MHz
+            startPhyIdx += numRusPer80MHz;
+            idxIn80MHz = 1;
+            for (std::size_t phyIdx = startPhyIdx; phyIdx < startPhyIdx + numRusPer80MHz; phyIdx++)
+            {
+                RunOne(p20Index,
+                       bw,
+                       RuType::RU_242_TONE,
+                       phyIdx,
+                       s160,
+                       s80OrHigher80,
+                       idxIn80MHz++);
+            }
+
+            // 484-tone RUs in P80
+            numRusPer80MHz = 2;
+            numRusPer320MHz = 4 * numRusPer80MHz;
+            startPhyIdx = ((p80Index * numRusPer80MHz) % numRusPer320MHz) + 1;
+            idxIn80MHz = 1;
+            for (std::size_t phyIdx = startPhyIdx; phyIdx < startPhyIdx + numRusPer80MHz; phyIdx++)
+            {
+                RunOne(p20Index, bw, RuType::RU_484_TONE, phyIdx, p160, p80OrLower80, idxIn80MHz++);
+            }
+
+            // 484-tone RUs in S80
+            startPhyIdx = ((s80Index * numRusPer80MHz) % numRusPer320MHz) + 1;
+            idxIn80MHz = 1;
+            for (std::size_t phyIdx = startPhyIdx; phyIdx < startPhyIdx + numRusPer80MHz; phyIdx++)
+            {
+                RunOne(p20Index,
+                       bw,
+                       RuType::RU_484_TONE,
+                       phyIdx,
+                       p160,
+                       s80OrHigher80,
+                       idxIn80MHz++);
+            }
+
+            // 484-tone RUs in S160
+            numRusPer160MHz = 2 * numRusPer80MHz;
+            startPhyIdx = ((s160Index * numRusPer160MHz) % numRusPer320MHz) + 1;
+            idxIn80MHz = 1;
+            // lower 80 MHz
+            for (std::size_t phyIdx = startPhyIdx; phyIdx < startPhyIdx + numRusPer80MHz; phyIdx++)
+            {
+                RunOne(p20Index, bw, RuType::RU_484_TONE, phyIdx, s160, p80OrLower80, idxIn80MHz++);
+            }
+            // higher 80 MHz
+            startPhyIdx += numRusPer80MHz;
+            idxIn80MHz = 1;
+            for (std::size_t phyIdx = startPhyIdx; phyIdx < startPhyIdx + numRusPer80MHz; phyIdx++)
+            {
+                RunOne(p20Index,
+                       bw,
+                       RuType::RU_484_TONE,
+                       phyIdx,
+                       s160,
+                       s80OrHigher80,
+                       idxIn80MHz++);
+            }
+
+            // 996-tone RU in P80
+            numRusPer80MHz = 1;
+            numRusPer320MHz = 4 * numRusPer80MHz;
+            startPhyIdx = ((p80Index * numRusPer80MHz) % numRusPer320MHz) + 1;
+            idxIn80MHz = 1;
+            for (std::size_t phyIdx = startPhyIdx; phyIdx < startPhyIdx + numRusPer80MHz; phyIdx++)
+            {
+                RunOne(p20Index, bw, RuType::RU_996_TONE, phyIdx, p160, p80OrLower80, idxIn80MHz++);
+            }
+
+            // 996-tone RU in S80
+            startPhyIdx = ((s80Index * numRusPer80MHz) % numRusPer320MHz) + 1;
+            idxIn80MHz = 1;
+            for (std::size_t phyIdx = startPhyIdx; phyIdx < startPhyIdx + numRusPer80MHz; phyIdx++)
+            {
+                RunOne(p20Index,
+                       bw,
+                       RuType::RU_996_TONE,
+                       phyIdx,
+                       p160,
+                       s80OrHigher80,
+                       idxIn80MHz++);
+            }
+
+            // 996-tone RUs in S160
+            numRusPer160MHz = 2 * numRusPer80MHz;
+            startPhyIdx = ((s160Index * numRusPer160MHz) % numRusPer320MHz) + 1;
+            idxIn80MHz = 1;
+            // lower 80 MHz
+            for (std::size_t phyIdx = startPhyIdx; phyIdx < startPhyIdx + numRusPer80MHz; phyIdx++)
+            {
+                RunOne(p20Index, bw, RuType::RU_996_TONE, phyIdx, s160, p80OrLower80, idxIn80MHz++);
+            }
+            // higher 80 MHz
+            startPhyIdx += numRusPer80MHz;
+            idxIn80MHz = 1;
+            for (std::size_t phyIdx = startPhyIdx; phyIdx < startPhyIdx + numRusPer80MHz; phyIdx++)
+            {
+                RunOne(p20Index,
+                       bw,
+                       RuType::RU_996_TONE,
+                       phyIdx,
+                       s160,
+                       s80OrHigher80,
+                       idxIn80MHz++);
+            }
+
+            // 2x996-tone RU in P160
+            numRusPer160MHz = 1;
+            numRusPer320MHz = 2 * numRusPer160MHz;
+            startPhyIdx = ((p160Index * numRusPer160MHz) % numRusPer320MHz) + 1;
+            idxIn80MHz = 1;
+            for (std::size_t phyIdx = startPhyIdx; phyIdx < startPhyIdx + numRusPer160MHz; phyIdx++)
+            {
+                RunOne(p20Index,
+                       bw,
+                       RuType::RU_2x996_TONE,
+                       phyIdx,
+                       p160,
+                       p80OrLower80,
+                       idxIn80MHz++);
+            }
+
+            // 996-tone RU in S80
+            startPhyIdx = ((s160Index * numRusPer160MHz) % numRusPer320MHz) + 1;
+            idxIn80MHz = 1;
+            for (std::size_t phyIdx = startPhyIdx; phyIdx < startPhyIdx + numRusPer160MHz; phyIdx++)
+            {
+                RunOne(p20Index,
+                       bw,
+                       RuType::RU_2x996_TONE,
+                       phyIdx,
+                       s160,
+                       p80OrLower80,
+                       idxIn80MHz++);
+            }
+
+            // 4x996-tone RU
+            RunOne(p20Index, bw, RuType::RU_4x996_TONE, 1, p160, p80OrLower80, 1);
+        }
+    }
+}
+
+/**
+ * @ingroup wifi-test
+ * @ingroup tests
+ *
+ * @brief Test the WifiRu::DoesOverlap() method.
+ */
+class WifiRuOverlappingTest : public TestCase
+{
+  public:
+    /**
+     * Constructor
+     * @param modClass the modulation class to distinguish 802.11ax and 802.11be
+     */
+    WifiRuOverlappingTest(WifiModulationClass modClass);
+
+    /**
+     * Check the result of DoesOverlap() is correct.
+     *
+     * @param bw the bandwidth of the PPDU
+     * @param ru the given RU allocation
+     * @param rus the given set of RUs
+     * @param overlapExpected whether it is expected the given RU overlaps with the given set of RUs
+     */
+    void RunOne(MHz_u bw,
+                WifiRu::RuSpec ru,
+                const std::vector<WifiRu::RuSpec>& rus,
+                bool overlapExpected);
+
+  private:
+    void DoRun() override;
+
+    WifiModulationClass m_modClass; ///< the modulation class to consider for the test
+};
+
+WifiRuOverlappingTest::WifiRuOverlappingTest(WifiModulationClass modClass)
+    : TestCase{"Check RUs overlapping for " +
+               std::string((modClass == WIFI_MOD_CLASS_HE) ? "HE" : "EHT")},
+      m_modClass{modClass}
+{
+}
+
+void
+WifiRuOverlappingTest::RunOne(MHz_u bw,
+                              WifiRu::RuSpec ru,
+                              const std::vector<WifiRu::RuSpec>& rus,
+                              bool overlapExpected)
+{
+    auto printToStr = [](const std::vector<WifiRu::RuSpec>& v) {
+        std::stringstream ss;
+        ss << "{";
+        for (const auto& ru : v)
+        {
+            ss << ru << " ";
+        }
+        ss << "}";
+        return ss.str();
+    };
+
+    const auto overlap = WifiRu::DoesOverlap(bw, ru, rus);
+    NS_TEST_EXPECT_MSG_EQ(overlap,
+                          overlapExpected,
+                          "BW=" << bw << ", ru=" << ru << " , rus=" << printToStr(rus)
+                                << ". Expected overlap " << overlapExpected
+                                << " differs from actual " << overlap);
+}
+
+void
+WifiRuOverlappingTest::DoRun()
+{
+    const auto p80{true};
+    const auto s80{false};
+    const auto p160{(m_modClass == WIFI_MOD_CLASS_HE) ? std::nullopt : std::optional(true)};
+    const auto s160{(m_modClass == WIFI_MOD_CLASS_HE) ? std::nullopt : std::optional(false)};
+
+    /* 20 MHz PPDU */
+    {
+        const MHz_u bw{20};
+
+        auto ru = MakeRuSpec(RuType::RU_242_TONE, 1, p80, p160);
+
+        // 242-tones RU should overlap with 26-tones RUs in same 80 MHz segment
+        RunOne(bw,
+               ru,
+               {MakeRuSpec(RuType::RU_26_TONE, 1, p80, p160),
+                MakeRuSpec(RuType::RU_26_TONE, 2, p80, p160),
+                MakeRuSpec(RuType::RU_26_TONE, 3, p80, p160),
+                MakeRuSpec(RuType::RU_26_TONE, 4, p80, p160),
+                MakeRuSpec(RuType::RU_26_TONE, 5, p80, p160),
+                MakeRuSpec(RuType::RU_26_TONE, 6, p80, p160),
+                MakeRuSpec(RuType::RU_26_TONE, 7, p80, p160),
+                MakeRuSpec(RuType::RU_26_TONE, 8, p80, p160),
+                MakeRuSpec(RuType::RU_26_TONE, 9, p80, p160)},
+               true);
+
+        // 242-tones RU should not overlap with 26-tones RUs in same 160 MHz segment but different
+        // 80 MHz segment
+        RunOne(bw,
+               ru,
+               {MakeRuSpec(RuType::RU_26_TONE, 1, s80, p160),
+                MakeRuSpec(RuType::RU_26_TONE, 2, s80, p160),
+                MakeRuSpec(RuType::RU_26_TONE, 3, s80, p160),
+                MakeRuSpec(RuType::RU_26_TONE, 4, s80, p160),
+                MakeRuSpec(RuType::RU_26_TONE, 5, s80, p160),
+                MakeRuSpec(RuType::RU_26_TONE, 6, s80, p160),
+                MakeRuSpec(RuType::RU_26_TONE, 7, s80, p160),
+                MakeRuSpec(RuType::RU_26_TONE, 8, s80, p160),
+                MakeRuSpec(RuType::RU_26_TONE, 9, s80, p160)},
+               false);
+
+        // 242-tones RU should not overlap with 26-tones RUs in different 160 MHz segment
+        if (m_modClass != WIFI_MOD_CLASS_HE)
+        {
+            RunOne(bw,
+                   ru,
+                   {MakeRuSpec(RuType::RU_26_TONE, 1, p80, s160),
+                    MakeRuSpec(RuType::RU_26_TONE, 2, p80, s160),
+                    MakeRuSpec(RuType::RU_26_TONE, 3, p80, s160),
+                    MakeRuSpec(RuType::RU_26_TONE, 4, p80, s160),
+                    MakeRuSpec(RuType::RU_26_TONE, 5, p80, s160),
+                    MakeRuSpec(RuType::RU_26_TONE, 6, p80, s160),
+                    MakeRuSpec(RuType::RU_26_TONE, 7, p80, s160),
+                    MakeRuSpec(RuType::RU_26_TONE, 8, p80, s160),
+                    MakeRuSpec(RuType::RU_26_TONE, 9, p80, s160)},
+                   false);
+        }
+    }
+
+    /* 80 MHz PPDU */
+    {
+        const MHz_u bw{80};
+
+        auto ru = MakeRuSpec(RuType::RU_106_TONE, 1, p80, p160);
+
+        // 106-tones RU should overlap with 484-tones RUs in same 80 MHz segment
+        RunOne(bw,
+               ru,
+               {MakeRuSpec(RuType::RU_484_TONE, 1, p80, p160),
+                MakeRuSpec(RuType::RU_484_TONE, 2, p80, p160)},
+               true);
+
+        // 106-tones RU should not overlap with 484-tones RUs in same 160 MHz segment but different
+        // 80 MHz segment
+        RunOne(bw,
+               ru,
+               {MakeRuSpec(RuType::RU_484_TONE, 1, s80, p160),
+                MakeRuSpec(RuType::RU_484_TONE, 2, s80, p160)},
+               false);
+
+        // 106-tones RU should not overlap with 484-tones RUs in different 160 MHz segment
+        if (m_modClass != WIFI_MOD_CLASS_HE)
+        {
+            RunOne(bw,
+                   ru,
+                   {MakeRuSpec(RuType::RU_484_TONE, 1, s80, s160),
+                    MakeRuSpec(RuType::RU_484_TONE, 2, s80, s160)},
+                   false);
+        }
+    }
+
+    /* 160 MHz PPDU */
+    {
+        const MHz_u bw{160};
+
+        auto ru = MakeRuSpec(RuType::RU_996_TONE, 1, s80, p160);
+
+        // 996-tones RU should overlap with 2x996 RU in same 160 MHz segment
+        RunOne(bw, ru, {MakeRuSpec(RuType::RU_2x996_TONE, 1, p80, p160)}, true);
+
+        // 996-tones RU should not overlap with 2x996 RU in different 160 MHz segment
+        if (m_modClass != WIFI_MOD_CLASS_HE)
+        {
+            RunOne(bw, ru, {MakeRuSpec(RuType::RU_2x996_TONE, 1, p80, s160)}, false);
+        }
+    }
+
+    // TODO: these tests can be further extended with more combinations
+}
+
+/**
+ * @ingroup wifi-test
+ * @ingroup tests
+ *
  * @brief wifi primary channels test suite
  */
 class WifiRuAllocationTestSuite : public TestSuite
@@ -675,7 +4174,28 @@
 WifiRuAllocationTestSuite::WifiRuAllocationTestSuite()
     : TestSuite("wifi-ru-allocation", Type::UNIT)
 {
-    AddTestCase(new Wifi20MHzIndicesCoveringRuTest(), TestCase::Duration::QUICK);
+    AddTestCase(new Wifi20MHzIndicesCoveringRuTest(WIFI_STANDARD_80211ax),
+                TestCase::Duration::QUICK);
+    AddTestCase(new Wifi20MHzIndicesCoveringRuTest(WIFI_STANDARD_80211be),
+                TestCase::Duration::QUICK);
+    AddTestCase(new WifiNumRusInChannelTest(WIFI_MOD_CLASS_HE), TestCase::Duration::QUICK);
+    AddTestCase(new WifiNumRusInChannelTest(WIFI_MOD_CLASS_EHT), TestCase::Duration::QUICK);
+    AddTestCase(new WifiRusOfTypeInChannelTest(WIFI_MOD_CLASS_HE), TestCase::Duration::QUICK);
+    AddTestCase(new WifiRusOfTypeInChannelTest(WIFI_MOD_CLASS_EHT), TestCase::Duration::QUICK);
+    AddTestCase(new WifiCentral26TonesRusInChannelTest(WIFI_MOD_CLASS_HE),
+                TestCase::Duration::QUICK);
+    AddTestCase(new WifiCentral26TonesRusInChannelTest(WIFI_MOD_CLASS_EHT),
+                TestCase::Duration::QUICK);
+    AddTestCase(new WifiEqualSizedRusTest(WIFI_MOD_CLASS_HE), TestCase::Duration::QUICK);
+    AddTestCase(new WifiEqualSizedRusTest(WIFI_MOD_CLASS_EHT), TestCase::Duration::QUICK);
+    AddTestCase(new WifiSubcarrierGroupsTest(WIFI_MOD_CLASS_HE), TestCase::Duration::QUICK);
+    AddTestCase(new WifiSubcarrierGroupsTest(WIFI_MOD_CLASS_EHT), TestCase::Duration::QUICK);
+    AddTestCase(new WifiRuPhyIdxTo80MHzIdxAndFlagsTest(WIFI_MOD_CLASS_HE),
+                TestCase::Duration::QUICK);
+    AddTestCase(new WifiRuPhyIdxTo80MHzIdxAndFlagsTest(WIFI_MOD_CLASS_EHT),
+                TestCase::Duration::QUICK);
+    AddTestCase(new WifiRuOverlappingTest(WIFI_MOD_CLASS_HE), TestCase::Duration::QUICK);
+    AddTestCase(new WifiRuOverlappingTest(WIFI_MOD_CLASS_EHT), TestCase::Duration::QUICK);
 }
 
 static WifiRuAllocationTestSuite g_wifiRuAllocationTestSuite; ///< the test suite
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/test/wifi-test.cc ns-3.45/src/wifi/test/wifi-test.cc
--- ns-3.44/src/wifi/test/wifi-test.cc	2025-03-09 16:55:49.811372800 -0700
+++ ns-3.45/src/wifi/test/wifi-test.cc	2025-06-01 20:34:45.643702300 -0700
@@ -1508,7 +1508,7 @@
  *
  * The scenario considers a UDP transmission between a 40 MHz 802.11ac station and a
  * 40 MHz 802.11ac access point. All transmission parameters are checked so as
- * to ensure that only 2 {starting frequency, channelWidth, Number of subbands
+ * to ensure that only 3 {starting frequency, channelWidth, Number of subbands
  * in SpectrumModel, modulation type} tuples are used.
  *
  * See \bugid{2843}
@@ -1688,33 +1688,48 @@
     // {starting frequency, channelWidth, Number of subbands in SpectrumModel, modulation type}
     // tuples
     std::size_t numberTuples = m_distinctTuples.size();
-    NS_TEST_ASSERT_MSG_EQ(numberTuples, 2, "Only two distinct tuples expected");
-    NS_TEST_ASSERT_MSG_EQ(std::get<0>(m_distinctTuples[0]) - Hz_u{20e6},
+    NS_TEST_ASSERT_MSG_EQ(numberTuples, 3, "Only three distinct tuples expected");
+    NS_TEST_EXPECT_MSG_EQ(std::get<0>(m_distinctTuples[0]) - Hz_u{20e6},
                           std::get<0>(m_distinctTuples[1]),
                           "The starting frequency of the first tuple should be shifted 20 MHz to "
                           "the right wrt second tuple");
     // Note that the first tuple should the one initiated by the beacon, i.e. non-HT OFDM (20 MHz)
-    NS_TEST_ASSERT_MSG_EQ(std::get<1>(m_distinctTuples[0]),
+    NS_TEST_EXPECT_MSG_EQ(std::get<1>(m_distinctTuples[0]),
                           MHz_u{20},
                           "First tuple's channel width should be 20 MHz");
-    NS_TEST_ASSERT_MSG_EQ(std::get<2>(m_distinctTuples[0]),
+    NS_TEST_EXPECT_MSG_EQ(std::get<2>(m_distinctTuples[0]),
                           193,
                           "First tuple should have 193 subbands (64+DC, 20MHz+DC, inband and 64*2 "
                           "out-of-band, 20MHz on each side)");
-    NS_TEST_ASSERT_MSG_EQ(std::get<3>(m_distinctTuples[0]),
+    NS_TEST_EXPECT_MSG_EQ(std::get<3>(m_distinctTuples[0]),
                           WifiModulationClass::WIFI_MOD_CLASS_OFDM,
                           "First tuple should be OFDM");
-    // Second tuple
-    NS_TEST_ASSERT_MSG_EQ(std::get<1>(m_distinctTuples[1]),
+    // Second tuple: data frames, VHT (40 MHz)
+    NS_TEST_EXPECT_MSG_EQ(std::get<1>(m_distinctTuples[1]),
                           channelWidth,
                           "Second tuple's channel width should be 40 MHz");
-    NS_TEST_ASSERT_MSG_EQ(std::get<2>(m_distinctTuples[1]),
+    NS_TEST_EXPECT_MSG_EQ(std::get<2>(m_distinctTuples[1]),
                           385,
                           "Second tuple should have 385 subbands (128+DC, 40MHz+DC, inband and "
                           "128*2 out-of-band, 40MHz on each side)");
-    NS_TEST_ASSERT_MSG_EQ(std::get<3>(m_distinctTuples[1]),
+    NS_TEST_EXPECT_MSG_EQ(std::get<3>(m_distinctTuples[1]),
                           WifiModulationClass::WIFI_MOD_CLASS_VHT,
                           "Second tuple should be VHT_OFDM");
+    // Third tuple: control response frames, non-HT (OFDM) duplicate (40 MHz)
+    NS_TEST_EXPECT_MSG_EQ(std::get<0>(m_distinctTuples[1]),
+                          std::get<0>(m_distinctTuples[2]),
+                          "The starting frequency of the third tuple should be the same as the "
+                          "second tuple");
+    NS_TEST_EXPECT_MSG_EQ(std::get<1>(m_distinctTuples[2]),
+                          channelWidth,
+                          "Third tuple's channel width should be 40 MHz");
+    NS_TEST_EXPECT_MSG_EQ(std::get<2>(m_distinctTuples[2]),
+                          385,
+                          "Third tuple should have 385 subbands (128+DC, 40MHz+DC, inband and "
+                          "128*2 out-of-band, 40MHz on each side)");
+    NS_TEST_EXPECT_MSG_EQ(std::get<3>(m_distinctTuples[2]),
+                          WifiModulationClass::WIFI_MOD_CLASS_OFDM,
+                          "Third tuple should be OFDM");
 }
 
 //-----------------------------------------------------------------------------
@@ -3579,7 +3594,7 @@
      * standard tables)
      * @returns true if data rates are the same, false otherwise
      */
-    bool CheckDataRate(HeRu::RuType ruType,
+    bool CheckDataRate(RuType ruType,
                        std::string mcs,
                        uint8_t nss,
                        Time guardInterval,
@@ -3593,7 +3608,7 @@
 }
 
 bool
-HeRuMcsDataRateTestCase::CheckDataRate(HeRu::RuType ruType,
+HeRuMcsDataRateTestCase::CheckDataRate(RuType ruType,
                                        std::string mcs,
                                        uint8_t nss,
                                        Time guardInterval,
@@ -3634,18 +3649,18 @@
     bool retval = true;
 
     // 26-tone RU, browse over all MCSs, GIs and Nss's (up to 4, current max)
-    retval = retval && CheckDataRate(HeRu::RU_26_TONE, "HeMcs0", 1, NanoSeconds(800), 9) &&
-             CheckDataRate(HeRu::RU_26_TONE, "HeMcs1", 1, NanoSeconds(1600), 17) &&
-             CheckDataRate(HeRu::RU_26_TONE, "HeMcs2", 1, NanoSeconds(3200), 23) &&
-             CheckDataRate(HeRu::RU_26_TONE, "HeMcs3", 1, NanoSeconds(3200), 30) &&
-             CheckDataRate(HeRu::RU_26_TONE, "HeMcs4", 2, NanoSeconds(1600), 100) &&
-             CheckDataRate(HeRu::RU_26_TONE, "HeMcs5", 3, NanoSeconds(1600), 200) &&
-             CheckDataRate(HeRu::RU_26_TONE, "HeMcs6", 4, NanoSeconds(1600), 300) &&
-             CheckDataRate(HeRu::RU_26_TONE, "HeMcs7", 4, NanoSeconds(3200), 300) &&
-             CheckDataRate(HeRu::RU_26_TONE, "HeMcs8", 4, NanoSeconds(1600), 400) &&
-             CheckDataRate(HeRu::RU_26_TONE, "HeMcs9", 4, NanoSeconds(3200), 400) &&
-             CheckDataRate(HeRu::RU_26_TONE, "HeMcs10", 4, NanoSeconds(1600), 500) &&
-             CheckDataRate(HeRu::RU_26_TONE, "HeMcs11", 4, NanoSeconds(3200), 500);
+    retval = retval && CheckDataRate(RuType::RU_26_TONE, "HeMcs0", 1, NanoSeconds(800), 9) &&
+             CheckDataRate(RuType::RU_26_TONE, "HeMcs1", 1, NanoSeconds(1600), 17) &&
+             CheckDataRate(RuType::RU_26_TONE, "HeMcs2", 1, NanoSeconds(3200), 23) &&
+             CheckDataRate(RuType::RU_26_TONE, "HeMcs3", 1, NanoSeconds(3200), 30) &&
+             CheckDataRate(RuType::RU_26_TONE, "HeMcs4", 2, NanoSeconds(1600), 100) &&
+             CheckDataRate(RuType::RU_26_TONE, "HeMcs5", 3, NanoSeconds(1600), 200) &&
+             CheckDataRate(RuType::RU_26_TONE, "HeMcs6", 4, NanoSeconds(1600), 300) &&
+             CheckDataRate(RuType::RU_26_TONE, "HeMcs7", 4, NanoSeconds(3200), 300) &&
+             CheckDataRate(RuType::RU_26_TONE, "HeMcs8", 4, NanoSeconds(1600), 400) &&
+             CheckDataRate(RuType::RU_26_TONE, "HeMcs9", 4, NanoSeconds(3200), 400) &&
+             CheckDataRate(RuType::RU_26_TONE, "HeMcs10", 4, NanoSeconds(1600), 500) &&
+             CheckDataRate(RuType::RU_26_TONE, "HeMcs11", 4, NanoSeconds(3200), 500);
 
     NS_TEST_EXPECT_MSG_EQ(
         retval,
@@ -3653,12 +3668,12 @@
         "26-tone RU  data rate verification for different MCSs, GIs, and Nss's failed");
 
     // Check other RU sizes
-    retval = retval && CheckDataRate(HeRu::RU_52_TONE, "HeMcs2", 1, NanoSeconds(1600), 50) &&
-             CheckDataRate(HeRu::RU_106_TONE, "HeMcs9", 1, NanoSeconds(800), 500) &&
-             CheckDataRate(HeRu::RU_242_TONE, "HeMcs5", 1, NanoSeconds(1600), 650) &&
-             CheckDataRate(HeRu::RU_484_TONE, "HeMcs3", 1, NanoSeconds(1600), 650) &&
-             CheckDataRate(HeRu::RU_996_TONE, "HeMcs5", 1, NanoSeconds(3200), 2450) &&
-             CheckDataRate(HeRu::RU_2x996_TONE, "HeMcs3", 1, NanoSeconds(3200), 2450);
+    retval = retval && CheckDataRate(RuType::RU_52_TONE, "HeMcs2", 1, NanoSeconds(1600), 50) &&
+             CheckDataRate(RuType::RU_106_TONE, "HeMcs9", 1, NanoSeconds(800), 500) &&
+             CheckDataRate(RuType::RU_242_TONE, "HeMcs5", 1, NanoSeconds(1600), 650) &&
+             CheckDataRate(RuType::RU_484_TONE, "HeMcs3", 1, NanoSeconds(1600), 650) &&
+             CheckDataRate(RuType::RU_996_TONE, "HeMcs5", 1, NanoSeconds(3200), 2450) &&
+             CheckDataRate(RuType::RU_2x996_TONE, "HeMcs3", 1, NanoSeconds(3200), 2450);
 
     NS_TEST_EXPECT_MSG_EQ(retval,
                           true,
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/test/wifi-transmit-mask-test.cc ns-3.45/src/wifi/test/wifi-transmit-mask-test.cc
--- ns-3.44/src/wifi/test/wifi-transmit-mask-test.cc	2025-03-09 16:55:49.815372700 -0700
+++ ns-3.45/src/wifi/test/wifi-transmit-mask-test.cc	2025-06-01 20:34:45.643702300 -0700
@@ -213,10 +213,12 @@
         break;
 
     case WIFI_STANDARD_80211ax:
+    case WIFI_STANDARD_80211be:
         NS_ASSERT((m_band != WIFI_PHY_BAND_2_4GHZ) ||
                   (m_channelWidth < MHz_u{80})); // not enough space in 2.4 GHz bands
         NS_ASSERT(m_channelWidth == MHz_u{20} || m_channelWidth == MHz_u{40} ||
-                  m_channelWidth == MHz_u{80} || m_channelWidth == MHz_u{160});
+                  m_channelWidth == MHz_u{80} || m_channelWidth == MHz_u{160} ||
+                  m_channelWidth == MHz_u{320});
         m_actualSpectrum =
             WifiSpectrumValueHelper::CreateHeOfdmTxPowerSpectralDensity(m_centerFreqs,
                                                                         m_channelWidth,
@@ -961,7 +963,7 @@
         std::make_pair(2563, dBr_u{0.0}),     // first 80 MHz allocated band right (start)
         std::make_pair(3060, dBr_u{0.0}),     // first 80 MHz allocated band right (stop)
         std::make_pair(3061, dBr_u{-20.0}),   // gap between 80 MHz bands (start)
-        std::make_pair(3083, dBr_u{-20.0}),   // gap between 80 MHz bands (start)
+        std::make_pair(3083, dBr_u{-20.0}),   // gap between 80 MHz bands (stop)
         std::make_pair(3084, dBr_u{0.0}),     // second 80 MHz allocated band left (start)
         std::make_pair(3581, dBr_u{0.0}),     // second 80 MHz allocated band left (stop)
         std::make_pair(3582, dBr_u{-20.0}),   // second 80 MHz DC band (start)
@@ -1325,7 +1327,7 @@
         std::make_pair(2563, dBr_u{0.0}),      // first 80 MHz allocated band right (start)
         std::make_pair(3060, dBr_u{0.0}),      // first 80 MHz allocated band right (stop)
         std::make_pair(3061, dBr_u{-20.0}),    // gap between 80 MHz bands (start)
-        std::make_pair(3083, dBr_u{-20.0}),    // gap between 80 MHz bands (start)
+        std::make_pair(3083, dBr_u{-20.0}),    // gap between 80 MHz bands (stop)
         std::make_pair(3084, dBr_u{0.0}),      // second 80 MHz allocated band left (start)
         std::make_pair(3581, dBr_u{0.0}),      // second 80 MHz allocated band left (stop)
         std::make_pair(3582, dBr_u{-20.0}),    // second 80 MHz DC band (start)
@@ -1376,7 +1378,7 @@
         std::make_pair(2567, dBr_u{-20.0}),   // punctured band (start)
         std::make_pair(3060, dBr_u{-20.0}),   // punctured band (stop)
         std::make_pair(3061, dBr_u{-20.0}),   // gap between 80 MHz bands (start)
-        std::make_pair(3083, dBr_u{-20.0}),   // gap between 80 MHz bands (start)
+        std::make_pair(3083, dBr_u{-20.0}),   // gap between 80 MHz bands (stop)
         std::make_pair(3084, dBr_u{0.0}),     // second 80 MHz allocated band left (start)
         std::make_pair(3581, dBr_u{0.0}),     // second 80 MHz allocated band left (stop)
         std::make_pair(3582, dBr_u{-20.0}),   // second 80 MHz DC band (start)
@@ -1425,7 +1427,7 @@
         std::make_pair(2563, dBr_u{0.0}),     // first 80 MHz allocated band right (start)
         std::make_pair(3060, dBr_u{0.0}),     // first 80 MHz allocated band right (stop)
         std::make_pair(3061, dBr_u{-20.0}),   // gap between 80 MHz bands (start)
-        std::make_pair(3083, dBr_u{-20.0}),   // gap between 80 MHz bands (start)
+        std::make_pair(3083, dBr_u{-20.0}),   // gap between 80 MHz bands (stop)
         std::make_pair(3084, dBr_u{-20.0}),   // punctured band (start)
         std::make_pair(3576, dBr_u{-20.0}),   // punctured band (stop)
         std::make_pair(3577, dBr_u{-20.0}),   // punctured band increasing slope (start)
@@ -1476,7 +1478,7 @@
         std::make_pair(2563, dBr_u{0.0}),     // first 80 MHz allocated band right (start)
         std::make_pair(3060, dBr_u{0.0}),     // first 80 MHz allocated band right (stop)
         std::make_pair(3061, dBr_u{-20.0}),   // gap between 80 MHz bands (start)
-        std::make_pair(3083, dBr_u{-20.0}),   // gap between 80 MHz bands (start)
+        std::make_pair(3083, dBr_u{-20.0}),   // gap between 80 MHz bands (stop)
         std::make_pair(3084, dBr_u{0.0}),     // second 80 MHz allocated band left (start)
         std::make_pair(3581, dBr_u{0.0}),     // second 80 MHz allocated band left (stop)
         std::make_pair(3582, dBr_u{-20.0}),   // second 80 MHz DC band (start)
@@ -1504,4 +1506,487 @@
                                        prec,
                                        {false, false, false, false, false, false, true, true}),
         TestCase::Duration::QUICK);
+
+    // ============================================================================================
+    // 11be 20MHz @ 6GHz
+    NS_LOG_FUNCTION("Check slopes for 11be 20MHz @ 6GHz");
+    maskSlopes = {
+        std::make_pair(0, -40.0),     // Outer band left (start)
+        std::make_pair(127, -28.094), // Outer band left (stop)
+        std::make_pair(128, -28.000), // Middle band left (start)
+        std::make_pair(252, -20.064), // Middle band left (stop)
+        std::make_pair(253, -20.0),   // Flat junction band left (start)
+        std::make_pair(255, -20.0),   // Flat junction band left (stop)
+        std::make_pair(256, -20.0),   // Inner band left (start)
+        std::make_pair(261, -3.333),  // Inner band left (stop)
+        std::make_pair(262, 0.0),     // allocated band left (start)
+        std::make_pair(382, 0.0),     // allocated band left (stop)
+        std::make_pair(383, -20.0),   // DC band (start)
+        std::make_pair(385, -20.0),   // DC band (stop)
+        std::make_pair(386, 0.0),     // allocated band right (start)
+        std::make_pair(506, 0.0),     // allocated band right (stop)
+        std::make_pair(507, -3.333),  // Inner band right (start)
+        std::make_pair(512, -20.0),   // Inner band right (stop)
+        std::make_pair(513, -20.0),   // Flat junction band right (start)
+        std::make_pair(515, -20.0),   // Flat junction band right (stop)
+        std::make_pair(516, -20.064), // Middle band right (start)
+        std::make_pair(640, -28.000), // Middle band right (stop)
+        std::make_pair(641, -28.094), // Outer band right (start)
+        std::make_pair(768, -40.0),   // Outer band right (stop)
+    };
+
+    AddTestCase(new WifiOfdmMaskSlopesTestCase("11ax_6GHz 20MHz",
+                                               WIFI_STANDARD_80211be,
+                                               WIFI_PHY_BAND_6GHZ,
+                                               MHz_u{20},
+                                               {MHz_u{5955}},
+                                               maskSlopes,
+                                               tol,
+                                               prec),
+                TestCase::Duration::QUICK);
+
+    // ============================================================================================
+    // 11be 40MHz @ 6GHz
+    NS_LOG_FUNCTION("Check slopes for 11be 40MHz @ 6GHz");
+    maskSlopes = {
+        std::make_pair(0, -40.0),      // Outer band left (start)
+        std::make_pair(255, -28.047),  // Outer band left (stop)
+        std::make_pair(256, -28.000),  // Middle band left (start)
+        std::make_pair(505, -20.032),  // Middle band left (stop)
+        std::make_pair(506, -20.0),    // Flat junction band left (start)
+        std::make_pair(510, -20.0),    // Flat junction band left (stop)
+        std::make_pair(511, -20.0),    // Inner band left (start)
+        std::make_pair(523, -1.538),   // Inner band left (stop)
+        std::make_pair(524, 0.0),      // allocated band left (start)
+        std::make_pair(765, 0.0),      // allocated band left (stop)
+        std::make_pair(766, -20.0),    // DC band (start)
+        std::make_pair(770, -20.0),    // DC band (stop)
+        std::make_pair(771, 0.0),      // allocated band right (start)
+        std::make_pair(1012, 0.0),     // allocated band right (stop)
+        std::make_pair(1013, -1.538),  // Inner band right (start)
+        std::make_pair(1025, -20.0),   // Inner band right (stop)
+        std::make_pair(1026, -20.0),   // Flat junction band right (start)
+        std::make_pair(1030, -20.0),   // Flat junction band right (stop)
+        std::make_pair(1031, -20.032), // Middle band right (start)
+        std::make_pair(1280, -28.000), // Middle band right (stop)
+        std::make_pair(1281, -28.047), // Outer band right (start)
+        std::make_pair(1536, -40.0),   // Outer band right (stop)
+    };
+
+    AddTestCase(new WifiOfdmMaskSlopesTestCase("11be_6GHz 40MHz",
+                                               WIFI_STANDARD_80211be,
+                                               WIFI_PHY_BAND_6GHZ,
+                                               MHz_u{40},
+                                               {MHz_u{5965}},
+                                               maskSlopes,
+                                               tol,
+                                               prec),
+                TestCase::Duration::QUICK);
+
+    // ============================================================================================
+    // 11be 80MHz @ 6GHz
+    NS_LOG_FUNCTION("Check slopes for 11be 80MHz @ 6GHz");
+    maskSlopes = {
+        std::make_pair(0, -40.0),      // Outer band left (start)
+        std::make_pair(511, -28.023),  // Outer band left (stop)
+        std::make_pair(512, -28.000),  // Middle band left (start)
+        std::make_pair(1017, -20.016), // Middle band left (stop)
+        std::make_pair(1018, -20.0),   // Flat junction band left (start)
+        std::make_pair(1022, -20.0),   // Flat junction band left (stop)
+        std::make_pair(1023, -20.0),   // Inner band left (start)
+        std::make_pair(1035, -1.538),  // Inner band left (stop)
+        std::make_pair(1036, 0.0),     // allocated band left (start)
+        std::make_pair(1533, 0.0),     // allocated band left (stop)
+        std::make_pair(1534, -20.0),   // DC band (start)
+        std::make_pair(1538, -20.0),   // DC band (stop)
+        std::make_pair(1539, 0.0),     // allocated band right (start)
+        std::make_pair(2036, 0.0),     // allocated band right (stop)
+        std::make_pair(2037, -1.538),  // Inner band right (start)
+        std::make_pair(2049, -20.0),   // Inner band right (stop)
+        std::make_pair(2050, -20.0),   // Flat junction band right (start)
+        std::make_pair(2054, -20.0),   // Flat junction band right (stop)
+        std::make_pair(2055, -20.016), // Middle band right (start)
+        std::make_pair(2560, -28.000), // Middle band right (stop)
+        std::make_pair(2561, -28.023), // Outer band right (start)
+        std::make_pair(3072, -40.0),   // Outer band right (stop)
+    };
+
+    AddTestCase(new WifiOfdmMaskSlopesTestCase("11be_6GHz 80MHz",
+                                               WIFI_STANDARD_80211be,
+                                               WIFI_PHY_BAND_6GHZ,
+                                               MHz_u{80},
+                                               {MHz_u{5985}},
+                                               maskSlopes,
+                                               tol,
+                                               prec),
+                TestCase::Duration::QUICK);
+
+    // ============================================================================================
+    // 11be 160MHz @ 6GHz
+    NS_LOG_FUNCTION("Check slopes for 11be 160MHz @ 6GHz");
+    maskSlopes = {
+        std::make_pair(0, -40.0),      // Outer band left (start)
+        std::make_pair(1023, -28.012), // Outer band left (stop)
+        std::make_pair(1024, -28.000), // Middle band left (start)
+        std::make_pair(2041, -20.008), // Middle band left (stop)
+        std::make_pair(2042, -20.0),   // Flat junction band left (start)
+        std::make_pair(2046, -20.0),   // Flat junction band left (stop)
+        std::make_pair(2047, -20.0),   // Inner band left (start)
+        std::make_pair(2059, -1.538),  // Inner band left (stop)
+        std::make_pair(2060, 0.0),     // first 80 MHz allocated band left (start)
+        std::make_pair(2557, 0.0),     // first 80 MHz allocated band left (stop)
+        std::make_pair(2558, -20.0),   // first 80 MHz DC band (start)
+        std::make_pair(2562, -20.0),   // first 80 MHz DC band (stop)
+        std::make_pair(2563, 0.0),     // first 80 MHz allocated band right (start)
+        std::make_pair(3060, 0.0),     // first 80 MHz allocated band right (stop)
+        std::make_pair(3061, -20.0),   // gap between 80 MHz bands (start)
+        std::make_pair(3083, -20.0),   // gap between 80 MHz bands (stop)
+        std::make_pair(3084, 0.0),     // second 80 MHz allocated band left (start)
+        std::make_pair(3581, 0.0),     // second 80 MHz allocated band left (stop)
+        std::make_pair(3582, -20.0),   // second 80 MHz DC band (start)
+        std::make_pair(3586, -20.0),   // second 80 MHz DC band (stop)
+        std::make_pair(3587, 0.0),     // second 80 MHz allocated band right (start)
+        std::make_pair(4084, 0.0),     // second 80 MHz allocated band right (stop)
+        std::make_pair(4085, -1.538),  // Inner band right (start)
+        std::make_pair(4097, -20.0),   // Inner band right (stop)
+        std::make_pair(4098, -20.0),   // Flat junction band right (start)
+        std::make_pair(4102, -20.0),   // Flat junction band right (stop)
+        std::make_pair(4103, -20.008), // Middle band right (start)
+        std::make_pair(5120, -28.000), // Middle band right (stop)
+        std::make_pair(5121, -28.012), // Outer band right (start)
+        std::make_pair(6144, -40.0),   // Outer band right (stop)
+    };
+
+    AddTestCase(new WifiOfdmMaskSlopesTestCase("11be_6GHz 160MHz",
+                                               WIFI_STANDARD_80211ax,
+                                               WIFI_PHY_BAND_6GHZ,
+                                               MHz_u{160},
+                                               {MHz_u{6025}},
+                                               maskSlopes,
+                                               tol,
+                                               prec),
+                TestCase::Duration::QUICK);
+
+    // ============================================================================================
+    // 11be 320MHz @ 6GHz
+    NS_LOG_FUNCTION("Check slopes for 11be 320MHz @ 6GHz");
+    maskSlopes = {
+        std::make_pair(0, -40.0),       // Outer band left (start)
+        std::make_pair(2047, -28.012),  // Outer band left (stop)
+        std::make_pair(2048, -28.000),  // Middle band left (start)
+        std::make_pair(4089, -20.008),  // Middle band left (stop)
+        std::make_pair(4090, -20.0),    // Flat junction band left (start)
+        std::make_pair(4094, -20.0),    // Flat junction band left (stop)
+        std::make_pair(4095, -20.0),    // Inner band left (start)
+        std::make_pair(4107, -1.538),   // Inner band left (stop)
+        std::make_pair(4108, 0.0),      // first 80 MHz allocated band left (start)
+        std::make_pair(4605, 0.0),      // first 80 MHz allocated band left (stop)
+        std::make_pair(4606, -20.0),    // first 80 MHz DC band (start)
+        std::make_pair(4610, -20.0),    // first 80 MHz DC band (stop)
+        std::make_pair(4611, 0.0),      // first 80 MHz allocated band right (start)
+        std::make_pair(5108, 0.0),      // first 80 MHz allocated band right (stop)
+        std::make_pair(5109, -20.0),    // gap between 80 MHz bands (start)
+        std::make_pair(5131, -20.0),    // gap between 80 MHz bands (stop)
+        std::make_pair(5132, 0.0),      // second 80 MHz allocated band left (start)
+        std::make_pair(5629, 0.0),      // second 80 MHz allocated band left (stop)
+        std::make_pair(5630, -20.0),    // second 80 MHz DC band (start)
+        std::make_pair(5634, -20.0),    // second 80 MHz DC band (stop)
+        std::make_pair(5635, 0.0),      // second 80 MHz allocated band right (start)
+        std::make_pair(6132, 0.0),      // second 80 MHz allocated band right (stop)
+        std::make_pair(6133, -20.0),    // gap between 80 MHz bands (start)
+        std::make_pair(6155, -20.0),    // gap between 80 MHz bands (stop)
+        std::make_pair(6156, 0.0),      // third 80 MHz allocated band left (start)
+        std::make_pair(6653, 0.0),      // third 80 MHz allocated band left (stop)
+        std::make_pair(6654, -20.0),    // third 80 MHz DC band (start)
+        std::make_pair(6658, -20.0),    // third 80 MHz DC band (stop)
+        std::make_pair(6659, 0.0),      // third 80 MHz allocated band right (start)
+        std::make_pair(7156, 0.0),      // third 80 MHz allocated band right (stop)
+        std::make_pair(7157, -20.0),    // gap between 80 MHz bands (start)
+        std::make_pair(7179, -20.0),    // gap between 80 MHz bands (stop)
+        std::make_pair(7180, 0.0),      // fourth 80 MHz allocated band left (start)
+        std::make_pair(7677, 0.0),      // fourth 80 MHz allocated band left (stop)
+        std::make_pair(7678, -20.0),    // fourth 80 MHz DC band (start)
+        std::make_pair(7682, -20.0),    // fourth 80 MHz DC band (stop)
+        std::make_pair(7683, 0.0),      // fourth 80 MHz allocated band right (start)
+        std::make_pair(8180, 0.0),      // fourth 80 MHz allocated band right (stop)
+        std::make_pair(8181, -1.538),   // Inner band right (start)
+        std::make_pair(8193, -20.0),    // Inner band right (stop)
+        std::make_pair(8194, -20.0),    // Flat junction band right (start)
+        std::make_pair(8198, -20.0),    // Flat junction band right (stop)
+        std::make_pair(8199, -20.008),  // Middle band right (start)
+        std::make_pair(10240, -28.000), // Middle band right (stop)
+        std::make_pair(10241, -28.012), // Outer band right (start)
+        std::make_pair(12288, -40.0),   // Outer band right (stop)
+    };
+
+    AddTestCase(new WifiOfdmMaskSlopesTestCase("11be_6GHz 320MHz",
+                                               WIFI_STANDARD_80211ax,
+                                               WIFI_PHY_BAND_5GHZ,
+                                               MHz_u{320},
+                                               {MHz_u{6105}},
+                                               maskSlopes,
+                                               tol,
+                                               prec),
+                TestCase::Duration::QUICK);
+
+    // ============================================================================================
+    // 11be 320MHz @ 6GHz - first 20 MHz subchannel punctured
+    std::vector<bool> puncturedSubchannels(16, false);
+    NS_LOG_FUNCTION("Check slopes for 11be 320MHz @ 6GHz with first 20 MHz subchannel punctured");
+    maskSlopes = {
+        std::make_pair(0, -40.0),       // Outer band left (start)
+        std::make_pair(2047, -28.012),  // Outer band left (stop)
+        std::make_pair(2048, -28.000),  // Middle band left (start)
+        std::make_pair(4089, -20.008),  // Middle band left (stop)
+        std::make_pair(4090, -20.0),    // Flat junction band left (start)
+        std::make_pair(4094, -20.0),    // Flat junction band left (stop)
+        std::make_pair(4095, -20.0),    // punctured band (start)
+        std::make_pair(4344, -20.0),    // punctured band (stop)
+        std::make_pair(4345, -20.0),    // punctured band increasing slope (start)
+        std::make_pair(4351, 0.0),      // punctured band increasing slope (stop)
+        std::make_pair(4352, 0.0),      // first 80 MHz allocated band left (start)
+        std::make_pair(4605, 0.0),      // first 80 MHz allocated band left (stop)
+        std::make_pair(4606, -20.0),    // first 80 MHz DC band (start)
+        std::make_pair(4610, -20.0),    // first 80 MHz DC band (stop)
+        std::make_pair(4611, 0.0),      // first 80 MHz allocated band right (start)
+        std::make_pair(5108, 0.0),      // first 80 MHz allocated band right (stop)
+        std::make_pair(5109, -20.0),    // gap between 80 MHz bands (start)
+        std::make_pair(5131, -20.0),    // gap between 80 MHz bands (stop)
+        std::make_pair(5132, 0.0),      // second 80 MHz allocated band left (start)
+        std::make_pair(5629, 0.0),      // second 80 MHz allocated band left (stop)
+        std::make_pair(5630, -20.0),    // second 80 MHz DC band (start)
+        std::make_pair(5634, -20.0),    // second 80 MHz DC band (stop)
+        std::make_pair(5635, 0.0),      // second 80 MHz allocated band right (start)
+        std::make_pair(6132, 0.0),      // second 80 MHz allocated band right (stop)
+        std::make_pair(6133, -20.0),    // gap between 80 MHz bands (start)
+        std::make_pair(6155, -20.0),    // gap between 80 MHz bands (stop)
+        std::make_pair(6156, 0.0),      // third 80 MHz allocated band left (start)
+        std::make_pair(6653, 0.0),      // third 80 MHz allocated band left (stop)
+        std::make_pair(6654, -20.0),    // third 80 MHz DC band (start)
+        std::make_pair(6658, -20.0),    // third 80 MHz DC band (stop)
+        std::make_pair(6659, 0.0),      // third 80 MHz allocated band right (start)
+        std::make_pair(7156, 0.0),      // third 80 MHz allocated band right (stop)
+        std::make_pair(7157, -20.0),    // gap between 80 MHz bands (start)
+        std::make_pair(7179, -20.0),    // gap between 80 MHz bands (stop)
+        std::make_pair(7180, 0.0),      // fourth 80 MHz allocated band left (start)
+        std::make_pair(7677, 0.0),      // fourth 80 MHz allocated band left (stop)
+        std::make_pair(7678, -20.0),    // fourth 80 MHz DC band (start)
+        std::make_pair(7682, -20.0),    // fourth 80 MHz DC band (stop)
+        std::make_pair(7683, 0.0),      // fourth 80 MHz allocated band right (start)
+        std::make_pair(8180, 0.0),      // fourth 80 MHz allocated band right (stop)
+        std::make_pair(8181, -1.538),   // Inner band right (start)
+        std::make_pair(8193, -20.0),    // Inner band right (stop)
+        std::make_pair(8194, -20.0),    // Flat junction band right (start)
+        std::make_pair(8198, -20.0),    // Flat junction band right (stop)
+        std::make_pair(8199, -20.008),  // Middle band right (start)
+        std::make_pair(10240, -28.000), // Middle band right (stop)
+        std::make_pair(10241, -28.012), // Outer band right (start)
+        std::make_pair(12288, -40.0),   // Outer band right (stop)
+    };
+
+    puncturedSubchannels.at(0) = true;
+    AddTestCase(new WifiOfdmMaskSlopesTestCase("11be_6GHz 320MHz with first 20 MHz punctured",
+                                               WIFI_STANDARD_80211ax,
+                                               WIFI_PHY_BAND_5GHZ,
+                                               MHz_u{320},
+                                               {MHz_u{6105}},
+                                               maskSlopes,
+                                               tol,
+                                               prec,
+                                               puncturedSubchannels),
+                TestCase::Duration::QUICK);
+
+    // ============================================================================================
+    // 11be 320MHz @ 6GHz - second 40 MHz subchannel punctured
+    puncturedSubchannels = std::vector<bool>(16, false);
+    NS_LOG_FUNCTION("Check slopes for 11be 320MHz @ 6GHz with second 40 MHz subchannel punctured");
+    maskSlopes = {
+        std::make_pair(0, -40.0),       // Outer band left (start)
+        std::make_pair(2047, -28.012),  // Outer band left (stop)
+        std::make_pair(2048, -28.000),  // Middle band left (start)
+        std::make_pair(4089, -20.008),  // Middle band left (stop)
+        std::make_pair(4090, -20.0),    // Flat junction band left (start)
+        std::make_pair(4094, -20.0),    // Flat junction band left (stop)
+        std::make_pair(4095, -20.0),    // Inner band left (start)
+        std::make_pair(4107, -1.538),   // Inner band left (stop)
+        std::make_pair(4108, 0.0),      // first 80 MHz allocated band left (start)
+        std::make_pair(4605, 0.0),      // first 80 MHz allocated band left (stop)
+        std::make_pair(4606, -20.0),    // first 80 MHz DC band (start)
+        std::make_pair(4610, -20.0),    // first 80 MHz DC band (stop)
+        std::make_pair(4611, -10.0),    // punctured band decreasing slope (start)
+        std::make_pair(4614, -20.0),    // punctured band decreasing slope (stop)
+        std::make_pair(4615, -20.0),    // punctured band (start)
+        std::make_pair(5108, -20.0),    // punctured band (stop)
+        std::make_pair(5109, -20.0),    // gap between 80 MHz bands (start)
+        std::make_pair(5131, -20.0),    // gap between 80 MHz bands (stop)
+        std::make_pair(5132, 0.0),      // second 80 MHz allocated band left (start)
+        std::make_pair(5629, 0.0),      // second 80 MHz allocated band left (stop)
+        std::make_pair(5630, -20.0),    // second 80 MHz DC band (start)
+        std::make_pair(5634, -20.0),    // second 80 MHz DC band (stop)
+        std::make_pair(5635, 0.0),      // second 80 MHz allocated band right (start)
+        std::make_pair(6132, 0.0),      // second 80 MHz allocated band right (stop)
+        std::make_pair(6133, -20.0),    // gap between 80 MHz bands (start)
+        std::make_pair(6155, -20.0),    // gap between 80 MHz bands (stop)
+        std::make_pair(6156, 0.0),      // third 80 MHz allocated band left (start)
+        std::make_pair(6653, 0.0),      // third 80 MHz allocated band left (stop)
+        std::make_pair(6654, -20.0),    // third 80 MHz DC band (start)
+        std::make_pair(6658, -20.0),    // third 80 MHz DC band (stop)
+        std::make_pair(6659, 0.0),      // third 80 MHz allocated band right (start)
+        std::make_pair(7156, 0.0),      // third 80 MHz allocated band right (stop)
+        std::make_pair(7157, -20.0),    // gap between 80 MHz bands (start)
+        std::make_pair(7179, -20.0),    // gap between 80 MHz bands (stop)
+        std::make_pair(7180, 0.0),      // fourth 80 MHz allocated band left (start)
+        std::make_pair(7677, 0.0),      // fourth 80 MHz allocated band left (stop)
+        std::make_pair(7678, -20.0),    // fourth 80 MHz DC band (start)
+        std::make_pair(7682, -20.0),    // fourth 80 MHz DC band (stop)
+        std::make_pair(7683, 0.0),      // fourth 80 MHz allocated band right (start)
+        std::make_pair(8180, 0.0),      // fourth 80 MHz allocated band right (stop)
+        std::make_pair(8181, -1.538),   // Inner band right (start)
+        std::make_pair(8193, -20.0),    // Inner band right (stop)
+        std::make_pair(8194, -20.0),    // Flat junction band right (start)
+        std::make_pair(8198, -20.0),    // Flat junction band right (stop)
+        std::make_pair(8199, -20.008),  // Middle band right (start)
+        std::make_pair(10240, -28.000), // Middle band right (stop)
+        std::make_pair(10241, -28.012), // Outer band right (start)
+        std::make_pair(12288, -40.0),   // Outer band right (stop)
+    };
+
+    puncturedSubchannels.at(2) = true;
+    puncturedSubchannels.at(3) = true;
+    AddTestCase(new WifiOfdmMaskSlopesTestCase("11be_6GHz 320MHz with second 40 MHz punctured",
+                                               WIFI_STANDARD_80211ax,
+                                               WIFI_PHY_BAND_5GHZ,
+                                               MHz_u{320},
+                                               {MHz_u{6105}},
+                                               maskSlopes,
+                                               tol,
+                                               prec,
+                                               puncturedSubchannels),
+                TestCase::Duration::QUICK);
+
+    // ============================================================================================
+    // 11be 320MHz @ 6GHz - second 80 MHz subchannel punctured
+    puncturedSubchannels = std::vector<bool>(16, false);
+    NS_LOG_FUNCTION("Check slopes for 11be 320MHz @ 6GHz with second 80 MHz subchannel punctured");
+    maskSlopes = {
+        std::make_pair(0, -40.0),       // Outer band left (start)
+        std::make_pair(2047, -28.012),  // Outer band left (stop)
+        std::make_pair(2048, -28.000),  // Middle band left (start)
+        std::make_pair(4089, -20.008),  // Middle band left (stop)
+        std::make_pair(4090, -20.0),    // Flat junction band left (start)
+        std::make_pair(4094, -20.0),    // Flat junction band left (stop)
+        std::make_pair(4095, -20.0),    // Inner band left (start)
+        std::make_pair(4107, -1.538),   // Inner band left (stop)
+        std::make_pair(4108, 0.0),      // first 80 MHz allocated band left (start)
+        std::make_pair(4605, 0.0),      // first 80 MHz allocated band left (stop)
+        std::make_pair(4606, -20.0),    // first 80 MHz DC band (start)
+        std::make_pair(4610, -20.0),    // first 80 MHz DC band (stop)
+        std::make_pair(4611, 0.0),      // first 80 MHz allocated band right (start)
+        std::make_pair(5108, 0.0),      // first 80 MHz allocated band right (stop)
+        std::make_pair(5109, -20.0),    // gap between 80 MHz bands (start)
+        std::make_pair(5131, -20.0),    // gap between 80 MHz bands (stop)
+        std::make_pair(5132, -20.0),    // punctured band (start)
+        std::make_pair(6132, -20.0),    // punctured band (stop)
+        std::make_pair(6133, -20.0),    // gap between 80 MHz bands (start)
+        std::make_pair(6155, -20.0),    // gap between 80 MHz bands (stop)
+        std::make_pair(6156, 0.0),      // third 80 MHz allocated band left (start)
+        std::make_pair(6653, 0.0),      // third 80 MHz allocated band left (stop)
+        std::make_pair(6654, -20.0),    // third 80 MHz DC band (start)
+        std::make_pair(6658, -20.0),    // third 80 MHz DC band (stop)
+        std::make_pair(6659, 0.0),      // third 80 MHz allocated band right (start)
+        std::make_pair(7156, 0.0),      // third 80 MHz allocated band right (stop)
+        std::make_pair(7157, -20.0),    // gap between 80 MHz bands (start)
+        std::make_pair(7179, -20.0),    // gap between 80 MHz bands (stop)
+        std::make_pair(7180, 0.0),      // fourth 80 MHz allocated band left (start)
+        std::make_pair(7677, 0.0),      // fourth 80 MHz allocated band left (stop)
+        std::make_pair(7678, -20.0),    // fourth 80 MHz DC band (start)
+        std::make_pair(7682, -20.0),    // fourth 80 MHz DC band (stop)
+        std::make_pair(7683, 0.0),      // fourth 80 MHz allocated band right (start)
+        std::make_pair(8180, 0.0),      // fourth 80 MHz allocated band right (stop)
+        std::make_pair(8181, -1.538),   // Inner band right (start)
+        std::make_pair(8193, -20.0),    // Inner band right (stop)
+        std::make_pair(8194, -20.0),    // Flat junction band right (start)
+        std::make_pair(8198, -20.0),    // Flat junction band right (stop)
+        std::make_pair(8199, -20.008),  // Middle band right (start)
+        std::make_pair(10240, -28.000), // Middle band right (stop)
+        std::make_pair(10241, -28.012), // Outer band right (start)
+        std::make_pair(12288, -40.0),   // Outer band right (stop)
+    };
+
+    puncturedSubchannels.at(4) = true;
+    puncturedSubchannels.at(5) = true;
+    puncturedSubchannels.at(6) = true;
+    puncturedSubchannels.at(7) = true;
+    AddTestCase(new WifiOfdmMaskSlopesTestCase("11be_6GHz 320MHz with second 80 MHz punctured",
+                                               WIFI_STANDARD_80211ax,
+                                               WIFI_PHY_BAND_5GHZ,
+                                               320,
+                                               {6105},
+                                               maskSlopes,
+                                               tol,
+                                               prec,
+                                               puncturedSubchannels),
+                TestCase::Duration::QUICK);
+
+    // ============================================================================================
+    // 11be 320MHz @ 6GHz - last 120 MHz (40 MHz + 80 MHz) subchannel punctured
+    puncturedSubchannels = std::vector<bool>(16, false);
+    NS_LOG_FUNCTION("Check slopes for 11be 320MHz @ 6GHz with last 120 MHz subchannel punctured");
+    maskSlopes = {
+        std::make_pair(0, -40.0),       // Outer band left (start)
+        std::make_pair(2047, -28.012),  // Outer band left (stop)
+        std::make_pair(2048, -28.000),  // Middle band left (start)
+        std::make_pair(4089, -20.008),  // Middle band left (stop)
+        std::make_pair(4090, -20.0),    // Flat junction band left (start)
+        std::make_pair(4094, -20.0),    // Flat junction band left (stop)
+        std::make_pair(4095, -20.0),    // Inner band left (start)
+        std::make_pair(4107, -1.538),   // Inner band left (stop)
+        std::make_pair(4108, 0.0),      // first 80 MHz allocated band left (start)
+        std::make_pair(4605, 0.0),      // first 80 MHz allocated band left (stop)
+        std::make_pair(4606, -20.0),    // first 80 MHz DC band (start)
+        std::make_pair(4610, -20.0),    // first 80 MHz DC band (stop)
+        std::make_pair(4611, 0.0),      // first 80 MHz allocated band right (start)
+        std::make_pair(5108, 0.0),      // first 80 MHz allocated band right (stop)
+        std::make_pair(5109, -20.0),    // gap between 80 MHz bands (start)
+        std::make_pair(5131, -20.0),    // gap between 80 MHz bands (stop)
+        std::make_pair(5132, 0.0),      // second 80 MHz allocated band left (start)
+        std::make_pair(5629, 0.0),      // second 80 MHz allocated band left (stop)
+        std::make_pair(5630, -20.0),    // second 80 MHz DC band (start)
+        std::make_pair(5634, -20.0),    // second 80 MHz DC band (stop)
+        std::make_pair(5635, 0.0),      // second 80 MHz allocated band right (start)
+        std::make_pair(6132, 0.0),      // second 80 MHz allocated band right (stop)
+        std::make_pair(6133, -20.0),    // gap between 80 MHz bands (start)
+        std::make_pair(6155, -20.0),    // gap between 80 MHz bands (stop)
+        std::make_pair(6156, 0.0),      // third 80 MHz allocated band left (start)
+        std::make_pair(6653, 0.0),      // third 80 MHz allocated band left (stop)
+        std::make_pair(6654, -20.0),    // third 80 MHz DC band (start)
+        std::make_pair(6658, -20.0),    // third 80 MHz DC band (stop)
+        std::make_pair(6659, -10.0),    // punctured band decreasing slope (start)
+        std::make_pair(6662, -20.0),    // punctured band decreasing slope (stop)
+        std::make_pair(6663, -20.0),    // punctured band (start)
+        std::make_pair(8193, -20.0),    // punctured band (stop)
+        std::make_pair(8194, -20.0),    // Flat junction band right (start)
+        std::make_pair(8198, -20.0),    // Flat junction band right (stop)
+        std::make_pair(8199, -20.008),  // Middle band right (start)
+        std::make_pair(10240, -28.000), // Middle band right (stop)
+        std::make_pair(10241, -28.012), // Outer band right (start)
+        std::make_pair(12288, -40.0),   // Outer band right (stop)
+    };
+
+    puncturedSubchannels.at(10) = true;
+    puncturedSubchannels.at(11) = true;
+    puncturedSubchannels.at(12) = true;
+    puncturedSubchannels.at(13) = true;
+    puncturedSubchannels.at(14) = true;
+    puncturedSubchannels.at(15) = true;
+    AddTestCase(new WifiOfdmMaskSlopesTestCase("11be_6GHz 320MHz with last 120 MHz punctured",
+                                               WIFI_STANDARD_80211ax,
+                                               WIFI_PHY_BAND_5GHZ,
+                                               320,
+                                               {6105},
+                                               maskSlopes,
+                                               tol,
+                                               prec,
+                                               puncturedSubchannels),
+                TestCase::Duration::QUICK);
 }
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/test/wifi-txop-test.cc ns-3.45/src/wifi/test/wifi-txop-test.cc
--- ns-3.44/src/wifi/test/wifi-txop-test.cc	2025-03-09 16:55:49.815372700 -0700
+++ ns-3.45/src/wifi/test/wifi-txop-test.cc	2025-06-01 20:34:45.644702200 -0700
@@ -69,8 +69,15 @@
         bool singleRtsPerTxop; //!< whether protection mechanism is used no more than once per TXOP
         bool lengthBasedRtsCtsThresh; //!< if true, use length based RTS/CTS threshold; if false,
                                       //!< use TX duration based RTS/CTS threshold
-        bool protectedIfResponded; //!< whether a station is assumed to be protected if replied to
-                                   //!< a frame requiring acknowledgment
+        bool protectedIfResponded;  //!< whether a station is assumed to be protected if replied to
+                                    //!< a frame requiring acknowledgment
+        bool protectSingleExchange; //!< whether the Duration/ID field in frames establishing
+                                    //!< protection only covers the immediate frame exchange instead
+                                    //!< of rest of the TXOP limit
+        Time singleExchangeProtectionBuffer; //!< whether the NAV duration should be extended by a
+                                             //!< PIFS after the frame exchange when protection only
+                                             //!< covers the immediate frame exchange instead of
+                                             //!< rest of the TXOP limit
     };
 
     /**
@@ -137,35 +144,45 @@
         WifiTxVector txVector; ///< TX vector used to transmit the frame
     };
 
-    uint16_t m_nStations;                ///< number of stations
-    NetDeviceContainer m_staDevices;     ///< container for stations' NetDevices
-    NetDeviceContainer m_apDevices;      ///< container for AP's NetDevice
-    std::vector<FrameInfo> m_txPsdus;    ///< transmitted PSDUs
-    Time m_apTxopLimit;                  ///< TXOP limit for AP (AC BE)
-    uint8_t m_staAifsn;                  ///< AIFSN for STAs (AC BE)
-    uint32_t m_staCwMin;                 ///< CWmin for STAs (AC BE)
-    uint32_t m_staCwMax;                 ///< CWmax for STAs (AC BE)
-    Time m_staTxopLimit;                 ///< TXOP limit for STAs (AC BE)
-    uint16_t m_received;                 ///< number of packets received by the stations
-    bool m_nonHt;                        ///< whether to use 802.11a or 802.11ax
-    std::size_t m_payloadSizeRtsOn;      ///< size in bytes of packets protected by RTS
-    std::size_t m_payloadSizeRtsOff;     ///< size in bytes of packets not protected by RTS
-    Time m_startTime;                    ///< time when data frame exchanges start
-    WifiMode m_mode;                     ///< wifi mode used to transmit data frames
-    bool m_pifsRecovery;                 ///< whether to use PIFS recovery
-    bool m_singleRtsPerTxop;             ///< whether to use single RTS per TXOP
-    bool m_lengthBasedRtsCtsThresh;      ///< whether to use length based RTS/CTS threshold
-    bool m_protectedIfResponded;         ///< whether a STA is protected if it responds to the AP
-    Ptr<ListErrorModel> m_apErrorModel;  ///< error model to install on the AP
-    Ptr<ListErrorModel> m_staErrorModel; ///< error model to install on a STA
+    uint16_t m_nStations;                   ///< number of stations
+    NetDeviceContainer m_staDevices;        ///< container for stations' NetDevices
+    NetDeviceContainer m_apDevices;         ///< container for AP's NetDevice
+    std::vector<FrameInfo> m_txPsdus;       ///< transmitted PSDUs
+    Time m_apTxopLimit;                     ///< TXOP limit for AP (AC BE)
+    uint8_t m_staAifsn;                     ///< AIFSN for STAs (AC BE)
+    uint32_t m_staCwMin;                    ///< CWmin for STAs (AC BE)
+    uint32_t m_staCwMax;                    ///< CWmax for STAs (AC BE)
+    Time m_staTxopLimit;                    ///< TXOP limit for STAs (AC BE)
+    uint16_t m_received;                    ///< number of packets received by the stations
+    bool m_nonHt;                           ///< @copydoc Params::nonHt
+    std::size_t m_payloadSizeRtsOn;         ///< size in bytes of packets protected by RTS
+    std::size_t m_payloadSizeRtsOff;        ///< size in bytes of packets not protected by RTS
+    Time m_startTime;                       ///< time when data frame exchanges start
+    WifiMode m_mode;                        ///< wifi mode used to transmit data frames
+    bool m_pifsRecovery;                    ///< @copydoc Params::pifsRecovery
+    bool m_singleRtsPerTxop;                ///< @copydoc Params::singleRtsPerTxop
+    bool m_lengthBasedRtsCtsThresh;         ///< @copydoc Params::lengthBasedRtsCtsThresh
+    bool m_protectedIfResponded;            ///< @copydoc Params::protectedIfResponded
+    bool m_protectSingleExchange;           ///< @copydoc Params::protectSingleExchange
+    Time m_singleExchangeProtectionSurplus; ///< @copydoc Params::singleExchangeProtectionBuffer
+    Ptr<ListErrorModel> m_apErrorModel;     ///< error model to install on the AP
+    Ptr<ListErrorModel> m_staErrorModel;    ///< error model to install on a STA
     bool m_apCorrupted;  ///< whether the frame to be corrupted by the AP has been corrupted
     bool m_staCorrupted; ///< whether the frame to be corrupted by the STA has been corrupted
     std::vector<PacketSocketAddress> m_dlSockets; ///< packet socket address for DL traffic
     std::vector<PacketSocketAddress> m_ulSockets; ///< packet socket address for UL traffic
 };
 
-WifiTxopTest::WifiTxopTest(const Params& params)
-    : TestCase("Check correct operation within TXOPs"),
+WifiTxopTest::WifiTxopTest(const WifiTxopTest::Params& params)
+    : TestCase("Check correct operation within TXOPs with parameters: nonHt=" +
+               std::to_string(params.nonHt) +
+               " pifsRecovery=" + std::to_string(params.pifsRecovery) +
+               " singleRtsPerTxop=" + std::to_string(params.singleRtsPerTxop) +
+               " lengthBasedRtsCtsThresh=" + std::to_string(params.lengthBasedRtsCtsThresh) +
+               " protectedIfResponded=" + std::to_string(params.protectedIfResponded) +
+               " protectSingleExchange=" + std::to_string(params.protectSingleExchange) +
+               " singleExchangeProtectionBuffer=" +
+               std::to_string(params.singleExchangeProtectionBuffer.GetMicroSeconds()) + "us"),
       m_nStations(3),
       m_apTxopLimit(MicroSeconds(4768)),
       m_staAifsn(4),
@@ -182,6 +199,8 @@
       m_singleRtsPerTxop(params.singleRtsPerTxop),
       m_lengthBasedRtsCtsThresh(params.lengthBasedRtsCtsThresh),
       m_protectedIfResponded(params.protectedIfResponded),
+      m_protectSingleExchange(params.protectSingleExchange),
+      m_singleExchangeProtectionSurplus(params.singleExchangeProtectionBuffer),
       m_apErrorModel(CreateObject<ListErrorModel>()),
       m_staErrorModel(CreateObject<ListErrorModel>()),
       m_apCorrupted(false),
@@ -271,6 +290,9 @@
 void
 WifiTxopTest::DoRun()
 {
+    // LogComponentEnable("WifiTxopTest", LOG_LEVEL_ALL);
+    NS_LOG_FUNCTION(this);
+
     RngSeedManager::SetSeed(1);
     RngSeedManager::SetRun(40);
     int64_t streamNumber = 100;
@@ -293,6 +315,10 @@
     phy.Set("ChannelSettings", StringValue("{0, 20, BAND_5GHZ, 0}"));
 
     Config::SetDefault("ns3::QosFrameExchangeManager::PifsRecovery", BooleanValue(m_pifsRecovery));
+    Config::SetDefault("ns3::QosFrameExchangeManager::ProtectSingleExchange",
+                       BooleanValue(m_protectSingleExchange));
+    Config::SetDefault("ns3::QosFrameExchangeManager::SingleExchangeProtectionSurplus",
+                       TimeValue(m_singleExchangeProtectionSurplus));
     Config::SetDefault("ns3::WifiDefaultProtectionManager::SingleRtsPerTxop",
                        BooleanValue(m_singleRtsPerTxop));
     if (m_lengthBasedRtsCtsThresh)
@@ -325,6 +351,7 @@
                 SsidValue(Ssid("non-existent-ssid")));
 
     m_staDevices = wifi.Install(phy, mac, wifiStaNodes);
+    streamNumber += WifiHelper::AssignStreams(m_staDevices, streamNumber);
 
     mac.SetType(
         "ns3::ApWifiMac",
@@ -349,6 +376,7 @@
     mac.SetEdca(AC_BE, "TxopLimits", AttributeContainerValue<TimeValue>(std::list{m_apTxopLimit}));
 
     m_apDevices = wifi.Install(phy, mac, wifiApNode);
+    streamNumber += WifiHelper::AssignStreams(m_apDevices, streamNumber);
 
     // schedule association requests at different times. One station's SSID is
     // set to the correct value before initialization, so that such a station
@@ -365,9 +393,6 @@
                             Ssid("wifi-txop-ssid"));
     }
 
-    // Assign fixed streams to random variables in use
-    WifiHelper::AssignStreams(m_apDevices, streamNumber);
-
     MobilityHelper mobility;
     Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator>();
 
@@ -568,15 +593,20 @@
      * RA: STA1  [AP]       STA1   AP  [STA2]           STA2   AP   STA3   AP   STA2   AP    all
      *
      * NOTE: If ProtectedIfResponded is false, the last QoS data frame is protected by RTS/CTS
+     * NOTE: If ProtectSingleExchange is true, CF-END frames are not transmitted
+     *       and NAV ends once DATA+Ack is completed
      */
 
     // We expect 25 frames to be transmitted if SingleRtsPerTxop is false and 22 frames (2 RTS
     // less, 2 CTS less, 1 more CF-End). If ProtectedIfResponded is false, there are 2 frames
-    // (an RTS and a CTS) more.
-    NS_TEST_ASSERT_MSG_EQ(m_txPsdus.size(),
-                          (m_singleRtsPerTxop ? 24 + (m_protectedIfResponded ? 0 : 2)
-                                              : 27 + (m_protectedIfResponded ? 0 : 2)),
-                          "Unexpected number of transmitted frames");
+    // (an RTS and a CTS) more. If ProtectSingleExchange is true, there are 2 (if
+    // SingleRtsPerTxop is false) or 3 (if SingleRtsPerTxop is true) less frames (CF-END)
+    NS_TEST_ASSERT_MSG_EQ(
+        m_txPsdus.size(),
+        (m_singleRtsPerTxop
+             ? 21U + (m_protectedIfResponded ? 0U : 2U) + (m_protectSingleExchange ? 0U : 3U)
+             : 25U + (m_protectedIfResponded ? 0U : 2U) + (m_protectSingleExchange ? 0U : 2U)),
+        "Unexpected number of transmitted frames");
 
     // the first frame sent after 400ms is a QoS data frame sent by the AP to STA1 without RTS/CTS
     txopStart = m_txPsdus[0].txStart;
@@ -598,9 +628,15 @@
             rtsCtsTxDurationThresh,
             "PSDU duration expected not to exceed duration based RTS/CTS threshold");
     }
-    NS_TEST_EXPECT_MSG_EQ(m_txPsdus[0].header.GetDuration(),
-                          RoundDurationId(m_apTxopLimit - m_txPsdus[0].txDuration),
-                          "Duration/ID of the first frame must cover the whole TXOP");
+    NS_TEST_EXPECT_MSG_EQ(
+        m_txPsdus[0].header.GetDuration(),
+        (!m_protectSingleExchange
+             ? RoundDurationId(m_apTxopLimit - m_txPsdus[0].txDuration)
+             : sifs + m_txPsdus[1].txDuration + m_singleExchangeProtectionSurplus),
+        (!m_protectSingleExchange
+             ? "Duration/ID of the first frame must cover the whole TXOP"
+             : "Duration/ID of the first frame must be set to remaining time to "
+               "complete DATA+ACK sequence"));
 
     // a Normal Ack is sent by STA1
     tEnd = m_txPsdus[0].txStart + m_txPsdus[0].txDuration;
@@ -628,7 +664,7 @@
     tStart = m_txPsdus[2].txStart;
 
     auto apPhy = apDev->GetPhy(SINGLE_LINK_OP_ID);
-    auto eifsNoDifs = apPhy->GetSifs() + apPhy->GetAckTxTime();
+    auto eifsNoDifs = apPhy->GetSifs() + GetEstimatedAckTxTime(m_txPsdus[1].txVector);
 
     NS_TEST_EXPECT_MSG_GT_OR_EQ(
         tStart - tEnd,
@@ -657,9 +693,15 @@
             rtsCtsTxDurationThresh,
             "PSDU duration expected not to exceed duration based RTS/CTS threshold");
     }
-    NS_TEST_EXPECT_MSG_EQ(m_txPsdus[2].header.GetDuration(),
-                          RoundDurationId(m_apTxopLimit - m_txPsdus[2].txDuration),
-                          "Duration/ID of the retransmitted frame must cover the whole TXOP");
+    NS_TEST_EXPECT_MSG_EQ(
+        m_txPsdus[2].header.GetDuration(),
+        (!m_protectSingleExchange
+             ? RoundDurationId(m_apTxopLimit - m_txPsdus[2].txDuration)
+             : sifs + m_txPsdus[3].txDuration + m_singleExchangeProtectionSurplus),
+        (!m_protectSingleExchange
+             ? "Duration/ID of the retransmitted frame must cover the whole TXOP"
+             : "Duration/ID of the retransmitted frame must be set to remaining time to "
+               "complete DATA+ACK sequence"));
 
     // a Normal Ack is then sent by STA1
     tEnd = m_txPsdus[2].txStart + m_txPsdus[2].txDuration;
@@ -702,9 +744,16 @@
             "PSDU duration expected not to exceed duration based RTS/CTS threshold");
     }
     NS_TEST_EXPECT_MSG_EQ(m_txPsdus[4].header.GetDuration(),
-                          RoundDurationId(m_apTxopLimit - (m_txPsdus[4].txStart - txopStart) -
-                                          m_txPsdus[4].txDuration),
-                          "Duration/ID of the second frame does not cover the remaining TXOP");
+                          (!m_protectSingleExchange
+                               ? RoundDurationId(m_apTxopLimit -
+                                                 (m_txPsdus[4].txStart - txopStart) -
+                                                 m_txPsdus[4].txDuration)
+                               : sifs +
+                                     m_txPsdus[6].txDuration + m_singleExchangeProtectionSurplus /* ACK is 2 frames later since this DATA is first corrupted */),
+                          (!m_protectSingleExchange
+                               ? "Duration/ID of the second frame does not cover the remaining TXOP"
+                               : "Duration/ID of the second frame must be set to remaining time to "
+                                 "complete DATA+ACK sequence"));
 
     // STA2 receives a corrupted frame and hence it does not send the Ack. When the AckTimeout
     // expires, the AP performs PIFS recovery or invoke backoff, without terminating the TXOP,
@@ -750,10 +799,16 @@
             rtsCtsTxDurationThresh,
             "PSDU duration expected not to exceed duration based RTS/CTS threshold");
     }
-    NS_TEST_EXPECT_MSG_EQ(m_txPsdus[5].header.GetDuration(),
-                          RoundDurationId(m_apTxopLimit - (m_txPsdus[5].txStart - txopStart) -
-                                          m_txPsdus[5].txDuration),
-                          "Duration/ID of the second frame does not cover the remaining TXOP");
+    NS_TEST_EXPECT_MSG_EQ(
+        m_txPsdus[5].header.GetDuration(),
+        (!m_protectSingleExchange
+             ? RoundDurationId(m_apTxopLimit - (m_txPsdus[5].txStart - txopStart) -
+                               m_txPsdus[5].txDuration)
+             : sifs + m_txPsdus[6].txDuration + m_singleExchangeProtectionSurplus),
+        (!m_protectSingleExchange
+             ? "Duration/ID of the second frame does not cover the remaining TXOP"
+             : "Duration/ID of the second frame must be set to remaining time to "
+               "complete DATA+ACK sequence"));
 
     // a Normal Ack is then sent by STA2
     tEnd = m_txPsdus[5].txStart + m_txPsdus[5].txDuration;
@@ -797,10 +852,16 @@
             rtsCtsTxDurationThresh,
             "PSDU duration expected not to exceed duration based RTS/CTS threshold");
     }
-    NS_TEST_EXPECT_MSG_EQ(m_txPsdus[7].header.GetDuration(),
-                          RoundDurationId(m_apTxopLimit - (m_txPsdus[7].txStart - txopStart) -
-                                          m_txPsdus[7].txDuration),
-                          "Duration/ID of the third frame does not cover the remaining TXOP");
+    NS_TEST_EXPECT_MSG_EQ(
+        m_txPsdus[7].header.GetDuration(),
+        (!m_protectSingleExchange
+             ? RoundDurationId(m_apTxopLimit - (m_txPsdus[7].txStart - txopStart) -
+                               m_txPsdus[7].txDuration)
+             : sifs + m_txPsdus[8].txDuration + m_singleExchangeProtectionSurplus),
+        (!m_protectSingleExchange
+             ? "Duration/ID of the third frame does not cover the remaining TXOP"
+             : "Duration/ID of the third frame must be set to remaining time to "
+               "complete DATA+ACK sequence"));
 
     // a Normal Ack is then sent by STA3
     tEnd = m_txPsdus[7].txStart + m_txPsdus[7].txDuration;
@@ -838,9 +899,16 @@
             "Expected an RTS frame sent by the AP to the second station");
         NS_TEST_EXPECT_MSG_EQ(
             m_txPsdus[9].header.GetDuration(),
-            RoundDurationId(m_apTxopLimit - (m_txPsdus[9].txStart - txopStart) -
-                            m_txPsdus[9].txDuration),
-            "Duration/ID of the RTS before the fourth frame does not cover the remaining TXOP");
+            (!m_protectSingleExchange
+                 ? RoundDurationId(m_apTxopLimit - (m_txPsdus[9].txStart - txopStart) -
+                                   m_txPsdus[9].txDuration)
+                 : sifs + m_txPsdus[10].txDuration + sifs + m_txPsdus[11].txDuration + sifs +
+                       m_txPsdus[12].txDuration + m_singleExchangeProtectionSurplus),
+            (!m_protectSingleExchange
+                 ? "Duration/ID of the RTS before the fourth frame does not cover the remaining "
+                   "TXOP"
+                 : "Duration/ID of the RTS before the fourth frame must be set to remaining time "
+                   "to complete CTS+DATA+ACK sequence"));
 
         // a CTS is sent by STA2
         tEnd = m_txPsdus[9].txStart + m_txPsdus[9].txDuration;
@@ -893,10 +961,16 @@
                               rtsCtsTxDurationThresh,
                               "PSDU duration expected to exceed duration based RTS/CTS threshold");
     }
-    NS_TEST_EXPECT_MSG_EQ(m_txPsdus[9].header.GetDuration(),
-                          RoundDurationId(m_apTxopLimit - (m_txPsdus[9].txStart - txopStart) -
-                                          m_txPsdus[9].txDuration),
-                          "Duration/ID of the fourth frame does not cover the remaining TXOP");
+    NS_TEST_EXPECT_MSG_EQ(
+        m_txPsdus[9].header.GetDuration(),
+        (!m_protectSingleExchange
+             ? RoundDurationId(m_apTxopLimit - (m_txPsdus[9].txStart - txopStart) -
+                               m_txPsdus[9].txDuration)
+             : sifs + m_txPsdus[10].txDuration + m_singleExchangeProtectionSurplus),
+        (!m_protectSingleExchange
+             ? "Duration/ID of the fourth frame does not cover the remaining TXOP"
+             : "Duration/ID of the fourth frame must be set to remaining time to "
+               "complete DATA+(Block)ACK sequence"));
 
     std::string ack(m_nonHt ? "Normal Ack" : "Block Ack");
 
@@ -922,20 +996,26 @@
         RoundDurationId(m_txPsdus[9].header.GetDuration() - sifs - m_txPsdus[10].txDuration),
         "Duration/ID of the " << ack << " must be derived from that of the previous frame");
 
-    // the TXOP limit is such that enough time for sending a CF-End frame remains
-    tEnd = m_txPsdus[10].txStart + m_txPsdus[10].txDuration;
-    tStart = m_txPsdus[11].txStart;
+    if (!m_protectSingleExchange)
+    {
+        // the TXOP limit is such that enough time for sending a CF-End frame remains
+        tEnd = m_txPsdus[10].txStart + m_txPsdus[10].txDuration;
+        tStart = m_txPsdus[11].txStart;
 
-    NS_TEST_EXPECT_MSG_LT(tEnd + sifs, tStart, "CF-End sent too early");
-    NS_TEST_EXPECT_MSG_LT(tStart, tEnd + sifs + tolerance, "CF-End sent too late");
-    NS_TEST_EXPECT_MSG_EQ(m_txPsdus[11].header.IsCfEnd(), true, "Expected a CF-End frame");
-    NS_TEST_EXPECT_MSG_EQ(m_txPsdus[11].header.GetDuration(),
-                          Seconds(0),
-                          "Duration/ID must be set to 0 for CF-End frames");
+        NS_TEST_EXPECT_MSG_LT(tEnd + sifs, tStart, "CF-End sent too early");
+        NS_TEST_EXPECT_MSG_LT(tStart, tEnd + sifs + tolerance, "CF-End sent too late");
+        NS_TEST_EXPECT_MSG_EQ(m_txPsdus[11].header.IsCfEnd(), true, "Expected a CF-End frame");
+        NS_TEST_EXPECT_MSG_EQ(m_txPsdus[11].header.GetDuration(),
+                              MicroSeconds(0),
+                              "Duration/ID must be set to 0 for CF-End frames");
+
+        // remove CF-END so that indices are aligned with the protectSingleExchange false case
+        m_txPsdus.erase(std::next(m_txPsdus.cbegin(), 11), std::next(m_txPsdus.cbegin(), 12));
+    }
 
     // the CF-End frame resets the NAV on STA1, which can now transmit
-    tEnd = m_txPsdus[11].txStart + m_txPsdus[11].txDuration;
-    tStart = m_txPsdus[12].txStart;
+    tEnd = m_txPsdus[10].txStart + m_txPsdus[10].txDuration;
+    tStart = m_txPsdus[11].txStart;
 
     NS_TEST_EXPECT_MSG_GT_OR_EQ(tStart - tEnd,
                                 sifs + m_staAifsn * slot,
@@ -943,53 +1023,66 @@
     NS_TEST_EXPECT_MSG_LT_OR_EQ(tStart - tEnd,
                                 sifs + m_staAifsn * slot + m_staCwMin * slot + tolerance,
                                 "More than AIFS+BO elapsed between two TXOPs");
-    NS_TEST_EXPECT_MSG_EQ(m_txPsdus[12].header.IsQosData(), true, "Expected a QoS data frame");
-    NS_TEST_EXPECT_MSG_EQ(m_txPsdus[12].header.GetAddr1(),
+    NS_TEST_EXPECT_MSG_EQ(m_txPsdus[11].header.IsQosData(), true, "Expected a QoS data frame");
+    NS_TEST_EXPECT_MSG_EQ(m_txPsdus[11].header.GetAddr1(),
                           apDev->GetMac()->GetAddress(),
                           "Expected a frame sent by the first station to the AP");
     if (m_lengthBasedRtsCtsThresh)
     {
-        NS_TEST_EXPECT_MSG_LT(m_txPsdus[12].size,
+        NS_TEST_EXPECT_MSG_LT(m_txPsdus[11].size,
                               rtsCtsThreshold,
                               "PSDU size expected not to exceed length based RTS/CTS threshold");
     }
     else
     {
         NS_TEST_EXPECT_MSG_LT(
-            m_txPsdus[12].txDuration,
+            m_txPsdus[11].txDuration,
             rtsCtsTxDurationThresh,
             "PSDU duration expected not to exceed duration based RTS/CTS threshold");
     }
     NS_TEST_EXPECT_MSG_EQ(
-        m_txPsdus[12].header.GetDuration(),
-        RoundDurationId(m_staTxopLimit - m_txPsdus[12].txDuration),
-        "Duration/ID of the frame sent by the first station does not cover the remaining TXOP");
+        m_txPsdus[11].header.GetDuration(),
+        (!m_protectSingleExchange
+             ? RoundDurationId(m_staTxopLimit - m_txPsdus[11].txDuration)
+             : sifs + m_txPsdus[12].txDuration + m_singleExchangeProtectionSurplus),
+        (!m_protectSingleExchange
+             ? "Duration/ID of the frame sent by the first station does not "
+               "cover the remaining TXOP"
+             : "Duration/ID of the frame sent by the first station must be set "
+               "to remaining time to "
+               "complete DATA+ACK sequence"));
 
     // a Normal Ack is then sent by the AP
-    tEnd = m_txPsdus[12].txStart + m_txPsdus[12].txDuration;
-    tStart = m_txPsdus[13].txStart;
+    tEnd = m_txPsdus[11].txStart + m_txPsdus[11].txDuration;
+    tStart = m_txPsdus[12].txStart;
 
     NS_TEST_EXPECT_MSG_LT(tEnd + sifs, tStart, "Ack sent too early");
     NS_TEST_EXPECT_MSG_LT(tStart, tEnd + sifs + tolerance, "Ack sent too late");
-    NS_TEST_EXPECT_MSG_EQ(m_txPsdus[13].header.IsAck(), true, "Expected a Normal Ack");
-    NS_TEST_EXPECT_MSG_EQ(m_txPsdus[13].header.GetAddr1(),
+    NS_TEST_EXPECT_MSG_EQ(m_txPsdus[12].header.IsAck(), true, "Expected a Normal Ack");
+    NS_TEST_EXPECT_MSG_EQ(m_txPsdus[12].header.GetAddr1(),
                           DynamicCast<WifiNetDevice>(m_staDevices.Get(0))->GetMac()->GetAddress(),
                           "Expected a Normal Ack sent to the first station");
     NS_TEST_EXPECT_MSG_EQ(
-        m_txPsdus[13].header.GetDuration(),
-        RoundDurationId(m_txPsdus[12].header.GetDuration() - sifs - m_txPsdus[13].txDuration),
+        m_txPsdus[12].header.GetDuration(),
+        RoundDurationId(m_txPsdus[11].header.GetDuration() - sifs - m_txPsdus[12].txDuration),
         "Duration/ID of the Ack must be derived from that of the previous frame");
 
-    // the TXOP limit is such that enough time for sending a CF-End frame remains
-    tEnd = m_txPsdus[13].txStart + m_txPsdus[13].txDuration;
-    tStart = m_txPsdus[14].txStart;
+    if (!m_protectSingleExchange)
+    {
+        // the TXOP limit is such that enough time for sending a CF-End frame remains
+        tEnd = m_txPsdus[12].txStart + m_txPsdus[12].txDuration;
+        tStart = m_txPsdus[13].txStart;
 
-    NS_TEST_EXPECT_MSG_LT(tEnd + sifs, tStart, "CF-End sent too early");
-    NS_TEST_EXPECT_MSG_LT(tStart, tEnd + sifs + tolerance, "CF-End sent too late");
-    NS_TEST_EXPECT_MSG_EQ(m_txPsdus[14].header.IsCfEnd(), true, "Expected a CF-End frame");
-    NS_TEST_EXPECT_MSG_EQ(m_txPsdus[14].header.GetDuration(),
-                          Seconds(0),
-                          "Duration/ID must be set to 0 for CF-End frames");
+        NS_TEST_EXPECT_MSG_LT(tEnd + sifs, tStart, "CF-End sent too early");
+        NS_TEST_EXPECT_MSG_LT(tStart, tEnd + sifs + tolerance, "CF-End sent too late");
+        NS_TEST_EXPECT_MSG_EQ(m_txPsdus[13].header.IsCfEnd(), true, "Expected a CF-End frame");
+        NS_TEST_EXPECT_MSG_EQ(m_txPsdus[13].header.GetDuration(),
+                              MicroSeconds(0),
+                              "Duration/ID must be set to 0 for CF-End frames");
+
+        // remove CF-END so that indices are aligned with the protectSingleExchange false case
+        m_txPsdus.erase(std::next(m_txPsdus.cbegin(), 13), std::next(m_txPsdus.cbegin(), 14));
+    }
 
     /*
      * Verify that the Duration/ID of RTS/CTS frames is set correctly, that the TXOP holder is
@@ -1016,19 +1109,26 @@
      */
 
     // the first frame is an RTS frame sent by the AP to STA1
-    txopStart = m_txPsdus[15].txStart;
+    txopStart = m_txPsdus[13].txStart;
 
-    NS_TEST_EXPECT_MSG_EQ(m_txPsdus[15].header.IsRts(), true, "Expected an RTS frame");
-    NS_TEST_EXPECT_MSG_EQ(m_txPsdus[15].header.GetAddr1(),
+    NS_TEST_EXPECT_MSG_EQ(m_txPsdus[13].header.IsRts(), true, "Expected an RTS frame");
+    NS_TEST_EXPECT_MSG_EQ(m_txPsdus[13].header.GetAddr1(),
                           DynamicCast<WifiNetDevice>(m_staDevices.Get(0))->GetMac()->GetAddress(),
                           "Expected an RTS frame sent by the AP to the first station");
-    NS_TEST_EXPECT_MSG_EQ(m_txPsdus[15].header.GetDuration(),
-                          RoundDurationId(m_apTxopLimit - m_txPsdus[15].txDuration),
-                          "Duration/ID of the first RTS frame must cover the whole TXOP");
+    NS_TEST_EXPECT_MSG_EQ(m_txPsdus[13].header.GetDuration(),
+                          (!m_protectSingleExchange
+                               ? RoundDurationId(m_apTxopLimit - m_txPsdus[13].txDuration)
+                               : sifs + m_txPsdus[14].txDuration + sifs + m_txPsdus[15].txDuration +
+                                     sifs + m_txPsdus[16].txDuration +
+                                     m_singleExchangeProtectionSurplus),
+                          (!m_protectSingleExchange
+                               ? "Duration/ID of the first RTS frame must cover the whole TXOP"
+                               : "Duration/ID of the first RTS frame must be set to remaining time "
+                                 "to complete CTS+DATA+(Block)ACK sequence"));
 
     // a CTS is sent by STA1
-    tEnd = m_txPsdus[15].txStart + m_txPsdus[15].txDuration;
-    tStart = m_txPsdus[16].txStart;
+    tEnd = m_txPsdus[13].txStart + m_txPsdus[13].txDuration;
+    tStart = m_txPsdus[14].txStart;
 
     NS_TEST_EXPECT_MSG_LT(tEnd + sifs,
                           tStart,
@@ -1036,46 +1136,51 @@
     NS_TEST_EXPECT_MSG_LT(tStart,
                           tEnd + sifs + tolerance,
                           "CTS in response to the first RTS frame sent too late");
-    NS_TEST_EXPECT_MSG_EQ(m_txPsdus[16].header.IsCts(), true, "Expected a CTS");
-    NS_TEST_EXPECT_MSG_EQ(m_txPsdus[16].header.GetAddr1(),
+    NS_TEST_EXPECT_MSG_EQ(m_txPsdus[14].header.IsCts(), true, "Expected a CTS");
+    NS_TEST_EXPECT_MSG_EQ(m_txPsdus[14].header.GetAddr1(),
                           apDev->GetMac()->GetAddress(),
                           "Expected a CTS frame sent to the AP");
     NS_TEST_EXPECT_MSG_EQ(
-        m_txPsdus[16].header.GetDuration(),
-        RoundDurationId(m_txPsdus[15].header.GetDuration() - sifs - m_txPsdus[16].txDuration),
+        m_txPsdus[14].header.GetDuration(),
+        RoundDurationId(m_txPsdus[13].header.GetDuration() - sifs - m_txPsdus[14].txDuration),
         "Duration/ID of the CTS frame must be derived from that of the RTS frame");
 
     // the AP sends a frame to STA1
-    tEnd = m_txPsdus[16].txStart + m_txPsdus[16].txDuration;
-    tStart = m_txPsdus[17].txStart;
+    tEnd = m_txPsdus[14].txStart + m_txPsdus[14].txDuration;
+    tStart = m_txPsdus[15].txStart;
 
     NS_TEST_EXPECT_MSG_LT(tEnd + sifs, tStart, "First QoS data frame sent too early");
     NS_TEST_EXPECT_MSG_LT(tStart, tEnd + sifs + tolerance, "First QoS data frame sent too late");
-    NS_TEST_EXPECT_MSG_EQ(m_txPsdus[17].header.IsQosData(), true, "Expected a QoS data frame");
-    NS_TEST_EXPECT_MSG_EQ(m_txPsdus[17].header.GetAddr1(),
+    NS_TEST_EXPECT_MSG_EQ(m_txPsdus[15].header.IsQosData(), true, "Expected a QoS data frame");
+    NS_TEST_EXPECT_MSG_EQ(m_txPsdus[15].header.GetAddr1(),
                           DynamicCast<WifiNetDevice>(m_staDevices.Get(0))->GetMac()->GetAddress(),
                           "Expected a frame sent by the AP to the first station");
     if (m_lengthBasedRtsCtsThresh)
     {
-        NS_TEST_EXPECT_MSG_GT(m_txPsdus[17].size,
+        NS_TEST_EXPECT_MSG_GT(m_txPsdus[15].size,
                               rtsCtsThreshold,
                               "PSDU size expected to exceed length based RTS/CTS threshold");
     }
     else
     {
-        NS_TEST_EXPECT_MSG_GT(m_txPsdus[17].txDuration,
+        NS_TEST_EXPECT_MSG_GT(m_txPsdus[15].txDuration,
                               rtsCtsTxDurationThresh,
                               "PSDU duration expected to exceed duration based RTS/CTS threshold");
     }
     NS_TEST_EXPECT_MSG_EQ(
-        m_txPsdus[17].header.GetDuration(),
-        RoundDurationId(m_apTxopLimit - (m_txPsdus[17].txStart - txopStart) -
-                        m_txPsdus[17].txDuration),
-        "Duration/ID of the first QoS data frame does not cover the remaining TXOP");
+        m_txPsdus[15].header.GetDuration(),
+        (!m_protectSingleExchange
+             ? RoundDurationId(m_apTxopLimit - (m_txPsdus[15].txStart - txopStart) -
+                               m_txPsdus[15].txDuration)
+             : sifs + m_txPsdus[16].txDuration + m_singleExchangeProtectionSurplus),
+        (!m_protectSingleExchange
+             ? "Duration/ID of the first QoS data frame does not cover the remaining TXOP"
+             : "Duration/ID of the first QoS data frame must be set to remaining time to "
+               "complete DATA+(Block)ACK sequence"));
 
     // a Normal/Block Ack is then sent by STA1
-    tEnd = m_txPsdus[17].txStart + m_txPsdus[17].txDuration;
-    tStart = m_txPsdus[18].txStart;
+    tEnd = m_txPsdus[15].txStart + m_txPsdus[15].txDuration;
+    tStart = m_txPsdus[16].txStart;
 
     NS_TEST_EXPECT_MSG_LT(tEnd + sifs,
                           tStart,
@@ -1084,18 +1189,18 @@
                           tEnd + sifs + tolerance,
                           ack << " in response to the first QoS data frame sent too late");
     NS_TEST_EXPECT_MSG_EQ(
-        (m_nonHt ? m_txPsdus[18].header.IsAck() : m_txPsdus[18].header.IsBlockAck()),
+        (m_nonHt ? m_txPsdus[16].header.IsAck() : m_txPsdus[16].header.IsBlockAck()),
         true,
         "Expected a " << ack);
-    NS_TEST_EXPECT_MSG_EQ(m_txPsdus[18].header.GetAddr1(),
+    NS_TEST_EXPECT_MSG_EQ(m_txPsdus[16].header.GetAddr1(),
                           apDev->GetMac()->GetAddress(),
                           "Expected a " << ack << " sent to the AP");
     NS_TEST_EXPECT_MSG_EQ(
-        m_txPsdus[18].header.GetDuration(),
-        RoundDurationId(m_txPsdus[17].header.GetDuration() - sifs - m_txPsdus[18].txDuration),
+        m_txPsdus[16].header.GetDuration(),
+        RoundDurationId(m_txPsdus[15].header.GetDuration() - sifs - m_txPsdus[16].txDuration),
         "Duration/ID of the " << ack << " must be derived from that of the previous frame");
 
-    std::size_t idx = 18;
+    std::size_t idx = 16;
 
     if (!m_singleRtsPerTxop)
     {
@@ -1111,10 +1216,17 @@
             m_txPsdus[idx].header.GetAddr1(),
             DynamicCast<WifiNetDevice>(m_staDevices.Get(1))->GetMac()->GetAddress(),
             "Expected an RTS frame sent by the AP to the second station");
-        NS_TEST_EXPECT_MSG_EQ(m_txPsdus[idx].header.GetDuration(),
-                              RoundDurationId(m_apTxopLimit - (m_txPsdus[idx].txStart - txopStart) -
-                                              m_txPsdus[idx].txDuration),
-                              "Duration/ID of the second RTS frame must cover the whole TXOP");
+        NS_TEST_EXPECT_MSG_EQ(
+            m_txPsdus[idx].header.GetDuration(),
+            (!m_protectSingleExchange
+                 ? RoundDurationId(m_apTxopLimit - (m_txPsdus[idx].txStart - txopStart) -
+                                   m_txPsdus[idx].txDuration)
+                 : sifs + m_txPsdus[idx + 1].txDuration + sifs + m_txPsdus[idx + 2].txDuration +
+                       sifs + m_txPsdus[idx + 3].txDuration + m_singleExchangeProtectionSurplus),
+            (!m_protectSingleExchange
+                 ? "Duration/ID of the second RTS frame must cover the whole TXOP"
+                 : "Duration/ID of the second RTS frame must be set to remaining time to complete "
+                   "CTS+DATA+(Block)ACK sequence"));
 
         // a CTS is sent by STA2 (which ignores the NAV)
         tEnd = m_txPsdus[idx].txStart + m_txPsdus[idx].txDuration;
@@ -1164,9 +1276,14 @@
     }
     NS_TEST_EXPECT_MSG_EQ(
         m_txPsdus[idx].header.GetDuration(),
-        RoundDurationId(m_apTxopLimit - (m_txPsdus[idx].txStart - txopStart) -
-                        m_txPsdus[idx].txDuration),
-        "Duration/ID of the second QoS data frame does not cover the remaining TXOP");
+        (!m_protectSingleExchange
+             ? RoundDurationId(m_apTxopLimit - (m_txPsdus[idx].txStart - txopStart) -
+                               m_txPsdus[idx].txDuration)
+             : sifs + m_txPsdus[idx + 1].txDuration + m_singleExchangeProtectionSurplus),
+        (!m_protectSingleExchange
+             ? "Duration/ID of the second QoS data frame does not cover the remaining TXOP"
+             : "Duration/ID of the second QoS data frame must be set to remaining time to "
+               "complete DATA+(Block)ACK sequence"));
 
     // a Normal/Block Ack is then sent by STA2
     tEnd = m_txPsdus[idx].txStart + m_txPsdus[idx].txDuration;
@@ -1205,10 +1322,17 @@
             m_txPsdus[idx].header.GetAddr1(),
             DynamicCast<WifiNetDevice>(m_staDevices.Get(2))->GetMac()->GetAddress(),
             "Expected an RTS frame sent by the AP to the third station");
-        NS_TEST_EXPECT_MSG_EQ(m_txPsdus[idx].header.GetDuration(),
-                              RoundDurationId(m_apTxopLimit - (m_txPsdus[idx].txStart - txopStart) -
-                                              m_txPsdus[idx].txDuration),
-                              "Duration/ID of the third RTS frame must cover the whole TXOP");
+        NS_TEST_EXPECT_MSG_EQ(
+            m_txPsdus[idx].header.GetDuration(),
+            (!m_protectSingleExchange
+                 ? RoundDurationId(m_apTxopLimit - (m_txPsdus[idx].txStart - txopStart) -
+                                   m_txPsdus[idx].txDuration)
+                 : sifs + m_txPsdus[idx + 1].txDuration + sifs + m_txPsdus[idx + 2].txDuration +
+                       sifs + m_txPsdus[idx + 3].txDuration + m_singleExchangeProtectionSurplus),
+            (!m_protectSingleExchange
+                 ? "Duration/ID of the third RTS frame must cover the whole TXOP"
+                 : "Duration/ID of the third RTS frame must be set to remaining time to complete "
+                   "CTS+DATA+(Block)ACK sequence"));
 
         // a CTS is sent by STA3 (which ignores the NAV)
         tEnd = m_txPsdus[idx].txStart + m_txPsdus[idx].txDuration;
@@ -1257,9 +1381,14 @@
     }
     NS_TEST_EXPECT_MSG_EQ(
         m_txPsdus[idx].header.GetDuration(),
-        RoundDurationId(m_apTxopLimit - (m_txPsdus[idx].txStart - txopStart) -
-                        m_txPsdus[idx].txDuration),
-        "Duration/ID of the third QoS data frame does not cover the remaining TXOP");
+        (!m_protectSingleExchange
+             ? RoundDurationId(m_apTxopLimit - (m_txPsdus[idx].txStart - txopStart) -
+                               m_txPsdus[idx].txDuration)
+             : sifs + m_txPsdus[idx + 1].txDuration + m_singleExchangeProtectionSurplus),
+        (!m_protectSingleExchange
+             ? "Duration/ID of the third QoS data frame does not cover the remaining TXOP"
+             : "Duration/ID of the third QoS data frame must be set to remaining time to "
+               "complete DATA+(Block)ACK sequence"));
 
     // a Normal/Block Ack is then sent by STA3
     tEnd = m_txPsdus[idx].txStart + m_txPsdus[idx].txDuration;
@@ -1286,7 +1415,7 @@
 
     // there is no time remaining for sending a CF-End frame if SingleRtsPerTxop is false. This is
     // verified by checking that 25 frames are transmitted (done at the beginning of this method)
-    if (m_singleRtsPerTxop)
+    if (m_singleRtsPerTxop && !m_protectSingleExchange)
     {
         tEnd = m_txPsdus[idx].txStart + m_txPsdus[idx].txDuration;
         ++idx;
@@ -1296,7 +1425,7 @@
         NS_TEST_EXPECT_MSG_LT(tStart, tEnd + sifs + tolerance, "CF-End sent too late");
         NS_TEST_EXPECT_MSG_EQ(m_txPsdus[idx].header.IsCfEnd(), true, "Expected a CF-End frame");
         NS_TEST_EXPECT_MSG_EQ(m_txPsdus[idx].header.GetDuration(),
-                              Seconds(0),
+                              MicroSeconds(0),
                               "Duration/ID must be set to 0 for CF-End frames");
     }
 
@@ -1324,24 +1453,41 @@
 {
     for (const auto nonHt : {true, false})
     {
-        AddTestCase(new WifiTxopTest({.nonHt = nonHt,
-                                      .pifsRecovery = true,
-                                      .singleRtsPerTxop = false,
-                                      .lengthBasedRtsCtsThresh = false,
-                                      .protectedIfResponded = true}),
-                    TestCase::Duration::QUICK);
-        AddTestCase(new WifiTxopTest({.nonHt = nonHt,
-                                      .pifsRecovery = false,
-                                      .singleRtsPerTxop = true,
-                                      .lengthBasedRtsCtsThresh = false,
-                                      .protectedIfResponded = false}),
-                    TestCase::Duration::QUICK);
-        AddTestCase(new WifiTxopTest({.nonHt = nonHt,
-                                      .pifsRecovery = true,
-                                      .singleRtsPerTxop = true,
-                                      .lengthBasedRtsCtsThresh = true,
-                                      .protectedIfResponded = true}),
-                    TestCase::Duration::QUICK);
+        for (const auto pifsRecovery : {true, false})
+        {
+            for (const auto singleRtsPerTxop : {true, false})
+            {
+                for (const auto lengthBasedRtsCtsThresh : {true, false})
+                {
+                    for (const auto protectedIfResponded : {true, false})
+                    {
+                        for (const auto protectSingleExchange : {false, true})
+                        {
+                            for (const auto& singleExchangeProtectionBuffer :
+                                 {Time(), MicroSeconds(25) /* PIFS */})
+                            {
+                                if (!protectSingleExchange &&
+                                    singleExchangeProtectionBuffer.IsStrictlyPositive())
+                                {
+                                    continue;
+                                }
+                                AddTestCase(new WifiTxopTest({
+                                                .nonHt = nonHt,
+                                                .pifsRecovery = pifsRecovery,
+                                                .singleRtsPerTxop = singleRtsPerTxop,
+                                                .lengthBasedRtsCtsThresh = lengthBasedRtsCtsThresh,
+                                                .protectedIfResponded = protectedIfResponded,
+                                                .protectSingleExchange = protectSingleExchange,
+                                                .singleExchangeProtectionBuffer =
+                                                    singleExchangeProtectionBuffer,
+                                            }),
+                                            TestCase::Duration::QUICK);
+                            }
+                        }
+                    }
+                }
+            }
+        }
     }
 }
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wifi/test/wifi-tx-stats-helper-test.cc ns-3.45/src/wifi/test/wifi-tx-stats-helper-test.cc
--- ns-3.44/src/wifi/test/wifi-tx-stats-helper-test.cc	2025-03-09 16:55:49.815372700 -0700
+++ ns-3.45/src/wifi/test/wifi-tx-stats-helper-test.cc	2025-06-01 20:34:45.643702300 -0700
@@ -139,6 +139,7 @@
         m_durations[1].push_back(
             WifiPhy::CalculateTxDuration(psduMap, txVector, WIFI_PHY_BAND_6GHZ));
     }
+    NS_LOG_INFO("LINKID=" << +linkId << " " << *psduMap.cbegin()->second << "\n");
 }
 
 void
@@ -1158,9 +1159,9 @@
     // transmission times and packet durations observed at the PHY layer, to cross-check against
     // the times recorded in the WifiTxStatsHelper record (traced at the MAC layer).
     // The testcase also checks the various fields in this helper's output records for correctness.
-    AddTestCase(new WifiTxStatsHelperTest("Check single link non-QoS configuration",
-                                          WifiTxStatsHelperTest::SINGLE_LINK_NON_QOS),
-                TestCase::Duration::QUICK);
+    // AddTestCase(new WifiTxStatsHelperTest("Check single link non-QoS configuration",
+    //                                       WifiTxStatsHelperTest::SINGLE_LINK_NON_QOS),
+    //             TestCase::Duration::QUICK);
 
     // A test case to evaluate the transmission process of multiple Wi-Fi MAC Layer MPDUs in
     // a multi link device. This testcase, unlike the previous, uses .11be to test the
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wimax/model/bs-link-manager.cc ns-3.45/src/wimax/model/bs-link-manager.cc
--- ns-3.44/src/wimax/model/bs-link-manager.cc	2025-03-09 16:55:49.815372700 -0700
+++ ns-3.45/src/wimax/model/bs-link-manager.cc	2025-06-01 20:34:45.644702200 -0700
@@ -248,7 +248,8 @@
             {
                 auto rngrsp = new RngRsp();
                 AbortRanging(ssRecord->GetBasicCid(), rngrsp, ssRecord, true);
-            } // else keep polling
+            }
+            // else keep polling
         }
     }
 }
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wimax/model/bs-uplink-scheduler-mbqos.cc ns-3.45/src/wimax/model/bs-uplink-scheduler-mbqos.cc
--- ns-3.44/src/wimax/model/bs-uplink-scheduler-mbqos.cc	2025-03-09 16:55:49.815372700 -0700
+++ ns-3.45/src/wimax/model/bs-uplink-scheduler-mbqos.cc	2025-06-01 20:34:45.645702400 -0700
@@ -898,8 +898,7 @@
         {
             NS_LOG_DEBUG("BS uplink scheduler, " << serviceFlow->GetSchedulingTypeStr()
                                                  << " unicast poll, size: " << allocationSize
-                                                 << " symbols"
-                                                 << ", modulation: BPSK 1/2");
+                                                 << " symbols, modulation: BPSK 1/2");
         }
 
         NS_LOG_DEBUG(", CID: " << serviceFlow->GetConnection()->GetCid()
@@ -1022,8 +1021,7 @@
         ulMapIeIr.SetUiuc(OfdmUlBurstProfile::UIUC_INITIAL_RANGING);
 
         NS_LOG_DEBUG("BS uplink scheduler, initial ranging allocation, size: "
-                     << allocationSize << " symbols"
-                     << ", modulation: BPSK 1/2");
+                     << allocationSize << " symbols, modulation: BPSK 1/2");
 
         // marking start and end of each TO, only for debugging
         for (uint8_t i = 0; i < GetNrIrOppsAllocated(); i++)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wimax/model/bs-uplink-scheduler-rtps.cc ns-3.45/src/wimax/model/bs-uplink-scheduler-rtps.cc
--- ns-3.44/src/wimax/model/bs-uplink-scheduler-rtps.cc	2025-03-09 16:55:49.815372700 -0700
+++ ns-3.45/src/wimax/model/bs-uplink-scheduler-rtps.cc	2025-06-01 20:34:45.645702400 -0700
@@ -421,8 +421,7 @@
         {
             NS_LOG_DEBUG("BS uplink scheduler, " << serviceFlow->GetSchedulingTypeStr()
                                                  << " unicast poll, size: " << allocationSize
-                                                 << " symbols"
-                                                 << ", modulation: BPSK 1/2");
+                                                 << " symbols, modulation: BPSK 1/2");
         }
 
         NS_LOG_DEBUG(", CID: " << serviceFlow->GetConnection()->GetCid()
@@ -646,8 +645,7 @@
         ulMapIeIr.SetUiuc(OfdmUlBurstProfile::UIUC_INITIAL_RANGING);
 
         NS_LOG_DEBUG("BS uplink scheduler, initial ranging allocation, size: "
-                     << allocationSize << " symbols"
-                     << ", modulation: BPSK 1/2");
+                     << allocationSize << " symbols, modulation: BPSK 1/2");
 
         // marking start and end of each TO, only for debugging
         for (uint8_t i = 0; i < GetNrIrOppsAllocated(); i++)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wimax/model/bs-uplink-scheduler-simple.cc ns-3.45/src/wimax/model/bs-uplink-scheduler-simple.cc
--- ns-3.44/src/wimax/model/bs-uplink-scheduler-simple.cc	2025-03-09 16:55:49.815372700 -0700
+++ ns-3.45/src/wimax/model/bs-uplink-scheduler-simple.cc	2025-06-01 20:34:45.646702300 -0700
@@ -495,8 +495,7 @@
         ulMapIeIr.SetUiuc(OfdmUlBurstProfile::UIUC_INITIAL_RANGING);
 
         NS_LOG_DEBUG("BS uplink scheduler, initial ranging allocation, size: "
-                     << allocationSize << " symbols"
-                     << ", modulation: BPSK 1/2");
+                     << allocationSize << " symbols, modulation: BPSK 1/2");
 
         // marking start and end of each TO, only for debugging
         for (uint8_t i = 0; i < GetNrIrOppsAllocated(); i++)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/wimax/model/ss-net-device.cc ns-3.45/src/wimax/model/ss-net-device.cc
--- ns-3.44/src/wimax/model/ss-net-device.cc	2025-03-09 16:55:49.819372700 -0700
+++ ns-3.45/src/wimax/model/ss-net-device.cc	2025-06-01 20:34:45.648702400 -0700
@@ -782,15 +782,13 @@
         record->UpdatePktsSent(burst->GetNPackets());
         record->UpdateBytesSent(burst->GetSize());
 
-        NS_LOG_DEBUG(" sending burst"
-                     << ", SFID: " << connection->GetServiceFlow()->GetSfid() << ", pkts sent: "
-                     << record->GetPktsSent() << ", pkts rcvd: " << record->GetPktsRcvd()
-                     << ", bytes sent: " << record->GetBytesSent()
-                     << ", bytes rcvd: " << record->GetBytesRcvd());
-    }
-    else
-    {
+        NS_LOG_DEBUG(" sending burst, SFID: " << connection->GetServiceFlow()->GetSfid()
+                                              << ", pkts sent: " << record->GetPktsSent()
+                                              << ", pkts rcvd: " << record->GetPktsRcvd()
+                                              << ", bytes sent: " << record->GetBytesSent()
+                                              << ", bytes rcvd: " << record->GetBytesRcvd());
     }
+
     ForwardDown(burst, modulationType);
 }
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/zigbee/model/zigbee-nwk.cc ns-3.45/src/zigbee/model/zigbee-nwk.cc
--- ns-3.44/src/zigbee/model/zigbee-nwk.cc	2025-03-09 16:55:49.823372800 -0700
+++ ns-3.45/src/zigbee/model/zigbee-nwk.cc	2025-06-01 20:34:45.651702400 -0700
@@ -2525,9 +2525,9 @@
         // Note: Scan duration is fixed to a macResponseWaitTime in an Orphan scan
         //       (i.e. It does not use the scanDuration parameter)
         scanParams.m_scanType = MLMESCAN_ORPHAN;
-        NS_LOG_DEBUG("Orphan scanning started, "
-                     << "sending orphan notifications on page " << page << " and channels "
-                     << std::hex << params.m_scanChannelList.channelsField[0]);
+        NS_LOG_DEBUG("Orphan scanning started, sending orphan notifications on page "
+                     << page << " and channels " << std::hex
+                     << params.m_scanChannelList.channelsField[0]);
 
         Simulator::ScheduleNow(&LrWpanMacBase::MlmeScanRequest, m_mac, scanParams);
     }
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/zigbee/model/zigbee-nwk-payload-header.cc ns-3.45/src/zigbee/model/zigbee-nwk-payload-header.cc
--- ns-3.44/src/zigbee/model/zigbee-nwk-payload-header.cc	2025-03-09 16:55:49.819372700 -0700
+++ ns-3.45/src/zigbee/model/zigbee-nwk-payload-header.cc	2025-06-01 20:34:45.651702400 -0700
@@ -372,10 +372,29 @@
 ZigbeePayloadRouteReplyCommand::Serialize(Buffer::Iterator start) const
 {
     Buffer::Iterator i = start;
+
+    uint8_t cmdOption = 0;
+    if (m_cmdOptOrigIeeeAddr)
+    {
+        cmdOption |= (1 << 4);
+    }
+
+    if (m_cmdOptRespIeeeAddr)
+    {
+        cmdOption |= (1 << 5);
+    }
+
+    if (m_cmdOptMcst)
+    {
+        cmdOption |= (1 << 6);
+    }
+    i.WriteU8(cmdOption);
+
     i.WriteU8(m_routeReqId);
     WriteTo(i, m_origAddr);
     WriteTo(i, m_respAddr);
     i.WriteU8(m_pathCost);
+
     if (m_cmdOptOrigIeeeAddr)
     {
         WriteTo(i, m_origIeeeAddr);
@@ -391,10 +410,17 @@
 ZigbeePayloadRouteReplyCommand::Deserialize(Buffer::Iterator start)
 {
     Buffer::Iterator i = start;
+
+    uint8_t cmdOption = i.ReadU8();
+    m_cmdOptOrigIeeeAddr = (cmdOption & (1 << 4)) != 0;
+    m_cmdOptRespIeeeAddr = (cmdOption & (1 << 5)) != 0;
+    m_cmdOptMcst = (cmdOption & (1 << 6)) != 0;
+
     m_routeReqId = (i.ReadU8());
     ReadFrom(i, m_origAddr);
     ReadFrom(i, m_respAddr);
     m_pathCost = (i.ReadU8());
+
     if (m_cmdOptOrigIeeeAddr)
     {
         ReadFrom(i, m_origIeeeAddr);
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/src/zigbee/model/zigbee-nwk-tables.cc ns-3.45/src/zigbee/model/zigbee-nwk-tables.cc
--- ns-3.44/src/zigbee/model/zigbee-nwk-tables.cc	2025-03-09 16:55:49.819372700 -0700
+++ ns-3.45/src/zigbee/model/zigbee-nwk-tables.cc	2025-06-01 20:34:45.651702400 -0700
@@ -1087,32 +1087,45 @@
 bool
 NeighborTable::LookUpForBestParent(uint64_t epid, Ptr<NeighborTableEntry>& entryFound)
 {
-    bool flag = false;
+    bool parentFound = false;
     uint8_t currentLinkCost = 7;
     uint8_t prevLinkCost = 8;
-
+    bool first = true;
     for (const auto& entry : m_neighborTable)
     {
         // Note: Permit to join, stack profile , update id and capability are checked when
         //       the beacon is received (beacon notify indication)
         currentLinkCost = GetLinkCost(entry->GetLqi());
 
+        NS_LOG_DEBUG("Potential Parent: "
+                     << entry->GetNwkAddr() << " | LQI " << static_cast<uint16_t>(entry->GetLqi())
+                     << " | LinkCost " << static_cast<uint16_t>(currentLinkCost) << " | DevType "
+                     << entry->GetDeviceType());
+
+        // Select a parent device that fulfills at least these
+        // requirements, a minimum link cost of 3 is ideal but not enforced.
         if ((epid == entry->GetExtPanId()) &&
             (entry->GetDeviceType() == ZIGBEE_COORDINATOR ||
              entry->GetDeviceType() == ZIGBEE_ROUTER) &&
-            (entry->IsPotentialParent()) && (currentLinkCost <= 3))
+            entry->IsPotentialParent())
         {
-            if (currentLinkCost < prevLinkCost)
+            if (first)
+            {
+                first = false;
+                entryFound = entry;
+                prevLinkCost = currentLinkCost;
+                parentFound = true;
+            }
+            else if (currentLinkCost < prevLinkCost)
             {
                 entryFound = entry;
                 prevLinkCost = currentLinkCost;
             }
-            entryFound = entry;
-            flag = true;
         }
     }
 
-    return flag;
+    NS_LOG_DEBUG("Parent Chosen: " << entryFound->GetNwkAddr());
+    return parentFound;
 }
 
 void
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/test.py ns-3.45/test.py
--- ns-3.44/test.py	2025-03-09 16:55:49.823372800 -0700
+++ ns-3.45/test.py	2025-06-01 20:34:45.652702300 -0700
@@ -1994,11 +1994,17 @@
                 status = "CRASH"
                 status_print = colors.PINK + status + colors.NORMAL
 
-        print("[%d/%d]" % (i, total_tests), end=" ")
+        print("[%d/%d] %s" % (i, total_tests, status_print), end="")
+
         if args.duration or args.constrain == "performance":
-            print("%s (%.3f): %s %s" % (status_print, job.elapsed_time, kind, job.display_name))
-        else:
-            print("%s: %s %s" % (status_print, kind, job.display_name))
+            print(" (%.3f)" % job.elapsed_time, end="")
+
+        print(":", end="")
+
+        if "NS_COMMANDLINE_INTROSPECTION" in os.environ:
+            print(" Wrote example usage for", end="")
+
+        print(" %s %s" % (kind, job.display_name))
 
         if job.is_example or job.is_pyexample:
             #
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/utils/bench-scheduler.cc ns-3.45/utils/bench-scheduler.cc
--- ns-3.44/utils/bench-scheduler.cc	2025-03-09 16:55:49.823372800 -0700
+++ ns-3.45/utils/bench-scheduler.cc	2025-06-01 20:34:45.652702300 -0700
@@ -116,8 +116,7 @@
     uint64_t m_population;            /**< Event population size. */
     uint64_t m_total;                 /**< Total number of events to execute. */
     uint64_t m_count;                 /**< Count of events executed so far. */
-
-}; // class Bench
+};
 
 Bench::Result
 Bench::Run()
@@ -294,8 +293,7 @@
     }
 
     Simulator::Destroy();
-
-} // BenchSuite::Run
+}
 
 void
 BenchSuite::Header() const
@@ -373,8 +371,7 @@
     stdev.Log("stdev");
 
     LOG("");
-
-} // BenchSuite::Log()
+}
 
 /**
  *  Create a RandomVariableStream to generate next event delays.
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/utils/check-style-clang-format.py ns-3.45/utils/check-style-clang-format.py
--- ns-3.44/utils/check-style-clang-format.py	2025-03-09 16:55:49.823372800 -0700
+++ ns-3.45/utils/check-style-clang-format.py	2025-06-01 20:34:45.653702300 -0700
@@ -41,7 +41,7 @@
 ###########################################################
 # PARAMETERS
 ###########################################################
-CLANG_FORMAT_MAX_VERSION = 17
+CLANG_FORMAT_MAX_VERSION = 19
 CLANG_FORMAT_MIN_VERSION = 15
 
 FORMAT_GUARD_ON = [
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/utils/create-module.py ns-3.45/utils/create-module.py
--- ns-3.44/utils/create-module.py	2025-03-09 16:55:49.823372800 -0700
+++ ns-3.45/utils/create-module.py	2025-06-01 20:34:45.653702300 -0700
@@ -230,103 +230,105 @@
 
 
 DOC_RST_TEMPLATE = """Example Module Documentation
-----------------------------
+============================
 
 .. include:: replace.txt
 .. highlight:: cpp
 
 .. heading hierarchy:
-   ------------- Chapter
-   ************* Section (#.#)
-   ============= Subsection (#.#.#)
-   ############# Paragraph (no number)
-
-This is a suggested outline for adding new module documentation to |ns3|.
-See ``src/click/doc/click.rst`` for an example.
-
-The introductory paragraph is for describing what this code is trying to
-model.
+   ============= Module Name
+   ------------- Section (#.#)
+   ~~~~~~~~~~~~~ Subsection (#.#.#)
+
+This is the outline for adding new module documentation to |ns3|.
+See ``src/lr-wpan/doc/lr-wpan.rst`` for an example.
+
+This first part is for describing what the model is trying to
+accomplish. General descriptions and design, overview of the project
+goes in this part without the need of any subsections. A visual summary
+is also recommended.
 
 For consistency (italicized formatting), please use |ns3| to refer to
 ns-3 in the documentation (and likewise, |ns2| for ns-2).  These macros
 are defined in the file ``replace.txt``.
 
-Model Description
-*****************
-
-The source code for the new module lives in the directory ``{MODULE_DIR}``.
+Detailed |ns3| Sphinx documentation guidelines can be found `here <https://www.nsnam.org/docs/contributing/html/models.html>`_
 
-Add here a basic description of what is being modeled.
 
-Design
-======
+The source code for the new module lives in the directory ``{MODULE_DIR}``.
 
-Briefly describe the software design of the model and how it fits into
-the existing ns-3 architecture.
 
 Scope and Limitations
-=====================
+---------------------
 
-What can the model do?  What can it not do?  Please use this section to
-describe the scope and limitations of the model.
+This is should be your first section. Please use it to list the scope and
+limitations. What can the model do?  What can it not do? Be brief and concise.
 
-References
-==========
+Section A
+---------
 
-Add academic citations here, such as if you published a paper on this
-model, or if readers should read a particular specification or other work.
+Free form. Your second section of your documentation and its subsections goes here.
+The documentation can contain any number of sections but be careful to not use
+more than two levels in subsections.
 
-Usage
-*****
+Section B
+---------
 
-This section is principally concerned with the usage of your model, using
-the public API.  Focus first on most common usage patterns, then go
-into more advanced topics.
+Free form. The last section of your documentation with content goes here.
 
-Building New Module
-===================
+Usage
+-----
 
-Include this subsection only if there are special build instructions or
-platform limitations.
+A brief description of the module usage goes here. This section must be present.
 
 Helpers
-=======
+~~~~~~~
 
-What helper API will users typically use?  Describe it here.
+A subsection with a description of the helpers used by the model goes here. Snippets of code are
+preferable when describing the helpers usage. This subsection must be present.
+If the model CANNOT provide helpers write "Not applicable".
 
 Attributes
-==========
+~~~~~~~~~~
 
-What classes hold attributes, and what are the key ones worth mentioning?
+A subsection with a list of attributes used by the module, each attribute should include a small
+description. This subsection must be present.
+If the model CANNOT provide attributes write "Not applicable".
 
-Output
-======
+Traces
+~~~~~~
 
-What kind of data does the model generate?  What are the key trace
-sources?   What kind of logging output can be enabled?
+A subsection with a list of the source traces used by the module, each trace should include a small
+description. This subsection must be present.
+If the model CANNOT provide traces write "Not applicable".
 
-Advanced Usage
-==============
+Examples and Tests
+------------------
 
-Go into further details (such as using the API outside of the helpers)
-in additional sections, as needed.
+A brief description of each example and test present in the model must be here.
+Include both the name of the example file and a brief description of the example.
+This section must be present.
 
-Examples
-========
+Validation
+----------
 
-What examples using this new code are available?  Describe them here.
+Describe how the model has been tested/validated.  What tests run in the
+test suite?  How much API and code is covered by the tests?
 
-Troubleshooting
-===============
+This section must be present. Write ``No formal validation has been made`` if your
+model do not contain validations.
 
-Add any tips for avoiding pitfalls, etc.
+References
+----------
 
-Validation
-**********
+The reference material used in the construction of the model.
+This section must be the last section and must be present.
+Use numbers for the index not names when listing the references. When possible, include the link of the referenced material.
+
+Example:
+
+[`1 <https://ieeexplore.ieee.org/document/6012487>`_] IEEE Standard for Local and metropolitan area networks--Part 15.4: Low-Rate Wireless Personal Area Networks (LR-WPANs)," in IEEE Std 802.15.4-2011 (Revision of IEEE Std 802.15.4-2006) , vol., no., pp.1-314, 5 Sept. 2011, doi: 10.1109/IEEESTD.2011.6012487.
 
-Describe how the model has been tested/validated.  What tests run in the
-test suite?  How much API and code is covered by the tests?  Again,
-references to outside published work may help here.
 """
 
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/utils/print-introspected-doxygen.cc ns-3.45/utils/print-introspected-doxygen.cc
--- ns-3.44/utils/print-introspected-doxygen.cc	2025-03-09 16:55:49.823372800 -0700
+++ ns-3.45/utils/print-introspected-doxygen.cc	2025-06-01 20:34:45.653702300 -0700
@@ -313,7 +313,8 @@
      */
     mutable std::vector<std::string> m_noTids;
 
-}; // class StaticInformation
+    // end of class StaticInformation
+};
 
 void
 StaticInformation::RecordAggregationInfo(std::string a, std::string b)
@@ -881,8 +882,7 @@
             PrintAttributesTid(os, tmp);
         }
         tmp = tmp.GetParent();
-
-    } // Attributes
+    }
 } // PrintAttributes()
 
 /**
@@ -1034,8 +1034,7 @@
         // Get the class's index out of the map;
         TypeId tid = TypeId::GetRegistered(item.second);
         PrintTypeIdBlock(os, tid);
-    } // for class documentation
-
+    }
 } // PrintTypeIdBlocks()
 
 /***************************************************************
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/utils/tests/gitlab-ci-code-linting.yml ns-3.45/utils/tests/gitlab-ci-code-linting.yml
--- ns-3.44/utils/tests/gitlab-ci-code-linting.yml	2025-03-09 16:55:49.823372800 -0700
+++ ns-3.45/utils/tests/gitlab-ci-code-linting.yml	2025-06-01 20:34:45.653702300 -0700
@@ -16,10 +16,10 @@
   timeout: 1h
   interruptible: true
 
-check-style-clang-format-17:
+check-style-clang-format-19:
   extends: .check-style-clang-format
   variables:
-    CLANG_FORMAT_VERSION: 17
+    CLANG_FORMAT_VERSION: 19
 
 check-style-clang-format-15:
   extends: .check-style-clang-format
@@ -53,22 +53,21 @@
     - git remote add -t $CI_DEFAULT_BRANCH --no-tags -f upstream https://gitlab.com/nsnam/ns-3-dev.git
     - git diff --name-only upstream/$CI_DEFAULT_BRANCH > $FILES_CHANGED
 
-    # Run full clang-tidy in the following cases: 1) default branch, 2) ".clang-tidy" file changed
-    # Run clang-tidy-diff in the opposite cases.
+    # Run clang-tidy on all files in the following cases: 1) default branch, 2) ".clang-tidy" file changed
+    # Otherwise, run clang-tidy on changed files only.
     # File paths generated by git diff are relative to the working tree. Therefore, iregex should only contain paths relative to the working tree.
-    - if [[ $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH ]] || (grep -q ".clang-tidy" $FILES_CHANGED) ; then
-      echo "Running full clang-tidy" ;
-      run-clang-tidy-19 -p cmake-cache/ -quiet
-      1> $CLANG_TIDY_OUTPUT
-      2> /dev/null ;
+    - |
+      if [[ $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH ]] || (grep -q ".clang-tidy" $FILES_CHANGED) ; then
+        FILES_TO_CHECK="";
+        echo "Running clang-tidy on all files";
       else
-      echo "Running clang-tidy-diff" ;
-      git diff -U0 upstream/$CI_DEFAULT_BRANCH |
-      clang-tidy-diff-19.py -path cmake-cache/ -p1 -quiet -use-color
-      -iregex "(contrib|examples|src|scratch|utils)\/.+\.(cpp|cc|cxx|h|hpp)"
-      1> $CLANG_TIDY_OUTPUT
-      2> /dev/null || true ;
+        FILES_TO_CHECK=$(cat $FILES_CHANGED);
+        echo "Running clang-tidy on the following changed files:";
+        echo $FILES_TO_CHECK;
       fi
+    - run-clang-tidy-19 -p cmake-cache/ -quiet $FILES_TO_CHECK
+      1> $CLANG_TIDY_OUTPUT
+      2> /dev/null
 
     # Trim empty lines from output file
     - sed -i '/^$/d' $CLANG_TIDY_OUTPUT
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/utils/tests/gitlab-ci-cppyy.yml ns-3.45/utils/tests/gitlab-ci-cppyy.yml
--- ns-3.44/utils/tests/gitlab-ci-cppyy.yml	2025-03-09 16:55:49.823372800 -0700
+++ ns-3.45/utils/tests/gitlab-ci-cppyy.yml	2025-06-01 20:34:45.653702300 -0700
@@ -11,7 +11,7 @@
       python3 python3-pip
       libboost-dev libgsl-dev libgtk-3-dev
       git wget
-    - pip install cppyy==3.1.2 matplotlib numpy
+    - pip install cppyy==3.5.0 matplotlib numpy
   script:
     - if (git remote | grep -qw upstream) ; then
       git remote remove upstream ;
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/utils/tests/gitlab-ci-doc.yml ns-3.45/utils/tests/gitlab-ci-doc.yml
--- ns-3.44/utils/tests/gitlab-ci-doc.yml	2025-03-09 16:55:49.823372800 -0700
+++ ns-3.45/utils/tests/gitlab-ci-doc.yml	2025-06-01 20:34:45.653702300 -0700
@@ -6,18 +6,12 @@
   before_script:
     - pacman-key --init
     - pacman -Syu --noconfirm
-      base-devel ninja cmake python ccache gsl gtk3 boost openmpi openssh
+      base-devel ninja cmake python ccache gsl gtk3 boost openmpi openssh libxml2-legacy
       graphviz imagemagick texlive-basic texlive-bin texlive-binextra texlive-latexextra
       texlive-fontutils texlive-fontsrecommended texlive-mathscience python-sphinx wget
-    #  doxygen
+      doxygen
     # dia is archived
     - pacman --noconfirm -U https://archive.archlinux.org/packages/d/dia/dia-0.97.3-9-x86_64.pkg.tar.zst
-    # temporary revert to Doxygen 1.11.0. The package has been recompiled
-    # without spdlog and wizard support to fix a library dependency.
-    # Clang-18 is needed by doxygen
-    - pacman -S --noconfirm clang18
-    - wget -nv http://www.nsnam.org/packages/doxygen-1.11.0-4-x86_64.pkg.tar.zst
-    - pacman --noconfirm -U doxygen-1.11.0-4-x86_64.pkg.tar.zst
     # no policy is a good policy.
     - mv /etc/ImageMagick-7/policy.xml /etc/ImageMagick-7/policy.xml.bak
     # - sed -i "s/EPS,PDF,//g" /etc/ImageMagick-7/policy.xml
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/utils/tests/gitlab-ci-fedora.yml ns-3.45/utils/tests/gitlab-ci-fedora.yml
--- ns-3.44/utils/tests/gitlab-ci-fedora.yml	2025-03-09 16:55:49.823372800 -0700
+++ ns-3.45/utils/tests/gitlab-ci-fedora.yml	2025-06-01 20:34:45.653702300 -0700
@@ -14,8 +14,8 @@
     - if: $CI_PIPELINE_SOURCE == 'merge_request_event'
       allow_failure: true
   before_script:
-    - dnf update --assumeyes
-    - dnf install --assumeyes
+    - dnf update -y
+    - dnf install -y
       gcc-c++ cmake ccache ninja-build
       boost-devel
       eigen3-devel
@@ -23,14 +23,14 @@
       gsl gsl-devel
       sqlite sqlite-devel
       libxml2 libxml2-devel
-      openmpi openmpi-devel
+      mpich mpich-devel openssh
       goocanvas2-devel
       python python-devel
-      pygobject3-devel python3-gobject gobject-introspection-devel
+      python3-gobject-devel gobject-introspection-devel
       graphviz-devel graphviz ipython
       git
     - source /etc/profile.d/modules.sh
-    - module load mpi/openmpi-x86_64
+    - module load mpi/mpich-$(uname -m)
   variables:
     COMPILER: g++
 
@@ -44,140 +44,94 @@
   script:
     - echo "Starting Fedora jobs"
 
-# Fedora 36
-# weekly-build-fedora-36-debug:
-#   extends: .weekly-build-fedora
-#   needs: ["weekly-fedora"]
-#   image: fedora:36
-#   stage: build
-#   variables:
-#     MODE: debug
-
-# weekly-build-fedora-36-default:
-#   extends: .weekly-build-fedora
-#   needs: ["weekly-fedora"]
-#   image: fedora:36
-#   stage: build
-#   variables:
-#     MODE: default
-
-# weekly-build-fedora-36-optimized:
-#   extends: .weekly-build-fedora
-#   needs: ["weekly-fedora"]
-#   image: fedora:36
-#   stage: build
-#   variables:
-#     MODE: optimized
-
-# Fedora 36 test
-# weekly-test-fedora-36-default:
-#   extends: .weekly-build-fedora
-#   image: fedora:36
-#   stage: test
-#   needs: ["weekly-build-fedora-36-default"]
-#   dependencies:
-#     - weekly-build-fedora-36-default
-#   variables:
-#     MODE: default
-
-# weekly-test-fedora-36-optimized:
-#   extends: .weekly-build-fedora
-#   image: fedora:36
-#   stage: test
-#   needs: ["weekly-build-fedora-36-optimized"]
-#   dependencies:
-#     - weekly-build-fedora-36-optimized
-#   variables:
-#     MODE: optimized
-
-# Fedora 37
-weekly-build-fedora-37-debug:
+# Fedora 40
+weekly-build-fedora-40-debug:
   extends: .weekly-build-fedora
   needs: ["weekly-fedora"]
-  image: fedora:37
+  image: fedora:40
   stage: build
   variables:
     MODE: debug
 
-weekly-build-fedora-37-default:
+weekly-build-fedora-40-default:
   extends: .weekly-build-fedora
   needs: ["weekly-fedora"]
-  image: fedora:37
+  image: fedora:40
   stage: build
   variables:
     MODE: default
 
-weekly-build-fedora-37-optimized:
+weekly-build-fedora-40-optimized:
   extends: .weekly-build-fedora
   needs: ["weekly-fedora"]
-  image: fedora:37
+  image: fedora:40
   stage: build
   variables:
     MODE: optimized
 
-# Fedora 37 test
-weekly-test-fedora-37-default:
+# Fedora 40 test
+weekly-test-fedora-40-default:
   extends: .weekly-build-fedora
-  image: fedora:37
+  image: fedora:40
   stage: test
-  needs: ["weekly-build-fedora-37-default"]
+  needs: ["weekly-build-fedora-40-default"]
   dependencies:
-    - weekly-build-fedora-37-default
+    - weekly-build-fedora-40-default
   variables:
     MODE: default
 
-weekly-test-fedora-37-optimized:
+weekly-test-fedora-40-optimized:
   extends: .weekly-build-fedora
-  image: fedora:37
+  image: fedora:40
   stage: test
-  needs: ["weekly-build-fedora-37-optimized"]
+  needs: ["weekly-build-fedora-40-optimized"]
   dependencies:
-    - weekly-build-fedora-37-optimized
+    - weekly-build-fedora-40-optimized
   variables:
     MODE: optimized
 
-# Fedora 38
-weekly-build-fedora-38-debug:
+# Fedora 41
+weekly-build-fedora-41-debug:
   extends: .weekly-build-fedora
   needs: ["weekly-fedora"]
-  image: fedora:38
+  image: fedora:41
   stage: build
   variables:
     MODE: debug
 
-weekly-build-fedora-38-default:
+weekly-build-fedora-41-default:
   extends: .weekly-build-fedora
   needs: ["weekly-fedora"]
-  image: fedora:38
+  image: fedora:41
   stage: build
   variables:
     MODE: default
 
-weekly-build-fedora-38-optimized:
+weekly-build-fedora-41-optimized:
   extends: .weekly-build-fedora
   needs: ["weekly-fedora"]
-  image: fedora:38
+  image: fedora:41
   stage: build
   variables:
     MODE: optimized
 
-# Fedora 38 test
-weekly-test-fedora-38-default:
+# Fedora 41 test
+weekly-test-fedora-41-default:
   extends: .weekly-build-fedora
-  image: fedora:38
+  image: fedora:41
   stage: test
-  needs: ["weekly-build-fedora-38-default"]
+  needs: ["weekly-build-fedora-41-default"]
   dependencies:
-    - weekly-build-fedora-38-default
+    - weekly-build-fedora-41-default
   variables:
     MODE: default
 
-weekly-test-fedora-38-optimized:
+weekly-test-fedora-41-optimized:
   extends: .weekly-build-fedora
-  image: fedora:38
+  image: fedora:41
   stage: test
-  needs: ["weekly-build-fedora-38-optimized"]
+  needs: ["weekly-build-fedora-41-optimized"]
   dependencies:
-    - weekly-build-fedora-38-optimized
+    - weekly-build-fedora-41-optimized
   variables:
     MODE: optimized
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/utils/tests/gitlab-ci-gcc.yml ns-3.45/utils/tests/gitlab-ci-gcc.yml
--- ns-3.44/utils/tests/gitlab-ci-gcc.yml	2025-03-09 16:55:49.823372800 -0700
+++ ns-3.45/utils/tests/gitlab-ci-gcc.yml	2025-06-01 20:34:45.653702300 -0700
@@ -56,7 +56,7 @@
 weekly-build-gcc-13-debug:
   extends: .weekly-gcc-base
   needs: ["weekly-gcc"]
-  image: ubuntu:23.04
+  image: ubuntu:24.04
   stage: build
   variables:
     MODE: debug
@@ -66,7 +66,7 @@
 weekly-build-gcc-13-default:
   extends: .weekly-gcc-base
   needs: ["weekly-gcc"]
-  image: ubuntu:23.04
+  image: ubuntu:24.04
   stage: build
   variables:
     MODE: default
@@ -77,7 +77,7 @@
 weekly-build-gcc-13-optimized:
   extends: .weekly-gcc-base
   needs: ["weekly-gcc"]
-  image: ubuntu:23.04
+  image: ubuntu:24.04
   stage: build
   variables:
     MODE: optimized
@@ -87,7 +87,7 @@
 
 weekly-test-gcc-13-default:
   extends: .weekly-gcc-base
-  image: ubuntu:23.04
+  image: ubuntu:24.04
   stage: test
   needs: ["weekly-build-gcc-13-default"]
   dependencies:
@@ -100,7 +100,7 @@
 # Aug. 26, 2023: --disable-eigen is needed to prevent a -Werror=unused-variable
 weekly-test-gcc-13-optimized:
   extends: .weekly-gcc-base
-  image: ubuntu:23.04
+  image: ubuntu:24.04
   stage: test
   needs: ["weekly-build-gcc-13-optimized"]
   dependencies:
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/utils/tests/gitlab-ci-scheduled.yml ns-3.45/utils/tests/gitlab-ci-scheduled.yml
--- ns-3.44/utils/tests/gitlab-ci-scheduled.yml	2025-03-09 16:55:49.823372800 -0700
+++ ns-3.45/utils/tests/gitlab-ci-scheduled.yml	2025-06-01 20:34:45.654702400 -0700
@@ -252,14 +252,10 @@
   variables:
     MODE: debug
     EXTRA_OPTIONS: "--enable-gcov --disable-asserts --disable-logs"
-    TARGET: coverage_cobertura
+    TARGET: coverage_html
   artifacts:
     paths:
-     - build/coverage/cobertura.xml
-    reports:
-      coverage_report:
-        coverage_format: cobertura
-        path: build/coverage/cobertura.xml
+     - build/coverage/html
   tags:
     - nsnam
     - linux
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/utils/tests/gitlab-ci.yml ns-3.45/utils/tests/gitlab-ci.yml
--- ns-3.44/utils/tests/gitlab-ci.yml	2025-03-09 16:55:49.823372800 -0700
+++ ns-3.45/utils/tests/gitlab-ci.yml	2025-06-01 20:34:45.654702400 -0700
@@ -77,7 +77,7 @@
       then `touch build/tests-$CI_COMMIT_REF_SLUG.txt`;
       fi
     - if [[ "$CI_JOB_STAGE" == "test" ]] && [[ "$MODE" != "debug" ]] && [[ -f build/tests-$CI_COMMIT_REF_SLUG.txt ]];
-      then ./test.py -n;
+      then ./test.py -n --verbose-failed;
       if [[ $? == 0 ]];
       then `rm build/tests-$CI_COMMIT_REF_SLUG.txt` || true;
       fi;
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.44/VERSION ns-3.45/VERSION
--- ns-3.44/VERSION	2025-03-09 16:56:09.315445400 -0700
+++ ns-3.45/VERSION	2025-06-01 20:35:04.008764000 -0700
@@ -1 +1 @@
-3.44
+3.45
