.. _pipeline-encoding:

Pipeline Encoding
-----------------

Overview
^^^^^^^^
Pipeline encoding provides the best way of increasing encoding throughput and 
reliability. ItemEncode accomplishes this by distributing the encoding work 
across multiple encoding devices. This mode is designed to encode a stream of 
tags, such as a web of tags in a reel to reel system. In a typical pipeline 
system, there are at least four ItemEncode devices:

* :ref:`Localizer<localizer-config>` (1) \- The role of the Localizer is to 
  singulate each tag and provide the TID via a 
  :ref:`TagOperationReport<tag-operation-report>` to the Host Controller. This 
  device can be unnecessary if the Machine Control Application has another 
  method for determining the TIDs that will be seen by the downstream devices.
* :ref:`Encoder<encoder-config>` (1..N) \- The role of each Encoder is to 
  perform a subset of the encoding operations to a tag.
* :ref:`Verifier<verifier-config>` (1) \- The role of the Verifier is to make 
  sure all encoding operations were completed and provide a final result for 
  each tag.

.. image:: ../_static/PipelineDesign.png
    :align: center
    :scale: 80%

System Configuration
^^^^^^^^^^^^^^^^^^^^
.. |nbsp| unicode:: 0xA0

To acheive synchronization between the various Encoders, 
:ref:`TID Table Mode<tid-table-mode>` must be used on the Encoders and final 
Verifier. Upon receiving a :ref:`TagOperationReport<tag-operation-report>` from
the Localizer, the Machine Control Application will need to determine what 
encoding options need to be performed to that tag and create a 
:ref:`TIDTableEntry<tid-table-entry>` with the TID from the 
:ref:`TagOperationReport<tag-operation-report>` and those encoding options. 
That :ref:`TIDTableEntry<tid-table-entry>` must then be sent to all of the 
downstream devices.

.. image:: ../_static/HostController.png
    :align: center
    :scale: 90%

.. _localizer-config:

Localizer
+++++++++
The role of the Localizer is to provide the TIDs for the tags entering the 
pipeline in sequential order to the Machine Control Application. To accomplish
this, the Localizer should be setup to only interact with a single tag at a 
time. This is best done by limiting the antenna field and only triggering the
device when there is a tag in the field of view. Depending on the rate of tags,
this may require GPI triggers to start and stop the device.

.. note:: The Localizer does not require a Device of Record because Verify Tag Chip Basic is exempt from consuming encoding volume.

Localizer Example Configuration
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

.. list-table::
    :header-rows: 1
    :widths: 20 25 65

    * - Parameter
      - Value
      - Rationale
    * - :ref:`device_config<device-config>`
      - 
      -
    * - |nbsp| :ref:`device_mode<device-mode>`
      - DEVICE_MODE_VERIFY_TAG_CHIP_BASIC
      - Localizer just needs to provide TID, but will also validate inbound EPC 
        length.
    * - |nbsp| :ref:`operation_mode<operation-mode>`
      - OPERATION_MODE_SINGLE
      - Localizer should stop right after it reads a tag.
    * - |nbsp| :ref:`trigger_config<trigger-config>`
      -
      -
    * - |nbsp| |nbsp| :ref:`start_trigger_config<start-trigger-config>`
      - 
      -
    * - |nbsp| |nbsp| |nbsp| enable_gpi_start_trigger
      - true
      - Uses GPI Start Trigger for lowest latency start.
    * - |nbsp| |nbsp| :ref:`stop_trigger_config<stop-trigger-config>`
      - 
      - 
    * - |nbsp| |nbsp| |nbsp| enable_gpi_stop_trigger
      - false
      - In Single mode, the device will stop after seeing a single tag, so it 
        does not need a GPI stop trigger.
    * - |nbsp| :ref:`gpi_config<gpi-config>`
      -
      -
    * - |nbsp| |nbsp| :ref:`signaling_mode<gpio-signal-mode>`
      - GPIO_SIGNAL_MODE_COMBINED
      - Since the device is not using a GPI Stop, it only needs the single GPI
        for the Start.
    * - |nbsp| |nbsp| :ref:`GPI2_polarity<gpio-polarity>`
      - GPIO_POLARITY_ACTIVE_LOW
      - GPI2 triggers the Start. This can be High or Low depending on machine
        preference.
    * - |nbsp| :ref:`gpo_config<gpo-config>`
      - 
      -
    * - |nbsp| |nbsp| :ref:`signaling_mode<gpio-signal-mode>`
      - GPIO_SIGNAL_MODE_SEPARATE
      - This will use separate GPOs for pass and fail. 
    * - |nbsp| |nbsp| :ref:`GPO1_polarity<gpio-polarity>`
      - GPIO_POLARITY_ACTIVE_LOW
      - GPO1 indicates whether the device is Operating or not. This can be High
        or Low depending on machine preference.
    * - |nbsp| |nbsp| :ref:`GPO2_polarity<gpio-polarity>`
      - GPIO_POLARITY_ACTIVE_LOW
      - GPO2 indicates whether the operation passed. This can be High or Low 
        depending on machine preference.
    * - |nbsp| |nbsp| :ref:`GPO3_polarity<gpio-polarity>`
      - GPIO_POLARITY_ACTIVE_LOW
      - GPO3 indicates whether the operation failed. This can be High or Low 
        depending on machine preference.
    * - |nbsp| :ref:`report_config<report-config>`
      -
      -
    * - |nbsp| |nbsp| :ref:`tag_operation_report_config<tag-operation-report-config>`
      - 
      -
    * - |nbsp| |nbsp| |nbsp| enable_tag_operation_reports
      - true
      - TagOperationReports are necessary to get the TID of the tag.
    * -
      -
      -
    * - :ref:`antennas_config<antennas-config>`
      -
      -
    * - |nbsp| :ref:`antenna_config<antenna-config>`
      - 
      - 
    * - |nbsp| |nbsp| antenna_ID
      - 1
      - Only needs a single antenna.
    * - |nbsp| |nbsp| :ref:`gen2_mode<gen2-mode>`
      - GEN2_MODE_MAX_THROUGHPUT
      - To maximize throughput, the fastest mode is used.
    * - |nbsp| |nbsp| :ref:`inventory_search_mode<inventory-search-mode>`
      - INVENTORY_SEARCH_MODE_SINGLE_TARGET_A_TO_B
      - Session 0 will be in the A state for all tags.
    * - |nbsp| |nbsp| :ref:`gen2_session<gen2-session>`
      - GEN2_SESSION_0
      - Session 0 will be in the A state for all tags.
    * - |nbsp| |nbsp| transmit_power
      - 1200
      - Power should be set to the lowest possible value that can still see the
        tags in the Field of View.
    * - |nbsp| |nbsp| tag_population_estimate
      - 1
      - Only one tag should be in the Field of View at any time.
    * -
      -
      -
    * - :ref:`serialization_job<serialization-job>`
      - 
      - 
    * - |nbsp| job_id
      - 1
      - 
    * - |nbsp| :ref:`job_type<serialization-job-type>`
      - SERIALIZATION_JOB_TYPE_STATIC
      - All tags should be verified against the same EPC length.
    * - |nbsp| :ref:`EPC_memory<epc-memory>`
      - 
      - 
    * - |nbsp| |nbsp| data
      - [0000 0000 0000 0000 0000 0000]
      - This will result in the device checking that the EPC length is 96 bits. 

.. _encoder-config:

Encoder
+++++++
The role of the Encoder is to encode a configured subset of the overall encoding
configuration. These devices will need to be provided with a 
:ref:`TIDTableEntry<tid-table-entry>` for each tag from the Machine Control 
Application, allowing the device to interact with tags in a non-sequential 
order. To distribute the encoding work, each Encoder should be configured with a
different :ref:`OperationResponsibility<operation-responsibility>`. There can be
some tradeoffs between throughput and reliability made here. To increase
throughput, each Encoder should be configured to perform the least amount of 
encoding operations possible (ie, one 32 bit block of the EPC). To increase
reliability, the Encoders should be configured with redundant responsibilities.
In the example configuration below, the first Encoder is responsible for the 
first and second EPC blocks, the second Encoder is responsible for the second
and third EPC blocks, and the third Encoder acts as a catch-all for all three 
blocks.

.. note:: If sending a :ref:`LockConfig<lock-config>`, the last encoder in the pipeline should always be the only device responsible for it. This prevents downstream tag access issues.

Encoder 1 Example Configuration
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

.. list-table:: 
    :header-rows: 1
    :widths: 20 25 65

    * - Parameter
      - Value
      - Rationale
    * - :ref:`device_config<device-config>`
      - 
      - 
    * - |nbsp| :ref:`device_mode<device-mode>`
      - DEVICE_MODE_ENCODE
      - This device does encoding work.
    * - |nbsp| :ref:`operation_mode<operation-mode>`
      - OPERATION_MODE_CONTINUOUS
      - Since this device will have TIDTableEntry for all tags, it does not 
        matter what order it sees them in. 
    * - |nbsp| :ref:`operation_responsibility<operation-responsibility>`
      -
      -
    * - |nbsp| |nbsp| EPC_memory_mask
      - [C000] 
      - This device will only write the first two 32 bit blocks.
    * - |nbsp| |nbsp| tags_in_view_count
      - 5
      - This should be set to the number of tags in the Field of View.
    * - |nbsp| |nbsp| tags_in_pipeline_view_count
      - 400
      - This should be set to ~2x max number of tags between Localizer and 
        Verifier.
    * - |nbsp| |nbsp| :ref:`downstream_pipeline_devices<stp-device>`
      -
      -
    * - |nbsp| |nbsp| |nbsp| hostname
      - "Encoder2"
      - This should be the hostname/IP of Encoder 2. It configures Encoder 1 to
        send operation data to Encoder 2.
    * - |nbsp| |nbsp| :ref:`downstream_pipeline_devices<stp-device>`
      -
      -
    * - |nbsp| |nbsp| |nbsp| hostname
      - "Encoder3"
      - This should be the hostname/IP of Encoder 3. It configures Encoder 1 to
        send operation data to Encoder 3.
    * - |nbsp| |nbsp| :ref:`downstream_pipeline_devices<stp-device>`
      -
      -
    * - |nbsp| |nbsp| |nbsp| hostname
      - "Verifier"
      - This should be the hostname/IP of the Verifier. It configures Encoder 1 
        to send operation data to the Verifier.
    * - |nbsp| |nbsp| :ref:`device_of_record<stp-device>`
      -
      -
    * - |nbsp| |nbsp| |nbsp| hostname
      - "Verifier"
      - This should be the hostname/IP of the Verifier. It configures Encoder 1 
        to request License Authentication from the Verifier.
    * -
      -
      -
    * - :ref:`antennas_config<antennas-config>`
      -
      -
    * - |nbsp| :ref:`antenna_config<antenna-config>`
      -
      -
    * - |nbsp| |nbsp| antenna_ID
      - 1
      - Only needs a single antenna.
    * - |nbsp| |nbsp| :ref:`gen2_mode<gen2-mode>`
      - GEN2_MODE_MAX_THROUGHPUT
      - To maximize throughput, the fastest mode is used.
    * - |nbsp| |nbsp| :ref:`inventory_search_mode<inventory-search-mode>`
      - INVENTORY_SEARCH_MODE_SINGLE_TARGET_A_TO_B
      - Session 1 will be in the A state for all tags.
    * - |nbsp| |nbsp| :ref:`gen2_session<gen2-session>`
      - GEN2_SESSION_1
      - Session 1 will be in the A state for all tags.
    * - |nbsp| |nbsp| transmit_power
      - 2000
      - Power should be set to the lowest possible value that can still see the
        tags in the Field of View.
    * - |nbsp| |nbsp| tag_population_estimate
      - 5
      - This should be set to the number of tags in the Field of View.
    * -
      - 
      - 
    * - :ref:`serialization_job<serialization-job>`
      - 
      - 
    * - |nbsp| job_id
      - 1
      -
    * - |nbsp| :ref:`job_type<serialization-job-type>`
      - SERIALIZATION_JOB_TYPE_TID_TABLE
      - TID Table Mode is used to keep all Encoders in sync with the operations
        for a tag.
    * - |nbsp| TID_table_size
      - 400
      - This should be set to ~2x max number of tags between Localizer and 
        Verifier.

Encoder 2 Example Configuration
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

.. list-table:: 
    :header-rows: 1
    :widths: 20 25 65

    * - Parameter
      - Value
      - Rationale
    * - :ref:`device_config<device-config>`
      - 
      - 
    * - |nbsp| :ref:`device_mode<device-mode>`
      - DEVICE_MODE_ENCODE
      - This device does encoding work.
    * - |nbsp| :ref:`operation_mode<operation-mode>`
      - OPERATION_MODE_CONTINUOUS
      - Since this device will have TIDTableEntry for all tags, it does not 
        matter what order it sees them in. 
    * - |nbsp| :ref:`operation_responsibility<operation-responsibility>`
      -
      -
    * - |nbsp| |nbsp| EPC_memory_mask
      - [6000] 
      - This device will only write the last two 32 bit blocks.
    * - |nbsp| |nbsp| tags_in_view_count
      - 5
      - This should be set to the number of tags in the Field of View.
    * - |nbsp| |nbsp| tags_in_pipeline_view_count
      - 400
      - This should be set to ~2x max number of tags between Localizer and 
        Verifier.
    * - |nbsp| |nbsp| :ref:`downstream_pipeline_devices<stp-device>`
      -
      -
    * - |nbsp| |nbsp| |nbsp| hostname
      - "Encoder3"
      - This should be the hostname/IP of Encoder 3. It configures Encoder 2 to
        send operation data to Encoder 3.
    * - |nbsp| |nbsp| :ref:`downstream_pipeline_devices<stp-device>`
      -
      -
    * - |nbsp| |nbsp| |nbsp| hostname
      - "Verifier"
      - This should be the hostname/IP of the Verifier. It configures Encoder 2 
        to send operation data to the Verifier.
    * - |nbsp| |nbsp| :ref:`device_of_record<stp-device>`
      -
      -
    * - |nbsp| |nbsp| |nbsp| hostname
      - "Verifier"
      - This should be the hostname/IP of the Verifier. It configures Encoder 2
        to request License Authentication from the Verifier.
    * -
      -
      -
    * - :ref:`antennas_config<antennas-config>`
      -
      -
    * - |nbsp| :ref:`antenna_config<antenna-config>`
      -
      -
    * - |nbsp| |nbsp| antenna_ID
      - 1
      - Only needs a single antenna.
    * - |nbsp| |nbsp| :ref:`gen2_mode<gen2-mode>`
      - GEN2_MODE_MAX_THROUGHPUT
      - To maximize throughput, the fastest mode is used.
    * - |nbsp| |nbsp| :ref:`inventory_search_mode<inventory-search-mode>`
      - INVENTORY_SEARCH_MODE_SINGLE_TARGET_A_TO_B
      - Session 2 will be in the A state for all tags.
    * - |nbsp| |nbsp| :ref:`gen2_session<gen2-session>`
      - GEN2_SESSION_2
      - Session 2 will be in the A state for all tags.
    * - |nbsp| |nbsp| transmit_power
      - 2000
      - Power should be set to the lowest possible value that can still see the
        tags in the Field of View.
    * - |nbsp| |nbsp| tag_population_estimate
      - 5
      - This should be set to the number of tags in the Field of View.
    * -
      - 
      - 
    * - :ref:`serialization_job<serialization-job>`
      - 
      - 
    * - |nbsp| job_id
      - 1
      -
    * - |nbsp| :ref:`job_type<serialization-job-type>`
      - SERIALIZATION_JOB_TYPE_TID_TABLE
      - TID Table Mode is used to keep all Encoders in sync with the operations
        for a tag.
    * - |nbsp| TID_table_size
      - 400
      - This should be set to ~2x max number of tags between Localizer and 
        Verifier.

Encoder 3 Example Configuration
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

.. list-table:: 
    :header-rows: 1
    :widths: 20 25 65

    * - Parameter
      - Value
      - Rationale
    * - :ref:`device_config<device-config>`
      - 
      - 
    * - |nbsp| :ref:`device_mode<device-mode>`
      - DEVICE_MODE_ENCODE
      - This device does encoding work.
    * - |nbsp| :ref:`operation_mode<operation-mode>`
      - OPERATION_MODE_CONTINUOUS
      - Since this device will have TIDTableEntry for all tags, it does not 
        matter what order it sees them in. 
    * - |nbsp| :ref:`operation_responsibility<operation-responsibility>`
      -
      -
    * - |nbsp| |nbsp| EPC_memory_mask
      - [E000] 
      - This device will only write all three 32 bit blocks.
    * - |nbsp| |nbsp| tags_in_view_count
      - 5
      - This should be set to the number of tags in the Field of View.
    * - |nbsp| |nbsp| tags_in_pipeline_view_count
      - 400
      - This should be set to ~2x max number of tags between Localizer and 
        Verifier.
    * - |nbsp| |nbsp| :ref:`downstream_pipeline_devices<stp-device>`
      -
      -
    * - |nbsp| |nbsp| |nbsp| hostname
      - "Verifier"
      - This should be the hostname/IP of the Verifier. It configures Encoder 3 
        to send operation data to the Verifier.
    * - |nbsp| |nbsp| :ref:`device_of_record<stp-device>`
      -
      -
    * - |nbsp| |nbsp| |nbsp| hostname
      - "Verifier"
      - This should be the hostname/IP of the Verifier. It configures Encoder 3 
        to request License Authentication from the Verifier.
    * -
      -
      -
    * - :ref:`antennas_config<antennas-config>`
      -
      -
    * - |nbsp| :ref:`antenna_config<antenna-config>`
      -
      -
    * - |nbsp| |nbsp| antenna_ID
      - 1
      - Only needs a single antenna.
    * - |nbsp| |nbsp| :ref:`gen2_mode<gen2-mode>`
      - GEN2_MODE_MAX_THROUGHPUT
      - To maximize throughput, the fastest mode is used.
    * - |nbsp| |nbsp| :ref:`inventory_search_mode<inventory-search-mode>`
      - INVENTORY_SEARCH_MODE_SINGLE_TARGET_A_TO_B
      - Session 3 will be in the A state for all tags.
    * - |nbsp| |nbsp| :ref:`gen2_session<gen2-session>`
      - GEN2_SESSION_3
      - Session 3 will be in the A state for all tags.
    * - |nbsp| |nbsp| transmit_power
      - 2000
      - Power should be set to the lowest possible value that can still see the
        tags in the Field of View.
    * - |nbsp| |nbsp| tag_population_estimate
      - 5
      - This should be set to the number of tags in the Field of View.
    * -
      - 
      - 
    * - :ref:`serialization_job<serialization-job>`
      - 
      - 
    * - |nbsp| job_id
      - 1
      -
    * - |nbsp| :ref:`job_type<serialization-job-type>`
      - SERIALIZATION_JOB_TYPE_TID_TABLE
      - TID Table Mode is used to keep all Encoders in sync with the operations
        for a tag.
    * - |nbsp| TID_table_size
      - 400
      - This should be set to ~2x max number of tags between Localizer and 
        Verifier.

.. _verifier-config:

Verifier
++++++++
The role of the Verifier is to ensure that all encoding operations were 
completed successfully. These devices will also need to be provided with a 
:ref:`TIDTableEntry<tid-table-entry>` for each tag from the Machine Control
Application. However, unlike the Encoders, it will need to singulate each tag
sequentially to make sure no tags are missed. Similar to the Localizer, this 
will likely require GPI triggers to start and stop the device.

.. note:: The Verifier does not require a Device Of Record in this example because it is the Device of Record for the system.

Verifier Example Configuration
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

.. list-table::
    :header-rows: 1
    :widths: 20 25 65

    * - Parameter
      - Value
      - Rationale
    * - :ref:`device_config<device-config>`
      - 
      - 
    * - |nbsp| :ref:`device_mode<device-mode>`
      - DEVICE_MODE_VERIFY_TAG_CHIP_DATA
      - Verifier takes all of the operation data from the upstream Encoders and
        ensures that all required work was completed successfully.
    * - |nbsp| :ref:`operation_mode<operation-mode>`
      - OPERATION_MODE_SINGLE
      - Verifier should stop right after it reads a tag.
    * - |nbsp| :ref:`operation_responsibility<operation-responsibility>`
      -
      -
    * - |nbsp| |nbsp| tags_in_pipeline_view_count
      - 400
      - This should be set to ~2x max number of tags between Localizer and 
        Verifier.
    * - |nbsp| :ref:`trigger_config<trigger-config>`
      -
      -
    * - |nbsp| |nbsp| :ref:`start_trigger_config<start-trigger-config>`
      - 
      - 
    * - |nbsp| |nbsp| |nbsp| enable_gpi_start_trigger
      - true
      - Uses GPI Start Trigger for lowest latency start.
    * - |nbsp| |nbsp| :ref:`stop_trigger_config<stop-trigger-config>`
      - 
      - 
    * - |nbsp| |nbsp| |nbsp| enable_gpi_stop_trigger
      - false
      - In Single mode, the device will stop after seeing a single tag, so it
        does not need a GPI stop trigger.
    * - |nbsp| :ref:`gpi_config<gpi-config>`
      -
      -
    * - |nbsp| |nbsp| :ref:`signaling_mode<gpio-signal-mode>`
      - GPIO_SIGNAL_MODE_COMBINED
      - Since the device is not using a GPI Stop, it only needs the single GPI 
        for the Start.
    * - |nbsp| |nbsp| :ref:`GPI2_polarity<gpio-polarity>`
      - GPIO_POLARITY_ACTIVE_LOW
      - GPI2 triggers the Start. This can be High or Low depending on machine
        preference.
    * - |nbsp| :ref:`gpo_config<gpo-config>`
      - 
      - 
    * - |nbsp| |nbsp| :ref:`signaling_mode<gpio-signal-mode>`
      - GPIO_SIGNAL_MODE_SEPARATE
      - This will use separate GPOs for pass and fail.
    * - |nbsp| |nbsp| :ref:`GPO1_polarity<gpio-polarity>`
      - GPIO_POLARITY_ACTIVE_LOW
      - GPO1 indicates whether the device is Operating or not. This can be High
        or Low depending on machine preference.
    * - |nbsp| |nbsp| :ref:`GPO2_polarity<gpio-polarity>`
      - GPIO_POLARITY_ACTIVE_LOW
      - GPO2 indicates whether the operation passed. This can be High or Low 
        depending on machine preference.
    * - |nbsp| |nbsp| :ref:`GPO3_polarity<gpio-polarity>`
      - GPIO_POLARITY_ACTIVE_LOW
      - GPO3 indicates whether the operation failed. This can be High or Low 
        depending on machine preference.
    * - |nbsp| :ref:`report_config<report-config>`
      -
      -
    * - |nbsp| |nbsp| :ref:`tag_operation_report_config<tag-operation-report-config>`
      - 
      - 
    * - |nbsp| |nbsp| |nbsp| enable_tag_operation_reports
      - true
      - TagOperationReports from the Verifier serve as the final report of all
        work done to the tag.
    * -
      -
      -
    * - :ref:`antennas_config<antennas-config>`
      -
      -
    * - |nbsp| :ref:`antenna_config<antenna-config>`
      - 
      - 
    * - |nbsp| |nbsp| antenna_ID
      - 1
      - Only needs a single antenna.
    * - |nbsp| |nbsp| :ref:`gen2_mode<gen2-mode>`
      - GEN2_MODE_MAX_THROUGHPUT
      - To maximize throughput, the fastest mode is used.
    * - |nbsp| |nbsp| :ref:`inventory_search_mode<inventory-search-mode>`
      - INVENTORY_SEARCH_MODE_SINGLE_TARGET_A_TO_B
      - Sessions 0 will be in the A state for all tags.
    * - |nbsp| |nbsp| :ref:`gen2_session<gen2-session>`
      - GEN2_SESSION_0
      - Sessions 0 will be in the A state for all tags.
    * - |nbsp| |nbsp| transmit_power
      - 1200
      - Power should be set to the lowest possible value that can still see the
        tags in the Field of View.
    * - |nbsp| |nbsp| tag_population_estimate
      - 1
      - Only one tag should be in the Field of View at any time.
    * -
      -
      -
    * - :ref:`serialization_job<serialization-job>`
      - 
      - 
    * - |nbsp| job_id
      - 1
      - 
    * - |nbsp| :ref:`job_type<serialization-job-type>`
      - SERIALIZATION_JOB_TYPE_TID_TABLE
      - TID Table Mode is used to keep the Verifier in sync with the operations
        for a tag.
    * - |nbsp| TID_table_size
      - 400
      - This should be set to ~2x max number of tags between Localizer and 
        Verifier.
